(58)【調査した分野】(Int.Cl.,DB名)
少なくとも部分的にハードウェアロジックを有し、グラフィックス処理装置(GPU)上で実行する1又は複数のスレッドを、前記1又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させるためのロジックを備える装置であって、
前記1又は複数のスレッドのコンテキストデータは、前記命令レベル粒度で前記1又は複数のスレッドの完了に応答して、前記1又は複数のスレッドが停止した後に、メモリにコピーされ、
前記コンテキストデータは、スレッドスポーナロジック、実行ユニットコンプレックス、および共有ローカルメモリ(SLM)の少なくとも一つからのものであり、
前記装置は、前記スレッドスポーナロジック、前記実行ユニットコンプレックス、および前記SLMの各々と前記メモリとを結合するマルチプレクサを備える
装置。
前記1又は複数のスレッドの前記コンテキストデータは、1又は複数のソフトウェア命令に応答して、前記メモリにコピーされる、請求項1から4のいずれか一項に記載の装置。
前記ロジックは、前記GPU上で実行する全ての複数のスレッドを、前記要求に応答して、前記命令レベル粒度で停止させるためのものである、請求項1から5のいずれか一項に記載の装置。
1又は複数のプロセッサコアを有するプロセッサ、前記ロジック、又は前記メモリのうち1又は複数は、単一の集積回路ダイ上にある、請求項1から9のいずれか一項に記載の装置。
グラフィックス処理装置(GPU)上で実行する1又は複数のスレッドを、前記1又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させる段階を備える方法であって、
前記1又は複数のスレッドのコンテキストデータは、前記命令レベル粒度で前記1又は複数のスレッドの完了に応答して、前記1又は複数のスレッドが停止した後に、メモリにコピーされ、
前記コンテキストデータは、スレッドスポーナロジック、実行ユニットコンプレックス、および共有ローカルメモリ(SLM)の少なくとも一つからのものであり、前記スレッドスポーナロジック、前記実行ユニットコンプレックス、および前記SLMの各々は、マルチプレクサを介して前記メモリと結合される
方法。
前記1又は複数のスレッドの前記コンテキストデータを、1又は複数のソフトウェア命令に応答して、前記メモリにコピーさせる段階を更に備える、請求項11に記載の方法。
前記1又は複数のスレッドの前記コンテキストデータは、1又は複数のソフトウェア命令に応答して、前記メモリにコピーされる、請求項16又は17に記載のシステム。
前記ロジックは、前記GPU上で実行する全ての複数のスレッドを、前記要求に応答して、前記命令レベル粒度で停止させるためのものである、請求項16から18のいずれか一項に記載のシステム。
【発明を実施するための形態】
【0004】
以下の記載において、様々な実施形態の完全な理解を提供すべく、多数の具体的な詳細が記載される。しかしながら、様々な実施形態は、具体的な詳細なく実施され得る。他の例において、特定の実施形態を不明瞭しないように、周知の方法、手順、コンポーネント及び回路が、詳細には説明されていない。更に、実施形態の様々な態様は、半導体集積回路(「ハードウェア」)、1又は複数のプログラムにまとめられるコンピュータ可読命令(「ソフトウェア」)、又は、ハードウェア及びソフトウェアのいくつかの組み合わせのような、様々な手段を用いて実行され得る。本開示の目的のために、「ロジック」への言及は、ハードウェア、ソフトウェア、ファームウェア、又は、それらのいくつかの組み合わせのいずれかを意味するものとする。
【0005】
いくつかの実施形態は、ソフトウェア援助コンテキストスイッチを有するミッドスレッドプリエンプションを提供する。実施形態は、GPGPUカーネルミッドスレッドをプリエンプト、又は割り込みをする。システムの状態は保存され、プリエンプトされたカーネルを完了までに向けて実行し続けるべく、後の時点で復元され得る。それに対して、他の解決策は、ワークロードの完了に完全に依存するか、又は異なるワークロードに切り替えることが可能な前に、はるかに粗い粒度でのワークロードの完了に依存するかのいずれかとなり得る。
【0006】
例えば、スレッドグループ内の複数のスレッドが実行のためにディスパッチされる場合、いくつかの解決策は、そのディスパッチをスレッドグループの境界のみでプリエンプトする、仕組みを提供し得る。任意のディスパッチされたスレッドは次に、それらのタスクを完了することを必要とする。これにより、GPUの重大な割り込みへのレスポンスタイムを増加する。ミッドスレッドプリエンプションでもって、既に実行モードにある全てのスレッドは、任意の命令境界で割り込まれ得る。これにより、同様にワークロード間の切り替え性能を改善する。
【0007】
本明細書で説明されるように、GPGPUは、グラフィックス処理装置(GPU)による汎用計算を指す。GPUは、グラフィックスロジック、又は画像、フレーム、シーン等を操作する処理のようなグラフィックスタスクに関連する計算を通常実行するるが、GPGPUの場合、汎用計算を実施又は実行することも可能である他のタイプのロジックを含み得。いくつかの実施形態は、グラフィックスロジックを参照して説明される一方で、実施形態は、グラフィックに関するロジックに限定されず、他のタイプの非グラフィック(例えば、汎用)ロジックにまた適用され得る。更に、実施形態において、SOC(システム・オン・チップ)プラットフォーム上で実施され得る、デスクトップコンピュータ、(スマートフォン、タブレット、UMPC(ウルトラモバイルパーソナルコンピュータ)、ラップトップコンピュータ、ウルトラブック(商標)コンピューティングデバイス、スマートウォッチ、スマートメガネ等のような)モバイルコンピュータ、ワークステーション等のような任意のタイプのコンピューティングデバイスに対して、様々な実施形態が実行され得る。
【0008】
従って、いくつかの実施形態は、例えば、ワークロードが、より高優先度の処理を優先させるべく、完了前に停止されることを必要とする場合、他のアプリケーションに用いられる得る非常に柔軟な解決策を提供する。いくつかの実施形態は、アプリケーション要求に対するハードウェアの応答性を改善する。それらはまた、グラフィックスロジックが、多目的となることを可能にする。
【0009】
いくつかの実施形態は、
図1から8を参照して説明されるもののような、例えば、スマートフォン、タブレット、UMPC(ウルトラモバイルパーソナルコンピュータ)、ラップトップコンピュータ、ウルトラブック(商標)コンピューティングデバイス、スマートウォッチ、スマートメガネ等のようなモバイルコンピューティングデバイスを含む、1又は複数のプロセッサ(例えば、1又は複数のプロセッサコアを有する)を含むコンピューティングシステムにおいて適用され得る。より具体的には、
図1は、実施形態に係るコンピューティングシステム100のブロック図を示す。システム100は、(本明細書で、概して、「複数のプロセッサ102」又は「プロセッサ102と称される)1又は複数のプロセッサ102−1から102−Nを含み得る。複数のプロセッサ102は、様々な実施形態において汎用CPU、及び/又はGPUであり得る。複数のプロセッサ102は、相互接続又はバス104を介して通信をし得る。各プロセッサは、様々なコンポーネントを含み得る。記述を明瞭にすることを目的として、それらのうちのいくつかは、プロセッサ102−1のみを参照して説明される。従って、残りのプロセッサ102−2から102−Nのそれぞれは、プロセッサ102−1を参照して説明される同一又は類似のコンポーネントを含み得る。
【0010】
実施形態において、プロセッサ102−1は、(本明細書において、「複数のコア106」又は「コア106」と称される)1又は複数のプロセッサコア106−1から106−M、キャッシュ108、及び/又は、ルータ110を含み得る。複数のプロセッサコア106は、単一の集積回路(IC)チップ上に実装され得る。更に、チップは、(キャッシュ108のような)1又は複数の共有及び/又は専用キャッシュ、(バス又は相互接続112のような)バス又は相互接続、(例えば、
図6から8を参照して説明されるもののような)グラフィックス及び/又はメモリコントローラ、又は、他のコンポーネントを含み得る。
【0011】
一実施形態において、ルータ110は、プロセッサ102−1及び/又はシステム100の様々なコンポーネントの間で通信するのに用いられ得る。更に、プロセッサ102−1は、1より多いルータ110を含み得る。更に、多数のルータ110は、プロセッサ102−1の内部又は外部の様々なコンポーネントの間でデータをルーティングすることを可能にすべく、通信し得る。
【0012】
キャッシュ108は、複数のコア106のような、プロセッサ102−1の1又は複数のコンポーネントにより用いられるデータ(例えば、命令を含む)を格納し得る。例えば、キャッシュ108は、プロセッサ102のコンポーネントによる高速アクセス(例えば、複数のコア106による高速アクセス)のために、メモリ114に格納されたデータを、ローカルにキャッシュし得る。
図1に示されるように、メモリ114は、相互接続104を介して、複数のプロセッサ102と通信し得る。実施形態において、(共有され得る)キャッシュ108は、ミッドレベルキャッシュ(MLC)、ラストレベルキャッシュ(LLC)等であり得る。また、複数のコア106のそれぞれは、(本明細書で概して、「L1キャッシュ116」と称される)レベル1(L1)キャッシュ(116−1)、又は、レベル2(L2)キャッシュのような、他のレベルのキャッシュを含み得る。更に、プロセッサ102−1の様々なコンポーネントは、バス(例えば、バス112)及び/又はメモリコントローラ若しくはハブを通じて、キャッシュ108と直接的に通信し得る。
【0013】
図1で示されるように、プロセッサ102は、本明細書で説明されるもののような様々なグラフィックス及び/又は汎用計算に関する処理を実行するグラフィックスロジック140を更に含み得る。ロジック140は、ここで説明されるようなシステム100の様々なコンポーネントと通信される情報のような、ロジック140の処理に関連する情報を格納すべく、(システム100におけるキャッシュ108、L1キャッシュ116、メモリ114、レジスタ、又は別のメモリのような)本明細書で説明される1又は複数のストレージデバイスへのアクセスを有し得る。また、ロジック140は、プロセッサ102内部に示される一方で、様々な実施形態において、システム100における他の箇所に位置され得る。例えば、ロジック140は、複数のコア106の1つに置き換ってよく得、相互接続112及び/又は相互接続104等に直接的に結合され得る。
【0014】
概して、ハードウェア(例えば、ロジック140)における状態は、以下のように分類され得る。(a)固定機能ハードウェアにおける状態、(b)スレッド(すなわち、レジスタ及び命令ポインタ等)の状態、(c)SLM(又は、中間結果のキャッシング/ストレージ、並びに、そうでなければ、例えば頻繁に再利用されるべきバッファされたデータを含む、グローバル/メインメモリを対象とする他のスキャッタ/ギャザ−処理のためにグラフィックスロジック/GPUにより用いられるメモリを指す共有ローカルメモリ)。例えば、SLMは、異なるスレッドを求める処理をサポートし得、それらの間でデータを共有、及び/又はデータを渡す。
【0015】
いくつかのコンテキスト保存及び復元処理は、ステートマシンとしてハードウェアに構築され得、例えば、停止条件の場合、DMA(ダイレクトメモリアクセス)エンジン/ロジックのいくつかの形態は、全てのハードウェア状態を、所定の位置におけるメモリに書込み、所定のシーケンスに従う。実施形態において、プログラム可能なエンジン(グラフィックスロジック/GPUのEU又は実行ユニット)における既存制御は、スレッドのコンテンツを、ソフトウェアからの援助でメモリに移動するのに用いられる。主にデバッグのために用いられる例外処理ハードウェア/ロジックは、この目的のために拡張され得る。また、カーネルは、ハードウェアのいくつかのコンテキストをメモリに移動することが可能であるシステムルーチンにジャンプし得る。
【0016】
この仕組みは、割り込みに応答して、EUの状態を保存するのに用いられ得る。いくつかの特徴が既に存在し得るが、それらは概して、いくつかのレジスタのみを処理することに限定され、スレッド状態の全ては保存されなくてもよい。加えて、システムルーチンの処理は、そのルーチンが、完了後にアプリケーションルーチンに戻ることを求める。実施形態において、システムは、システムルーチン完了後に終了することが可能である。その変化が
図2に示され、そこでは、いくつかの実施形態に係る、プリエンプションを処理するための異なるケースを示す。
【0017】
3つのケースが、
図2に以下のように示される。 ケースA:既存のシステムルーチンハンドラは、所与のアプリケーションルーチンから開始する。起動される新たなスレッドは、アプリケーションルーチンである。システムルーチンは、完了のためにアプリケーションルーチンに戻る。 ケースB:実施形態は、システムルーチンが、メモリへの書込処理を完了し、アプリケーションルーチンに戻ることなくワークロードを終了する方法を提供する。これにより、新たなワークロードの起動を可能にする。 ケースC:一実施形態は、システムルーチンでもってスレッドを開始し、次に、ワークロードを終了まで完了するアプリケーションルーチンに移動する方法を提供する。
【0018】
図3は、実施形態に係る、グラフィックスロジック140のコンポーネントのブロック図を示す。
図3に示されるように、グラフィックスロジック140は、(例えば、レガシコンテキスト保存パスを提供することを含む、1又は複数のソフトウェアスレッドをスポーンする)スレッドスポーナ302と、(例えば、システムルーチンにより開始されるサイクルデータを保存することを含む、命令を実行する1又は複数の実行ユニットを含む)EUコンプレックスロジックと、(例えば、DMA書込み処理を含む共有ローカルメモリ機能を格納及び処理する)SLM306と、(本明細書に説明されるもののような、SLM306からのSLMデータを含む、グラフィックスロジック140の処理に関連するデータを格納する)メモリ308とを含む。メモリ308は、
図1から8を参照して本明細書で説明されるもののような、例えば、キャッシュを含む、任意のタイプのメモリであり得る。また、マルチプレクサ310は、メモリ308を、ロジック302及び304、並びにSLM306に結合する。実施形態において、グラフィックハードウェア/ロジック140の状態を保存するシーケンスは、以下の通りである。
【0019】
(a)割り込みがあると、固定機能(例えば、スレッドスポーナロジック302)は、(例えば、EUコンプレックス304におけるEUの)パイプラインに新たなスレッドがスポーンされないことを確実にする。 (b)固定機能(例えば、スレッドスポーナロジック302)は、実行を停止するスレッドを要求する。 (c)スレッドは、パイプラインにおける任意の現行保留サイクルを完了し、停止を完了する。 (d)システムがアイドルになるとき、スレッドはシステムルーチンを続行する。 (e)システムルーチンは、中間レジスタ、フロー制御ポインタ、スタック、アーキテクチャ制御レジスタ等のような(実施形態において、全てのワークがソフトウェアで処理される)スレッドのハードウェア状態を、メモリ308(例えば、一実施形態においてそのような移動の位置が予め定められる)に移動する。 (f)全てのスレッドがデータ移動を完了したとき、システムルーチンは、制御を(SLM306のようなDMAエンジンへのアクセスをまた有する)固定機能に移動する。 (g)このDMAはここで、SLM306のデータをメモリ308に移動する。 (h)このDMAの移動が完了するとき、バリアを処理するパイプラインステート、ウォーカーステート、及び中間ステートマシンのようなステートの残りは、全てコンテキストに保存される。 (i)ハードウェアはここで、新たなコンテキストをバッファを消去し及び実行することが可能である。
【0020】
それに対して、以前の解決策は、そのようなデータ移動を処理すべく、所定のハードウェアステートマシンの使用を含んでいた。いくつかの実施形態を通じて、新たなハイブリッドアプローチは、ソフトウェアアプローチが用いられるため、柔軟性を改善し、リスクを減らす。
【0021】
図4は、実施形態に係る、グラフィックスロジック140のコンテキストを保存、及び復元するのに用いられる所定のメモリマップを示す。示されるように、最大64KBの領域がSLMごとに割り当てられる。これは、対応するEU上で実行する各スレッドに対する専用領域に続く。また、実施形態において、スレッドステートは、8KBの事前に割り当てられた領域に保存される(GRF(汎用レジスタファイル)レジスタ、ARF(アーキテクチャレジスタファイル)レジスタ、及び任意選択でいくつかの確保された領域に分割される)。他の、事前に割り当てられた領域は、実装及び保存されるべきデータの量に応じて、用いられ得る。
【0022】
図5は、いくつかの実施形態に係る、ソフトウェア援助コンテキストスイッチを有するミッドスレッドプリエンプションを実行する方法500のフロー図を示す。
図1から4、及び6から8を参照して本明細書で説明される1又は複数のコンポーネント(例えば、グラフィックスロジック140を含む)は、
図5を参照して説明される1又は複数の処理を実行するのに用いられ得る。
【0023】
図1から5を参照して、(例えば、ミッドスレッド、又はそうでなければ、GPU上で実行する1又は複数のスレッドの実行の間で)プリエンプション要求が(例えば、割り込みを介して)一旦検出されると、処理504にて、システムにおける全てのスレッドの任意の実行が、例えば、命令レベル粒度で停止される。実施形態において、プリエンプション要求は、他のスレッド又は処理は、現在実行しているスレッドの実行をプリエンプトすることを示す。現在実行するスレッド及び/又は他のプリエンプトするスレッド若しくは処理は、GPGPUとして実行され得る。
【0024】
処理506にて、残りのシステムをアイドル状態にもたらすべく、パイプラインにおける全ての保留タスクが完了しているか否か(例えば、全ての実行中のスレッドが、命令レベル粒度でそれらのタスクを完了したか)が判断される。 処理508にて、仕組みのハードウェア/ソフトウェアの組み合わせは、スレッド及びSLMデータを含むコンテキストを、(
図3を参照して説明されるもののような)メモリに移動/コピーするのに用いられる。例えば、コンテキストデータは、1又は複数のソフトウェア命令に応答して、メモリ308にコピーされ得る。処理510にて、(例えば、プリエンプション要求に対応する、又はそうでなければその生成を生じる)新たなワークロード/スレッドは、実行を可能にし、また、仕組みは、保存されたワークロードを、(
図3を参照して説明されるもののように)それが前に停止されたところから継続するよう提供される。
【0025】
上記で説明された保存シーケンスの類似シーケンスは、前に保存されたコンテキストを復元するのに用いられ得る。より具体的には、
図5Aは、いくつかの実施形態に係る、前に保存されたコンテキストを復元する方法550のフロー図を示す。
図1から5及び6から8を参照して本明細書で説明される1又は複数のコンポーネント(例えば、グラフィックスロジック140を含む)は、
図5Aを参照して説明される1又は複数の処理を実行するのに用いられ得る。実施形態において、
図5Aを参照して説明される全てのデータフローは、メモリからハードウェア/ロジック140にわたる。
【0026】
図1から5Aを参照して、コンテキストスイッチが処理552にて開始される。処理554は、開始されたコンテキストが新しいか否かを判断する。コンテキストが新しい又は以前に保存されているか否かに応じて、方法550は、処理556又は558から560に続く。コンテキストが新しい場合、処理556は、新しいコンテキストを実行し、そうでなければ、処理558は、対応するシステムルーチンを呼び出し、以前に保存されたコンテキストに対するデータ復元シーケンスを開始する。処理560にて、復元が一旦完了すると、システムルーチンは、次のアプリケーションルーチンに移動する。例えば、全てのステート情報が復元された後、システムは、アプリケーションカーネルポインターにジャンプし、ワークロードの完了まで実行を続ける。
【0027】
図6は、実施形態に係るコンピューティングシステム600のブロック図を示す。コンピューティングシステム600は、相互接続ネットワーク(又はバス)604を介して、通信を行う1又は複数の中央処理装置(CPU)602、又はプロセッサを含み得る。プロセッサ602は、汎用プロセッサ、(コンピュータネットワーク603を介して通信されるデータを処理する)ネットワークプロセッサ、又は(縮小命令セットコンピュータ(RISC)プロセッサ若しくは複合命令セットコンピュータ(CISC)を含む)他のタイプのプロセッサを含み得る。
【0028】
更に、プロセッサ602は、シングル又はマルチコア設計を有し得る。マルチコア設計を有するプロセッサ602は、異なるタイプのプロセッサコアを、同一の集積回路(IC)ダイ上に集積し得る。また、マルチコア設計を有するプロセッサ602は、対称型又は非対称型のマルチプロセッサとして実装され得る。実施形態において、プロセッサ602のうちの1又は複数は、
図1のプロセッサ102と同一又は類似であり得る。例えば、システム600の1又は複数のコンポーネントは、
図1から5を参照して説明された、ロジック140を含み得る。また、
図1から5を参照して説明された処理は、システム600の1又は複数のコンポーネントにより実行され得る。
【0029】
チップセット606はまた、相互接続ネットワーク604と通信し得る。チップセット606は、(
図6に示されたもののような)システム600の様々なコンポーネントに位置され得る、グラフィックス・メモリ・コントロール・ハブ(GMCH)608を含み得る。GMCH608は、(
図1のメモリ114と同一又は類似であり得る)メモリ612と通信を行うメモリコントローラ610を含み得る。メモリ612は、CPU602又はコンピューティングシステム600に含まれる任意の他のデバイススにより実行され得る、命令のシーケンスを含むデータを格納し得る。一実施形態において、メモリ612は、ランダムアクセスメモリ(RAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、スタティックRAM(SRAM)又は他のタイプのストレージデバイスのような、1又は複数の揮発性ストレージ(又はメモリ)デバイスを含み得る。ハードディスクのような不揮発性メモリもまた、用いられ得る。追加的なデバイスは、複数のCPU及び/又は複数のシステムメモリのような相互接続ネットワーク604を介して通信し得る。
【0030】
GMCH608はまた、ディスプレイデバイス616と通信を行う、グラフィックスインタフェース614を含み得る。一実施形態において、グラフィックスインタフェース614は、アクセラレーティッドグラフィックポート(AGP)又は周辺機器相互接続(PCI)(又は、PCIエクスプレス(PCIe)インタフェース)を介して、ディスプレイデバイス616と通信し得る。実施形態において、(フラットパネルディスプレイのような)ディスプレイ616は、例えば、ビデオメモリ又はシステムメモリのようなストレージデバイスに格納された、画像のデジタル表現を、ディスプレイ616によって解釈され、表示される表示信号に変換する信号変換器を通じて、グラフィックスインタフェース614と通信を行い得る。ディスプレイデバイスによって生成される表示信号は、ディスプレイ616によって解釈され、その次にそこに表示される前に、様々な制御デバイスを通り得る。
【0031】
ハブインタフェース618は、GMCH608及び入出力制御ハブ(ICH)620が通信することを可能にし得る。ICH620は、コンピューティングシステム600と通信する複数のI/Oデバイスに、インタフェースを提供し得る。ICH620は、周辺機器相互接続(PCI)ブリッジ、ユニバーサルシリアルバス(USB)コントローラ、又は、他のタイプの周辺ブリッジ若しくはコントローラのような、周辺ブリッジ(又はコントローラ)624を通じて、バス622と通信し得る。ブリッジ624は、CPU602と周辺デバイスとの間のデータパスを提供し得る。他のタイプのトポロジーが用いられ得る。また、複数のバスが、例えば、複数のブリッジ又は複数のコントローラを通じて、ICH620と通信し得る。更に、ICH620との通信を行う他の周辺機器は、様々な実施形態において、インテグレーテッドドライブエレクトロニクス(IDE)、又はスモールコンピュータシステムインタフェース(SCSI)ハードドライブ、USBポート、キーボード、マウス、パラレルポート、シリアルポート、フロッピー(登録商標)ディスクドライブ、デジタル出力サポート(例えば、デジタルビデオインタフェース(DVI))、又は他のデバイスを含み得る。
【0032】
バス622は、オーディオデバイス626、1又は複数のディスクドライブ628、及び、(コンピュータネットワーク603と通信を行う)ネットワークインタフェースデバイス630と通信し得る。他のデバイスは、バス622を介して通信し得る。また、いくつかの実施形態において、(ネットワークインタフェースデバイス630のような)様々なコンポーネントは、GMCH608と通信し得る。加えて、プロセッサ602及びGMCH608は、単一のチップを形成すべく、組み合わせられ得る。更に、他の実施形態において、グラフィックスアクセラレータは、GMCH608内に含まれ得る。
【0033】
更に、コンピューティングシステム600は、揮発性及び/又は不揮発性メモリ(又はストレージ)を含み得る。例えば、不揮発性メモリは、以下の、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、消去可能PROM(EPROM)、電気的EPROM(EEPROM)、ディスクドライブ(例えば、628)、フロッピー(登録商標)ディスク、コンパクトディスクROM(CD−ROM)、デジタル多用途ディスク(DVD)、フラッシュメモリ、光磁気ディスク、又は電子データ(例えば、命令を含む)を格納可能な他のタイプの不揮発性機械可読媒体のうち1又は複数を含み得る。
【0034】
図7は、実施形態に係る、ポイントツーポイント(PtP)構成に配置されたコンピューティングシステム700を示す。特に、
図7は、プロセッサ、メモリ、及び、入出力デバイスが、多数のポイントツーポイントインタフェースにより相互接続されるシステムを示す。
図1から6を参照して説明される処理は、システム700の1又は複数のコンポーネントによって実行され得る。
【0035】
図7に示されるように、システム700は、いくつかのプロセッサを含み得る。記述を明瞭にすることを目的として、それらのうちの2つである、プロセッサ702及び704のみが示される。プロセッサ702及び704は、それぞれ、メモリ710及び712との通信を可能にする、ローカルのメモリコントローラハブ(MCH)706及び708を含み得る。メモリ710及び/又は712は、
図6のメモリ612を参照して説明されたもののような、様々なデータを格納し得る。
【0036】
実施形態において、プロセッサ702及び704は、
図6を参照して説明されるプロセッサ602のうちの1つであり得る。プロセッサ702及び704は、それぞれ、PtPインタフェース回路716及び718を用いて、ポイントツーポイント(PtP)インタフェース714を介して、データを交換し得る。また、プロセッサ702及び704は、それぞれ、ポイントツーポイントインタフェース回路726、728、730及び732を用いて、個々のPtPインタフェース722及び724を介して、チップセット720とデータを交換し得る。チップセット720は、更に、例えば、PtPインタフェース回路737を用いて、グラフィックスインタフェース736を介して、グラフィックス回路734とデータを交換し得る。
【0037】
少なくとも一実施形態は、プロセッサ702及び704内に提供され得る。例えば、システム700の1又は複数のコンポーネントは、プロセッサ702及び704内に位置されるものを含む、
図1から6のロジック140を含み得る。しかしながら、他の実施形態は、
図7のシステム700内の他の回路、ロジックユニット、又は、デバイスに存在し得る。更に、他の実施形態は、
図7に示される、いくつかの回路、ロジックユニット、又は、デバイスにわたって分散され得る。
【0038】
チップセット720は、PtPインタフェース回路741を用いてバス740と通信し得る。バス740は、バスブリッジ742及びI/Oデバイス743のような1又は複数のデバイスと通信し得る。バス744を介して、バスブリッジ742は、キーボード/マウス745、(モデム、ネットワークインタフェースデバイス又はコンピュータネットワーク603と通信し得る他の通信デバイスのような)通信デバイス746のような他のデバイス、オーディオI/Oデバイス747、及び/又はデータストレージデバイス748と通信し得る。データストレージデバイス748は、プロセッサ702及び/又は704により実行され得るコード749を格納し得る。
【0039】
更に、本明細書で説明される(例えば、様々な実施形態においてグラフィックスロジックにより処理され得る)シーン、画像、又はフレームは、((スマートフォン、タブレット、ラップトップ、スタンドアロンカメラ等のような別のデバイスにおいて埋め込まれ得る)デジタルカメラ、又はキャプチャされた画像がその次にデジタル形態に変換されるアナログデバイスのような)画像キャプチャデバイスによりキャプチャされ得る。また、本明細書で説明されるシーン、画像、又はフレームは、アート設計、ゲーム設計、又は任意の種類の3D/2D(2次元/3次元)業界設計により生成され得る。例えば、シーンは、ジオメトリ構造のセット、及び関連するテクスチャマップ、照明効果等を指し得る。更に、実施形態において、画像キャプチャデバイスは、複数のフレームをキャプチャすることが可能であり得る。更に、いくつかの実施形態において、シーンにおけるフレームの1又は複数は、コンピュータ上に設計/生成される。また、シーンのフレームの1又は複数は、(例えば、フラットパネルディスプレイデバイス等を含む、
図6及び/又は7を参照して説明されるディスプレイのような)ディスプレイを介して示され得る。
【0040】
いくつかの実施形態において、本明細書で説明されるコンポーネントのうちの1又は複数は、システム・オン・チップ(SOC)デバイスとして実装され得る。
図8は、実施形態に係るSOCパッケージのブロック図を示す。
図8に示されるように、SOC802は、1又は複数の中央処理装置(CPU)コア820、1又は複数のグラフィックスプロセッサユニット(GPU)コア830、入出力(I/O)インタフェース840、及びメモリコントローラ842を含む。SOCパッケージ802の様々なコンポーネントは、本明細書で他の図を参照して説明されるもののような相互接続又はバスに結合され得る。また、SOCパッケージ802は、本明細書で他の図を参照して説明されるもののように、より多いか又はより少ないコンポーネントを含み得る。更に、SOCパッケージ820のコンポーネントのそれぞれは、例えば、本明細書で他の図を参照して説明されるように、1又は複数の他のコンポーネントを含み得る。一実施形態において、SOCパッケージ802(及びそのコンポーネント)は、1又は複数の集積回路(IC)ダイに提供され、例えば、それらは、単一の半導体デバイスへとパッケージングされる。
【0041】
図8に示されるように、SOCパッケージ802は、メモリコントローラ842を介して、(本明細書で他の図を参照して説明されるメモリと、類似又は同一であり得る)メモリ860に結合される。実施形態において、メモリ860(又はその一部)は、SOCパッケージ802の上に集積されることが可能である。
【0042】
I/Oインタフェース840は、例えば、本明細書で他の図を参照して説明されるもののような相互接続及び/又はバスを介して、1又は複数のI/Oデバイス870に結合され得る。I/Oデバイス870は、キーボード、マウス、タッチパッド、ディスプレイ、(カメラ又はカムコーダ/ビデオレコーダのような)画像/ビデオキャプチャデバイス、タッチスクリーン、スピーカ等のうち1又は複数を含み得る。更に、実施形態において、SOCパッケージ802は、ロジック140を含み得る/集積し得る。代替的に、ロジック140は、(すなわち、別個のロジックとして)SOCパッケージ802の外部に提供され得る。
【0043】
以下の例は、更なる実施形態に関する。例1は、少なくとも部分的にハードウェアロジックを有し、グラフィックス処理装置(GPU)上で実行する1又は複数のスレッドを、1又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させるためのロジックを備え、1又は複数のスレッドのコンテキストデータは、命令レベル粒度で1又は複数のスレッドの完了に応答して、メモリにコピーされる装置を含む。例2は、例1の装置を含み、コンテキストデータをメモリにコピーする前に、コンテキストデータを格納する共有ローカルメモリ(SLM)を更に備える。例3は、例2の装置を含み、ロジックは更に、コンテキストデータを、SLMからメモリにコピーするためのものである。例4は、例3の装置を含み、コンテキストデータをコピーするためのロジックは、ダイレクトメモリアクセス(DMA)ロジックを有する。例5は、例1の装置を含み、1又は複数のスレッドのコンテキストデータは、1又は複数のソフトウェア命令に応答して、メモリにコピーされる。例6は、例1の装置を含み、ロジックは、GPU上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させるためのものである。例7は、例1の装置を含み、1又は複数のスレッド、又はプリエンプション要求に対応するスレッドは、GPU上で、グラフィックス処理装置による汎用計算(GPGPU)として実行される。例8は、例1の装置を含み、1又は複数のスレッドをスポーンするためのスレッドスポーナロジックを備える。例9は、例1の装置を含み、プロセッサは、ロジックを有する。例10は、例1の装置を含み、1又は複数のプロセッサコアを有するプロセッサ、ロジック、又はメモリのうち1又は複数は、単一の集積回路ダイ上にある。
【0044】
例11は、プロセッサ上で実行されるとき、グラフィックス処理装置(GPU)上で実行する1又は複数のスレッドを、1又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させる、1又は複数の処理を実行するようにプロセッサを構成する、1又は複数の命令を備えるコンピュータ可読媒体を含み、1又は複数のスレッドのコンテキストデータは、命令レベル粒度で1又は複数のスレッドの完了に応答して、メモリにコピーされる。例12は、例11のコンピュータ可読媒体を含み、プロセッサ上で実行されるとき、1又は複数のスレッドのコンテキストデータを、1又は複数のソフトウェア命令に応答して、メモリにコピーさせる1又は複数の処理を実行するようプロセッサを構成する、1又は複数の命令を更に備える。例13は、例11のコンピュータ可読媒体を含み、プロセッサ上で実行されるとき、GPU上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させる、1又は複数の処理を実行するようプロセッサを構成する、1又は複数の命令を更に備える。例14は、例11のコンピュータ可読媒体を含み、1又は複数のスレッド、又はプリエンプション要求に対応するスレッドは、GPU上で、グラフィックス処理装置による汎用計算(GPGPU)として実行される。例15は、例11のコンピュータ可読媒体を含み、プロセッサ上で実行されるとき、1又は複数のスレッドのスポーンを引き起こす、1又は複数の処理を実行するようプロセッサを構成する、1又は複数の命令を更に備える。
【0045】
例16は、グラフィックス処理装置(GPU)上で実行する1又は複数のスレッドを、1又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させる段階を備える方法を含み、1又は複数のスレッドのコンテキストデータは、命令レベル粒度で1又は複数のスレッドの完了に応答して、メモリにコピーされる。例17は、例16の方法を含み、1又は複数のスレッドのコンテキストデータを、1又は複数のソフトウェア命令に応答して、メモリにコピーさせる段階を更に備える。例18は、例16の方法を含み、GPU上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させる段階を更に備える。例19は、例16の方法を含み、1又は複数のスレッド、又はプリエンプション要求に対応するスレッドを、GPU上で、グラフィックス処理装置による汎用計算(GPGPU)として実行する段階を更に備える。例20は、例16の方法を含み、1又は複数のスレッドのスポーンを引き起こす段階を更に備える。
【0046】
例21は、1又は複数のプロセッサコアを有するプロセッサと、シーンの少なくとも1つのフレームに対応し、1又は複数のプロセッサコアのうち少なくとも1つによりアクセスされるべきデータを格納するメモリと、シーンの少なくとも1つのフレームを提示するディスプレイデバイスと、少なくとも部分的にハードウェアロジックを有し、グラフィックス処理装置(GPU)上で実行する1又は複数のスレッドを、1又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させるためのロジックと、を備えるシステムを含み、1又は複数のスレッドのコンテキストデータは、命令レベル粒度で1又は複数のスレッドの完了に応答して、メモリにコピーされる。例22は、例21のシステムを含み、コンテキストデータをメモリにコピーする前に、コンテキストデータを格納する共有ローカルメモリ(SLM)を更に備える。例23は、例21のシステムを含み、1又は複数のスレッドのコンテキストデータは、1又は複数のソフトウェア命令に応答して、メモリにコピーされる。例24は、例21のシステムを含み、ロジックは、GPU上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させるためのものである。例25は、例21のシステムを含み、1又は複数のスレッド、又はプリエンプション要求に対応するスレッドは、GPUで、グラフィックス処理装置による汎用計算(GPGPU)として実行される。例26は、例21のシステムを含み、1又は複数のスレッドをスポーンするためのスレッドスポーナロジックを備える。例27は、例21のシステムを含み、プロセッサは、ロジックを有する。例28は、例21のシステムを含み、プロセッサ、ロジック又はメモリのうち1又は複数は、単一の集積回路ダイ上にある。
【0047】
例29は、任意の先行の例に記載の方法を実行する手段を備える装置を含む。
【0048】
例30は、実行されるとき、任意の先行の例に記載の方法を実装し、又は装置を実現する機械可読命令を含む機械可読ストレージを含む。
【0049】
様々な実施形態において、例えば、
図1から8を参照して本明細書で説明された処理は、ハードウェア(例えば、ロジック回路)ソフトウェア、ファームウェア、又はそれらの組み合わせとして実装され得て、これらは、例えば、本明細書で説明された処理を実行すべく、コンピュータをプログラムするのに用いられる命令(又はソフトウェア手順)をそこに格納した有形の(例えば、非一時的な)機械可読、又はコンピュータ可読媒体を含むコンピュータプログラム製品として、提供され得る。機械可読媒体は、
図1から8に関連して説明されたもののような、ストレージデバイスを含み得る。
【0050】
更に、そのようなコンピュータ可読媒体は、コンピュータプログラム製品としてダウンロードされ得る。プログラムは、搬送波又は他の伝搬媒体において提供されるデータ信号によって、通信リンク(例えば、バス、モデム、又は、ネットワーク接続)を介して、リモートコンピュータ(例えば、サーバ)から、要求しているコンピュータ(例えば、クライアント)へと転送され得る。
【0051】
明細書における「一実施形態」又は「実施形態」への言及は、当該実施形態に関連して記載された特定の特徴、構造及び/又は特性が、少なくともある実装の中に含まれ得ることを意味する。明細書中の様々な箇所における「一実施形態において」との語句の出現は、全て、同一の実施形態を参照していてもよく、していなくてもよい。
【0052】
また、明細書及び特許請求の範囲において、「結合された」及び「接続された」という用語が、それらの活用形とともに用いられ得る。いくつかの実施形態において、「接続された」は、2つ又はそれより多くの要素が、互いに、物理的に又は電気的に又は直接接触していることを示すのに用いられ得る。「結合された」は、2つ又はそれより多くの要素が、物理的に又は電気的に直接接触していることを意味し得る。しかしながら、「結合され」はまた、2つ又はそれより多くの要素が、互いに直接接触してはいなくてもよいが、それでもなお、互いに協働又は相互作用し得ることを意味し得る。
【0053】
従って、実施形態は、構造的特徴及び/又は方法論的動作に特有の言い回しで記載されているが、特許請求される主題は、記載されている特定の特徴又は動作に限定されなくてもよいことが理解されよう。むしろ、特定の特徴及び動作は、特許請求される主題を実装する例示形態として開示される。