(57)【要約】【解決手段】  ＣＰＵ等の第１のプロセッサによって発行されるコマンドをＧＰＵ等の第２のプロセッサ上でスケジューリングし且つ実行するための装置及び方法が開示される。１つの実施形態では、グラフィクス処理ユニット（ＧＰＵ）上で処理を実行する方法は、メモリ内の１つ以上のバッファをモニタリングすることと、１つ以上のバッファから第１のサブセットをＧＰＵ上での実行のためにＧＰＵのワークロードプロファイルに基づいて選択することと、第１のサブセットをＧＰＵ上で実行することと、を含む。ＧＰＵはまた、１つ以上のバッファの優先順位を受信してよく、この場合、選択することは受信された優先順位に更に基づく。ＧＰＵ内でコマンドの優先順位付け及びスケジューリングを行うことによって、システム性能が高まる。【選択図】図１
2013504127.tif 000002
【特許請求の範囲】
【請求項１】
グラフィクス処理ユニット（ＧＰＵ）上でワーク項目を処理する方法であって、
メモリ内の１つ以上のバッファからバッファの第１のサブセットを前記第１のサブセットからのワーク項目の前記ＧＰＵ上での実行のために前記ＧＰＵのワークロードプロファイルに基づいて選択することと、
前記第１のサブセットからの前記ワーク項目を前記ＧＰＵ上で実行することと、を備える方法。
【請求項２】
前記１つ以上のバッファの優先順位を受信することを更に備え、
前記選択することは前記受信された優先順位に更に基づく請求項１の方法。
【請求項３】
前記実行することは、
前記第１のサブセットからの第１のバッファからのワーク項目を前記ＧＰＵ上で実行することと、
第２のバッファからのワーク項目が前記ＧＰＵ上で実行されるべきことを決定することと、
前記第１のバッファからのワーク項目を実行からプリエンプトすることと、
前記第２のバッファからのワーク項目の前記ＧＰＵ上での実行を開始することと、を備える請求項１の方法。
【請求項４】
前記プリエンプトすることは、
前記第１のリングバッファのコンテクストをローカルメモリ内のコンテクスト保存区域に保存することを備える請求項３の方法。
【請求項５】
前記決定することは、
前記第１のバッファからのワーク項目の実行における経過時間を予め定められたタイムスライス値と比較することを備える請求項３の方法。
【請求項６】
前記決定することは、
前記バッファの少なくとも１つをモニタリングすることと、
前記第１のバッファよりも高い優先度レベルを有する前記バッファの前記少なくとも１つにおけるワーク項目を検出することと、を備える請求項３の方法。
【請求項７】
前記モニタリングすることは、
第２のプロセッサによって書き込まれた少なくとも１つのメモリロケーションを読み出すことと、
前記少なくとも１つのメモリロケーションから読み出される値に基づいてコマンド書き込みイベントを検出することと、を備える請求項１の方法。
【請求項８】
前記選択することは、
前記バッファの各々におけるワーク項目を解析することと、
前記バッファの前記各々の優先度を決定することと、
前記決定された優先度に基づいて前記第１のサブセットを選択することと、を備える請求項１の方法。
【請求項９】
前記メモリは中央処理ユニット（ＣＰＵ）及び前記ＧＰＵに結合されるシステムメモリである請求項１の方法。
【請求項１０】
前記１つ以上のバッファの少なくとも１つはリングバッファである請求項１の方法。
【請求項１１】
前記第１のサブセットの各々は中央処理ユニット（ＣＰＵ）によって書き込まれる１つ以上のコマンドバッファを含む請求項１の方法。
【請求項１２】
グラフィクス処理ユニット（ＧＰＵ）上でワーク項目を実行するためのシステムであって、前記ＧＰＵは、
メモリ内の１つ以上のバッファからバッファの第１のサブセットを前記第１のサブセットからのワーク項目の前記ＧＰＵ上での実行のために前記ＧＰＵのワークロードプロファイルに基づいて選択することと、
前記第１のサブセットからの前記ワーク項目を前記ＧＰＵ上で実行することと、のために構成されるシステム。
【請求項１３】
前記ＧＰＵは前記１つ以上のバッファの優先順位を受信することのために更に構成され、
前記選択することは前記受信された優先順位に更に基づく請求項１２のシステム。
【請求項１４】
前記ＧＰＵは、
前記第１のサブセットからの第１のバッファを実行することと、
第２のバッファが前記ＧＰＵ上で実行されるべきことを決定することと、
前記第１のバッファを実行からプリエンプトすることと、
前記第２のバッファの前記ＧＰＵ上での実行を開始することと、のために更に構成される請求項１２のシステム。
【請求項１５】
前記プリエンプトすることは、
前記第１のリングバッファのコンテクストをローカルメモリ内のコンテクスト保存区域に保存することを備える請求項１４のシステム。
【請求項１６】
前記決定することは、
前記バッファの少なくとも１つをモニタリングすることと、
前記第１のバッファよりも高い優先度レベルを有する前記バッファの前記少なくとも１つにおけるワーク項目を検出することと、を備える請求項１４のシステム。
【請求項１７】
前記１つ以上のバッファの少なくとも１つはリングバッファである請求項１２のシステム。
【請求項１８】
中央処理ユニット（ＣＰＵ）と、
前記ＣＰＵ及び前記ＧＰＵに結合される前記メモリと、を更に備える請求項１２のシステム。
【請求項１９】
前記ＧＰＵは１つ以上のコンテクスト保存区域を伴って構成されるローカルメモリを備える請求項１２のシステム。
【請求項２０】
命令を記憶しているコンピュータ可読媒体であって、前記命令は実行されるときに方法を用いてグラフィクス処理ユニット（ＧＰＵ）上でワーク項目を処理することに適合させられており、前記方法は、
メモリ内の１つ以上のバッファからバッファの第１のサブセットを前記第１のサブセットからのワーク項目の前記ＧＰＵ上での実行のために前記ＧＰＵのワークロードプロファイルに基づいて選択することと、
前記第１のサブセットからの前記ワーク項目を前記ＧＰＵ上で実行することと、を備えるコンピュータ可読媒体。
【請求項２１】
前記命令はハードウエア記述言語命令を備える請求項２０のコンピュータ可読媒体。
【請求項２２】
前記命令は前記ワーク項目をＧＰＵ上で処理するためのデバイスを創出するマスクワーク／フォトマスクの創出を通した製造処理を構成することに適合させられている請求項２０のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概してプロセッサ上でのコマンドのスケジューリングに関する。
【背景技術】
【０００２】
グラフィクスプロセッサユニット（ＧＰＵ）は処理能力が急速に増大している。処理能力の増大は、少なくとも部分的には、ＧＰＵ内に含まれる多重独立処理ユニット（例えばＳＩＭＤプロセッサ、ＡＬＵ）に起因している。多くのグラフィクスアプリケーションにおいて、多重独立処理ユニットは、並列幾何計算、頂点計算、及び／又は画素操作を行うために利用される。例えば、グラフィクスアプリケーションはしばしば単一命令多重データ（ＳＩＭＤ）として特徴付けられることがあり、この場合、命令の同じシーケンスが多重並列データストリーム上で実行されて、動作の実質的なスピードアップを生じさせることができる。
【０００３】
別の成長トレンドは、必ずしもＳＩＭＤ型の計算ではなくてよい汎用計算のためのＧＰＵの使用である。一般的計算のためのＧＰＵの使用は、ＧＰＧＰＵ型のコンピューティングと称される。ＧＰＧＰＵ型のコンピューティングにおいては、ＣＰＵは、通常はＣＰＵにおいてなされていた計算ワーク項目(compute work items)を行うためにＧＰＵを用いることができる。
【０００４】
従来、ＧＰＵのためのワーク、例えば頂点及びテクスチャの情報のストリーム並びにそのような情報を処理するための命令は、ＧＰＵ上で動作するようにＣＰＵによってスケジューリングされている。ＣＰＵ上で実行中のソフトウエアは、なんらかの優先順位に従って種々のワークの項目（以下「コマンド」とも称される）を優先順位付けするであろうし、そしてそれらをシステムメモリバッファ内にエンキューする(enqueue)であろう。ＧＰＵは、次に処理されるべきワーク項目をシステムメモリバッファから非同期的にリトリーブする(retrieves)。ＧＰＵ上では、次に処理されるべきワーク項目の選択は、ＣＰＵによって指定される優先順位に基づいている。場合によっては、ＣＰＵはワーク項目毎基準で優先度を指定するかもしれないし、また他の場合にはＣＰＵは、各メモリバッファに関連付けて優先度を指定するかもしれないし、そしてメモリバッファ内にエンキューされた任意のワーク項目は当該バッファに関連付けられた優先度を有することになる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＧＰＵにおける処理能力の急速な増大に伴い、また汎用計算のためのＧＰＵの増大傾向にある使用に伴い、ＧＰＵの利用可能な計算能力をより十分に利用する更に効果的な手段が必要とされている。従って、ＧＰＵ資源をワーク項目に対してより効果的に割り当てることができる方法及びシステムが求められている。
【課題を解決するための手段】
【０００６】
ＣＰＵ等の第１のプロセッサによって発行されるコマンドをＧＰＵ等の第２のプロセッサ上でスケジューリングし且つ実行するための装置及び方法が開示される。１つの実施形態では、グラフィクス処理ユニット（ＧＰＵ）上で処理を実行する方法は、メモリ内の１つ以上のバッファからバッファの第１のサブセットを第１のサブセットからのワーク項目のＧＰＵ上での実行のためにＧＰＵのワークロードプロファイルに基づいて選択することと、第１のサブセットからのワーク項目をＧＰＵ上で実行することと、を含む。ＧＰＵはまた、１つ以上のバッファの優先順位を受信してよく、この場合、選択することは受信された優先順位に更に基づく。
【０００７】
別の実施形態は、ＧＰＵ上でワーク項目を実行するためのシステムである。ＧＰＵは、メモリ内の１つ以上のバッファからバッファの第１のサブセットを第１のサブセットからのワーク項目のＧＰＵ上での実行のためにＧＰＵのワークロードプロファイルに基づいて選択すると共に、第１のサブセットをＧＰＵ上で実行するように構成される。ＧＰＵは１つ以上のバッファの優先順位を受信するように更に構成されてよく、この場合、選択することは受信された優先順位に更に基づく。
【０００８】
本発明の更なる実施形態、特徴、及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。
【図面の簡単な説明】
【０００９】
出願書類に組み込まれ且つその一部をなす添付の図面は、本発明の実施形態を示し、そして上述の一般的な説明及び後述の実施形態の詳細な説明と共に、本発明の原理を説明するのに役立つ。
【００１０】
【図１】図１は本発明の実施形態に従うシステムを示す図である。
【００１１】
【図２】図２は本発明の実施形態に従う例示的なリングバッファ割り当てを示す図である。
【００１２】
【図３】図３は本発明の実施形態に従い処理するためのＧＰＵへコマンドを伝えるＣＰＵに実装される処理におけるステップを示すフローチャートである。
【００１３】
【図４】図４は本発明の実施形態に従いＣＰＵから受信したコマンドを処理するＧＰＵに実装される処理におけるステップを示すフローチャートである。
【００１４】
【図５】図５は本発明の実施形態に従い実行のためにコマンドを優先順位付けると共にスケジューリングするＧＰＵに実装される処理におけるステップを示すフローチャートである。
【００１５】
【図６】図６は本発明の実施形態に従いコマンドを実行するＧＰＵに実装される処理におけるステップを示すフローチャートである。
【発明を実施するための形態】
【００１６】
本発明の実施形態は、グラフィクス処理ユニット（ＧＰＵ）資源の実質的に改善された利用を可能にすることができる。本発明はここでは特定の応用のための例示的な実施形態と共に説明されるが、本発明はそれらに限定されないことが理解されるべきである。ここに提供される教示を利用可能な当業者であれば、その範囲内及び本発明が有意に有用であろう追加的な分野における追加的な修正、応用、及び実施形態を認識するであろう。
【００１７】
本発明の実施形態は、ワーク項目（例えばコマンド又はコマンドバッファ）を提供するＣＰＵ及びＣＰＵによって提供されるワーク項目を処理するＧＰＵのような少なくとも２つのプロセッサを有する任意のコンピュータシステム又はコンピューティングデバイスにおいて用いられてよい。限定はしないが例えば実施形態は、ラップトップコンピュータ、パーソナルコンピュータ、ゲームプラットホーム、エンタテーメントプラットホーム、パーソナルデジタルアシスタンス、及びビデオプラットホームを含むコンピュータを含んでいてよい。
【００１８】
ＣＰＵ及びＧＰＵを有するシステムにおいては、ＧＰＵの利用は全体的なシステム性能における重要因子である。理想的には、最大での又は最大の近くでのＧＰＵ利用を有することが望まれるであろう。ＣＰＵはＧＰＵ内で用いられる命令及びデータを提供する。従来のシステムにおいては、ＣＰＵはＧＰＵへの命令及びデータの実質的に全てをコマンドバッファ内に提供していたであろうし、またＧＰＵは単純に入力としてそれらのコマンドバッファを取り込み、そして実行していたであろう（即ちコマンドバッファからのコマンドを実行していたであろう）。コマンドバッファは、命令又はコマンドを関連データと共に含むデータ構造である。従来のシステムにおいては、コマンドバッファのいかなる優先順位付けもＣＰＵによってはなされていなかったし、そしてＧＰＵは、ＣＰＵによってキューされる(queued)と共に優先順位付けされたコマンドを、ＣＰＵによって指定された順序で単純に実行していた。効率的ではあるが、ＧＰＵ上で実行されるべきワークの優先順位付けのためにＣＰＵのみに頼るＧＰＵの従来の手法は、改善の余地を残している。本発明の実施形態は、ＣＰＵによって指定されるコマンドをＧＰＵが優先順位付けすると共にスケジューリングするのを可能にすることに向けられている。例えばＧＰＵは、そのローカル資源利用可能性に基づいて、ＣＰＵと比べてより動的な様態で且つより効率的な様態で、実行されるべきコマンドを優先順位付けることができる。また、ＧＰＵは、ＣＰＵによって指定されるコマンドの任意の優先順位付けを超えて第２レベルの優先順位付けを行うことができる。
【００１９】
ＧＰＵ上でのコマンドのハードウエアベースでのスケジューリングのためのシステム
図１は、本発明の実施形態に従いワーク項目（例えばコマンド）がＧＰＵ上で実行されるシステムを示している。システム１００は、ＣＰＵ１０１、システムメモリ１０２、グラフィクスドライバ１０３、ＧＰＵ１０４、及び通信基盤１０５を含む。当業者は、図１の実施形態において示されるものに加えて又はそれらとは異なるソフトウエア、ハードウエア及びファームウエアの構成要素を含み得ることを理解するであろう。
【００２０】
ＣＰＵ１０１は、任意の商業的に利用可能なＣＰＵ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積化プロセッサ（ＡＳＩＣ）、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、又は特注プロセッサであってよい。ＣＰＵ１０１は、通信基盤１０５等の通信基盤を用いて結合される１つ以上のプロセッサを備えることができる。ＣＰＵ１０１はまた、２つ以上の処理コアを同一ダイ上に有する１つ以上のプロセッサ、例えば多重コアプロセッサを含み得る。図１に示される実施形態においては、ＣＰＵ１０１は、処理コア即ちコア１・１０１ａ及びコア２・１０１ｂを有するデュアルコアプロセッサであってよい。ＣＰＵ１０１は、オペレーティングシステム（図示せず）及び１つ以上のアプリケーションを実行し、そしてシステム１００のための制御プロセッサである。ＣＰＵ１０１上で実行中のオペレーティングシステムは、システム１００内のデバイスへのアクセスを制御すると共に容易にする。ユーザアプリケーションを含めてＣＰＵ１０１上で実行中の１つ以上のアプリケーションは、ＧＰＵ１０４及びシステムメモリ１０２を含むシステム１００の種々のデバイスの使用を連携させてタスクを達成することをＣＰＵ１０１にさせる。
【００２１】
システムメモリ１０２は１つ以上のメモリデバイスを含む。典型的には、システムメモリ１０２は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）又はデータの非永続的記憶のために用いられる同様のメモリデバイスであってよい。幾つかの実施形態においては、システムメモリ１０２は、フラッシュメモリデバイス及び／又はスタティックＲＡＭ（ＳＲＡＭ）デバイス等のメモリデバイスを含み得る。実施形態におけるシステム１００の実行の間、システムメモリ１０２は、その中に備わる１つ以上のメモリバッファ１１０を有することができ、それらを介してＣＰＵ１０１はＧＰＵ１０４へコマンドを伝えることができる。
【００２２】
それらを介してＣＰＵ１０１がコマンドをＧＰＵ１０４へ伝えるメモリバッファ１１０は、リングバッファ、又はワーク項目の効率的なキュー入れ(queuing)に適する他のデータ構造として実装されてよい。以下、メモリバッファ１１０はリングバッファ１１０とも称される。ＣＰＵ１０１からＧＰＵ１０４へのコマンドは命令及びデータを含み得る。幾つかの実施形態においては、命令及びデータを有するデータ構造は、ＣＰＵ１０１上で実行中のアプリケーション及び／又はオペレーティングシステムによってリングバッファ１１０へ入力される。ＣＰＵ１０１（又はＣＰＵ１０１上で実行中のアプリケーション及び／又はオペレーティングシステム）は、１つ以上のリングバッファ１１０に関連する優先度を指定することができる。コマンドは、各コマンドの決定された優先度レベルに基づいてリングバッファへ加えられてよい。例えばＣＰＵ１０１は、高い優先度コマンド、低い優先度コマンド、及び低遅延コマンドに対して各々１つのリングバッファを定義してよい。
【００２３】
実際のコマンド（例えば命令及びデータ）を保持するために、間接バッファ１１１のセットが用いられてよい。例えば、ＣＰＵ１０１がコマンドバッファをＧＰＵ１０４へ伝える場合、コマンドバッファは間接バッファ１１１内に記憶されていてよく、そして当該間接バッファへのポインタが、対応する優先度レベルのリングバッファ内に挿入され得る。尚、間接バッファ１１１は、単一レベルの間接(indirection)又は多重レベルの間接のいずれかを可能にするように実装され得る。
【００２４】
システムメモリ１０２内又はシステム１００の他のレジスタメモリ設備内には、リングバッファワークレジスタ１１２が実装され得る。リングバッファワークレジスタ１１２は、例えば、リングバッファ１１０内のコマンドに関するＣＰＵ１０１とＧＰＵ１０４の間での通信を提供する。例えば、リングバッファ１１０へのコマンドの書き込み器としてのＣＰＵ１０１及びそのようなコマンドの読み出し器としてのＧＰＵ１０４は、リングバッファ１１０内の最後に加えられた項目及び最後に読み出された項目をそれぞれ表示する書き込みポインタ及び読み出しポインタを連携させてよい。利用可能なリングバッファ１１０のリスト、ＣＰＵ１０１によって指定された優先順位、等の他の情報もまた、リングバッファワークレジスタ１１２を介してＧＰＵ１０４へと伝えられ得る。
【００２５】
グラフィクスドライバ１０３は、ソフトウエア、ファームウエア、ハードウエア、又はそれらの任意の組み合わせを備えていてよい。ある実施形態においては、グラフィクスドライバ１０３は完全にソフトウエアにおいて実装される。システム１００の実行の間、グラフィクスドライバ１０３ソフトウエアはシステムメモリ１０２内に備わっていてよい。グラフィクスドライバ１０３は、ＣＰＵ１０１及びＣＰＵ１０１上で実行中のアプリケーションがＧＰＵ１０４にアクセスするためのインタフェース及び／又はアプリケーションプログラミングインタフェース（ＡＰＩ）を提供する。一般的には、システム１００が持ち込まれると、オペレーティングシステムはグラフィクスドライバ１０３を特定のＧＰＵ１０４に適するように初期化する。
【００２６】
ＧＰＵ１０４は、グラフィクスアクセラレーション機能及び他の計算機能をシステム１００に提供する。ＧＰＵ１０４は、複数のプロセッサ、例えば算術論理演算ユニット（ＡＬＵ）等の処理要素を含む単一命令多重データ（ＳＩＭＤ）プロセッサを含み得る。多重ＳＩＭＤプロセッサを有することは、概して、ＧＰＵ１０４をグラフィクス処理で一般的なようなデータ並列タスクの実行に理想的に適したものにする。例えばディスプレイ上に画像を描画する場合、同一又は実質的に同一の命令が、ディスプレイ上に描画される各画素に実行される。ＧＰＵ１０４はまた、グラフィクス動作以外のタスク、例えばデータストリームの並列実行からの利益を享受することができる種々の数値計算タスク(compute intensive tasks)に対しても用いられ得る。以下の説明では、説明の簡略化のためにグラフィクスアプリケーションが用いられる。しかし、当業者であれば、グラフィクスプロセッサ上で実行され得る様々な他のタスクにもここでの教示が適用可能であることを認識するであろう。また、当業者に理解されるであろうように、ＧＰＵ１０４は、ＣＰＵ１０１、ブリッジチップ（例えばノースブリッジ、サウスブリッジ、又は組み合わせられたデバイス）等の別のデバイス内に組み込まれた論理であってよい。
【００２７】
ＧＰＵ１０４は、ＧＰＵメモリ１２０、３次元／計算シェーダコンプレックス（３Ｄ／ＣＳコンプレックス）１３０、リングリスト制御器（ＲＬＣ）１４０、及びコマンドプロセッサ１５０を含む構成要素を備えている。ＧＰＵメモリ１２０は、ＧＰＵ１０４内での計算の間における使用のためのローカルメモリを提供し、そしてＤＲＡＭ等のメモリデバイスを含んでいてよい。ある実施形態においては、ＧＰＵメモリ１２０は複数のコンテクスト保存区域（ＣＳＡ）１２１を含む。各ＣＳＡは、後で説明されるように完了の前にＧＰＵ１０４における実行から外へ交換されるワーク項目のコンテクストを保存するためのメモリ区域を提供する。
【００２８】
３Ｄ／ＣＳコンプレックス１３０はＧＰＵ１０４内での主要な計算要素であり、並列データストリーム上での計算を含む計算を容易にする複数のＳＩＭＤプロセッサからなる。３Ｄ／ＣＳコンプレックスは、例えば、頂点シェーダ、画素シェーダ、幾何シェーダ、統一シェーダ、及びＧＰＵ１０４内でのデータ計算に必要な他の要素を含み得る。以下に説明される実施形態においては、３Ｄ／ＣＳコンプレックスは、３Ｄ計算要素、計算シェーダ要素、及び低遅延計算要素を備えるものとみなされてよい。ＣＰＵ１０１からＧＰＵ１０４へ送られるコマンドは、３Ｄ／ＣＳコンプレックスを用いて実装される。
【００２９】
リングリスト制御器（ＲＬＣ）１４０は、メモリバッファ（例えばリングバッファ１１０）へのアクセスを連携させる機能性を包含する。ある実施形態においては、ＲＬＣ１４０は、ＧＰＵ１０４内で処理されることになるリングバッファ１１０のリストを決定し、ＣＰＵ１０１（より具体的にはＣＰＵ１０１上で実行中の処理又はオペレーティングシステム）によって指定されるリングバッファ１１０の任意の優先順位を受信し、そしてＧＰＵ１０４内の処理資源の利用を最適化する様態でＧＰＵ１０４上でのリングバッファのスケジューリングを決定する。例えばＲＬＣ１４０はコマンドプロセッサ１５０と共に、３Ｄ／ＣＳコンプレックス１３０内の各ＳＩＭＤプロセッサを最大利用で又はその近くで維持する様態で、ＣＰＵ１０１から受信したリングバッファをスケジューリングすることができる。
【００３０】
コマンドプロセッサ１５０はＧＰＵ１０４内の処理を制御する。コマンドプロセッサは実行されるべき命令をＣＰＵ１０１から受信し、そしてそれらの命令のＧＰＵ１０４上での実行を連携させる。場合によっては、コマンドプロセッサはＧＰＵ１０４内で実行されるべき１つ以上のコマンドを生成してよく、これらはＣＰＵ１０１から受信される各コマンドに対応している。ある実施形態においては、コマンドプロセッサ１５０はＲＬＣ１４０と共に、ＧＰＵ１０４上でのコマンドの優先順位付け及びスケジューリングを、ＧＰＵ１０４資源の利用を最大化する様態で実装する。コマンドプロセッサ１５０及びＲＬＣ１４０の機能性を実装している論理命令は、ハードウエア、ファームウエア若しくはソフトウエア又はそれらの組み合わせにおいて実装され得る。１つの実施形態においては、コマンドプロセッサ１５０は、スケジューリング論理を含む実装論理のためのマイクロコードを伴うＲＩＳＣエンジンとして実装される。
【００３１】
通信基盤１０５は、システム１００のデバイス及び構成要素への結合を提供する。通信基盤１０５は１つ以上の通信バス、例えば周辺要素相互接続(Peripheral Component Interconnect)（ＰＣＩ）、進歩的グラフィクスポート(Advanced Graphics Port)（ＡＧＰ）等を含み得る。
【００３２】
図２はＣＰＵ１０１からＧＰＵ１０４へ伝えられるリングバッファの例を示している。図示される例では、システム１００の動作の間におけるある瞬間に、システムメモリ１０２は、その中に構成された複数のリングバッファのセット２００を有しており、これらリングバッファはリングバッファ０…６（即ち２０１，２０２，２０３，２０４，２０５，２０６，２０７）を含む。セット２００のうち、ＧＰＵ１０４は、リングバッファ０・２０１、リングバッファ１・２０２、リングバッファ２・２０３及びリングバッファ５・２０６を含むサブセット２１０にアクセスする。サブセット２１０はＣＰＵ１０１によって指定される基準に基づいて選択されてよく、例えば、ＣＰＵ１０１は、ＧＰＵ１０４上で実行される準備ができているコマンドを有するものとしてサブセット２１０を指定することができる。例えば、１つ以上のコマンドを各リングバッファ２０１，２０２，２０３，２０６にエンキューした後、ＣＰＵ１０１は、ＧＰＵ１０４によって読み出されるリングバッファワークレジスタ１１２内のロケーションのような１つ以上のメモリロケーションを更新することができる。別の実施形態においては、１つ以上のコマンドを１つ以上のリングバッファに書き込む場合に、ＣＰＵ１０１は、コマンドバッファが処理のために利用可能であることのＧＰＵ１０４への通知をＧＰＵ１０４内のレジスタ内へ直接的に書き込むことができる。
【００３３】
ＧＰＵ１０４は、システムメモリ１０２内のリングバッファ、システムメモリ内のリングバッファワークレジスタ、及び／又はＣＰＵ１０１によって更新される他のレジスタロケーションを定期的にモニタリングして、ＧＰＵ１０４によって処理される準備ができているコマンドバッファをリングバッファのどれかが有しているかどうかを決定する。ＧＰＵ１０４によって処理される準備ができているコマンドバッファを１つ以上のリングバッファが有していることを検出した場合、ＧＰＵ１０４は、実行（即ちコマンドバッファ内のコマンドの実行）のためのコマンドバッファを受信することができる。ある実施形態においては、ＧＰＵ１０４は、直接メモリアクセス（ＤＭＡ）等を用いて、ＣＰＵ１０１によって指定されるリングバッファをＧＰＵローカルメモリ内又は汎用レジスタ（ＧＰＲ）のセット内へ受信してよい。ＲＬＣ１４０は、リングバッファのモニタリングを行うと共にＧＰＵメモリ及び／又はＧＰＲへのリングバッファの転送を制御してよい。ＧＰＵ１０４上で実行されるべきリングバッファのセットを決定したならば、ＲＬＣ１４０は、ＧＰＵへのリングバッファの割り当て、リングバッファの優先順位付け、及びリングバッファ内のコマンドバッファの優先順位付けを決定する。幾つかの実施形態においては、優先順位付けの決定は、コマンドプロセッサ１５０と連携するＲＬＣ１４０によって行われる。例えば、ＧＰＵ１０４上での実行のために受信されるリングバッファのサブセット２１０においては、ＣＰＵ１０１によって決定される優先順位付け及びＧＰＵ１０４によって決定される優先順位付けに基づいて、図示されるように、優先度レベル１としてのリングバッファ０、優先度レベル２としてのリングバッファ２、並びに優先度レベル３としてのリングバッファ１及び５の優先順位が決定されてよい。
【００３４】
ＣＰＵ処理
図３は本発明の実施形態に従いＣＰＵ、例えばＣＰＵ１０１によって実行される処理ステップ（例えばステップ３０１〜３０５）のフローチャートを示している。ステップ３０１では、ＣＰＵ１０１は、コマンドバッファをＧＰＵ１０４へ転送する目的でシステムメモリ１０２内のリングバッファのセットを初期化する。ここでの説明においては、コマンドバッファをＧＰＵ１０４に伝える方法を実装するために選択されるデータ構造としてリングバッファが用いられているが、当業者であればリングバッファの代わりに１つ以上の他のデータ構造が用いられ得ることを理解するであろう。初期化ステップ３０１は、システム起動時又はアプリケーション起動時のいずれかに生じてよい。例えば、ＣＰＵ１０１上で実行しているオペレーティングシステムがＧＰＵ１０４及び関連するグラフィクスドライバ１０３を使用のために構成するシステム起動時には、命令及びデータを後続のアプリケーションからＧＰＵ１０４へ転送する場合の使用のために、１つ以上のリングバッファが初期化されてよい。別の実施形態においては、ＧＰＵを利用するダイレクト・エックス(DirectX)コード等のコードを有しているアプリケーションがロードされる場合、リングバッファはそのアプリケーションの初期化の一部として構成されてよい。更に別の例示的な実施形態においては、１つ以上のリングバッファがシステム起動時に初期化されてよく、また追加的なバッファが追加されると共にアプリケーション起動時に初期化されてよい。
【００３５】
初期化は、メモリ割り当て、リングバッファに対応するデータ構造の初期化、及びリングバッファ構成情報をＧＰＵ１０４へ伝えるために用いられる１つ以上のレジスタを更新することを含み得る。例えば、リングバッファの初期化は、リングバッファデータ構造（例えばリングバッファ１１０）のためのメモリ割り当て、リングバッファ要素に関連する実際のコマンドバッファ（例えば間接バッファ１１１）を保持するための１つ以上のメモリ区域の割り当て、及び１つ以上のレジスタ（例えばリングバッファワークレジスタ１１２内の１つ以上のレジスタ）の初期化を含み得る。リングバッファ及び間接リングバッファは、構成パラメータに基づいて、又は実行されるアプリケーションに応じて動的に決定されるパラメータに基づいて初期化されてよい。例えば、リングバッファの数、リングバッファのサイズ、間接バッファ区域のサイズ等がシステム起動時の構成パラメータとして提供されてよく、且つ／又はこれらのパラメータの１つ以上はアプリケーション特性に基づいて決定されてよい。
【００３６】
ある実施形態においては、各リングバッファ１１０は円形アレイとして実装される。円形アレイの各要素は、間接バッファ区域１１１内のロケーションへのポインタを収容することを意図されている。各リングバッファデータ構造はまた、リングバッファ構造のメンテナンスに必要なパラメータ、例えば先頭ポインタ及び末尾ポインタ等を有していてもよい。間接バッファ区域１１１は、コマンドバッファに対応する複数のデータ構造を収容することを意図されている。例えば各コマンドバッファは、ＧＰＵによって実行されることになる１つ以上のコマンド、及び関連データを含み得る。実際のコマンドバッファをリングバッファとは異なるロケーション内に記憶しておくことは、メモリ利用の効率性に関連して有利である。間接バッファ区域１１１は、コマンド毎基準で割り当てること、各リングバッファに対して区域を割り当てること、及び全てのリングバッファ１１０に対して１つの連続的な区域を割り当てることを含む種々の方法において割り当てられ得る。リングバッファワークレジスタ１１２はレジスタ及び／又は他のロケーションを含み得る。リングバッファワークレジスタ１１２はシステムメモリ１０２内に構成されているように図示されているが、当業者であればリングバッファワークレジスタがシステムメモリ１０２内以外のロケーションにおける１つ以上のレジスタを含み得ることを理解するであろう。例えばリングバッファワークレジスタ１１２は、ＧＰＵ１０４内の１つ以上のレジスタを含み得る。リングバッファワークレジスタ１１２は、ＣＰＵ１０１によるリングバッファ使用に関連する情報をＧＰＵ１０４へ伝えるために利用され得る。例えば、現在アクティブなリングバッファのリスト、ＣＰＵ１０１によって決定されたアクティブなリングバッファの優先順位、１つ以上のＧＰＵ要素へのアクティブなリングバッファの割り当て、等の情報が、ＣＰＵ１０１によってＧＰＵ１０４へ伝えられ得る。別の実施形態においては、リングバッファワークレジスタ１１２はまた、各リングバッファに対する現在の読み出しポインタ及び書き込みポインタ等の情報を伝えるためにも用いられ得る。
【００３７】
ステップ３０３では、ＣＰＵ１０１はリングバッファ構成をＧＰＵ１０４に通知する。このステップは、システム起動時又はアプリケーション起動時に、システムメモリ１０２内でのＣＰＵ１０１によるリングバッファの初期化の後に生じる。幾つかの実施形態においては、ステップ３０３はシステム起動時及びアプリケーション起動時に行われてよい。例えば、アクティブなリングバッファの数の設定がアプリケーション起動に際して変更される場合、そのような変更がＧＰＵ１０４へと伝えられるであろう。本発明のある実施形態においては、ＧＰＵ１０４へ運ばれるリングバッファ構成情報は、リングバッファの数、各リングバッファのロケーション及びサイズ、並びにＣＰＵ１０１が決定した優先順位を含む。フレームバッファ構成に関する異なる構成情報及び／又は付加的な構成情報が、本発明の種々の実施形態において伝えられ得る。ステップ３０３における通知は、ＧＰＵ１０４によってモニタリングされる１つ以上のレジスタロケーション、例えばリングバッファワークレジスタ１１２に、ＣＰＵ１０１が書き込むことに基づいていてよい。別の実施形態においては、ＣＰＵ１０１上で実行中のアプリケーション又はＣＰＵ１０１のオペレーティングシステムが、グラフィクスドライバ１０３の使用を通して、ＧＰＵ１０４への通知を開始する。本発明の実施形態においては、グラフィクスドライバ１０３は、ＧＰＵ１０４へ伝えられるべき情報をシステムメモリ１０２内に書き込むことができる。
【００３８】
ステップ３０５では、コマンドがリングバッファに書き込まれる。例えば、ゲームアプリケーション等のアプリケーションの実行の間、ディスプレイ上での画像の描画を含む種々のグラフィクス関連タスクを行うために、様々なグラフィクス関連コマンドが実行される。アプリケーションコードは、ダイレクト・エックス等のグラフィクス処理プラットホームを用いるグラフィクスコマンドを利用してよい。システム１００上での実行のためにアプリケーションをコンパイルするに際して、又は場合によってはより動的にランタイムに際して、特定のコマンドがＧＰＵ１０４上で処理されるべくＣＰＵ１０１によって関連データと共に解放されるべきであることが決定される。例えば、ある機能を実行するためにダイレクト・エックスＡＰＩを呼び出している任意のコマンドが、ＧＰＵ１０４上での処理のために選択されてよい。オペレーティングシステム、又は幾つかの実施形態ではアプリケーションそれ自身が、ＧＰＵ１０４上での処理のために選択されるコマンド及び関連データを、命令及びデータをＧＰＵ１０４へ伝えるために構成されるリングバッファへと書き込む。コマンド及び関連データは、一般にコマンドバッファとして知られるデータ構造へと形成され得る。コマンドバッファは１つ以上の命令及び関連データを含む。例えば、「ドロー(draw)」コマンドに対しては、対応するコマンドバッファは、「ドロー」コマンドの他、ディスプレイ上にドローされ又は描画されるべき画像を含む。
【００３９】
前述したように、ＣＰＵ１０１はリングバッファに対して決定された優先順位を有していてよく、それに従ってＣＰＵ１０１はコマンドバッファをＧＰＵ１０４へ伝える。従って、ステップ３０５においてコマンドバッファを書き込む場合、各コマンドバッファは、コマンドの優先順位に最も合致するリングバッファ内にエンキューされる。例えばゲームアプリケーションは、殆ど即時的なディスプレイを必要とする様々なゲームキャラクタ画像描画、及びそれほど時間臨界ではないメニューや他のユーザイベントを生成する。従って、時間臨界な画像に対応するコマンドバッファは、それほど時間臨界ではないメニューやユーザイベントのためのコマンドバッファよりも高い優先度のリングバッファへとエンキューされ得る。コマンドバッファを適切なリングバッファへ書き込むことは、間接バッファ区域１１１内にコマンドバッファを保持するためのメモリ区域を割り当てることと、間接バッファ区域１１１内の対応するロケーションへのポインタをリングバッファ内にエンキューすることとを含み得る。間接バッファ１１１へのポインタをリングバッファ内に挿入することはまた、そのリングバッファのデータ構造要素、例えば先頭ポインタ及び末尾ポインタを更新することを含む。加えて、ＣＰＵ１０１は、書き込み器としてのＣＰＵ１０１及び読み出し器としてのＧＰＵ１０４によるリングバッファへの安全な同時アクセスにおいて用いられる追加的な値及びポインタを表示する値を更新してよい。１つ以上のコマンドバッファをリングバッファへ書き込むことに続いて、ＣＰＵ１０１は、１つ以上のレジスタ及び／又は他のメモリロケーションを更新して、ＧＰＵ１０４にデータの利用可能性を通知することができる。幾つかの実施形態においては、ＧＰＵ１０４はそれぞれのリングバッファを継続的にモニタリングしているであろうから、ＣＰＵ１０１からの別個の通知は必要ないであろう。
【００４０】
処理３００は、ＣＰＵ１０１が結合しているＧＰＵ内の処理とは実質的に非同期な様態でＣＰＵ１０１に実装されてよい。処理３００は、ＣＰＵ１０１上で実行中のアプリケーションの実行を可能にしながら、ＧＰＵ１０４のような他のプロセッサ内で処理されることが保留されている多重コマンドを有することができる。一方、例えば入ってくるコマンドバッファにＧＰＵが圧倒されないことを確実にするために、ＣＰＵ１０１とＧＰＵ１０４の間に実装される何らかの同期メカニズムがあるかもしれない。例えば、ＣＰＵ１０１は、リングバッファがいつＧＰＵ１０４によって処理されていないかを検出するように配置された技術を有していていてよく、その結果、ＣＰＵ１０１は遅れた処理に反応することができる。ＣＰＵ１０１はまた、ＣＰＵ１０１によってリングバッファ内にエンキューされた各コマンドバッファがＧＰＵ１０４によって消費されているかどうかを検出するように配置されたメカニズムを有していてよい。例えば、リングバッファにエンキューされた各コマンドバッファに対して、ＣＰＵ１０１は、リングバッファワークメモリ１１２内のメモリロケーションに値を書き込んでよい。その後、ＣＰＵ１０１は、そのメモリロケーションで値を定期的にチェックすることができる。ＧＰＵ１０４がコマンドバッファを処理するとき、ＧＰＵ１０４は、リングバッファワークレジスタ１１２内のそれぞれのロケーションを異なる値で更新することができる。リングバッファワークメモリ１１２内のそれぞれのロケーションにおいてタイムアウト期間後に変更されていない値は、ＧＰＵ１０４が適切に機能していないことをＣＰＵ１０１に示すことができる。
【００４１】
ＧＰＵ処理
図４は本発明の実施形態に従いＧＰＵ１０４によって実装される処理４００のステップ４０１〜４０９を示すフローチャートである。処理４００は、本発明の種々の実施形態においてハードウエア、ファームウエア、及び／又はソフトウエアにおいて実装され得る。例えばＲＬＣ１４０機能は、高度な柔軟性を維持しつつ高度な性能をも達成するハードウエア及びマイクロコードの組み合わせを用いて実装され得る。
【００４２】
ステップ４０１では、ＧＰＵ１０４はシステムメモリ１０２内のリングバッファの構成を決定し、その構成を介してＧＰＵ１０４はＣＰＵ１０１からのコマンドバッファを受信する。ステップ４０１は、システム起動時及び／又はアプリケーション起動時に実行されてよい。例えばシステム起動時のＣＰＵ１０１による初期化の場合、ＧＰＵ１０４は、システムメモリ１０２内のリングバッファの構成を決定することができる。ＧＰＵ１０４はまた、アプリケーションの起動時又はＣＰＵ１０１から信号を受信した場合に、リングバッファの構成を決定してよい。ＣＰＵ１０１がシステム起動時にリングバッファ１１０を初期化し且つシステム動作中にリングバッファの更なる追加及び／又は除去を行わない実施形態においては、ＧＰＵ１０４はステップ４０１をシステム起動時にのみ実行することができる。一方、ＣＰＵ１０１が、システム起動時以外のときに、例えばアプリケーション起動時にリングバッファ１１０に対する構成変更を行う場合、ＧＰＵ１０４は、そのような変更が生じるときにリングバッファ構成の表示(view)を更新する必要がある。ＧＰＵ１０４によるリングバッファの構成の決定は、リングバッファ若しくは関連するレジスタ若しくはメモリロケーションのＧＰＵ１０４による定期的なモニタリングに基づき又はＣＰＵ１０１から受信されるメッセージ若しくは信号に基づき行われてよい。ある実施形態においては、ステップ４０１の機能は主としてＲＬＣ１４０内に実装される。
【００４３】
リングバッファ１１０の構成を決定したならば、ステップ４０３において、ＧＰＵ１０４は、処理のために利用可能なリングバッファを検出するためにリングバッファをモニタリングする。例えばＣＰＵ１０１上で実行するゲームアプリケーションとしては、処理３００のステップ３０５に関連して説明したように、グラフィクス処理を必要としている動作のためのコマンドが、ＣＰＵ１０１によってリングバッファ１１０内にコマンドバッファの形態でエンキューされる。アプリケーションを実行するのに従ってコマンドバッファが生成されそしてリングバッファ内にエンキューされるにつれて、ＣＰＵ１０１は１つ以上のメモリロケーション及び／又はレジスタを更新してどのリングバッファが処理のために利用可能であるのかをＧＰＵ１０４に対して示すことができる。ＧＰＵ１０４は、ＣＰＵ１０１によって更新されるそのようなメモリロケーション及び／又はレジスタをモニタリングすることができる。ある実施形態においては、ステップ４０３の機能は主としてＲＬＣ１４０内に実装される。
【００４４】
ステップ４０５では、ＧＰＵ１０４は処理及び実行のためのリングバッファ１１０のサブセットを選択する。ステップ４０５は、処理のためにリングバッファ１１０内にエンキューされるコマンドバッファを検出することに応答して、又はＣＰＵ１０１から受信されるメッセージ若しくは信号に応答して実行され得る。処理及び実行のためのリングバッファのサブセットの選択、例えば図２に示される利用可能なリングバッファ２００からのサブセット２１０の選択は、１つ以上の因子に基づくであろう。１つの実施形態においては、ＣＰＵ１０１は、それがＧＰＵ内での処理のために準備ができていると見なしているリングバッファのリストを維持してよく、そしてＧＰＵ１０４はそのようなリングバッファから処理されるべきサブセットを選択する。幾つかの実施形態においてはＧＰＵ１０４、別の実施形態においてはＣＰＵ１０１が単純にコマンドバッファを１つ以上のリングバッファにエンキューし、そして実行のために保留中のエンキューされたコマンドバッファを有する１つ以上のリングバッファをＧＰＵ１０４が選択する。
【００４５】
実行のために選択されるリングバッファのサブセットは、幾つかの実施形態においては、ＧＰＵ１０４内での処理に備えてＧＰＵローカルメモリ又はＧＰＲ内へと持ち込まれる。システムメモリ１０２からのコマンドバッファの転送は、ＤＭＡ処理によって制御され得る。コマンドバッファがシステムメモリ１０２から読み出されるときに、ＧＰＵ１０４は１つ以上のロケーションを更新してどのコマンドバッファが読み出されたのか及びコマンドバッファの各々が処理されたかどうかを表示することができる。そのような更新されるメモリロケーションは、リングバッファワークレジスタ１１２内、リングバッファデータ構造内、及び／又はＧＰＵローカルメモリ若しくはＧＰＲ内にあってよい。ある実施形態においては、ステップ４０３の機能は、主としてＲＬＣ１４０内に実装される。
【００４６】
ステップ４０７では、ＧＰＵ１０４は、ＧＰＵ上での実行のためのコマンドバッファを優先度基準に従って選択する。このステップの処理の間、ＧＰＵ１０４は、先のステップにおいて選択されたリングバッファがどのようにして１つ以上のＧＰＵに割り当てられるか、及び個々のコマンドがどのようにしてＧＰＵ内の資源に割り当てられるのかを決定する。例えばＧＰＵ１０４は、ステップ４０５においてシステムメモリ１０２から選択されたリングバッファのサブセット２１０がＧＰＵ１０４上で処理されることになる優先順位を決定してよく、また幾つかの実施形態においては、各リングバッファの処理の間にコマンドがどのようにして優先順位付けられ且つスケジューリングされるのかを決定してよい。ある実施形態においては、ステップ４０３の機能は、主としてＲＬＣ１４０内に実装される。図５はステップ４０７における処理を更に説明している。
【００４７】
ステップ４０９では、選択されたコマンドが、先のステップでＧＰＵ１０４において決定された優先順位に従ってＧＰＵ１０４上で実行される。１つの実施形態においては、実行のために選択されたリングバッファサブセット２１０は、ＧＰＵ１０４上での実行のための優先度に従って順序付けられている。各リングバッファ内において、コマンドは実行のために優先順位付けられると共にスケジューリングされていてよく、あるいはリングバッファ内での出現の順序で実行されてよい。別の実施形態においては、ＧＰＵ１０４は、ＣＰＵ１０１によって指定される優先順位付け、リングバッファの種類又はコマンドバッファの種類、ＧＰＵ１０４上で利用可能な処理資源、等の多重因子を考慮に入れながら、処理を保留中の全てのコマンドバッファの優先順位付けを定期的に決定することができる。
【００４８】
ＣＰＵ１０１からのコマンドバッファ内で受信したコマンドを実行することは、コマンドプロセッサ１５０が、受信されたコマンドに対応する１つ以上のコマンドを生成すると共にＧＰＵ１０４上の処理資源上でコマンドをスケジューリングすることを含み得る。例えば、画像を描画するためにＣＰＵ１０１から受信された単一のコマンドは、画像を再分割することと、画像の再分割された部分の各１つを処理するための１つ以上の命令を生成することとをコマンドプロセッサ１５０にさせてよい。コマンドプロセッサは次いで、再分割された部分の各１つが処理資源、例えばＧＰＵ１０４内のＳＩＭＤプロセッサ及び／又はＡＬＵ上で実行されるように、再分割された部分の各１つをスケジューリングする。実行のためのコマンドのスケジューリング及びＧＰＵ上でのコマンドの実行は、コマンドの優先順位を指定するＲＬＣ１４０と連携させられているコマンドプロセッサ１５０によって主として管理される。
【００４９】
コマンドの実行は、本発明に従う種々の方法において進み得る。１つの実施形態においては、各コマンドが実行を完了し、そして処理資源が利用可能になると、優先度に従う次のコマンドがその処理資源上で実行される。実施形態はまた、実行されるべき次のコマンドを選択する場合に、先になされた優先順位付けを超えて他の因子が考慮される方法を実装することができる。例えば、保留中のコマンドが評価されてよく、そして利用可能な資源を最適に利用する可能性が最も高いコマンドは、どの時点でも実行されるべき次のコマンドとしてスケジューリングされてよい。本発明の更に他の実施形態においては、幾つかの及び／又は幾つかの種類のコマンドのＧＰＵ１０４内での実行の完了の時点で、ＧＰＵ１０４はステップ４０５に戻ると共に処理に利用可能なリングバッファを再選択することができる。
【００５０】
概して、ＧＰＵ１０４におけるコマンドの実行の間、ＲＬＣ１４０又はＧＰＵ１０４内の別の構成要素は、リングバッファ１１０等のシステムメモリ内のリングバッファのモニタリングを継続する。継続されるモニタリングは、例えばいつコマンドバッファが高い優先度キューに加えられたかをＧＰＵ１０４が検出することを可能にする。ＣＰＵ１０１によって高い優先度のリングバッファに加えられた１つ以上のコマンドバッファを有することは、より低い優先度の１つ以上のコマンドのＧＰＵ１０４による実行の間、より高い優先度のコマンドが実行され得るように、ＧＰＵ１０４に１つ以上のコマンドをプリエンプト(pre-empt)させることができる。図６は、より低い優先度の１つ以上のコマンドの実行の間に、より高い優先度のコマンドをＧＰＵ１０４が収容することを可能にするために、本発明の実施形態に従って実装され得るステップ６０１〜６０９を示している。例えばステップ６０１〜６０９は、ステップ４０９の処理の間に実装されてよい。
【００５１】
図５は本発明の実施形態に従い上述したステップ４０７を実装しているステップ５０１〜５０５を示している。主としてＲＬＣ１４０及びコマンドプロセッサ１５０によって実装されるステップ５０１〜５０５は、ＧＰＵ１０４がリングバッファ及びコマンドバッファの優先順位を決定することを可能にする。
【００５２】
ステップ５０１では、ＧＰＵ１０４の現在のワークロードのプロファイルが決定される。ある実施形態においては、ＲＬＣ１４０及び／又はコマンドプロセッサ１５０は、使用のために利用可能な処理要素、処理要素の相対的な処理能力、保留中のワークロード、及び保留中のワークロードの現在の優先順位、等の因子を決定して、ワークロードプロファイルを作成する。ワークロードプロファイルはＧＰＵの状態を反映する。利用可能な処理要素及び各々の相対的な処理能力の決定は、ＳＩＭＤ要素、ＡＬＵ能力、３Ｄ処理デバイス、計算シェーダデバイス、及び低遅延処理デバイス等の別個の処理要素の考慮を含んでいてよい。ＧＰＵの現在のワークロードのプロファイリングは、連続的基準で又は定期的に動的に実行され得る。例えば、ＲＬＣ１４０及び／又はコマンドプロセッサ１５０は、コマンド若しくはリングバッファが実行を完了したとき、又はリングバッファの新たなサブセットがシステムメモリから読み出されたときに、ＧＰＵワークロードのプロファイリングを開始してよい。ワークロードプロファイルはまた、ワークロードの決定が必要なたびに新たに生成されてよく、あるいは予め定められた種類のイベント、例えばリングバッファの実行完了、システムメモリからのリングバッファのサブセットの読み出し、等の場合にワークロードプロファイルが更新されるような様態で、維持されてよい。
【００５３】
ステップ５０３では、ＧＰＵ１０４上での実行を保留中のリングバッファの優先順位をＧＰＵ１０４が決定する。ある実施形態においては、ＲＬＣ１４０及びコマンドプロセッサ１５０は、先のステップ５０１において決定されたワークロードプロファイルに基づいて順位を決定する。ＧＰＵ１０４によって決定される優先順位は、ＣＰＵ１０１によって指定されているリングバッファの順位に基づいていてよい。ＣＰＵ１０１によって指定される優先順位が実質的に守られ得る一方で、ＧＰＵの動的なワークロードプロファイルに基づいて実際の実行を最適化することができる。その実行シーケンスを動的に再順序付ける能力は、ＧＰＵの処理要素がどのように利用されていようとも、ＧＰＵがきめの細かい制御を有することを可能にする。
【００５４】
ステップ５０４では、ＧＰＵ１０４は、リングバッファの各々に関連するコマンドの優先順位を決定する。例えば、ＲＬＣ１４０及びコマンドプロセッサ１５０は、先のステップ５０１で決定されたワークロードプロファイル及びステップ５０３で決定されたリングバッファ優先順位付けに基づいて、順位を決定することができる。リングバッファにおけるコマンドの優先順位は、ＧＰＵ内のどの処理要素に各コマンドが割り当てられているかについての決定に関与し得る。それぞれのリングバッファ内でのコマンドの実行の再順序付けの能力は、例えば当初は低い優先度に指定されていたコマンドを高い優先度の処理資源が利用可能である場合に高い優先度として実行するため、若しくは高い優先度の資源が塞がっている場合に高い優先度のコマンドを低い優先度として実行するために動的な決定をなすことによって、又は要素利用可能性に基づいて通常は計算シェーダ要素若しくは低遅延要素上で実行されるであろうコマンドを実行することによって、ＧＰＵがその資源をよりよく利用することを可能にする。
【００５５】
図６は、より低い優先度の１つ以上のコマンドの実行の間にＧＰＵ１０４がより高い優先度のコマンドを収容することを可能にするために本発明の実施形態に従って実装され得るステップ６０１〜６０９を示している。例えばステップ６０１〜６０９は、ステップ４０９の処理の間に実装されてよい。
【００５６】
ステップ６０１では、ＧＰＵ１０４は、別のコマンドを処理するためにコンテクストスイッチが必要であるかどうかを決定する。コンテクストスイッチが必要であるかどうかの決定は、現在実行中の処理の優先度、実行を必要としている処理の優先度、実行タイムスライス値(execution time slice values)、及び各現在実行中処理に対する実行の残り時間、等の１つ以上の因子に基づいていてよい。コマンドプロセッサ１５０は、例えば、上述のような１つ以上の因子を考慮する機能性、及びコンテクストスイッチが強制されるべきであるかどうかに関する決定を行う機能性を包含し得る。
【００５７】
ステップ６０３では、実行中コマンド及び／又は実行中リングバッファがプリエンプトされる。実行中コマンド及び／又は実行中リングバッファをプリエンプトすることは、プリエンプトされたコマンド及び／又はリングバッファの状態を保存することを含む。本発明の実施形態においては、プリエンプトされたコマンド及び／又はリングバッファの状態は、ＧＰＵローカルメモリ内に構成されるコンテクスト保存区域（ＣＳＡ）内に保存される。例えば、現在実行中のリングバッファがプリエンプトされるべきである場合、リングバッファの保留中のコマンド、データ、及び実行パラメータ、例えばプログラムカウンタ、を含むリングバッファの状態、等がＧＰＵローカルメモリ内の区域、例えばＧＰＵメモリ１２０内のＣＳＡ１２１に保存される。
【００５８】
ステップ６０５では、別のコマンド及び／又は別のリングバッファがＲＬＣ１４０及びコマンドプロセッサ１５０による実行内へと交換される。実行内へと交換されるコマンド及び／又はリングバッファは、ＧＰＵ１０４上で初めて実行中になることになってよく、あるいはＣＳＡから回復させられるコマンド及び／又はリングバッファであってよい。例えば、交換されて入ってくるコマンド及び／又はリングバッファは、そのタイムスライスの終点で前もって実行されていたものであってよく、またそのタイムスライスの終点でＣＳＡに保存されていたものであってよい。
【００５９】
ステップ６０７では、現在実行中のコマンドは実行を完了する。現在実行中のコマンドが実行を完了すると、同じリングバッファ内の次のコマンドが実行され得る。本発明の実施形態においては、処理４００のステップ４０７に関連して論じられたように、ＧＰＵ１０４は、コマンドの実行順序をリングバッファ内で決定することができる。幾つかの実施形態においては、処理の実行の完了に際して、ＧＰＵ１０４は、実行のためのより高い優先度のリングバッファをチェックすること又は同じリングバッファ内のより高い優先度のコマンドをチェックすること、等の動作を行って、次の実行のための処理及び／又はリングバッファを決定してよい。
【００６０】
ステップ６０７では、現在実行中のリングバッファは、それに付随する全ての保留中のコマンドの実行を完了する。リングバッファの実行の完了の場合、ＧＰＵ１０４は、別のリングバッファ、例えば優先度の順序における次のリングバッファを実行のために選択することができる。
【００６１】
上述の実施形態は、ベリログ(Verilog)、ＲＴＬ、ネットリスツ(netlists)等のハードウエア記述言語において記述されてよく、またこれらの記述は、ここに説明される本発明の態様を具現化している１つ以上のハードウエアデバイスを生成するためのマスクワーク／フォトマスクの創出を通して最終的に製造処理を構成することを可能にするために用いられ得る。
【００６２】
結論
上述した実施形態によって説明される本発明は、ＣＰＵ等の第１のプロセッサからコマンドを受信するＧＰＵ等の第２のプロセッサ内の処理資源のより効率的な割り当てを可能にする。ローカルで決定された因子、例えば処理デバイス利用可能性、ワークロード、等に基づいてそのワークロードを優先順位付け且つスケジューリングする能力は、第２のプロセッサの利用を増大させる。
【００６３】
概要及び要約の部は、発明者によって検討された本発明の１つ以上のしかし全部ではない例示的な実施形態を説明することができ、従って本発明及び添付の特許請求の範囲を限定することが意図されているわけではけっしてない。
【００６４】
特定の機能の実装及びそれらの関係性を示す機能構築ブロックを補助として、本発明が上述のように説明されてきた。これらの機能構築ブロックの境界は、説明の便宜上ここでは適宜画定されてきた。特定の機能及びそれらの関係性が適切に実行される限りにおいて、代替的な境界が画定されてよい。
【００６５】
特定の実施形態の上述した説明は、本発明の一般的性質を十分に明らかにするであろうから、他者は、当業者の知識を適用することによって、過度の実験を必要とせず、本発明の一般的概念から逸脱することなく、そのような特定の実施形態を容易に修正し且つ／又は種々の応用に適用することができる。従って、そのような適用及び修正は、ここに提示されている教示及び指針に基いて、開示されている実施形態と均等なものの意味及び範囲の範疇にあることが意図されている。ここでの用語等は、本出願書類の用語等が教示及び指針の下で当業者によって解釈されるべきであるという点において、説明を目的としたものであって限定を目的としていないことが理解されるべきである。
【００６６】
本発明の広さ及び範囲は、上述したいかなる例示的な実施形態によっても限定されるべきではなく、以下の特許請求の範囲及びそれらと均等なものに従ってのみ画定されるべきである。
【図１】
2013504127.tif 000003
【図２】
2013504127.tif 000004
【図３】
2013504127.tif 000005
【図４】
2013504127.tif 000006
【図５】
2013504127.tif 000007
【図６】
2013504127.tif 000008
【国際調査報告】
2013504127.tif 000009
2013504127.tif 000010