(57)【要約】異種の処理デバイスにおいてワークロードのバランスをとるための方法、システムおよび製品である。本方法は、ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスするステップと、別の種類のプロセッサによって処理可能なタスクを、記憶装置内の複数のタスクから識別するステップと、記憶装置にアクセス可能な複数のデキューイング実体を同期するステップと、記憶装置からタスクを取り出すステップと、を含む。【選択図】図１Ａ
2014508982.tif 000002
【特許請求の範囲】
【請求項１】
異種の処理デバイスにおいてワークロードのバランスをとるための方法であって、
ある種類のプロセッサの記憶装置に対して、別の種類のプロセッサに関連するデキューイング実体がアクセスするステップと、
前記別の種類のプロセッサによって処理可能なタスクを、前記記憶装置内の複数のタスクから識別するステップと、
前記記憶装置にアクセス可能な複数のデキューイング実体を同期するステップと、
前記記憶装置から前記タスクを取り出すステップと、
を含む、方法。
【請求項２】
前記アクセスするステップは、前記別の種類のプロセッサからの要求に応じて行われる、
請求項１に記載の方法。
【請求項３】
前記プロセッサは、中央処置装置（ＣＰＵ）およびアクセラレーテッドプロセッシングデバイス（ＡＰＤ）を含む、
請求項１に記載の方法。
【請求項４】
前記ＡＰＤに関連する前記デキューイング実体は、ハードウェアデバイスである、
請求項３に記載の方法。
【請求項５】
前記ＣＰＵに関連する前記デキューイング実体は、ソフトウェアモジュールである、
請求項３に記載の方法。
【請求項６】
前記識別するステップは、タスクパラメータにアクセスするステップを含む、
請求項１に記載の方法。
【請求項７】
前記記憶装置はキューである、
請求項１に記載の方法。
【請求項８】
前記デキューイング実体が取り出すタスクの数は、前記プロセッサの種類に関連している、
請求項１に記載の方法。
【請求項９】
異種の処理デバイスにおいてワークロードのバランスをとるためのシステムであって、
複数のタスクを記憶するように構成されたある種類のプロセッサに関連する記憶装置と、
別の種類のプロセッサに関連するデキューイング実体であって、前記別の種類のプロセッサによって処理可能なタスクを、前記複数のタスクから識別するように構成されたデキューイング実体と、
前記デキューイング実体が前記タスクを前記記憶装置から取り出す場合に、前記複数のデキューイング実体を同期するように構成された同期化構成要素と、
を含む、システム。
【請求項１０】
前記アクセスは、前記別の種類のプロセッサからの要求に応じて行われる、
請求項９に記載のシステム。
【請求項１１】
前記プロセッサは、中央処理装置（ＣＰＵ）およびアクセラレーテッドプロセッシングデバイス（ＡＰＤ）を含む、
請求項９に記載のシステム。
【請求項１２】
前記ＡＰＤに関連するデキューイング実体は、ハードウェアデバイスである、
請求項９に記載のシステム。
【請求項１３】
前記識別は、タスクパラメータにアクセスすることを含む、
請求項９に記載のシステム。
【請求項１４】
前記記憶装置はキューである、
請求項９に記載のシステム。
【請求項１５】
前記デキューイング実体が取り出すタスクの数は、前記プロセッサの種類に関連している、
請求項９に記載のシステム。
【請求項１６】
コンピュータ可読媒体を含む製品であって、前記コンピュータ可読媒体に記憶される命令を有し、前記命令が処理デバイスにより実行されると、
ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスすることと、
前記別の種類のプロセッサによって処理可能なタスクを、前記記憶装置内の複数のタスクから識別することと、
前記記憶装置にアクセス可能な複数のデキューイング実体を同期することと、
前記記憶装置から前記タスクを取り出すことと、
を前記処理デバイスに行わせることにより、前記処理デバイスに、異種の処理デバイスにおいてワークロードのバランスをとらせる、
製品。
【請求項１７】
前記アクセスは、前記別の種類のプロセッサからの要求に応じて行われる、
請求項１６に記載の製品。
【請求項１８】
前記プロセッサは、中央処理装置（ＣＰＵ）およびアクセラレーテッドプロセッシングデバイス（ＡＰＤ）を含む、
請求項１６に記載の製品。
【請求項１９】
ＡＰＤに関連する前記デキューイング実体は、ハードウェアデバイスである、
請求項１６に記載の製品。
【請求項２０】
命令が記憶されたコンピュータ可読媒体であって、前記命令がコンピューティングデバイスにより実行されると、
キューの分析に応じて、ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスすることと、
前記別の種類のプロセッサによって処理可能なタスクを、前記記憶装置内の複数のタスクから識別することと、
前記記憶装置にアクセス可能な複数のデキューイング実体を同期することと、
前記記憶装置から前記タスクを取り出すことと、
を、前記コンピュータデバイスに実行させる、
コンピュータ可読媒体。
【請求項２１】
前記アクセスは、前記別の種類のプロセッサからの要求に応じて行われる、
請求項２０に記載のコンピュータ可読媒体。
【請求項２２】
前記プロセッサは、中央処理装置（ＣＰＵ）およびアクセラレーテッドプロセッシングデバイス（ＡＰＤ）を含む、
請求項２０に記載のコンピュータ可読媒体。
【請求項２３】
ＡＰＤに関連する前記デキューイング実体は、ハードウェアデバイスである、
請求項２０に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、コンピュータシステムを対象とする。さらに詳細には、本発明は、コンピュータシステム内のコンピュータ構成要素を統一するアーキテクチャを対象とする。
【背景技術】
【０００２】
グラフィックス処理ユニット（ＧＰＵ：ｇｒａｐｈｉｃｓ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）を一般的な演算に用いる要請は、ＧＰＵの単位電力および／またはコストあたりの能力が優れることから、最近ではより顕著となってきている。ＧＰＵの計算能力は、対応する中央処理装置（ＣＰＵ：ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）の計算能力の成長速度を超える速度で成長してきた。モバイルコンピューティング市場（例えば、ノートブック、モバイルスマートフォン、タブレット、その他）およびその必要な支援サーバ／企業システムの爆発的な成長と組み合わされたこの成長は、特定品質の所望のユーザ経験を提供するために用いられてきている。したがって、並列データの内容を有する作業負荷（ワークロード）を実行するためにＣＰＵとＧＰＵとを併用することはボリュームテクノロジとなりつつある。
【０００３】
しかし、ＧＰＵは、従来、主にグラフィックの高速化のために利用可能な制約されたプログラミング環境で動作する。これらの制約は、ＧＰＵが、ＣＰＵと同程度に豊かなプログラミングエコシステムを有さないという事実に起因するものである。したがって、ＧＰＵの使用は、主に、グラフィックスおよびビデオのアプリケーションプログラミングインターフェース（ＡＰＩ：ａｐｐｌｉｃａｔｉｏｎ  ｐｒｏｇｒａｍｍｉｎｇ  ｉｎｔｅｒｆａｃｅ）を処理することに既に順応した、２次元（２Ｄ）グラフィックスと、３次元（３Ｄ）グラフィックスと、少数の最先端マルチメディアアプリケーションとに限られていた。
【０００４】
マルチベンダにサポートされるＯｐｅｎＣＬ（登録商標）、ＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）、標準的なＡＰＩおよびサポート用ツールの出現とともに、従来の用途におけるＧＰＵの限界は、従来のグラフィックスを越えて拡張されてきている。ＯｐｅｎＣＬ（登録商標）およびＤｉｒｅｃｔＣｏｍｐｕｔｅ（登録商標）は将来性のあるスタートではあるが、大部分のプログラミングタスクに対して、ＣＰＵと同程度に流動的にＣＰＵとＧＰＵとの組合せが用いられることを可能にする環境およびエコシステムを作成するには、多数のハードルが残されている。
【０００５】
既存のコンピューティングシステムは、大抵、複数の処理装置を含む。例えば、いくつかのコンピューティングシステムは、ＣＰＵおよびＧＰＵの両方を、別個のチップ上（例えば、ＣＰＵはマザーボード上に、ＧＰＵはグラフィックカード上に配置され得る）または単一チップパッケージ上に有し得る。これらの構成の両方は、（ｉ）別個のメモリシステム、（ｉｉ）効率的なスケジューリング、（ｉｉｉ）プロセス間のサービス品質（ＱｏＳ）の保証を提供すること、（ｉｖ）プログラミングモデルおよび（ｖ）複数のターゲット命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）へのコンパイル、の全項目を、電力消費を最小化しながら満足することに関して顕著な問題点を依然として含む。
【０００６】
例えば、個別チップ構成においては、各プロセッサがメモリにアクセスするためには、システムアーキテクチャおよびソフトウェアアーキテクチャは、チップ間インターフェースを利用することを余儀なくされる。これらの外部インターフェース（例えばチップ間インターフェース）においては、異機プロセッサを協働させるために、メモリレイテンシおよび電力消費に弊害がもたらされる一方で、別個のメモリシステム（すなわち、別個のアドレス空間）およびドライバに管理される共有メモリにおいては、きめ細かな負荷軽減に対しては許容されないオーバーヘッドが生成されてしまうこととなる。
【０００７】
ＣＰＵおよびＧＰＵは、従来、異なるタスクを実行するにも関わらず、多くの種類の作業負荷（ワークロード）が、ＣＰＵまたはＧＰＵを使用して実行され得る。ＣＰＵまたはＧＰＵの何れかが自由である場合に、ワークロードをプロセッサ間で再分配することができれば、このコンピューティング環境が役立つ。
【０００８】
ワークロードは、処理の前に、多くの個別タスクに分割される。各タスクは、ＣＰＵまたはＧＰＵに関連するワークキューへ割り当てられる。従来のコンピューティング環境では、ＣＰＵおよびＧＰＵを含み、処理のためにタスクがＣＰＵまたはＧＰＵに一旦割り当てられると、別の種類の処理デバイスへのワーク再分配をすることができない。従来のシステムでは、ＣＰＵに、他のＣＰＵへのタスクの再分配をさせることが可能であり、このＧＰＵは、ワークを再分配する機能を有するものではない。また、このことは、ＧＰＵが自由である間ＣＰＵがビジーとなるために、またその逆のために、処理を妨げる。このバランスのとれていない処理は、特に、タスクが処理デバイスの何れかで処理される場合に、不十分であり、かつ、最適以下の性能になるという結果となる。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
したがって、ＣＰＵおよびＧＰＵの間で、タスクを再分配し、且つ、バランスをとることができるシステムおよび方法が求められている。
【課題を解決するための手段】
【００１０】
ＧＰＵと、アクセラレーテッドプロセッシングユニット（ＡＰＵ）と、ＧＰＵによる汎目的計算（ＧＰＧＰＵ）とは、この分野において一般に用いられる用語であるが、「アクセラレーテッド処理デバイス」（ＡＰＤ）は、より広い表現とみなされる。例えば、ＡＰＤは、従来のＣＰＵ、従来のＧＰＵ、ソフトウェアおよび／またはこれらの組合せと比較して高速化された方法で行われる、グラフィックス処理タスク、データ並列タスク、またはネスト化されたデータ並列タスクの高速化に関連する機能および演算を実行する任意のハードウェアおよび／またはソフトウェアの協働的集合体を指す。
【００１１】
本発明の実施形態は、ある特定の状況では、異種の処理デバイスにおいてワークロードのバランスをとるための方法、システムおよび製品を含む。本方法は、ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスするステップと、別の種類のプロセッサによって処理可能なメモリ内の複数のタスクからタスクを識別するステップと、記憶装置にアクセス可能な複数のデキューイング実体を同期させるステップと、記憶装置からタスクをデキューイングする（取り出す）ステップと、を含む。
【００１２】
本発明の追加的な特徴および利点、ならびに本発明の様々な実施形態の構造および動作は、添付の図面を参照して以下で詳細に説明される。本発明は、本明細書において説明される特定の実施形態に制限されないことに注意すべきである。係る実施形態は、例示目的のみのために本明細書において提示される。追加的な実施形態は、本明細書に含まれる教示に基づいて当業者に明らかとなるであろう。
【００１３】
添付の図面は、本明細書に組み込まれ本明細書の一部を構成するものであって、本発明を例示し、説明とともに、本発明の原理を説明し、当業者が本発明を実施することを可能にするように、さらに機能する。本発明の様々な実施形態は、添付の図面を参照して以下で説明される。なお、添付の図面の全体を通じて、同様の参照番号は同様の構成要素を参照するために用いられる。
【図面の簡単な説明】
【００１４】
【図１Ａ】本発明の実施形態に係る処理システムの例示的ブロック図である。
【図１Ｂ】図１Ａに示されたＡＰＤの例示的ブロック図である。
【図２】ＣＰＵおよびＡＰＤが同一のシリコン基板上に取付けられたキューイングシステムの例示的なブロック図である。
【図３】分散システム環境におけるキューイングシステムの例示的なブロック図である。
【図４】複数のＣＰＵおよびＡＰＤ用のタスクのバランスをとる複数のキューの例示的なブロック図である。
【図５】融合環境において、ＣＰＵで処理されるタスクを記憶するキューからタスクを取り出す（デキューする）ＡＰＤの例示的なフローチャートである。
【図６】ＡＰＤで処理されるタスクを記憶するキューからタスクを取り出すＡＰＤの例示的なフローチャートである。
【図７】分散環境において、ＣＰＵで処理されるタスクを記憶するキューからタスクを取り出す（デキューする）ＣＰＵの例示的なフローチャートである。
【００１５】
本発明は、添付された図を参照して説明される。概して、構成要素が最初に現れる図面は、通常、対応する参照番号の最も左側の桁によって示される。
【発明を実施するための形態】
【００１６】
以下の詳細な説明においては、「１つの実施形態」、「ある実施形態」、「例示的実施形態」またはその他を参照することは、本明細書において説明される実施形態が、特定の特徴、構造または特性を有することを示すが、全ての実施形態がその特定の特徴、構造または特性を必ずしも含むとは限らない。さらに、係る語句は、同一の実施形態を参照するとは限らない。さらに、特定の特徴、構造または特性が１つの実施形態に関連して説明されるとき、係る特長、構造または特性を他の実施形態との関連で実施することは、明示されているか否かによらず、当業者の知識の範囲内であることが提起される。
【００１７】
「本発明の実施形態」という用語は、本発明の実施形態の全てが検討の対象である特徴、利点または操作モードを含むことを必ずしも要求しない。代替的な実施形態が本発明の範囲から逸脱することなく考案され、本発明の既知の構成要素は、本発明の関連する詳細を不明瞭化しないために、必ずしも詳細に説明されるとは限らず、または省略され得る。また、本明細書において用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を制限することを意図するものではない。例えば、本明細書において用いられる単数形の「１つの」および「その」は、内容的に明らかに単数のみを指す場合を除き、複数形をも含むことを意図するものである。本明細書において用いられる場合、「含む」、「備える」、「包含する」および／または「有する」という用語は、述べられた特徴、整数、ステップ、操作、構成要素および／またはコンポーネントが存在することを指定するが、１つまたは複数の他の特徴、整数、ステップ、操作、構成要素、コンポーネントおよび／またはこれらの群の存在または追加を除外しない。
【００１８】
図１Ａは、ＣＰＵ１０２およびＡＰＤ１０４を含む、統合化されたコンピューティングシステム１００の例示的な図である。ＣＰＵ１０２は、１つ以上のシングルコアまたはマルチコアＣＰＵを含み得る。本発明の一実施形態において、システム１００は、統合化されたプログラミング環境および実行環境を提供するために、ＣＰＵ１０２およびＡＰＤ１０４を組み合わせた単一のシリコンダイまたはパッケージ上に形成される。この環境は、ＡＰＤ１０４が、いくつかのプログラミングタスクに対して、ＣＰＵ１０２と同程度に流動的に用いられることを可能にする。しかし、ＣＰＵ１０２およびＡＰＤ１０４が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、ＣＰＵ１０２およびＡＰＤ１０４は別個に形成され、同一の基板または異なる基板上に搭載されることが可能である。
【００１９】
１つの例において、システム１００は、メモリ１０６、オペレーティングシステム１０８および通信インフラストラクチャ１０９を含む。オペレーティングシステム１０８および通信インフラストラクチャ１０９は、以下でより詳細に説明される。
【００２０】
システム１００は、カーネルモードドライバ（ＫＭＤ：ｋｅｒｎｅｌ  ｍｏｄｅ  ｄｒｉｖｅｒ）１１０と、ソフトウェアスケジューラ（ＳＷＳ：ｓｏｆｔｗａｒｅ  ｓｃｈｅｄｕｌｅｒ）１１２と、例えば入出力メモリ管理ユニット（ＩＯＭＭＵ：ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｍｅｍｏｒｙ  ｍａｎａｇｅｍｅｎｔ  ｕｎｉｔ）等のメモリ管理ユニット１１６とを含む。システム１００の構成品は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組合せとして実装され得る。当業者は、システム１００が図１Ａに示される実施形態において示されるものに加えて、またはこれらとは異なる、１つ以上のソフトウェアコンポーネント、ハードウェアコンポーネントおよびファームウェアコンポーネントを含み得ることを理解するであろう。
【００２１】
１つの例において、ＫＭＤ１１０等のドライバは、通常、ハードウェアが接続されたコンピュータバスまたは通信サブシステムを通してデバイスと通信する。呼び出しプログラムがドライバにおいてルーチンを呼び出すと、ドライバは、デバイスに対してコマンドを発行する。デバイスがドライバに対してデータを戻すと、ドライバは、元の呼び出しプログラムにおいてルーチンを呼び出し得る。１つの例において、ドライバは、ハードウェア依存的であり、オペレーティングシステム固有である。ドライバは、通常、任意の必要な非同期的時間依存性のハードウェアインターフェースに対して要求されるインタラプトハンドリングを提供する。
【００２２】
デバイスドライバは、特に現代のマイクロソフト・ウィンドウズ（登録商標）プラットフォームにおいては、カーネルモード（リング０）またはユーザモード（リング３）において実行され得る。ドライバをユーザモードにおいて実行することの主要な利益は、安定性が改善されることである。なぜなら、不完全な形で書かれたユーザモードデバイスドライバは、カーネルメモリを上書きすることによってシステムをクラッシュさせることができないためである。一方、ユーザモード／カーネルモードの遷移は、通常、顕著な性能オーバーヘッドを与え、それにより、低レイテンシおよび高スループット要件のためにユーザモードドライバを阻害する。カーネルスペースは、システムコールの使用を通してのみ、ユーザモジュールからのアクセスが可能である。ＵＮＩＸ（登録商標）シェルまたは他のＧＵＩベースのアプリケーションなどのエンドユーザプログラムは、ユーザスペースの一部である。これらのアプリケーションは、カーネルにサポートされた機能を通してハードウェアと相互作用する。
【００２３】
ＣＰＵ１０２は、制御プロセッサ、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ：ｆｉｅｌｄ  ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙ）、特定用途集積回路（ＡＳＩＣ：ａｐｐｌｉｃａｔｉｏｎ  ｓｐｅｃｉｆｉｃ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ）またはデジタル・シグナル・プロセッサ（ＤＳＰ：ｄｉｇｉｔａｌ  ｓｉｇｎａｌ  ｐｒｏｃｅｓｓｏｒ）のうち１つ以上を含み得る（図示せず）。ＣＰＵ１０２は、例えば、コンピューティングシステム１００の動作を制御する、オペレーティングシステム１０８、ＫＭＤ１１０、ＳＷＳ１１２およびアプリケーション１１１を含む制御ロジックを実行する。この例示的な実施形態において、ＣＰＵ１０２は、１つの実施形態によれば、アプリケーション１１１の実行の起動および制御を、例えばそのアプリケーションに関連する処理をＣＰＵ１０２とＡＰＤ１０４等の他の処理リソースとの間に分散させることにより行う。
【００２４】
ＡＰＤ１０４は、とりわけ、グラフィックス演算や、例えば特に並列処理に好適となり得る他の演算等の、選択された機能のためのコマンドおよびプログラムを実行する。一般に、ＡＰＤ１０４は、ピクセル処理、幾何学演算およびディスプレイに対する画像のレンダリング等のグラフィックスパイプライン処理を実行するために、しばしば用いられ得る。本発明の様々な実施形態において、ＡＰＤ１０４は、ＣＰＵ１０２から受信したコマンドまたは命令に基づいて、計算処理演算（例えば、ビデオ演算、ビデオ演算、物理シミュレーション、計算流体力学その他等の、グラフィックスに関連しない演算）も実行し得る。
【００２５】
例えば、コマンドは、命令セットアーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ａｒｃｈｉｔｅｃｔｕｒｅ）において通常定義されない特殊な命令であるとみなすことができる。コマンドは、例えばディスパッチプロセッサ、コマンドプロセッサまたはネットワークコントローラ等の特殊なプロセッサにより実行され得る。一方、命令は、例えばコンピュータアーキテクチャ内のプロセッサの単一の演算であるとみなされ得る。１つの例において、２セットのＩＳＡが用いられる場合には、いくつかの命令は、ｘ８６プログラムを実行するために用いられ、いくつかの命令は、ＡＰＤ計算ユニット上でカーネルを実行するために用いられる。
【００２６】
例示的な実施形態において、ＣＰＵ１０２は、選択されたコマンドをＡＰＤ１０４に伝達する。これらの選択されたコマンドは、並列実行に適したグラフィックスコマンドと、並列実行に適した他のコマンドとを含み得る。計算処理コマンドを含み得るこれらの選択されたコマンドは、実質的にＣＰＵ１０２から独立して実行され得る。
【００２７】
ＡＰＤ１０４は、例えば１つ以上のＳＩＭＤ処理コア等ではあるがこれに制限されない、自身の計算ユニット（図示せず）を含み得る。本明細書で参照されるＳＩＭＤは、パイプライン、すなわち、それぞれが自身のデータおよび共有プログラムカウンタを有する複数の処理エレメント上でカーネルが同時に実行されるプログラミングモデルである。全ての処理エレメントは、同一の１組の命令を実行する。プレディケーションを用いることにより、発行された各コマンドに対して、ワークアイテムを関与させることまたはさせないことが可能となる。
【００２８】
１つの例において、各ＡＰＤ１０４計算ユニットは、１つ以上のスカラーおよび／またはベクトル浮動小数点演算ユニットおよび／または算術論理ユニット（ＡＬＵ：ａｒｉｔｈｍｅｔｉｃ  ａｎｄ  ｌｏｇｉｃ  ｕｎｉｔ）を含み得る。ＡＰＤ計算ユニットは、逆平方根ユニットおよびサイン／コサインユニット等の特殊用途処理ユニット（図示せず）も含み得る。１つの例において、ＡＰＤ計算ユニットは、本明細書においてシェーダコア１２２と総称される。
【００２９】
１つ以上のＳＩＭＤが存在することにより、一般に、ＡＰＤ１０４は、グラフィックス処理において一般的なデータ並列タスク等のデータ並列タスクの実行に、理想的に好適なものとなる。
【００３０】
ピクセル処理等のいくつかのグラフィックスパイプライン処理と、他の並列演算処理とは、同一のコマンドストリームまたは計算カーネルが、ストリームまたは入力データ要素の集合体上で実行されることを要求する。同一の計算カーネルのそれぞれのインスタンス化は、上記データ要素を並列に処理するために、シェーダコア１２２の複数の計算ユニット上で同時に実行され得る。本明細書で参照されるように、例えば計算カーネルは、プログラム上で宣言され、ＡＰＤ計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。
【００３１】
１つの例示的な実施形態において、各計算ユニット（例えばＳＩＭＤ処理コア）は、入力されるデータを処理するために、特定ワークアイテムのそれぞれのインスタンス化を実行し得る。ワークアイテムは、コマンドによりデバイス上で呼び出されるカーネルの並列実行の集合体のうちの１つである。ワークアイテムは、計算ユニット上で実行されるワークグループの一部として、１つ以上の処理エレメントにより実行され得る。
【００３２】
ワークアイテムは、自身のグローバルＩＤおよびローカルＩＤによって、集合体内の他の実行から区別される。１つの例において、ワークグループにおいて１つのＳＩＭＤで同時に実行されるワークアイテムの一部は、ウェーブフロント１３６と称され得る。ウェーブフロントの幅は、計算ユニット（例えば、ＳＩＭＤ処理コア）のハードウェアの特性である。本明細書で参照されるワークグループは、単一の計算ユニット上で実行される関連するワークアイテムの集合体である。ワークグループ内のワークアイテムは、同一のカーネルを実行し、ローカルメモリおよびワークグループバリアを共有する。
【００３３】
代表的な実施形態において、１つのワークグループからの全てのウェーブフロントは、同一のＳＩＭＤ処理コアで処理される。ウェーブフロントにわたる命令は１つずつ発行され、全てのワークアイテムが同一の制御フローに従う場合には、各ワークアイテムは、同一のプログラムを実行する。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。
【００３４】
実行マスクおよびワークアイテムプレディケーションは、ウェーブフロントにおける拡散的な制御フローを可能にするために用いられる。なお、拡散的な制御フローでは、個別のワークアイテムは、カーネルを通る一意的なコードパスを実際に取り得る。部分的に占められたウェーブフロントは、ワークアイテムの全てのセットがウェーブフロント開始時に必ずしも利用可能とは限らない場合に、処理され得る。例えば、シェーダコア１２２は、所定数のウェーブフロント１３６を同時に実行し得る。なお、各ウェーブフロント１３６は、複数のワークアイテムを含む。
【００３５】
システム１００において、ＡＰＤ１０４は、グラフィックスメモリ１３０等の自身のメモリを含む（なお、メモリ１３０は、グラフィックス専用に制限されるとは限らない）。グラフィックスメモリ１３０は、ＡＰＤ１０４における計算実行の間の使用のために、ローカルメモリを提供する。シェーダコア１２２内の個々の計算ユニット（図示せず）は、自身のローカルデータ記憶装置（図示せず）を有し得る。１つの実施形態において、ＡＰＤ１０４は、ローカルグラフィックスメモリ１３０へのアクセス、ならびにメモリ１０６へのアクセスを含む。他の実施形態において、ＡＰＤ１０４は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ：ｄｙｎａｍｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、または、ＡＰＤ１０４には直接的に接続されているがメモリ１０６からは分離している他のメモリ（図示せず）へのアクセスを含み得る。
【００３６】
図示の例において、ＡＰＤ１０４は、１つまたは「ｎ」個のコマンドプロセッサ（ＣＰ：ｃｏｍｍａｎｄ  ｐｒｏｃｅｓｓｏｒ）１２４を含み得る。ＣＰ１２４は、ＡＰＤ１０４内の処理を制御する。ＣＰ１２４は、実行されるべきコマンドを、メモリ１０６内のコマンドバッファ１２５から取得し、ＡＰＤ１０４でのこれらのコマンドの実行を調整する。
【００３７】
１つの例において、ＣＰＵ１０２は、アプリケーション１１１に基づくコマンドを、適切なコマンドバッファ１２５に入力する。本明細書において参照されるように、アプリケーションは、ＣＰＵ内またはＡＰＤ内の計算ユニット上で実行されるプログラム部分の組合せである。
【００３８】
複数のコマンドバッファ１２５は、各プロセスがＡＰＤ１０４での実行のためにスケジュールされた状態で、保持され得る。
【００３９】
ＣＰ１２４は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組合せにおいて実装され得る。１つの実施形態において、ＣＰ１２４は、スケジューリングロジックを含むロジックを実装するためのマイクロコードを有する縮小命令セットコンピュータ（ＲＩＳＣ：ｒｅｄｕｃｅｄ  ｉｎｓｔｒｕｃｔｉｏｎ  ｓｅｔ  ｃｏｍｐｕｔｅｒ）エンジンとして実装される。
【００４０】
ＡＰＤ１０４は、１つまたは「ｎ」個のディスパッチコントローラ（ＤＣ：ｄｉｓｐａｔｃｈ  ｃｏｎｔｒｏｌｌｅｒ）１２６を含み得る。本願において、ディスパッチという用語は、１セットの計算ユニット上の１セットのワークグループに対するカーネルの実行のスタートを起動するために、コンテキスト状態を使用するディスパッチコントローラにより実行されるコマンドを指す。ＤＣ１２６は、シェーダコア１２２内でワークグループを起動するためのロジックを含む。いくつかの実施形態において、ＤＣ１２６は、ＣＰ１２４の一部として実装され得る。
【００４１】
システム１００は、ＡＰＤ１０４上で実行するためのプロセスを実行リスト１５０から選択するためのハードウェアスケジューラ（ＨＷＳ：ｈａｒｄｗａｒｅ  ｓｃｈｅｄｕｌｅｒ）１２８を含む。ＨＷＳ１２８は、ラウンドロビン方式、優先レベルを用いて、または他のスケジューリングポリシーに基づいて、プロセスを実行リスト１５０から選択し得る。優先レベルは、例えば、動的に決定され得る。ＨＷＳ１２８は、例えば、新規のプロセスを追加することによって、あるいは既存のプロセスを実行リスト１５０から削除することによって、実行リスト１５０を管理する機能を含み得る。ＨＷＳ１２８の実行リスト管理ロジックは、実行リストコントローラ（ＲＬＣ：ｒｕｎ  ｌｉｓｔ  ｃｏｎｔｒｏｌｌｅｒ）と称されることもある。
【００４２】
本発明の様々な実施形態において、ＨＷＳ１２８が、ＲＬＣ１５０からプロセスの実行を開始すると、ＣＰ１２４は、対応するコマンドバッファ１２５からのコマンドの取得および実行を開始する。いくつかの事例において、ＣＰ１２４は、ＣＰＵ１０２から受信したコマンドに対応する、ＡＰＤ１０４内で実行される１つ以上のコマンドを生成し得る。１つの実施形態において、ＣＰ１２４は、ＡＰＤ１０４および／またはシステム１００のリソースの利用が改善または最大化されるように、ＡＰＤ１０４におけるコマンドの優先化およびスケジューリングを、他のコンポーネントとともに実装する。
【００４３】
ＡＰＤ１０４は、インタラプトジェネレータ１４６に対してアクセスを有するか、またはインタラプトジェネレータ１４６を含み得る。インタラプトジェネレータ１４６は、ＡＰＤ１０４がページフォールト等のインタラプトイベントに遭遇すると、ＡＰＤ１０４によってオペレーティングシステム１０８にインタラプトをかけるよう構成され得る。例えば、ＡＰＤ１０４は、ＩＯＭＭＵ１１６内のインタラプト生成ロジックに依存して、上述のページフォールトインタラプトを生成し得る。
【００４４】
ＡＰＤ１０４は、シェーダコア１２２内で現在実行中のプロセスを切り替えるためのプリエンプションおよびコンテキストスイッチロジック１２０を含み得る。コンテキストスイッチロジック１２０は、例えばプロセスを停止させ、その現在状態（例えばシェーダコア１２２状態およびＣＰ１２４状態）を保存する機能を含む。
【００４５】
本明細書において参照される状態という用語は、初期状態、中間状態および／または最終状態を含み得る。初期状態は、機械がプログラム順序に従って入力データセットを処理することによって、データの出力セットを生成する開始点である。例えば、処理を前進させるためにいくつかのポイントにおいて記憶される必要がある中間状態が存在する。この中間状態は、他のプロセスによってインタラプトがかけられた場合に、後に実行を継続することを可能にするために記憶される場合もある。出力データセットの一部として記録され得る最終状態も存在する。
【００４６】
プリエンプションおよびコンテキストスイッチロジック１２０は、他のプロセスを、ＡＰＤ１０４にコンテキストスイッチするためのロジックを含み得る。他のプロセスをＡＰＤ１０４で実行するようにコンテキストスイッチするための機能は、ＡＰＤ１０４上で実行するために、例えばＣＰ１２４およびＤＣ１２６によってプロセスをインスタンス化することと、当該プロセスに対して以前に保存された状態を復元することと、当該プロセスの実行を開始することと、を含み得る。
【００４７】
メモリ１０６は、ＤＲＡＭ（図示せず）等の非永続型メモリを含み得る。メモリ１０６は、例えば、アプリケーションまたは他の処理ロジックの部分を実行する間に、処理ロジック命令、定数および様々な変数を記憶し得る。例えば、１つの実施形態において、ＣＰＵ１０２上で１つ以上の演算を実行するための制御ロジックの部分は、ＣＰＵ１０２によって演算のそれぞれの部分が実行される間、メモリ１０６内に常駐し得る。
【００４８】
実行中、個別のアプリケーション、オペレーティングシステム関数、処理ロジックコマンドおよびシステムソフトウェアは、メモリ１０６に常駐し得る。オペレーティングシステム１０８に対して必須である制御ロジックコマンドは、一般に、実行中にはメモリ１０６に常駐することとなるであろう。他のソフトウェアコマンド、例えばＫＭＤ１１０およびソフトウェアスケジューラ１１２は、システム１００の実行中にはメモリ１０６に常駐し得る。
【００４９】
この例において、メモリ１０６は、コマンドをＡＰＤ１０４に送るために、ＣＰＵ１０２によって用いられるコマンドバッファ１２５を含む。メモリ１０６は、プロセスリストおよびプロセス情報（例えば、アクティブリスト１５２およびプロセス制御ブロック１５４）を含み得る。これらのリストおよび情報は、スケジュール情報を、ＡＰＤ１０４および／または関連するスケジューリングハードウェアに伝えるために、ＣＰＵ１０２上で実行されるスケジューリングソフトウェアによって使用される。メモリ１０６に対するアクセスは、メモリ１０６に接続されたメモリコントローラ１４０によって管理され得る。例えば、メモリ１０６に対する読み出しおよび書き込みを実行するための、ＣＰＵ１０２または他のデバイスからの要求は、メモリコントローラ１４０によって管理される。
【００５０】
システム１００の他の態様に戻ると、ＩＯＭＭＵ１１６は、マルチコンテキスト・メモリ管理ユニットである。
【００５１】
本明細書で用いられるコンテキストという用語は、カーネルが実行される環境であって、同期およびメモリ管理が定義されるドメインであるとみなされる。コンテキストは、１セットのデバイスと、これらのデバイスに対してアクセス可能であるメモリと、対応するメモリ特性と、メモリオブジェクトにおけるカーネル（単数または複数）または演算の実行をスケジュールするために用いられる１つ以上のコマンドキューとを含む。
【００５２】
図１Ａにおいて示される例に戻ると、ＩＯＭＭＵ１１６は、ＡＰＤ１０４を含むデバイスに対するメモリページアクセスに対して、仮想アドレスから物理アドレスへの変換を実行するためのロジックを含む。ＩＯＭＭＵ１１６は、例えば、ＡＰＤ１０４等のデバイスによるページアクセスの結果としてページフォールトが生じる場合に、インタラプトを生成するためのロジックを含み得る。ＩＯＭＭＵ１１６は、トランスレーションルックアサイドバッファ（ＴＬＢ：ｔｒａｎｓｌａｔｉｏｎ  ｌｏｏｋａｓｉｄｅ  ｂｕｆｆｅｒ）１１８を含むか、あるいはＴＬＢ１１８に対するアクセスを有し得る。ＴＬＢ１１８は、１つの例として、メモリ１０６内のデータ用にＡＰＤ１０４によりなされた要求に対して、論理（すなわち仮想）メモリアドレスから物理メモリアドレスへの変換を高速化するために、コンテントアドレサブルメモリ（ＣＡＭ：ｃｏｎｔｅｎｔ  ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）に実装され得る。
【００５３】
示された例において、通信インフラストラクチャ１０９は、必要に応じてシステム１００のコンポーネントを相互接続する。通信インフラストラクチャ１０９は、周辺構成要素相互接続（ＰＣＩ）バス、拡張ＰＣＩ（ＰＣＩ−Ｅ）バス、アドバンスト・マイクロコントローラ・バス・アーキテクチャ（ＡＭＢＡ）バス、アドバンスト・グラフィックス・ポート（ＡＧＰ）または他の通信インフラストラクチャのうち１つ以上を含み得る（図示せず）。通信インフラストラクチャ１０９は、イーサネット（登録商標）若しくは同様のネットワークまたはアプリケーションの転送速度要求を満足する任意の好適な物理的通信インフラストラクチャを含み得る。通信インフラストラクチャ１０９は、コンピューティングシステム１００のコンポーネントを含むコンポーネントを相互接続するための機能を含む。
【００５４】
この例において、オペレーティングシステム１０８は、システム１００のハードウェアコンポーネントを管理する機能と、共通サービスを提供するための機能とを含む。様々な実施形態において、オペレーティングシステム１０８は、ＣＰＵ１０２上で実行し、共通サービスを提供する。これらの共通サービスは、例えば、ＣＰＵ１０２内での実行のためにアプリケーションをスケジューリングすることと、フォールト管理と、インタラプトサービスと、他のアプリケーションの入力および出力を処理することと、を含む。
【００５５】
いくつかの実施形態において、オペレーティングシステム１０８は、例えばインタラプトコントローラ１４８等のインタラプトコントローラによって生成されたインタラプトに基づいて、適切なインタラプトハンドリングルーチンを呼び出す。例えば、オペレーティングシステム１０８は、ページフォールト・インタラプトを検出すると、関連するページをメモリ１０６にロードし始め、且つ、対応するページテーブルを更新するために、インタラプトハンドラを呼び出す。
【００５６】
オペレーティングシステム１０８は、オペレーティングシステムにより管理されるカーネル機能を通して、ハードウェア部品に対するアクセスが仲介されることを確保することによって、システム１００を保護する機能を含み得る。事実、オペレーティングシステム１０８は、アプリケーション１１１等のアプリケーションが、ＣＰＵ１０２上でユーザスペースにおいて実行されることを確保する。オペレーティングシステム１０８は、アプリケーション１１１が、ハードウェアにアクセスするためにオペレーティングシステムにより提供されるカーネル機能および／または入出力機能を呼び出すことも確保する。
【００５７】
例として、アプリケーション１１１は、ＣＰＵ１０２上でも実行されるユーザ計算を実行するための様々なプログラムまたはコマンドを含む。ＣＰＵ１０２は、選択されたコマンドを、ＡＰＤ１０４上で処理するためにシームレスに送信し得る。
【００５８】
１つの例において、ＫＭＤ１１０は、ＣＰＵ１０２、ＣＰＵ１０２上で実行されるアプリケーションまたは他のロジックが、ＡＰＤ１０４の機能を呼び出し得るアプリケーションプログラミングインタフェース（ＡＰＩ）を実装する。例えば、ＫＭＤ１１０は、ＣＰＵ１０２からのコマンドを、コマンドバッファ１２５に加え（エンキューし）得る。なお、ＡＰＤ１０４は、このコマンドバッファ１２５からコマンドを続けて取得することとなる。加えて、ＫＭＤ１１０は、ＡＰＤ１０４上で実行されるプロセスのスケジューリングを、ＳＷＳ１１２とともに実行する。ＳＷＳ１１２は、例えば、ＡＰＤ上で実行されるプロセスの優先度リストを保持するためのロジックを含み得る。
【００５９】
本発明の他の実施形態において、ＣＰＵ１０２上で実行するアプリケーションは、コマンドをエンキューするときに、ＫＭＤ１１０を完全にバイパスし得る。
【００６０】
いくつかの実施形態において、ＳＷＳ１１２は、ＡＰＤ１０４上で実行されるプロセスのアクティブリスト１５２を、メモリ１０６に保持する。ＳＷＳ１１２は、アクティブリスト１５２におけるプロセスのうち、ハードウェアのＨＷＳ１２８により管理される一部を選択する。各プロセスをＡＰＤ１０４上で実行することに関する情報は、ＣＰＵ１０２からプロセス制御ブロック（ＰＣＢ：ｐｒｏｃｅｓｓ  ｃｏｎｔｒｏｌ  ｂｌｏｃｋ）１５４を通して、ＡＰＤ１０４に伝えられる。
【００６１】
アプリケーション、オペレーティングシステムおよびシステムソフトウェアのための処理ロジックは、マスクワーク／フォトマスクの生成を通して最終的に製造プロセスを構成することで、本明細書において説明される本発明の態様を具体化するハードウェア装置を生成することを可能にするための、例えば、Ｃ言語等のプログラム言語および／またはＶｅｒｉｌｏｇ、ＲＴＬ等のハードウェア記述言語もしくはネットリストにおいて指定されるコマンドを含み得る。
【００６２】
当業者は、コンピューティングシステム１００が、図１Ａにおいて示されるコンポーネントよりも多数または少数のコンポーネントを含み得ることを、本明細書を読むことで理解するであろう。例えば、コンピューティングシステム１００は、１つ以上の入力インターフェースと、不揮発性ストレージと、１つ以上の出力インターフェースと、ネットワークインターフェースと、１つ以上のディスプレイまたはディスプレイインターフェースと、を含み得る。
【００６３】
図１Ｂは、図１Ａにおいて示されるＡＰＤ１０４のより詳細な例示を示す実施形態である。図１Ｂにおいて、ＣＰ１２４は、ＣＰパイプライン１２４ａ，１２４ｂ，１２４ｃを含み得る。ＣＰ１２４は、図１Ａにおいて示されるコマンドバッファ１２５から入力として提供されるコマンドリストを、処理するように構成され得る。図１Ｂの典型的な動作において、ＣＰ入力０（１２４ａ）は、コマンドをグラフィックスパイプライン１６２に駆動することを担当する。ＣＰ入力１および２（１２４ｂおよび１２４ｃ）は、コマンドを計算パイプライン１６０に伝える。ＨＷＳ１２８の動作を制御するためのコントローラ機構１６６も提供される。
【００６４】
図１Ｂにおいて、グラフィックスパイプライン１６２は、本明細書において順序化パイプライン１６４と称される、１セットのブロックを含み得る。例えば、順序化パイプライン１６４は、頂点グループ変換器（ＶＧＴ：ｖｅｒｔｅｘ  ｇｒｏｕｐ  ｔｒａｎｓｌａｔｏｒ）１６４ａと、プリミティブアセンブラ（ＰＡ：ｐｒｉｍｉｔｉｖｅ  ａｓｓｅｍｂｌｅｒ）１６４ｂと、スキャンコンバータ（ＳＣ：ｓｃａｎ  ｃｏｎｖｅｒｔｅｒ）１６４ｃと、シェーダエクスポート・レンダーバック・ユニット（ＳＸ／ＲＢ：ｓｈａｄｅｒ−ｅｘｐｏｒｔ，ｒｅｎｄｅｒ−ｂａｃｋ  ｕｎｉｔ）１７６とを含む。順序化パイプライン１６４内の各ブロックは、グラフィックスパイプライン１６２内の異なる段階のグラフィックス処理を表し得る。順序化パイプライン１６４は、固定機能ハードウェアパイプラインであり得る。
【００６５】
本発明の精神および範囲に含まれ得る他の実装を用いることも可能である。わずかな量のデータが、入力としてグラフィックスパイプライン１６２に提供されるが、このデータは、グラフィックスパイプライン１６２からの出力として提供されるときまで増幅されることとなるであろう。グラフィックスパイプライン１６２は、ＣＰパイプライン１２４ａから受け取ったワークアイテムグループ内の範囲にわたってカウントするためのＤＣ１６６も含む。ＤＣ１６６を通して提示された計算作業は、グラフィックスパイプライン１６２と準同期している。
【００６６】
計算パイプライン１６０は、シェーダＤＣ１６８，１７０を含む。ＤＣ１６８，１７０のそれぞれは、ＣＰパイプライン１２４ｂ，１２４ｃから受け取ったワークグループ内の計算範囲にわたってカウントするように構成されている。
【００６７】
図１Ｂにおいて示されるＤＣ１６６，１６８，１７０は、入力範囲を受け取り、入力範囲をワークグループに分割し、次いでこれらのワークグループをシェーダコア１２２に伝える。
【００６８】
グラフィックスパイプライン１６２は、一般に固定機能パイプラインであるため、その状態を保存および復元することは困難であり、そのためグラフィックスパイプライン１６２は、コンテキストスイッチが困難である。したがって、ほとんどの場合、本明細書において論じられるコンテキストスイッチは、グラフィックス処理におけるコンテキストスイッチに関係しない。例外は、シェーダコア１２２におけるグラフィックス作業であり、これはコンテキストスイッチされ得る。
【００６９】
グラフィックスパイプライン１６２のワーク処理が完了した後、完了したワークはレンダーバックユニット１７６を通して処理される。このレンダーバッククユニット１７６は、デプス計算およびカラー計算を行い、次いでその最終結果をメモリ１３０に書き込む。
【００７０】
シェーダコア１２２は、グラフィックスパイプライン１６２および計算パイプライン１６０により共有され得る。シェーダコア１２２は、汎用プロセッサであり、ウェーブフロントを実行するように構成されている。
【００７１】
１つの例において、計算パイプライン１６０内の全てのワークは、シェーダコア１２２内で処理される。シェーダコア１２２は、プログラム可能なソフトウェアコードを実行し、多様な形態のデータ（例えば、状態データ）を含む。
【００７２】
図２は、ワークロードが、ＣＰＵおよびＡＰＤ処理デバイスでの処理のためにバランスが取られ、且つ、再分配されるキューイングシステム２００の例示的なブロック図である。キューイングシステム２００は、キュー２０２と、タスク２０４と、セマフォブロック２０６と、（本明細書に記載された）ＣＰ１２４と、１つ以上のＳＩＭＤスケジューラ２０８と、シェーダコア１２２と、ＣＰＵ同期化モジュール２１０と、ＣＰＵデキューイングモジュール２１２と、ＣＰＵコア２１４とを備える。
【００７３】
ＣＰＵ１０２は、本明細書に記載したように、１つ以上のＣＰＵコア２１４を含む、各ＣＰＵコア２１４は、ＣＰＵ１０２内でコンピュータの命令およびデータを処理する。
【００７４】
キュー２０２は、システムメモリ１０６から割り当てられたメモリのセグメントである。先入れ先出方式（ＦＩＦＯ）の原則により、キューが作動する。すなわち、キューに最初に加えられる（エンキューされる）ワークロードは、キューから最初に取り出される（デキューされる）ワークロードである。さらに、当業者は、特定のキューデータ構造の説明は、例示として示され、限定するものではなく、他のメモリ記憶データ構造を使用してもよいことを認識するであろう。
【００７５】
キュー２０２は、パブリックキューである。パブシックキューは、例えばＣＰＵ１０２およびＡＰＤ１０４などの処理デバイスにアクセスすることができる。キュー２０２は、ＦＩＦＯの原則によりキュー２０２に加えられ、且つ、取り出される複数のタスク２０４を記憶する。タスク２０４は、独立したジョブ（ｊｏｂ）であり、ＡＰＤ１０４またはＣＰＵ１０２での処理のためにスケジュールされたオペレーティングシステム命令、アプリケーション、命令、イメージおよびデータを含む。ジョブは、グレイン（ｇｒａｉｎ）に基づいてタスク２０４へ分割される。グレインは、タスク２０４のサイズを表す。このグレインのサイズは、ＡＰＤ１０４およびＣＰＵ１０２プロセッサにスケジュールされるタスク２０４によって異なる。例えば、ＣＰＵ１０２上で処理されるタスク２０４のグレインの大きさは、一般的に、ＡＰＤ１０４上で処理されるタスク２０４のグレインの大きさよりも小さい。
【００７６】
タスク２０４は、情報の命令および／または処理を必要とするデータへのポインタを保持するデータ構造を含む。例えば、タスク２０４の情報を保持するデータ構造は、ＭｙＴａｓｋ構造体（Ｍｙｔａｓｋ  ｓｔｒｕｃｔｕｒｅ）として定義することができる。限定するものではないが、例において、ＭｙＴａｓｋ構造体は、以下のパラメータを含む。
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
}
【００７７】
ＭｙＴａｓｋ構造体は、システムメモリ１０６または別のメモリデバイスに記憶された、コンパイルされたＣＰＵコードおよびＡＰＤマイクロコードへのポインタを含む。上記の例において、ＭｙＰｔｒ  ｍｙＣｏｄｅＰｔｒは、ｍｙＡＰＤＣｏｄｅＰｔｒとしてＣＰ１２４で実行されるマイクロコードに対して、およびｍｙＣＰＵＣｏｄｅＰｔｒとしてＣＰＵ１０２で実行される、コンパイルされたソースコードに対して、ポインタを定義する。ｍｙＡＰＤＣｏｄｅＰｔｒは、シェーダコア１２２が、タスク２０４内のデータを実行するために使用する機能を含むマイクロコードをポイントする。例えば、タスク２０４がＡＰＤにて実行される場合には、ＡＰＤ１０４は、ｍｙＡＰＤＣｏｄｅＰｔｒにアドレスが記憶されている機能にアクセスする。タスク２０４がＣＰＵ１０２にて実行される場合には、ＣＰＵ１０２は、ｍｙＣＰＵＣｏｄｅＰｔｒにアドレスが記憶されている機能にアクセスする。一実施形態において、ｍｙＣｏｄｅＰｔｒは、所定のイベントの後に実行可能となる従属情報を含む中間言語表現をもポイントする。
【００７８】
上記の例において、ＭｙＴａｓｋ構造体は、ＭｙＰｔｒ  ｍｙＤａｔａＰｔｒを含む。ｍｙＤａｔａＰｔｒは、タスク２０４が処理する必要のあるシステムメモリ１０６内のデータの位置に対するポインタである。同様に、ｍｙＤａｔａＰｔｒは、タスク２０４のデータに関連する情報を含むパラメータを含む。例えば、パラメータｍｙＡｒｇｓは、引数のリストを含み、ｍｙＡｒｇＳｉｚｅは引数の数を含み、ｍｙＥｘｅｃＲａｎｇｅはデータグリッドの次元を含む。
【００７９】
本発明の実施形態において、ＭｙＴａｓｋ構造体は、ＭｙＡｆｆｉｎｉｔｙパラメータを含む。ＭｙＡｆｆｉｎｉｔｙの値は、タスク２０４を実行する処理デバイスを決定する。例えば、ＭｙＡｆｆｉｎｉｔｙの値は、例えばＣＰＵ１０２またはＡＰＤ１０４などの処理デバイスの優先度、要求、ヒントなどを示す。
【００８０】
当業者は、ＭｙＴａｓｋなどのデータ構造体が、他のパラメータを同様に含むことを理解し得るであろう。
【００８１】
ＣＰＵデキューイングモジュール２１２およびＣＰ１２４は、デキューイング実体として機能する。デキューイング実体は、処理デバイスで処理するためのタスクを、キュー２０２から取り出し（デキューし）または移動させる。
【００８２】
ＣＰＵデキューイングモジュール２１２は、キュー２０２にアクセスし、ＣＰＵ２０２で処理するためのタスク２０４を取り出すソフトウェアモジュールである。一実施形態において、ＣＰＵデキューイングモジュール２１２は、ＣＰＵ１０２が処理を行うためにタスク２０４を必要とする場合に、ＡＰＤ１０４に関連するキュー２０２からタスクを取り出す。例えば、ＣＰＵ１０２に関連するキュー２０２が空であるが、ＡＰＤ１０４に関連するキュー２０２が、処理を必要とするタスク２０４を記憶している場合である。
【００８３】
典型的には、ＣＰＵデキューイングモジュール２１２は、ＦＩＦＯの原則を用いてタスク２０４を取得する。ＣＰＵデキューイングモジュール２１２は、タスク２０４を取り出す前に、ＭｙＡｆｆｉｎｉｔｙパラメータにアクセスし、タスク２０４がＣＰＵ１０２での処理に適するか否かを決定する。例えば、ＣＰＵデキューイングモジュール２１２は、ＭｙＡｆｆｉｎｉｔｙパラメータが要求としてＡＰＤ１０４での処理にセットされていないタスク２０４を、キューから取り出す。別の実施形態において、ＣＰＵデキューイングモジュール２１２は、ＭｙＡｆｆｉｎｉｔｙパラメータが優先度としてＡＰＤ１０４での処理にセットされていないタスク２０４を、キューから取り出す。典型的には、並列プロセッサによって実行可能な複雑な数学的処理を含むタスク２０４は、優先度または要求として、ＡＰＤ１０４処理にセットされたＭｙＡｆｆｉｎｉｔｙパラメータを有することができる。
【００８４】
マルチＣＰＵコア２１４環境において、ＣＰＵデキューイングモジュール２１２は、特定のＣＰＵコア２１４に対応する。
【００８５】
ＣＰ１２４は、キュー２０２にアクセスし、ＡＰＤで処理するタスク２０４を取り出す。ＣＰ１２４は、ＡＰＤ１０４で処理するためのキュー２０２からタスク２０４を取り出すハードウェアモジュールである。ＣＰＵデキューイングモジュール２１２と同様に、ＣＰ１２４は、ＡＰＤ１０４に関連するキュー２０２が空であるが、ＣＰＵ１０２に関連するキュー２０２が、処理を必要とするタスク２０４を記憶している場合には、ＣＰＵ１０２に関連するキュー２０２からタスク２０４を取り出すことができる。
【００８６】
ＣＰ１２４は、ＦＩＦＯの原則に従ってタスク２０４を取得する。ＣＰ１２４は、タスク２０４を取り出す前に、ＭｙＡｆｆｉｎｉｔｙパラメータを用いて、タスク２０４がＡＰＤ１０４の処理に適するか否かを決定する。例えば、ＣＰ１２４は、ＭｙＡｆｆｉｎｉｔｙパラメータが要求としてＣＰＵ１０２での処理にセットされていないタスク２０４を、キューから取り出す。別の例において、ＣＰ１２４は、ＭｙＡｆｆｉｎｉｔｙパラメータが優先度としてＣＰＵ１０２での処理にセットされていないタスク２０４を、キューから取り出す。典型的には、分岐コード（ｂｒａｎｃｈ−ｌｉｋｅ  ｃｏｄｅ）を含むタスク２０４は、優先度または要求として、ＣＰＵ１０２処理にセットされたＭｙＡｆｆｉｎｉｔｙパラメータを有することができる。
【００８７】
ＣＰ１２４は、タスク２０４を取り出した後に、１つ以上のシェーダパイプ補間器（ＳＰＩ：ｓｈａｄｅｒ  ｐｉｐｅ  ｉｎｔｅｒｐｏｌａｔｏｒ）２０８へタスク２０４を転送する。ＳＰＩ２０８は、シェーダコア１２２での処理用のタスク２０４を準備する。一実施形態において、ＳＰＩ２０８は、タスク２０４の処理に必要とされる作業アイテムおよびシェーダコア１２２の数を決定する。
【００８８】
ＣＰＵデキューイングモジュール２１２およびＣＰ１２４は、キュー２０２からタスク２０４を取り出す前に、同期される。同期は、タスク２０４が取り出されるときに、キュー２０２に対しての連続的かつ独占的なアクセスを保証するものである。ＣＰＵ同期化モジュール２１０は、ＣＰＵデキューイングモジュール２１２がキュー２０２からタスク２０４を取り出す前に、キュー２０２およびＡＰＤ１０４と、ＣＰＵデキューイングモジュール２１２とを同期する。ＣＰＵ同期化モジュール２１０は、ＣＰＵデキューイングモジュール２１２が、ＣＰＵ１０２での処理のためのタスク２０４を取り出そうと試みる場合に、ＣＰＵデキューイングモジュール２１２がキュー２０２に対して単一のアクセスを有することを保証する。
【００８９】
ＣＰＵ同期化モジュール２１０は、不可分操作（ａｔｏｍｉｃ  ｏｐｅｒａｔｉｏｎ）を用いて、ＣＰＵデキューイングモジュール２１２が、キュー２０２に対して独占的なアクセスを有することを保証する。不可分操作は、あるメモリ位置にアクセスするプロセスまたはハードウェアが当該アクセスを完了するまで、別のプロセスまたはハードウェアが当該メモリ位置に対する読み込みまたは書き込みを実行することを防ぐことを、当業者は理解するであろう。
【００９０】
セマフォブロック２０６は、ＡＰＤ１０４での処理のためのタスク２０４を取り出す前に、キュー２０２およびＣＰＵ１０２と、ＣＰ１２４とを同期する。また、セマフォブロック２０６は、ＣＰ１２４のキュー２０２に対する独占的なアクセスを保証する。１つの実施形態において、セマフォブロック２０６は、不可分操作を用いて、ＣＰ１２４が、キュー２０２に対して独占的なアクセスを有することを保証する。別の実施形態において、セマフォブロック２０６は、イベント通知メカニズムを用いて、キュー２０２に対する独占的なアクセスを保証する。イベント通知メカニズムは、プロセスまたはハードウェアデバイスに対して、特定のメモリ位置が別のプロセスまたはハードウェアデバイスによってアクセスされているのを通知することを、当業者は理解するであろう。
【００９１】
ＡＰＤ１０４およびＣＰＵ１０２は、キュー２０２から異なる数のタスク２０４を取得する。当業者は、ＡＰＤ１０４が多くのタスク２０４を並行して処理することができるため、より多くのタスク２０４を取得することを理解するであろう。結果として、ＣＰ１２４およびＣＰＵデキューイングモジュール２１２がキュー２０２からタスク２０４を取得する場合、各デキューイングデバイスがキュー２０２から取り出すタスク２０４の数は、処理を要求するのがＡＰＤ１０４であるかＣＰＵ１０２であるかに依存する。
【００９２】
個々のプロセッサ環境において、セマフォブロック２１６は、キュー２０２を直接同期できず、追加的な構成要素を必要とする。図３は、分散処理環境においてワークロードを再分配するキューイングシステムのブロック図である。本明細書に記載した構成要素に加えて、分散システム環境におけるＡＰＤ１０４は、ＡＰＤドライバモジュール３０２と、ＡＰＤデキューイングモジュール３０４とを含み、キュー２０２からタスク２０４を取り出す。ＡＰＤドライバモジュール３０２は、ＡＰＤ１０４にて総合的な実行を制御するソフトウェアモジュールである。ＡＰＤデキューイングモジュール３０２は、キュー２０２からタスク２０４を取得するソフトウェアベースのモジュールである。
【００９３】
ＡＰＤ１０４がワークを要求すると、セマフォブロック２０６は、ＡＰＤドライバモジュール３０２と通信する。ＡＰＤドライバモジュール３０２は、ＡＰＤデキューイングモジュール３０４と通信する。ＡＰＤデキューイングモジュール３０４は、キュー２０２からタスク２０４を取り出し、タスク２０４をＣＰ１２４に送る。
【００９４】
図４は、ＣＰＵ１０２およびＡＰＤ１０４と通信する複数のキュー２０２を含むオペレーティング環境のブロック図である。
【００９５】
各キュー２０２は、複数のＣＰＵ１０２およびＡＰＤ１０４と通信することができるが、キュー２０２は、特定のＣＰＵ１０２、特定のＣＰＵコア２１４または特定のＡＰＤ１０４のタスクを、最初に記憶することができる。
【００９６】
ＣＰ１２４は、ＣＰＵ１０２に関連する複数のキュー２０２からタスク２０４を取り出すことができ、本明細書に記載したように、処理するためのＡＰＤ１０４に対してタスク２０４を転送することができる。同様に、ＣＰＵデキューイングモジュール２１２は、本明細書に記載したように、ＣＰＵ１０２で処理するためのＡＰＤ１０４に関連する複数のキュー２０２から、タスク２０４を取り出すことができる。
【００９７】
図５は、キュー２０２からタスク２０４を取り出すＣＰ１２４の例示的な実施形態のフローチャート５００である。
【００９８】
動作５０２では、ＡＰＤ１０４は、処理を必要とするタスク２０４を要求する。
【００９９】
動作５０４では、ＣＰ１２４は、キュー２０２にアクセスする。
【０１００】
動作５０６では、ＣＰ１２４は、処理を必要とし、且つ、ＡＰＤ１０４で処理されることができるタスク２０４を識別する。例えば、ＣＰ１２４は、タスク２０４のＭｙＡｆｆｉｎｉｔｙパラメータの値を識別する。一実施形態において、ＣＰ１２４は、キュー２０２から取り出されるようにスケジュールされたタスク２０４のＭｙＡｆｆｉｎｉｔｙパラメータを識別する。ＣＰ１２４がタスク２０４を識別した場合には、フローチャートは、動作５０８に進む。そうでない場合には、フローチャート５００は終了する。
【０１０１】
動作５０８では、セマフォブロック２０６は、キュー２０２およびＣＰＵ同期化モジュール２１０を同期する。
【０１０２】
動作５１０では、ＣＰ１２４は、キュー２０２からタスク２０４を取り出す。
【０１０３】
動作５１２では、ＣＰ１２４は、ＳＰＩ２０８へタスク２０４を送る。
【０１０４】
動作５１４では、ＳＰＩ２０８は、シェーダコア１２２でのタスク２０４の処理に必要なリソースを決定する。
【０１０５】
動作５１６において、タスク２０４は、シェーダコア１２２上で処理される。
【０１０６】
図６は、キュー２０２からタスク２０４を取り出すＡＰＤデキューイングモジュール２１０の例示的実施形態のフローチャート６００である。
【０１０７】
動作６０２において、ＣＰＵ１０２は、キュー２０２からタスク２０４を要求する。
【０１０８】
動作６０４において、ＣＰＵデキューイングモジュール２１２は、処理を必要とし、且つ、ＣＰＵ１０２で処理することができるタスク２０４を識別する。例えば、ＣＰ１２４は、タスク２０４のＭｙＡｆｆｉｎｉｔｙパラメータの値を識別する。一実施形態において、ＣＰ１２４は、キュー２０２から取り出されるようにスケジュールされたタスク２０４のＭｙＡｆｆｉｎｉｔｙパラメータを識別する。ＣＰＵデキューイングモジュール２１２がタスク２０４を識別した場合には、フローチャートは動作６０６に進み、識別しなかった場合には、フローチャートは終了する。
【０１０９】
動作６０６において、ＣＰＵ同期化モジュール２１２は、キュー２０２およびＡＰＤ１０４を同期する。その結果、ＣＰＵデキューイングモジュール２１２のみが、キュー２０２に対するアクセスを有するようになる。
【０１１０】
動作６０８において、ＣＰＵデキューイングモジュール２１２は、本明細書に記載したように、キュー２０２からタスク２０４を取り出し、ＣＰＵ１０２で処理するためのタスク２０４を送る。
【０１１１】
動作６１０において、ＣＰＵ１０２は、タスク２０４を処理する。
【０１１２】
図７は、分散環境においてＡＰＤ１０４上の処理のためのキュー２０２からタスク２０４を除去するＡＰＤデキューイングモジュールの例示的な実施形態のフローチャート７００である。
【０１１３】
動作７０２において、ＡＰＤ１０４は、動作５０２に記載したように、処理を必要とするタスク２０４を要求する。
【０１１４】
動作７０６において、ＡＰＤ１０４は、タスク２０４用の要求を、ＡＰＤドライバモジュール３０２に送る。
【０１１５】
動作７０８において、ＡＰＤドライバモジュール３０２は、ＡＰＤデキューイングモジュール３０４に対して、当該要求を送る。
【０１１６】
動作７１０において、ＡＰＤデキューイングモジュール３０４は、処理を必要とし、且つ、動作５０６に記載したようにＡＰＤ１０４で処理できるタスクを識別する。
【０１１７】
動作７１２において、セマフォブロック２０６は、動作５０８に記載したように、キュー２０２およびＣＰＵ同期化モジュール２１０を同期する。
【０１１８】
動作７１４において、ＡＰＤデキューイングモジュール３０４は、動作５１０に記載したように、ＡＰＤ１０４で処理するためのタスク２０４をキューから取り出し、当該タスク２０４をＡＰＤドライバモジュール３０２に送る。
【０１１９】
動作７１６において、ＡＰＤドライバモジュール３０２は、タスク２０４をＡＰＤ１０４に送り、タスク２０４は、動作５０８〜５１２に記載したように処理される。
【０１２０】
本発明の様々な実施態様は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせにより実行することができる。例えば、図５の５００、図６の６００、図７の７００のフローチャートにより例示される方法は、図１の統一されたコンピューティングシステム１００において実行することができる。本発明の様々な実施態様は、この例の統一されたコンピューティングシステム１００の用語において記述される。他のコンピューティングシステムおよび／またはコンピュータアーキテクチャを用いて本発明を実行する方法は、当業者にとって明らかである。
【０１２１】
本テキストにおいて、用語「コンピュータプログラム媒体」および「コンピュータ使用可能媒体」は、一般的に、着脱可能な記憶ユニットまたはハードディスクドライブなどの媒体を意味して使用される。コンピュータプログラム媒体およびコンピュータ使用可能媒体は、同様に、システムメモリ１０６およびグラフィックメモリ１３０などのメモリをも意味し、メモリ半導体（例えば、ＤＲＡＭなど）であってもよい。これらのコンピュータプログラム製品は、統一されたコンピューティングシステム１００に対してソフトウェアを提供する意味を有する。
【０１２２】
本発明は、同様に、いずれかのコンピュータ使用可能媒体に記憶されるソフトウェアを含むコンピュータプログラム製品を対象とする。上記ソフトウェアは、１つ以上のデータ処理デバイスにて実行されると、当該データ処理デバイスを、本明細書に記載したように動作させるか、あるいは、上述したように、本明細書に記載した本発明の実施形態を実施するために、コンピューティングデバイス（例えば、ＡＳＩＣまたはプロセッサなど）の合成／製造を可能にする。本発明の実施形態は、現在または将来知られる、いずれかのコンピュータ使用可能または可読媒体を使用する。コンピュータ使用可能媒体の例は、限定するものではないが、一次記憶装置デバイス（例えば、いずれかの種類のランダムアクセスメモリ）、二次記憶装置デバイス（例えば、ハードドライブ、フロッピー（登録商標）ディスク、ＣＤＲＯＭ、ＺＩＰディスク、テープ、磁性記憶デバイス、光学記憶デバイス、ＭＥＭＳ、ナノテクノロジー記憶デバイスなど）および通信媒体（例えば、有線およびワイヤレスネットワーク、ローカルエリアネットワーク、広域ネットワーク、イントラネットなど）を含む。
【０１２３】
本発明の様々な実施形態が上述したように説明されており、限定するものではないが、例のみの方法により表されることが理解されるべきである。添付された請求項に定義される本発明の趣旨および範囲から逸脱することなく、形態および詳細における多様な変化が作成されることは、関連する当業者に理解されるものである。本発明は、これらの例に限定されるものではない。本発明は、本明細書に記載したようにいずれかの構成要素の作動に適用可能である。したがって、本発明の範囲は、上述の代表的な実施形態のいずれよっても限定されるものではなく、以下の特許請求項およびそれらの均等物にしたがって定められるべきである。
【図１Ａ】
2014508982.tif 000003
【図１Ｂ】
2014508982.tif 000004
【図２】
2014508982.tif 000005
【図３】
2014508982.tif 000006
【図４】
2014508982.tif 000007
【図５】
2014508982.tif 000008
【図６】
2014508982.tif 000009
【図７】
2014508982.tif 000010
【国際調査報告】
2014508982.tif 000011