(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-13
(45)【発行日】2023-12-21
(54)【発明の名称】グラフィックスコンテキストバウンシング
(51)【国際特許分類】
G06F 9/38 20180101AFI20231214BHJP
G06T 15/00 20110101ALI20231214BHJP
【FI】
G06F9/38 310Y
G06T15/00 501
(21)【出願番号】P 2021571386
(86)(22)【出願日】2020-05-29
(86)【国際出願番号】 US2020035203
(87)【国際公開番号】W WO2020243482
(87)【国際公開日】2020-12-03
【審査請求日】2023-05-22
(32)【優先日】2019-05-30
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】レックス エルドン マクラリー
(72)【発明者】
【氏名】イー ルオ
(72)【発明者】
【氏名】ハリー ジェイ. ワイズ
(72)【発明者】
【氏名】アレクサンダー フアド アシュカー
(72)【発明者】
【氏名】マイケル マントル
【審査官】漆原 孝治
(56)【参考文献】
【文献】米国特許第8736624(US,B1)
【文献】米国特許出願公開第2008/0313436(US,A1)
【文献】米国特許第10397362(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06T 15/00
(57)【特許請求の範囲】
【請求項1】
グラフィックス処理装置(GPU)のコマンドプロセッサにおいて、カプセル化された状態に対応する識別子を提供する条件付き実行パケットを受信することであって、前記カプセル化された状態は、前記条件付き実行パケットに続く1つ以上のコンテキスト状態パケットを含む、ことと、
前記カプセル化された状態の前記識別子が、前記GPUに現在記憶されているアクティブなコンテキスト状態の複数の記憶された識別子のうち何れかと一致する
と判別
したことに応じて、前記カプセル化された状態に続くコマンドパケットを実行することと、を含む、
方法。
【請求項2】
前記カプセル化された状態の前記識別子が、複数の記憶された識別子のうち何れかと一致するかどうかを判別することは、
前記GPUに現在記憶されているアクティブなコンテキスト状態の前記複数の記憶された識別子を記憶する識別子テーブルを検索するように、コンテキストマネージャにクエリすることを含む、
請求項1の方法。
【請求項3】
前記識別子が、アクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れかに一致すると判別したことに応じて、前記カプセル化された状態
に関連する1つ以上の状態更新パケットを破棄することと、
アクティブなコンテキスト状態の前記複数の記憶された識別子のうち一致する識別子を、前記カプセル化された状態に続く前記コマンドパケットに割り当てることと、を含む、
請求項2の方法。
【請求項4】
前記識別子が、アクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れとも一致しないと判別したことに応じて、新しいコンテキスト状態セットを割り当てることと、
前記コマンドパケットを実行する前に、前記カプセル化された状態の前記1つ以上のコンテキスト状態パケットを実行することと、を含む、
請求項2の方法。
【請求項5】
前記GPUに現在記憶されているアクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れかを前記識別子テーブルからリタイアすることと、
前記新しいコンテキスト状態セットの前記カプセル化された状態に対応する前記識別子を前記識別子テーブルに記憶することと、を含む、
請求項4の方法。
【請求項6】
前記コマンドパケットは、ドローコールを含む、
請求項1の方法。
【請求項7】
前記コマンドパケットは、前記カプセル化された状態のサイズを状態更新パケットの数に指定する、
請求項1の方法。
【請求項8】
プロセッサであって、
複数の状態レジスタと、
コマンドプロセッサと、を備え、
前記コマンドプロセッサは、
カプセル化された状態に対応する識別子を含む条件付き実行パケットを受信することであって、前記カプセル化された状態は、前記条件付き実行パケットに続く1つ以上のコンテキスト状態パケットを含む、ことと、
前記カプセル化された状態の前記識別子が、前記プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の記憶された識別子のうち何れかと一致する
と判別
したことに応じて、前記カプセル化された状態に続くコマンドパケットを実行することと、
を行うように構成されている、
プロセッサ。
【請求項9】
前記プロセッサに現在記憶されているアクティブなコンテキスト状態の前記複数の記憶された識別子を記憶する識別子テーブルを含むコンテキストマネージャを備える、
請求項8のプロセッサ。
【請求項10】
前記プロセッサは、提供された識別子について前記識別子テーブルを検索するように前記コンテキストマネージャにクエリするように構成されている、
請求項9のプロセッサ。
【請求項11】
前記プロセッサは、
前記識別子が、アクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れかに一致すると判別したことに応じて、前記カプセル化された状態
に関連する1つ以上の状態更新パケットを破棄することと、
アクティブなコンテキスト状態の前記複数の記憶された識別子のうち一致する識別子を、前記カプセル化された状態に続く前記コマンドパケットに割り当てることと、
を行うように構成されている、
請求項9のプロセッサ。
【請求項12】
前記プロセッサは、
前記識別子が、アクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れとも一致しないと判別したことに応じて、新しいコンテキスト状態セットを割り当てることと、
前記コマンドパケットを実行する前に、前記カプセル化された状態の前記1つ以上のコンテキスト状態パケットを実行することと、
を行うように構成されている、
請求項9のプロセッサ。
【請求項13】
前記プロセッサは、
前記プロセッサに現在記憶されているアクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れかを前記識別子テーブルからリタイアすることと、
前記新しいコンテキスト状態セットの前記カプセル化された状態に対応する前記識別子を前記識別子テーブルに記憶することと、
を行うように構成されている、
請求項12のプロセッサ。
【請求項14】
前記コマンドパケットは、前記カプセル化された状態のサイズを状態更新パケットの数に指定する、
請求項8のプロセッサ。
【請求項15】
実行可能な命令のセットを具現化するコンピュータ可読記憶媒体であって、
前記実行可能な命令のセットは、少なくとも1つのプロセッサによって実行されると、
前記プロセッサのコマンドプロセッサにおいて、カプセル化された状態に対応する識別子を提供する条件付き実行パケットを受信することであって、前記カプセル化された状態は、前記条件付き実行パケットに続く1つ以上のコンテキスト状態パケットを含む、ことと、
前記カプセル化された状態の前記識別子が、前記プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の記憶された識別子のうち何れかと一致する
と判別
したことに応じて、前記カプセル化された状態に続くコマンドパケットを実行することと、
を前記プロセッサに実行させる、
コンピュータ可読記憶媒体。
【請求項16】
前記実行可能な命令のセットは、前記プロセッサによって実行されると、
前記プロセッサに現在記憶されているアクティブなコンテキスト状態の前記複数の記憶された識別子を記憶する識別子テーブルを検索するように、コンテキストマネージャにクエリすることを前記プロセッサに実行させる、
請求項15のコンピュータ可読記憶媒体。
【請求項17】
前記実行可能な命令のセットは、前記プロセッサによって実行されると、
前記識別子が、アクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れかに一致すると判別したことに応じて、前記カプセル化された状態
に関連する1つ以上の状態更新パケットを破棄することと、
アクティブなコンテキスト状態の前記複数の記憶された識別子のうち一致する識別子を、前記カプセル化された状態に続く前記コマンドパケットに割り当てることと、
を前記プロセッサに実行させる、
請求項16のコンピュータ可読記憶媒体。
【請求項18】
前記実行可能な命令のセットは、前記プロセッサによって実行されると、
前記識別子が、アクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れとも一致しないと判別したことに応じて、新しいコンテキスト状態セットを割り当てることと、
前記コマンドパケットを実行する前に、前記カプセル化された状態の前記1つ以上のコンテキスト状態パケットを実行することと、
を前記プロセッサに実行させる、
請求項16のコンピュータ可読記憶媒体。
【請求項19】
前記実行可能な命令のセットは、前記プロセッサによって実行されると、
前記プロセッサに現在記憶されているアクティブなコンテキスト状態の前記複数の記憶された識別子のうち何れかを前記識別子テーブルからリタイアすることと、
前記新しいコンテキスト状態セットの前記カプセル化された状態に対応する前記識別子を前記識別子テーブルに記憶することと、
を前記プロセッサに実行させる、
請求項18のコンピュータ可読記憶媒体。
【請求項20】
前記コマンドパケットは、前記カプセル化された状態のサイズを状態更新パケットの数に指定する、
請求項15のコンピュータ可読記憶媒体。
【請求項21】
前記カプセル化された状態に対応する識別子は、前記カプセル化された状態のハッシュ化された表現に対応する、
請求項15のコンピュータ可読記憶媒体。
【請求項22】
前記カプセル化された状態に対応する識別子は、前記カプセル化された状態のハッシュ化された表現に対応する、
請求項1の方法。
【請求項23】
前記カプセル化された状態に対応する識別子は、前記カプセル化された状態のハッシュ化された表現を含む、
請求項8のプロセッサ。
【発明の詳細な説明】
【背景技術】
【0001】
グラフィックス処理装置(GPU)は、グラフィックス処理タスクを実行するように特別に設計された処理装置である。GPUは、例えば、ビデオゲームアプリケーション等のエンドユーザアプリケーションに必要なグラフィックス処理タスクを実行することができる。一般に、エンドユーザアプリケーションとGPUとの間には、いくつかのソフトウェア層が存在する。例えば、エンドユーザアプリケーションは、アプリケーションプログラミングインタフェース(API)を介してGPUと通信する場合がある。APIは、エンドユーザアプリケーションが、GPUに依存した形式ではなく標準化された形式でグラフィックスデータ及びコマンドを出力することを可能にする。
【0002】
多くのGPUは、グラフィックスアプリケーションの命令を実行するためのグラフィックスパイプラインを含む。グラフィックスパイプラインは、命令の異なるステップを同時に処理する複数の処理ブロックを含む。パイプライン方式により、GPUは、命令を実行するために必要なステップの間に存在する並列性を利用することが可能になる。その結果、GPUは、より多くの命令を短い時間で実行することができる。グラフィックスパイプラインの出力は、グラフィックスパイプラインの状態に依存する。グラフィックスパイプラインの状態は、グラフィックスパイプラインがローカルに記憶している状態パッケージ(例えば、テクスチャハンドラ、シェーダ定数、変換行列等を含むコンテキスト固有の定数)に基づいて更新される。コンテキスト固有の定数がローカルに保持されているので、グラフィックスパイプラインによって迅速にアクセスすることができる。
【0003】
添付図面を参照することによって、本開示をより良好に理解することができ、その多数の特徴及び利点が当業者に明らかになる。異なる図面における同じ符号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0004】
【
図1】いくつかの実施形態による、グラフィックスコンテキストバウンシングを使用するように構成されたグラフィックス処理装置を含むシステムを示すブロック図である。
【
図2】いくつかの実施形態による、
図1のGPUにおけるコマンドストリーム命令の処理を示すブロック図である。
【
図3】いくつかの実施形態による、
図1のGPUにおけるカプセル化された状態を排出することを示すブロック図である。
【
図4】いくつかの実施形態による、グラフィックスコンテキストバウンシングの方法を示すフロー図である。
【発明を実施するための形態】
【0005】
グラフィックス処理を実行するために、システムの中央処理装置(CPU)は、GPUに対して、CPUの指示に従ってオブジェクトを描画するように指示する一連のコマンドを含むドローコール等のコールを発行することがよくある。ドローコールは、GPUグラフィックスパイプラインを介して処理されるため、構成可能な様々な設定を使用して、メッシュ及びテクスチャのレンダリング方法を決定する。一般的なGPUワークフローでは、メモリアレイ内の定数の値を更新し、その定数をデータとして用いて描画オペレーションを行う。メモリアレイに所定の定数のセットが含まれるGPUは、特定の状態にあると見なすことができる。これらの定数及び設定は、コンテキスト状態(「レンダリング状態」、「GPU状態」又は単に「状態」とも呼ばれる)と呼ばれ、レンダリングの様々な態様に影響を与え、GPUがオブジェクトをレンダリングするために必要な情報を含む。コンテキスト状態は、メッシュのレンダリング方法を定義し、現在の頂点/インデックスバッファ、現在の頂点/ピクセルシェーダプログラム、シェーダ入力、テクスチャ、マテリアル、ライティング、透明度等の情報を含む。コンテキスト状態は、グラフィックスパイプラインでレンダリングされる描画又は描画セットに固有の情報を含む。このため、コンテキストは、何かを正しく描画するために必要なGPUパイプラインの状態を指す。
【0006】
多くのGPUは、パイプライン方式と呼ばれる技術を使用して命令を実行する。パイプライン方式により、GPUが命令の異なるステップを同時に処理することで、命令の実行に必要なステップの間に存在する並列性を利用することを可能になる。その結果、GPUは、より多くの命令を短い時間で実行することができる。グラフィックスパイプラインによって出力されるビデオデータは、グラフィックスパイプラインがローカルに保存している状態パッケージ(例えば、コンテキスト固有の定数)に依存する。GPUでは、GPUの状態を設定して描画オペレーションを実行してから次の描画オペレーションの前に状態を僅かに変更するのが一般的である。状態設定(例えば、メモリ内の定数の値)は、ある描画オペレーションから次の描画オペレーションまで同じ状態のままであることが多い。
【0007】
コンテキスト固有の定数は、グラフィックスパイプラインが迅速にアクセスできるようにローカルに保持される。ただし、GPUハードウェアは、一般に、メモリ制約があり、限られた数のコンテキスト状態のセットしかローカルに保存しない(したがって、限られた数のコンテキスト状態のセットでしか動作しない)。それに対応して、GPUは、別のものを描画するにはグラフィックスパイプライン状態を変更する必要があるので、新しいコンテキストレジスタのセットで作業を開始するために、コンテキスト状態を頻繁に変更することになる。GPUは、新たに供給されるコンテキストへのコンテキストロールを実行して、現在のレジスタを新たに割り当てられたコンテキストにコピーすることで現在のコンテキストを解放し、その後、新たなレジスタ値をプログラミングすることで新しい状態更新を適用する。ローカルに記憶されたコンテキスト状態セットの数が限られているため、GPUがコンテキストを使い果たし、新しいコンテキストが割り当てられ得るようにコンテキストが解放されるのを待っている間に、グラフィックスパイプラインがストールすることがある。様々な実施形態において、CPUは、以前にアクティブであったコンテキスト状態を再利用し、コンテキストバウンシング無しに現在のコンテキストを解放して新しいコンテキストを割り当てる。使用可能なコンテキストがない場合、GPUは、コンテキストが解放されまで待機する必要があるため、ストールが発生する。
【0008】
GPUシステムの性能を向上させるために、
図1~
図4は、ハッシュベースの識別子をコンテキスト状態に割り当て、新しいコンテキストを割り当てずに、一致するコンテキストに切り替えること(コンテキストバウンシングと呼ばれる)によって、コンテキスト状態を管理するシステム及び方法を示している。様々な実施形態では、コンテキストバウンシングの方法は、グラフィックス処理装置(GPU)のコマンドプロセッサにおいて、カプセル化された状態に対応するハッシュ識別子を提供する条件付き実行パケットを受信することを含む。カプセル化された状態は、条件付き実行パケットに続く1つ以上のコンテキスト状態パケットを含む。カプセル化された状態に続くコマンドパケットは、カプセル化された状態のハッシュ識別子が、GPUに現在記憶されているアクティブなコンテキスト状態の複数のハッシュ識別子うち何れかと一致するかどうかを判別することに少なとも部分的に基づいて実行される。様々な実施形態において、カプセル化された状態のハッシュ識別子が、複数のハッシュ識別子のうち何れかと一致するかどうかを判別することは、コンテキストマネージャにクエリを行って、GPUに現在記憶されているアクティブなコンテキスト状態の複数のハッシュ識別子を記憶するハッシュテーブルを検索することを含む。
【0009】
いくつかの実施形態では、コンテキストバウンシングは、ハッシュ識別子がアクティブなコンテキスト状態の複数のハッシュ識別子のうち何れかと一致することを判別したことに応じて、カプセル化された状態を排出することを含む。他の実施形態では、ハッシュ識別子がアクティブなコンテキスト状態の複数のハッシュ識別子の何れとも一致しないことを判別したことに応じて、新しいコンテキスト状態セットが割り当てられる。さらに、コマンドパケットを実行する前に、カプセル化された状態の1つ以上のコンテキスト状態パケットが実行される。既存のコンテキストに(すなわち、新しいコンテキストを割り当てずに)戻ることで、コンテキストが不足してグラフィックスパイプラインがストールする可能性が低くなる。
【0010】
図1は、いくつかの実施形態による、グラフィックスコンテキストバウンシングを使用するように構成されたグラフィックス処理装置を含むシステム100を示すブロック図である。図示した例では、システム100は、中央処理装置(CPU)102と、グラフィックス処理装置(GPU)104と、GPU104によって利用されるデバイスメモリ106と、CPU102とGPU104とによって共有されるシステムメモリ108と、を含む。様々な実施形態では、GPU104は、専用のデバイス、いくつかのデバイス、又は、より大きなデバイス(例えば、ノースブリッジデバイス)に統合されたものであってもよい。メモリ106,108は、ダブルデータレートダイナミックランダムアクセスメモリ(DDR DRAM)、グラフィックスDDR DRAM(GDDR DRAM)等のように、様々なランダムアクセスメモリ(RAM)又はこれらの組み合わせを含む。GPU104は、バス110を介して、CPU102、デバイスメモリ106及びシステムメモリ108と通信する。バス110は、ペリフェラルコンポーネントインタフェース(PCI)バス、アクセラレーテッドグラフィックスポート(AGP)バス、PCIエクスプレス(PCIE)バス等のように、コンピューティングシステムで使用される任意のタイプのバスを含むが、これらに限定されるものではない。
【0011】
CPU102は、GPU104で処理するための命令をコマンドバッファに送る。様々な実施形態では、コマンドバッファは、例えば、バス110に結合された別個のメモリ(例えば、デバイスメモリ106)内のシステムメモリ108にあってもよい。
【0012】
図示したように、CPU102は、グラフィックスコマンドを生成するための1つ以上のアプリケーション(複数可)112及びユーザモードドライバ116(又は、カーネルモードドライバ等の他のドライバ)等を実行するいくつかのプロセスを含む。様々な実施形態では、1つ以上のアプリケーション112は、GPU104の機能を利用するアプリケーションを含む。アプリケーション112は、グラフィカルユーザインタフェース(GUI)及び/又はグラフィックスシーンをレンダリングするようにGPU104に指示する1つ以上のグラフィックス命令を含み得る。例えば、グラフィックス命令は、GPU104によってレンダリングされる1つ以上のグラフィックスプリミティブのセットを定義する命令を含み得る。
【0013】
いくつかの実施形態では、アプリケーション112は、グラフィックスアプリケーションプログラミングインタフェース(API)114を利用して、ユーザモードドライバ116(又は、同様のGPUドライバ)を呼び出す。ユーザモードドライバ116は、1つ以上のグラフィックスプリミティブを表示可能グラフィックス画像にレンダリングするために、1つ以上のコマンドをGPU104に発行する。ユーザモードドライバ116に対してアプリケーション112によって発行されるグラフィックス命令に基づいて、ユーザモードドライバ116は、GPU104がグラフィックスのレンダリングを実行するための1つ以上のオペレーションを指定する1つ以上のグラフィックスコマンドを生成する。いくつかの実施形態では、ユーザモードドライバ116は、CPU102で動作するアプリケーション112の一部である。例えば、ユーザモードドライバ116は、CPU102で動作するゲームアプリケーションの一部であり得る。同様に、カーネルモードドライバ(図示省略)は、CPU102で動作するオペレーティングシステムの一部であってもよい。ユーザモードドライバ116によって生成されるグラフィックスコマンドは、表示用の画像又はフレームを生成することを目的としたグラフィックスコマンドを含む。ユーザモードドライバ116は、API114から受信した標準コードを、GPU104によって解釈される命令のネイティブフォーマットに変換する。ユーザモードドライバ116は、通常、GPU104の製造業者によって書き込まれる。ユーザモードドライバ116によって生成されたグラフィックスコマンドは、実行のためGPU104に送られる。そして、GPU104は、グラフィックスコマンドを実行し、その結果を使用して、表示画面に何を表示するかを制御することができる。
【0014】
様々な実施形態では、CPU102は、GPU104用のグラフィックスコマンドをコマンドバッファ118に送る。
図1には、説明を容易にするために別個のモジュールとして描かれているが、コマンドバッファ118は、例えば、デバイスメモリ106、システムメモリ108又はバス110に通信可能に結合された別個のメモリに配置されてもよい。コマンドバッファ118は、GPU104への入力を含むグラフィックスコマンドのストリームを一時的に記憶する。グラフィックスコマンドのストリームは、例えば、1つ以上のコマンドパケット及び/又は1つ以上の状態更新パケットを含む。いくつかの実施形態では、コマンドパケットは、表示のために出力される画像データに対する処理を実行するようにGPU104に指示する描画コマンド(交換可能に「ドローコール」とも呼ばれる)を含む。例えば、描画コマンドは、メモリに記憶された1つ以上の頂点のグループによって定義されたもの(例えば、頂点バッファで定義されたもの)をレンダリングするようにGPU104に指示する場合がある。いくつかの実施形態では、1つ以上の頂点のグループによって定義される幾何学的形状は、レンダリングされる複数のプリミティブに対応する。
【0015】
様々な実施形態では、状態コマンド(交換可能に「コンテキスト状態パケット」又は「状態更新パケット」とも呼ばれる)は、1つ以上の状態変数(例えば、描画色)を変更するようにGPU104に対して指示する。いくつかの実施形態では、コンテキスト状態パケットは、GPU104でグラフィックスパイプライン120の状態を更新する定数又は定数のセットを含む。状態更新パケットは、例えば、ドローコールの実行中に描画又はブレンドされる色を更新することができる。ここでは、ドローコール及びコンテキスト状態パケットに関連して説明しているが、当業者は、本開示の範囲から逸脱することなく、他のコマンドを利用することができることを認識するであろう。
【0016】
GPU104は、CPU102から、(例えば、コマンドバッファ118及びバス110を介して)実行されるコマンドストリーム内のコマンドを受信し、グラフィックスパイプライン120においてこれらのコマンドの実行を調整するコマンドプロセッサ122を含む。様々な実施形態では、コマンドプロセッサ122は、ハードウェア、ファームウェア、ソフトウェア、又は、これらの組み合わせで実装される。コマンドストリームは、上述したように、1つ以上のドローコール及びコンテキスト状態パケットを含む。また、コマンドプロセッサ122は、グラフィックスパイプライン120のレジスタに書き込まれたコンテキスト状態を管理する。様々な実施形態において、コマンドプロセッサは、コンテキスト状態パケットを受信したことに応じて、コンテキスト状態パケットに基づいて、GPU104内の1つ以上の状態レジスタを特定の値に設定し、及び/又は、コンテキスト状態パケットに基づいて、1つ以上の固定機能処理装置を構成する。
【0017】
図1には、1つのコマンドプロセッサ122を有するものとして示されているが、当業者は、GPU104が、ハードウェアキューからパケットを取り出して実行するための任意の数及びタイプのコマンドプロセッサを含んでもよいことを認識するであろう。様々な実施形態において、「パケット」は、単一のコマンドを符号化するメモリバッファを指す。異なるタイプのパケットが、ハードウェアキュー、メモリバッファ等に記憶されることがある。さらに、本明細書で使用される場合、「ブロック」という用語は、ASICに含まれる処理モジュール、CPUの実行パイプライン、及び/又は、GPUのグラフィックスパイプラインを指す。このような処理モジュールは、算術論理ユニット、乗算/除算ユニット、浮動小数点ユニット、カラーバッファ、頂点シェーダ、ピクセルシェーダ、クリッピングユニット、又は、当業者に明らかな他の処理モジュールを含むことができるが、これらに限定されない。
【0018】
グラフィックスパイプライン120は、ステージA 124aと、ステージB 124bと、ステージN 124nと、を含む複数のステージ124を含む。様々な実施形態では、様々なステージ124の各々は、ドローコールの様々な態様を実行するグラフィックスパイプライン120のステージを表す。コマンドプロセッサ122は、動作状態を記憶し更新するために、コンテキスト状態更新をコンテキストレジスタのローカルバンクに書き込む。
図1に示すように、コマンドプロセッサは、状態更新を現在の状態レジスタ126に書き込む。
【0019】
従来のコンテキスト管理技術は、情報又はコマンドパケットをバッファ(キューバッファと呼ばれることもある)にディスパッチしていた。このようなキューバッファは、実行中のプログラムがコマンドを送信する先入れ先出し(FIFO)等の順序で生成される。ただし、GPUのメモリ容量のために、任意の時点でグラフィックスパイプラインに記憶され、処理可能なレンダリング状態セットの数が限られている。そのため、1つの状態セットで逐次処理を行うことができるが、ドライバが描画オペレーションを実行した後にコンテキスト状態を変更する場合、CPは、GPUが異なる状態セットに変更された後に完了することを確実にするために、レジスタの書き込みとその後に続く読み出しのシーケンスを実行しなければならない。新しいコンテキストのためのコンテキストローリング処理は、コマンドプロセッサ122が、現在のコンテキストを解放するためのイベントを、グラフィックスパイプラインに送ることを含む。完了すると、コマンドプロセッサに通知され、コンテキストが再利用される(又は、新しいコンテキストが割り当てられる)ようになる。しかし、これらのコンテキストローリング処理は、現在のコンテキストに関連するドローコールがグラフィックスパイプラインの様々なステージを経て処理を完了するまで、使用するコンテキストが不足し、グラフィックスパイプラインをストールさせる可能性が高くなる。一般に、GPUオペレーションは、任意の時点で実行中の様々な量の作業でパイプライン化される。つまり、グラフィックスパイプラインをストールさせ、状態を変更する前に実行中のタスクがリタイアする(退く)必要がある場合、GPUバックエンドが不足する可能性が高くなる。
【0020】
コンテキスト状態をより効率的に管理するために、GPU104は、グラフィックスコンテキストマネージャ128を含む。グラフィックスコンテキストマネージャ128は、GPU104のレジスタに現在記憶されているコンテキスト状態のセットに対応するハッシュベースの識別子のセットを記憶するハッシュテーブル130を保持する。グラフィックスコンテキストマネージャ128は、本明細書で説明するハッシュ識別子検索及びコンテキスト割り当てオペレーションを実行するためのコンテキスト割り当て論理モジュール132をさらに含む。本明細書でさらに説明するように、ユーザモードドライバ116は、ユーザモードドライバ116がグラフィックスコマンドにプログラムする新しいコンテキスト状態を識別するために、ユニークなハッシュ識別子を提供する。様々な実施形態において、ユーザモードドライバ116は、新しい状態パケット(又は、他のトークン方式)を介して、GPU104における全てのアクティブな状態をスキャンし、新しいコンテキストのユニークなハッシュ識別子が、現在アクティブなコンテキスト状態の複数のハッシュ識別子(すなわち、ハッシュテーブル130に記憶されたハッシュ識別子)のうち何れかと一致するかどうかを判別するように、コマンドプロセッサ122に指示する。
【0021】
いくつかの実施形態では、コマンドプロセッサ122は、ハッシュテーブル130が、新しいコンテキストに対応する要求されたユニークなハッシュ識別子を記憶している(すなわち、コンテキストが使用可能であることを示す)かどうかを判別するために、グラフィックスコンテキストマネージャ128に対してハッシュテーブル130を検索するようにクエリする。ハッシュテーブル130が、要求されたユニークなハッシュ識別子を含まない場合、グラフィックスコンテキストマネージャ128は、要求されたユニークなハッシュ識別子を使用して、新しいコンテキストを割り当てる。一方、ハッシュテーブル130が、要求されたユニークなハッシュ識別子を含む場合(それにより、要求されたユニークなハッシュ識別子がGPU104において既にアクティブである状態に対応することを通知する場合)、グラフィックスコンテキストマネージャ128は、そのコンテキストを返す。
【0022】
GPU104は、新しいコンテキストを割り当てるか、コンテキストが解放される(それによってグラフィックスパイプラインのストールを生じさせる)可能性があるのを待つ代わりに、新しいコンテキストを(例えば、キャッシュメモリがキャッシュラインを共有する方法と同じようにして)割り当てることなく、GPU104で既に実行されている既存の一致するコンテキストに切り替えることによって、コンテキストバウンシングを実行する。したがって、GPU104は、状態セットが依然として利用可能である(すなわち、GPU104でロードされている)ことを条件として、複数の状態セットで非順次プロセスを実行することができる。このアプローチは、GPU104のオンボードの状態をより効率的に利用し、特にアプリケーション112が少数の状態間を素早く切り替えている場合に(従来のコンテキスト管理技術では、描画毎に状態が変化するので、コンテキストローリング及び新しい状態の取得を伴い、コンテキストがすぐに失われてしまう)、使用するコンテキストの不足に関連するストールの数を低減することができる。
【0023】
図2は、いくつかの実施形態による、CPU102がGPU104を対象とした命令を送信する実施形態を示すブロック図である。図示したように、CPU102は、命令をコマンドバッファ118に送る。コマンドバッファ118は、CPU102からのコマンドストリームのコマンドを一時的に記憶する。コマンドのストリームは、例えば、条件付き実行パケット、状態更新パケット、及び、ドローコールパケットを含む。様々な実施形態において、当業者に明らかなように、他のコマンドがコマンドのストリームに含まれてもよい。
【0024】
条件付き実行パケットは、
図1のユーザモードドライバ116(又は、他のソフトウェアドライバ)によって挿入されるコマンドであり、このコマンドは、条件付き実行パケットに続く1つ以上のコンテキスト状態パケットに対応するハッシュ識別子を提供する。いくつかの実施形態では、条件付き実行パケットは、dワード(「ダブルワード」の略)内のコンテキスト状態パケットの次のグループのサイズに対応するdワードデータも含む。コンテキスト状態パケットのサイズは、単一のdワードから多数のdワードまでサイズに幅があるため、dワードデータは、条件付き実行パケットのハッシュ識別子に関連付けられたN個のコンテキスト状態パッケージを定義し、さらに、そのハッシュ識別子に続く次の描画(複数可)のためのコンテキスト状態のセットアップに必要な全てのコンテキストレジスタ更新を表す。さらに、本明細書でさらに説明するように、dワードデータは、グラフィックスコンテキストマネージャ128が、そのハッシュ識別子に関連付けられたコンテキストがGPU104で既にアクティブであることを示す場合に、破棄するdワードの数を定義する。その決定に基づいて、コマンドプロセッサ122は、その特定のハッシュIDに関連する全ての状態(条件付き実行パケットによって提供される)が破棄されるまで、所定のdワードデータサイズに基づいてコマンドバッファ118からプルする。
【0025】
状態更新パケットは、グラフィックスパイプライン120の状態を更新する定数又は定数の集合である。状態更新パケットは、例えば、描画コマンドの実行中にブレンドされる色を更新することができる。いくつかの実施形態では、状態更新パケットは、GPU104のマルチコンテキストレジスタをプログラムするセットコンテキストパケットを含む。セットコンテキストパケットは、パケットの状態をプログラムするために必要な全てのデータを含む。他の実施形態では、状態更新パケットは、状態がGPU104のコンテキストレジスタに書き込まれる前に、メモリからコンテキスト情報をフェッチすることを必要とするロードコンテキストパケットも含む。ドローコールパケットは、表示のために出力されるデータに関する処理をグラフィックスパイプライン120に実行させるコマンドである。
【0026】
ドローコールの実行は、前回のドローコール以降に取得された全ての状態更新に依存する。例えば、
図2は、コマンドストリームに含まれる6つのコマンド((1)条件付き実行パケット202、(2)第1の状態更新パケット204、(3)第2の状態更新パケット206、(4)第3の状態更新パケット208、(5)第1のドローコールパケット210、及び、(6)第2のドローコールパケット212)を示す。ドローコールパケット210は、第1の状態更新パケット、第2の状態更新パケット、及び、第3の状態更新パケット204~208に依存している。これは、これらが次の描画コマンド(すなわち、ドローコールパケット210)よりも先に条件付き実行パケット202によってカプセル化される状態更新であるからである。本明細書で使用される場合、「カプセル化された」という用語は、所定のハッシュ識別子を定義するために使用されるいくつかのパケットを指す。したがって、「カプセル化された状態」という用語は、その所定のハッシュ識別子がコンテキストバウンシング/切り替えに利用可能である(例えば、GPU104のレジスタに記憶される)かどうかに応じて、条件付きで実行され得るか破棄され得るいくつかのコンテキスト状態パケットを指す。言い換えると、カプセル化された状態は、所定のハッシュ識別子を定義するために使用されるコンテキスト状態パケットの集合である。
【0027】
一実施形態では、GPU104によって実行されるオペレーションの出力は、現在のコンテキスト状態214に依存する。様々な実施形態では、現在のコンテキスト状態214は、状態レジスタに記憶されているテクスチャハンドラ、シェーダ定数、変換行列等の様々なコンテキスト固有の定数の値に基づいている。
図2に示すように、現在のコンテキスト状態214は、レジスタ216A~216Nを含み、これらは、任意の数及びタイプ(例えば、汎用レジスタ)の状態レジスタ及び命令ポインタを表す。現在のコンテキスト状態214は、GPU104の現在のアーキテクチャ状態を定義する他の変数及び他の値を含むこともできることに留意されたい。また、処理ユニットの「コンテキスト状態」は、処理装置の「コンテキスト」又は「状態」と呼ばれることもあることに留意されたい。様々な実施形態において、処理装置は、GPU(例えば、
図1~
図2のGPU104)である。他の実施形態では、処理装置は、他のタイプの処理装置を含んでもよい。本明細書では、「処理装置」及び「プロセッサ」という用語は、交換可能に用いられていることに留意されたい。
【0028】
オペレーション中に、コマンドプロセッサ122は、条件付き実行パケット202を受信する。条件付き実行パケット202は、次の描画コマンド(例えば、ドローコールパケット210)の前に、次の状態更新パケット204~208に関連するユニークなハッシュ識別子をコマンドプロセッサ122に通知する。コマンドプロセッサ122は、条件付き実行パケット202によって提供されるユニークなハッシュ識別子が、GPU104でアクティブである(その結果、ハッシュテーブル130に記憶されている)かどうかを判別するために、コンテキストマネージャ128に対してハッシュテーブル130を検索するようにクエリする。
【0029】
図2に示すように、条件付き実行パケット202は、XYZのユニークなハッシュ識別子を提供する。コマンドプロセッサ122は、コンテキストマネージャ128にクエリし、ハッシュ識別子XYZがハッシュテーブル130に存在しないことを判別する。したがって、そのクエリミスに基づいて、コンテキストマネージャ128は、(ハッシュテーブル130で追跡される)ハードウェアの既存のハッシュ識別子のうち何れかをリタイアし(退け)、新しいコンテキストを割り当てる。様々な実施形態では、コンテキストマネージャ128は、ハッシュテーブル130内で最も最近使用されていない(LRU)非アクティブなハッシュ識別子をリタイアする(退ける)。リタイアされたハッシュ識別子は、その新しいコンテキストのクエリに提供されたハッシュ識別子(例えば、この説明ではハッシュ識別子XYZ)に置き換えられる。さらに、ハッシュテーブル130においてハッシュ識別子XYZが一致しないという判別に基づいて、コンテキストマネージャ128は、クエリミスをコマンドプロセッサ122に示し、新しいコンテキストを返す。次に、コマンドプロセッサ122は、状態更新パケット204~208を実行することにより、カプセル化された状態を処理する。言い換えれば、クエリミスにより、GPU104は、コンテキストローリングを実行して新しいコンテキストを割り当て、次の状態更新パケット204~208を実行し、新しいハッシュ識別子(つまり、ハッシュ識別子XYZ)で次の状態を設定する。
【0030】
図3は、いくつかの実施形態による、カプセル化された状態を排出することを示すブロック図である。別の実施形態では、引き続き
図2を参照すると、コマンドバッファ118におけるコマンドストリーム300は、5つのコマンド((1)条件付き実行パケット302、(2)第1の状態更新パケット304、(3)第2の状態更新パケット306、(4)第3の状態更新パケット308、及び、(5)ドローコールパケット310)を含む。ドローコールパケット310は、第1の状態更新パケット、第2の状態更新パケット、及び、第3の状態更新パケット304~308に依存している。これは、これらが次の描画コマンド(すなわち、ドローコールパケット310)よりも先に条件付き実行パケット302によってカプセル化される状態更新であるからである。第1の状態更新パケット、第2の状態更新パケット、及び、第3の状態更新パケット304~308は、まとめて、カプセル化された状態312と呼ばれる。本実施形態では、カプセル化された状態312は、所定のハッシュ識別子がコンテキストバウンシング/切り替えに利用可能である(例えば、GPU104のレジスタに記憶される)かどうかに応じて、条件付きで実行され得るか破棄され得る3つのコンテキスト状態パケット(すなわち、条件付き実行パケット302によって定義される)を含む。
【0031】
図3に示すように、条件付き実行パケット302は、ABCのユニークなハッシュ識別子を提供する。
図2に戻ると、コマンドプロセッサ122は、コンテキストマネージャ128にクエリし、ハッシュ識別子ABCがハッシュテーブル130に存在することを判別する。したがって、そのクエリヒットに基づいて、コンテキストマネージャ128は、クエリされたハッシュ識別子(すなわち、ハッシュ識別子ABC)に関連するコンテキストを返す。次に、コマンドプロセッサ122は、カプセル化された状態312を排出し(例えば、状態更新パケット304~308をスキップして破棄する)、既存のコンテキストハッシュ識別子を用いて、ドローコールパケット310の実行のために、クエリヒットに一致するコンテキストを割り当てる。所望のハッシュ識別子が使用可能であると判別し、そのハッシュ識別子のコンテキストに切り替え、そのコンテキストを再定義するコマンドパケットを破棄することにより、GPU104は、使用可能なコンテキストが存在しないためにプロセッサを強制的にストールさせるのではなく、要求されたハッシュ識別子が現在GPUハードウェアで使用可能であることを認識し、それに切り替えることで、動作効率を向上させている。
【0032】
図4は、いくつかの実施形態による、グラフィックスコンテキストバウンシングの方法400を示すフロー図である。ブロック402では、グラフィックス処理装置(GPU)のコマンドプロセッサが、カプセル化された状態に対応するハッシュ識別子を提供する条件付き実行パケットを受信する。例えば、
図2を参照すると、コマンドプロセッサ122は、コマンドバッファ118から条件付き実行パケット202を受信する。条件付き実行パケット202は、条件付き実行パケットに続く1つ以上のコンテキスト状態パケット(例えば、
図2の状態更新パケット204~208)に対応するカプセル化された状態を定義する。様々な実施形態において、条件付き実行パケット202は、カプセル化された状態に関連するユニークな一意のハッシュ識別子を定義する(例えば、
図2の条件付き実行パケット202におけるハッシュ識別子XYZ、又は、
図3の条件付き実行パケット302におけるハッシュ識別子ABC)。さらに、いくつかの実施形態では、条件付き実行パケット202は、カプセル化された状態のためのコンテキスト状態パケットのグループのサイズに対応するdワードデータも含む。
【0033】
ブロック404で、コマンドプロセッサは、カプセル化された状態のハッシュ識別子が、GPUに現在記憶されているアクティブなコンテキスト状態の複数のハッシュ識別子のうち何れかと一致するかどうかを判別する。例えば、
図2を参照すると、コマンドプロセッサ122は、GPUに現在記憶されているアクティブなコンテキスト状態の複数のハッシュ識別子を記憶するハッシュテーブル130を検索するように、コンテキストマネージャ128にクエリする。
【0034】
コマンドプロセッサが、カプセル化された状態のハッシュ識別子が、GPUに現在記憶されているアクティブなコンテキスト状態の複数のハッシュ識別子のうち何れとも一致しないと判別した場合、方法400はブロック406に進む。一方、コマンドプロセッサが、カプセル化された状態のハッシュ識別子が、GPUに現在記憶されているアクティブなコンテキスト状態の複数のハッシュ識別子のうち何れかと一致すると判別した場合、方法400はブロック408に進む。
【0035】
ブロック406で、引き続き
図2を参照すると、コンテキストマネージャ128は、(ハッシュテーブル130で追跡される)ハードウェアの非アクティブな既存のハッシュ識別子の1つをリタイアし、ハッシュ識別子XYZがハッシュテーブル130に存在しないと判別するコンテキストマネージャ128からのクエリミスに基づいて、新しいコンテキストを割り当てる。いくつかの実施形態では、コンテキストマネージャ128は、ハッシュテーブル130内で最も最近使用されていない(LRU)ハッシュ識別子をリタイアする。ブロック410で、コンテキストマネージャ128は、リタイアされたハッシュ識別子を、その新しいコンテキストのクエリに提供されたハッシュ識別子(例えば、この説明ではハッシュ識別子XYZ)に置き換える。さらに、様々な実施形態では、コンテキストマネージャ128は、コマンドプロセッサ122にクエリミスを返し、新しいコンテキストを返す。
【0036】
ブロック412において、コマンドプロセッサ122は、状態更新パケット204~208を実行することにより、カプセル化された状態を処理する。言い換えれば、クエリミスにより、GPU104は、コンテキストローリングを実行して新しいコンテキスト状態セットを割り当て、次の状態更新パケット204~208を実行し、新しいハッシュ識別子(つまり、ハッシュ識別子XYZ)で次の状態を設定する。続いて、ブロック414で、コマンドプロセッサ122は、カプセル化された状態に続くコマンドパケット(例えば、
図2の状態ドローコールパケット210)を実行する。
【0037】
次に、ブロック408に戻り、
図3を参照すると、コンテキストマネージャ128は、ハッシュ識別子ABCがハッシュテーブル130に存在すると判別するコンテキストマネージャ128からのクエリヒットに基づいて、クエリされたハッシュ識別子(例えば、
図3の条件付き実行パケット302によって提供されるハッシュ識別子ABC)に関連するコンテキストをコマンドプロセッサ122に返す。ブロック416で、コマンドプロセッサ122は、カプセル化された状態312を排出し(例えば、状態更新パケット304~308をスキップして破棄する)、既存のコンテキストハッシュ識別子を用いて、ドローコールパケット310の実行のために、クエリヒットに一致するコンテキストを割り当てる。続いて、ブロック418で、コマンドプロセッサ122は、バイパスされたカプセル化された状態312に続くコマンドパケットを実行する。所望のハッシュ識別子が使用可能であると判別し、そのハッシュ識別子のコンテキストに切り替え、そのコンテキストを再定義するコマンドパケットを破棄することにより、GPU104は、使用可能なコンテキストが存在しないためにプロセッサを強制的にストールさせるのではなく、要求されたハッシュ識別子が現在GPUハードウェアで使用可能であることを認識し、それに切り替えることで、動作効率を向上させている。
【0038】
様々な実施形態では、コンテキストがロールされると、コンテキスト完了イベントがグラフィックスパイプラインを通じて送られる。コンテキストマネージャは、未処理のコンテキスト完了イベントがあることを示すカウンタをインクリメントする。さらに、様々な実施形態では、グラフィックスパイプラインに保留中のコンテキスト完了イベントがない場合にのみ、コンテキストのリサイクルが許可される。
【0039】
限定ではなく例示の目的で、様々な実施形態によるグラフィックスコンテキストバウンシングシステムを、GPUのグラフィックスパイプラインのコンテキスト状態に基づいて描画コマンドのストリームを実行するGPUに関して本明細書で説明した。しかしながら、このようなグラフィックスコンテキストバウンシングシステムは、各システムの状態に基づいてコマンドのストリームを実行する他のタイプのASIC又はシステムに適用可能であることを理解されたい。本明細書に含まれる説明に基づいて、当業者は、本発明の実施形態をこのような他のタイプのシステムに実装する方法を理解するであろう。さらに、当業者は、本明細書に多数の詳細情報(例えば、プロセッサ構成の具体的な数及び配置、マイクロアーキテクチャの詳細、論理分割/統合の詳細、動作シーケンス、システム構成要素のタイプや相互関係、GPUに記憶されている固有のコンテキスト状態セットの数等)が記載されていることを認識するであろう。しかしながら、本明細書で説明するグラフィックスコンテキストバウンシングは、本開示の範囲から逸脱することなく、任意の数の個々のレジスタ、レジスタバンク、及び/又は、コンテキスト状態のユニークなセットに対して実行され得ることを理解されたい。
【0040】
本明細書に開示されるように、いくつかの実施形態では、方法は、グラフィックス処理装置(GPU)のコマンドプロセッサにおいて、カプセル化された状態に対応する識別子を提供する条件付き実行パケットを受信することであって、カプセル化された状態は、条件付き実行パケットに続く1つ以上のコンテキスト状態パケットを含む、ことと、カプセル化された状態の識別子が、GPUに現在記憶されているアクティブなコンテキスト状態の複数の識別子のうち何れかと一致するかどうかを判別することに少なくとも部分的に基づいて、カプセル化された状態に続くコマンドパケットを実行することと、を含む。一態様では、カプセル化された状態の識別子が、複数の識別子のうち何れかと一致するかどうかを判別することは、GPUに現在記憶されているアクティブなコンテキスト状態の複数の識別子を記憶する識別子テーブルを検索するように、コンテキストマネージャにクエリすることを含む。別の態様では、方法は、アクティブなコンテキスト状態の複数の識別子のうち何れかに一致する識別子を判別したことに応じて、カプセル化された状態を排出することと、アクティブなコンテキスト状態の複数の識別子のうち一致する識別子を、カプセル化された状態に続くコマンドパケットに割り当てることと、を含む。
【0041】
一態様では、方法は、識別子が、アクティブなコンテキスト状態の複数の識別子のうち何れとも一致しないと判別したことに応じて、新しいコンテキスト状態セットを割り当てることと、コマンドパケットを実行する前に、カプセル化された状態の1つ以上のコンテキスト状態パケットを実行することと、を含む。別の態様では、方法は、GPUに現在記憶されているアクティブなコンテキスト状態の複数の識別子のうち何れかを識別子テーブルからリタイアすることと、新しいコンテキスト状態セットのカプセル化された状態に対応する識別子を識別子テーブルに記憶することと、を含む。さらに別の態様では、コマンドパケットは、ドローコールを含む。さらに別の態様では、コマンドパケットは、カプセル化された状態のサイズを状態更新パケットの数に指定する。
【0042】
いくつかの実施形態では、プロセッサは、複数の状態レジスタと、コマンドプロセッサと、を備え、コマンドプロセッサは、カプセル化された状態に対応する識別子を提供する条件付き実行パケットを受信することであって、カプセル化された状態は、条件付き実行パケットに続く1つ以上のコンテキスト状態パケットを含む、ことと、カプセル化された状態の識別子が、プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の識別子のうち何れかと一致するかどうかを判別することに少なくとも部分的に基づいて、カプセル化された状態に続くコマンドパケットを実行することと、を行うように構成されている。一態様では、プロセッサは、プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の識別子を記憶する識別子テーブルを含むコンテキストマネージャを備える。別の態様では、プロセッサは、提供された識別子について識別子テーブルを検索するようにコンテキストマネージャにクエリするように構成されている。
【0043】
一態様では、プロセッサは、アクティブなコンテキスト状態の複数の識別子のうち何れかに一致する識別子を判別したことに応じて、カプセル化された状態を排出することと、アクティブなコンテキスト状態の複数の識別子のうち一致する識別子を、カプセル化された状態に続くコマンドパケットに割り当てることと、を行うように構成されている。別の態様では、プロセッサは、識別子が、アクティブなコンテキスト状態の複数の識別子のうち何れとも一致しないと判別したことに応じて、新しいコンテキスト状態セットを割り当てることと、コマンドパケットを実行する前に、カプセル化された状態の1つ以上のコンテキスト状態パケットを実行することと、を行うように構成されている。さらに別の態様では、プロセッサは、プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の識別子のうち何れかを識別子テーブルからリタイアすることと、新しいコンテキスト状態セットのカプセル化された状態に対応する識別子を識別子テーブルに記憶することと、を行うように構成されている。さらに別の態様では、コマンドパケットは、カプセル化された状態のサイズを状態更新パケットの数に指定する。
【0044】
いくつかの実施形態では、非一時的なコンピュータ可読記憶媒体は、実行可能命令のセットを具体化し、実行可能命令のセットは、少なくとも1つのプロセッサを操作して、プロセッサのコマンドプロセッサにおいて、カプセル化された状態に対応する識別子を提供する条件付き実行パケットを受信することであって、カプセル化された状態は、条件付き実行パケットに続く1つ以上のコンテキスト状態パケットを含む、ことと、カプセル化された状態の識別子が、プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の識別子のうち何れかと一致するかどうかを判別することに少なくとも部分的に基づいて、カプセル化された状態に続くコマンドパケットを実行することと、を行う。一態様では、実行可能命令のセットは、少なくとも1つのプロセッサを操作して、プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の識別子を記憶する識別子テーブルを検索するようにコンテキストマネージャにクエリする。別の態様では、実行可能命令のセットは、少なくとも1つのプロセッサを操作して、アクティブなコンテキスト状態の複数の識別子のうち何れかに一致する識別子を判別したことに応じて、カプセル化された状態を排出することと、アクティブなコンテキスト状態の複数の識別子のうち一致する識別子を、カプセル化された状態に続くコマンドパケットに割り当てることと、を行う。
【0045】
一態様では、実行可能命令のセットは、少なくとも1つのプロセッサを操作して、識別子が、アクティブなコンテキスト状態の複数の識別子うち何れとも一致しないと判別したことに応じて、新しいコンテキスト状態セットを割り当てることと、コマンドパケットを実行する前に、カプセル化された状態の1つ以上のコンテキスト状態パケットを実行することと、を行う。別の態様では、実行可能命令のセットは、少なくとも1つのプロセッサを操作して、プロセッサに現在記憶されているアクティブなコンテキスト状態の複数の識別子のうち何れかを識別子テーブルからリタイアすることと、新しいコンテキスト状態セットのカプセル化された状態に対応する識別子を識別子テーブルに記憶することと、を行う。さらに別の態様では、コマンドパケットは、カプセル化された状態のサイズを状態更新パケットの数に指定する。
【0046】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0047】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行するプロセッシングシステムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ、キャッシュ、ランダムアクセスメモリ(RAM)等のソリッドステート記憶デバイス、又は、他の1つ以上の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0048】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0049】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。