説明

デッドロックを起こさないパイプライン処理のためのシステム及び方法

【課題】デッドロック無くグラフィック処理を増大させる。
【解決手段】実行ユニットのパイプライン結果(例えば、テクスチャーパイプライン結果)用の記憶スペースを提供する。この記憶スペースにより、テクスチャーユニットを利用して情報を記憶することができ、一方、レジスタファイルの対応する位置が他のスレッドへの再割当てのために使用できるようになるので、複数のスレッドの処理を増大させることができる。更に、要求の数を制限し、要求のセットのうちの各要求を完了するのに使用可能なリソースがない限り、その要求のセットが発せられないようにすることにより、デッドロックを防止する。

【発明の詳細な説明】
【技術分野】
【0001】
[001]本発明の実施形態は、一般的に、グラフィック処理ユニット(GPU)における命令処理に係る。
【背景技術】
【0002】
[002]コンピュータシステムの進歩につれて、グラフィック処理ユニット(GPU)も益々進歩してきている。例えば、GPUが複数の実行ユニットを含んでおり、それら実行ユニットをビジーに維持することは、高い全GPU性能を保証するための益々重要なタスクとなってきている。
【0003】
[003]GPUは、テクスチャー処理オペレーションを行うためのテクスチャーユニットを含むことが多い。これらテクスチャーユニットは、メモリに記憶されたテクスチャーデータにアクセスしてテクスチャーオペレーションを行う必要がある。このメモリアクセスは、通常、GPUの実行ユニットの速度に対して比較的に長い時間を要するものである。これに対応して、所定時に幾つかのテクスチャー要求が発せられる。ある従来のGPUにおいては、テクスチャー要求の各々は、パラメータを得るためレジスタを指定し、そのレジスタは、典型的には、そのテクスチャー処理オペレーションの結果のためのものと同じである。
【0004】
[004]不都合なことに、処理過程にあり得るテクスチャーパイプラインの全てのテクスチャーオペレーションのためのレジスタファイル記憶スペースは、大量のメモリ記憶スペースとなってしまう。従って、記憶スペースに限界があることにより、発することのできる要求の数、従って、一時に処理され得るピクセルの数が制限されてしまう。その1つ解決法として、テクスチャーオペレーションの結果を、そのテクスチャー要求を含んでいた記憶場所へと書き込み戻すものがあった。しかしながら、このような解決法では、依然として、記憶結果スペースがテクスチャー要求のために割り当てられたままであり、このことは、任意の所定時にそのパイプラインにおいて処理されるピクセルの数が制限されてしまうことを意味しており、実行ユニットがビジーに維持されないことがあることを意味しており、GPUの全性能に影響が及ぼされてしまう。
【0005】
[005]他の1つの解決法として、各スレッドが複数の未完了のテクスチャー要求を担い、こうすることにより、テクスチャー待ち時間をカバーするのに少しのスレッドしか必要とされないようにするものがある。不都合なことに、これでも、各スレッドが、中間結果の同時記憶を行えるようにするため、より多くのレジスタを必要とすることになる。これでは、必要とされるレジスタファイルのサイズが増大してしまう。スレッド当たり複数のテクスチャー命令を発し、それに対応して大きなレジスタファイルを必要としないようにすることができると、効果的であろう。このような形式において、セーブされている、例えば、テクスチャーオペレーションに割り当てられていない使用可能なレジスタファイルサイズを使用して、より多くのスレッドを発することができる。
【発明の概要】
【発明が解決しようとする課題】
【0006】
[006]従って、グラフィックスレッド処理のための記憶スペースの必要を減少させ且つデッドロックを防止することのできるシステムが必要とされている。本発明の実施形態によれば、実行ユニットのパイプライン結果のための記憶スペース(例えば、テクスチャーパイプラインの結果のためのバッファ)が設けられる。更に、各スレッドの要求の数を制限し、要求のセットの全ての要求を完了するのに使用可能なリソースがない限り、その要求のセットを発し又は開始させないようにすることにより、デッドロックを防止するような実施形態が提供される。従って、本発明の実施形態によれば、デッドロックを起こすことなく性能を増大させることができる。
【課題を解決するための手段】
【0007】
[007]より詳細には、本発明の実施形態によれば、大きなレジスタファイル記憶スペースを必要とせずに、複数の未完了テクスチャー要求を担う各スレッドの使用を増大させることができる。何故ならば、テクスチャーオペレーションの結果がパイプラインバッファに記憶されるからである。テクスチャー命令は、2つの部分に分割され、その第1の部分は、テクスチャーユニットへのテクスチャー要求発行であり、第2の部分は、テクスチャーユニットからの結果を読み戻すオペレーションである。結果は、レジスタバッファでなく、パイプラインバッファユニットに置かれる。デッドロックを避けるため、スレッドは、バッファが要求の全てを受容できない限り、その要求を発しない。こうすることで、そのデータがバッファに存在していないために要求が満足されないような状態を避けることができる。バッファリングされた結果は、結果スロットの全てがふさがってしまい、パイプラインが停止してしまうのを避けるために、読み取られる必要がある。レジスタファイル記憶スペースの必要をより少なくすることにより、より多くのスレッドを同時に処理することができ、それにより、並列性を増大し、従って、GPUの性能を増大させることができる。
【0008】
[008]1つの実施形態では、本発明は、グラフィック処理ユニット(GPU)のデッドロックを防止するためのコンピュータで実施される方法である。この方法は、パイプラインの部分(例えば、テクスチャーパイプラインの部分又はテクスチャーユニットのバッファ)である使用可能なパイプラインバッファリソースの数を決定するステップと、第1のスレッドの1つ以上のテクスチャー要求に基づいて要求されるリソースの数を決定するステップと、を含む。もし、要求されるリソースの数がバッファにおける使用可能なリソースの数より少ない場合には、上記1つ以上の要求に対応するリソースがバッファにおいて割り当てられ、そうでない場合には、割り当てられない。この方法は、更に、使用可能なリソースの数を調整する(例えば、減少させる)ステップと、1つ以上の要求を発するステップと、を含む。そして、リソースの数は、他のオペレーションによりバッファの内容が読み出されたときに、調整される(例えば、増加される)。
【0009】
[009]別の実施形態では、本発明は、グラフィック処理用のシステムとして実施され、このシステムでは、テクスチャーオペレーションがテクスチャー要求オペレーションとテクスチャー読戻しオペレーションとに分けられ、更に、テクスチャーオペレーションの結果が、レジスタファイルでなく、テクスチャーパイプラインに付随するバッファに記憶される。このシステムは、実行用のスレッドを選択するためのスケジューリングモジュールと、スレッドのテクスチャー要求の数を決定するための要求トラッキングモジュールと、を含む。テクスチャー要求の各々は、実行パイプラインのリソース(例えば、テクスチャーパイプラインのスロット又はテクスチャーユニットのバッファスロット)に対応し得る。このシステムは、更に、実行パイプラインの使用可能なバッファリソースの数を決定するためのリソース監視モジュールと、デッドロックを防止するため使用可能なリソース(例えば、テクスチャーユニットにおけるスロット)の数に基づいて要求を実行すべきか否かを決定し且つ実行パイプラインのリソースを割り当てるための実行モジュールと、を含む。
【0010】
[010]このようにして、本発明の実施形態によれば、通常、グラフィック処理ユニット(GPU)の利用度を増大させ、従って、その性能を増大させる。実施形態では、結果を記憶するためテクスチャーパイプライン用の記憶スペース(例えば、バッファ)が設けられ、レジスタファイルにおける記憶スペースを空けておくようにすることができる。レジスタファイルにおいて使用可能なスペースが増大することにより、実行ユニットがより多くのスレッドを同時に取り扱うことができるようになり、効果的である。本発明の実施形態にでは、更に、使用可能なバッファリソースに基づいて発することができる複数のテクスチャー要求の数を制御して、結果が読み取られるスレッドのポイントに常に達することができるようにすることにより、デッドロックを防止することができる。従って、本発明の実施形態によれば、デッドロックを起こすことなく性能を増大させることができる。
【0011】
[011]別の実施形態では、本発明は、レジスタファイルでなく、パイプラインバッファにテクスチャー結果を記憶し且つテクスチャー要求及びテクスチャー読戻しオペレーションを含む2つのオペレーションにテクスチャー命令を分けるようなシステムにおいて計算上のデッドロックを防止するための方法として実施される。この方法は、実行ユニットのプロフィール(例えば、テクスチャーユニットのための)にアクセスするステップを含む。実行ユニットのプロフィールは、クロックサイクル当たり処理されるユニットの数及びパイプラインリソースの数を含み得る。パイプラインリソースの数は、パイプライン深さ及びバッファサイズを含み得る。この方法は、更に、スレッド当たりの要求の数及びデッドロックなしに実行できるスレッドの数を決定するステップと、その数のスレッドのみで同時に動作するステップと、を含む。
【0012】
[012]添付図面において、本発明を、それに限定するというのでなく、例により説明する。添付の図面においては、同様の参照符号は同様の要素を示している。
【図面の簡単な説明】
【0013】
【図1】本発明の一実施形態による例示のコンピュータシステムを示している。
【図2】本発明の一の実施形態による例示の実行ユニットのブロック図を示している。
【図3】本発明の一実施形態による例示のスレッドの図を示している。
【図4】本発明の一実施形態による例示のシステムのブロック図を示している。
【図5】グラフィック処理ユニット(GPU)のデッドロックを防止するための例示のコンピュータ制御処理のフローチャートを示している。
【図6】本発明の一実施形態によるデッドロックを防止するための例示のコンピュータ制御処理のフローチャートを示している。
【発明の詳細な説明】
【0014】
[019]本発明の好ましい実施形態について、以下詳細に説明する。これら実施形態の例を、添付図面に示す。本発明を好ましい実施形態に関連して説明するが、これらは、本発明をこれら実施形態に限定しようとしているものではないことを理解されたい。反対に、本発明は、特許請求の範囲の記載により限定されるような発明の精神及び範囲内に含まれる代替物、変形物及び均等物をカバーしようとするものである。さらに、本発明の実施形態の以下の詳細な説明においては、本発明を完全に理解することを可能とするため、種々の特定の細部について説明する。しかしながら、本発明がこれらの特定の細部なしでも実施することができるものであることは、当業者には認識されよう。一方では、よく知られた方法、手順、構成部分及び回路については、本発明の実施形態の態様を不必要に不明瞭なものとしてしまわないように、詳細に説明していない。
【0015】
<表記法及び命名法>
[020]以下の詳細な説明の幾つかの部分は、コンピュータメモリ内のデータビットに関するオペレーションの手順、ステップ、ロジックブロック、処理及びその他の記号表現の形にてなされている。これらの説明及び表現は、自分の業績の実体を他の当業者に対して最も効果的に伝えるためデータ処理技術の当業者により使用される手段である。手順、コンピュータ実行ステップ、ロジックブロック、プロセス等は、ここで、且つ一般的に、希望の結果に至る自己矛盾のない一連のステップ又は命令であると考えられている。ステップは、物理量の物理的操作を必要とするものである。通常、必ずしもそうではないが、これらの量は、コンピュータシステムにおいて記憶されたり、転送されたり、結合されたり、比較されたり、その他の形にて操作されることのできる電気的又は磁気的信号の形を取っている。これらの信号を、ビット、値、要素、記号、文字、用語、数字等として記載するのが、時には、又、主として慣用されているという理由で、便宜的であることが分かっている。
【0016】
[021]しかしながら、これらの及び同様の用語の全ては、適当な物理量に関連付けられるものであり、これらの量に適用される単なる便宜的なラベルに過ぎないことを、念頭におかれたい。前述したことから明らかなように、特に断らない限り、本発明を通じて、「処理する」、又は「アクセスする」、又は「実行する」、又は「記憶する」、又は「レンダリングする」等の如き用語を使用する説明は、コンピュータシステムのレジスタ及びメモリ内の物理(電子的)量として表されているデータを操作して、コンピュータシステムのメモリ又はレジスタ又は他の同様の情報記憶、送信又は表示デバイス内の物理量として同様に表される他のデータへと変換する集積回路(例えば、図1のコンピューティングシステム100)又は同様の電子計算デバイスのオペレーション及び処理を指していることを、理解されたい。
【0017】
<コンピュータシステムプラットフォーム>
[022]図1は、本発明の一実施形態によるコンピュータシステム100を示している。コンピュータシステム100は、本発明の実施形態による基本コンピュータシステムの構成要素を示しており、特定のハードウエアベースの機能及びソフトウエアベースの機能のための実行プラットフォームを提供する。一般的に、コンピュータシステム100は、少なくとも1つのCPU101と、システムメモリ115と、少なくとも1つのグラフィック処理ユニット(GPU)110と、を備えている。CPU101は、ブリッジコンポーネント/メモリコントローラ(図示せず)を介してシステムメモリ115に結合され得、又は、CPU101の内部のメモリコントローラ(図示せず)を介してシステムメモリ115に直接的に結合され得る。GPU110は、ディスプレイ112に結合される。1つ以上の付加的なGPUを、オプションとして、システム100に任意的に結合して、計算能力を更に増大させることが可能である。GPU110は、CPU101及びシステムメモリ115に結合されている。GPU110は、別個の構成部分、コネクタ(例えば、AGPスロット、PCIエクスプレススロット等)を介してコンピュータシステム100に結合するように設計された別個のグラフィックカード、別個の集積回路ダイ(例えば、マザーボード上に直接に取り付けられた)として実施することができ、又は、コンピュータシステムチップセットコンポーネント(図示せず)の集積回路ダイ内に含まれた一体化GPUとして実施することもできる。さらに、高帯域グラフィックデータ記憶用のGPU110に対してローカルグラフィックメモリ114を含ませることもできる。
【0018】
[023]CPU101及びGPU110は、単一集積回路ダイとして一体化されていてもよく、これらCPU及びGPUは、命令ロジック、バッファ、ファンクショナルユニットと等といった種々のリソースを共用してもよく、又は、グラフィック及び汎用オペレーション用に別個のリソースを設けてもよい。GPUは、更に、コアロジックコンポーネットに一体化されていてもよい。従って、GPU110に関連するよう本明細書に説明する回路及び/又は機能の任意のもの又は全てのものは、適切に実装されたCPU101において実施でき、又は適切に実装されたCPU101により行うことができるものである。さらに、本明細書における実施形態は、GPUに関しているが、説明する回路及び/又は機能は、他のタイプのプロセッサ(例えば、汎用又は他の特定目的コプロセッサ)にて実施することもでき又はCPU内にて実施することができることに、注意されたい。
【0019】
[024]システム100は、例えば、専用グラフィックレンダリングGPU110に結合された強力汎用CPU101を有するデスクトップコンピュータシステム又はサーバーコンピュータシステムとして実施することができる。このような実施形態では、周辺バス、特殊化オーディオ/ビデオコンポーネント、IOデバイス等を加える構成要素を含ませることができる。同様に、システム100は、ハンドヘルドデバイス(例えば、携帯電話等)、直接放送衛星(DBS)/地上セットトップボックス、又は、例えば、ワシントン州レドモンドのマイクロソフトコーポレーションから入手できるXbox(登録商標)、又は日本国東京のソニーコンピュータエンターテインメントコーポレーションから入手できるPlayStation3(登録商標)のようなセットトップビデオゲームコンソールデバイスとして実施することができる。システム100は、計算デバイスの電子装置(例えば、構成部分101、115、110、114等)が単一の集積回路ダイ内に全体的に含まれる「システムオンチップ」として実施することもできる。例としては、ディスプレイを有するハンドヘルド機器、カーナビゲーションシステム、携帯型娯楽システム等がある。
【0020】
[025]本発明の実施形態は、通常、GPUのグラフィック処理利用度を増大させることができ、従って、グラフィック処理ユニット(GPU)の性能を増大させることができる。実施形態では、テクスチャー結果を記憶するためのテクスチャーパイプラインバッファが設けられ、これにより、通常使用されているレジスタファイルの記憶スペースを空けることができるようになる。レジスタファイルにおいて使用可能なスペースが増大されると、実行ユニットがより多くのスレッドを同時に取り扱うことが可能となる。本発明の実施形態は、更に、パイプラインに対して発せられる複数のテクスチャー要求の数を制御して、それら結果が読み戻される各スレッドにおけるポイントへ常に達して実行可能とすることができるようにすることにより、パイプラインデッドロックを防止することができる。従って、本発明の実施形態は、デッドロックを起こすことなくプロセッサ性能を増大することができる。
【0021】
[026]図2は、本発明の一実施形態によるGPUの例示の実行ユニットのブロック図を示している。実行ユニット200は、テクスチャーユニット202、数値演算ユニット220、スケジューラ230及びレジスタファイル240を含んでいる。GPU(例えば、GPU110)は、複数のスレッドを並列に実行するため、実行ユニット200と実質的に同様の複数の実行ユニットを有することができることが、理解されよう。例えば、GPUは、各々2つの実行ユニットを有する8つのプロセッサグループを有し得る。従って、実施形態は、単一命令多重データ(SIMD)実行(例えば、並列における16個のピクセルに対して1つの命令)を支援することができる。一実施形態では、本明細書で説明するスレッドは、当分野においてよく知られているように、画像又はビデオフレームの個々のピクセルである。
【0022】
[027]テクスチャーユニット202は、テクスチャーパイプライン204及びパイプラインバッファ210を含んでいる。テクスチャーパイプライン204は、N個のスロット又はパイプライン位置206−208を有する。テクスチャーパイプライン204は、結果をパイプラインバッファ210へ書き込む。テクスチャーオペレーションは、比較的に長い時間(例えば、300個のクロックサイクル)を要するメモリへのアクセスを必要とすることが多い。従って、テクスチャーパイプライン204は、このような遅延を受容するために、300個のスロット又は要素長とし得る。例えば、テクスチャーパイプライン204は、隣接ピクセルを分析して、テクスチャーにおいてそれらピクセルの各々がどのくらい離れているかを決定することにより、LOD(level of detail)の計算を行うために、各スロットがクロックサイクル当たり4つのピクセルを受け取ることができるようにし得る。十分なワークロードを持って、テクスチャーパイプライン204をビジーに維持するためには、スロット当たり4ピクセルで300個の深さをもったスロットを有するテクスチャーユニットに対しては、1200個のピクセル又はスレッドのワークが必要とされる。他のスレッドは、テクスチャーオペレーションがテクスチャーパイプライン204によって行われている間、作動し続けることができる。複数のテクスチャーオペレーションを続けて発するようなスレッドの場合には、そのパイプラインをフルに維持するのに必要とされるスレッドはより少なくなる。例えば、2つのテクスチャーオペレーションを続けて発するスレッドの場合には、パイプラインをフルに維持するのに必要とされるスレッドの数は半数だけとなる。
【0023】
[028]数値演算ユニット220は、スロット224〜226を有する数値演算パイプライン222を含んでいる。スレッドがテクスチャー要求の完了を待っている間に、数値演算ユニット220へ数値演算要求が発せられ得る。一実施形態では、数値演算ユニット220は、レジスタファイル240からソースデータを得て、結果デスティネーションデータをレジスタファイル240へ戻す。例えば、数値演算ユニット220がクロック当たり16個のピクセルを取り扱え、結果を戻すのに5つのクロックを要する場合には、命令が独立しており且つ各スレッドが一時に1つの未完了の命令を有する限り、80個のスレッドがその数値演算ユニットをビジーに維持する。別の実施例として、各スレッドが数値演算命令を発することができる場合には、各サイクルは、そのパイプラインをビジーに維持するのに16個のスレッドを必要とする。前述の例を参照すると、1280個のスレッドがテクスチャーユニット202及び数値演算ユニット220の両方をビジーに維持する。1280個のスレッドが使用可能でない場合には、実行ユニットは、ワーク無しのままとされ、バブル、即ち処理アクティビティの全くない期間を生ずる。実行ユニットにおけるバブルは、そのパイプラインがロードされているときを除いて、望ましいものではないと、理解されている。
【0024】
[029]性能を増大するためには、パイプラインを通して、より多くのスレッドを処理することが望ましい。従って、複数のテクスチャーオペレーションを有するスレッドを使用することにより、複数の増大したテクスチャースレッドを同時に処理することが可能となる。本発明の実施形態は、効果的な手段としてパイプラインバッファ210を提供して、相応に大きなレジスタファイルを必要とすることなく、テクスチャー記憶スペースを提供する。従来の技術においては、典型的には、同時に処理されるスレッドの数を増大させることができるようにするためには、相応に大きなレジスタファイルが必要とされていたのである。
【0025】
[030]レジスタファイル240は、スレッド情報を記憶する。ワークの各ユニットは、スレッドを取り扱うためワークのユニットに関連する状態情報を有する。例えば、1つのピクセルについて、状態情報は、X、Y及びテクスチャー座標を含み得る。レジスタファイル240のサイズは、数値演算ユニット及びテクスチャーの幅(例えば、クロック当たりのピクセル)及び深さ(例えば、クロックサイクル)に基づくことができる。即ち、レジスタの数は、未完了の状態において実行ユニット200に存在し得るピクセル又はスレッドの数を制御する。一実施形態では、テクスチャーデータのための記憶スペースとしてテクスチャーパイプライン204及びパイプラインバッファ210を使用することにより、同じ数のスレッドを処理するのに必要なレジスタファイル240のリソースを減少させ、或いは、同じサイズのレジスタファイルが同時により多くのスレッドを処理することが可能であることにより、従来のユニットよりも性能を増大させる。
【0026】
[031]一実施形態では、スケジューラ230が、テクスチャーオペレーションの座標をテクスチャーパイプライン204へ書き込む。テクスチャーパイプライン204へ書き込まれた座標に対応するレジスタファイル240の記憶位置は必要とされない。一実施形態では、テクスチャーユニット202は、テクスチャーパイプライン204に入る前に記憶されるべきテクスチャーオペレーション要求のためのバッファ(図示せず)を有し得る。従って、テクスチャーパイプライン204に入る前に記憶されるべきテクスチャーオペレーションのためのバッファにより、テクスチャーパイプライン204の前でバッファにおいてテクスチャー座標が生成され、それにより、テクスチャー座標をバッファリングするために使用され得たレジスタを空けておくことが可能とされる。
【0027】
[032]パイプラインバッファ210は、テクスチャーパイプライン204から出力される結果を記憶するように動作することができる。スレッドは、各スロットが読み取られていない結果で占められてしまうことによりパイプラインが停止する前に、そのテクスチャーパイプラインからテクスチャーオペレーションの結果を読み出す。パイプラインバッファ210は、N個のスロット又は記憶位置212〜214を含む。パイプラインバッファ210は、パイプラインの停止を避けるよう結果がパイプラインバッファ210から読み出されることが必要となる前に所定量の時間を許容する。パイプラインバッファ210によれば、テクスチャー要求がテクスチャーパイプライン204へ発せられてテクスチャー要求がテクスチャーパイプライン204により処理されている間に、スペースを結果用にレジスタファイル240に割り当てることなく、テクスチャー要求をテクスチャーパイプライン204へ発することが可能となることが、理解されよう。従って、パイプラインバッファ210から結果を読み取るための記憶スペースは、その結果がパイプラインバッファ210において使用できるようになると、動的に割り当てられる。テクスチャーオペレーションがレジスタファイルを使用しないので、本発明の一実施形態によれば、各テクスチャーオペレーションは、2つのオペレーション、即ち、テクスチャーユニットに対する要求(テクスチャー要求)と、結果をそのテクスチャーユニットから読み戻すオペレーションに分けられる。
【0028】
[033]一実施形態では、テクスチャー要求がテクスチャーパイプライン202の1つのスロットへ発せられると、パイプラインバッファ210における1つのスロットが、そのテクスチャー要求の結果を記憶するために割り当てられる。パイプラインバッファ210は、これに限定されないが、先入れ先出し(FIFO)バッファを含む種々の記憶タイプであってもよい。結果は順序通りでない態様にてパイプラインバッファ210から読み取ることができることは、理解されよう。例えば、16個のスロットを有するバッファの場合には、発せられる要求は、16番目毎に、同じスロットに割り当てられる。更に、16個のスロットを有するバッファの場合には、テクスチャーパイプからの各結果は、バッファスロットの全てが使用できないものとなる(例えば、読み取られていない結果を有する)ことによりパイプラインが停止してしまうのを避けるよう、16個のクロックサイクル内に読み取られる。バッファスロットは、命令がテクスチャーパイプラインに入れられたサイクルに基づくことができる。
【0029】
[034]あるテクスチャー処理オペレーションは、他のテクスチャー処理オペレーションよりも実質的に多くの記憶スペースを必要とすることがある。例えば、あるテクスチャー処理オペレーションが、16個のサンプルでテクスチャーをサンプリングし、それらの結果を平均化することを必要とすることがある。従来のテクスチャーパイプラインでは、平均化される位置の各々に対して、16個のサンプルが必要とされる。それにより、従来のテクスチャーパイプラインのレジスタファイルの記憶スペースは増大し、所定の時間で処理できるスレッドの数が制限されてしまう。本発明の実施形態によれば、テクスチャーパイプラインへ16個の要求を発し、次いで、それら結果を一時に1つずつ読み出して、それら結果を加算していくことができ、従って、レジスタファイル240において16個のサンプルのためのスペースの必要性を減少させ又は省くことができる。更に、データがレジスタファイルに記憶される必要がある時、又は、結果がテクスチャーパイプラインバッファ210にて受け取られるにつれて計算できる時を決定するのに、コンパイラを係わらせることができることは、理解されよう。
【0030】
[035]パイプラインバッファ210の使用により、より小さなレジスタファイルの使用が可能とされている。何故ならば、記憶位置が結果のために必要とされる前に、要求を発することができるからである。例えば、16個の要求が発せられ、それから、レジスタファイルの座標に対応するスペースを、更なるスレッドに再割当てすることができる。テクスチャー結果が平均化される前述の例を参照すると、それらの結果は、単一レジスタにおいて結果を組み合わせることができるので、スペースの割当てを必要としない。従って、パイプラインバッファ210は、所定の時間でより多くのスレッドの処理を行うことができるようにし、それにより、実行ユニットをビジーに維持することができる。より詳細には、パイプラインバッファ210は、テクスチャーパイプライン204が記憶スペースとして効率的に使用され得るようにする。何故ならば、テクスチャーパイプライン204へ書き込まれた座標又は他のデータを記憶したレジスタファイル240の部分は、他のスレッドのためのデータの記憶スペースとして使用できるようになるからである。パイプラインバッファ210は、更に、所定の時間により多くのスレッドを処理できるようにすることにより、バブルを防止することができることは、理解されよう。
【0031】
[036]パイプラインバッファ210の使用により、ソース及びデスティネーション命令のエミュレーションが可能となる。一実施形態では、スケジューラ230の状態マシンが、テクスチャー要求をテクスチャーユニット204へ書き込み、結果用の記憶スペースとしてレジスタファイル240を使用する代わりに、パイプラインバッファ210からそれら結果を読み取る。例えば、レジスタR0〜R3に記憶された座標のテクスチャーオペレーション用の命令(例えば、「テキストR0〜R3」)が実行され、そこでは、レジスタR0〜R3のデータがテクスチャーパイプライン204へ書き込まれ、結果がパイプラインバッファ210から読み取られ、レジスタR0〜R3に記憶される。ソース及びデスティネーション命令は、2つの命令、即ち、1)テクスチャー命令をテクスチャーパイプラインへ書き込むこと、及び、2)テクスチャーユニットからバッファへ結果を読み出すこと、になることは、理解されよう。
【0032】
[037]図3は、複数のテクスチャーオペレーションを可能とする本発明の一実施形態による例示のスレッドの図を示している。例示のスレッド300は、要求A304、要求B306、要求C308、要求D310、MADD312、読取り結果A314、読取り結果B316、読取り結果C318及び読取り結果D320を含む。MADD命令(例えば、MADD312)は、テクスチャー結果に依存しておらず、従って、テクスチャー結果を待つ必要がないことは、理解されよう。一実施形態では、スレッド300は、GPU実行ユニット(例えば、実行ユニット200)により実行される。スレッド300が、より多くの要求、MADD及び読取り結果を含み得ることは、理解されよう。要求304−310、MADD312及び読取り結果314−320は、コンパイラにより配列され得る。
【0033】
[038]プログラムカウンタ302は、要求A304でスレッド300の実行を開始する。一実施形態では、要求の数が決定され、この場合には、4つのテクスチャー要求304−310が存在する。使用可能なリソース(例えば、パイプラインスロット及びバッファ記憶位置を含むテクスチャーユニットスロット)の数が、4つのテクスチャーユニットリソースを使用することができるか否かについて、チェックされる。4つのテクスチャーリソースが使用できる場合には、リソース割当てカウンタが、パイプライン204に対して発せられている要求304−310に対応して4だけ増分させられる。4つのテクスチャーリソースをスレッド300に割り当てることにより、テクスチャーオペレーションの完了時に、結果314−320が(例えば、パイプラインバッファ210から)読み取られることが保証されて、デッドロックが防止される。一実施形態では、リソースのチェック及びリソースの割当ては、アトミック操作である。
【0034】
[039]使用可能な4つのテクスチャーリソースが存在しない場合には、スレッド300は、4つのテクスチャーリソースが使用できるようになるまで、スリープ状態に置かれる。別のスレッドが、当該スレッドの実行のために十分なリソースがある場合には、実行され得る。テクスチャーオペレーションがテクスチャーパイプラインの下段に移動して、テクスチャー処理結果がそのパイプラインバッファから読み取られると、テクスチャーリソースが使用できるようになる。幾つかの実施形態によれば、スレッドは、全てのテクスチャー要求をパイプライン上に置くか、又は、何も置かないか、のみが許可されている。これにより、デッドロックが防止される。何故ならば、スレッドは、当該スレッドがパイプラインバッファからテクスチャー処理結果を読み取ることができるポイントに達するまでは、テクスチャーフェッチのいずれをも発することができないからである。結果バッファが一杯になると、パイプラインは、何かが読み取られるまでは、停止する。テクスチャー結果を読み取ることが予想されるスレッドが更なるテクスチャー要求を発するのを待つ場合には、デッドロックが生ずる。更に、これらのスレッドがテクスチャー結果を読み取らないシェーダプログラムを通してのパスを取る場合には、デッドロックが生ずる。
【0035】
[040]一実施形態では、プログラムカウンタ302が要求306−308へと移動するときに、リソース割当てカウンタが、要求306−308の発行に関しては変化されない。読取り要求314−320の各々の発行時に、リソース割当てカウンタは、読取り要求314−320の各々が行われるにつれてパイプラインバッファ(例えば、パイプラインバッファ210)のスロットがフリーになることに対応して、1だけ減分される。
【0036】
[041]リソーストラッキングは、種々の方法で実行され得ることが、理解されよう。例えば、リソース割当てカウンタは、テクスチャーユニットにおける空いている又は使用可能なリソースの数に初期化され、要求のセットが発せられる度に、当該カウンタは、その要求の数だけ減少させられる。各結果がテクスチャーユニットから読み取られると、カウンタは、増分される(例えば、そのカウンタは、結果314〜320の各々が読み取られるときに、増分される)。このことは、動的割当て構造を表している。
【0037】
[042]デッドロックを防止するため、静的割当てを使用することもできることは、理解されよう。この実施形態では、どのくらいの数のスポットを、システムが保持することができるかが、知られている。例えば、テクスチャーユニットにおいて400個のリソースが使用でき、各スレッドが4つのテクスチャーオペレーションを必要とする場合には、デッドロックを防止するために、スケジューラ230は、任意の時点で100個の同時のスレッドのみを許容する。この場合には、カウンタは必要とされない。
【0038】
[043]さらに、スレッドの命令は、実行を最適化するように、コンパイラにより配列又は順序付けされることが、理解されよう。例えば、テクスチャー要求が数値演算要求に依存していない場合には、当該テクスチャー要求は、当該数値演算要求(例えば、MADD312)の前に移動され、当該テクスチャー要求が処理されている間に、当該数値演算要求を完了することができるようにすることができる。命令のこのような再配列は、命令が同時に実行され、テクスチャー要求情報がテクスチャーユニット(例えば、テクスチャーユニット202)に記憶されるので、スレッドが占めるスペースをより小さいものとすることを可能とする。コンパイラは、更に、予測ワークロード比率(例えば、各テクスチャー要求について4つの数値演算要求)を維持するように命令を配列し得る。ワークロード比率は、それによってハードウエアユニットが設計されたファクタであり、ワークをこの比率の当たりに平衡させることにより、ワークロードにおけるバブルを最少とすることができるものであることは、理解されよう。
【0039】
[044]図4は、本発明の種々の実施形態によって使用される例示の構成要素を示している。システム400においては、特定の構成要素が示されているのであるが、このような構成要素は例であることを、理解されたい。即ち、本発明の実施形態は、種々の他の構成要素又はシステム400に示している構成要素の種々の変形を設けることでも、十分に適合できるものである。システム400における構成要素は、本明細書に提示した以外の構成要素とでも動作できるものであり、また、システム400の目的を達成するために、システム400の構成要素の全てが必要とされているのでもないことは、理解されよう。
【0040】
[045]図4は、本発明の一実施形態による例示のシステムのブロック図を示している。システム400は、ハードウエア又はソフトウエアにて実施され得る。一実施形態では、システム400は、ディスプレイに画像又はビデオをレンダリングするためのグラフィック命令を処理することができる。システム400は、GPUの部分である実行ユニット410と通信し及び/又はそれを制御する。システム400は、スケジューリングモジュール402、要求トラッキングモジュール404,リソース監視モジュール406及び実行モジュール408を含んでいる。
【0041】
[046]スケジューリングモジュール402は、実行用にスレッドを選択する。スケジューリングモジュール402は、実行用にスレッドを選択し、そのスレッドの一部(例えば、1つ以上のテクスチャー要求及び1つ以上の数値演算要求)の実行のスケジューリングを行う。スケジューリングモジュール402は、実行用に次のスレッド又はその一部を選択することができる。
【0042】
[047]要求トラッキングモジュール404は、テクスチャー要求の数を決定する。一実施形態では、それら要求は、テクスチャーユニット412又は数値演算ユニット414の実行パイプラインに対して発せられる。より詳細には、要求の数は、テクスチャー結果の読取り前のテクスチャーパイプラインに対するテクスチャー要求の数であってもよい。一実施形態では、テクスチャーユニット412のテクスチャーパイプラインは、テクスチャーユニット412のテクスチャーパイプラインからの結果を記憶するためのバッファを含む。本明細書に説明するように、それら要求は、コンパイラにより配列されていてもよい。
【0043】
[048]リソース監視モジュール406は、実行パイプラインの使用可能なリソース(例えば、テクスチャーパイプライン及びパイプラインバッファ)の数を決定する。一実施形態では、リソース監視モジュール406は、テクスチャーユニット412の実行パイプラインの使用可能なリソースの数を決定する。別の実施形態では、リソース監視モジュール406は、使用可能な(例えば、再割当てされていない)リソースの数に対応するカウンタ、例えば、動的アーキテクチャーに基づいて、使用可能なリソースの数を決定する。更に別の実施形態では、リソース監視モジュール406は、所定の時間に進行中であることのできるスレッドの最大数に対応する数をチェックすることにより、例えば、静的アーキテクチャーにより、使用可能なリソースの数を決定する。
【0044】
[049]実行モジュール408は、使用可能なリソースの数に基づいて要求を実行すべきか否かを決定し、実行パイプラインのリソースを割り当てる。要求のデータを記憶するのに十分なリソースを使用できない場合には、その要求又は要求のグループは、発せられない。一実施形態では、実行モジュール408は、それら要求を実行すべきか否かを決定し、パイプラインのリソースをアトミック操作として割り当て、それにより、同じリソースが2つ以上のスレッドへ割り当てられるという並列スレッド実行における問題を回避する。
【0045】
[050]要求を実行すべきか否か及びリソースを割り当てるべきか否かを実行モジュール408が決定することにより、デッドロックが防止される。実行モジュール408は、(要求を有する)スレッドの部分が、結果が読み出さる部分へと、常に進むことができるようにする。換言すると、パイプライン内容は、それらが読み出される時にのみ、空となる。パイプラインが一杯であることによりスレッドがその内容を読み出すことができるポイントへ達することができない場合には、デッドロックが生ずる。本発明の実施形態によれば、要求のセットが発せられる前にリソースの完全割り当てがなされるか、又は、全く要求が発せられないようにすることができる。これにより、デッドロックが防止される。何故ならば、結果がテクスチャーユニットから読み取られる部分へと、そのプログラムが進むことができるかのチェックがなされるまでは、テクスチャー要求の全てが発せられないようにされているからである。一般的に言って、X個のテクスチャー要求を有するスレッドの場合には、それらX個のテクスチャー要求が発せられる前に、テクスチャーユニットにおけるX個のスロットが予約され又は割り当てられる。
【0046】
[051]例えば、テクスチャーパイプラインが300個のスロットを有し、バッファが16個のスロット又は記憶位置を有する場合には、そのパイプラインの停止を生ずることなく、316個のテクスチャー要求をなし得る。スロットは、結果が読み取られ去るまでは、各要求に対してグループにて予約されたままである。例えば、スレッドが4つのテクスチャー要求を含む場合には、それら4つのテクスチャー要求は、テクスチャーユニットの4つのスロットがそれら要求に対応して割り当てられた状態にて発せられる(使用可能な4つのスロットがある場合のみ)。従って、各スレッドは、結果がテクスチャーユニット412から読み出されるポイントに当該スレッドが達することができるようにするのに十分なリソースがある場合にのみ、要求を発することができる。
【0047】
[052]テクスチャーユニットのリソースがそのスレッドに対して割り当てられると、当該スレッドに対するリソースの割当てにより、それら要求が実行され得ることが保証されるので、テクスチャー要求がスケジューリングモジュール402次第で発せられることは、理解されよう。テクスチャー要求が完了するのに要する時間のため、スレッドは、結果がテクスチャーユニットから読み取ることができるようになるまで、又は、他の非テクスチャーオペレーションが完了されるまで、スケジューリングモジュール402によりスリープ状態に置かれる。例えば、テクスチャー結果を待っているスレッドは、数値演算ユニット(例えば、数値演算ユニット414)へ発する数値演算要求を有していてもよい。
【0048】
[053]以下、図5及び図6を参照する。フローチャート500及び600は、本発明の種々の実施形態により使用される例示の機能を示している。フローチャート500及び600には、特定の機能ブロック(「ブロック」)が示されているが、このようなステップは例である。即ち、実施形態は、種々な他のブロック又はフローチャート500及び600に示されたブロックの種々の変形を行うのにも十分に適合され得る。フローチャート500及び600におけるブロックは、本明細書に示した順序と異なる順序にて行うことができること及びフローチャート500及び600におけるブロックの全てを行わなくてもよいことは、理解されよう。
【0049】
[054]図5は、グラフィック処理ユニット(GPU)の機能パイプラインのデッドロックを防止するためにパイプラインバッファを使用して種々のスレッドの実行結果を記憶する典型的なコンピュータ制御処理のフローチャートを示している。フローチャート500の方法は、更に、スレッドのテクスチャーオペレーションを行うことにレジスタファイル記憶スペースを必要としないことにより、GPUの処理リソースの効率的な使用を可能とし得る。フローチャート500の処理は、デッドロックを防止するための動的処理であることは、理解されよう。
【0050】
[055]ブロック502において、パイプラインバッファ及び/又はパイプラインの使用可能なリソースの数が決定される。本明細書で説明するように、使用可能なリソースは、機能パイプライン(例えば、テクスチャーパイプライン)のパイプラインバッファの一部、又は、テクスチャーパイプラインのバッファ部分を含み得る。本明細書で説明するように、使用可能なリソースの数は、使用可能なリソースの数をトラッキングするカウンタに基づいて、決定することができる。
【0051】
[056]ブロック504において、要求されるリソースの数が、第1のスレッドの1つ以上のテクスチャー要求に基づいて決定される。グループにてなされるテクスチャー要求の場合には、要求される数は、そのグループにおける要求の全てである。
【0052】
[057]ブロック506において、要求されたリソースの数が使用可能なリソースの数より少ないことに応答して、その1つ以上の要求に対応するリソースが、パイプラインに割り当てられる。本明細書で説明するように、使用可能なリソースの数の決定及び要求されたリソースの数に対応するリソースの割当ては、アトミック操作であることができる。
【0053】
[058]ブロック508において、使用可能なリソースの数が、発せられた要求を受容するように調整される。本明細書で説明するように、このような調整は、使用可能なリソースをトラッキングする数を増分することを含み得る。リソースの数は、リソースをトラッキングする数が実行ユニットのリソースと比較される方法に基づいて、増分又は減分されることは、理解されよう。
【0054】
[059]ブロック510において、それら1つ以上の要求が発せられる。本明細書で説明するように、それら要求は、テクスチャー要求であってもよい。このような形式にて、テクスチャー要求のセットは、同じスレッドの対応する読取りが実行される時に、そのデータがそのバッファにあることが保証されるように、発せられる。
【0055】
[060]ブロック512において、使用可能なリソースの数が調整される。本明細書で説明するように、この調整は、使用可能なリソースの数を減少させることを含み得る。要求を有する更なるスレッドがある場合には、ブロック516を行うことができ、第2のスレッドがアクセスされる。ブロック516が行われた後、ブロック502が、第2のスレッド用に行われる。要求結果の1つ以上が使用できる場合には、ブロック514を行うことができる。
【0056】
[061]ブロック514において、それら1つ以上の要求に応答して1つ以上の結果が読み取られる。本明細書で説明するように、それら結果は、テクスチャーユニットのパイプラインバッファから読み取られる。次いで、ブロック516を行うことができ、第2のスレッドが選択される。
【0057】
[062]図6は、機能パイプラインの結果データを、レジスタファイルでなく、パイプラインバッファへと書き込むシステムにおいて、本発明の一実施形態によりデッドロックを防止するための例示のコンピュータ制御処理のフローチャートを示している。一実施形態では、フローチャート600の方法は、コンパイラにより行うことができる。フローチャート600の処理は、デッドロックを防止するための静的処理であり得ることは、理解されよう。
【0058】
[063]ブロック602において、実行ユニットのプロフィールが、GPUに対してアクセスされる。実行ユニットは、テクスチャーユニット及び数値演算ユニットを含み得る。一実施形態では、実行ユニットのプロフィールは、クロックサイクル当たり処理されるユニット(例えば、ピクセル)の数及びパイプラインリソースの数を含む。パイプラインリソースの数は、パイプライン深さ及びバッファサイズを含み得る。一実施形態では、バッファサイズは、テクスチャーパイプライン結果バッファのサイズに対応する。
【0059】
[064]ブロック604において、デッドロック無しに実行され得るスレッド当たりのテクスチャー要求及びスレッドの数が決定される。本明細書に説明するように、スレッド当たりの要求及びスレッドの数は、テクスチャー要求の結果が読み取られる前に、発する必要のあるテクスチャー要求の数に基づき得る。例えば、テクスチャーパイプライン及びパイプラインバッファが400個のスロットを有しており、読取りが必要とされる前にスレッド当たり4つのテクスチャー要求がある場合には、同時スレッドの数は、デッドロックを防止するため、このシステムでは100に制限される。一実施形態では、スレッドの数は、次のタイルが処理される前に、空間タイルの全てのスレッドが完了するように、画像のタイルに基づく。例えば、ある1つのタイルの複数のスレッドが、プロセッサに存在している複数のタイルを利用するように、一緒にスケジューリングされる。これは、任意のキャッシュの局所性を利用し得ることが、理解されよう。こうして、タイルは、リソースの欠如のためテクスチャーパイプの停止を起こす可能性無く、テクスチャー要求及びテクスチャー戻しシーケンスを完了することができるように、処理される。
【0060】
[065]ブロック606において、デッドロック無く実行され得るスレッド当たりの要求の数に基づいて、スレッドの命令が再配列される。本明細書に説明するように、コンパイラにより、結果がスレッドにより読み取られる前に、限定数の要求が発せられるよう、命令を再配列することができる。
【0061】
[066]本発明の特定の実施形態の前述の説明は、例示のための説明として提示されたものである。これら説明は、これが全てであるというものでなく、又、本発明を、ここで開示した形そのものに限定しようとするものでなく、前述したことを考慮するならば、多くの変更及び変形が可能であるものである。これら実施形態は、本発明の原理及びその実際の応用について最良の説明をなし、それにより、他の当業者が、本発明及び種々な実施形態を、意図するような特定の用途に適合するように種々な変更を加えて最良に利用できるようにするために、選択され説明されているのである。本発明の範囲は、特許請求の範囲及びそれらの均等物により定められることを意図している。
【符号の説明】
【0062】
100…コンピュータシステム、101…CPU、110…グラフィック処理ユニット(GPU)、112…ディスプレイ、114…ローカルグラフィックメモリ、115…システムメモリ、200…実行ユニット、202…テクスチャーユニット、204…テクスチャーパイプライン、206…パイプライン位置(スロット)、208…パイプライン位置(スロット)、210…パイプラインバッファ、212…記憶位置(スロット)、214…記憶位置(スロット)、220…数値演算ユニット、222…数値演算パイプライン、224…スロット、226…スロット、230…スケジューラ、240…レジスタファイル、300…スレッド、302…プログラムカウンタ、304…テクスチャー要求A、306…テクスチャー要求B、308…テクスチャー要求C、310…テクスチャー要求D、312…MADD、314…読取り結果A、316…読取り結果B、318…読取り結果C、320…読取り結果D、400…システム、402…スケジューリングモジュール、404…要求トラッキングモジュール、406…リソース監視モジュール、408…実行モジュール、410…実行ユニット、412…テクスチャーユニット、414…数値演算ユニット、500…フローチャート、600…フローチャート。

【特許請求の範囲】
【請求項1】
グラフィック処理ユニットにおいてデータを処理する方法であって、
前記グラフィック処理ユニットの実行ユニットから結果を受け取るように結合されたパイプラインバッファの空きメモリリソースのカウントを保持するステップと、
スレッドの前記実行ユニットに対する要求の数を決定するステップであって、該要求の数は、読戻しオペレーションが前記スレッド内に存在する前に、前記スレッド内に存在する複数の要求オペレーションの数を含む、該ステップと、
前記数の要求の全てを受容するのに十分な前記パイプラインバッファの空きメモリリソースが存在する場合に、前記実行ユニットへ前記数の要求を発し、存在しない場合には、前記実行ユニットへ前記数の要求のいずれをも発しない、ステップと、
前記実行ユニットが、発せられた要求の結果を、その実行後に、前記パイプラインバッファへ書き込むステップと、
を含む方法。
【請求項2】
前記パイプラインバッファの空きメモリリソースのカウントを保持するステップは、前記実行ユニットへ前記数の要求が発せられたことに応答して、前記パイプラインバッファの前記空きメモリリソースの前記カウントを減少させることを含む、請求項1に記載の方法。
【請求項3】
前記スレッドが、前記実行ユニットに発せられた要求に対応する前記パイプラインバッファからの読戻しオペレーションを実行するステップを更に含み、
前記パイプラインバッファの空きメモリリソースの前記カウントを保持するステップは、更に、前記スレッドが前記読戻しオペレーションを実行することに応答して、前記パイプラインバッファの前記空きメモリリソースの前記カウントを増大させることを含む、請求項2に記載の方法。
【請求項4】
前記実行ユニットは、前記グラフィック処理ユニット内のテクスチャーユニットであり、
更に、前記テクスチャーユニットの各テクスチャーオペレーションは、前記テクスチャーユニットに対するテクスチャー要求オペレーション及び前記パイプラインバッファからのテクスチャー読戻しオペレーションを含む、請求項1に記載の方法。
【請求項5】
前記発すること及び前記発しないことは、前記パイプラインバッファ内に割り当てられた結果スペースを有するグループ化されたテクスチャー要求オペレーションのみを発することにより、前記テクスチャーユニットのデッドロックを防止し、
前記グループ化されたテクスチャー要求オペレーションは、前記スレッドの第1の発せられていないテクスチャー読戻しオペレーションに先行する該スレッド内の全ての発せられていない一連のテクスチャー要求オペレーションである、請求項4に記載の方法。
【請求項6】
前記スレッドが、前記グラフィック処理ユニットの数値演算機能ユニットへ数値演算オペレーションを発するステップと、
前記数値演算機能ユニットが、レジスタファイルのソースレジスタから前記数値演算オペレーション用のソースオペランドを得て、前記数値演算オペレーションの実行による結果を前記レジスタファイルのデスティネーションレジスタへ戻すステップと、
を更に含む、請求項1に記載の方法。
【請求項7】
前記機能ユニットは、テクスチャーユニットであり、前記レジスタファイルは、前記テクスチャーユニットの実行による結果を受け取らない、請求項6に記載の方法。
【請求項8】
グラフィック処理ユニットにおいてデータを処理する方法であって、
前記グラフィック処理ユニットの実行ユニットから結果を受け取るように結合されたパイプラインバッファのサイズを決定するステップと、
各スレッド内の要求オペレーションの数に基づいて、更に前記パイプラインバッファの前記サイズに基づいて、前記実行ユニットで同時に動作することが許されるスレッドの数を決定するステップと、
デッドロックを防止するため、前記数以下のスレッドのみが前記実行ユニットで同時に動作することを許可するステップと、
前記数のスレッドが、前記実行ユニットへ要求オペレーションを発するステップと、
前記実行ユニットが、前記要求オペレーションの結果を、その実行後に、前記パイプラインバッファへ書き込むステップと、
を含む方法。
【請求項9】
前記スレッドの数を決定するステップは、前記パイプラインバッファの前記サイズを、各スレッド内の前記要求オペレーションの数で除算することを含む、請求項8に記載の方法。
【請求項10】
前記数のスレッドが、前記実行ユニットへ発せられた前記要求オペレーションに対応する前記パイプラインバッファからの読戻しオペレーションを実行するステップを更に含む、請求項8に記載の方法。
【請求項11】
前記実行ユニットは、前記グラフィック処理ユニット内のテクスチャーユニットであり、
更に、前記テクスチャーユニットの各テクスチャーオペレーションは、テクスチャー要求オペレーション及び前記パイプラインバッファからのテクスチャー読戻しオペレーションを含む、請求項8に記載の方法。
【請求項12】
前記数以下のスレッドのみが前記実行ユニットで同時に動作することを許可するステップは、前記数のスレッド内の全てのテクスチャー読戻しオペレーションが実行する機会を有することを保証することにより、デッドロックを防止する、請求項11に記載の方法。
【請求項13】
スレッドが、前記グラフィック処理ユニットの数値演算機能ユニットへ数値演算オペレーションを発するステップと、
前記数値演算機能ユニットが、レジスタファイルのソースレジスタから前記数値演算オペレーション用のソースオペランドを得て、前記数値演算オペレーションの実行による結果を前記レジスタファイルのデスティネーションレジスタへ戻すステップと、
を更に含む、請求項8に記載の方法。
【請求項14】
前記機能ユニットは、テクスチャーユニットであり、前記レジスタファイルは、前記テクスチャーユニットの実行による結果を受け取らない、請求項13に記載の方法。
【請求項15】
グラフィック処理ユニットのプロセッサグループであって、
該プロセッサグループ内の同時に動作できる複数のスレッドに関連するデータを記憶するためのレジスタファイルと、
前記複数のスレッドのテクスチャーオペレーションを処理するためのテクスチャーユニットであって、各テクスチャーオペレーションは、要求テクスチャーオペレーション及び対応するテクスチャー読戻しオペレーションを含む、該テクスチャーユニットと、
前記テクスチャーユニットに結合されたパイプラインバッファであって、前記テクスチャーユニットから結果を受け取り、記憶するための該パイプラインバッファと、
を備えるプロセッサグループ。
【請求項16】
前記複数のスレッドの数値演算オペレーションを処理するための数値演算機能ユニットを更に備えており、
前記数値演算機能ユニットは、前記レジスタファイルからソースオペランドを受け取るように結合されており、前記レジスタファイルへ結果を記憶させるように結合されている、請求項15に記載のプロセッサグループ。
【請求項17】
前記パイプラインバッファ及び前記テクスチャーユニットの空きメモリリソースのカウントを保持するためのカウンタを更に備えている、請求項15に記載のプロセッサグループ。
【請求項18】
前記テクスチャーユニット内のデッドロックを防止するための回路を更に備えており、前記デッドロックを防止するための回路は、
スレッドの前記テクスチャーユニット用のテクスチャー要求オペレーションの数を決定するための回路であって、前記テクスチャー要求オペレーションの数は、テクスチャー読戻しオペレーションが前記スレッド内に存在する前に前記スレッド内に存在する複数のテクスチャー要求オペレーションの数を含む、該回路と、
前記数のテクスチャー要求オペレーションの全てを受容するのに十分な前記パイプラインバッファ及び前記テクスチャーユニットの空きメモリリソースが存在する場合には、前記テクスチャーユニットへ前記数の要求を発し、存在しない場合には、前記テクスチャーユニットへ前記数のテクスチャー要求オペレーションのいずれをも発しない回路と、
を備える、請求項17に記載のプロセッサグループ。
【請求項19】
所定の数以下のスレッドのみが前記テクスチャーユニットで同時に動作することを許可することにより、前記テクスチャーユニット内のデッドロックを防止する回路を更に備え、
前記スレッドの所定の数は、各スレッド内のテクスチャー要求オペレーションの数に基づき、更に、前記パイプラインバッファ及び前記テクスチャーユニットのサイズに基づく、請求項15に記載のプロセッサグループ。
【請求項20】
前記スレッドの所定の数は、前記パイプラインバッファの前記サイズ及び前記テクスチャーユニットの前記サイズを各スレッド内の前記テクスチャー要求オペレーションの数で除算することにより算出される、請求項19に記載のプロセッサグループ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate