(58)【調査した分野】(Int.Cl.,DB名)
【背景技術】
【0002】
GPUの単位電力および/または経費当たりの規範的な性能によって、グラフィックスプロセッシングユニット(GPU)を通常のコンピュータ操作に使用することについての要望が、近年、増々顕著になっている。GPUの計算能力は、概して、対応する中央処理ユニット(CPU)のプラットフォームの計算能力を超えた比率で成長している。この成長は、モバイルコンピューティング市場およびそれに必要な支援サーバ/エンタープライズシステムの急激な拡大と相まって、所望のユーザ体験の特定の質を提供するために使用されている。その結果、データ並列コンテンツを伴う作業負荷を実行するためのCPUとGPUとの組み合わせ使用が、ボリューム技術となりつつある。
【0003】
しかしながら、GPUは、従来、グラフィックスの高速化のみに利用可能な、制約されたプログラミング環境で機能してきた。これらの制約は、GPUが、CPUほどプログラミングエコシステムが豊富でなかったという事実から生じていた。したがって、その使用は、ほとんどが二次元(2D)および三次元(3D)のグラフィックスに限られ、グラフィックスおよびビデオのアプリケーションプログラミングインターフェース(API)を扱うことにすでに慣れている数少ない最先端のマルチメディアのアプリケーションに限られている。
【0004】
マルチベンダがサポートする標準APIおよび支援ツールであるOpenCL(登録商標)およびDirectCompute(登録商標)の出現により、従来のアプリケーションにおけるGPUの制限が、従来のグラフィックスを越えて拡大されている。OpenCL(登録商標)およびDirectCompute(登録商標)は、将来性のある出発点ではあるが、CPUとGPUとの組み合わせが、大多数のプログラミングタスク用に、CPUと同じように流動的に使用されることを可能にする環境およびエコシステムを生成することに対して、多くの障害が残されている。
【0005】
現行のコンピューティングシステムは、しばしば、複数の処理デバイスを含む。例えば、コンピューティングシステムによっては、CPUとGPUの両方を、個別のチップ(例えば、CPUはマザーボードに配置され、GPUはグラフィックスカードに配置され得る)に、または、単一のチップのパッケージに含む。しかしながら、これらの配設の両方は、(i)個別のメモリシステム、(ii)効率的なスケジューリング、(iii)プロセス間にサービス品質(QoS)保証を提供すること、(iv)プログラミングモデル、および、(v)複数のターゲットの命令セットアーキテクチャ(ISA)にコンパイルすること、ということに関連した大きな課題を依然として含んでおり、これらは全て、電力消費を最小化する。
【0006】
例えば、個別的なチップの配置は、システムおよびソフトウェアアーキテクトに対して、各プロセッサがメモリにアクセスするために、チップ間のインターフェースの利用を強いる。これらの外部インターフェース(例えば、チップ間)は、協働する異種のプロセッサのメモリ待ち時間および電力消費に悪影響を及ぼすと同時に、個別のメモリシステム(すなわち、個別のアドレス空間)およびドライバにより管理される共有メモリがオーバーヘッドをもたらし、これは、きめ細やかなオフロードには許容不可能となる。
【0007】
個別的および単一のチップ配設の両方は、実行するためにGPUに送信することができるコマンドのタイプを制限し得る。例として、計算コマンド(例えば、物理または人工知能コマンド)は、しばしば、実行するためにGPUに送信することができない。この制限は、CPUが、これらの計算コマンドによって遂行される動作の結果を比較的迅速に必要とし得るために存在する。しかしながら、現在のシステムにおけるGPUへのディスパッチ作業の高いオーバーヘッドと、これらのコマンドは、予め発行された他のコマンドが最初に実行されるのを並んで待つ必要があり得るという事実とにより、計算コマンドをGPUに送信することによって生じる待ち時間は、多くの場合、容認されない。
【0008】
従来のGPUが一部の計算コマンドを効率的に実行することができないということを考えると、コマンドは、CPU内で実行されなければならない。CPU上でコマンドを実行しなければならないことは、CPUの処理負担を増加させ、全体的なシステム性能を妨げることとなり得る。
【0009】
GPUは、計算オフロードに対する優れた機会を提供するが、従来のGPUは、一部のマルチ処理または環境において、効率的な動作に対して所望されるシステムソフトウェア駆動処理管理には好適ではない場合がある。これらの制限は、いくつかの問題をもたらし得る。
【0010】
例えば、プロセスを効率的に特定および/または先制することができないため、不正プロセスが、任意の時間量の間、GPUハードウェアを占有し得る。他の場合において、ハードウェアをコンテキストスイッチオフする能力は、厳しく制約されており、非常に粗い粒度と、プログラムの実行における非常に制限されたポイントセットとにおいて生じる。この制約は、処理を回復および再開するために必要なアーキテクチャと、マイクロアーキテクチャの状態を保存することとがサポートされていないために存在する。正確な例外に対するサポートの欠如は、欠陥ジョブが、コンテキストスイッチされることと、後のポイントで回復されることとを阻止し、欠陥スレッドが、ハードウェアリソースを占有し、欠陥対応の間アイドル状態になるため、より低いハードウェア使用をもたらす。
【0011】
アービトレーションは、コンピュータシステム内の2つの異なるレベルで生じる。一つのレベルは、GPU計算パイプラインのフロントエンドにおいて、どのジョブが駆動されるかに関する。他方のレベルは、共有リソースの利用に関する。同時に実行されている複数のタスクが存在するため、これらのタスクは、優先順位付けされなければならない。したがって、どのように共有リソースが利用されるかを決定するための決断が必要とされる。例えば、タスクがディスパッチパイプラインの始まりで到着し、シェーダコアに移動する際、それらをどのように優先順位付けするかである。
【発明を実施するための形態】
【0018】
以下の詳細な説明において、「一実施形態」、「実施形態」、「例示的な実施形態」等への言及は、記載の実施形態が、特定の特徴、構造または特性を含み得ることを示すが、あらゆる実施形態が、特定の特徴、構造または特性を必ずしも含むわけではない場合がある。さらに、このような語句は、必ずしも同じ実施形態を指すわけではない。さらに、特定の特徴、構造または特性が実施形態に関連して記載される場合には、かかる特徴、構造または特性を他の実施形態に関連して達成することは、明確に記載されているか否かにかかわらず、当業者の知識の範囲内であると考えられる。
【0019】
「本発明の実施形態」という用語は、本発明の全ての実施形態が、述べられる特徴、利点または動作モードを含むことを要するものではない。本発明の範囲から逸脱することなく、代替の実施形態が発明されてもよく、本発明の周知の要素は、詳細には記述されないか、本発明に関連する細部を曖昧にしないために割愛される場合がある。さらに、本明細書に使用される用語は、特定の実施形態を説明する目的のみであり、制限するように意図するものではない。例えば、本明細書に使用される際、単数形の「1つの(a)」、「1つの(an)」および「その(the)」は、文脈により別途明確に示されない限り、複数形を含むことに留意されたい。「備える(comprises)」、「備えている(comprising)」、「含む(includes)」および/または「含んでいる(including)」という用語は、本明細書で使用される際、言及される特徴、完全体、ステップ、動作、要素および/または構成要素の存在を明示するが、1つ以上の他の特徴、完全体、ステップ、動作、要素、構成要素および/またはそれらの群の存在を排除するものではない。
【0020】
図1Aは、CPU102およびAPD104を含む統合されたコンピューティングシステム100の例示的な図である。CPU102は、1つ以上の単一コアまたはマルチコアのCPUを含み得る。本発明の一実施形態において、システム100は、統合されたプログラミングおよび実行環境を提供するために、CPU102およびAPD104を組み合わせて、単一のシリコンダイまたはパッケージ上に形成されている。この環境は、APD104が、いくつかのプログラミングタスクについてCPU102と同程度に流動的に使用されることを可能にする。しかしながら、CPU102およびAPD104が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、それらが個別に形成され、同一または異なる基板上に取り付けられることが可能である。
【0021】
一実施例において、システム100は、メモリ106、OS(OS)108および通信基盤109を含む。OS108および通信基盤109は、以下でより詳細に説明される。
【0022】
システム100は、カーネルモードドライバ(KMD)110と、ソフトウェアスケジューラ(SWS)112と、例えば入力/出力メモリ管理ユニット(IOMMU)等のメモリ管理ユニット116とを含む。システム100の構成要素は、ハードウェア、ファームウェア、ソフトウェアまたはそれらの任意の組み合わせとして実装され得る。当業者は、システム100が、
図1Aに示される実施形態において示されているものに追加して、または、それらとは異なる形態で、1つ以上のソフトウェア、ハードウェアおよびファームウェアの構成要素を含んでもよいことを理解するであろう。
【0023】
一実施例において、KMD110等のドライバは、典型的に、ハードウェアが接続するコンピュータバスまたは通信サブシステムを通じて、デバイスと通信する。コールプログラムがドライバ内のルーチンを呼び出す場合に、ドライバは、デバイスにコマンドを発行する。デバイスがドライバにデータを送り返すと、ドライバは、当初のコールプログラムにルーチンを呼び出す。一実施例において、ドライバは、ハードウェア依存性およびオペレーティングシステム固有である。それらは、通常、任意の必要な非同期時間依存ハードウェアインターフェースに必要とされる割り込み処理を提供する。デバイスドライバは、特に最新のWindows(登録商標)プラットフォーム上では、カーネルモード(Ring0)またはユーザモード(Ring3)で作動し得る。
【0024】
ユーザモードでドライバを作動させる利点は、下手に作製されたユーザモードデバイスドライバがカーネルメモリを上書きすることによって、システムの機能を停止させるのを抑制できるため、安定性が向上することである。一方で、ユーザ/カーネル−モードの移行は、通常、相当な性能オーバーヘッドを課し、それによって、ユーザモードドライバに対して待ち時間が短く、高いスループットの要件を禁止する。カーネル空間は、システムコールの使用を通じてのみユーザモジュールによってアクセスされ得る。UNIX(登録商標)シェルまたは他のグラフィカルユーザインターフェース(GUI)に基づくアプリケーションのようなエンドユーザ用プログラムは、ユーザ空間の一部である。これらのアプリケーションは、カーネルサポート機能を通じて、ハードウェアとやりとりする。
【0025】
CPU102は、制御プロセッサ、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)またはデジタル信号プロセッサ(DSP)のうち1つ以上を含み得る(図示せず)。CPU102は、例えば、コンピューティングシステム100の動作を制御するOS108、KMD110、SWS112およびアプリケーション111を含む、制御論理を実行する。この例示的な実施形態において、CPU102は、一実施形態によれば、例えば、アプリケーションに関連する処理を、CPU102、および、APD104等の他の処理リソースにわたって分配することによって、アプリケーション111の実行を開始および制御する。
【0026】
APD104は、とりわけ、例えば、特に並列処理に適し得るグラフィックス動作および他の動作等の選択された機能のためのコマンドおよびプログラムを実行する。一般に、APD104は、ピクセル動作、幾何学的計算および画像をディスプレイにレンダリングすること等のグラフィックスパイプライン動作を実行するために、頻繁に使用され得る。本発明の様々な実施形態において、APD104は、CPU102から受信したコマンドまたは命令に基づいて、計算処理動作を実行し得る。
【0027】
例えば、コマンドは、ISA内で定義されない特別な命令とみなされ、通常、所与のISAまたはハードウェアの固有の部分からの命令セットによって達成され得る。コマンドは、ディスパッチプロセッサ、CPまたはネットワークコントローラ等の特別なプロセッサによって実行されてもよい。一方で、命令は、例えば、コンピュータアーキテクチャ内のプロセッサの単一の動作とみなされ得る。一実施例において、2つの組のISAを使用する場合に、一部の命令は、x86プログラムを実行するために使用され、一部の命令は、APU/APD計算ユニット上でカーネルを実行するために使用される。
【0028】
例示的な実施形態において、CPU102は、選択されたコマンドをAPD104に伝送する。これらの選択されたコマンドは、並列実行に適切なグラフィックスコマンドおよび他のコマンドを含み得る。コンピュータ処理コマンドも含み得るこれらの選択されたコマンドは、CPU102から実質的に独立して実行され得る。
【0029】
APD104は、限定されないが、1つ以上の単一命令複数データ(SIMD)処理コア等のそれ自体の計算ユニット(図示せず)を含み得る。本明細書で言及される際、SIMDは、数学パイプラインまたはプログラミングモデルであり、そこでは、カーネルのデータおよび共有のプログラムカウンタをそれぞれ有する複数の処理要素上でカーネルが同時に実行される。全ての処理要素は、厳密に同一な命令セットを実行する。条件付き実行制御の使用により、作業アイテムを、各発行されたコマンドに対して参加させるか否かを可能にする。
【0030】
一実施例において、各APD104計算ユニットは、1つ以上のスカラおよび/もしくはベクトル浮動小数点数演算ユニットならびに/または算術論理ユニット(ALU)を含み得る。APD計算ユニットは、逆二乗根ユニットおよびサイン/コサインユニット等の特殊目的処理ユニット(図示せず)を含み得る。一実施例において、APD計算ユニットは、本明細書において、シェーダコア122と総称される。
【0031】
一般的に、1つ以上のSIMDを有することは、APD104を、グラフィックス処理において一般的なもの等のデータ並列タスクの実行に理想的に適したものにする。
【0032】
ピクセル処理等の一部のグラフィックスパイプライン動作および他の並列計算動作は、同じコマンドの流れまたは計算カーネルが、入力データ要素の流れまたは集合上で行われることを必要とし得る。同じ計算カーネルのそれぞれのインスタンス作成は、かかるデータ要素を並列して処理するように、シェーダコア122内の複数の計算ユニット上で同時に実行され得る。本明細書で言及される際、例えば、計算カーネルは、プログラム内で宣言され、APU/APD計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。
【0033】
1つの例示的な実施形態において、各計算ユニット(例えば、SIMD処理コア)は、受信データを処理するために、特定の作業アイテムのそれぞれのインスタンス作成を実行し得る。作業アイテムは、コマンドによってデバイス上で呼び出されたカーネルの並列実行の集合の1つである。作業アイテムは、計算ユニット上で実行する作業グループの一部として、1つ以上の処理要素によって実行され得る。作業アイテムは、スレッド、レーンまたはインスタンスとも称され得る。
【0034】
作業アイテムは、そのグローバルIDおよびローカルIDにより、集合内の他の実行と区別される。一実施例において、単一のSIMDエンジン上で一緒に同時に実行する作業グループ内の作業アイテムのサブセットは、ウェーブフロント136と称され得る。ウェーブフロントの幅は、ハードウェアSIMDエンジンの特性である。本明細書で言及される場合、作業グループとは、単一の計算ユニット上で実行する関連作業アイテムの集合である。グループ内の作業アイテムは、同じカーネルを実行し、ローカルメモリおよび作業グループバリアを共有する。作業グループは、スレッドグループまたはスレッドブロックとも称され得る。
【0035】
作業グループからの全てのウェーブフロントは、同じSIMDエンジン上で処理される。ウェーブフロント全体にわたる命令が1つずつ発行され、全ての作業アイテムが同じ制御フローに従う場合に、各作業アイテムは、同じプログラムを実行する。実行マスクおよび作業アイテム条件付き実行制御を使用して、ウェーブフロント内で分散した制御フローを可能にする。個別の作業アイテムは、カーネルを通じて固有のコードパスを実際に取得することができる。ウェーブフロント開始時に完全な作業アイテムセットが利用可能でない場合に、部分実装ウェーブフロントが処理され得る。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。
【0036】
コマンドは、ウェーブフロントに対して1つずつ発行され得る。全ての作業アイテムが同じ制御フローに従う場合に、各作業アイテムは、同じプログラムを実行し得る。一実施例において、実行マスクおよび作業アイテムの条件付き実行制御を使用して、分散制御フローを可能にする。個別の作業アイテムは、カーネルドライバを通じて固有のコードパスを実際に取得することができる。開始時に完全な作業アイテムセットが利用可能でない場合に、部分ウェーブフロントが処理され得る。例えば、シェーダコア122は、所定数のウェーブフロント136を同時に実行することができ、各ウェーブフロント136は、所定数の作業アイテムを含む。
【0037】
システム100内において、APD104は、グラフィックスメモリ130等の独自のメモリを含む。グラフィックスメモリ130は、APD104内での計算時に使用するためのローカルメモリを提供する。シェーダコア122内の個々の計算ユニット(図示せず)は、独自のローカルデータストア(図示せず)を有し得る。一実施形態において、APD104は、ローカルグラフィックスメモリ130へのアクセスと、メモリ106へのアクセスとを含む。別の実施形態において、APD104は、ダイナミックランダムアクセスメモリ(DRAM)へのアクセス、または、APD104に直接取り付けられ、かつ、メモリ106から別個に取り付けられる他のメモリ(図示せず)へのアクセスを含み得る。
【0038】
示される実施例において、APD104は、1つまたは「n」個のコマンドプロセッサ(CP)124を含む。CP124は、APD104内の処理を制御する。CP124は、実行されるコマンドをメモリ106内のコマンドバッファ125から取り出し、APD104上でのそれらのコマンドの実行を調整する。
【0039】
一実施例において、CPU102は、アプリケーション111に基づいて、コマンドを適切なコマンドバッファ125に入力する。本明細書で言及される際、アプリケーションは、CPUおよびAPD内の計算ユニット上で実行するプログラム部分の組み合わせである。
【0040】
複数のコマンドバッファ125は、APD104上での各プロセスの実行がスケジュールされた状態で維持される。
【0041】
CP124は、ハードウェア、ファームウェアもしくはソフトウェアまたはそれらの組み合わせで実装され得る。一実施形態において、CP124は、スケジューリング論理(logic)を含む実装論理ためのマイクロコードを有する縮小命令セットコンピュータ(RISC)エンジンとして実装される。
【0042】
APD104は、1つまたは「n」個のディスパッチコントローラ(DC)126を含む。本願においては、ディスパッチという用語は、1組の計算ユニット上の1組の作業グループに対するカーネルの実行を開始するためにコンテキスト状態を使用する、DCによって実行されるコマンドを指す。DC126は、シェーダコア122内で作業グループを開始するための論理を含む。一部の実施形態において、DC126は、CP124の一部として実装され得る。
【0043】
システム100は、APD104上での実行のためのランリスト150からプロセスを選択するためのハードウェアスケジューラ(HWS)128を含む。HWS128は、ラウンドロビン方式、優先順位レベルを使用して、または、他のスケジューリング方針に基づいて、ランリスト150からプロセスを選択し得る。優先順位レベルは、例えば動的に判定され得る。HWS128は、例えば、新たなプロセスを追加することによって、および、ランリスト150から現行のプロセスを削除することによって、ランリスト150を管理する機能を含み得る。HWS128のランリスト管理論理は、時には、ランリストコントローラ(RLC)と称される。
【0044】
本発明の様々な実施形態において、HWS128がRLC150からプロセスの実行を開始する場合に、CP124は、対応するコマンドバッファ125からコマンドを取り出し、実行することを開始する。場合によっては、CP124は、CPU102から受信したコマンドに対応する、APD104内で実行される1つ以上のコマンドを生成し得る。一実施形態において、CP124は、他の構成要素とともに、APD104および/またはシステム100のリソースの利用を改善または最大化する態様で、APD104上でコマンドの優先順位付けおよびスケジューリングを実施する。
【0045】
APD104は、割り込みジェネレータ146へのアクセスを有してもよいし、割り込みジェネレータ146を含んでもよい。割り込みジェネレータ146は、APD104がページフォルト等の割り込みイベントにあった際、OS108に割り込むようにAPD104によって構成され得る。例えば、APD104は、上記のページフォルト割り込みを生成するために、IOMMU116内の割り込み生成論理に依存し得る。
【0046】
APD104は、シェーダコア122内で現時点で作動しているプロセスに先制するために、先制およびコンテキストスイッチ論理120を含み得る。コンテキストスイッチ論理120は、例えば、プロセスを停止させ、その現在の状態(例えば、シェーダコア122の状態およびCP124の状態)を保存するための機能を含む。
【0047】
本明細書で言及される場合、状態という用語は、初期状態、中間状態および最終状態を含み得る。初期状態は、マシンが出力データセットを生成するために、プログラムに従って入力データセットを処理する開始点である。例えば、処理が進行することを可能にするために、いくつかの時点で記憶することが必要な中間状態が存在する。この中間状態は、何らかの他のプロセスによる割り込みの場合に、後に実行の継続を可能にするために記憶される場合がある。出力データセットの一部として記録され得る最終状態も存在する。
【0048】
先制およびコンテキストスイッチ論理120は、別のプロセスをAPD104にコンテキストスイッチするための論理を含み得る。別のプロセスをAPD104上での作動状態にコンテキストスイッチするための機能性は、例えば、CP124およびDC126を通じて、APD104上で作動するプロセスのインスタンス作成を行うことと、そのプロセスについて前に保存された状態を回復させることと、その実行を開始することと、を含み得る。
【0049】
メモリ106は、DRAM(図示せず)等の非永続的メモリを含み得る。メモリ106は、アプリケーションまたは他の処理論理の部分の実行中に、例えば、処理論理命令、定数値および変数値を記憶し得る。例えば、一実施形態において、CPU102上で1つ以上の動作を行う制御論理の一部は、CPU102による動作のそれぞれの部分の実行中に、メモリ106内に存在し得る。本明細書に使用される際、「処理論理」または「論理」という用語は、制御フローコマンド、計算を行うためのコマンドおよびリソースへの関連アクセスのためのコマンドを指す。
【0050】
実行中、それぞれのアプリケーション、OS機能、処理論理コマンドおよびシステムソフトウェアは、メモリ106内に存在し得る。OS108にとって必須の制御論理コマンドは、通常、実行中にメモリ106内に存在する。例えば、カーネルモードドライバ110およびソフトウェアスケジューラ112を含む他のソフトウェアコマンドも、システム100の実行中にメモリ106内に存在し得る。
【0051】
この実施例において、メモリ106は、APD104にコマンドを送信するためにCPU102によって使用されるコマンドバッファ125を含む。メモリ106は、プロセスリストおよびプロセス情報(例えば、アクティブリスト152およびプロセス制御ブロック154)を包含する。これらのリストおよび情報は、APD104および/または関連するスケジューリングハードウェアにスケジューリング情報を伝達するために、CPU102上で実行するスケジューリングソフトウェアによって使用される。メモリ106へのアクセスは、メモリ106に連結されるメモリコントローラ140によって管理され得る。例えば、メモリ106から読み取り、または、メモリ106への書き込みを行うためのCPU102または他のデバイスからの要求は、メモリコントローラ140によって管理される。
【0052】
システム100の他の態様に戻って参照すると、IOMMU116は、マルチコンテキストメモリ管理ユニットである。
【0053】
本明細書に使用される際、コンテキスト(偶にプロセスと称される)は、カーネルが実行される環境、ならびに、同期およびメモリ管理が定義されるドメインとみなされ得る。コンテキストは、1組のデバイスと、それらのデバイスにアクセス可能なメモリと、対応するメモリ特性と、カーネルの実行またはメモリオブジェクト上の動作をスケジュールするために使用される1つ以上のコマンドキューと、を含む。一方で、プロセスは、コンピュータを作動させるプロセスを生成する、アプリケーションに対するプログラムの実行とみなされ得る。OSは、プログラムが実行するためのデータ記録および仮想メモリアドレス空間を生成し得る。メモリおよびプログラムの実行の現在の状態は、プロセスと称され得る。OSは、プロセスがメモリ上で初期状態から最終状態へと動作するためのタスクをスケジュールする。
【0054】
図1Aに示されている実施例を参照すると、IOMMU116は、APD104を含むデバイスに対するメモリページアクセスのための、仮想アドレスから物理アドレスへの変換を行うための論理を含む。IOMMU116は、例えば、APD104等のデバイスによるページアクセスがページフォルトとなった場合に割り込みを生成する論理を含んでもよい。IOMMU116は、トランスレーションルックアサイドバッファ(TLB)118を含んでもよいし、またはTLB118へのアクセスを有してもよい。TLB118は、例として、メモリ106内のデータに対するAPD104による要求のための、論理(すなわち、仮想)メモリアドレスから物理メモリアドレスへの変換を高速化させるためのコンテンツアドレス可能メモリ(CAM)において実装され得る。
【0055】
示される実施例において、通信基盤109は、必要に応じて、システム100の構成要素を相互接続する。通信基盤109は、周辺構成要素相互接続(PCI)バス、拡張PCI(PCI―E)バスアドバンストマイクロコントローラバスアーキテクチャ(AMBA)バス、高速化グラフィックスポート(AGP)またはかかる通信基盤のうち1つ以上(図示せず)を含み得る。通信基盤109は、イーサネット(登録商標)もしくは同様のネットワーク、または、アプリケーションのデータ変換率要件を満たす任意の好適な物理的通信基盤を含み得る。通信基盤109は、コンピューティングシステム100の構成要素を含む構成要素を相互接続するための機能を含む。
【0056】
この実施例においては、OS108は、システム100のハードウェア構成要素を管理し、共通のサービスを提供するための機能を含む。様々な実施形態において、OS108は、CPU102上で実行し、共通のサービスを提供し得る。これらの共通のサービスは、例えば、CPU102内での実行のためのスケジューリングアプリケーション、フォルト管理、割り込みサービスならびに他のアプリケーションの入力および出力を処理することを含み得る。
【0057】
いくつかの実施形態において、割り込みコントローラ148等の割り込みコントローラによって生成される割り込みに基づいて、OS108は、適切な割り込み処理ルーチンを呼び出す。例えば、ページフォルト割り込みを検出すると、OS108は、割り込みハンドラを呼び出し、メモリ106内への関連するページのロードを開始し、対応するページテーブルを更新する。
【0058】
OS108は、ハードウェア構成要素へのアクセスが、OSによって管理されるカーネル機能性を通じて媒介されるのを確実にすることによって、システム100を保護するための機能性を含み得る。実際には、OS108は、アプリケーション111等のアプリケーションが、CPU102上で、ユーザ空間において作動することを確実にする。OS108は、アプリケーション111がハードウェアおよび/または入力/出力機能性にアクセスするために、OSによって提供されるカーネル機能を呼び出すことを確実にする。
【0059】
例として、アプリケーション111は、CPU102上で実行されるユーザ計算を行うための様々なプログラムまたはコマンドを含む。統合コンセプトは、CPU102が、APD104での処理のための選択されたコマンドを途切れることなく送信することを可能にし得る。この統合型APD/CPUフレームワークの下では、アプリケーション111からの入力/出力要求は、対応するOS機能を通じて処理される。
【0060】
一実施例において、KMD110は、APIを実装している。CPU102、または、CPU102もしくは他の論理上で実行するアプリケーションは、APIを通じて、APD104の機能を呼び出し得る。例えば、KMD110は、CPU102からのコマンドをコマンドバッファ125のキューに入れることができ、そこからAPD104がその後にコマンドを取り出す。さらに、KMD110は、SWS112とともに、APD104上で実行されるプロセスのスケジューリングを行うことができる。SWS112は、例えば、APD上で実行されるプロセスの優先順位付けされたリストを維持するための論理を含み得る。
【0061】
本発明の他の実施形態において、CPU102上で実行するアプリケーションは、コマンドをキューに入れる場合に、KMD110を完全にバイパスし得る。
【0062】
いくつかの実施形態において、SWS112は、APD104上で実行されるプロセスのアクティブリスト152をメモリ106内に維持する。SWS112は、ハードウェア内のHWS128によって管理されるアクティブリスト152内のプロセスのサブセットを選択する。APD104上で各プロセスを作動することに関する情報は、CPU102からプロセス制御ブロック(PCB)154を通じてAPD104に伝達される。
【0063】
アプリケーション、OSおよびシステムソフトウェアのための処理論理には、マスクワーク/フォトマスクの生成を通じた製造プロセスを最終的に構成して、本明細書に記載される発明の態様を具現化するハードウェアデバイスを生成することを可能にするために、C等のプログラミング言語、および/または、Verilog、RTLもしくはネットリスト等のハードウェア記述言語で指定されるコマンドを含み得る。
【0064】
当業者であれば、本明細書を参照することにより、コンピューティングシステム100が、
図1Aに示されるものよりも多いまたは少ない構成要素を含み得ることを理解するであろう。例えば、コンピューティングシステム100は、1つ以上の入力インターフェースと、不揮発性記憶域と、1つ以上の出力インターフェースと、ネットワークインターフェースと、1つ以上のディスプレイまたはディスプレイインターフェースとを含み得る。
【0065】
図1Bは、
図1Aに示されるAPD104のより詳細な実施形態を示す図である。
図1Bにおいて、CP124は、CPパイプライン124a,124b,124cを含み得る。CP124は、
図1Aに示されるコマンドバッファ125からの入力として提供されるコマンドリストを処理するように構成され得る。
図1Bの例示的な動作において、CP入力0(124a)は、コマンドをグラフィックスパイプライン162に駆動する役目を負う。CP入力1,2(124b,124c)は、コマンドを計算パイプライン160に転送する。また、HWS128の動作を制御するためのコントローラ機構166も提供される。
【0066】
図1Bにおいて、グラフィックスパイプライン162は、本明細書において、順序化されたパイプライン164と称される1組のブロックを含み得る。例として、順序化されたパイプライン164は、バーテックスグループトランスレータ(VGT)164aと、プリミティブアセンブラ(PA)164bと、スキャンコンバータ(SC)164cと、シェーダエキスポート、レンダバックユニット(SX/RB)176とを含む。順序化されたパイプライン164内の各ブロックは、グラフィックスパイプライン162内のグラフィックス処理の異なる段階を表す。順序化されたパイプライン164は、固定機能ハードウェアパイプラインとなり得る。しかし、本発明の精神および範囲内である他の実現形態も使用され得る。
【0067】
ほんのわずかな量のデータが、グラフィックスパイプライン162への入力として提供され得るが、このデータは、グラフィックスパイプライン162からの出力として提供されるときまでには増幅されている。グラフィックスパイプライン162は、CPパイプライン124aから受信される作業アイテムグループ内の範囲を通じてカウントするためのDC166を含む。DC166を通じて提出される計算作業は、グラフィックスパイプライン162と準同期される。
【0068】
計算パイプライン160は、シェーダDC168,170を含む。DCの各々は、CPパイプライン124b,124cから受信される作業グループ内の計算範囲を通じてカウントするように構成されている。
【0069】
図1Bに例示されるDC166,168,170は、入力範囲を受信し、その範囲を作業グループに分解し、その後シェーダコア122に作業グループを転送する。
【0070】
グラフィックスパイプライン162は、通常、固定機能パイプラインであることから、その状態を保存および回復することが困難であり、その結果、グラフィックスパイプライン162は、コンテキストスイッチすることが困難である。したがって、ほとんどの場合、本明細書において述べられるコンテキストスイッチングは、グラフィックスプロセス内のコンテキストスイッチングとは関係がない。例外は、シェーダコア122におけるグラフィックス作業であり、これは、コンテキストスイッチされ得る。
【0071】
シェーダコア122は、グラフィックスパイプライン162および計算パイプライン160によって共有され得る。シェーダコア122は、ウェーブフロントを作動するように構成される汎用プロセッサであり得る。
【0072】
一実施例において、計算パイプライン160内のすべての作業は、シェーダコア122内で処理される。シェーダコア122は、プログラム可能なソフトウェアコードを作動させ、状態データ等の様々な形態のデータを含む。しかしながら、計算パイプライン160は、処理のためにグラフィックスパイプライン162に作業を送信しない。グラフィックスパイプライン162内の作業の処理が完了した後、完了した作業は、デプス(depth)および色計算を行い、次いで、その最終結果をグラフィックスメモリ130に書き込むレンダバックユニット176を通じて処理される。
【0073】
図2は、
図1Bに示される例示的なAPD104のより詳細なブロック図である。
図1Bに示されるように、APD104は、入力1および入力2をシェーダコア122に提供する計算パイプライン160を含む。
図2に例示されるAPDは、8つの計算パイプラインCSパイプ0〜CSパイプ7(CS P0〜CS P7)を含む。この構成は、複数の計算パイプラインを通じて複数の計算タスクを処理するように構成されている。APD200内の複数の計算パイプラインは、計算作業負荷間の柔軟なリソース割当を容易にする。例示的なAPD200は、8つの計算パイプラインを例示しているが、当業者は、他の数の計算およびグラフィックス入力が使用され得ることを理解するであろう。
【0074】
複数の計算入力からのデータを効率的に処理するために、
図3でさらに詳細に例示されるように、計算パイプラインCS P0〜CS P7内のパイプラインキュー間でアービトレーションが生じる。より具体的には、本発明の実施形態によるアービトレーションポリシーは、複数のパイプライン入力間でAPDリソースを割り当てる。シェーダ入力ブロック(SPI)202は、計算パイプラインCS P0〜CS P7と、グラフィックスパイプライン204との間のウェーブフロントを提出するためのアービトレーションスキームを提供する。ウェーブディスパッチャ206は、ウェーブフロントを交互に転送する2つの計算パイプラインからシェーダコア208に接続されている。シェーダコア208は、ウェーブフロントを実行する。
【0075】
図3は、
図2に示される計算パイプラインCS P0〜CS P7のより詳細なブロック図である。これらの8つの計算パイプラインは、共有シェーダコア208へのアクセスのためのアービトレーションに関与する。各計算パイプラインCS P0〜CS P7は、例えば、ハードウェアキュー記述子HQDを含む。計算パイプラインCS P0はHQD0と関連付けられ、計算パイプラインCS P1はHQD1と関連付けられる等のように、CS P7およびHQD7まで同様である。各ハードウェアキュー記述子HQDは、8つのメモリキューの関連付けられたキューを含む。
図4に示されるように、例えば、CS P0は、キューQ0〜Q7と関連付けられている。同様に、CS P1は、キューQ8〜Q15と関連付けられており、CSパイプ7キューがQ56〜Q63に関連付けられるまで同様である。CPマルチスレッドマイクロプロセッサエンジンME301およびグリッドDC Cntr0〜Cntr3は、スレッドグループを処理するように提供される。
【0076】
上述したように、ハードウェアスケジューラHWS128は、APD上での実行のために、RLC150からスケジュールされた処理を選択するように構成されている。例えば、HWS128は、優先順位レベルに基づいて、または、他のアービトレーションスケジューリング基準に基づいて、RLC150に適用されるスケジューリング技術をサポートする。さらに、KMD110は、SWS112とともに、APD上で実行されるべき処理のスケジューリングを行うことができる。例えば、OS SWS112は、アービトレーションの結果として、APD200上で実行されるべき処理の優先順位付けされたリストを維持するための論理を含むことができる。
【0077】
別の例示的な実施形態において、各パイプラインの計算パイプラインCS P0〜CS P7と、ハードウェアキュー記述子HQD0〜HQD7との間のアービトレーションは、マルチレベルのスケジューリング処理を使用して解決される。複数の計算入力を伴う実装において、マルチレベルスケジューリングは、マルチレベル優先順位キュー間のリソース割当を制御するために使用することができ、ここでは、各計算入力が同様の優先順位のジョブと関連付けられる。
【0078】
OSは、ハードウェアキュー記述子をプログラムすることにより、計算パイプラインハードウェアキュー記述子HQD0〜HQD7による処理のために、キューQ0〜Q7をスケジュールすることができる。8つのハードウェアキュー記述子HQDのいずれも、アクティブキューを含有することができる。1つの計算パイプラインと関連付けられるキューは、独立した処理であってもよいし、処理のサブセットの実装を表してもよい。例えば、1つのパイプラインにおいて確立されるいずれのシステムも、例えば、
図1Aおよび1Bにおいて例示されるL2 R/Wキャッシュ174、グラフィックスまたはメモリ130等の共有メモリのうち1つ以上において確立される同期化を通じて、他の計算パイプラインからのキューまたはキューの組とやりとりすることができる。
【0079】
各キューと関連付けられるハードウェアキュー記述子HQDは、いずれのシェーダリソースもまだ割り当てられていない任意のより多くの作業グループをディスパッチすることから、アクティブな処理を先制する能力をOSに提供することができる。ハードウェアから除去されるいずれのキューも、後の継続のために再スケジュールされ得るし、OSが所望の場合に終了され得る。
【0080】
ハードウェアキュー記述子HQD0〜HQD7の各々は、OSに割り当てられたメモリキュー記述子MQDのメモリキュー記述子アドレスMQDAを含むことができる。OSは、MQDを使用して、キューの永久的な状態を記憶し、MQDAアドレスをHQDに提供することができ、それによって、ハードウェアは、メモリキュー記述子のフィールドを選択するために更新することができる。メモリキュー記述子がHQDから切断される場合、ハードウェアは、MQDの一部分を使用して、任意の先制中に、必要な永続的データを一時的に記憶する。また、空間のサブセットを、OSとHQDとの間の同期化調整のために使用することができる。
【0081】
(キューアービトレーション)
図5は、本発明の実施形態を実行する例示的な方法のフローチャートである。
図5のステップ502において、実行待ち状態キューおよびアクティブキューが、各計算パイプラインCS P0〜CS P7に対する8つのハードウェアキュー記述子HQD0〜HQD7キューから選択される。例として、選択は、並列して、および、各計算パイプラインによって独立して行うことができる。
【0082】
本発明の一実施形態において、以下のレジスタ制御がウェーブフロントキューパケットごとに提供される。
1)キューアクティブ(1ビット)、
2)キュー優先順位(4ビット 0〜15→L−H)、3)、
3)カンタム持続時間(5000クロックの単位で5ビット)、
4)カンタム有効(1ビット)、
5)パイプ優先順位(2ビット)、
6)実行待ち状態(「実行待ち状態」は、キューがアクティブであり、かつ、(空ではない、または、ディスパッチパイプが空ではない)、かつ、キューが停止されていないことを示す。
【0083】
ステップ504において、処理に対して実行待ち状態であると判定される、最も高いキュー優先順位を有するキューが選択される。一度選択されると、例えば、キューは、以下の条件のうち1つが生じるまで、選択されたままである。
1)より高い優先順位キューが実行待ち状態になる、
2)例えば、処理持続時間が超過し、同じ優先順位の別のキューが処理に対して実行待ち状態である等のように、カンタムが有効である、
3)カンタムが無効であり、現在のキュー内のウェーブフロントパケットが任意の他のキュー優先順位レジスタに書き込み、且つ、同じ優先順位の別のキューが実行待ち状態である、
4)現在のキューウェーブフロントパケットが計算パイプラインからのキューを先制し、例えば、タイマ期限切れ等の特定の条件でスマート待機をスケジュールする、
5)現在のキューおよび計算パイプラインDC206が空になり、同じ計算パイプライン内の任意の他のキューが実行待ち状態である、
6)OSが、現在のキューに先制することを要求する。
【0084】
ステップ506において、計算パイプラインの上部のキューアービタは、より良好なキューが処理に対して実行待ち状態であることをアービタが判定する場合に、次のパケット境界で停止するようにそれぞれのCP ME301スレッドに信号伝達する。より良好なキューが利用可能でないと判定される場合には、処理は、ステップ508で継続する。
【0085】
ステップ510において、CP ME301は、コンテキストスイッチルーチンを行い、キューデータをフェッチすることを停止するようにフェッチャに信号伝達し、現在のキューに対するウェーブフロントをディスパッチすることを停止するようにDCに信号伝達する。CP ME301は、それぞれのグリッドDCの再起動スレッドグループIDであるContr0〜Contr3を記憶することができる。
【0086】
ステップ512において、スイッチング計算パイプラインの現在の永続的状態がキューを再起動する前に、状態プレロードのために使用されるように事前に定義されたオフセットで、それぞれのメモリキュー記述子MQDに記憶される。現在の最終読み取りアドレスを記憶するパイプの終了を有するMQDをターゲットとする、処理の終了(EOP)フェンスイベントが挿入され得る。シェーダコンプレックス内で作業が未処理である間にキューがハードウェアから除去される場合に、HQD最終読み取りアドレスは、MQDに記憶される。次いで、低レベルのドライバは、パイプ最終読み取りアドレスの先頭と、パイプ最終読み取りアドレスの最後とを比較する(それらが一致する場合に、全ての作業が終了する)ことによって、キューに対する全ての未処理の作業がいつ完了したかを判定することができる。
【0087】
ステップ514において、前のキューの状態が保存されることをスケジュールされ、事前フェッチされたデータが破棄されることをスケジュールされる。CP MEは、処理のために次のキューを選択するように、フェッチャを解除することができる。次のキューが最初の状態のビットセットを有する場合に、フェッチャは、MQDからの記憶された永続的データのロードを挿入し、続いて、キューフェッチのためのキュー読み取り/書き込みポインタをセットアップする。ある実施形態では、スイッチの予想される時間は、CP MEが次のキューの処理を開始するまで約500クロックであり得る。
【0088】
図6に例示される以下の実施例を考慮する。ここで、T<n>=時間であり、n=クロック数である。
QA=キューアクティブ、
QP=キュー優先順位、
QE=カンタム有効、
QD=5000クロックのカンタム持続時間単位。時間は、単一の計算パイプラインの8つのキューQ0〜Q7に対して、垂直に増加する。
【0089】
図6に例示されるように、計算パイプラインは、各優先順位レベルに対して、スコアボードに実行された最後のキューを維持する。その優先順位レベルへの戻りは、次の実行待ち状態キューを処理する。1つのキューのみが優先順位レベルにおいて実行待ち状態である場合には、それが再開する。
【0090】
パイプは、0から7にキューを順序化することができ、リセット時に、前のキューが7に設定され、ネイティブ順序としてQ0→Q7をもたらす。Q0,Q3,Q7が、リセット直後のカンタム有効時にキュー優先順位7で実行待ちになる場合に、キューは、以下の順序、Q0,Q3,Q7,Q0等で処理する。Q5が同じキュー優先順位レベル(7)で現れた場合には、それは、次のサイクルの間、Q3の後であってQ7の前に実行されるであろう。
【0091】
次いで、Q1およびQ4が、Q5カンタムの間に優先順位10で到着した場合には、Q1は、Q5を先制し、システムは、キューが空になる、または、別のキューが処理のためにスケジュールされるまで、Q4とQ1との間でカンタムを繰り返しスイッチする。Q1およびQ4が空になる場合に、処理は、Q5が優先順位7レベルですでに処理されているため、Q7に戻る。
【0092】
図6は、本発明の実施形態による例示的な方法を示す図である。
図6に例示される実施例において、計算パイプラインは、パイプを他のキューに与えるように、2つの主要な方法のうち1つを使用する。第1の方法は、タイムカンタム期限切れに応答するものであり、第2の方法は、キュー優先順位レジスタへの書き込みである。
【0093】
上述したように、タイムカンタムが有効であり超過するキューは、同じ優先順位の現行のキュー、または、同じもしくはより高い優先順位の到着キューによって、先制を可能にする。キューが最も高い優先順位のキューのみである場合には、キューは、同じまたはより高い優先順位のキューが実行待ち状態になるまで、計算パイプラインの所有権を保持する。
【0094】
代替的な実施形態において、アービトレーションイベントは、計算パイプラインのキュー優先順位レジスタへのいずれの書き込みに対しても作成され得る。本方法は、ユーザが、パイプの他のキューを進捗させることを可能にする前に発行される作業の量を制御することを可能にし得る。さらに、この代替的な実施形態は、CP MEごとに特権的キューを可能にする。
【0095】
(計算パイプラインにわたるアービトレーション)
最も高い優先順位のキューが各計算パイプラインハードウェア記述子キュー内で一度解決されると、次のアービトレーションポイントは、最も高いパイプ優先順位を有する計算パイプラインからどのウェーブフロントが処理のためにシェーダコアに提出されるかを解決する必要がある。2つの計算パイプラインが交互に共通のDCを共有するため、優先順位が判定された後、共有回路は、どの計算パイプラインがシェーダコアに提出されるかを割り当てる。
【0096】
例えば、関与するパイプラインは、グラフィックスパイプライン、HP3Dタスク(LS、HS、ES、GS、VS、PS)、および、GFXタスク(LS、HS、ES、GS、VS、PS、CS)、ならびに、8つの計算パイプラインのうち4つの計算パイプラインであり得る。計算パイプラインは、以下のパイプ特性のうち1つを有し得る:CS_HIGH−HP3Dを上回る、CS_MEDIUM−HP3DとGFXとの間、CS_LOW−GFXを下回る。
【0097】
同じパイプ優先順位レベルの複数の計算パイプライン間のつながりを解決するために、例えば、トーテムポール回路等のように最も過去に発行された、または、最も過去に使用された回路を採用することができる。パイプラインが、シェーダコアに任意の作業を発行するように選択されるたびに、パイプラインは、最も過去に発行された回路の底部に移動され、同じ優先順位の別のパイプラインがウェーブフロントを発行するまで、そのパイプラインに、パイプライン優先順位の最も低い優先順位を割り当てる。この特殊回路は、同じ優先順位のワークグループを発行する上で、公平性を促すことを助長するために使用される。
【0098】
リセットを終えると、最も過去に発行されたリストは、P0→P7となり、所与のパイプ優先順位に関して、最初は、パイプ0が最も優先される。
【0099】
図7は、例示的なパイプラインアービトレーションポリシーの図示である。最も高いレベルから最も低い優先順位レベルで、CS HIGH、HP3D、CS MEDIUM、GFX、CS_LOWの5つの優先順位レベルのうち、最良の勝者が選択される。
【0100】
実施例において、太字のパイプラインは、ウェーブフロントの開始が考慮され、太字で下線付きのパイプラインは、ウェーブフロントの開始のために選択される。
【0101】
図7に例示される表は、例示的な左から右へのトーテムポール配設を示す。実施例において、計算パイプラインCS P0〜CS P7は、Pnによって表され、nは、ウェーブフロントを提供する計算パイプラインであり、(−)は、何もない=作業がないことを意味する。Hは、パイプ優先順位が高であることを表し、Mは、パイプ優先順位が中であることを表し、Lは、パイプ優先順位が低であることを表す。各期間中、DCによって計算パイプライン対アービトレーションに耐える8つの計算パイプラインのうち4つの計算パイプラインが太字で示され、太字の下線付きの計算パイプラインは、競合される6つのパイプラインのうち、パイプアービトレーションが選択するパイプである。
【0102】
(結論)
発明の概要および要約の項目は、本発明者によって企図されるものとして、本発明の1つ以上ではあるが全てではない例示的な実施形態を示し得る。したがって、本発明および添付の特許請求の範囲を如何様にも限定することを意図するものではない。
【0103】
本発明は、特定の機能の実現形態およびそれらの関係を示す機能的な構成要素を用いて上述されている。これらの機能的な構成要素の境界線は、説明の便宜のために本明細書に恣意的に定義されている。その特定の機能の実現および関係が適切に行われる限り、代替的な境界線が定義されてもよい。
【0104】
特定の実施形態の上述の説明は、本発明の概括的な特徴を十分に明らかにしているため、当業者の範囲内の知識を適用することにより、第三者が、様々な応用のために、このような特定の実施形態を、過度な実験をすることなく、本発明の概括的な概念から逸脱することなく、容易に修正および/または適応させることができる。したがって、そのような適応および修正は、本明細書に提示される教示および指針に基づいて、開示される実施形態の均等物の意味および範囲内に含まれることが意図される。本明細書の語法または用語法は、教示および指針に鑑み、当業者により解釈されるべきものであるように、本明細書における語法または用語法は、説明目的であり、かつ、制限する目的ではないことを理解されたい。
【0105】
本発明の広がりや範囲は、上記の例示的な実施形態のいずれによっても限定されるべきではなく、以下の特許請求の範囲およびそれらの均等物によってのみ定義されるべきである。