(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0016】
以下の詳細な説明においては、「1つの実施形態」、「ある実施形態」、「例示的実施形態」またはその他を参照することは、本明細書において説明される実施形態が、特定の特徴、構造または特性を有することを示すが、全ての実施形態がその特定の特徴、構造または特性を必ずしも含むとは限らない。さらに、係る語句は、同一の実施形態を参照するとは限らない。さらに、特定の特徴、構造または特性が1つの実施形態に関連して説明されるとき、係る特長、構造または特性を他の実施形態との関連で実施することは、明示されているか否かによらず、当業者の知識の範囲内であることが提起される。
【0017】
「本発明の実施形態」という用語は、本発明の実施形態の全てが検討の対象である特徴、利点または操作モードを含むことを必ずしも要求しない。代替的な実施形態が本発明の範囲から逸脱することなく考案され、本発明の既知の構成要素は、本発明の関連する詳細を不明瞭化しないために、必ずしも詳細に説明されるとは限らず、または省略され得る。また、本明細書において用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を制限することを意図するものではない。例えば、本明細書において用いられる単数形の「1つの」および「その」は、内容的に明らかに単数のみを指す場合を除き、複数形をも含むことを意図するものである。本明細書において用いられる場合、「含む」、「備える」、「包含する」および/または「有する」という用語は、述べられた特徴、整数、ステップ、操作、構成要素および/またはコンポーネントが存在することを指定するが、1つまたは複数の他の特徴、整数、ステップ、操作、構成要素、コンポーネントおよび/またはこれらの群の存在または追加を除外しない。
【0018】
図1Aは、CPU102およびAPD104を含む、統合化されたコンピューティングシステム100の例示的な図である。CPU102は、1つ以上のシングルコアまたはマルチコアCPUを含み得る。本発明の一実施形態において、システム100は、統合化されたプログラミング環境および実行環境を提供するために、CPU102およびAPD104を組み合わせた単一のシリコンダイまたはパッケージ上に形成される。この環境は、APD104が、いくつかのプログラミングタスクに対して、CPU102と同程度に流動的に用いられることを可能にする。しかし、CPU102およびAPD104が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、CPU102およびAPD104は別個に形成され、同一の基板または異なる基板上に搭載されることが可能である。
【0019】
1つの例において、システム100は、メモリ106、オペレーティングシステム108および通信インフラストラクチャ109を含む。オペレーティングシステム108および通信インフラストラクチャ109は、以下でより詳細に説明される。
【0020】
システム100は、カーネルモードドライバ(KMD:kernel mode driver)110と、ソフトウェアスケジューラ(SWS:software scheduler)112と、例えば入出力メモリ管理ユニット(IOMMU:input/output memory management unit)等のメモリ管理ユニット116とを含む。システム100の構成品は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組合せとして実装され得る。当業者は、システム100が
図1Aに示される実施形態において示されるものに加えて、またはこれらとは異なる、1つ以上のソフトウェアコンポーネント、ハードウェアコンポーネントおよびファームウェアコンポーネントを含み得ることを理解するであろう。
【0021】
1つの例において、KMD110等のドライバは、通常、ハードウェアが接続されたコンピュータバスまたは通信サブシステムを通してデバイスと通信する。呼び出しプログラムがドライバにおいてルーチンを呼び出すと、ドライバは、デバイスに対してコマンドを発行する。デバイスがドライバに対してデータを戻すと、ドライバは、元の呼び出しプログラムにおいてルーチンを呼び出し得る。1つの例において、ドライバは、ハードウェア依存的であり、オペレーティングシステム固有である。ドライバは、通常、任意の必要な非同期的時間依存性のハードウェアインターフェースに対して要求されるインタラプトハンドリングを提供する。
【0022】
デバイスドライバは、特に現代のマイクロソフト・ウィンドウズ(登録商標)プラットフォームにおいては、カーネルモード(リング0)またはユーザモード(リング3)において実行され得る。ドライバをユーザモードにおいて実行することの主要な利益は、安定性が改善されることである。なぜなら、不完全な形で書かれたユーザモードデバイスドライバは、カーネルメモリを上書きすることによってシステムをクラッシュさせることができないためである。一方、ユーザモード/カーネルモードの遷移は、通常、顕著な性能オーバーヘッドを与え、それにより、低レイテンシおよび高スループット要件のためにユーザモードドライバを阻害する。カーネルスペースは、システムコールの使用を通してのみ、ユーザモジュールからのアクセスが可能である。UNIX(登録商標)シェルまたは他のGUIベースのアプリケーションなどのエンドユーザプログラムは、ユーザスペースの一部である。これらのアプリケーションは、カーネルにサポートされた機能を通してハードウェアと相互作用する。
【0023】
CPU102は、制御プロセッサ、フィールド・プログラマブル・ゲートアレイ(FPGA:field programmable gate array)、特定用途集積回路(ASIC:application specific integrated circuit)またはデジタル・シグナル・プロセッサ(DSP:digital signal processor)のうち1つ以上を含み得る(図示せず)。CPU102は、例えば、コンピューティングシステム100の動作を制御する、オペレーティングシステム108、KMD110、SWS112およびアプリケーション111を含む制御ロジックを実行する。この例示的な実施形態において、CPU102は、1つの実施形態によれば、アプリケーション111の実行の起動および制御を、例えばそのアプリケーションに関連する処理をCPU102とAPD104等の他の処理リソースとの間に分散させることにより行う。
【0024】
APD104は、とりわけ、グラフィックス演算や、例えば特に並列処理に好適となり得る他の演算等の、選択された機能のためのコマンドおよびプログラムを実行する。一般に、APD104は、ピクセル処理、幾何学演算およびディスプレイに対する画像のレンダリング等のグラフィックスパイプライン処理を実行するために、しばしば用いられ得る。本発明の様々な実施形態において、APD104は、CPU102から受信したコマンドまたは命令に基づいて、計算処理演算(例えば、ビデオ演算、ビデオ演算、物理シミュレーション、計算流体力学その他等の、グラフィックスに関連しない演算)も実行し得る。
【0025】
例えば、コマンドは、命令セットアーキテクチャ(ISA:instruction set architecture)において通常定義されない特殊な命令であるとみなすことができる。コマンドは、例えばディスパッチプロセッサ、コマンドプロセッサまたはネットワークコントローラ等の特殊なプロセッサにより実行され得る。一方、命令は、例えばコンピュータアーキテクチャ内のプロセッサの単一の演算であるとみなされ得る。1つの例において、2セットのISAが用いられる場合には、いくつかの命令は、x86プログラムを実行するために用いられ、いくつかの命令は、APD計算ユニット上でカーネルを実行するために用いられる。
【0026】
例示的な実施形態において、CPU102は、選択されたコマンドをAPD104に伝達する。これらの選択されたコマンドは、並列実行に適したグラフィックスコマンドと、並列実行に適した他のコマンドとを含み得る。計算処理コマンドを含み得るこれらの選択されたコマンドは、実質的にCPU102から独立して実行され得る。
【0027】
APD104は、例えば1つ以上のSIMD処理コア等ではあるがこれに制限されない、自身の計算ユニット(図示せず)を含み得る。本明細書で参照されるSIMDは、パイプライン、すなわち、それぞれが自身のデータおよび共有プログラムカウンタを有する複数の処理エレメント上でカーネルが同時に実行されるプログラミングモデルである。全ての処理エレメントは、同一の1組の命令を実行する。プレディケーションを用いることにより、発行された各コマンドに対して、ワークアイテムを関与させることまたはさせないことが可能となる。
【0028】
1つの例において、各APD104計算ユニットは、1つ以上のスカラーおよび/またはベクトル浮動小数点演算ユニットおよび/または算術論理ユニット(ALU:arithmetic and logic unit)を含み得る。APD計算ユニットは、逆平方根ユニットおよびサイン/コサインユニット等の特殊用途処理ユニット(図示せず)も含み得る。1つの例において、APD計算ユニットは、本明細書においてシェーダコア122と総称される。
【0029】
1つ以上のSIMDが存在することにより、一般に、APD104は、グラフィックス処理において一般的なデータ並列タスク等のデータ並列タスクの実行に、理想的に好適なものとなる。
【0030】
ピクセル処理等のいくつかのグラフィックスパイプライン処理と、他の並列演算処理とは、同一のコマンドストリームまたは計算カーネルが、ストリームまたは入力データ要素の集合体上で実行されることを要求する。同一の計算カーネルのそれぞれのインスタンス化は、上記データ要素を並列に処理するために、シェーダコア122の複数の計算ユニット上で同時に実行され得る。本明細書で参照されるように、例えば計算カーネルは、プログラム上で宣言され、APD計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。
【0031】
1つの例示的な実施形態において、各計算ユニット(例えばSIMD処理コア)は、入力されるデータを処理するために、特定ワークアイテムのそれぞれのインスタンス化を実行し得る。ワークアイテムは、コマンドによりデバイス上で呼び出されるカーネルの並列実行の集合体のうちの1つである。ワークアイテムは、計算ユニット上で実行されるワークグループの一部として、1つ以上の処理エレメントにより実行され得る。
【0032】
ワークアイテムは、自身のグローバルIDおよびローカルIDによって、集合体内の他の実行から区別される。1つの例において、ワークグループにおいて1つのSIMDで同時に実行されるワークアイテムの一部は、ウェーブフロント136と称され得る。ウェーブフロントの幅は、計算ユニット(例えば、SIMD処理コア)のハードウェアの特性である。本明細書で参照されるワークグループは、単一の計算ユニット上で実行される関連するワークアイテムの集合体である。ワークグループ内のワークアイテムは、同一のカーネルを実行し、ローカルメモリおよびワークグループバリアを共有する。
【0033】
代表的な実施形態において、1つのワークグループからの全てのウェーブフロントは、同一のSIMD処理コアで処理される。ウェーブフロントにわたる命令は1つずつ発行され、全てのワークアイテムが同一の制御フローに従う場合には、各ワークアイテムは、同一のプログラムを実行する。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。
【0034】
実行マスクおよびワークアイテムプレディケーションは、ウェーブフロントにおける拡散的な制御フローを可能にするために用いられる。なお、拡散的な制御フローでは、個別のワークアイテムは、カーネルを通る一意的なコードパスを実際に取り得る。部分的に占められたウェーブフロントは、ワークアイテムの全てのセットがウェーブフロント開始時に必ずしも利用可能とは限らない場合に、処理され得る。例えば、シェーダコア122は、所定数のウェーブフロント136を同時に実行し得る。なお、各ウェーブフロント136は、複数のワークアイテムを含む。
【0035】
システム100において、APD104は、グラフィックスメモリ130等の自身のメモリを含む(なお、メモリ130は、グラフィックス専用に制限されるとは限らない)。グラフィックスメモリ130は、APD104における計算実行の間の使用のために、ローカルメモリを提供する。シェーダコア122内の個々の計算ユニット(図示せず)は、自身のローカルデータ記憶装置(図示せず)を有し得る。1つの実施形態において、APD104は、ローカルグラフィックスメモリ130へのアクセス、ならびにメモリ106へのアクセスを含む。他の実施形態において、APD104は、ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)、または、APD104には直接的に接続されているがメモリ106からは分離している他のメモリ(図示せず)へのアクセスを含み得る。
【0036】
図示の例において、APD104は、1つまたは「n」個のコマンドプロセッサ(CP:command processor)124を含み得る。CP124は、APD104内の処理を制御する。CP124は、実行されるべきコマンドを、メモリ106内のコマンドバッファ125から取得し、APD104でのこれらのコマンドの実行を調整する。
【0037】
1つの例において、CPU102は、アプリケーション111に基づくコマンドを、適切なコマンドバッファ125に入力する。本明細書において参照されるように、アプリケーションは、CPU内またはAPD内の計算ユニット上で実行されるプログラム部分の組合せである。
【0038】
複数のコマンドバッファ125は、各プロセスがAPD104での実行のためにスケジュールされた状態で、保持され得る。
【0039】
CP124は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組合せにおいて実装され得る。1つの実施形態において、CP124は、スケジューリングロジックを含むロジックを実装するためのマイクロコードを有する縮小命令セットコンピュータ(RISC:reduced instruction set computer)エンジンとして実装される。
【0040】
APD104は、1つまたは「n」個のディスパッチコントローラ(DC:dispatch controller)126を含み得る。本願において、ディスパッチという用語は、1セットの計算ユニット上の1セットのワークグループに対するカーネルの実行のスタートを起動するために、コンテキスト状態を使用するディスパッチコントローラにより実行されるコマンドを指す。DC126は、シェーダコア122内でワークグループを起動するためのロジックを含む。いくつかの実施形態において、DC126は、CP124の一部として実装され得る。
【0041】
システム100は、APD104上で実行するためのプロセスを実行リスト150から選択するためのハードウェアスケジューラ(HWS:hardware scheduler)128を含む。HWS128は、ラウンドロビン方式、優先レベルを用いて、または他のスケジューリングポリシーに基づいて、プロセスを実行リスト150から選択し得る。優先レベルは、例えば、動的に決定され得る。HWS128は、例えば、新規のプロセスを追加することによって、あるいは既存のプロセスを実行リスト150から削除することによって、実行リスト150を管理する機能を含み得る。HWS128の実行リスト管理ロジックは、実行リストコントローラ(RLC:run list controller)と称されることもある。
【0042】
本発明の様々な実施形態において、HWS128が、RLC150からプロセスの実行を開始すると、CP124は、対応するコマンドバッファ125からのコマンドの取得および実行を開始する。いくつかの事例において、CP124は、CPU102から受信したコマンドに対応する、APD104内で実行される1つ以上のコマンドを生成し得る。1つの実施形態において、CP124は、APD104および/またはシステム100のリソースの利用が改善または最大化されるように、APD104におけるコマンドの優先化およびスケジューリングを、他のコンポーネントとともに実装する。
【0043】
APD104は、インタラプトジェネレータ146に対してアクセスを有するか、またはインタラプトジェネレータ146を含み得る。インタラプトジェネレータ146は、APD104がページフォールト等のインタラプトイベントに遭遇すると、APD104によってオペレーティングシステム108にインタラプトをかけるよう構成され得る。例えば、APD104は、IOMMU116内のインタラプト生成ロジックに依存して、上述のページフォールトインタラプトを生成し得る。
【0044】
APD104は、シェーダコア122内で現在実行中のプロセスを切り替えるためのプリエンプションおよびコンテキストスイッチロジック120を含み得る。コンテキストスイッチロジック120は、例えばプロセスを停止させ、その現在状態(例えばシェーダコア122状態およびCP124状態)を保存する機能を含む。
【0045】
本明細書において参照される状態という用語は、初期状態、中間状態および/または最終状態を含み得る。初期状態は、機械がプログラム順序に従って入力データセットを処理することによって、データの出力セットを生成する開始点である。例えば、処理を前進させるためにいくつかのポイントにおいて記憶される必要がある中間状態が存在する。この中間状態は、他のプロセスによってインタラプトがかけられた場合に、後に実行を継続することを可能にするために記憶される場合もある。出力データセットの一部として記録され得る最終状態も存在する。
【0046】
プリエンプションおよびコンテキストスイッチロジック120は、他のプロセスを、APD104にコンテキストスイッチするためのロジックを含み得る。他のプロセスをAPD104で実行するようにコンテキストスイッチするための機能は、APD104上で実行するために、例えばCP124およびDC126によってプロセスをインスタンス化することと、当該プロセスに対して以前に保存された状態を復元することと、当該プロセスの実行を開始することと、を含み得る。
【0047】
メモリ106は、DRAM(図示せず)等の非永続型メモリを含み得る。メモリ106は、例えば、アプリケーションまたは他の処理ロジックの部分を実行する間に、処理ロジック命令、定数および様々な変数を記憶し得る。例えば、1つの実施形態において、CPU102上で1つ以上の演算を実行するための制御ロジックの部分は、CPU102によって演算のそれぞれの部分が実行される間、メモリ106内に常駐し得る。
【0048】
実行中、個別のアプリケーション、オペレーティングシステム関数、処理ロジックコマンドおよびシステムソフトウェアは、メモリ106に常駐し得る。オペレーティングシステム108に対して必須である制御ロジックコマンドは、一般に、実行中にはメモリ106に常駐することとなるであろう。他のソフトウェアコマンド、例えばKMD110およびソフトウェアスケジューラ112は、システム100の実行中にはメモリ106に常駐し得る。
【0049】
この例において、メモリ106は、コマンドをAPD104に送るために、CPU102によって用いられるコマンドバッファ125を含む。メモリ106は、プロセスリストおよびプロセス情報(例えば、アクティブリスト152およびプロセス制御ブロック154)を含み得る。これらのリストおよび情報は、スケジュール情報を、APD104および/または関連するスケジューリングハードウェアに伝えるために、CPU102上で実行されるスケジューリングソフトウェアによって使用される。メモリ106に対するアクセスは、メモリ106に接続されたメモリコントローラ140によって管理され得る。例えば、メモリ106に対する読み出しおよび書き込みを実行するための、CPU102または他のデバイスからの要求は、メモリコントローラ140によって管理される。
【0050】
システム100の他の態様に戻ると、IOMMU116は、マルチコンテキスト・メモリ管理ユニットである。
【0051】
本明細書で用いられるコンテキストという用語は、カーネルが実行される環境であって、同期およびメモリ管理が定義されるドメインであるとみなされる。コンテキストは、1セットのデバイスと、これらのデバイスに対してアクセス可能であるメモリと、対応するメモリ特性と、メモリオブジェクトにおけるカーネル(単数または複数)または演算の実行をスケジュールするために用いられる1つ以上のコマンドキューとを含む。
【0052】
図1Aにおいて示される例に戻ると、IOMMU116は、APD104を含むデバイスに対するメモリページアクセスに対して、仮想アドレスから物理アドレスへの変換を実行するためのロジックを含む。IOMMU116は、例えば、APD104等のデバイスによるページアクセスの結果としてページフォールトが生じる場合に、インタラプトを生成するためのロジックを含み得る。IOMMU116は、トランスレーションルックアサイドバッファ(TLB:translation lookaside buffer)118を含むか、あるいはTLB118に対するアクセスを有し得る。TLB118は、1つの例として、メモリ106内のデータ用にAPD104によりなされた要求に対して、論理(すなわち仮想)メモリアドレスから物理メモリアドレスへの変換を高速化するために、コンテントアドレサブルメモリ(CAM:content addressable memory)に実装され得る。
【0053】
示された例において、通信インフラストラクチャ109は、必要に応じてシステム100のコンポーネントを相互接続する。通信インフラストラクチャ109は、周辺構成要素相互接続(PCI)バス、拡張PCI(PCI−E)バス、アドバンスト・マイクロコントローラ・バス・アーキテクチャ(AMBA)バス、アドバンスト・グラフィックス・ポート(AGP)または他の通信インフラストラクチャのうち1つ以上を含み得る(図示せず)。通信インフラストラクチャ109は、イーサネット(登録商標)若しくは同様のネットワークまたはアプリケーションの転送速度要求を満足する任意の好適な物理的通信インフラストラクチャを含み得る。通信インフラストラクチャ109は、コンピューティングシステム100のコンポーネントを含むコンポーネントを相互接続するための機能を含む。
【0054】
この例において、オペレーティングシステム108は、システム100のハードウェアコンポーネントを管理する機能と、共通サービスを提供するための機能とを含む。様々な実施形態において、オペレーティングシステム108は、CPU102上で実行し、共通サービスを提供する。これらの共通サービスは、例えば、CPU102内での実行のためにアプリケーションをスケジューリングすることと、フォールト管理と、インタラプトサービスと、他のアプリケーションの入力および出力を処理することと、を含む。
【0055】
いくつかの実施形態において、オペレーティングシステム108は、例えばインタラプトコントローラ148等のインタラプトコントローラによって生成されたインタラプトに基づいて、適切なインタラプトハンドリングルーチンを呼び出す。例えば、オペレーティングシステム108は、ページフォールト・インタラプトを検出すると、関連するページをメモリ106にロードし始め、且つ、対応するページテーブルを更新するために、インタラプトハンドラを呼び出す。
【0056】
オペレーティングシステム108は、オペレーティングシステムにより管理されるカーネル機能を通して、ハードウェア部品に対するアクセスが仲介されることを確保することによって、システム100を保護する機能を含み得る。事実、オペレーティングシステム108は、アプリケーション111等のアプリケーションが、CPU102上でユーザスペースにおいて実行されることを確保する。オペレーティングシステム108は、アプリケーション111が、ハードウェアにアクセスするためにオペレーティングシステムにより提供されるカーネル機能および/または入出力機能を呼び出すことも確保する。
【0057】
例として、アプリケーション111は、CPU102上でも実行されるユーザ計算を実行するための様々なプログラムまたはコマンドを含む。CPU102は、選択されたコマンドを、APD104上で処理するためにシームレスに送信し得る。
【0058】
1つの例において、KMD110は、CPU102、CPU102上で実行されるアプリケーションまたは他のロジックが、APD104の機能を呼び出し得るアプリケーションプログラミングインタフェース(API)を実装する。例えば、KMD110は、CPU102からのコマンドを、コマンドバッファ125に加え(エンキューし)得る。なお、APD104は、このコマンドバッファ125からコマンドを続けて取得することとなる。加えて、KMD110は、APD104上で実行されるプロセスのスケジューリングを、SWS112とともに実行する。SWS112は、例えば、APD上で実行されるプロセスの優先度リストを保持するためのロジックを含み得る。
【0059】
本発明の他の実施形態において、CPU102上で実行するアプリケーションは、コマンドをエンキューするときに、KMD110を完全にバイパスし得る。
【0060】
いくつかの実施形態において、SWS112は、APD104上で実行されるプロセスのアクティブリスト152を、メモリ106に保持する。SWS112は、アクティブリスト152におけるプロセスのうち、ハードウェアのHWS128により管理される一部を選択する。各プロセスをAPD104上で実行することに関する情報は、CPU102からプロセス制御ブロック(PCB:process control block)154を通して、APD104に伝えられる。
【0061】
アプリケーション、オペレーティングシステムおよびシステムソフトウェアのための処理ロジックは、マスクワーク/フォトマスクの生成を通して最終的に製造プロセスを構成することで、本明細書において説明される本発明の態様を具体化するハードウェア装置を生成することを可能にするための、例えば、C言語等のプログラム言語および/またはVerilog、RTL等のハードウェア記述言語もしくはネットリストにおいて指定されるコマンドを含み得る。
【0062】
当業者は、コンピューティングシステム100が、
図1Aにおいて示されるコンポーネントよりも多数または少数のコンポーネントを含み得ることを、本明細書を読むことで理解するであろう。例えば、コンピューティングシステム100は、1つ以上の入力インターフェースと、不揮発性ストレージと、1つ以上の出力インターフェースと、ネットワークインターフェースと、1つ以上のディスプレイまたはディスプレイインターフェースと、を含み得る。
【0063】
図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も提供される。
【0064】
図1Bにおいて、グラフィックスパイプライン162は、本明細書において順序化パイプライン164と称される、1セットのブロックを含み得る。例えば、順序化パイプライン164は、頂点グループ変換器(VGT:vertex group translator)164aと、プリミティブアセンブラ(PA:primitive assembler)164bと、スキャンコンバータ(SC:scan converter)164cと、シェーダエクスポート・レンダーバック・ユニット(SX/RB:shader−export,render−back unit)176とを含む。順序化パイプライン164内の各ブロックは、グラフィックスパイプライン162内の異なる段階のグラフィックス処理を表し得る。順序化パイプライン164は、固定機能ハードウェアパイプラインであり得る。
【0065】
本発明の精神および範囲に含まれ得る他の実装を用いることも可能である。わずかな量のデータが、入力としてグラフィックスパイプライン162に提供されるが、このデータは、グラフィックスパイプライン162からの出力として提供されるときまで増幅されることとなるであろう。グラフィックスパイプライン162は、CPパイプライン124aから受け取ったワークアイテムグループ内の範囲にわたってカウントするためのDC166も含む。DC166を通して提示された計算作業は、グラフィックスパイプライン162と準同期している。
【0066】
計算パイプライン160は、シェーダDC168,170を含む。DC168,170のそれぞれは、CPパイプライン124b,124cから受け取ったワークグループ内の計算範囲にわたってカウントするように構成されている。
【0067】
図1Bにおいて示されるDC166,168,170は、入力範囲を受け取り、入力範囲をワークグループに分割し、次いでこれらのワークグループをシェーダコア122に伝える。
【0068】
グラフィックスパイプライン162は、一般に固定機能パイプラインであるため、その状態を保存および復元することは困難であり、そのためグラフィックスパイプライン162は、コンテキストスイッチが困難である。したがって、ほとんどの場合、本明細書において論じられるコンテキストスイッチは、グラフィックス処理におけるコンテキストスイッチに関係しない。例外は、シェーダコア122におけるグラフィックス作業であり、これはコンテキストスイッチされ得る。
【0069】
グラフィックスパイプライン162のワーク処理が完了した後、完了したワークはレンダーバックユニット176を通して処理される。このレンダーバッククユニット176は、デプス計算およびカラー計算を行い、次いでその最終結果をメモリ130に書き込む。
【0070】
シェーダコア122は、グラフィックスパイプライン162および計算パイプライン160により共有され得る。シェーダコア122は、汎用プロセッサであり、ウェーブフロントを実行するように構成されている。
【0071】
1つの例において、計算パイプライン160内の全てのワークは、シェーダコア122内で処理される。シェーダコア122は、プログラム可能なソフトウェアコードを実行し、多様な形態のデータ(例えば、状態データ)を含む。
【0072】
図2は、ワークロードが、CPUおよびAPD処理デバイスでの処理のためにバランスが取られ、且つ、再分配されるキューイングシステム200の例示的なブロック図である。キューイングシステム200は、キュー202と、タスク204と、セマフォブロック206と、(本明細書に記載された)CP124と、1つ以上のSIMDスケジューラ208と、シェーダコア122と、CPU同期化モジュール210と、CPUデキューイングモジュール212と、CPUコア214とを備える。
【0073】
CPU102は、本明細書に記載したように、1つ以上のCPUコア214を含む、各CPUコア214は、CPU102内でコンピュータの命令およびデータを処理する。
【0074】
キュー202は、システムメモリ106から割り当てられたメモリのセグメントである。先入れ先出方式(FIFO)の原則により、キューが作動する。すなわち、キューに最初に加えられる(エンキューされる)ワークロードは、キューから最初に取り出される(デキューされる)ワークロードである。さらに、当業者は、特定のキューデータ構造の説明は、例示として示され、限定するものではなく、他のメモリ記憶データ構造を使用してもよいことを認識するであろう。
【0075】
キュー202は、パブリックキューである。パブシックキューは、例えばCPU102およびAPD104などの処理デバイスにアクセスすることができる。キュー202は、FIFOの原則によりキュー202に加えられ、且つ、取り出される複数のタスク204を記憶する。タスク204は、独立したジョブ(job)であり、APD104またはCPU102での処理のためにスケジュールされたオペレーティングシステム命令、アプリケーション、命令、イメージおよびデータを含む。ジョブは、グレイン(grain)に基づいてタスク204へ分割される。グレインは、タスク204のサイズを表す。このグレインのサイズは、APD104およびCPU102プロセッサにスケジュールされるタスク204によって異なる。例えば、CPU102上で処理されるタスク204のグレインの大きさは、一般的に、APD104上で処理されるタスク204のグレインの大きさよりも小さい。
【0076】
タスク204は、情報の命令および/または処理を必要とするデータへのポインタを保持するデータ構造を含む。例えば、タスク204の情報を保持するデータ構造は、MyTask構造体(Mytask structure)として定義することができる。限定するものではないが、例において、MyTask構造体は、以下のパラメータを含む。
struct MyTask {
MyPtr myCodePtr
myCPUCodePtr : pointer to code (x86 binary format)
myAPDCodePtr :
//Pointer to code (shader binary format)
MyPtr myDataPtr :
myExecRange:
//Global grid dimensions
//Local grid dimensions
myArgSize
myArgs {(variable size)}
MyNotification
//Pointer to notification mechanism
MyAffinity
//processing preference
}
【0077】
MyTask構造体は、システムメモリ106または別のメモリデバイスに記憶された、コンパイルされたCPUコードおよびAPDマイクロコードへのポインタを含む。上記の例において、MyPtr myCodePtrは、myAPDCodePtrとしてCP124で実行されるマイクロコードに対して、およびmyCPUCodePtrとしてCPU102で実行される、コンパイルされたソースコードに対して、ポインタを定義する。myAPDCodePtrは、シェーダコア122が、タスク204内のデータを実行するために使用する機能を含むマイクロコードをポイントする。例えば、タスク204がAPDにて実行される場合には、APD104は、myAPDCodePtrにアドレスが記憶されている機能にアクセスする。タスク204がCPU102にて実行される場合には、CPU102は、myCPUCodePtrにアドレスが記憶されている機能にアクセスする。一実施形態において、myCodePtrは、所定のイベントの後に実行可能となる従属情報を含む中間言語表現をもポイントする。
【0078】
上記の例において、MyTask構造体は、MyPtr myDataPtrを含む。myDataPtrは、タスク204が処理する必要のあるシステムメモリ106内のデータの位置に対するポインタである。同様に、myDataPtrは、タスク204のデータに関連する情報を含むパラメータを含む。例えば、パラメータmyArgsは、引数のリストを含み、myArgSizeは引数の数を含み、myExecRangeはデータグリッドの次元を含む。
【0079】
本発明の実施形態において、MyTask構造体は、MyAffinityパラメータを含む。MyAffinityの値は、タスク204を実行する処理デバイスを決定する。例えば、MyAffinityの値は、例えばCPU102またはAPD104などの処理デバイスの優先度、要求、ヒントなどを示す。
【0080】
当業者は、MyTaskなどのデータ構造体が、他のパラメータを同様に含むことを理解し得るであろう。
【0081】
CPUデキューイングモジュール212およびCP124は、デキューイング実体として機能する。デキューイング実体は、処理デバイスで処理するためのタスクを、キュー202から取り出し(デキューし)または移動させる。
【0082】
CPUデキューイングモジュール212は、キュー202にアクセスし、CPU202で処理するためのタスク204を取り出すソフトウェアモジュールである。一実施形態において、CPUデキューイングモジュール212は、CPU102が処理を行うためにタスク204を必要とする場合に、APD104に関連するキュー202からタスクを取り出す。例えば、CPU102に関連するキュー202が空であるが、APD104に関連するキュー202が、処理を必要とするタスク204を記憶している場合である。
【0083】
典型的には、CPUデキューイングモジュール212は、FIFOの原則を用いてタスク204を取得する。CPUデキューイングモジュール212は、タスク204を取り出す前に、MyAffinityパラメータにアクセスし、タスク204がCPU102での処理に適するか否かを決定する。例えば、CPUデキューイングモジュール212は、MyAffinityパラメータが要求としてAPD104での処理にセットされていないタスク204を、キューから取り出す。別の実施形態において、CPUデキューイングモジュール212は、MyAffinityパラメータが優先度としてAPD104での処理にセットされていないタスク204を、キューから取り出す。典型的には、並列プロセッサによって実行可能な複雑な数学的処理を含むタスク204は、優先度または要求として、APD104処理にセットされたMyAffinityパラメータを有することができる。
【0084】
マルチCPUコア214環境において、CPUデキューイングモジュール212は、特定のCPUコア214に対応する。
【0085】
CP124は、キュー202にアクセスし、APDで処理するタスク204を取り出す。CP124は、APD104で処理するためのキュー202からタスク204を取り出すハードウェアモジュールである。CPUデキューイングモジュール212と同様に、CP124は、APD104に関連するキュー202が空であるが、CPU102に関連するキュー202が、処理を必要とするタスク204を記憶している場合には、CPU102に関連するキュー202からタスク204を取り出すことができる。
【0086】
CP124は、FIFOの原則に従ってタスク204を取得する。CP124は、タスク204を取り出す前に、MyAffinityパラメータを用いて、タスク204がAPD104の処理に適するか否かを決定する。例えば、CP124は、MyAffinityパラメータが要求としてCPU102での処理にセットされていないタスク204を、キューから取り出す。別の例において、CP124は、MyAffinityパラメータが優先度としてCPU102での処理にセットされていないタスク204を、キューから取り出す。典型的には、分岐コード(branch−like code)を含むタスク204は、優先度または要求として、CPU102処理にセットされたMyAffinityパラメータを有することができる。
【0087】
CP124は、タスク204を取り出した後に、1つ以上のシェーダパイプ補間器(SPI:shader pipe interpolator)208へタスク204を転送する。SPI208は、シェーダコア122での処理用のタスク204を準備する。一実施形態において、SPI208は、タスク204の処理に必要とされる作業アイテムおよびシェーダコア122の数を決定する。
【0088】
CPUデキューイングモジュール212およびCP124は、キュー202からタスク204を取り出す前に、同期される。同期は、タスク204が取り出されるときに、キュー202に対しての連続的かつ独占的なアクセスを保証するものである。CPU同期化モジュール210は、CPUデキューイングモジュール212がキュー202からタスク204を取り出す前に、キュー202およびAPD104と、CPUデキューイングモジュール212とを同期する。CPU同期化モジュール210は、CPUデキューイングモジュール212が、CPU102での処理のためのタスク204を取り出そうと試みる場合に、CPUデキューイングモジュール212がキュー202に対して単一のアクセスを有することを保証する。
【0089】
CPU同期化モジュール210は、不可分操作(atomic operation)を用いて、CPUデキューイングモジュール212が、キュー202に対して独占的なアクセスを有することを保証する。不可分操作は、あるメモリ位置にアクセスするプロセスまたはハードウェアが当該アクセスを完了するまで、別のプロセスまたはハードウェアが当該メモリ位置に対する読み込みまたは書き込みを実行することを防ぐことを、当業者は理解するであろう。
【0090】
セマフォブロック206は、APD104での処理のためのタスク204を取り出す前に、キュー202およびCPU102と、CP124とを同期する。また、セマフォブロック206は、CP124のキュー202に対する独占的なアクセスを保証する。1つの実施形態において、セマフォブロック206は、不可分操作を用いて、CP124が、キュー202に対して独占的なアクセスを有することを保証する。別の実施形態において、セマフォブロック206は、イベント通知メカニズムを用いて、キュー202に対する独占的なアクセスを保証する。イベント通知メカニズムは、プロセスまたはハードウェアデバイスに対して、特定のメモリ位置が別のプロセスまたはハードウェアデバイスによってアクセスされているのを通知することを、当業者は理解するであろう。
【0091】
APD104およびCPU102は、キュー202から異なる数のタスク204を取得する。当業者は、APD104が多くのタスク204を並行して処理することができるため、より多くのタスク204を取得することを理解するであろう。結果として、CP124およびCPUデキューイングモジュール212がキュー202からタスク204を取得する場合、各デキューイングデバイスがキュー202から取り出すタスク204の数は、処理を要求するのがAPD104であるかCPU102であるかに依存する。
【0092】
個々のプロセッサ環境において、セマフォブロック216は、キュー202を直接同期できず、追加的な構成要素を必要とする。
図3は、分散処理環境においてワークロードを再分配するキューイングシステムのブロック図である。本明細書に記載した構成要素に加えて、分散システム環境におけるAPD104は、APDドライバモジュール302と、APDデキューイングモジュール304とを含み、キュー202からタスク204を取り出す。APDドライバモジュール302は、APD104にて総合的な実行を制御するソフトウェアモジュールである。APDデキューイングモジュール302は、キュー202からタスク204を取得するソフトウェアベースのモジュールである。
【0093】
APD104がワークを要求すると、セマフォブロック206は、APDドライバモジュール302と通信する。APDドライバモジュール302は、APDデキューイングモジュール304と通信する。APDデキューイングモジュール304は、キュー202からタスク204を取り出し、タスク204をCP124に送る。
【0094】
図4は、CPU102およびAPD104と通信する複数のキュー202を含むオペレーティング環境のブロック図である。
【0095】
各キュー202は、複数のCPU102およびAPD104と通信することができるが、キュー202は、特定のCPU102、特定のCPUコア214または特定のAPD104のタスクを、最初に記憶することができる。
【0096】
CP124は、CPU102に関連する複数のキュー202からタスク204を取り出すことができ、本明細書に記載したように、処理するためのAPD104に対してタスク204を転送することができる。同様に、CPUデキューイングモジュール212は、本明細書に記載したように、CPU102で処理するためのAPD104に関連する複数のキュー202から、タスク204を取り出すことができる。
【0097】
図5は、キュー202からタスク204を取り出すCP124の例示的な実施形態のフローチャート500である。
【0098】
動作502では、APD104は、処理を必要とするタスク204を要求する。
【0099】
動作504では、CP124は、キュー202にアクセスする。
【0100】
動作506では、CP124は、処理を必要とし、且つ、APD104で処理されることができるタスク204を識別する。例えば、CP124は、タスク204のMyAffinityパラメータの値を識別する。一実施形態において、CP124は、キュー202から取り出されるようにスケジュールされたタスク204のMyAffinityパラメータを識別する。CP124がタスク204を識別した場合には、フローチャートは、動作508に進む。そうでない場合には、フローチャート500は終了する。
【0101】
動作508では、セマフォブロック206は、キュー202およびCPU同期化モジュール210を同期する。
【0102】
動作510では、CP124は、キュー202からタスク204を取り出す。
【0103】
動作512では、CP124は、SPI208へタスク204を送る。
【0104】
動作514では、SPI208は、シェーダコア122でのタスク204の処理に必要なリソースを決定する。
【0105】
動作516において、タスク204は、シェーダコア122上で処理される。
【0106】
図6は、キュー202からタスク204を取り出すAPDデキューイングモジュール210の例示的実施形態のフローチャート600である。
【0107】
動作602において、CPU102は、キュー202からタスク204を要求する。
【0108】
動作604において、CPUデキューイングモジュール212は、処理を必要とし、且つ、CPU102で処理することができるタスク204を識別する。例えば、CP124は、タスク204のMyAffinityパラメータの値を識別する。一実施形態において、CP124は、キュー202から取り出されるようにスケジュールされたタスク204のMyAffinityパラメータを識別する。CPUデキューイングモジュール212がタスク204を識別した場合には、フローチャートは動作606に進み、識別しなかった場合には、フローチャートは終了する。
【0109】
動作606において、CPU同期化モジュール212は、キュー202およびAPD104を同期する。その結果、CPUデキューイングモジュール212のみが、キュー202に対するアクセスを有するようになる。
【0110】
動作608において、CPUデキューイングモジュール212は、本明細書に記載したように、キュー202からタスク204を取り出し、CPU102で処理するためのタスク204を送る。
【0111】
動作610において、CPU102は、タスク204を処理する。
【0112】
図7は、分散環境においてAPD104上の処理のためのキュー202からタスク204を除去するAPDデキューイングモジュールの例示的な実施形態のフローチャート700である。
【0113】
動作702において、APD104は、動作502に記載したように、処理を必要とするタスク204を要求する。
【0114】
動作706において、APD104は、タスク204用の要求を、APDドライバモジュール302に送る。
【0115】
動作708において、APDドライバモジュール302は、APDデキューイングモジュール304に対して、当該要求を送る。
【0116】
動作710において、APDデキューイングモジュール304は、処理を必要とし、且つ、動作506に記載したようにAPD104で処理できるタスクを識別する。
【0117】
動作712において、セマフォブロック206は、動作508に記載したように、キュー202およびCPU同期化モジュール210を同期する。
【0118】
動作714において、APDデキューイングモジュール304は、動作510に記載したように、APD104で処理するためのタスク204をキューから取り出し、当該タスク204をAPDドライバモジュール302に送る。
【0119】
動作716において、APDドライバモジュール302は、タスク204をAPD104に送り、タスク204は、動作508〜512に記載したように処理される。
【0120】
本発明の様々な実施態様は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせにより実行することができる。例えば、
図5の500、
図6の600、
図7の700のフローチャートにより例示される方法は、
図1の統一されたコンピューティングシステム100において実行することができる。本発明の様々な実施態様は、この例の統一されたコンピューティングシステム100の用語において記述される。他のコンピューティングシステムおよび/またはコンピュータアーキテクチャを用いて本発明を実行する方法は、当業者にとって明らかである。
【0121】
本テキストにおいて、用語「コンピュータプログラム媒体」および「コンピュータ使用可能媒体」は、一般的に、着脱可能な記憶ユニットまたはハードディスクドライブなどの媒体を意味して使用される。コンピュータプログラム媒体およびコンピュータ使用可能媒体は、同様に、システムメモリ106およびグラフィックメモリ130などのメモリをも意味し、メモリ半導体(例えば、DRAMなど)であってもよい。これらのコンピュータプログラム製品は、統一されたコンピューティングシステム100に対してソフトウェアを提供する意味を有する。
【0122】
本発明は、同様に、いずれかのコンピュータ使用可能媒体に記憶されるソフトウェアを含むコンピュータプログラム製品を対象とする。上記ソフトウェアは、1つ以上のデータ処理デバイスにて実行されると、当該データ処理デバイスを、本明細書に記載したように動作させるか、あるいは、上述したように、本明細書に記載した本発明の実施形態を実施するために、コンピューティングデバイス(例えば、ASICまたはプロセッサなど)の合成/製造を可能にする。本発明の実施形態は、現在または将来知られる、いずれかのコンピュータ使用可能または可読媒体を使用する。コンピュータ使用可能媒体の例は、限定するものではないが、一次記憶装置デバイス(例えば、いずれかの種類のランダムアクセスメモリ)、二次記憶装置デバイス(例えば、ハードドライブ、フロッピー(登録商標)ディスク、CDROM、ZIPディスク、テープ、磁性記憶デバイス、光学記憶デバイス、MEMS、ナノテクノロジー記憶デバイスなど)および通信媒体(例えば、有線およびワイヤレスネットワーク、ローカルエリアネットワーク、広域ネットワーク、イントラネットなど)を含む。
【0123】
本発明の様々な実施形態が上述したように説明されており、限定するものではないが、例のみの方法により表されることが理解されるべきである。添付された請求項に定義される本発明の趣旨および範囲から逸脱することなく、形態および詳細における多様な変化が作成されることは、関連する当業者に理解されるものである。本発明は、これらの例に限定されるものではない。本発明は、本明細書に記載したようにいずれかの構成要素の作動に適用可能である。したがって、本発明の範囲は、上述の代表的な実施形態のいずれよっても限定されるものではなく、以下の特許請求項およびそれらの均等物にしたがって定められるべきである。