(57)【要約】高速化処理デバイス内で優先順位を決定するための方法を提供する。高速化処理デバイスは、既定の基準に従って処理される計算パイプラインキューを含む。キューは、優先順位特性に基づいて選択され、選択されたキューは、タイムカンタムが経過するか、より高い優先順位を有するキューが処理に対して利用可能になるまで処理される。【選択図】図２
2015502618.tif 000002
【特許請求の範囲】
【請求項１】
計算パイプラインを含む高速化処理デバイス（ＡＰＤ）内の優先順位を決定する方法であって、
既定の基準に従って、前記計算パイプラインの各々の計算パイプライン処理キューから、第１のキューおよび第２のキューを選択することと、
優先順位基準に従って、前記第１および第２のキューのうち１つのキューを、処理のために選択することと、を含み、
前記選択されたキューは、（ｉ）タイムカンタムの経過と、（ｉｉ）より高い優先順位を有するキューが利用可能になることと、を含む群から選ばれる少なくとも１つの条件を満たすまで処理される、方法。
【請求項２】
前記選択されたキューを処理することは、前記選択されたキューを先制することを含む、請求項１に記載の方法。
【請求項３】
前記選択されたキューを先制することは、前記選択されたキューにおいて、コンテキストスイッチング動作を実行することを含む、請求項２に記載の方法。
【請求項４】
前記先制の後に第２のキューの処理を開始することをさらに含む、請求項２に記載の方法。
【請求項５】
前記計算パイプラインの各々の相対優先順位を決定することをさらに含む、請求項１に記載の方法。
【請求項６】
前記計算パイプラインの各々の前記相対優先順位は、最も過去に発行された回路を使用して判定される、請求項５に記載の方法。
【請求項７】
前記最も過去に発行された回路は、トーテムポール回路である、請求項６に記載の方法。
【請求項８】
最も低い優先順位を有する前記計算パイプラインを、前記回路の底部に割り当てることをさらに含む、請求項６に記載の方法。
【請求項９】
前記第１のキューは、実行待ち状態キューである、請求項１に記載の方法。
【請求項１０】
前記第２のキューは、アクティブキューである、請求項１に記載の方法。
【請求項１１】
前記既定の基準は、（ｉ）キュー優先順位、（ｉｉ）キューカンタム持続時間および（ｉｉｉ）キュー実行待ち状態制御を含む、請求項１に記載の方法。
【請求項１２】
メモリと、
前記メモリに接続された計算パイプラインを含む高速化処理デバイス（ＡＰＤ）と、を備えるシステムであって、
前記計算パイプラインは、メモリに記憶された命令に基づいて、
既定の基準に従って、前記計算パイプラインの各々の計算パイプライン処理キューから、第１のキューおよび第２のキューを選択し、
優先順位基準に従って、前記第１および第２のキューのうち１つのキューを、処理のために選択し、
（ｉ）タイムカンタムの経過と、（ｉｉ）より高い優先順位を有するキューが利用可能になることと、を含む群から選ばれる少なくとも１つの条件を満たすまで、前記選択されたキューを処理するように構成されている、システム。
【請求項１３】
前記計算パイプラインは、前記選択されたキューの処理を先制するように構成されている、請求項１２に記載のシステム。
【請求項１４】
前記計算パイプラインは、前記先制の間に、選択されたキューをコンテキスト化するように構成されている、請求項１３に記載のシステム。
【請求項１５】
前記計算パイプラインは、前記先制の後に、第２のキューの処理を開始するように構成されている、請求項１３に記載のシステム。
【請求項１６】
前記計算パイプラインに接続され、前記計算パイプラインの各々の相対優先順位を決定するように構成されたシェーダ入力ブロックをさらに備える、請求項１２に記載のシステム。
【請求項１７】
前記計算パイプラインの各々の前記相対優先順位は、最も過去に発行された回路を使用して判定される、請求項１６に記載のシステム。
【請求項１８】
前記最も過去に発行された回路は、トーテムポール回路である、請求項１７に記載のシステム。
【請求項１９】
最も低い優先順位を有する前記計算パイプラインを、前記回路の底部に割り当てることをさらに含む、請求項１７に記載のシステム。
【請求項２０】
前記第１のキューは、実行待ち状態キューである、請求項１２に記載のシステム。
【請求項２１】
前記第２のキューは、アクティブキューである、請求項１２に記載のシステム。
【請求項２２】
前記既定の基準は、（ｉ）キュー優先順位、（ｉｉ）キューカンタム持続時間および（ｉｉｉ）キュー実行待ち状態制御を含む、請求項１２に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コンピューティングシステムに関する。より具体的には、本発明は、複数のパイプライン入力間でグラフィック処理ユニットリソースを割り当てるためのアービトレーションポリシーに関する。
【背景技術】
【０００２】
ＧＰＵの単位電力および／または経費当たりの規範的な性能によって、グラフィックスプロセッシングユニット（ＧＰＵ）を通常のコンピュータ操作に使用することについての要望が、近年、増々顕著になっている。ＧＰＵの計算能力は、概して、対応する中央処理ユニット（ＣＰＵ）のプラットフォームの計算能力を超えた比率で成長している。この成長は、モバイルコンピューティング市場およびそれに必要な支援サーバ／エンタープライズシステムの急激な拡大と相まって、所望のユーザ体験の特定の質を提供するために使用されている。その結果、データ並列コンテンツを伴う作業負荷を実行するためのＣＰＵとＧＰＵとの組み合わせ使用が、ボリューム技術となりつつある。
【０００３】
しかしながら、ＧＰＵは、従来、グラフィックスの高速化のみに利用可能な、制約されたプログラミング環境で機能してきた。これらの制約は、ＧＰＵが、ＣＰＵほどプログラミングエコシステムが豊富でなかったという事実から生じていた。したがって、その使用は、ほとんどが二次元（２Ｄ）および三次元（３Ｄ）のグラフィックスに限られ、グラフィックスおよびビデオのアプリケーションプログラミングインターフェース（ＡＰＩ）を扱うことにすでに慣れている数少ない最先端のマルチメディアのアプリケーションに限られている。
【０００４】
マルチベンダがサポートする標準ＡＰＩおよび支援ツールであるＯｐｅｎＣＬ（登録商標）およびＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）の出現により、従来のアプリケーションにおけるＧＰＵの制限が、従来のグラフィックスを越えて拡大されている。ＯｐｅｎＣＬ（登録商標）およびＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）は、将来性のある出発点ではあるが、ＣＰＵとＧＰＵとの組み合わせが、大多数のプログラミングタスク用に、ＣＰＵと同じように流動的に使用されることを可能にする環境およびエコシステムを生成することに対して、多くの障害が残されている。
【０００５】
現行のコンピューティングシステムは、しばしば、複数の処理デバイスを含む。例えば、コンピューティングシステムによっては、ＣＰＵとＧＰＵの両方を、個別のチップ（例えば、ＣＰＵはマザーボードに配置され、ＧＰＵはグラフィックスカードに配置され得る）に、または、単一のチップのパッケージに含む。しかしながら、これらの配設の両方は、（ｉ）個別のメモリシステム、（ｉｉ）効率的なスケジューリング、（ｉｉｉ）プロセス間にサービス品質（ＱｏＳ）保証を提供すること、（ｉｖ）プログラミングモデル、および、（ｖ）複数のターゲットの命令セットアーキテクチャ（ＩＳＡ）にコンパイルすること、ということに関連した大きな課題を依然として含んでおり、これらは全て、電力消費を最小化する。
【０００６】
例えば、個別的なチップの配置は、システムおよびソフトウェアアーキテクトに対して、各プロセッサがメモリにアクセスするために、チップ間のインターフェースの利用を強いる。これらの外部インターフェース（例えば、チップ間）は、協働する異種のプロセッサのメモリ待ち時間および電力消費に悪影響を及ぼすと同時に、個別のメモリシステム（すなわち、個別のアドレス空間）およびドライバにより管理される共有メモリがオーバーヘッドをもたらし、これは、きめ細やかなオフロードには許容不可能となる。
【０００７】
個別的および単一のチップ配設の両方は、実行するためにＧＰＵに送信することができるコマンドのタイプを制限し得る。例として、計算コマンド（例えば、物理または人工知能コマンド）は、しばしば、実行するためにＧＰＵに送信することができない。この制限は、ＣＰＵが、これらの計算コマンドによって遂行される動作の結果を比較的迅速に必要とし得るために存在する。しかしながら、現在のシステムにおけるＧＰＵへのディスパッチ作業の高いオーバーヘッドと、これらのコマンドは、予め発行された他のコマンドが最初に実行されるのを並んで待つ必要があり得るという事実とにより、計算コマンドをＧＰＵに送信することによって生じる待ち時間は、多くの場合、容認されない。
【０００８】
従来のＧＰＵが一部の計算コマンドを効率的に実行することができないということを考えると、コマンドは、ＣＰＵ内で実行されなければならない。ＣＰＵ上でコマンドを実行しなければならないことは、ＣＰＵの処理負担を増加させ、全体的なシステム性能を妨げることとなり得る。
【０００９】
ＧＰＵは、計算オフロードに対する優れた機会を提供するが、従来のＧＰＵは、一部のマルチ処理または環境において、効率的な動作に対して所望されるシステムソフトウェア駆動処理管理には好適ではない場合がある。これらの制限は、いくつかの問題をもたらし得る。
【００１０】
例えば、プロセスを効率的に特定および／または先制することができないため、不正プロセスが、任意の時間量の間、ＧＰＵハードウェアを占有し得る。他の場合において、ハードウェアをコンテキストスイッチオフする能力は、厳しく制約されており、非常に粗い粒度と、プログラムの実行における非常に制限されたポイントセットとにおいて生じる。この制約は、処理を回復および再開するために必要なアーキテクチャと、マイクロアーキテクチャの状態を保存することとがサポートされていないために存在する。正確な例外に対するサポートの欠如は、欠陥ジョブが、コンテキストスイッチされることと、後のポイントで回復されることとを阻止し、欠陥スレッドが、ハードウェアリソースを占有し、欠陥対応の間アイドル状態になるため、より低いハードウェア使用をもたらす。
【００１１】
アービトレーションは、コンピュータシステム内の２つの異なるレベルで生じる。一つのレベルは、ＧＰＵ計算パイプラインのフロントエンドにおいて、どのジョブが駆動されるかに関する。他方のレベルは、共有リソースの利用に関する。同時に実行されている複数のタスクが存在するため、これらのタスクは、優先順位付けされなければならない。したがって、どのように共有リソースが利用されるかを決定するための決断が必要とされる。例えば、タスクがディスパッチパイプラインの始まりで到着し、シェーダコアに移動する際、それらをどのように優先順位付けするかである。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
したがって、システムが複数の計算パイプラインを有する場合のアービトレーションポリシーを解決する、改善されたアービトレーション方法およびシステムが必要とされる。
【００１３】
ＧＰＵ、高速化処理ユニット（ＡＰＵ）、および、グラフィックス処理ユニットの汎用目的使用（ＧＰＧＰＵ）は、この分野では一般的に使用されている用語であるが、「高速化処理デバイス（ＡＰＤ）」という表現は、より広い表現とみなされている。例えば、ＡＰＤは、従来のＣＰＵ、従来のＧＰＵおよび／またはそれらの組み合わせ等のリソースに関して、高速化グラフィックス処理タスク、データ並列タスクまたはネスト型データ並列タスクに関連したそれらの機能および計算を高速化した態様で実行する、ハードウェアおよび／またはソフトウェアの任意の協働集合を指す。
【課題を解決するための手段】
【００１４】
本発明の一実施形態は、計算パイプラインを含むＡＰＤ内の優先順位を決定する方法を提供する。この方法は、既定の基準に従って、計算パイプラインの各々の計算パイプライン処理キューから、第１のキューおよび第２のキューを選択することと、優先順位基準に従って、処理のために、第１および第２のキューのうち１つを選択することと、を含む。選択されたキューは、タイムカンタムの経過が生じるか、より高い優先順位を有するキューが利用可能になるまで処理される。
【００１５】
本発明のさらなる特徴および利点ならびに本発明の様々な実施形態の構造および動作を、添付の図面を参照して、以下で詳細に説明する。本発明が、本明細書に記載される特定の実施形態に限定されないことに留意されたい。そのような実施形態は、例示目的のみのために本明細書に提示される。本明細書に含まれている教示に基づき、追加の実施形態が当業者には明白となるであろう。
【００１６】
本明細書に組み込まれ、本明細書の一部を形成する添付の図面は、本発明を例示し、さらに、説明とともに本発明の原理を説明するように機能し、当業者が本発明を実施し、使用することを可能にする。本発明の様々な実施形態は、図面を参照して以下に記載され、同様の参照番号は、全体を通じて同様の構成要素を指して使用される。
【図面の簡単な説明】
【００１７】
【図１Ａ】本発明の実施形態による処理システムの例示的なブロック図である。
【図１Ｂ】図１Ａにおいて例示されたＡＰＤの例示的なブロック図である。
【図２】図１ＢのＡＰＤのより詳細なブロック図である。
【図３】図２の図の計算パイプラインのより詳細なブロック図である。
【図４】本発明の実施形態によるハードウェア記述子キューを示すの図である。
【図５】本発明の実施形態を実行する例示的な方法のフローチャートである。
【図６】本発明の実施形態による例示的な方法を説明する図である。
【図７】本発明の実施形態による例示的な方法の他の態様を説明する図である。
【発明を実施するための形態】
【００１８】
以下の詳細な説明において、「一実施形態」、「実施形態」、「例示的な実施形態」等への言及は、記載の実施形態が、特定の特徴、構造または特性を含み得ることを示すが、あらゆる実施形態が、特定の特徴、構造または特性を必ずしも含むわけではない場合がある。さらに、このような語句は、必ずしも同じ実施形態を指すわけではない。さらに、特定の特徴、構造または特性が実施形態に関連して記載される場合には、かかる特徴、構造または特性を他の実施形態に関連して達成することは、明確に記載されているか否かにかかわらず、当業者の知識の範囲内であると考えられる。
【００１９】
「本発明の実施形態」という用語は、本発明の全ての実施形態が、述べられる特徴、利点または動作モードを含むことを要するものではない。本発明の範囲から逸脱することなく、代替の実施形態が発明されてもよく、本発明の周知の要素は、詳細には記述されないか、本発明に関連する細部を曖昧にしないために割愛される場合がある。さらに、本明細書に使用される用語は、特定の実施形態を説明する目的のみであり、制限するように意図するものではない。例えば、本明細書に使用される際、単数形の「１つの（ａ）」、「１つの（ａｎ）」および「その（ｔｈｅ）」は、文脈により別途明確に示されない限り、複数形を含むことに留意されたい。「備える（ｃｏｍｐｒｉｓｅｓ）」、「備えている（ｃｏｍｐｒｉｓｉｎｇ）」、「含む（ｉｎｃｌｕｄｅｓ）」および／または「含んでいる（ｉｎｃｌｕｄｉｎｇ）」という用語は、本明細書で使用される際、言及される特徴、完全体、ステップ、動作、要素および／または構成要素の存在を明示するが、１つ以上の他の特徴、完全体、ステップ、動作、要素、構成要素および／またはそれらの群の存在を排除するものではない。
【００２０】
図１Ａは、ＣＰＵ１０２およびＡＰＤ１０４を含む統合されたコンピューティングシステム１００の例示的な図である。ＣＰＵ１０２は、１つ以上の単一コアまたはマルチコアのＣＰＵを含み得る。本発明の一実施形態において、システム１００は、統合されたプログラミングおよび実行環境を提供するために、ＣＰＵ１０２およびＡＰＤ１０４を組み合わせて、単一のシリコンダイまたはパッケージ上に形成されている。この環境は、ＡＰＤ１０４が、いくつかのプログラミングタスクについてＣＰＵ１０２と同程度に流動的に使用されることを可能にする。しかしながら、ＣＰＵ１０２およびＡＰＤ１０４が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、それらが個別に形成され、同一または異なる基板上に取り付けられることが可能である。
【００２１】
一実施例において、システム１００は、メモリ１０６、ＯＳ（ＯＳ）１０８および通信基盤１０９を含む。ＯＳ１０８および通信基盤１０９は、以下でより詳細に説明される。
【００２２】
システム１００は、カーネルモードドライバ（ＫＭＤ）１１０と、ソフトウェアスケジューラ（ＳＷＳ）１１２と、例えば入力／出力メモリ管理ユニット（ＩＯＭＭＵ）等のメモリ管理ユニット１１６とを含む。システム１００の構成要素は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組み合わせとして実装され得る。当業者は、システム１００が、図１Ａに示される実施形態において示されているものに追加して、または、それらとは異なる形態で、１つ以上のソフトウェア、ハードウェアおよびファームウェアの構成要素を含んでもよいことを理解するであろう。
【００２３】
一実施例において、ＫＭＤ１１０等のドライバは、典型的に、ハードウェアが接続するコンピュータバスまたは通信サブシステムを通じて、デバイスと通信する。コールプログラムがドライバ内のルーチンを呼び出す場合に、ドライバは、デバイスにコマンドを発行する。デバイスがドライバにデータを送り返すと、ドライバは、当初のコールプログラムにルーチンを呼び出す。一実施例において、ドライバは、ハードウェア依存性およびオペレーティングシステム固有である。それらは、通常、任意の必要な非同期時間依存ハードウェアインターフェースに必要とされる割り込み処理を提供する。デバイスドライバは、特に最新のＷｉｎｄｏｗｓ（登録商標）プラットフォーム上では、カーネルモード（Ｒｉｎｇ０）またはユーザモード（Ｒｉｎｇ３）で作動し得る。
【００２４】
ユーザモードでドライバを作動させる利点は、下手に作製されたユーザモードデバイスドライバがカーネルメモリを上書きすることによって、システムの機能を停止させるのを抑制できるため、安定性が向上することである。一方で、ユーザ／カーネル−モードの移行は、通常、相当な性能オーバーヘッドを課し、それによって、ユーザモードドライバに対して待ち時間が短く、高いスループットの要件を禁止する。カーネル空間は、システムコールの使用を通じてのみユーザモジュールによってアクセスされ得る。ＵＮＩＸ（登録商標）シェルまたは他のグラフィカルユーザインターフェース（ＧＵＩ）に基づくアプリケーションのようなエンドユーザ用プログラムは、ユーザ空間の一部である。これらのアプリケーションは、カーネルサポート機能を通じて、ハードウェアとやりとりする。
【００２５】
ＣＰＵ１０２は、制御プロセッサ、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）またはデジタル信号プロセッサ（ＤＳＰ）のうち１つ以上を含み得る（図示せず）。ＣＰＵ１０２は、例えば、コンピューティングシステム１００の動作を制御するＯＳ１０８、ＫＭＤ１１０、ＳＷＳ１１２およびアプリケーション１１１を含む、制御論理を実行する。この例示的な実施形態において、ＣＰＵ１０２は、一実施形態によれば、例えば、アプリケーションに関連する処理を、ＣＰＵ１０２、および、ＡＰＤ１０４等の他の処理リソースにわたって分配することによって、アプリケーション１１１の実行を開始および制御する。
【００２６】
ＡＰＤ１０４は、とりわけ、例えば、特に並列処理に適し得るグラフィックス動作および他の動作等の選択された機能のためのコマンドおよびプログラムを実行する。一般に、ＡＰＤ１０４は、ピクセル動作、幾何学的計算および画像をディスプレイにレンダリングすること等のグラフィックスパイプライン動作を実行するために、頻繁に使用され得る。本発明の様々な実施形態において、ＡＰＤ１０４は、ＣＰＵ１０２から受信したコマンドまたは命令に基づいて、計算処理動作を実行し得る。
【００２７】
例えば、コマンドは、ＩＳＡ内で定義されない特別な命令とみなされ、通常、所与のＩＳＡまたはハードウェアの固有の部分からの命令セットによって達成され得る。コマンドは、ディスパッチプロセッサ、ＣＰまたはネットワークコントローラ等の特別なプロセッサによって実行されてもよい。一方で、命令は、例えば、コンピュータアーキテクチャ内のプロセッサの単一の動作とみなされ得る。一実施例において、２つの組のＩＳＡを使用する場合に、一部の命令は、ｘ８６プログラムを実行するために使用され、一部の命令は、ＡＰＵ／ＡＰＤ計算ユニット上でカーネルを実行するために使用される。
【００２８】
例示的な実施形態において、ＣＰＵ１０２は、選択されたコマンドをＡＰＤ１０４に伝送する。これらの選択されたコマンドは、並列実行に適切なグラフィックスコマンドおよび他のコマンドを含み得る。コンピュータ処理コマンドも含み得るこれらの選択されたコマンドは、ＣＰＵ１０２から実質的に独立して実行され得る。
【００２９】
ＡＰＤ１０４は、限定されないが、１つ以上の単一命令複数データ（ＳＩＭＤ）処理コア等のそれ自体の計算ユニット（図示せず）を含み得る。本明細書で言及される際、ＳＩＭＤは、数学パイプラインまたはプログラミングモデルであり、そこでは、カーネルのデータおよび共有のプログラムカウンタをそれぞれ有する複数の処理要素上でカーネルが同時に実行される。全ての処理要素は、厳密に同一な命令セットを実行する。条件付き実行制御の使用により、作業アイテムを、各発行されたコマンドに対して参加させるか否かを可能にする。
【００３０】
一実施例において、各ＡＰＤ１０４計算ユニットは、１つ以上のスカラおよび／もしくはベクトル浮動小数点数演算ユニットならびに／または算術論理ユニット（ＡＬＵ）を含み得る。ＡＰＤ計算ユニットは、逆二乗根ユニットおよびサイン／コサインユニット等の特殊目的処理ユニット（図示せず）を含み得る。一実施例において、ＡＰＤ計算ユニットは、本明細書において、シェーダコア１２２と総称される。
【００３１】
一般的に、１つ以上のＳＩＭＤを有することは、ＡＰＤ１０４を、グラフィックス処理において一般的なもの等のデータ並列タスクの実行に理想的に適したものにする。
【００３２】
ピクセル処理等の一部のグラフィックスパイプライン動作および他の並列計算動作は、同じコマンドの流れまたは計算カーネルが、入力データ要素の流れまたは集合上で行われることを必要とし得る。同じ計算カーネルのそれぞれのインスタンス作成は、かかるデータ要素を並列して処理するように、シェーダコア１２２内の複数の計算ユニット上で同時に実行され得る。本明細書で言及される際、例えば、計算カーネルは、プログラム内で宣言され、ＡＰＵ／ＡＰＤ計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。
【００３３】
１つの例示的な実施形態において、各計算ユニット（例えば、ＳＩＭＤ処理コア）は、受信データを処理するために、特定の作業アイテムのそれぞれのインスタンス作成を実行し得る。作業アイテムは、コマンドによってデバイス上で呼び出されたカーネルの並列実行の集合の１つである。作業アイテムは、計算ユニット上で実行する作業グループの一部として、１つ以上の処理要素によって実行され得る。作業アイテムは、スレッド、レーンまたはインスタンスとも称され得る。
【００３４】
作業アイテムは、そのグローバルＩＤおよびローカルＩＤにより、集合内の他の実行と区別される。一実施例において、単一のＳＩＭＤエンジン上で一緒に同時に実行する作業グループ内の作業アイテムのサブセットは、ウェーブフロント１３６と称され得る。ウェーブフロントの幅は、ハードウェアＳＩＭＤエンジンの特性である。本明細書で言及される場合、作業グループとは、単一の計算ユニット上で実行する関連作業アイテムの集合である。グループ内の作業アイテムは、同じカーネルを実行し、ローカルメモリおよび作業グループバリアを共有する。作業グループは、スレッドグループまたはスレッドブロックとも称され得る。
【００３５】
作業グループからの全てのウェーブフロントは、同じＳＩＭＤエンジン上で処理される。ウェーブフロント全体にわたる命令が１つずつ発行され、全ての作業アイテムが同じ制御フローに従う場合に、各作業アイテムは、同じプログラムを実行する。実行マスクおよび作業アイテム条件付き実行制御を使用して、ウェーブフロント内で分散した制御フローを可能にする。個別の作業アイテムは、カーネルを通じて固有のコードパスを実際に取得することができる。ウェーブフロント開始時に完全な作業アイテムセットが利用可能でない場合に、部分実装ウェーブフロントが処理され得る。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。
【００３６】
コマンドは、ウェーブフロントに対して１つずつ発行され得る。全ての作業アイテムが同じ制御フローに従う場合に、各作業アイテムは、同じプログラムを実行し得る。一実施例において、実行マスクおよび作業アイテムの条件付き実行制御を使用して、分散制御フローを可能にする。個別の作業アイテムは、カーネルドライバを通じて固有のコードパスを実際に取得することができる。開始時に完全な作業アイテムセットが利用可能でない場合に、部分ウェーブフロントが処理され得る。例えば、シェーダコア１２２は、所定数のウェーブフロント１３６を同時に実行することができ、各ウェーブフロント１３６は、所定数の作業アイテムを含む。
【００３７】
システム１００内において、ＡＰＤ１０４は、グラフィックスメモリ１３０等の独自のメモリを含む。グラフィックスメモリ１３０は、ＡＰＤ１０４内での計算時に使用するためのローカルメモリを提供する。シェーダコア１２２内の個々の計算ユニット（図示せず）は、独自のローカルデータストア（図示せず）を有し得る。一実施形態において、ＡＰＤ１０４は、ローカルグラフィックスメモリ１３０へのアクセスと、メモリ１０６へのアクセスとを含む。別の実施形態において、ＡＰＤ１０４は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）へのアクセス、または、ＡＰＤ１０４に直接取り付けられ、かつ、メモリ１０６から別個に取り付けられる他のメモリ（図示せず）へのアクセスを含み得る。
【００３８】
示される実施例において、ＡＰＤ１０４は、１つまたは「ｎ」個のコマンドプロセッサ（ＣＰ）１２４を含む。ＣＰ１２４は、ＡＰＤ１０４内の処理を制御する。ＣＰ１２４は、実行されるコマンドをメモリ１０６内のコマンドバッファ１２５から取り出し、ＡＰＤ１０４上でのそれらのコマンドの実行を調整する。
【００３９】
一実施例において、ＣＰＵ１０２は、アプリケーション１１１に基づいて、コマンドを適切なコマンドバッファ１２５に入力する。本明細書で言及される際、アプリケーションは、ＣＰＵおよびＡＰＤ内の計算ユニット上で実行するプログラム部分の組み合わせである。
【００４０】
複数のコマンドバッファ１２５は、ＡＰＤ１０４上での各プロセスの実行がスケジュールされた状態で維持される。
【００４１】
ＣＰ１２４は、ハードウェア、ファームウェアもしくはソフトウェアまたはそれらの組み合わせで実装され得る。一実施形態において、ＣＰ１２４は、スケジューリング論理（ｌｏｇｉｃ）を含む実装論理ためのマイクロコードを有する縮小命令セットコンピュータ（ＲＩＳＣ）エンジンとして実装される。
【００４２】
ＡＰＤ１０４は、１つまたは「ｎ」個のディスパッチコントローラ（ＤＣ）１２６を含む。本願においては、ディスパッチという用語は、１組の計算ユニット上の１組の作業グループに対するカーネルの実行を開始するためにコンテキスト状態を使用する、ＤＣによって実行されるコマンドを指す。ＤＣ１２６は、シェーダコア１２２内で作業グループを開始するための論理を含む。一部の実施形態において、ＤＣ１２６は、ＣＰ１２４の一部として実装され得る。
【００４３】
システム１００は、ＡＰＤ１０４上での実行のためのランリスト１５０からプロセスを選択するためのハードウェアスケジューラ（ＨＷＳ）１２８を含む。ＨＷＳ１２８は、ラウンドロビン方式、優先順位レベルを使用して、または、他のスケジューリング方針に基づいて、ランリスト１５０からプロセスを選択し得る。優先順位レベルは、例えば動的に判定され得る。ＨＷＳ１２８は、例えば、新たなプロセスを追加することによって、および、ランリスト１５０から現行のプロセスを削除することによって、ランリスト１５０を管理する機能を含み得る。ＨＷＳ１２８のランリスト管理論理は、時には、ランリストコントローラ（ＲＬＣ）と称される。
【００４４】
本発明の様々な実施形態において、ＨＷＳ１２８がＲＬＣ１５０からプロセスの実行を開始する場合に、ＣＰ１２４は、対応するコマンドバッファ１２５からコマンドを取り出し、実行することを開始する。場合によっては、ＣＰ１２４は、ＣＰＵ１０２から受信したコマンドに対応する、ＡＰＤ１０４内で実行される１つ以上のコマンドを生成し得る。一実施形態において、ＣＰ１２４は、他の構成要素とともに、ＡＰＤ１０４および／またはシステム１００のリソースの利用を改善または最大化する態様で、ＡＰＤ１０４上でコマンドの優先順位付けおよびスケジューリングを実施する。
【００４５】
ＡＰＤ１０４は、割り込みジェネレータ１４６へのアクセスを有してもよいし、割り込みジェネレータ１４６を含んでもよい。割り込みジェネレータ１４６は、ＡＰＤ１０４がページフォルト等の割り込みイベントにあった際、ＯＳ１０８に割り込むようにＡＰＤ１０４によって構成され得る。例えば、ＡＰＤ１０４は、上記のページフォルト割り込みを生成するために、ＩＯＭＭＵ１１６内の割り込み生成論理に依存し得る。
【００４６】
ＡＰＤ１０４は、シェーダコア１２２内で現時点で作動しているプロセスに先制するために、先制およびコンテキストスイッチ論理１２０を含み得る。コンテキストスイッチ論理１２０は、例えば、プロセスを停止させ、その現在の状態（例えば、シェーダコア１２２の状態およびＣＰ１２４の状態）を保存するための機能を含む。
【００４７】
本明細書で言及される場合、状態という用語は、初期状態、中間状態および最終状態を含み得る。初期状態は、マシンが出力データセットを生成するために、プログラムに従って入力データセットを処理する開始点である。例えば、処理が進行することを可能にするために、いくつかの時点で記憶することが必要な中間状態が存在する。この中間状態は、何らかの他のプロセスによる割り込みの場合に、後に実行の継続を可能にするために記憶される場合がある。出力データセットの一部として記録され得る最終状態も存在する。
【００４８】
先制およびコンテキストスイッチ論理１２０は、別のプロセスをＡＰＤ１０４にコンテキストスイッチするための論理を含み得る。別のプロセスをＡＰＤ１０４上での作動状態にコンテキストスイッチするための機能性は、例えば、ＣＰ１２４およびＤＣ１２６を通じて、ＡＰＤ１０４上で作動するプロセスのインスタンス作成を行うことと、そのプロセスについて前に保存された状態を回復させることと、その実行を開始することと、を含み得る。
【００４９】
メモリ１０６は、ＤＲＡＭ（図示せず）等の非永続的メモリを含み得る。メモリ１０６は、アプリケーションまたは他の処理論理の部分の実行中に、例えば、処理論理命令、定数値および変数値を記憶し得る。例えば、一実施形態において、ＣＰＵ１０２上で１つ以上の動作を行う制御論理の一部は、ＣＰＵ１０２による動作のそれぞれの部分の実行中に、メモリ１０６内に存在し得る。本明細書に使用される際、「処理論理」または「論理」という用語は、制御フローコマンド、計算を行うためのコマンドおよびリソースへの関連アクセスのためのコマンドを指す。
【００５０】
実行中、それぞれのアプリケーション、ＯＳ機能、処理論理コマンドおよびシステムソフトウェアは、メモリ１０６内に存在し得る。ＯＳ１０８にとって必須の制御論理コマンドは、通常、実行中にメモリ１０６内に存在する。例えば、カーネルモードドライバ１１０およびソフトウェアスケジューラ１１２を含む他のソフトウェアコマンドも、システム１００の実行中にメモリ１０６内に存在し得る。
【００５１】
この実施例において、メモリ１０６は、ＡＰＤ１０４にコマンドを送信するためにＣＰＵ１０２によって使用されるコマンドバッファ１２５を含む。メモリ１０６は、プロセスリストおよびプロセス情報（例えば、アクティブリスト１５２およびプロセス制御ブロック１５４）を包含する。これらのリストおよび情報は、ＡＰＤ１０４および／または関連するスケジューリングハードウェアにスケジューリング情報を伝達するために、ＣＰＵ１０２上で実行するスケジューリングソフトウェアによって使用される。メモリ１０６へのアクセスは、メモリ１０６に連結されるメモリコントローラ１４０によって管理され得る。例えば、メモリ１０６から読み取り、または、メモリ１０６への書き込みを行うためのＣＰＵ１０２または他のデバイスからの要求は、メモリコントローラ１４０によって管理される。
【００５２】
システム１００の他の態様に戻って参照すると、ＩＯＭＭＵ１１６は、マルチコンテキストメモリ管理ユニットである。
【００５３】
本明細書に使用される際、コンテキスト（偶にプロセスと称される）は、カーネルが実行される環境、ならびに、同期およびメモリ管理が定義されるドメインとみなされ得る。コンテキストは、１組のデバイスと、それらのデバイスにアクセス可能なメモリと、対応するメモリ特性と、カーネルの実行またはメモリオブジェクト上の動作をスケジュールするために使用される１つ以上のコマンドキューと、を含む。一方で、プロセスは、コンピュータを作動させるプロセスを生成する、アプリケーションに対するプログラムの実行とみなされ得る。ＯＳは、プログラムが実行するためのデータ記録および仮想メモリアドレス空間を生成し得る。メモリおよびプログラムの実行の現在の状態は、プロセスと称され得る。ＯＳは、プロセスがメモリ上で初期状態から最終状態へと動作するためのタスクをスケジュールする。
【００５４】
図１Ａに示されている実施例を参照すると、ＩＯＭＭＵ１１６は、ＡＰＤ１０４を含むデバイスに対するメモリページアクセスのための、仮想アドレスから物理アドレスへの変換を行うための論理を含む。ＩＯＭＭＵ１１６は、例えば、ＡＰＤ１０４等のデバイスによるページアクセスがページフォルトとなった場合に割り込みを生成する論理を含んでもよい。ＩＯＭＭＵ１１６は、トランスレーションルックアサイドバッファ（ＴＬＢ）１１８を含んでもよいし、またはＴＬＢ１１８へのアクセスを有してもよい。ＴＬＢ１１８は、例として、メモリ１０６内のデータに対するＡＰＤ１０４による要求のための、論理（すなわち、仮想）メモリアドレスから物理メモリアドレスへの変換を高速化させるためのコンテンツアドレス可能メモリ（ＣＡＭ）において実装され得る。
【００５５】
示される実施例において、通信基盤１０９は、必要に応じて、システム１００の構成要素を相互接続する。通信基盤１０９は、周辺構成要素相互接続（ＰＣＩ）バス、拡張ＰＣＩ（ＰＣＩ―Ｅ）バスアドバンストマイクロコントローラバスアーキテクチャ（ＡＭＢＡ）バス、高速化グラフィックスポート（ＡＧＰ）またはかかる通信基盤のうち１つ以上（図示せず）を含み得る。通信基盤１０９は、イーサネット（登録商標）もしくは同様のネットワーク、または、アプリケーションのデータ変換率要件を満たす任意の好適な物理的通信基盤を含み得る。通信基盤１０９は、コンピューティングシステム１００の構成要素を含む構成要素を相互接続するための機能を含む。
【００５６】
この実施例においては、ＯＳ１０８は、システム１００のハードウェア構成要素を管理し、共通のサービスを提供するための機能を含む。様々な実施形態において、ＯＳ１０８は、ＣＰＵ１０２上で実行し、共通のサービスを提供し得る。これらの共通のサービスは、例えば、ＣＰＵ１０２内での実行のためのスケジューリングアプリケーション、フォルト管理、割り込みサービスならびに他のアプリケーションの入力および出力を処理することを含み得る。
【００５７】
いくつかの実施形態において、割り込みコントローラ１４８等の割り込みコントローラによって生成される割り込みに基づいて、ＯＳ１０８は、適切な割り込み処理ルーチンを呼び出す。例えば、ページフォルト割り込みを検出すると、ＯＳ１０８は、割り込みハンドラを呼び出し、メモリ１０６内への関連するページのロードを開始し、対応するページテーブルを更新する。
【００５８】
ＯＳ１０８は、ハードウェア構成要素へのアクセスが、ＯＳによって管理されるカーネル機能性を通じて媒介されるのを確実にすることによって、システム１００を保護するための機能性を含み得る。実際には、ＯＳ１０８は、アプリケーション１１１等のアプリケーションが、ＣＰＵ１０２上で、ユーザ空間において作動することを確実にする。ＯＳ１０８は、アプリケーション１１１がハードウェアおよび／または入力／出力機能性にアクセスするために、ＯＳによって提供されるカーネル機能を呼び出すことを確実にする。
【００５９】
例として、アプリケーション１１１は、ＣＰＵ１０２上で実行されるユーザ計算を行うための様々なプログラムまたはコマンドを含む。統合コンセプトは、ＣＰＵ１０２が、ＡＰＤ１０４での処理のための選択されたコマンドを途切れることなく送信することを可能にし得る。この統合型ＡＰＤ／ＣＰＵフレームワークの下では、アプリケーション１１１からの入力／出力要求は、対応するＯＳ機能を通じて処理される。
【００６０】
一実施例において、ＫＭＤ１１０は、ＡＰＩを実装している。ＣＰＵ１０２、または、ＣＰＵ１０２もしくは他の論理上で実行するアプリケーションは、ＡＰＩを通じて、ＡＰＤ１０４の機能を呼び出し得る。例えば、ＫＭＤ１１０は、ＣＰＵ１０２からのコマンドをコマンドバッファ１２５のキューに入れることができ、そこからＡＰＤ１０４がその後にコマンドを取り出す。さらに、ＫＭＤ１１０は、ＳＷＳ１１２とともに、ＡＰＤ１０４上で実行されるプロセスのスケジューリングを行うことができる。ＳＷＳ１１２は、例えば、ＡＰＤ上で実行されるプロセスの優先順位付けされたリストを維持するための論理を含み得る。
【００６１】
本発明の他の実施形態において、ＣＰＵ１０２上で実行するアプリケーションは、コマンドをキューに入れる場合に、ＫＭＤ１１０を完全にバイパスし得る。
【００６２】
いくつかの実施形態において、ＳＷＳ１１２は、ＡＰＤ１０４上で実行されるプロセスのアクティブリスト１５２をメモリ１０６内に維持する。ＳＷＳ１１２は、ハードウェア内のＨＷＳ１２８によって管理されるアクティブリスト１５２内のプロセスのサブセットを選択する。ＡＰＤ１０４上で各プロセスを作動することに関する情報は、ＣＰＵ１０２からプロセス制御ブロック（ＰＣＢ）１５４を通じてＡＰＤ１０４に伝達される。
【００６３】
アプリケーション、ＯＳおよびシステムソフトウェアのための処理論理には、マスクワーク／フォトマスクの生成を通じた製造プロセスを最終的に構成して、本明細書に記載される発明の態様を具現化するハードウェアデバイスを生成することを可能にするために、Ｃ等のプログラミング言語、および／または、Ｖｅｒｉｌｏｇ、ＲＴＬもしくはネットリスト等のハードウェア記述言語で指定されるコマンドを含み得る。
【００６４】
当業者であれば、本明細書を参照することにより、コンピューティングシステム１００が、図１Ａに示されるものよりも多いまたは少ない構成要素を含み得ることを理解するであろう。例えば、コンピューティングシステム１００は、１つ以上の入力インターフェースと、不揮発性記憶域と、１つ以上の出力インターフェースと、ネットワークインターフェースと、１つ以上のディスプレイまたはディスプレイインターフェースとを含み得る。
【００６５】
図１Ｂは、図１Ａに示されるＡＰＤ１０４のより詳細な実施形態を示す図である。図１Ｂにおいて、ＣＰ１２４は、ＣＰパイプライン１２４ａ，１２４ｂ，１２４ｃを含み得る。ＣＰ１２４は、図１Ａに示されるコマンドバッファ１２５からの入力として提供されるコマンドリストを処理するように構成され得る。図１Ｂの例示的な動作において、ＣＰ入力０（１２４ａ）は、コマンドをグラフィックスパイプライン１６２に駆動する役目を負う。ＣＰ入力１，２（１２４ｂ，１２４ｃ）は、コマンドを計算パイプライン１６０に転送する。また、ＨＷＳ１２８の動作を制御するためのコントローラ機構１６６も提供される。
【００６６】
図１Ｂにおいて、グラフィックスパイプライン１６２は、本明細書において、順序化されたパイプライン１６４と称される１組のブロックを含み得る。例として、順序化されたパイプライン１６４は、バーテックスグループトランスレータ（ＶＧＴ）１６４ａと、プリミティブアセンブラ（ＰＡ）１６４ｂと、スキャンコンバータ（ＳＣ）１６４ｃと、シェーダエキスポート、レンダバックユニット（ＳＸ／ＲＢ）１７６とを含む。順序化されたパイプライン１６４内の各ブロックは、グラフィックスパイプライン１６２内のグラフィックス処理の異なる段階を表す。順序化されたパイプライン１６４は、固定機能ハードウェアパイプラインとなり得る。しかし、本発明の精神および範囲内である他の実現形態も使用され得る。
【００６７】
ほんのわずかな量のデータが、グラフィックスパイプライン１６２への入力として提供され得るが、このデータは、グラフィックスパイプライン１６２からの出力として提供されるときまでには増幅されている。グラフィックスパイプライン１６２は、ＣＰパイプライン１２４ａから受信される作業アイテムグループ内の範囲を通じてカウントするためのＤＣ１６６を含む。ＤＣ１６６を通じて提出される計算作業は、グラフィックスパイプライン１６２と準同期される。
【００６８】
計算パイプライン１６０は、シェーダＤＣ１６８，１７０を含む。ＤＣの各々は、ＣＰパイプライン１２４ｂ，１２４ｃから受信される作業グループ内の計算範囲を通じてカウントするように構成されている。
【００６９】
図１Ｂに例示されるＤＣ１６６，１６８，１７０は、入力範囲を受信し、その範囲を作業グループに分解し、その後シェーダコア１２２に作業グループを転送する。
【００７０】
グラフィックスパイプライン１６２は、通常、固定機能パイプラインであることから、その状態を保存および回復することが困難であり、その結果、グラフィックスパイプライン１６２は、コンテキストスイッチすることが困難である。したがって、ほとんどの場合、本明細書において述べられるコンテキストスイッチングは、グラフィックスプロセス内のコンテキストスイッチングとは関係がない。例外は、シェーダコア１２２におけるグラフィックス作業であり、これは、コンテキストスイッチされ得る。
【００７１】
シェーダコア１２２は、グラフィックスパイプライン１６２および計算パイプライン１６０によって共有され得る。シェーダコア１２２は、ウェーブフロントを作動するように構成される汎用プロセッサであり得る。
【００７２】
一実施例において、計算パイプライン１６０内のすべての作業は、シェーダコア１２２内で処理される。シェーダコア１２２は、プログラム可能なソフトウェアコードを作動させ、状態データ等の様々な形態のデータを含む。しかしながら、計算パイプライン１６０は、処理のためにグラフィックスパイプライン１６２に作業を送信しない。グラフィックスパイプライン１６２内の作業の処理が完了した後、完了した作業は、デプス（ｄｅｐｔｈ）および色計算を行い、次いで、その最終結果をグラフィックスメモリ１３０に書き込むレンダバックユニット１７６を通じて処理される。
【００７３】
図２は、図１Ｂに示される例示的なＡＰＤ１０４のより詳細なブロック図である。図１Ｂに示されるように、ＡＰＤ１０４は、入力１および入力２をシェーダコア１２２に提供する計算パイプライン１６０を含む。図２に例示されるＡＰＤは、８つの計算パイプラインＣＳパイプ０〜ＣＳパイプ７（ＣＳ  Ｐ０〜ＣＳ  Ｐ７）を含む。この構成は、複数の計算パイプラインを通じて複数の計算タスクを処理するように構成されている。ＡＰＤ２００内の複数の計算パイプラインは、計算作業負荷間の柔軟なリソース割当を容易にする。例示的なＡＰＤ２００は、８つの計算パイプラインを例示しているが、当業者は、他の数の計算およびグラフィックス入力が使用され得ることを理解するであろう。
【００７４】
複数の計算入力からのデータを効率的に処理するために、図３でさらに詳細に例示されるように、計算パイプラインＣＳ  Ｐ０〜ＣＳ  Ｐ７内のパイプラインキュー間でアービトレーションが生じる。より具体的には、本発明の実施形態によるアービトレーションポリシーは、複数のパイプライン入力間でＡＰＤリソースを割り当てる。シェーダ入力ブロック（ＳＰＩ）２０２は、計算パイプラインＣＳ  Ｐ０〜ＣＳ  Ｐ７と、グラフィックスパイプライン２０４との間のウェーブフロントを提出するためのアービトレーションスキームを提供する。ウェーブディスパッチャ２０６は、ウェーブフロントを交互に転送する２つの計算パイプラインからシェーダコア２０８に接続されている。シェーダコア２０８は、ウェーブフロントを実行する。
【００７５】
図３は、図２に示される計算パイプラインＣＳ  Ｐ０〜ＣＳ  Ｐ７のより詳細なブロック図である。これらの８つの計算パイプラインは、共有シェーダコア２０８へのアクセスのためのアービトレーションに関与する。各計算パイプラインＣＳ  Ｐ０〜ＣＳ  Ｐ７は、例えば、ハードウェアキュー記述子ＨＱＤを含む。計算パイプラインＣＳ  Ｐ０はＨＱＤ０と関連付けられ、計算パイプラインＣＳ  Ｐ１はＨＱＤ１と関連付けられる等のように、ＣＳ  Ｐ７およびＨＱＤ７まで同様である。各ハードウェアキュー記述子ＨＱＤは、８つのメモリキューの関連付けられたキューを含む。図４に示されるように、例えば、ＣＳ  Ｐ０は、キューＱ０〜Ｑ７と関連付けられている。同様に、ＣＳ  Ｐ１は、キューＱ８〜Ｑ１５と関連付けられており、ＣＳパイプ７キューがＱ５６〜Ｑ６３に関連付けられるまで同様である。ＣＰマルチスレッドマイクロプロセッサエンジンＭＥ３０１およびグリッドＤＣ  Ｃｎｔｒ０〜Ｃｎｔｒ３は、スレッドグループを処理するように提供される。
【００７６】
上述したように、ハードウェアスケジューラＨＷＳ１２８は、ＡＰＤ上での実行のために、ＲＬＣ１５０からスケジュールされた処理を選択するように構成されている。例えば、ＨＷＳ１２８は、優先順位レベルに基づいて、または、他のアービトレーションスケジューリング基準に基づいて、ＲＬＣ１５０に適用されるスケジューリング技術をサポートする。さらに、ＫＭＤ１１０は、ＳＷＳ１１２とともに、ＡＰＤ上で実行されるべき処理のスケジューリングを行うことができる。例えば、ＯＳ  ＳＷＳ１１２は、アービトレーションの結果として、ＡＰＤ２００上で実行されるべき処理の優先順位付けされたリストを維持するための論理を含むことができる。
【００７７】
別の例示的な実施形態において、各パイプラインの計算パイプラインＣＳ  Ｐ０〜ＣＳ  Ｐ７と、ハードウェアキュー記述子ＨＱＤ０〜ＨＱＤ７との間のアービトレーションは、マルチレベルのスケジューリング処理を使用して解決される。複数の計算入力を伴う実装において、マルチレベルスケジューリングは、マルチレベル優先順位キュー間のリソース割当を制御するために使用することができ、ここでは、各計算入力が同様の優先順位のジョブと関連付けられる。
【００７８】
ＯＳは、ハードウェアキュー記述子をプログラムすることにより、計算パイプラインハードウェアキュー記述子ＨＱＤ０〜ＨＱＤ７による処理のために、キューＱ０〜Ｑ７をスケジュールすることができる。８つのハードウェアキュー記述子ＨＱＤのいずれも、アクティブキューを含有することができる。１つの計算パイプラインと関連付けられるキューは、独立した処理であってもよいし、処理のサブセットの実装を表してもよい。例えば、１つのパイプラインにおいて確立されるいずれのシステムも、例えば、図１Ａおよび１Ｂにおいて例示されるＬ２  Ｒ／Ｗキャッシュ１７４、グラフィックスまたはメモリ１３０等の共有メモリのうち１つ以上において確立される同期化を通じて、他の計算パイプラインからのキューまたはキューの組とやりとりすることができる。
【００７９】
各キューと関連付けられるハードウェアキュー記述子ＨＱＤは、いずれのシェーダリソースもまだ割り当てられていない任意のより多くの作業グループをディスパッチすることから、アクティブな処理を先制する能力をＯＳに提供することができる。ハードウェアから除去されるいずれのキューも、後の継続のために再スケジュールされ得るし、ＯＳが所望の場合に終了され得る。
【００８０】
ハードウェアキュー記述子ＨＱＤ０〜ＨＱＤ７の各々は、ＯＳに割り当てられたメモリキュー記述子ＭＱＤのメモリキュー記述子アドレスＭＱＤＡを含むことができる。ＯＳは、ＭＱＤを使用して、キューの永久的な状態を記憶し、ＭＱＤＡアドレスをＨＱＤに提供することができ、それによって、ハードウェアは、メモリキュー記述子のフィールドを選択するために更新することができる。メモリキュー記述子がＨＱＤから切断される場合、ハードウェアは、ＭＱＤの一部分を使用して、任意の先制中に、必要な永続的データを一時的に記憶する。また、空間のサブセットを、ＯＳとＨＱＤとの間の同期化調整のために使用することができる。
【００８１】
（キューアービトレーション）
図５は、本発明の実施形態を実行する例示的な方法のフローチャートである。図５のステップ５０２において、実行待ち状態キューおよびアクティブキューが、各計算パイプラインＣＳ  Ｐ０〜ＣＳ  Ｐ７に対する８つのハードウェアキュー記述子ＨＱＤ０〜ＨＱＤ７キューから選択される。例として、選択は、並列して、および、各計算パイプラインによって独立して行うことができる。
【００８２】
本発明の一実施形態において、以下のレジスタ制御がウェーブフロントキューパケットごとに提供される。
１）キューアクティブ（１ビット）、
２）キュー優先順位（４ビット  ０〜１５→Ｌ−Ｈ）、３）、
３）カンタム持続時間（５０００クロックの単位で５ビット）、
４）カンタム有効（１ビット）、
５）パイプ優先順位（２ビット）、
６）実行待ち状態（「実行待ち状態」は、キューがアクティブであり、かつ、（空ではない、または、ディスパッチパイプが空ではない）、かつ、キューが停止されていないことを示す。
【００８３】
ステップ５０４において、処理に対して実行待ち状態であると判定される、最も高いキュー優先順位を有するキューが選択される。一度選択されると、例えば、キューは、以下の条件のうち１つが生じるまで、選択されたままである。
１）より高い優先順位キューが実行待ち状態になる、
２）例えば、処理持続時間が超過し、同じ優先順位の別のキューが処理に対して実行待ち状態である等のように、カンタムが有効である、
３）カンタムが無効であり、現在のキュー内のウェーブフロントパケットが任意の他のキュー優先順位レジスタに書き込み、且つ、同じ優先順位の別のキューが実行待ち状態である、
４）現在のキューウェーブフロントパケットが計算パイプラインからのキューを先制し、例えば、タイマ期限切れ等の特定の条件でスマート待機をスケジュールする、
５）現在のキューおよび計算パイプラインＤＣ２０６が空になり、同じ計算パイプライン内の任意の他のキューが実行待ち状態である、
６）ＯＳが、現在のキューに先制することを要求する。
【００８４】
ステップ５０６において、計算パイプラインの上部のキューアービタは、より良好なキューが処理に対して実行待ち状態であることをアービタが判定する場合に、次のパケット境界で停止するようにそれぞれのＣＰ  ＭＥ３０１スレッドに信号伝達する。より良好なキューが利用可能でないと判定される場合には、処理は、ステップ５０８で継続する。
【００８５】
ステップ５１０において、ＣＰ  ＭＥ３０１は、コンテキストスイッチルーチンを行い、キューデータをフェッチすることを停止するようにフェッチャに信号伝達し、現在のキューに対するウェーブフロントをディスパッチすることを停止するようにＤＣに信号伝達する。ＣＰ  ＭＥ３０１は、それぞれのグリッドＤＣの再起動スレッドグループＩＤであるＣｏｎｔｒ０〜Ｃｏｎｔｒ３を記憶することができる。
【００８６】
ステップ５１２において、スイッチング計算パイプラインの現在の永続的状態がキューを再起動する前に、状態プレロードのために使用されるように事前に定義されたオフセットで、それぞれのメモリキュー記述子ＭＱＤに記憶される。現在の最終読み取りアドレスを記憶するパイプの終了を有するＭＱＤをターゲットとする、処理の終了（ＥＯＰ）フェンスイベントが挿入され得る。シェーダコンプレックス内で作業が未処理である間にキューがハードウェアから除去される場合に、ＨＱＤ最終読み取りアドレスは、ＭＱＤに記憶される。次いで、低レベルのドライバは、パイプ最終読み取りアドレスの先頭と、パイプ最終読み取りアドレスの最後とを比較する（それらが一致する場合に、全ての作業が終了する）ことによって、キューに対する全ての未処理の作業がいつ完了したかを判定することができる。
【００８７】
ステップ５１４において、前のキューの状態が保存されることをスケジュールされ、事前フェッチされたデータが破棄されることをスケジュールされる。ＣＰ  ＭＥは、処理のために次のキューを選択するように、フェッチャを解除することができる。次のキューが最初の状態のビットセットを有する場合に、フェッチャは、ＭＱＤからの記憶された永続的データのロードを挿入し、続いて、キューフェッチのためのキュー読み取り／書き込みポインタをセットアップする。ある実施形態では、スイッチの予想される時間は、ＣＰ  ＭＥが次のキューの処理を開始するまで約５００クロックであり得る。
【００８８】
図６に例示される以下の実施例を考慮する。ここで、Ｔ＜ｎ＞＝時間であり、ｎ＝クロック数である。
ＱＡ＝キューアクティブ、
ＱＰ＝キュー優先順位、
ＱＥ＝カンタム有効、
ＱＤ＝５０００クロックのカンタム持続時間単位。時間は、単一の計算パイプラインの８つのキューＱ０〜Ｑ７に対して、垂直に増加する。
【００８９】
図６に例示されるように、計算パイプラインは、各優先順位レベルに対して、スコアボードに実行された最後のキューを維持する。その優先順位レベルへの戻りは、次の実行待ち状態キューを処理する。１つのキューのみが優先順位レベルにおいて実行待ち状態である場合には、それが再開する。
【００９０】
パイプは、０から７にキューを順序化することができ、リセット時に、前のキューが７に設定され、ネイティブ順序としてＱ０→Ｑ７をもたらす。Ｑ０，Ｑ３，Ｑ７が、リセット直後のカンタム有効時にキュー優先順位７で実行待ちになる場合に、キューは、以下の順序、Ｑ０，Ｑ３，Ｑ７，Ｑ０等で処理する。Ｑ５が同じキュー優先順位レベル（７）で現れた場合には、それは、次のサイクルの間、Ｑ３の後であってＱ７の前に実行されるであろう。
【００９１】
次いで、Ｑ１およびＱ４が、Ｑ５カンタムの間に優先順位１０で到着した場合には、Ｑ１は、Ｑ５を先制し、システムは、キューが空になる、または、別のキューが処理のためにスケジュールされるまで、Ｑ４とＱ１との間でカンタムを繰り返しスイッチする。Ｑ１およびＱ４が空になる場合に、処理は、Ｑ５が優先順位７レベルですでに処理されているため、Ｑ７に戻る。
【００９２】
図６は、本発明の実施形態による例示的な方法を示す図である。図６に例示される実施例において、計算パイプラインは、パイプを他のキューに与えるように、２つの主要な方法のうち１つを使用する。第１の方法は、タイムカンタム期限切れに応答するものであり、第２の方法は、キュー優先順位レジスタへの書き込みである。
【００９３】
上述したように、タイムカンタムが有効であり超過するキューは、同じ優先順位の現行のキュー、または、同じもしくはより高い優先順位の到着キューによって、先制を可能にする。キューが最も高い優先順位のキューのみである場合には、キューは、同じまたはより高い優先順位のキューが実行待ち状態になるまで、計算パイプラインの所有権を保持する。
【００９４】
代替的な実施形態において、アービトレーションイベントは、計算パイプラインのキュー優先順位レジスタへのいずれの書き込みに対しても作成され得る。本方法は、ユーザが、パイプの他のキューを進捗させることを可能にする前に発行される作業の量を制御することを可能にし得る。さらに、この代替的な実施形態は、ＣＰ  ＭＥごとに特権的キューを可能にする。
【００９５】
（計算パイプラインにわたるアービトレーション）
最も高い優先順位のキューが各計算パイプラインハードウェア記述子キュー内で一度解決されると、次のアービトレーションポイントは、最も高いパイプ優先順位を有する計算パイプラインからどのウェーブフロントが処理のためにシェーダコアに提出されるかを解決する必要がある。２つの計算パイプラインが交互に共通のＤＣを共有するため、優先順位が判定された後、共有回路は、どの計算パイプラインがシェーダコアに提出されるかを割り当てる。
【００９６】
例えば、関与するパイプラインは、グラフィックスパイプライン、ＨＰ３Ｄタスク（ＬＳ、ＨＳ、ＥＳ、ＧＳ、ＶＳ、ＰＳ）、および、ＧＦＸタスク（ＬＳ、ＨＳ、ＥＳ、ＧＳ、ＶＳ、ＰＳ、ＣＳ）、ならびに、８つの計算パイプラインのうち４つの計算パイプラインであり得る。計算パイプラインは、以下のパイプ特性のうち１つを有し得る：ＣＳ＿ＨＩＧＨ−ＨＰ３Ｄを上回る、ＣＳ＿ＭＥＤＩＵＭ−ＨＰ３ＤとＧＦＸとの間、ＣＳ＿ＬＯＷ−ＧＦＸを下回る。
【００９７】
同じパイプ優先順位レベルの複数の計算パイプライン間のつながりを解決するために、例えば、トーテムポール回路等のように最も過去に発行された、または、最も過去に使用された回路を採用することができる。パイプラインが、シェーダコアに任意の作業を発行するように選択されるたびに、パイプラインは、最も過去に発行された回路の底部に移動され、同じ優先順位の別のパイプラインがウェーブフロントを発行するまで、そのパイプラインに、パイプライン優先順位の最も低い優先順位を割り当てる。この特殊回路は、同じ優先順位のワークグループを発行する上で、公平性を促すことを助長するために使用される。
【００９８】
リセットを終えると、最も過去に発行されたリストは、Ｐ０→Ｐ７となり、所与のパイプ優先順位に関して、最初は、パイプ０が最も優先される。
【００９９】
図７は、例示的なパイプラインアービトレーションポリシーの図示である。最も高いレベルから最も低い優先順位レベルで、ＣＳ  ＨＩＧＨ、ＨＰ３Ｄ、ＣＳ  ＭＥＤＩＵＭ、ＧＦＸ、ＣＳ＿ＬＯＷの５つの優先順位レベルのうち、最良の勝者が選択される。
【０１００】
実施例において、太字のパイプラインは、ウェーブフロントの開始が考慮され、太字で下線付きのパイプラインは、ウェーブフロントの開始のために選択される。
【０１０１】
図７に例示される表は、例示的な左から右へのトーテムポール配設を示す。実施例において、計算パイプラインＣＳ  Ｐ０〜ＣＳ  Ｐ７は、Ｐｎによって表され、ｎは、ウェーブフロントを提供する計算パイプラインであり、（−）は、何もない＝作業がないことを意味する。Ｈは、パイプ優先順位が高であることを表し、Ｍは、パイプ優先順位が中であることを表し、Ｌは、パイプ優先順位が低であることを表す。各期間中、ＤＣによって計算パイプライン対アービトレーションに耐える８つの計算パイプラインのうち４つの計算パイプラインが太字で示され、太字の下線付きの計算パイプラインは、競合される６つのパイプラインのうち、パイプアービトレーションが選択するパイプである。
【０１０２】
（結論）
発明の概要および要約の項目は、本発明者によって企図されるものとして、本発明の１つ以上ではあるが全てではない例示的な実施形態を示し得る。したがって、本発明および添付の特許請求の範囲を如何様にも限定することを意図するものではない。
【０１０３】
本発明は、特定の機能の実現形態およびそれらの関係を示す機能的な構成要素を用いて上述されている。これらの機能的な構成要素の境界線は、説明の便宜のために本明細書に恣意的に定義されている。その特定の機能の実現および関係が適切に行われる限り、代替的な境界線が定義されてもよい。
【０１０４】
特定の実施形態の上述の説明は、本発明の概括的な特徴を十分に明らかにしているため、当業者の範囲内の知識を適用することにより、第三者が、様々な応用のために、このような特定の実施形態を、過度な実験をすることなく、本発明の概括的な概念から逸脱することなく、容易に修正および／または適応させることができる。したがって、そのような適応および修正は、本明細書に提示される教示および指針に基づいて、開示される実施形態の均等物の意味および範囲内に含まれることが意図される。本明細書の語法または用語法は、教示および指針に鑑み、当業者により解釈されるべきものであるように、本明細書における語法または用語法は、説明目的であり、かつ、制限する目的ではないことを理解されたい。
【０１０５】
本発明の広がりや範囲は、上記の例示的な実施形態のいずれによっても限定されるべきではなく、以下の特許請求の範囲およびそれらの均等物によってのみ定義されるべきである。
【図１Ａ】
2015502618.tif 000003
【図１Ｂ】
2015502618.tif 000004
【図２】
2015502618.tif 000005
【図３】
2015502618.tif 000006
【図４】
2015502618.tif 000007
【図５】
2015502618.tif 000008
【図６】
2015502618.tif 000009
【図７】
2015502618.tif 000010
【国際調査報告】
2015502618.tif 000011
2015502618.tif 000012
2015502618.tif 000013