(57)【特許請求の範囲】
【請求項１】
少なくとも部分的にハードウェアロジックを有し、グラフィックス処理装置（ＧＰＵ）上で実行する１又は複数のスレッドを、前記１又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させるためのロジックを備える装置であって、
前記１又は複数のスレッドのコンテキストデータは、前記命令レベル粒度で前記１又は複数のスレッドの完了に応答して、前記１又は複数のスレッドが停止した後に、メモリにコピーされ、
前記コンテキストデータは、スレッドスポーナロジック、実行ユニットコンプレックス、および共有ローカルメモリ（ＳＬＭ）の少なくとも一つからのものであり、
前記装置は、前記スレッドスポーナロジック、前記実行ユニットコンプレックス、および前記ＳＬＭの各々と前記メモリとを結合するマルチプレクサを備える
装置。
【請求項２】
前記ＳＬＭは、前記コンテキストデータを前記メモリにコピーする前に、前記コンテキストデータを格納する、請求項１に記載の装置。
【請求項３】
前記ロジックは、前記コンテキストデータを、前記ＳＬＭから前記メモリにコピーするためのものである、請求項２に記載の装置。
【請求項４】
前記コンテキストデータをコピーするための前記ロジックは、ダイレクトメモリアクセス（ＤＭＡ）ロジックを有する、請求項３に記載の装置。
【請求項５】
前記１又は複数のスレッドの前記コンテキストデータは、１又は複数のソフトウェア命令に応答して、前記メモリにコピーされる、請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記ロジックは、前記ＧＰＵ上で実行する全ての複数のスレッドを、前記要求に応答して、前記命令レベル粒度で停止させるためのものである、請求項１から５のいずれか一項に記載の装置。
【請求項７】
前記１又は複数のスレッド、又は前記要求に対応するスレッドは、前記ＧＰＵ上で、グラフィックス処理装置による汎用計算（ＧＰＧＰＵ）として実行される、請求項１から６のいずれか一項に記載の装置。
【請求項８】
前記１又は複数のスレッドをスポーンするための前記スレッドスポーナロジックを備える、請求項１から７のいずれか一項に記載の装置。
【請求項９】
プロセッサは、前記ロジックを有する、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
１又は複数のプロセッサコアを有するプロセッサ、前記ロジック、又は前記メモリのうち１又は複数は、単一の集積回路ダイ上にある、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
グラフィックス処理装置（ＧＰＵ）上で実行する１又は複数のスレッドを、前記１又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させる段階を備える方法であって、
前記１又は複数のスレッドのコンテキストデータは、前記命令レベル粒度で前記１又は複数のスレッドの完了に応答して、前記１又は複数のスレッドが停止した後に、メモリにコピーされ、
前記コンテキストデータは、スレッドスポーナロジック、実行ユニットコンプレックス、および共有ローカルメモリ（ＳＬＭ）の少なくとも一つからのものであり、前記スレッドスポーナロジック、前記実行ユニットコンプレックス、および前記ＳＬＭの各々は、マルチプレクサを介して前記メモリと結合される
方法。
【請求項１２】
前記１又は複数のスレッドの前記コンテキストデータを、１又は複数のソフトウェア命令に応答して、前記メモリにコピーさせる段階を更に備える、請求項１１に記載の方法。
【請求項１３】
前記ＧＰＵ上で実行する全ての複数のスレッドを、前記要求に応答して、前記命令レベル粒度で停止させる段階を更に備える、請求項１１又は１２に記載の方法。
【請求項１４】
１又は複数のスレッド、又は前記要求に対応するスレッドを、前記ＧＰＵ上で、グラフィックス処理装置による汎用計算（ＧＰＧＰＵ）として実行する段階を更に備える、請求項１１から１３のいずれか一項に記載の方法。
【請求項１５】
前記１又は複数のスレッドのスポーンを引き起こす段階を更に備える、請求項１１から１４のいずれか一項に記載の方法。
【請求項１６】
１又は複数のプロセッサコアを有するプロセッサと、
シーンの少なくとも１つのフレームに対応し、前記１又は複数のプロセッサコアのうち少なくとも１つによりアクセスされるべきデータを格納するメモリと、
前記シーンの前記少なくとも１つのフレームを提示するディスプレイデバイスと、
少なくとも部分的にハードウェアロジックを有し、グラフィックス処理装置（ＧＰＵ）上で実行する１又は複数のスレッドを、前記１又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させるためのロジックと、を備えるシステムであって、
前記１又は複数のスレッドのコンテキストデータは、前記命令レベル粒度で、前記１又は複数のスレッドの完了に応答して、前記１又は複数のスレッドが停止した後に、前記メモリにコピーされ、
前記コンテキストデータは、スレッドスポーナロジック、実行ユニットコンプレックス、および共有ローカルメモリ（ＳＬＭ）の少なくとも一つからのものであり、
前記システムは、前記スレッドスポーナロジック、前記実行ユニットコンプレックス、および前記ＳＬＭの各々と前記メモリとを結合するマルチプレクサを備える
システム。
【請求項１７】
前記ＳＬＭは、前記コンテキストデータを前記メモリにコピーする前に、前記コンテキストデータを格納する、請求項１６に記載のシステム。
【請求項１８】
前記１又は複数のスレッドの前記コンテキストデータは、１又は複数のソフトウェア命令に応答して、前記メモリにコピーされる、請求項１６又は１７に記載のシステム。
【請求項１９】
前記ロジックは、前記ＧＰＵ上で実行する全ての複数のスレッドを、前記要求に応答して、前記命令レベル粒度で停止させるためのものである、請求項１６から１８のいずれか一項に記載のシステム。
【請求項２０】
前記１又は複数のスレッド、又は前記要求に対応するスレッドは、前記ＧＰＵ上で、グラフィックス処理装置による汎用計算（ＧＰＧＰＵ）として実行される、請求項１６から１９のいずれか一項に記載のシステム。
【請求項２１】
前記１又は複数のスレッドをスポーンするための前記スレッドスポーナロジックを備える、請求項１６から２０のいずれか一項に記載のシステム。
【請求項２２】
前記プロセッサは、前記ロジックを有する、請求項１６から２１のいずれか一項に記載のシステム。
【請求項２３】
前記プロセッサ、前記ロジック、又は前記メモリのうち１又は複数は、単一の集積回路ダイ上にある、請求項１６から２２のいずれか一項に記載のシステム。
【請求項２４】
コンピュータに、請求項１１から１５のいずれか一項の１又は複数の処理を実行させる、プログラム。
【請求項２５】
請求項１１から１５のいずれか一項に記載の方法を実行する手段を備える装置。
【請求項２６】
請求項２４に記載のプログラムを格納したコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、エレクトロニクスの分野に関する。より具体的には、実施形態は、ソフトウェア援助コンテキストスイッチを有するミッドスレッドプリエンプションに関する。
【背景技術】
【０００２】
ＧＰＧＰＵ（グラフィックス処理装置による汎用計算）ワークロードを実行し、ハードウェアが他のワークロードに求められるとき、ＧＰＧＰＵワークロードをプリエンプト、又は割り込みをするのに仕組みが用いられ得る。これは概して、割り込みに応答して、ハードウェアにおいて既存又は実行する全てのスレッドの完了を求める。この仕組みは、短時間で完了することが予期されるスレッドに上手く機能する。しかしながら、スレッドが無期限に又は長時間実行するとき、コンテキストスイッチにおけるレスポンスタイムが非常に長くなり得、場合によってはページフォルトをさえも生じさせる。
【図面の簡単な説明】
【０００３】
詳細な説明は、添付の図を参照して提供される。図において、参照番号の左端の桁は、その参照番号が最初に出現する図を特定する。異なる図面において同一の参照番号を使用することにより、同一又は類似の項目を示す。
【図１】本明細書で説明される様々な実施形態を実装するのに用いられ得るコンピューティングシステムの実施形態のブロック図を示す。
【図２】いくつかの実施形態に係る、プリエンプションを処理するための例示的なケースを示す。
【図３】実施形態に係る、グラフィックスロジックのコンポーネントのブロック図を示す。
【図４】実施形態に係る、グラフィックスロジックのコンテキストを保存及び復元するのに用いられる所定のメモリマップを示す。
【図５】いくつかの施形態に係る、フロー図を示す。
【図５Ａ】いくつかの実施形態に係る、フロー図を示す。
【図６】本明細書で説明される様々な実施形態を実装するのに用いられ得るコンピューティングシステムの実施形態のブロック図を示す。
【図７】本明細書で説明される様々な実施形態を実装するのに用いられ得るコンピューティングシステムの実施形態のブロック図を示す。
【図８】本明細書で説明される様々な実施形態を実装するのに用いられ得るコンピューティングシステムの実施形態のブロック図を示す。
【発明を実施するための形態】
【０００４】
以下の記載において、様々な実施形態の完全な理解を提供すべく、多数の具体的な詳細が記載される。しかしながら、様々な実施形態は、具体的な詳細なく実施され得る。他の例において、特定の実施形態を不明瞭しないように、周知の方法、手順、コンポーネント及び回路が、詳細には説明されていない。更に、実施形態の様々な態様は、半導体集積回路（「ハードウェア」）、１又は複数のプログラムにまとめられるコンピュータ可読命令（「ソフトウェア」）、又は、ハードウェア及びソフトウェアのいくつかの組み合わせのような、様々な手段を用いて実行され得る。本開示の目的のために、「ロジック」への言及は、ハードウェア、ソフトウェア、ファームウェア、又は、それらのいくつかの組み合わせのいずれかを意味するものとする。
【０００５】
いくつかの実施形態は、ソフトウェア援助コンテキストスイッチを有するミッドスレッドプリエンプションを提供する。実施形態は、ＧＰＧＰＵカーネルミッドスレッドをプリエンプト、又は割り込みをする。システムの状態は保存され、プリエンプトされたカーネルを完了までに向けて実行し続けるべく、後の時点で復元され得る。それに対して、他の解決策は、ワークロードの完了に完全に依存するか、又は異なるワークロードに切り替えることが可能な前に、はるかに粗い粒度でのワークロードの完了に依存するかのいずれかとなり得る。
【０００６】
例えば、スレッドグループ内の複数のスレッドが実行のためにディスパッチされる場合、いくつかの解決策は、そのディスパッチをスレッドグループの境界のみでプリエンプトする、仕組みを提供し得る。任意のディスパッチされたスレッドは次に、それらのタスクを完了することを必要とする。これにより、ＧＰＵの重大な割り込みへのレスポンスタイムを増加する。ミッドスレッドプリエンプションでもって、既に実行モードにある全てのスレッドは、任意の命令境界で割り込まれ得る。これにより、同様にワークロード間の切り替え性能を改善する。
【０００７】
本明細書で説明されるように、ＧＰＧＰＵは、グラフィックス処理装置（ＧＰＵ）による汎用計算を指す。ＧＰＵは、グラフィックスロジック、又は画像、フレーム、シーン等を操作する処理のようなグラフィックスタスクに関連する計算を通常実行するるが、ＧＰＧＰＵの場合、汎用計算を実施又は実行することも可能である他のタイプのロジックを含み得。いくつかの実施形態は、グラフィックスロジックを参照して説明される一方で、実施形態は、グラフィックに関するロジックに限定されず、他のタイプの非グラフィック（例えば、汎用）ロジックにまた適用され得る。更に、実施形態において、ＳＯＣ（システム・オン・チップ）プラットフォーム上で実施され得る、デスクトップコンピュータ、（スマートフォン、タブレット、ＵＭＰＣ（ウルトラモバイルパーソナルコンピュータ）、ラップトップコンピュータ、ウルトラブック（商標）コンピューティングデバイス、スマートウォッチ、スマートメガネ等のような）モバイルコンピュータ、ワークステーション等のような任意のタイプのコンピューティングデバイスに対して、様々な実施形態が実行され得る。
【０００８】
従って、いくつかの実施形態は、例えば、ワークロードが、より高優先度の処理を優先させるべく、完了前に停止されることを必要とする場合、他のアプリケーションに用いられる得る非常に柔軟な解決策を提供する。いくつかの実施形態は、アプリケーション要求に対するハードウェアの応答性を改善する。それらはまた、グラフィックスロジックが、多目的となることを可能にする。
【０００９】
いくつかの実施形態は、図１から８を参照して説明されるもののような、例えば、スマートフォン、タブレット、ＵＭＰＣ（ウルトラモバイルパーソナルコンピュータ）、ラップトップコンピュータ、ウルトラブック（商標）コンピューティングデバイス、スマートウォッチ、スマートメガネ等のようなモバイルコンピューティングデバイスを含む、１又は複数のプロセッサ（例えば、１又は複数のプロセッサコアを有する）を含むコンピューティングシステムにおいて適用され得る。より具体的には、図１は、実施形態に係るコンピューティングシステム１００のブロック図を示す。システム１００は、（本明細書で、概して、「複数のプロセッサ１０２」又は「プロセッサ１０２と称される）１又は複数のプロセッサ１０２−１から１０２−Ｎを含み得る。複数のプロセッサ１０２は、様々な実施形態において汎用ＣＰＵ、及び／又はＧＰＵであり得る。複数のプロセッサ１０２は、相互接続又はバス１０４を介して通信をし得る。各プロセッサは、様々なコンポーネントを含み得る。記述を明瞭にすることを目的として、それらのうちのいくつかは、プロセッサ１０２−１のみを参照して説明される。従って、残りのプロセッサ１０２−２から１０２−Ｎのそれぞれは、プロセッサ１０２−１を参照して説明される同一又は類似のコンポーネントを含み得る。
【００１０】
実施形態において、プロセッサ１０２−１は、（本明細書において、「複数のコア１０６」又は「コア１０６」と称される）１又は複数のプロセッサコア１０６−１から１０６−Ｍ、キャッシュ１０８、及び／又は、ルータ１１０を含み得る。複数のプロセッサコア１０６は、単一の集積回路（ＩＣ）チップ上に実装され得る。更に、チップは、（キャッシュ１０８のような）１又は複数の共有及び／又は専用キャッシュ、（バス又は相互接続１１２のような）バス又は相互接続、（例えば、図６から８を参照して説明されるもののような）グラフィックス及び／又はメモリコントローラ、又は、他のコンポーネントを含み得る。
【００１１】
一実施形態において、ルータ１１０は、プロセッサ１０２−１及び／又はシステム１００の様々なコンポーネントの間で通信するのに用いられ得る。更に、プロセッサ１０２−１は、１より多いルータ１１０を含み得る。更に、多数のルータ１１０は、プロセッサ１０２−１の内部又は外部の様々なコンポーネントの間でデータをルーティングすることを可能にすべく、通信し得る。
【００１２】
キャッシュ１０８は、複数のコア１０６のような、プロセッサ１０２−１の１又は複数のコンポーネントにより用いられるデータ（例えば、命令を含む）を格納し得る。例えば、キャッシュ１０８は、プロセッサ１０２のコンポーネントによる高速アクセス（例えば、複数のコア１０６による高速アクセス）のために、メモリ１１４に格納されたデータを、ローカルにキャッシュし得る。図１に示されるように、メモリ１１４は、相互接続１０４を介して、複数のプロセッサ１０２と通信し得る。実施形態において、（共有され得る）キャッシュ１０８は、ミッドレベルキャッシュ（ＭＬＣ）、ラストレベルキャッシュ（ＬＬＣ）等であり得る。また、複数のコア１０６のそれぞれは、（本明細書で概して、「Ｌ１キャッシュ１１６」と称される）レベル１（Ｌ１）キャッシュ（１１６−１）、又は、レベル２（Ｌ２）キャッシュのような、他のレベルのキャッシュを含み得る。更に、プロセッサ１０２−１の様々なコンポーネントは、バス（例えば、バス１１２）及び／又はメモリコントローラ若しくはハブを通じて、キャッシュ１０８と直接的に通信し得る。
【００１３】
図１で示されるように、プロセッサ１０２は、本明細書で説明されるもののような様々なグラフィックス及び／又は汎用計算に関する処理を実行するグラフィックスロジック１４０を更に含み得る。ロジック１４０は、ここで説明されるようなシステム１００の様々なコンポーネントと通信される情報のような、ロジック１４０の処理に関連する情報を格納すべく、（システム１００におけるキャッシュ１０８、Ｌ１キャッシュ１１６、メモリ１１４、レジスタ、又は別のメモリのような）本明細書で説明される１又は複数のストレージデバイスへのアクセスを有し得る。また、ロジック１４０は、プロセッサ１０２内部に示される一方で、様々な実施形態において、システム１００における他の箇所に位置され得る。例えば、ロジック１４０は、複数のコア１０６の１つに置き換ってよく得、相互接続１１２及び／又は相互接続１０４等に直接的に結合され得る。
【００１４】
概して、ハードウェア（例えば、ロジック１４０）における状態は、以下のように分類され得る。（ａ）固定機能ハードウェアにおける状態、（ｂ）スレッド（すなわち、レジスタ及び命令ポインタ等）の状態、（ｃ）ＳＬＭ（又は、中間結果のキャッシング／ストレージ、並びに、そうでなければ、例えば頻繁に再利用されるべきバッファされたデータを含む、グローバル／メインメモリを対象とする他のスキャッタ／ギャザ−処理のためにグラフィックスロジック／ＧＰＵにより用いられるメモリを指す共有ローカルメモリ）。例えば、ＳＬＭは、異なるスレッドを求める処理をサポートし得、それらの間でデータを共有、及び／又はデータを渡す。
【００１５】
いくつかのコンテキスト保存及び復元処理は、ステートマシンとしてハードウェアに構築され得、例えば、停止条件の場合、ＤＭＡ（ダイレクトメモリアクセス）エンジン／ロジックのいくつかの形態は、全てのハードウェア状態を、所定の位置におけるメモリに書込み、所定のシーケンスに従う。実施形態において、プログラム可能なエンジン（グラフィックスロジック／ＧＰＵのＥＵ又は実行ユニット）における既存制御は、スレッドのコンテンツを、ソフトウェアからの援助でメモリに移動するのに用いられる。主にデバッグのために用いられる例外処理ハードウェア／ロジックは、この目的のために拡張され得る。また、カーネルは、ハードウェアのいくつかのコンテキストをメモリに移動することが可能であるシステムルーチンにジャンプし得る。
【００１６】
この仕組みは、割り込みに応答して、ＥＵの状態を保存するのに用いられ得る。いくつかの特徴が既に存在し得るが、それらは概して、いくつかのレジスタのみを処理することに限定され、スレッド状態の全ては保存されなくてもよい。加えて、システムルーチンの処理は、そのルーチンが、完了後にアプリケーションルーチンに戻ることを求める。実施形態において、システムは、システムルーチン完了後に終了することが可能である。その変化が図２に示され、そこでは、いくつかの実施形態に係る、プリエンプションを処理するための異なるケースを示す。
【００１７】
３つのケースが、図２に以下のように示される。  ケースＡ：既存のシステムルーチンハンドラは、所与のアプリケーションルーチンから開始する。起動される新たなスレッドは、アプリケーションルーチンである。システムルーチンは、完了のためにアプリケーションルーチンに戻る。  ケースＢ：実施形態は、システムルーチンが、メモリへの書込処理を完了し、アプリケーションルーチンに戻ることなくワークロードを終了する方法を提供する。これにより、新たなワークロードの起動を可能にする。  ケースＣ：一実施形態は、システムルーチンでもってスレッドを開始し、次に、ワークロードを終了まで完了するアプリケーションルーチンに移動する方法を提供する。
【００１８】
図３は、実施形態に係る、グラフィックスロジック１４０のコンポーネントのブロック図を示す。図３に示されるように、グラフィックスロジック１４０は、（例えば、レガシコンテキスト保存パスを提供することを含む、１又は複数のソフトウェアスレッドをスポーンする）スレッドスポーナ３０２と、（例えば、システムルーチンにより開始されるサイクルデータを保存することを含む、命令を実行する１又は複数の実行ユニットを含む）ＥＵコンプレックスロジックと、（例えば、ＤＭＡ書込み処理を含む共有ローカルメモリ機能を格納及び処理する）ＳＬＭ３０６と、（本明細書に説明されるもののような、ＳＬＭ３０６からのＳＬＭデータを含む、グラフィックスロジック１４０の処理に関連するデータを格納する）メモリ３０８とを含む。メモリ３０８は、図１から８を参照して本明細書で説明されるもののような、例えば、キャッシュを含む、任意のタイプのメモリであり得る。また、マルチプレクサ３１０は、メモリ３０８を、ロジック３０２及び３０４、並びにＳＬＭ３０６に結合する。実施形態において、グラフィックハードウェア／ロジック１４０の状態を保存するシーケンスは、以下の通りである。
【００１９】
（ａ）割り込みがあると、固定機能（例えば、スレッドスポーナロジック３０２）は、（例えば、ＥＵコンプレックス３０４におけるＥＵの）パイプラインに新たなスレッドがスポーンされないことを確実にする。  （ｂ）固定機能（例えば、スレッドスポーナロジック３０２）は、実行を停止するスレッドを要求する。  （ｃ）スレッドは、パイプラインにおける任意の現行保留サイクルを完了し、停止を完了する。  （ｄ）システムがアイドルになるとき、スレッドはシステムルーチンを続行する。  （ｅ）システムルーチンは、中間レジスタ、フロー制御ポインタ、スタック、アーキテクチャ制御レジスタ等のような（実施形態において、全てのワークがソフトウェアで処理される）スレッドのハードウェア状態を、メモリ３０８（例えば、一実施形態においてそのような移動の位置が予め定められる）に移動する。  （ｆ）全てのスレッドがデータ移動を完了したとき、システムルーチンは、制御を（ＳＬＭ３０６のようなＤＭＡエンジンへのアクセスをまた有する）固定機能に移動する。  （ｇ）このＤＭＡはここで、ＳＬＭ３０６のデータをメモリ３０８に移動する。  （ｈ）このＤＭＡの移動が完了するとき、バリアを処理するパイプラインステート、ウォーカーステート、及び中間ステートマシンのようなステートの残りは、全てコンテキストに保存される。  （ｉ）ハードウェアはここで、新たなコンテキストをバッファを消去し及び実行することが可能である。
【００２０】
それに対して、以前の解決策は、そのようなデータ移動を処理すべく、所定のハードウェアステートマシンの使用を含んでいた。いくつかの実施形態を通じて、新たなハイブリッドアプローチは、ソフトウェアアプローチが用いられるため、柔軟性を改善し、リスクを減らす。
【００２１】
図４は、実施形態に係る、グラフィックスロジック１４０のコンテキストを保存、及び復元するのに用いられる所定のメモリマップを示す。示されるように、最大６４ＫＢの領域がＳＬＭごとに割り当てられる。これは、対応するＥＵ上で実行する各スレッドに対する専用領域に続く。また、実施形態において、スレッドステートは、８ＫＢの事前に割り当てられた領域に保存される（ＧＲＦ（汎用レジスタファイル）レジスタ、ＡＲＦ（アーキテクチャレジスタファイル）レジスタ、及び任意選択でいくつかの確保された領域に分割される）。他の、事前に割り当てられた領域は、実装及び保存されるべきデータの量に応じて、用いられ得る。
【００２２】
図５は、いくつかの実施形態に係る、ソフトウェア援助コンテキストスイッチを有するミッドスレッドプリエンプションを実行する方法５００のフロー図を示す。図１から４、及び６から８を参照して本明細書で説明される１又は複数のコンポーネント（例えば、グラフィックスロジック１４０を含む）は、図５を参照して説明される１又は複数の処理を実行するのに用いられ得る。
【００２３】
図１から５を参照して、（例えば、ミッドスレッド、又はそうでなければ、ＧＰＵ上で実行する１又は複数のスレッドの実行の間で）プリエンプション要求が（例えば、割り込みを介して）一旦検出されると、処理５０４にて、システムにおける全てのスレッドの任意の実行が、例えば、命令レベル粒度で停止される。実施形態において、プリエンプション要求は、他のスレッド又は処理は、現在実行しているスレッドの実行をプリエンプトすることを示す。現在実行するスレッド及び／又は他のプリエンプトするスレッド若しくは処理は、ＧＰＧＰＵとして実行され得る。
【００２４】
処理５０６にて、残りのシステムをアイドル状態にもたらすべく、パイプラインにおける全ての保留タスクが完了しているか否か（例えば、全ての実行中のスレッドが、命令レベル粒度でそれらのタスクを完了したか）が判断される。 処理５０８にて、仕組みのハードウェア／ソフトウェアの組み合わせは、スレッド及びＳＬＭデータを含むコンテキストを、（図３を参照して説明されるもののような）メモリに移動／コピーするのに用いられる。例えば、コンテキストデータは、１又は複数のソフトウェア命令に応答して、メモリ３０８にコピーされ得る。処理５１０にて、（例えば、プリエンプション要求に対応する、又はそうでなければその生成を生じる）新たなワークロード／スレッドは、実行を可能にし、また、仕組みは、保存されたワークロードを、（図３を参照して説明されるもののように）それが前に停止されたところから継続するよう提供される。
【００２５】
上記で説明された保存シーケンスの類似シーケンスは、前に保存されたコンテキストを復元するのに用いられ得る。より具体的には、図５Ａは、いくつかの実施形態に係る、前に保存されたコンテキストを復元する方法５５０のフロー図を示す。図１から５及び６から８を参照して本明細書で説明される１又は複数のコンポーネント（例えば、グラフィックスロジック１４０を含む）は、図５Ａを参照して説明される１又は複数の処理を実行するのに用いられ得る。実施形態において、図５Ａを参照して説明される全てのデータフローは、メモリからハードウェア／ロジック１４０にわたる。
【００２６】
図１から５Ａを参照して、コンテキストスイッチが処理５５２にて開始される。処理５５４は、開始されたコンテキストが新しいか否かを判断する。コンテキストが新しい又は以前に保存されているか否かに応じて、方法５５０は、処理５５６又は５５８から５６０に続く。コンテキストが新しい場合、処理５５６は、新しいコンテキストを実行し、そうでなければ、処理５５８は、対応するシステムルーチンを呼び出し、以前に保存されたコンテキストに対するデータ復元シーケンスを開始する。処理５６０にて、復元が一旦完了すると、システムルーチンは、次のアプリケーションルーチンに移動する。例えば、全てのステート情報が復元された後、システムは、アプリケーションカーネルポインターにジャンプし、ワークロードの完了まで実行を続ける。
【００２７】
図６は、実施形態に係るコンピューティングシステム６００のブロック図を示す。コンピューティングシステム６００は、相互接続ネットワーク（又はバス）６０４を介して、通信を行う１又は複数の中央処理装置（ＣＰＵ）６０２、又はプロセッサを含み得る。プロセッサ６０２は、汎用プロセッサ、（コンピュータネットワーク６０３を介して通信されるデータを処理する）ネットワークプロセッサ、又は（縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサ若しくは複合命令セットコンピュータ（ＣＩＳＣ）を含む）他のタイプのプロセッサを含み得る。
【００２８】
更に、プロセッサ６０２は、シングル又はマルチコア設計を有し得る。マルチコア設計を有するプロセッサ６０２は、異なるタイプのプロセッサコアを、同一の集積回路（ＩＣ）ダイ上に集積し得る。また、マルチコア設計を有するプロセッサ６０２は、対称型又は非対称型のマルチプロセッサとして実装され得る。実施形態において、プロセッサ６０２のうちの１又は複数は、図１のプロセッサ１０２と同一又は類似であり得る。例えば、システム６００の１又は複数のコンポーネントは、図１から５を参照して説明された、ロジック１４０を含み得る。また、図１から５を参照して説明された処理は、システム６００の１又は複数のコンポーネントにより実行され得る。
【００２９】
チップセット６０６はまた、相互接続ネットワーク６０４と通信し得る。チップセット６０６は、（図６に示されたもののような）システム６００の様々なコンポーネントに位置され得る、グラフィックス・メモリ・コントロール・ハブ（ＧＭＣＨ）６０８を含み得る。ＧＭＣＨ６０８は、（図１のメモリ１１４と同一又は類似であり得る）メモリ６１２と通信を行うメモリコントローラ６１０を含み得る。メモリ６１２は、ＣＰＵ６０２又はコンピューティングシステム６００に含まれる任意の他のデバイススにより実行され得る、命令のシーケンスを含むデータを格納し得る。一実施形態において、メモリ６１２は、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）又は他のタイプのストレージデバイスのような、１又は複数の揮発性ストレージ（又はメモリ）デバイスを含み得る。ハードディスクのような不揮発性メモリもまた、用いられ得る。追加的なデバイスは、複数のＣＰＵ及び／又は複数のシステムメモリのような相互接続ネットワーク６０４を介して通信し得る。
【００３０】
ＧＭＣＨ６０８はまた、ディスプレイデバイス６１６と通信を行う、グラフィックスインタフェース６１４を含み得る。一実施形態において、グラフィックスインタフェース６１４は、アクセラレーティッドグラフィックポート（ＡＧＰ）又は周辺機器相互接続（ＰＣＩ）（又は、ＰＣＩエクスプレス（ＰＣＩｅ）インタフェース）を介して、ディスプレイデバイス６１６と通信し得る。実施形態において、（フラットパネルディスプレイのような）ディスプレイ６１６は、例えば、ビデオメモリ又はシステムメモリのようなストレージデバイスに格納された、画像のデジタル表現を、ディスプレイ６１６によって解釈され、表示される表示信号に変換する信号変換器を通じて、グラフィックスインタフェース６１４と通信を行い得る。ディスプレイデバイスによって生成される表示信号は、ディスプレイ６１６によって解釈され、その次にそこに表示される前に、様々な制御デバイスを通り得る。
【００３１】
ハブインタフェース６１８は、ＧＭＣＨ６０８及び入出力制御ハブ（ＩＣＨ）６２０が通信することを可能にし得る。ＩＣＨ６２０は、コンピューティングシステム６００と通信する複数のＩ／Ｏデバイスに、インタフェースを提供し得る。ＩＣＨ６２０は、周辺機器相互接続（ＰＣＩ）ブリッジ、ユニバーサルシリアルバス（ＵＳＢ）コントローラ、又は、他のタイプの周辺ブリッジ若しくはコントローラのような、周辺ブリッジ（又はコントローラ）６２４を通じて、バス６２２と通信し得る。ブリッジ６２４は、ＣＰＵ６０２と周辺デバイスとの間のデータパスを提供し得る。他のタイプのトポロジーが用いられ得る。また、複数のバスが、例えば、複数のブリッジ又は複数のコントローラを通じて、ＩＣＨ６２０と通信し得る。更に、ＩＣＨ６２０との通信を行う他の周辺機器は、様々な実施形態において、インテグレーテッドドライブエレクトロニクス（ＩＤＥ）、又はスモールコンピュータシステムインタフェース（ＳＣＳＩ）ハードドライブ、ＵＳＢポート、キーボード、マウス、パラレルポート、シリアルポート、フロッピー（登録商標）ディスクドライブ、デジタル出力サポート（例えば、デジタルビデオインタフェース（ＤＶＩ））、又は他のデバイスを含み得る。
【００３２】
バス６２２は、オーディオデバイス６２６、１又は複数のディスクドライブ６２８、及び、（コンピュータネットワーク６０３と通信を行う）ネットワークインタフェースデバイス６３０と通信し得る。他のデバイスは、バス６２２を介して通信し得る。また、いくつかの実施形態において、（ネットワークインタフェースデバイス６３０のような）様々なコンポーネントは、ＧＭＣＨ６０８と通信し得る。加えて、プロセッサ６０２及びＧＭＣＨ６０８は、単一のチップを形成すべく、組み合わせられ得る。更に、他の実施形態において、グラフィックスアクセラレータは、ＧＭＣＨ６０８内に含まれ得る。
【００３３】
更に、コンピューティングシステム６００は、揮発性及び／又は不揮発性メモリ（又はストレージ）を含み得る。例えば、不揮発性メモリは、以下の、リードオンリメモリ（ＲＯＭ）、プログラマブルＲＯＭ（ＰＲＯＭ）、消去可能ＰＲＯＭ（ＥＰＲＯＭ）、電気的ＥＰＲＯＭ（ＥＥＰＲＯＭ）、ディスクドライブ（例えば、６２８）、フロッピー（登録商標）ディスク、コンパクトディスクＲＯＭ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、フラッシュメモリ、光磁気ディスク、又は電子データ（例えば、命令を含む）を格納可能な他のタイプの不揮発性機械可読媒体のうち１又は複数を含み得る。
【００３４】
図７は、実施形態に係る、ポイントツーポイント（ＰｔＰ）構成に配置されたコンピューティングシステム７００を示す。特に、図７は、プロセッサ、メモリ、及び、入出力デバイスが、多数のポイントツーポイントインタフェースにより相互接続されるシステムを示す。図１から６を参照して説明される処理は、システム７００の１又は複数のコンポーネントによって実行され得る。
【００３５】
図７に示されるように、システム７００は、いくつかのプロセッサを含み得る。記述を明瞭にすることを目的として、それらのうちの２つである、プロセッサ７０２及び７０４のみが示される。プロセッサ７０２及び７０４は、それぞれ、メモリ７１０及び７１２との通信を可能にする、ローカルのメモリコントローラハブ（ＭＣＨ）７０６及び７０８を含み得る。メモリ７１０及び／又は７１２は、図６のメモリ６１２を参照して説明されたもののような、様々なデータを格納し得る。
【００３６】
実施形態において、プロセッサ７０２及び７０４は、図６を参照して説明されるプロセッサ６０２のうちの１つであり得る。プロセッサ７０２及び７０４は、それぞれ、ＰｔＰインタフェース回路７１６及び７１８を用いて、ポイントツーポイント（ＰｔＰ）インタフェース７１４を介して、データを交換し得る。また、プロセッサ７０２及び７０４は、それぞれ、ポイントツーポイントインタフェース回路７２６、７２８、７３０及び７３２を用いて、個々のＰｔＰインタフェース７２２及び７２４を介して、チップセット７２０とデータを交換し得る。チップセット７２０は、更に、例えば、ＰｔＰインタフェース回路７３７を用いて、グラフィックスインタフェース７３６を介して、グラフィックス回路７３４とデータを交換し得る。
【００３７】
少なくとも一実施形態は、プロセッサ７０２及び７０４内に提供され得る。例えば、システム７００の１又は複数のコンポーネントは、プロセッサ７０２及び７０４内に位置されるものを含む、図１から６のロジック１４０を含み得る。しかしながら、他の実施形態は、図７のシステム７００内の他の回路、ロジックユニット、又は、デバイスに存在し得る。更に、他の実施形態は、図７に示される、いくつかの回路、ロジックユニット、又は、デバイスにわたって分散され得る。
【００３８】
チップセット７２０は、ＰｔＰインタフェース回路７４１を用いてバス７４０と通信し得る。バス７４０は、バスブリッジ７４２及びＩ／Ｏデバイス７４３のような１又は複数のデバイスと通信し得る。バス７４４を介して、バスブリッジ７４２は、キーボード／マウス７４５、（モデム、ネットワークインタフェースデバイス又はコンピュータネットワーク６０３と通信し得る他の通信デバイスのような）通信デバイス７４６のような他のデバイス、オーディオＩ／Ｏデバイス７４７、及び／又はデータストレージデバイス７４８と通信し得る。データストレージデバイス７４８は、プロセッサ７０２及び／又は７０４により実行され得るコード７４９を格納し得る。
【００３９】
更に、本明細書で説明される（例えば、様々な実施形態においてグラフィックスロジックにより処理され得る）シーン、画像、又はフレームは、（（スマートフォン、タブレット、ラップトップ、スタンドアロンカメラ等のような別のデバイスにおいて埋め込まれ得る）デジタルカメラ、又はキャプチャされた画像がその次にデジタル形態に変換されるアナログデバイスのような）画像キャプチャデバイスによりキャプチャされ得る。また、本明細書で説明されるシーン、画像、又はフレームは、アート設計、ゲーム設計、又は任意の種類の３Ｄ／２Ｄ（２次元／３次元）業界設計により生成され得る。例えば、シーンは、ジオメトリ構造のセット、及び関連するテクスチャマップ、照明効果等を指し得る。更に、実施形態において、画像キャプチャデバイスは、複数のフレームをキャプチャすることが可能であり得る。更に、いくつかの実施形態において、シーンにおけるフレームの１又は複数は、コンピュータ上に設計／生成される。また、シーンのフレームの１又は複数は、（例えば、フラットパネルディスプレイデバイス等を含む、図６及び／又は７を参照して説明されるディスプレイのような）ディスプレイを介して示され得る。
【００４０】
いくつかの実施形態において、本明細書で説明されるコンポーネントのうちの１又は複数は、システム・オン・チップ（ＳＯＣ）デバイスとして実装され得る。図８は、実施形態に係るＳＯＣパッケージのブロック図を示す。図８に示されるように、ＳＯＣ８０２は、１又は複数の中央処理装置（ＣＰＵ）コア８２０、１又は複数のグラフィックスプロセッサユニット（ＧＰＵ）コア８３０、入出力（Ｉ／Ｏ）インタフェース８４０、及びメモリコントローラ８４２を含む。ＳＯＣパッケージ８０２の様々なコンポーネントは、本明細書で他の図を参照して説明されるもののような相互接続又はバスに結合され得る。また、ＳＯＣパッケージ８０２は、本明細書で他の図を参照して説明されるもののように、より多いか又はより少ないコンポーネントを含み得る。更に、ＳＯＣパッケージ８２０のコンポーネントのそれぞれは、例えば、本明細書で他の図を参照して説明されるように、１又は複数の他のコンポーネントを含み得る。一実施形態において、ＳＯＣパッケージ８０２（及びそのコンポーネント）は、１又は複数の集積回路（ＩＣ）ダイに提供され、例えば、それらは、単一の半導体デバイスへとパッケージングされる。
【００４１】
図８に示されるように、ＳＯＣパッケージ８０２は、メモリコントローラ８４２を介して、（本明細書で他の図を参照して説明されるメモリと、類似又は同一であり得る）メモリ８６０に結合される。実施形態において、メモリ８６０（又はその一部）は、ＳＯＣパッケージ８０２の上に集積されることが可能である。
【００４２】
Ｉ／Ｏインタフェース８４０は、例えば、本明細書で他の図を参照して説明されるもののような相互接続及び／又はバスを介して、１又は複数のＩ／Ｏデバイス８７０に結合され得る。Ｉ／Ｏデバイス８７０は、キーボード、マウス、タッチパッド、ディスプレイ、（カメラ又はカムコーダ／ビデオレコーダのような）画像／ビデオキャプチャデバイス、タッチスクリーン、スピーカ等のうち１又は複数を含み得る。更に、実施形態において、ＳＯＣパッケージ８０２は、ロジック１４０を含み得る／集積し得る。代替的に、ロジック１４０は、（すなわち、別個のロジックとして）ＳＯＣパッケージ８０２の外部に提供され得る。
【００４３】
以下の例は、更なる実施形態に関する。例１は、少なくとも部分的にハードウェアロジックを有し、グラフィックス処理装置（ＧＰＵ）上で実行する１又は複数のスレッドを、１又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させるためのロジックを備え、１又は複数のスレッドのコンテキストデータは、命令レベル粒度で１又は複数のスレッドの完了に応答して、メモリにコピーされる装置を含む。例２は、例１の装置を含み、コンテキストデータをメモリにコピーする前に、コンテキストデータを格納する共有ローカルメモリ（ＳＬＭ）を更に備える。例３は、例２の装置を含み、ロジックは更に、コンテキストデータを、ＳＬＭからメモリにコピーするためのものである。例４は、例３の装置を含み、コンテキストデータをコピーするためのロジックは、ダイレクトメモリアクセス（ＤＭＡ）ロジックを有する。例５は、例１の装置を含み、１又は複数のスレッドのコンテキストデータは、１又は複数のソフトウェア命令に応答して、メモリにコピーされる。例６は、例１の装置を含み、ロジックは、ＧＰＵ上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させるためのものである。例７は、例１の装置を含み、１又は複数のスレッド、又はプリエンプション要求に対応するスレッドは、ＧＰＵ上で、グラフィックス処理装置による汎用計算（ＧＰＧＰＵ）として実行される。例８は、例１の装置を含み、１又は複数のスレッドをスポーンするためのスレッドスポーナロジックを備える。例９は、例１の装置を含み、プロセッサは、ロジックを有する。例１０は、例１の装置を含み、１又は複数のプロセッサコアを有するプロセッサ、ロジック、又はメモリのうち１又は複数は、単一の集積回路ダイ上にある。
【００４４】
例１１は、プロセッサ上で実行されるとき、グラフィックス処理装置（ＧＰＵ）上で実行する１又は複数のスレッドを、１又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させる、１又は複数の処理を実行するようにプロセッサを構成する、１又は複数の命令を備えるコンピュータ可読媒体を含み、１又は複数のスレッドのコンテキストデータは、命令レベル粒度で１又は複数のスレッドの完了に応答して、メモリにコピーされる。例１２は、例１１のコンピュータ可読媒体を含み、プロセッサ上で実行されるとき、１又は複数のスレッドのコンテキストデータを、１又は複数のソフトウェア命令に応答して、メモリにコピーさせる１又は複数の処理を実行するようプロセッサを構成する、１又は複数の命令を更に備える。例１３は、例１１のコンピュータ可読媒体を含み、プロセッサ上で実行されるとき、ＧＰＵ上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させる、１又は複数の処理を実行するようプロセッサを構成する、１又は複数の命令を更に備える。例１４は、例１１のコンピュータ可読媒体を含み、１又は複数のスレッド、又はプリエンプション要求に対応するスレッドは、ＧＰＵ上で、グラフィックス処理装置による汎用計算（ＧＰＧＰＵ）として実行される。例１５は、例１１のコンピュータ可読媒体を含み、プロセッサ上で実行されるとき、１又は複数のスレッドのスポーンを引き起こす、１又は複数の処理を実行するようプロセッサを構成する、１又は複数の命令を更に備える。
【００４５】
例１６は、グラフィックス処理装置（ＧＰＵ）上で実行する１又は複数のスレッドを、１又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させる段階を備える方法を含み、１又は複数のスレッドのコンテキストデータは、命令レベル粒度で１又は複数のスレッドの完了に応答して、メモリにコピーされる。例１７は、例１６の方法を含み、１又は複数のスレッドのコンテキストデータを、１又は複数のソフトウェア命令に応答して、メモリにコピーさせる段階を更に備える。例１８は、例１６の方法を含み、ＧＰＵ上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させる段階を更に備える。例１９は、例１６の方法を含み、１又は複数のスレッド、又はプリエンプション要求に対応するスレッドを、ＧＰＵ上で、グラフィックス処理装置による汎用計算（ＧＰＧＰＵ）として実行する段階を更に備える。例２０は、例１６の方法を含み、１又は複数のスレッドのスポーンを引き起こす段階を更に備える。
【００４６】
例２１は、１又は複数のプロセッサコアを有するプロセッサと、シーンの少なくとも１つのフレームに対応し、１又は複数のプロセッサコアのうち少なくとも１つによりアクセスされるべきデータを格納するメモリと、シーンの少なくとも１つのフレームを提示するディスプレイデバイスと、少なくとも部分的にハードウェアロジックを有し、グラフィックス処理装置（ＧＰＵ）上で実行する１又は複数のスレッドを、１又は複数のスレッドをプリエンプトする要求に応答して、命令レベル粒度で停止させるためのロジックと、を備えるシステムを含み、１又は複数のスレッドのコンテキストデータは、命令レベル粒度で１又は複数のスレッドの完了に応答して、メモリにコピーされる。例２２は、例２１のシステムを含み、コンテキストデータをメモリにコピーする前に、コンテキストデータを格納する共有ローカルメモリ（ＳＬＭ）を更に備える。例２３は、例２１のシステムを含み、１又は複数のスレッドのコンテキストデータは、１又は複数のソフトウェア命令に応答して、メモリにコピーされる。例２４は、例２１のシステムを含み、ロジックは、ＧＰＵ上で実行する全てのスレッドを、要求に応答して、命令レベル粒度で停止させるためのものである。例２５は、例２１のシステムを含み、１又は複数のスレッド、又はプリエンプション要求に対応するスレッドは、ＧＰＵで、グラフィックス処理装置による汎用計算（ＧＰＧＰＵ）として実行される。例２６は、例２１のシステムを含み、１又は複数のスレッドをスポーンするためのスレッドスポーナロジックを備える。例２７は、例２１のシステムを含み、プロセッサは、ロジックを有する。例２８は、例２１のシステムを含み、プロセッサ、ロジック又はメモリのうち１又は複数は、単一の集積回路ダイ上にある。
【００４７】
例２９は、任意の先行の例に記載の方法を実行する手段を備える装置を含む。
【００４８】
例３０は、実行されるとき、任意の先行の例に記載の方法を実装し、又は装置を実現する機械可読命令を含む機械可読ストレージを含む。
【００４９】
様々な実施形態において、例えば、図１から８を参照して本明細書で説明された処理は、ハードウェア（例えば、ロジック回路）ソフトウェア、ファームウェア、又はそれらの組み合わせとして実装され得て、これらは、例えば、本明細書で説明された処理を実行すべく、コンピュータをプログラムするのに用いられる命令（又はソフトウェア手順）をそこに格納した有形の（例えば、非一時的な）機械可読、又はコンピュータ可読媒体を含むコンピュータプログラム製品として、提供され得る。機械可読媒体は、図１から８に関連して説明されたもののような、ストレージデバイスを含み得る。
【００５０】
更に、そのようなコンピュータ可読媒体は、コンピュータプログラム製品としてダウンロードされ得る。プログラムは、搬送波又は他の伝搬媒体において提供されるデータ信号によって、通信リンク（例えば、バス、モデム、又は、ネットワーク接続）を介して、リモートコンピュータ（例えば、サーバ）から、要求しているコンピュータ（例えば、クライアント）へと転送され得る。
【００５１】
明細書における「一実施形態」又は「実施形態」への言及は、当該実施形態に関連して記載された特定の特徴、構造及び／又は特性が、少なくともある実装の中に含まれ得ることを意味する。明細書中の様々な箇所における「一実施形態において」との語句の出現は、全て、同一の実施形態を参照していてもよく、していなくてもよい。
【００５２】
また、明細書及び特許請求の範囲において、「結合された」及び「接続された」という用語が、それらの活用形とともに用いられ得る。いくつかの実施形態において、「接続された」は、２つ又はそれより多くの要素が、互いに、物理的に又は電気的に又は直接接触していることを示すのに用いられ得る。「結合された」は、２つ又はそれより多くの要素が、物理的に又は電気的に直接接触していることを意味し得る。しかしながら、「結合され」はまた、２つ又はそれより多くの要素が、互いに直接接触してはいなくてもよいが、それでもなお、互いに協働又は相互作用し得ることを意味し得る。
【００５３】
従って、実施形態は、構造的特徴及び／又は方法論的動作に特有の言い回しで記載されているが、特許請求される主題は、記載されている特定の特徴又は動作に限定されなくてもよいことが理解されよう。むしろ、特定の特徴及び動作は、特許請求される主題を実装する例示形態として開示される。
【図１】
0006387571.tif 000002
【図２】
0006387571.tif 000003
【図３】
0006387571.tif 000004
【図４】
0006387571.tif 000005
【図５】
0006387571.tif 000006
【図５Ａ】
0006387571.tif 000007
【図６】
0006387571.tif 000008
【図７】
0006387571.tif 000009
【図８】
0006387571.tif 000010