(57)【特許請求の範囲】
【請求項１】
複数の記憶場所を含むグラフィックス処理装置（ＧＰＵ）を備え、
前記ＧＰＵに実装された複数の仮想ＧＰＵの各仮想ＧＰＵに関して、前記複数の記憶場所の対応する記憶場所が、中間結果を記憶するように構成された第１及び第２の記憶域を含み、
前記第１及び第２の記憶域がそれぞれ、その仮想ＧＰＵの１又はそれ以上の未完了の頂点処理動作の実行を再開するために使用可能な、その仮想ＧＰＵに対応する中間頂点処理結果、及びその仮想ＧＰＵの１又はそれ以上の未完了の画素処理動作の実行を再開するために使用可能な、その仮想ＧＰＵに対応する中間画素処理結果を記憶するように構成され、
前記ＧＰＵが、前記１又はそれ以上の未完了の頂点処理動作をスレッド単位で再開するように構成されるとともに、前記１又はそれ以上の未完了の画素処理動作をスレッド単位で再開するように構成され、
前記ＧＰＵは、該ＧＰＵに実装された前記複数の仮想ＧＰＵのそれぞれの仮想アドレス空間を物理メモリにマッピングし、
前記ＧＰＵは、前記複数の仮想ＧＰＵのうち優先度の高い仮想ＧＰＵに関する仮想アドレス範囲には、前記物理メモリの所定の大きさ以上の部分を割り当てる一方で、優先度の低い仮想ＧＰＵに関する仮想アドレス範囲には、前記物理メモリの所定の大きさを越えない部分を割り当てることを特徴とする装置。
【請求項２】
前記複数の仮想ＧＰＵの各々の前記第１及び第２の記憶域がそれぞれ、前記ＧＰＵ内のそれぞれの複数の異なる場所にわたって分散される、
ことを特徴とする請求項１に記載の装置。
【請求項３】
前記ＧＰＵが、
複数のＧＰＵコマンドを記憶するように構成されたコマンドバッファと、
１又はそれ以上の実行ユニットと、
をさらに含み、前記装置が、所与のＧＰＵコマンドに対応する１又はそれ以上の命令を、前記所与のＧＰＵコマンドの優先レベルに基づいて前記１又はそれ以上の実行ユニットに転送するように構成される、
ことを特徴とする請求項１に記載の装置。
【請求項４】
前記ＧＰＵに実装された前記複数の仮想ＧＰＵのそれぞれが独自の優先レベルを有し、前記複数のＧＰＵコマンドのそれぞれが、前記ＧＰＵに実装された前記複数の仮想ＧＰＵのうちの対応する仮想ＧＰＵの前記優先レベルに基づく優先レベルを有する、
ことを特徴とする請求項３に記載の装置。
【請求項５】
前記ＧＰＵが、前記複数のＧＰＵコマンドの１又はそれ以上に対応する命令を記憶するように構成された１又はそれ以上の命令バッファをさらに含み、該１又はそれ以上の命令バッファが、前記複数のＧＰＵコマンドの前記１又はそれ以上に対応する前記命令の各々に関して、前記複数の仮想ＧＰＵのうちのその命令に対応する仮想ＧＰＵの識別情報を示す情報を記憶するように構成される、
ことを特徴とする請求項３に記載の装置。
【請求項６】
前記ＧＰＵが、前記複数の仮想ＧＰＵのうちの第１の仮想ＧＰＵに対し、当該第１の仮想ＧＰＵの仮想アドレス範囲全体に対応する物理メモリ量を割り当てる一方で、第２の仮想ＧＰＵに対し、当該第２の仮想ＧＰＵの仮想アドレス範囲のほんの一部に対応する物理メモリ量を割り当てる、ように構成される、
ことを特徴とする請求項１に記載の装置。
【請求項７】
グラフィックス処理装置（ＧＰＵ）であって、
複数の仮想ＧＰＵを実装するように構成された１又はそれ以上の回路を備え、該回路のそれぞれが、１又はそれ以上のＧＰＵコマンドを記憶するように構成された１又はそれ以上の対応する命令バッファと、実行結果を記憶するように構成された１又はそれ以上の対応する記憶場所とを含み、
タスクマネージャと、
供給ユニットと、
メモリマネージャーと、
１又はそれ以上の実行ユニットと、
をさらに備え、
前記タスクマネージャが、第１の優先レベルを有する第１のＧＰＵコマンドに対応する１又はそれ以上のスレッドを生成するように構成され、
前記供給ユニットが、所与のスレッドを、該所与のスレッドの優先レベルに応じて前記１又はそれ以上の実行ユニットに転送するように構成され、
前記優先レベルが、前記複数の仮想ＧＰＵのうちの１つの識別情報に基づいており、
前記メモリマネージャーは、第１の仮想ＧＰＵに関する第１の優先レベルに基づき、前記複数の仮想ＧＰＵのうちの第１の仮想ＧＰＵに対する第１の仮想アドレス範囲として、前記物理メモリの第１の部分を割り当てる一方で、第２の仮想ＧＰＵに関する第２の優先レベルに基づき、前記複数の仮想ＧＰＵのうちの第２の仮想ＧＰＵに対する第２の仮想アドレス範囲として、前記物理メモリの第２の部分を割り当てる、ことを特徴とするグラフィックス処理装置（ＧＰＵ）。
【請求項８】
前記１又はそれ以上の実行ユニットが、第１の種類の第１の実行ユニットと、第２の種類の第２の実行ユニットとを含み、
前記供給ユニットが、前記所与のスレッドを実行するために使用される実行ユニットの種類を示す情報に基づいて、前記所与のスレッドを転送するように構成される、
ことを特徴とする請求項７に記載のグラフィックス処理装置。
【請求項９】
前記供給ユニットが、前記第１の実行ユニットによって実行されるのを待っている高い優先度のスレッドが存在しないという指示に基づいて、より低い優先レベルのスレッドを前記１又はそれ以上の実行ユニットのうちの第１の実行ユニットへ転送するように構成されることを特徴とする請求項７に記載のグラフィックス処理装置。
【請求項１０】
前記複数の仮想ＧＰＵのそれぞれに関して、前記対応する１又はそれ以上の記憶場所が、１又はそれ以上のレジスタ、及びプログラムカウンタ値を含む、
ことを特徴とする請求項８に記載のグラフィックス処理装置。
【請求項１１】
複数の仮想ＧＰＵを実装するグラフィックス処理装置（ＧＰＵ）が、第１のＧＰＵコマンドに対応する第１のスレッドを、第２のＧＰＵコマンドに対応する第２のスレッドを実行する前に実行するステップを含み、
前記第１のＧＰＵコマンドが、前記複数の仮想ＧＰＵのうちの第１の仮想ＧＰＵに対応するとともに、前記複数の仮想ＧＰＵのうちの前記第１の仮想ＧＰＵの識別情報に基づく第１の優先レベルを有し、
前記第２のＧＰＵコマンドが、前記複数の仮想ＧＰＵのうちの第２の仮想ＧＰＵに対応するとともに、前記複数の仮想ＧＰＵのうちの前記第２の仮想ＧＰＵの識別情報に基づく第２の優先レベルを有し、
前記ＧＰＵが前記第２のスレッドを実行する前に前記第１のスレッドを実行する前記ステップが、前記第１の優先レベルが前記第２の優先レベルよりも高いことに基づいており、
前記ＧＰＵは、前記複数の仮想ＧＰＵのそれぞれの仮想アドレス空間を物理メモリにマッピングし、
前記ＧＰＵは、前記物理メモリの所定の大きさ以上の部分を、前記複数の仮想ＧＰＵのうち優先度の高い仮想ＧＰＵに関する仮想アドレス範囲のために使用されるよう割り当てる一方で、前記物理メモリの所定の大きさを越えない部分を、優先度の低い仮想ＧＰＵに関する仮想アドレス範囲のために使用されるよう割り当てる、
ことを特徴とする方法。
【請求項１２】
前記ＧＰＵが、前記第２の優先レベルよりも高い優先レベルを有する実行されるのを待っているＧＰＵコマンドが他に存在しないという指示に基づいて、前記第２のスレッドを実行するステップをさらに含む、
ことを特徴とする請求項１１に記載の方法。
【請求項１３】
前記第１のＧＰＵコマンドに対応する全てのスレッドの実行を完了する前に、第３のＧＰＵコマンドに対応する第３のスレッドを実行するステップをさらに含み、前記第３のスレッドを実行するステップが、前記第１の優先レベルよりも高い第３の優先レベルに基づき、前記第３の優先レベルが、前記ＧＰＵに実装された前記複数の仮想ＧＰＵのうちの前記第３のＧＰＵコマンドが対応する仮想ＧＰＵの識別情報に基づく、
ことを特徴とする請求項１１に記載の方法。
【請求項１４】
前記ＧＰＵが、前記第１及び第２の優先レベルを指定する情報を中央処理装置から受け取るステップをさらに含む、
ことを特徴とする請求項１１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィックス処理装置（ＧＰＵ）に関し、より詳細には、複数のＧＰＵコマンドの効率的な実行を可能にする構造及び技術に関する。
【背景技術】
【０００２】
様々な計算タスクを実行するために、ＧＰＵを使用することができる。ＧＰＵは、例えば、画面上に表示すべき画素を計算することができ、またアニメーションレンダリング及び一般的ベクトル計算などの、その他の集中的な演算を行うこともできる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ＧＰＵは、時折、１又はそれ以上の実行ユニットが何の計算も行わない「停止時間」（ストール期間）を経験することがある。停止時間は、メモリにアクセスするときに、例えば、実行ユニットが新たなデータの到着を待っているという理由で発生することがある。従って、時には、１又はそれ以上のＧＰＵ実行ユニットがアイドル状態になることがある。
【０００４】
さらに、ＧＰＵが第１のプログラムを実行中の場合、第２のプログラムに待つ必要が生じることがある。第２のプログラムは、第１のプログラムが（メモリアクセス中などに）ストールしている間にも待たざるを得ないことがある。第１のプログラムがストールしている間は、アイドル中のＧＰＵ実行ユニットを第２のプログラムが使用することが有利と思われるが、第２のプログラムに切り替えを行う間接費が極めて高いものになり得る。すなわち、第１のプログラムのストール中に第２のプログラムを実行するようにＧＰＵを設定すると、あまりに多くの時間及び努力（すなわち、消費電力）が掛かって割に合わないことがある。従って、第１のプログラムがストールしている間、ＧＰＵ実行ユニットはアイドル状態を保つことがある。
【０００５】
従って、特に複数の計算タスクが行われている環境では、ＧＰＵの実行が非効率的になることがある。
【課題を解決するための手段】
【０００６】
本明細書では、ＧＰＵが、特に複数の計算タスク（又はコマンド）を処理しているときに、より効率的に、及び少ない停止時間で命令を実行できるようにする構造及び技術について説明する。１つの実施形態では、単一のＧＰＵ構造内に複数の仮想ＧＰＵを実装することによってこれらの利点がもたらされる。仮想ＧＰＵは、同じＧＰＵハードウェア（実行ユニットなど）を共有できる一方で、計算結果は仮想ＧＰＵごとに別個に記憶される。
【０００７】
仮想ＧＰＵは、コストが高くなり得るコンテキスト切り替えをしのぐ利点をもたらすことができる。例えば、第１のプログラムから第２のプログラムにコンテキスト切り替えを行うと、第２のプログラムが実行される前に全ての結果及び全ての状態情報がＧＰＵから消去される恐れがある。従って、コンテキスト切り替えは、全てのレジスタ値、プログラムカウンタ及び（メモリからの作業データなどの）その他の値を外部記憶装置にコピーするステップを含むことがある。これらのコピー作業には時間が掛かり、電力も消費する（これにより、バッテリ式のモバイル装置に特にマイナスの影響が生じることがある）。
【０００８】
ＧＰＵのコンテキスト切り替えのコストは、コンテキスト切り替えをいつ行うかによって異なると考えられる。例えば、フレーム境界間又は多角形境界間のコンテキスト切り替えには、それほどコストが掛からないと考えられる。これは、外部記憶装置に転送すべき中間状態情報が少なくて済むからである。しかしながら、フレーム又は多角形の境界上でのみコンテキスト切り替えを行えば、コストはそれほど掛からないかもしれないが、粒度制御が不十分になる恐れがある。例えば、フレームが毎秒２０コマで描かれている場合、ＧＰＵがフレーム境界に達して別のタスクへのコンテキスト切り替えを行うのに最大５０ミリ秒（さらにはもっと長い時間）掛かる場合がある。
【０００９】
仮想ＧＰＵは、完全なコンテキスト切り替えを行うコストを伴わずに異なるプログラムのための命令を実行することを可能にすることができる。１つの実施形態では、ＧＰＵハードウェアのいくつかの部分を複製し、これらの複製部分を処理するための追加の制御構造を加えることによってこれが行われる。仮想ＧＰＵは、異なるプログラムのためのＧＰＵ命令をより小さな時間「ウィンドウ」内で実行できるようにすることにより、より細かい粒度で実行の制御を行ってＧＰＵハードウェアをより効率的に使用することもできる。例えば、第１のプログラムが使用中のＧＰＵ実行ユニットは、メモリからデータが取り出される間ストールせざるを得ない場合がある。このストール期間中、実行ユニットはアイドル状態となる。このストール期間は、あまりにも短い場合があるので、完全なコンテキスト切り替えを行うとけた違いのコストが掛かる。ところが、コストの低い仮想ＧＰＵ間で切り替えを行えば、実行ユニットを遊ばせる代わりに（異なる仮想ＧＰＵのための）異なる命令を実行できるようにすることができる。従って、仮想ＧＰＵを実装すると、ＧＰＵ実行ユニットの停止時間を減らすことができる。
【００１０】
しかしながら、本開示及び添付の特許請求の範囲の教示は、上記の発明の概要で説明した特徴、実施形態及び／又は利点によって明確に限定されるものではない。
【図面の簡単な説明】
【００１１】
【図１】集積回路の実施形態のブロック図である。
【図２】複数の仮想ＧＰＵを実装するＧＰＵの実施形態のブロック図である。
【図３】複数の仮想ＧＰＵを実装するＧＰＵ実施形態の別のブロック図である。
【図４】複数のＧＰＵスレッドを実行できる方法の１つの実施形態のフローチャートである。
【図５】システムの１つの実施形態のブロック図である。
【発明を実施するための形態】
【００１２】
本明細書は、「１つの実施形態」又は「ある実施形態」に対する言及を含む。「１つの実施形態では」又は「ある実施形態では」という表現が現れても、必ずしも同じ実施形態を示すわけではない。特定の特徴、構造、又は特性を、本開示と矛盾しないいずれかの好適な方法で組み合わせることができる。
【００１３】
以下の段落では、（添付の特許請求の範囲を含めて）本開示で目にする用語の定義及び／又は文脈を示す。
【００１４】
「備える」。この用語は包括的なものである。本明細書で使用する場合、この用語は、さらなる構造又はステップを除外するものではない。「．．．グラフィックス処理装置（ＧＰＵ）を備える装置」という記載の請求項について検討する。このような請求項は、装置が（中央処理装置、メモリコントローラ、インターフェイス回路などの）さらなる構成要素を含むことを除外するものではない。
【００１５】
「ように構成される」。様々なユニット、回路、又はその他の構成要素について、１又は複数のタスクを実行する「ように構成される」という形で説明又は特許請求することがある。このような文脈では、ユニット／回路／構成要素が、動作中にこれらの１又は複数のタスクを実行する構造（回路など）を含むことを示すことによって構造を暗示するために、「ように構成される」を使用している。従って、これらのユニット／回路／構成要素は、指定のユニット／回路／構成要素が現在動作中でない（例えば、オンでない）ときでもタスクを実行するように構成されている、と言うことができる。「ように構成される」という表現を使用するユニット／回路／構成要素は、例えば、回路、動作を実施するように実行可能なプログラム命令を記憶するメモリなどのハードウェアを含む。ユニット／回路／構成要素が１又はそれ以上のタスクを実行する「ように構成される」と記載している場合、そのユニット／回路／構成要素に対して米国特許法１１２条第６項を行使しないことが明確に意図されている。また、「ように構成される」は、ソフトウェア及び／又はファームウェア（例えば、ソフトウェアを実行するＦＰＧＡ又は汎用プロセッサ）により、未解決の（単複の）タスクを実行できる形で動作するように操作される一般的構造（例えば、一般的回路）を含むことができる。「ように構成される」は、（半導体製作施設などの）ある製造工程を、１又はそれ以上のタスクを実施又は実行するようになっているデバイス（例えば、集積回路）を製作するように適合させることを含むこともできる。
【００１６】
「第１の」、「第２の」、など。本明細書で使用する場合、これらの用語は、後続する名詞のラベルとして使用され、特に明記しない限り、（空間的、時間的、論理的などの）いかなる種類の順序を意味するものでもない。例えば、「第１の」スレッド及び「第２の」スレッドは、任意の２つスレッドを示すために使用することができ、（例えば）一方のスレッドが他方のスレッドよりも前又は後に生成されたことを意味するものではない。換言すれば、「第１の」及び「第２の」は記述子である。
【００１７】
「に基づいて」。
本明細書で使用する場合、この用語は、決定に影響を与える１又はそれ以上の因子を記述するために使用される。この用語は、さらなる因子が決定に影響を与えることを除外するものではない。すなわち、決定は、これらの因子にのみ基づくこともあり、或いはこれらの因子に少なくとも部分的に基づくこともある。「Ｂに基づいてＡを決定する」という表現について検討する。Ｂは、Ａの決定に影響を与える因子であり得るが、このような表現は、Ａの決定がＣに基づくものであることを除外するものではない。しかしながら、他の例では、ＡがＢのみに基づいて決定されることもある。
【００１８】
集積回路
ここで図１を参照すると、システム５の１つの実施形態のブロック図を示している。図１の実施形態では、システム５が、外部メモリ１２Ａ〜１２Ｂに結合された集積回路（ＩＣ）１０を含む。図示の実施形態では、集積回路１０が中央処理装置（ＣＰＵ）ブロック１４を含み、このＣＰＵブロック１４は、１又はそれ以上のプロセッサ１６及びレベル２（Ｌ２）キャッシュ１８を含む。他の実施形態は、Ｌ２キャッシュ１８を含まないこともあり、及び／又はさらなるレベルのキャッシュを含むこともできる。また、２つよりも多くのプロセッサ１６を含む実施形態、及び１つのプロセッサ１６のみを含む実施形態も想定される。集積回路１０は、１又はそれ以上の非リアルタイム（ＮＲＴ）周辺機器の組２０、及び１又はそれ以上のリアルタイム（ＲＴ）周辺機器の組２２をさらに含む。図示の実施形態では、ＣＰＵブロック１４が、ブリッジ／ダイレクトメモリアクセス（ＤＭＡ）コントローラ３０に結合され、このＤＭＡコントローラ３０を、１又はそれ以上の周辺装置３２及び／又は１又はそれ以上の周辺インターフェイスコントローラ３４に結合することができる。様々な実施形態では、周辺装置３２及び周辺インターフェイスコントローラ３４の数が、ゼロからいずれかの所望の数まで様々であってよい。図１に示すシステム５は、Ｇ０  ３８Ａ及びＧ１  ３８Ｂなどの１又はそれ以上のグラフィックスコントローラを含むグラフィックスユニット３６をさらに含む。他の実施形態では、グラフィックスユニット当たりのグラフィックスコントローラの数及びグラフィックスユニットの数が異なることもある。図１に示すように、システム５は、１又はそれ以上のメモリ物理インターフェイス回路（ＰＨＹ）４２Ａ〜４２Ｂに結合されたメモリコントローラ４０を含む。メモリＰＨＹ４２Ａ〜４２Ｂは、集積回路１０のピン上でメモリ１２Ａ〜１２Ｂに通信するように構成される。メモリコントローラ４０は、ポートの組４４Ａ〜４４Ｅも含む。ポート４４Ａ〜４４Ｂは、グラフィックスコントローラ３８Ａ〜３８Ｂにそれぞれ結合される。ポート４４Ｃには、ＣＰＵブロック１４が結合される。ポート４４Ｄ〜４４Ｅには、ＮＲＴ周辺機器２０及びＲＴ周辺機器２２がそれぞれ結合される。他の実施形態では、メモリコントローラ４０に含まれるポートの数が、メモリコントローラの数と同様に異なることもある。すなわち、図１に示すよりも多くの又は少ないポートが存在してもよい。他の実施形態では、メモリＰＨＹ４２Ａ〜４２Ｂ及び対応するメモリ１２Ａ〜１２Ｂの数が１つの場合もあり、又は２つより多い場合もある。
【００１９】
一般に、ポートは、１又はそれ以上のソースと通信するための、メモリコントローラ４０上の通信ポイントとすることができる。場合によっては、ポートを、あるソース専用にすることができる（例えば、ポート４４Ａ〜４４Ｂを、それぞれグラフィックスコントローラ３８Ａ〜３８Ｂ専用にすることができる）。別の場合には、複数のソース間でポートを共有することができる（例えば、プロセッサ１６はＣＰＵポート４４Ｃを共有することができ、ＮＲＴ周辺機器２０はＮＲＴポート４４Ｄを共有することができ、ＲＴ周辺機器２２はＲＴポート４４Ｅを共有することができる）。各ポート４４Ａ〜４４Ｅは、それぞれのエージェントと通信するためにインターフェイスに結合される。このインターフェイスは、（バス、ポイントツーポイントインターコネクトなどの）いずれの種類の通信媒体であってもよく、いずれのプロトコルを実装してもよい。メモリコントローラとソースの間の相互接続は、メッシュ、チップファブリック上のネットワーク、共有バス、ポイントツーポイント相互接続などの、他のあらゆる所望の相互接続を含むこともできる。
【００２０】
プロセッサ１６は、あらゆる命令セットアーキテクチャを実行することができ、その命令セットアーキテクチャで定義される命令を実行するように構成することができる。プロセッサ１６は、スカラ、スーパースカラ、パイプライン、スーパーパイプライン、アウトオブオーダ、インオーダ、スペキュレーティブ、ノンスペキュレーティブなど、又はこれらの組み合わせを含むあらゆるマイクロアーキテクチャを採用することができる。プロセッサ１６は回路を含むことができ、任意にマイクロコーディング技術を実装することができる。プロセッサ１６は、１又はそれ以上のレベル１キャッシュを含むことができ、従ってキャッシュ１８はＬ２キャッシュである。他の実施形態は、プロセッサ１６内に複数レベルのキャッシュを含むことができ、キャッシュ１８を、階層内の次に低いレベルとすることができる。キャッシュ１８は、あらゆるサイズ及び（セットアソシアティブ、ダイレクトマップなどの）あらゆる構成を採用することができる。
【００２１】
グラフィックスコントローラ３８Ａ〜３８Ｂは、いずれの図形処理回路であってもよい。一般に、グラフィックスコントローラ３８Ａ〜３８Ｂは、フレームバッファ内に表示すべきオブジェクトをレンダリングするように構成することができる。グラフィックスコントローラ３８Ａ〜３８Ｂは、グラフィックス動作の一部又は全部、及び／又はいくつかのグラフィックス動作のハードウェア加速を行うように図形処理ソフトウェアを実行できるグラフィックスプロセッサを含むことができる。ハードウェア加速及びソフトウェア実行の量は、実施形態によって異なることがある。いくつかの実施形態では、グラフィックスユニット３６及び／又はグラフィックスコントローラ３８Ａ〜３８Ｂが、以下で説明するようなグラフィックス処理装置５０の特徴の一部又は全部を含むことができる。
【００２２】
ＮＲＴ周辺機器２０は、性能及び／又は帯域幅上の理由でメモリ１２Ａ〜１２Ｂに単独でアクセスできるいずれかの非リアルタイム周辺機器を含むことができる。すなわち、ＮＲＴ周辺機器２０によるアクセスはＣＰＵブロック１４とは無関係であり、ＣＰＵブロックメモリの動作と並行して進むことができる。周辺機器３２などの他の周辺機器、及び／又は周辺インターフェイスコントローラ３４によって制御される周辺インターフェイスに結合された周辺機器も非リアルタイム周辺機器とすることができるが、メモリへの単独アクセスは必要ではないこともある。ＮＲＴ周辺機器２０の様々な実施形態は、ビデオエンコーダ及びデコーダ、スケーラ回路、画像圧縮及び／又は解凍回路などを含むことができる。
【００２３】
ＲＴ周辺機器２２は、メモリ待ち時間のためのリアルタイム要件を有するあらゆる周辺機器を含むことができる。例えば、ＲＴ周辺機器は、画像プロセッサ及び１又はそれ以上の表示パイプを含むことができる。表示パイプは、１又はそれ以上のフレームをフェッチし、これらのフレームを混合して表示画像を作成する回路を含むことができる。表示パイプは、１又はそれ以上のビデオパイプラインをさらに含むことができる。表示パイプの結果として、ディスプレイ画面上に表示すべき画素ストリームを生じることができる。この画素値を、ディスプレイ画面上に表示するためにディスプレイコントローラへ送信することができる。画像プロセッサは、カメラデータを受け取り、このデータを画像に処理してメモリに記憶することができる。
【００２４】
ブリッジ／ＤＭＡコントローラ３０は、（単複の）周辺機器３２及び（単複の）周辺インターフェイスコントローラ３４をメモリ空間にブリッジするための回路を含むことができる。図示の実施形態では、ブリッジ／ＤＭＡコントローラ３０が、メモリ動作を、周辺機器／周辺インターフェイスコントローラからＣＰＵブロック１４を介してメモリコントローラ４０にブリッジすることができる。ＣＰＵブロック１４は、このブリッジされたメモリ動作と、プロセッサ１６／Ｌ２キャッシュ１８からのメモリ動作との間の一貫性を維持することもできる。Ｌ２キャッシュ１８は、このブリッジされたメモリ動作とプロセッサ１６からのメモリ動作の仲裁を行って、ＣＰＵインターフェイス上でＣＰＵポート４４Ｃへ送信されるようにすることもできる。ブリッジ／ＤＭＡコントローラ３０は、周辺機器３２及び周辺インターフェイスコントローラ３４の代わりにＤＭＡ動作を提供して、メモリとの間でデータブロックを転送することもできる。より詳細には、ＤＭＡコントローラを、周辺機器３２及び周辺インターフェイスコントローラ３４の代わりに、メモリコントローラ４０を介してメモリ１２Ａ〜１２Ｂとの間で転送を行うように構成することができる。プロセッサ１６は、ＤＭＡコントローラを、ＤＭＡ動作を実行するようにプログラムすることができる。例えば、記述子を介してＤＭＡコントローラをプログラムすることができる。この記述子は、メモリ１２Ａ〜１２Ｂに記憶された、ＤＭＡ転送（ソース及び宛先アドレス、サイズなど）を記述するデータ構造とすることができる。或いは、ＤＭＡコントローラ内のレジスタ（図示せず）を介してＤＭＡコントローラをプログラムすることもできる。
【００２５】
周辺機器３２は、集積回路１０上に含まれるあらゆる所望の入力／出力装置又はその他のハードウェア装置を含むことができる。例えば、周辺機器３２は、イーサネット（登録商標）ＭＡＣ又はワイヤレスフィディリティ（ＷｉＦｉ）コントローラなどの１又はそれ以上のネットワーク媒体アクセスコントローラ（ＭＡＣ）などのネットワーク周辺機器を含むことができる。周辺機器３２には、様々なオーディオ処理装置を含むオーディオユニットを含めることもできる。周辺機器３２には、１又はそれ以上のデジタル信号プロセッサを含めることもできる。周辺機器３２は、タイマ、オンチップ秘密メモリ、暗号化エンジンなど、又はこれらのいずれかの組み合わせなどの、他のあらゆる所望の機能を含むことができる。
【００２６】
周辺インターフェイスコントローラ３４は、あらゆる種類の周辺インターフェイスのためのあらゆるコントローラを含むことができる。例えば、周辺インターフェイスコントローラは、ユニバーサルシリアルバス（ＵＳＢ）コントローラ、周辺コンポーネント相互接続エクスプレスコントローラ（ＰＣＩｅ）、フラッシュメモリインターフェイス、汎用入力／出力（Ｉ／Ｏ）ピンなどの様々なインターフェイスコントローラを含むことができる。
【００２７】
メモリ１２Ａ〜１２Ｂは、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３、など）ＳＤＲＡＭ（ｎｉＤＤＲ３などのモバイルバージョンのＳＤＲＡＭ及び／又はＬＰＤＤＲ２などの低電力バージョンのＳＤＲＡＭなどを含む）、ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）などのいずれの種類のメモリであってもよい。回路基板上に１又はそれ以上のメモリ素子を結合して、シングルインラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）などのメモリモジュールを形成することもできる。或いは、装置が、チップオンチップ構成、パッケージオンパッケージ構成、又はマルチチップモジュール構成の集積回路１０を搭載することもできる。
【００２８】
メモリＰＨＹ４２Ａ〜４２Ｂは、メモリ１２Ａ〜１２Ｂへの低水準物理インターフェイスに対応することができる。例えば、メモリＰＨＹ４２Ａ〜４２Ｂは、同期ＤＲＡＭメモリなどに正しい刻時を行うために、信号のタイミングに関与することができる。１つの実施形態では、メモリＰＨＹ４２Ａ〜４２Ｂを、集積回路１０内に設けられるクロックにロックするように構成するとともに、メモリ１２が使用するクロックを生成するように構成することができる。
【００２９】
なお、他の実施形態は、図１に示す構成要素の下位集合又は上位集合及び／又はその他の構成要素を含む、構成要素の他の組み合わせを含むことができる。図１には所与の構成要素の一例を示すことができるが、他の実施形態は、所与の構成要素の１又はそれ以上の例を含むことができる。同様に、この詳細な説明全体を通じて、たとえ１つの構成要素しか示していなくても、所与の構成要素の１又はそれ以上の例を含めることができ、及び／又はたとえ複数の例を示していても、１つの例しか含まない実施形態を使用することができる。
【００３０】
仮想ＧＰＵを実装するグラフィックス処理装置
ここで図２を参照すると、複数の仮想ＧＰＵを実装するグラフィックス処理装置（ＧＰＵ）５０の１つの実施形態をブロック図で示している。図２の実施形態では、ＧＰＵ５０が、インターフェイスロジックユニット６２、供給ユニット５８、タスクマネージャ５５、メモリマネージャ６４、及び１又はそれ以上の実行ユニット６０を含む。この実施形態では、ＧＰＵ５０が複数の仮想ＧＰＵ５２（ＶＧＰＵ）も含む。図示のように、各仮想ＧＰＵ５２は、１又はそれ以上の命令バッファ５４及び１又はそれ以上の記憶場所５６を含む。
【００３１】
図２には、様々な構造を互いに接続された形で示している。これらの接続は、バス、ポイントツーポイント伝送線、又は当業者に周知のその他のいずれの好適な接続であってもよい。ＧＰＵ５０内の構造間の接続又はインターフェイスを必ずしも全て示しているわけではない。従って、様々な実施形態では、図２に示す構造の一部又は全部を、必要に応じて１又はそれ以上の好適な接続によって図２内の他の構造の一部又は全部に接続することができる。
【００３２】
ＧＰＵ５０の様々な実施形態では、あらゆる数の仮想ＧＰＵ５２が存在することができる。図２の実施形態では、３つの仮想ＧＰＵ５２Ａ〜５２Ｃを含むＧＰＵ５０を示している。この実施形態では、１又はそれ以上の命令バッファ５４及び記憶場所５６のそれぞれの組が各仮想ＧＰＵに対応する。他の実施形態では、より多い又は少ない数のＶＧＰＵが存在することができる。
【００３３】
従って、異なる実施形態では（又は同じ実施形態内であっても）、ＶＧＰＵを実装するために使用される回路及び構造のレイアウトが異なることがある。例えば、（単複の）命令バッファ５４が、ＧＰＵ５０の異なる領域に位置してもよく、異なる下部構造を含んでもよい。１つの実施形態では、命令バッファ５４の１つがコマンドを記憶するように構成され、命令バッファ５４の別の１つがタスクを記憶するように構成され、命令バッファ５４のさらに別の１つがスレッドを記憶するように構成される。命令バッファの構成及び／又は割り当ても、同様に仮想ＧＰＵ間で異なることがある。従って、１つの実施形態では、第１の仮想ＧＰＵが、コマンド、タスク及びスレッドのための３つのそれぞれの命令バッファを有することができる一方で、別の仮想ＧＰＵは、異なる構成を使用することができる。（なお、一般に、「仮想ＧＰＵ」という用語は、例えばＧＰＵ内の、本明細書で説明するような仮想ＧＰＵの機能の全部又は一部を実現するように構成された１又はそれ以上の構造を意味することができる。ただし、いくつかの実施形態では、「複数の仮想ＧＰＵを実装するように構成された第１の回路又はＧＰＵ、．．．．」のように、仮想ＧＰＵが１又はそれ以上の特定の構造によって実装されると言うことができる。）
【００３４】
「コマンド」（又は「ＧＰＵコマンド」）という用語は、本明細書で使用する場合、ＧＰＵが実行するための上位レベルのコマンドを意味する。（すなわち、コマンドが１又はそれ以上の対応する命令を有することができるとしても、「コマンド」という用語は、例えば単一の３２ビット又は６４ビットコンピュータ命令を意味するものではない。）いくつかの実施形態では、ＣＰＵの１又はそれ以上のスレッド上で実行中のソフトウェアにより、ＧＰＵに対してＧＰＵコマンドを発行することができる。１つの実施形態では、このようなコマンドが、メモリへの１又はそれ以上のポインタを含むことができるＯｐｅｎＣＬ命令文である。例えば、ＧＰＵコマンドは、第１のメモリ位置に記憶された第１のマトリクスと、第２のメモリ位置に記憶された第２のマトリクスとのドット積を計算するようにＧＰＵに指示するＯｐｅｎＣＬ命令文であってもよい。他の多くの種類のコマンドが可能であり、これらは、１又はそれ以上の多角形をレンダリングすることなどのグラフィカルタスクに対応することができる。異なる実施形態では、コマンドが、いずれの数のフォーマット及び／又はコンピュータ言語のものであってもよい。いくつかの実施形態では、ＧＰＵが、（ＯｐｅｎＣＬ、ＯｐｅｎＧＬ、ＯｐｅｎＡＬ、又はその他の言語及び／又はプログラミングフレームワークなどの）複数の異なる種類又はスタイルのコマンドをサポートすることができる。いくつかの実施形態では、ＧＰＵコマンドが、ＧＰＵが接続されたＣＰＵ上で実行される特定の計算プロセス（又はスレッド）に対応することができる。
【００３５】
以下でさらに説明するように、いくつかの実施形態では、ＧＰＵコマンドが、これに関連する１又はそれ以上の対応する下位レベル「タスク」を有することができる。様々な実施形態では、「タスク」を、１又はそれ以上のスレッド及び／又は１又はそれ以上の命令にさらに分類（分割）することができる。例えば、段落４４〜４７を参照されたい。従って、１つの実施形態では、ＧＰＵコマンドが１又はそれ以上の対応するタスクを有し、各タスクが１又はそれ以上の対応するスレッドを有し、各スレッドが１又はそれ以上の命令を含む。
【００３６】
図２の実施形態では、インターフェイスロジック６２が、ＧＰＵが実行するためのコマンドを受け取ることができる。このようなコマンドは、ＣＰＵから受け取ることができ、メモリへのポインタ（すなわち、データへのポインタ及び／又は実行するためのさらなる命令）を含むことができる。インターフェイスロジック６２は、ＣＰＵに結果を伝えることができ、或いは計算結果の準備ができている旨をＣＰＵに別様に示すことができる（例えば、ロジック６２は、結果がメモリ内のある場所に記憶されいていつでも取り出せる旨をＣＰＵに知らせることができる）。従って、様々な実施形態では、インターフェイスロジック６２を、図１に示す（或いは計算装置又はコンピュータシステム内に別様に存在できるような）ＣＰＵ、メモリコントローラ、及び／又はその他の構造と直接通信するように構成することができる。図２に示すように、インターフェイスロジック６２は、１つの通信出接続部に結合されているが、他の構成も可能である（例えば、ロジック６２は、ＣＰＵとの接続部及びメモリ又はメモリコントローラとの別の接続部などを有することができる）。
【００３７】
いくつかの実施形態では、インターフェイスロジック６２が、特定の（着信）コマンドが対応するＶＧＰＵを示す情報を受け取るようにも構成される。すなわち、ロジック６２は、コマンドが属する（又は割り当てられる）ＶＧＰＵを示す情報を受け取ることができる。１つの実施形態では、この情報が、ＶＧＰＵの数をＮとする０〜（Ｎ−１）の数値を指定するビットフィールド内に示される。１つの実施形態では、このＶＧＰＵインジケータをＧＰＵコマンド自体の一部とすることができるのに対し、別の実施形態では、ＶＧＰＵインジケータを別個に（例えば、ＧＰＵコマンド内のポインタによって示されるメモリ位置に）記憶することができる。
【００３８】
様々な実施形態では、インターフェイスロジック６２及び／又はＶＧＰＵ５２を、このＶＧＰＵインジケータに基づいてＧＰＵコマンドを特定の命令バッファ５４にルーティングするように構成することができる。従って、ＶＧＰＵが８つ存在する実施形態では、特定のコマンドのビットフィールドが０１１の場合、このコマンドはＶＧＰＵ＃３の命令バッファにルーティングされ、異なるコマンドのビットフィールドが０００の場合、この異なるコマンドはＶＧＰＵ＃０の命令バッファにルーティングされる。（なお、いくつかの実施形態では、（単複の）命令バッファ５４を２又はそれ以上のＶＧＰＵ間で共有することができ、換言すれば、同じ命令バッファが異なるＶＧＰＵのコマンドを保持することができる。同様に、いくつかの実施形態では、（単複の）記憶場所５６を２又はそれ以上のＶＧＰＵ間で共有することができる。これらの共有構造を有する実施形態では、ＶＧＰＵの指示を、対応するデータ、コマンド又は命令とともに、アクセス可能な形で保持することができる。）これに基づき、各ＶＧＰＵ５２内の１又はそれ以上の命令バッファ５４を、実行すべき１又はそれ以上のコマンドを記憶するように構成することができる。様々な実施形態では、インターフェイスロジック６２が、ＣＰＵから受け取ったコマンドを適当なＶＧＰＵに、及び（単複の）命令バッファ５４の適当な１つに適切にルーティングするように構成される。
【００３９】
図２の実施形態では、ＧＰＵコマンドをタスクマネージャ５５によって処理することができる。この実施形態では、タスクマネージャ５５が、（単複の）命令バッファ５４の１つに記憶されたコマンドのＧＰＵによる実行を完了させるために、このコマンドに対応する１又はそれ以上のタスクを作成するように構成される。従って、タスクは、ＧＰＵコマンドよりも下位のレベルで指定される１又はそれ以上のコンピュータ動作を表すことができる。
【００４０】
例えば、１つの実施形態では、ＧＰＵコマンドが、指定した色及び立方体の縁部を定める８つの頂点の組に従って、赤色の立方体を描くように指定することができる。立方体の各面に関しては、その面の境界を計算するための異なるタスクを作成できる一方で、立方体の見える部分に陰影付け及び／又は着色するための１又はそれ以上の他のタスクを作成することができる。従って、タスクマネージャ５５により、１つのＧＰＵコマンドをあらゆる数のタスクに拡張することができる。
【００４１】
１つの実施形態では、タスクマネージャが、記憶された命令を読み込むことにより、ＧＰＵコマンドを１又はそれ以上のタスクに拡張（又は分割）する（すなわち、１つの実施形態では、所与のＧＰＵコマンドのタスクが予め指定される）。タスクマネージャ５５は、異なる種類のコマンドを処理するための特定のロジック（ハードウェア、ファームウェア、ソフトウェア、又はこれらの何らかの混合）を含むことができる。例えば、タスクマネージャ５５を、マトリクス乗算を指定するＯｐｅｎＣＬ命令に応答していくつかのタスクを作成する一方で、複数の多角形のシェーディングを行うべきであることを指定するＯｐｅｎＧＬ命令に応答して他の特定のタスクを作成するように構成することができる。所与のコマンドに関してタスクマネージャ５５が作成及び／又は管理するタスクの数は、コマンドの種類、そのパラメータ、及び／又はコマンドに伴う特定のメモリ内容に基づいて異なることがある（例えば、タスクは、特定のコマンドの特定のデータに依存することができる）。
【００４２】
いくつかの実施形態では、タスクマネージャ５５が、所与のタスクを、ＧＰＵ内の（単複の）実行ユニット６０の１又はそれ以上が処理するための１又はそれ以上のＧＰＵ実行「スレッド」に分割するように構成される。いくつかの実施形態では、ＧＰＵスレッドが、タスクより低いレベルでも実行される。例えば、赤色の立方体の目に見える面を完全にレンダリングするには、目に見える画素ごとに色値及び輝度値を計算する必要があり得る。様々な実施形態では、１つの画素又は（４×４の画素配列などの）一群の画素の輝度値を計算するために、１つのスレッドを実行することができる。従って、タスクマネージャ５５により、１つのＧＰＵタスクをあらゆる数のスレッドに拡張することができる。タスクマネージャ５５は、異なる種類のタスクのためのスレッド生成に対処する特定のロジック（ハードウェア、ファームウェア、ソフトウェア、又はこれらの何らかの混合）を含むことができる。いくつかの実施形態では、タスクとスレッドが全く同じものである（すなわち、これらの実施形態では、「タスク」の構成レベルが「スレッド」の構成レベルと同じであり、全てのタスクが１つのスレッドを含む）。１つの実施形態では、タスクマネージャが、メモリ内のある場所に記憶された命令を読み込むことにより、タスクを１又はそれ以上のスレッドに分割するように構成される（すなわち、タスクマネージャ５５を、記憶された命令を取り出すことにより、実行すべき１又はそれ以上のスレッドを生成するように構成することができる）。これに基づいて、１つの実施形態では、タスクマネージャ５５が、あるタスク及び／又はあるＧＰＵコマンドに対応する１又はそれ以上のスレッド及び／又は命令を生成するように構成される。
【００４３】
従って、１又はそれ以上の命令バッファ５４は、対応するＶＧＰＵのためのコマンド、タスク、スレッド、又はこれらのあらゆる組み合わせを記憶することができる。従って、１つの実施形態では、インターフェイスロジック６２によって特定のＧＰＵコマンドが受け取られ、１又はそれ以上の命令バッファ５４にルーティングされる。（この実施形態では、ＧＰＵコマンドを記憶するように構成された命令バッファを「コマンドバッファ」と呼ぶことができる。）次に、タスクマネージャ５５は、コマンドをいくつかの対応するタスクに変換及び／又は分割させることができ、これらの各々自体を、実行すべきあらゆる数のスレッド及び／又はより低いレベルの命令にさらに分割することができる。従って、その後、全てのＧＰＵコマンド、タスク、スレッド、及び／又は命令を、これらのコマンド、タスク、スレッド、及び／又は命令が対応するＶＧＰＵの（ビットフィールドなどの）識別情報を示す情報とともに、１又はそれ以上の命令バッファ５４に記憶することができる。しかしながら、ＶＧＰＵの識別情報はその他の形を取ることもでき、いくつかの実施形態では、これを構造上非明示的なものとすることができる（例えば、いくつかのビット線又は回路部分が信号を運んでおり、又は情報を記憶するために使用されているという単なる事実がＶＧＰＵの識別情報を表すことができる）。
【００４４】
あらゆるコマンド、タスク及び／又はスレッドに関し、１又はそれ以上の実行ユニット６０を通じて実行が進むにつれ、タスクマネージャ５５によって様々な情報を保持及び／又は更新することができる。このタスクマネージャ５５によって保持される情報は、プログラムカウンタ、ＶＧＰＵ識別子、及び特定のＶＧＰＵがアクセスを許可されている１又はそれ以上の（仮想及び／又は物理）アドレス範囲を示すアドレス空間情報を含むことができる。様々な実施形態では、明記していないその他の情報をタスクマネージャ５５によって保持及び／又は更新することもできる。（アドレス空間については、以下でメモリマネージャ６４にも関連してさらに説明するが、いくつかの実施形態では、もし異なるＶＧＰＵに重複したアドレス範囲が割り当てられた場合、計算ミスが生じる恐れがある。）
【００４５】
１つの実施形態では、ＧＰＵが、ＣＰＵスレッド当たり１つの仮想ＧＰＵをサポートすることができる。統合メモリシステムでは、これによりＣＰＵが計算作業をＧＰＵにきめ細かく引き渡せるようにすることができる。このような実施形態では、仮想ＧＰＵを、公正な共有優先度で時系列に並べ、又はＣＰＵスレッドの優先度に合わせることができる。（すなわち、１つの実施形態では、ＣＰＵ上のスレッドの優先レベルによって、ＧＰＵのコマンド、タスク、スレッド及び／又は命令の優先レベルが決まる。）１つの特定の実施形態では、ユーザインターフェイス（ＵＩ）命令、「定期的」命令、及びバックグラウンド命令のための３つの仮想ＧＰＵが存在する。この実施形態では、ＵＩの仮想ＧＰＵの優先度が「定期的」の仮想ＧＰＵに勝り、「定期的」の仮想ＧＰＵの優先度が「バックグラウンド」の仮想ＧＰＵに勝る。
【００４６】
ＶＧＰＵの選択及び優先順位付け
１又はそれ以上のスレッドの実行準備ができている場合、供給ユニット５８は、これらのスレッドを選択して（単複の）実行ユニット６０へ転送することができる。いくつかの実施形態では、スレッドを転送することが、実行ユニットに（１又はそれ以上の実行可能命令の場所を特定する）プログラムカウンタを送ることを含む。その後、実行ユニットは、命令をフェッチして実行させることができる。１つの実施形態では、実行ユニットにスレッドを転送することが、１又はそれ以上の実行可能命令自体のストリーム（例えば、オペランド及び／又はオペコードを含む一連のビット）を提供することを含む。いくつかの実施形態では、供給ユニット５８が、個別にスレッドを選択して転送するように構成される。しかしながら、他の実施形態では、供給ユニット５８が、タスクレベルでスレッドを選択して転送するように構成され、このような実施形態では、（スレッドの一部のみを転送するのではなく）特定のタスクの全てのスレッドが（単複の）実行ユニット６０へ転送される。従って、これらの実施形態では、選択及び転送が、スレッドレベルの粒度ではなくタスクレベルの粒度で行われると言うことができる。
【００４７】
供給ユニット５８によるスレッドの選択は、１又はそれ以上の優先方式に従って行うことができる。図２の実施形態では、固定優先方式が採用される。この実施形態では、ＶＧＰＵ５２Ａの優先度が最も高く、ＶＧＰＵ５２Ｂの優先度が次に高く、ＶＧＰＵ５２Ｃの優先度が最も低い。従って、（単複の）実行ユニット６０にどの（単複の）スレッドを転送すべきかを供給ユニット５８が判断する際には、ＶＧＰＵ５２Ａの待機中のスレッド（又はタスク）が、ＶＧＰＵ５２Ｂ又はＶＧＰＵ５２Ｃの待機中のスレッドに優先して実行される。この方式では、残りがなくなるまでＶＧＰＵ５２Ａのスレッド（又はタスク）が実行され（すなわち、供給ユニットによって実行のために転送され）続け、なくなった時点で、ＶＧＰＵ５２Ｂ又はＶＧＰＵ５２Ｃのスレッド又はタスクが（ＶＧＰＵ５２Ｂに与えられた優先度で）（単複の）実行ユニット６０へ転送されるようになる。
【００４８】
他の優先順位付け方式も可能であり想定される。例えば、１つの方式では、ＧＰＵ５０内のいくつかのＶＧＰＵを、このＧＰＵが接続するように構成されたＣＰＵのいくつかのスレッドが使用することができる。各ＣＰＵスレッドは、（例えば、オペレーティングシステムによって設定できる）独自の優先レベルを有することができる。この方式では、ＣＰＵスレッドがＶＧＰＵの１つにＧＰＵコマンドを送る際に、そのコマンド（及びその関連タスク、スレッド及び／又は命令）に、対応するＣＰＵスレッドの優先レベルと同じ優先レベルを与えることができる。
【００４９】
（最後に説明した方式と同じ実施形態の一部で使用できる）別の優先方式では、ＶＧＰＵに、離れた数の異なる優先度のいずれか１つを割り当てることができる。一例として、４つのＶＧＰＵの各々が、優先レベル０が最も優先度が高い０〜３の可変優先レベルを有することができる。１つの変形例では、優先度のレベルが同じである２又はそれ以上のＶＧＰＵが、１又はそれ以上の公正方式に従って供給ユニット５８により転送されたスレッド又はタスクを有することができる（例えば、重み付けされた又はされていないラウンドロビン仲裁を使用することができる）。いくつかの実施形態では、優先方式が、サービスレベルの保証に関与することができる（例えば、特定の優先レベルが、何らかの特定の時間枠又はいくつかのクロックサイクル内のＧＰＵコマンド、タスク及び／又はスレッドの実行を保証することができる）。１つのこのような実施形態では、ＶＧＰＵの優先度選択に、重み付けされたラウンドロビン仲裁を使用することもできる（下位レベルの優先度コマンド、タスク又はスレッドの長期にわたるストールを避けることができる）。従って、利用可能な実行ユニット６０を使用できるようにする特定のＶＧＰＵの判断は様々な因子に制約され得る。
【００５０】
これに基づいて、図２の実施形態では、供給ユニットが、所与のＧＰＵコマンドの優先レベルに基づいて、この所与のＧＰＵコマンドに対応するスレッドを１又はそれ以上の実行ユニットに転送するように構成される。（この優先レベルは、ＶＧＰＵの識別情報にさらに基づくことができ、すなわちＶＧＰＵによっては、他のＶＧＰＵよりも高い、低い、又は同じ優先度を有することができるものもある）。従って、所与のＧＰＵコマンドに対応する１又はそれ以上のスレッドを、優先度の低いＧＰＵコマンドに対応する他のスレッドに優先して選択的に転送することができる。（しかしながら、１つの実施形態では、優先度の高いＧＰＵコマンドに対応するスレッドを転送した後で、優先度の低いＧＰＵコマンドの１又はそれ以上のスレッドを転送することができる。）
【００５１】
１つの実施形態では、供給ユニットが、利用可能でありいつでも使用できる状態の実行ユニットの種類に基づいて、実行のためにスレッド及び／又は命令を転送するようにも構成される。例えば、特定の種類の実行ユニット上で実行できる優先度の高いスレッドが待機中でない場合、この種の（シェーディングなどの）実行ユニットに優先度の低いスレッドを転送することができる。従って、図２の実施形態では、シェーディングユニット６０が空いているものの、優先度の高いＶＧＰＵ５２Ａ及び５２Ｂが、実行準備ができているシェーディングスレッドを有していない場合、代わりに優先度の最も低いＶＧＰＵ５２Ｃからのスレッドを選択することができる。従って、いくつかの実施形態では、スレッドの選択及び転送が、スレッドの種類及び／又はそのスレッドを含む命令の種類に基づく。
【００５２】
実行
（単複の）実行ユニット６０は、ＶＧＰＵごとに命令を実行するように構成される。（単複の）実行ユニットは、当業者には公知の技術に基づいて構成することができ、様々な実施形態では、特定のＶＧＰＵのスレッド、タスク、及び／又はコマンドに対応する命令を実行するようにも構成される。いくつかの実施形態では、（単複の）実行ユニット６０の１又はそれ以上がパイプライン型であり、従って異なるＶＧＰＵの命令を同時に実行することができる。いくつかの実施形態では、１又はそれ以上の（単複の）実行ユニット６０がマルチスレッド型でもある。従って、このような実施形態では、個々の実行ユニットが、２又はそれ以上のスレッド（場合によっては、何百又は何千ものスレッド）の命令の同時実行をサポートすることができる。（単複の）実行ユニット６０は、以下に限定されるわけではないが、シェーディングユニット、テクスチャリングユニット、タイリングユニット、頂点ユニット、ベクトル計算ユニットなどの１又はそれ以上のあらゆる組み合わせを含むことができる。
【００５３】
図２の実施形態では、（単複の）実行ユニット６０が、実行したスレッド及び／又は命令の結果を生成するように構成される。いくつかの実施形態では、実行したスレッド及び／又は命令の結果の全部又は一部を他の構造が生成することもできる。１つの実施形態では、（単複の）実行ユニット６０が、所与の命令が実行されている（例えば、実行パイプラインを通過する）ときに、その命令がどのＶＧＰＵに属するかについてのインジケータを保持するように構成される。図２の実施形態では、ＧＰＵ５０が、所与の命令の結果を計算した後に、この命令が属するＶＧＰＵのインジケータに基づいて（単複の）記憶場所５６の適当な位置に結果を記憶するように構成される。従って、ＶＧＰＵ５２Ａの命令（又は一連の１又はそれ以上の命令）の結果が計算されると、これらをその特定のＶＧＰＵに対応する記憶場所５６へ送ることができる（ＶＧＰＵ５２Ｂ及び５２Ｃについても同様）。様々な実施形態では、命令の結果が、データ及び／又はメモリポインタ（すなわち、メモリ内の他のデータが存在するアドレスへのポインタ）を含むことができる。１つの実施形態では、１又はそれ以上のレジスタの組が、異なるＶＧＰＵに対応する命令のデータ値を記憶するように構成される。従って、１つの実施形態では、６４個の異なるレジスタを含むアーキテクチャ設計を有するＧＰＵは、このＧＰＵがサポートする４つのＶＧＰＵのそれぞれ１つのレジスタセットを実現するためのレジスタを合計２５６個（４×６４）有することができる。
【００５４】
いくつかの実施形態では、スレッド及び／又は命令の実行結果が追加情報を含む。１つの実施形態では、実行結果が、特定のスレッドの全ての命令が実行された（すなわち、スレッドを実行し終えた）旨の指示を含むことができる。命令の結果は、特定のタスク又は特定のＧＰＵコマンドのための実行が完了した旨の指示を含むこともできる。１つの実施形態では、命令の結果が、（例えば、実行すべき次の命令又はスレッドに増分できる）１又はそれ以上のプログラムカウンタ値を含むこともできる。従って、いくつかの実施形態では、各ＶＧＰＵが、１又はそれ以上の対応するプログラムカウンタを有することができる。
【００５５】
異なる実施形態では、ＶＧＰＵの実行の中断及び再開を、異なる粒度レベルで行うことができる。すなわち、優先度の高いＶＧＰＵが（単複の）実行ユニット６０を使用している間、ＧＰＵコマンド、タスク、スレッド又は命令を凍結させることができる。その後、特定のＶＧＰＵがＧＰＵ内の優先度を回復したときに、このＶＧＰＵの実行を再開するために、（例えば、記憶場所５６などの）記憶された実行結果を使用することができる。
【００５６】
１つの実施形態では、スレッドの最終プログラムカウンタ値（命令レベルに関するＶＧＰＵ粒度）を使用することにより、次の命令においてスレッドの実行を再開することができる。１つの実施形態では、タスクの完了に必要な新たなスレッドの実行（スレッドレベルに関するＶＧＰＵ粒度）を開始することにより、タスクの実行を再開することができる。このような実行の再開は、例えば、前回の実行が前のスレッドの最後で中断された後であり、次のスレッドが開始される前に行うことができる。
【００５７】
ＧＰＵコマンドの実行は、次のタスクの実行（タスクレベルに関するＶＧＰＵ粒度）を開始することによって再開することができる。いくつかの実施形態では、コマンドレベルでの粒度（及び優先度選択）も可能である。しかしながら、これらの粒度レベルは互いに排他的なものではなく、例えばいくつかの実施形態では、ＧＰＵコマンドの実行を、部分的に実行されたスレッドの途中で、又は部分的に実行されたタスクの途中で開始することによって再開することができる。いくつかの実施形態では、実行の再開が、特定のＶＧＰＵ専用の１又はそれ以上のレジスタの組から中間結果を取り出すことを含む。
【００５８】
なお、一般に「優先レベル」という用語は、ＶＧＰＵ、ＧＰＵコマンド、タスク、スレッド及び／又は命令の一部又は全部に適用することができる。例えば、スレッドは、ある優先レベルを有すると言うことができ、或いは、ある優先レベルは、命令又はタスクに対応する（又はこれらの「ために」ある）と言うことができる。従って、いくつかの実施形態では、スレッド内の各命令が、そのスレッドと同じ優先レベルを有すると言うことができ、あるタスクに属する各スレッドは、そのタスクと同じ優先レベルを有すると言うことができ、あるＧＰＵコマンドに対応する各タスクは、そのＧＰＵコマンド自体と同じ優先レベルを有すると言うことができる。１つの実施形態では、特定のＶＧＰＵに対応する全てのＧＰＵコマンド、タスク、スレッド及び／又は命令が、全てそのＶＧＰＵの優先レベルで実行される。
【００５９】
ＧＰＵメモリ管理及びリソース割り当て
図２の実施形態では、各ＶＧＰＵ５２が、保護されたデータ及びアドレス空間を有する。この実施形態では、（単複の）実行ユニット６０を使用して、異なるＶＧＰＵの異なるスレッド及び／又は命令を実行するが、ＧＰＵは、１つのＶＧＰＵの実行結果が異なるＶＧＰＵの実行結果によって上書きされないような形で動作することができる。このため、図２の実施形態では、（単複の）記憶場所５６が、計算及び／又は結果を記憶するために使用するレジスタの組を含む。しかしながら、命令の結果は、レジスタ値に影響を与えるだけでなく、メモリ（ローカルなＣＰＵメモリ、及び／又はインターフェイスロジック６２を介してアクセス可能なシステムメモリ）に記憶されたデータを変化させる場合もある。
【００６０】
従って、図２の実施形態では、メモリマネージャ６４が、複数のＶＧＰＵのメモリアクセスを管理するように構成される。具体的には、メモリマネージャ６４は、仮想アドレス空間の使用によって生じる問題に対処するように構成される。図２に示すように、各ＶＧＰＵによって異なる仮想アドレス空間が使用されている。各ＶＧＰＵは、例えば、５１２ＭＢのサイズの（仮想）範囲内でメモリにアクセスすることができる。仮想メモリアドレス範囲は、数値的に全く同じものである（従って、異なる物理基準アドレスに基づいて異なる場合がある特定のメモリアドレス計算を行う必要がない）ので、物理メモリアドレス範囲ではなく仮想アドレス範囲を使用することにより、（いくつかの実施形態では）タスク及び／又はＧＰＵコマンドからのスレッド及び／又は命令の生成を簡略化することができる。従って、第１のＶＧＰＵの第１の命令及び第２のＶＧＰＵの第２の命令は、仮想アドレス空間内の（ただし互いに干渉しない）正確ないくつかの場所を標的とすることができる。このような実施形態では、メモリマネージャ６４が、ＶＧＰＵのそれぞれからデータが読み込まれ、又はこれらにデータが書き込まれたときに、実際の物理メモリの異なる重複しない部分が使用されることを確実にするように構成される。
【００６１】
従って、いくつかの実施形態では、所与のＶＧＰＵに、物理メモリの異なる部分を常に割り当てることができる。いくつかの実施形態では、この割り当てを極めて単純にすることができる。例えば、ＧＰＵの物理メモリ量が、ＶＧＰＵの数にＶＧＰＵ仮想アドレス空間の長さを乗算したものに等しく、又はこれを上回る場合には矛盾がないと考えられ、各ＶＧＰＵに、１又はそれ以上の物理メモリ部分の排他的使用を単純に割り当てることができる。例えば、４ＧＢのメモリを有するＧＰＵ、及び各々が５１２ＭＢの仮想アドレス空間を有する８つのＶＧＰＵには矛盾がないと考えられる。しかしながら、いくつかの実施形態では、ＶＧＰＵの仮想メモリ空間の総量が、ＧＰＵ内の利用可能な物理メモリの量を超える場合がある。例えば、３つのＶＧＰＵの各々が２ＧＢの仮想アドレス空間を有するが、ＧＰＵが３ＧＢのメモリしか有していない場合、全てのＶＧＰＵに対応するだけの十分な物理メモリが存在しない可能性がある。このような実施形態では、メモリマネージャ６４が、様々なＶＧＰＵの仮想アドレス空間に物理メモリを割り当てる（及びマッピングする）ように構成される。
【００６２】
仮想アドレス空間への物理メモリの割り当ては、様々な方法で行うことができる。１つの実施形態では、優先度が最も高いＶＧＰＵに仮想アドレス範囲全体を物理的に割り当ることができる一方で、優先度の低いＶＧＰＵには、これらのそれぞれの仮想アドレス範囲のいくらかが割り当てられる。別の実施形態では、優先度の高いＶＧＰＵに仮想アドレス範囲のある程度大きな部分が割り当てられる一方で、優先度の低いＶＧＰＵには、それぞれの仮想アドレス範囲のそれ程大きくない部分が割り当てられる。さらに、いくつかの実施形態では、物理メモリの割り当てを、「必要に応じて」行うことができる。このような実施形態では、スレッド及び／又命令がごく最近に実行されたＶＧＰＵに、あらゆるメモリ要求に関する優先度を与えることができる。従って、利用可能なメモリがないときにアクティブなＶＧＰＵがより多くの物理メモリを必要とする場合、他のＶＧＰＵの１つの物理メモリの割り当てを解除して、アクティブなＶＧＰＵが、そのメモリを計算、結果又は実行すべき命令の記憶などに使用できるようにすることができる。いくつかの実施形態では、物理メモリの割り当て解除が、インターフェイスロジック６２を介してＧＰＵから（メインシステムメモリ又はその他の記憶装置などの）外部位置に情報をコピーすることを含むことができる。物理メモリは、ＶＧＰＵが実際にそれを要求するまで割り当てることができない（例えば、あるＶＧＰＵが実行しているスレッド及び／又は命令が、１ＧＢの仮想アドレス空間の中から２４ＭＢのメモリしか必要としない場合、物理メモリからこの１ＧＢ全体を割り当てることは無駄な可能性がある）という点で、「必要に応じた」物理メモリ割り当ても有用である。
【００６３】
従って、メモリマネージャ６４は、仮想メモリと物理メモリの間のマッピングを行うように構成され、（単複の）実行ユニット６０と、ＧＰＵのメモリ及び／又はその他のシステムメモリとの間の透過的なインターフェイスとして機能することができる。従って、１つの実施形態では、（単複の）実行ユニット６０による全てのメモリアクセスが、メモリマネージャ６４が仮想アドレスから物理アドレスへの変換を行うステップを含む。１つの実施形態では、メモリマネージャ６４が、所与の命令に関連する、ＶＧＰＵ５２のうちの特定のＶＧＰＵを識別する情報に基づいて、この命令のための仮想アドレス変換を実行するように構成される。例えば、メモリマネージャ６４は、ＶＧＰＵ  ＩＤによってインデックスを付けた１又はそれ以上のルックアップテーブルを保持することができる。いくつかの実施形態では、物理メモリがページ単位で割り当てられる。例えば、スレッド及び／又は命令が、まだ割り当てられていない（すなわち、以前に書き込まれたことがない）仮想アドレスに書き込みを行おうとしている場合、メモリマネージャは、対応するＶＧＰＵに１又はそれ以上の（物理）メモリページを割り当てる。様々な実施形態では、ＶＧＰＵに割り当てることができる（共有）「一時レジスタ」の数又は割合を含むその他のＧＰＵリソースを、メモリマネージャ６４によって管理及び／又は構成することができる。（別の実施形態では、この機能を（単複の）実行ユニット６０によって行うことができる）。
【００６４】
ここで図３を参照すると、ＧＰＵの１つの実施形態のブロック図を示している。図３では、ＧＰＵが、記憶場所７６、並びに実行ユニット９４、９６及び９８を含む。様々な実施形態では、記憶場所７６が、例えば、図２に関して説明したような（単複の）記憶場所５６の特性及び／又は機能の一部又は全部を有することができる。
【００６５】
（単複の）頂点実行ユニット９４は、頂点処理動作を行うように構成された１又はそれ以上の実行ユニットを含む。（単複の）画素実行ユニット９８は、画素処理動作を行うように構成された１又はそれ以上の実行ユニットを含む。（単複の）計算実行ユニット９６は、その他の計算動作（例えば、一般的計算及び／又は配列演算）を行うように構成された１又はそれ以上の実行ユニットを含む。様々な実施形態では、実行ユニット９４〜９８が、（例えば、図２に関連して説明したような）（単複の）実行ユニット６０の特性及び／又は機能の一部又は全部を有することができる。いくつかの実施形態では、ＧＰＵ内にさらなる実行ユニット又は実行ユニットタイプが存在してもよい。図示のように、実行ユニット９４〜９８には、１又はそれ以上のバス、ポイントツーポイント伝送線、及び／又は相互接続を介して記憶域８１〜９２が接続される。
【００６６】
実行ユニット９４〜９８の各々は、中間結果のための対応する記憶装置を有する。従って、図３では、記憶域８１〜８４が、画素処理動作の中間結果を記憶するように構成され、記憶域８５〜８８が、頂点処理動作の中間結果を記憶するように構成され、記憶域８９〜９２が、その他の計算動作の中間結果を記憶するように構成される。図示のように、特定の仮想ＧＰＵには特定の記憶域が対応する（例えば、記憶装置８１はＶＧＰＵ＃０に対応し、記憶装置８２はＶＧＰＵ＃１に対応する）。
【００６７】
いくつかの実施形態では、組み合わせた実行ユニットが、頂点実行ユニット９４の機能の全部又は一部、計算ユニット９６の機能の全部又は一部、及び画素実行ユニット９８の機能の全部又は一部を実行することができる。例えば、１つの実施形態では、共通シェーディング実行ユニットが、頂点処理、画素処理、及び計算処理の全部又は一部を実行することができる。このような実施形態では、頂点動作を支援することに専念する特定のロジック、画素動作を支援することに専念する特定のロジック、及び／又は計算動作を支援することに専念する特定のロジックが存在してもよいが、異なる種類の処理動作を実行する際に、共通実行ユニットの他の部分（実行パイプラインなど）を共有して一般的に使用することができる。
【００６８】
従って、様々な実施形態では、仮想ＧＰＵが、タスク待ち行列、頂点シェーディング前の基本状態、頂点シェーディング後の基本状態、フラグメントシェーディング前の基本状態、及び深さ、ステンシル及びカラーフレームバッファの状態に対応する分散記憶装置を含む全ての非一時的（中間）状態のために与えられた記憶装置を有することができる。従って、１つの実施形態では、ＧＰＵ全体を通じてこれらの状態情報のための記憶装置を、その状態を使用する箇所の近くに仮想ＧＰＵごとの一意のコピーを含めて分散できる一方で、アクティブな頂点シェーディング処理及びフラグメントシェーディング処理のための記憶装置は、仮想ＧＰＵに共通のシェーディング処理ユニットに結合される。仮想ＧＰＵに対応する中間記憶情報は、ＧＰＵ内のグラフィックス実行パイプライン全体に沿った様々な場所に記憶することができる。従って、図３には、記憶装置８１をＶＧＰＵ＃０のための中間画素処理記憶装置として示しているが、実際には、記憶スペース８１は、ＧＰＵの異なる領域に位置する２又はそれ以上の物理的に分離したメモリ、キャッシュ、レジスタなどの中に存在する複数の異なる記憶域であってもよい。同様に、様々な実施形態では、記憶域８１〜９２のいずれか１つを、ＧＰＵ内の２又はそれ以上の場所にわたって分散させることができる。
【００６９】
図３の実施形態では、仮想ＧＰＵ＃０が、１又はそれ以上の未完了の頂点処理動作の実行を再開するために使用できる中間頂点処理結果を記憶するように構成された第１の記憶域８１を有する。仮想ＧＰＵ＃０は、１又はそれ以上の未完了の画素処理動作の実行を再開するために使用できる中間頂点処理結果を記憶するように構成された第２の記憶域８５も有する。第３の記憶域８９は、その他の計算動作の実行を再開するために使用できるその他の中間計算結果を記憶するように構成することができる。仮想ＧＰＵ＃１、＃２及び＃３のそれぞれも、同様の対応する中間記憶装置を有することができる。なお、図３の実施形態では４つの仮想ＧＰＵを示しているが、本開示の他の箇所で説明したように、他の実施形態では、これよりも少ない又は多い数のＧＰＵを使用することができる。
【００７０】
様々な実施形態では、未完了の頂点処理動作、未完了の画素処理動作、及び／又は未完了の計算動作を、異なるレベルの粒度で再開することができる。１つの実施形態では、これらの種類の動作の一部又は全部をスレッドごとに再開することができる。従って、このような実施形態では、スレッドからの一時的情報が８１〜９２などの記憶域によって記憶されない間にスレッドを完全に実行することができる。或いは、このような実施形態では、スレッドの完了時に結果を記憶することができる。従って、スレッドレベルで実行を中断及び再開することができるが、必ずしもこのような実行が、個々のスレッドを含む２又はそれ以上の命令間で中断及び再開されるというわけではない。他の実施形態では、未完了の頂点処理動作、未完了の画素処理動作及び未完了の計算動作の一部又は全部を、タスクレベルの粒度で再開することができる。このような実施形態では、タスクが完了した後に、実行を再開するための中間情報を記憶することができるが、必ずしも実行中のタスクを含む２又はそれ以上のスレッド間での実行の中断及び再開を可能にする再開情報を記憶できるわけではない。実行の再開を可能にする中間結果の記憶に関する他のレベルの粒度（命令レベルの粒度又はＧＰＵコマンドレベルの粒度など）も可能であり想定される。例えば、上記段落００４６〜００４８を参照されたい。
【００７１】
１つのさらなる実施形態では、記憶域８１〜９２の１又はそれ以上が、ＧＰＵ内のそれぞれの複数の異なる場所にわたって分散される。従って、８１などの記憶域は、１又はそれ以上のメモリバッファ、レジスタ、又は（シェーディング記憶情報などの）情報を記憶するように構成されたその他の構造を含むことができる。いくつかの実施形態では、これらの記憶構造が、ＧＰＵパイプライン内の特定の実行領域に近いという理由で、ＧＰＵの異なる部分に位置することができる。８１などの記憶域は、待ち行列、ランダムアクセスメモリ、又はその他の情報アクセス方式として実現される記憶装置を含むことができる。従って、様々な実施形態では、８１〜９２などの記憶域が、タスク待ち行列、コマンドバッファ、又はその他のＧＰＵフロントエンド動作、頂点シェーディング前の基本状態、頂点シェーディング後の基本状態、変換前の頂点の状態、変換後の頂点の状態、フラグメントシェーディング前の基本状態、ラスタ化及び／又は補間、深さ、ステンシル、及びカラーフレームバッファの状態に対応する１又はそれ以上の記憶構造、或いは状態に基づく情報を保持することができる当業者にとって周知のその他のＧＰＵ構造を含むことができる。
【００７２】
従って、様々な実施形態では、記憶域８１〜９２を使用することにより、異なる仮想ＧＰＵの画素及び頂点処理動作の実行を、ＧＰＵが以前の解決策よりも細かい粒度で迅速に切り替えられるようになるとともに、異なる仮想ＧＰＵのタスク、スレッド、命令などを、（例えば）より小さな時間ウィンドウ中に実行できるようにすることができる。さらに、グラフィックプロセッサ設計の当業者であれば気付くであろうが、図３の実施形態は、本開示の他の箇所で説明した他の実施形態及び特徴と互換性がある（又はこれらに照らして修正することができる）。
【００７３】
ここで図４を参照すると、本開示による方法１１０の１つの実施形態のフローチャートを示している。以下で説明する方法１１０の様々な実施形態では、説明する要素及び／又はステップの１又はそれ以上を同時に実行すること、図示のものとは異なる順序で実行すること、又は完全に省くことができる。他の追加要素を望み通りに実行することもできる。さらに、いくつかの実施形態では、いくつかの方法ステップのいくつかの部分しか実行されない。いくつかの実施形態では、方法１１０のステップの全部又は一部をＧＰＵ５０によって実行することができ、図２に関連して上述した開示に照らして理解されたい。
【００７４】
ステップ１２０において、第１のＧＰＵコマンドに対応する第１のスレッドの実行が、グラフィックス処理装置によって開始される。この実施形態では、第１のスレッドの実行が、第２のＧＰＵコマンドに対応する第２のスレッドの実行開始よりも前に開始される。第１のスレッドの実行開始は、第１のＧＰＵコマンドの第１の優先レベルが第２のＧＰＵコマンドの第２の優先レベルよりも高いことに基づき、第１及び第２のＧＰＵコマンドの優先レベルは、第１及び第２のＧＰＵコマンドが対応する仮想ＧＰＵの識別情報に基づく。本開示では、「実行開始」又は「実行」という用語、及びこれらの変形は、ＧＰＵの１又はそれ以上の実行ユニットに１又はそれ以上のスレッド及び／又は命令を転送することを意味する。いくつかの実施形態では、「実行開始」又は「実行」が、いくつかの部分が以前に計算されているものの、その実行が完全に完了していないＧＰＵコマンド、タスク、及び／又はスレッドを再開することを意味する。
【００７５】
ステップ１３０において、第２の優先レベルよりも高い優先レベルのＧＰＵコマンドが他に存在しない旨の指示に基づいて、第２のスレッドの実行が開始される。１つの実施形態では、この指示が、（第２のスレッドに対応するコマンドバッファを除く）他の全ての仮想ＧＰＵのコマンドバッファが空であることを含むことができる。別の実施形態では、この指示が、所与の仮想ＧＰＵの全てのスレッドが実行ユニットに転送されたわけではないことを示す情報を含む。ステップ１３０において、第１のＧＰＵコマンドに対応する全てのスレッドの実行が開始されるよりも前に、第３のＧＰＵコマンドに対応する第３のスレッドの実行が開始され、この第３のスレッドの実行開始は、第１の優先レベルよりも高い第３の優先レベルに基づき、この第３の優先レベルは、第３のＧＰＵコマンドが対応する仮想ＧＰＵの識別情報に基づく。従って、第３のスレッドの優先レベルは、第２のスレッドよりも高い優先レベルを有することができる第１のスレッドの優先レベルよりも高い。第１、第２、及び第３のスレッドの各々は、複数の仮想ＧＰＵの異なる１つにそれぞれ対応する。
【００７６】
例示的なコンピュータシステム
次に図５を参照すると、ＧＰＵ５０が存在できるシステム２００の１つの実施形態のブロック図を示している。図示の実施形態では、システム２００が、外部メモリ２５２に結合された集積回路１０の少なくとも１つの例を含む。外部メモリ２５２は、図１に関連して上述したメインメモリサブシステムを形成することができる（例えば、外部メモリ２５２は、メモリ１２Ａ〜１２Ｂを含むことができる）。集積回路１０は、１又はそれ以上の周辺機器２５４及び外部メモリ２５２に結合される。集積回路１０に供給電圧を供給するとともにメモリ２５２及び／又は周辺機器２５４に１又はそれ以上の供給電圧を供給する電力供給装置２５６を設けることもできる。いくつかの実施形態では、集積回路１０の複数の例を含めることができる（同様に、メモリ２５２の複数の例を含めることもできる）。
【００７７】
メモリ２５２は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ、ＤＤＲ２、ＤＤＲ３、など）ＳＤＲＡＭ（ｎｉＤＤＲ３などのモバイルバージョンのＳＤＲＡＭ及び／又はＬＰＤＤＲ２などの低電力バージョンのＳＤＲＡＭなどを含む）、ＲＡＭＢＵＳ  ＤＲＡＭ（ＲＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）などのいずれの種類のメモリであってもよい。回路基板上に１又はそれ以上のメモリ素子を結合して、シングルインラインメモリモジュール（ＳＩＭＭ）、デュアルインラインメモリモジュール（ＤＩＭＭ）などのメモリモジュールを形成することもできる。或いは、装置に、チップオンチップ構成、パッケージオンパッケージ構成、又はマルチチップモジュール構成の集積回路１０を取り付けることもできる。
【００７８】
周辺機器２５４は、システム２００の種類に応じてあらゆる所望の回路を含むことができる。例えば、１つの実施形態では、システム２００を（携帯情報端末（ＰＤＡ）、スマートフォンなどの）モバイル装置とすることができ、周辺機器２５４は、ＷｉＦｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、セルラ、全地球測位システムなどの様々な種類の無線通信のための装置を含むことができる。周辺機器２５４は、ＲＡＭ記憶装置、固体記憶装置又はディスク記憶装置を含む追加の記憶装置を含むこともできる。周辺機器２５４は、タッチディスプレイ画面又はマルチタッチディスプレイ画面を含むディスプレイ画面、キーボード又はその他の入力装置、マイク、スピーカ、などのユーザインターフェイス装置を含むことができる。他の実施形態では、システム２００が、（デスクトップパーソナルコンピュータ、ラップトップ、ワークステーション、ネットトップなどの）いずれの種類のコンピュータシステムであってもよい。
【００７９】
コンピュータ可読媒体及びハードウェア製作
上述した技術及び方法は、いずれかの好適なコンピュータ可読記憶媒体に記憶されたコンピュータ可読命令として実現することができる。本明細書で使用する場合、コンピュータ可読記憶媒体は、コンピュータ又はコンピュータシステムによって読み込まれる（非一時的有形）媒体を意味し、ハードドライブ、光学ドライブ、ＤＶＤ、揮発性又は不揮発性ＲＡＭ素子、ホログラフィック記憶装置、プログラマブルメモリなどの磁気、光学、及び固体記憶媒体を含む。本明細書では、「非一時的」という用語は、これをコンピュータ可読媒体に適用した場合、（搬送波などの）一時的（無形）媒体のような、米国特許法第１０１条の下で不適当と見なされるあらゆる主題を特許請求の範囲から除外することのみを意図したものであり、同法に別様に従うと見なされる主題を除外することを意図したものではない。
【００８０】
いくつかの実施形態では、上述したようなコンピュータ可読記憶媒体を使用して、プログラムが読み込む命令を記憶し、この媒体を直接的に又は間接的に使用して、ＧＰＵ５０、ＩＣ１０、及び／又はこれらの一部を含むハードウェアを製作することができる。例えば、命令は、ハードウェア機能の行動レベル又はレジスタ転送レベルの記述をＶｅｒｉｌｏｇ又はＶＨＤＬなどの高水準設計言語で記述する１又はそれ以上のデータ構造の概要を示す。この記述を合成ツールによって読み込み、記述を合成してネットリストを作成することができる。ネットリストは、ＧＰＵ５０、ＩＣ１０、及び／又はこれらの一部の機能を表す（例えば、合成ライブラリに定義された）ゲートセットを含むことができる。次に、このネットリストを配置し、ルート指定して、マスクに提供する幾何学形状を記述するデータセットを生成することができる。その後、このマスクを様々な半導体製作ステップで使用して、半導体回路又はハードウェアの実施形態に対応する回路を製造することができる。或いは、望む通りに、（合成ライブラリの有無にかかわらず）データベースをネットリスト又はデータセットとすることもできる。従って、１つの実施形態は、データ構造によって記述された回路を含む集積回路を製造する過程の一部を実行するために、コンピュータシステム上で実行可能なプログラムが使用できるデータ構造を含むコンピュータ可読記憶媒体であり、このデータ構造で記述された回路は、ＧＰＵ５０、ＩＣ１０、及び／又はこれらの一部を含む。
【００８１】
以上、特定の実施形態について説明したが、これらの実施形態は、特定の特徴に関連して１つの実施形態しか説明していないとしても、本開示の範囲を限定することを意図したものではない。本開示で示した特徴の例は、別途記載していない限り、限定的ではなく例示的であることが意図されている。本開示の恩恵を受ける当業者には明らかなように、上記の説明は、このような代替物、修正物、及び同等物も対象とすることが意図されている。また、上記の詳細な説明で示した節又は見出しを、決して本開示を限定するものとして解釈すべきではない。
【００８２】
本開示の範囲は、本明細書で取り扱う課題の一部又は全部を軽減するかどうかに関わらず、本明細書で（明示的に又は非明示的に）開示したあらゆる特徴又は特徴の組み合わせ、又はこれらのあらゆる一般化を含む。従って、本出願（又はその優先権を主張する出願）の審査中に、あらゆるこのような特徴の組み合わせに対して新たな請求項が立案されることがある。具体的には、添付の特許請求の範囲に関して、従属請求項からの特徴を独立請求項の特徴と組み合わせることができ、それぞれの独立請求項からの特徴を、添付の特許請求の範囲に列挙する特定の組み合わせのみならずあらゆる適切な方法で組み合わせることができる。
【図１】
0005583180.tif 000002
【図２】
0005583180.tif 000003
【図３】
0005583180.tif 000004
【図４】
0005583180.tif 000005
【図５】
0005583180.tif 000006