(57)【要約】      （修正有）【課題】デッドロック無くグラフィック処理を増大させる。【解決手段】実行ユニットのパイプライン結果（例えば、テクスチャーパイプライン結果）用の記憶スペースを提供する。この記憶スペースにより、テクスチャーユニットを利用して情報を記憶することができ、一方、レジスタファイルの対応する位置が他のスレッドへの再割当てのために使用できるようになるので、複数のスレッドの処理を増大させることができる。更に、要求の数を制限し、要求のセットのうちの各要求を完了するのに使用可能なリソースがない限り、その要求のセットが発せられないようにすることにより、デッドロックを防止する。【選択図】図２
2010244529.tif 000002
【特許請求の範囲】
【請求項１】
グラフィック処理ユニットにおいてデータを処理する方法であって、
前記グラフィック処理ユニットの実行ユニットから結果を受け取るように結合されたパイプラインバッファの空きメモリリソースのカウントを保持するステップと、
スレッドの前記実行ユニットに対する要求の数を決定するステップであって、該要求の数は、読戻しオペレーションが前記スレッド内に存在する前に、前記スレッド内に存在する複数の要求オペレーションの数を含む、該ステップと、
前記数の要求の全てを受容するのに十分な前記パイプラインバッファの空きメモリリソースが存在する場合に、前記実行ユニットへ前記数の要求を発し、存在しない場合には、前記実行ユニットへ前記数の要求のいずれをも発しない、ステップと、
前記実行ユニットが、発せられた要求の結果を、その実行後に、前記パイプラインバッファへ書き込むステップと、
を含む方法。
【請求項２】
前記パイプラインバッファの空きメモリリソースのカウントを保持するステップは、前記実行ユニットへ前記数の要求が発せられたことに応答して、前記パイプラインバッファの前記空きメモリリソースの前記カウントを減少させることを含む、請求項１に記載の方法。
【請求項３】
前記スレッドが、前記実行ユニットに発せられた要求に対応する前記パイプラインバッファからの読戻しオペレーションを実行するステップを更に含み、
前記パイプラインバッファの空きメモリリソースの前記カウントを保持するステップは、更に、前記スレッドが前記読戻しオペレーションを実行することに応答して、前記パイプラインバッファの前記空きメモリリソースの前記カウントを増大させることを含む、請求項２に記載の方法。
【請求項４】
前記実行ユニットは、前記グラフィック処理ユニット内のテクスチャーユニットであり、
更に、前記テクスチャーユニットの各テクスチャーオペレーションは、前記テクスチャーユニットに対するテクスチャー要求オペレーション及び前記パイプラインバッファからのテクスチャー読戻しオペレーションを含む、請求項１に記載の方法。
【請求項５】
前記発すること及び前記発しないことは、前記パイプラインバッファ内に割り当てられた結果スペースを有するグループ化されたテクスチャー要求オペレーションのみを発することにより、前記テクスチャーユニットのデッドロックを防止し、
前記グループ化されたテクスチャー要求オペレーションは、前記スレッドの第１の発せられていないテクスチャー読戻しオペレーションに先行する該スレッド内の全ての発せられていない一連のテクスチャー要求オペレーションである、請求項４に記載の方法。
【請求項６】
前記スレッドが、前記グラフィック処理ユニットの数値演算機能ユニットへ数値演算オペレーションを発するステップと、
前記数値演算機能ユニットが、レジスタファイルのソースレジスタから前記数値演算オペレーション用のソースオペランドを得て、前記数値演算オペレーションの実行による結果を前記レジスタファイルのデスティネーションレジスタへ戻すステップと、
を更に含む、請求項１に記載の方法。
【請求項７】
前記機能ユニットは、テクスチャーユニットであり、前記レジスタファイルは、前記テクスチャーユニットの実行による結果を受け取らない、請求項６に記載の方法。
【請求項８】
グラフィック処理ユニットにおいてデータを処理する方法であって、
前記グラフィック処理ユニットの実行ユニットから結果を受け取るように結合されたパイプラインバッファのサイズを決定するステップと、
各スレッド内の要求オペレーションの数に基づいて、更に前記パイプラインバッファの前記サイズに基づいて、前記実行ユニットで同時に動作することが許されるスレッドの数を決定するステップと、
デッドロックを防止するため、前記数以下のスレッドのみが前記実行ユニットで同時に動作することを許可するステップと、
前記数のスレッドが、前記実行ユニットへ要求オペレーションを発するステップと、
前記実行ユニットが、前記要求オペレーションの結果を、その実行後に、前記パイプラインバッファへ書き込むステップと、
を含む方法。
【請求項９】
前記スレッドの数を決定するステップは、前記パイプラインバッファの前記サイズを、各スレッド内の前記要求オペレーションの数で除算することを含む、請求項８に記載の方法。
【請求項１０】
前記数のスレッドが、前記実行ユニットへ発せられた前記要求オペレーションに対応する前記パイプラインバッファからの読戻しオペレーションを実行するステップを更に含む、請求項８に記載の方法。
【請求項１１】
前記実行ユニットは、前記グラフィック処理ユニット内のテクスチャーユニットであり、
更に、前記テクスチャーユニットの各テクスチャーオペレーションは、テクスチャー要求オペレーション及び前記パイプラインバッファからのテクスチャー読戻しオペレーションを含む、請求項８に記載の方法。
【請求項１２】
前記数以下のスレッドのみが前記実行ユニットで同時に動作することを許可するステップは、前記数のスレッド内の全てのテクスチャー読戻しオペレーションが実行する機会を有することを保証することにより、デッドロックを防止する、請求項１１に記載の方法。
【請求項１３】
スレッドが、前記グラフィック処理ユニットの数値演算機能ユニットへ数値演算オペレーションを発するステップと、
前記数値演算機能ユニットが、レジスタファイルのソースレジスタから前記数値演算オペレーション用のソースオペランドを得て、前記数値演算オペレーションの実行による結果を前記レジスタファイルのデスティネーションレジスタへ戻すステップと、
を更に含む、請求項８に記載の方法。
【請求項１４】
前記機能ユニットは、テクスチャーユニットであり、前記レジスタファイルは、前記テクスチャーユニットの実行による結果を受け取らない、請求項１３に記載の方法。
【請求項１５】
グラフィック処理ユニットのプロセッサグループであって、
該プロセッサグループ内の同時に動作できる複数のスレッドに関連するデータを記憶するためのレジスタファイルと、
前記複数のスレッドのテクスチャーオペレーションを処理するためのテクスチャーユニットであって、各テクスチャーオペレーションは、要求テクスチャーオペレーション及び対応するテクスチャー読戻しオペレーションを含む、該テクスチャーユニットと、
前記テクスチャーユニットに結合されたパイプラインバッファであって、前記テクスチャーユニットから結果を受け取り、記憶するための該パイプラインバッファと、
を備えるプロセッサグループ。
【請求項１６】
前記複数のスレッドの数値演算オペレーションを処理するための数値演算機能ユニットを更に備えており、
前記数値演算機能ユニットは、前記レジスタファイルからソースオペランドを受け取るように結合されており、前記レジスタファイルへ結果を記憶させるように結合されている、請求項１５に記載のプロセッサグループ。
【請求項１７】
前記パイプラインバッファ及び前記テクスチャーユニットの空きメモリリソースのカウントを保持するためのカウンタを更に備えている、請求項１５に記載のプロセッサグループ。
【請求項１８】
前記テクスチャーユニット内のデッドロックを防止するための回路を更に備えており、前記デッドロックを防止するための回路は、
スレッドの前記テクスチャーユニット用のテクスチャー要求オペレーションの数を決定するための回路であって、前記テクスチャー要求オペレーションの数は、テクスチャー読戻しオペレーションが前記スレッド内に存在する前に前記スレッド内に存在する複数のテクスチャー要求オペレーションの数を含む、該回路と、
前記数のテクスチャー要求オペレーションの全てを受容するのに十分な前記パイプラインバッファ及び前記テクスチャーユニットの空きメモリリソースが存在する場合には、前記テクスチャーユニットへ前記数の要求を発し、存在しない場合には、前記テクスチャーユニットへ前記数のテクスチャー要求オペレーションのいずれをも発しない回路と、
を備える、請求項１７に記載のプロセッサグループ。
【請求項１９】
所定の数以下のスレッドのみが前記テクスチャーユニットで同時に動作することを許可することにより、前記テクスチャーユニット内のデッドロックを防止する回路を更に備え、
前記スレッドの所定の数は、各スレッド内のテクスチャー要求オペレーションの数に基づき、更に、前記パイプラインバッファ及び前記テクスチャーユニットのサイズに基づく、請求項１５に記載のプロセッサグループ。
【請求項２０】
前記スレッドの所定の数は、前記パイプラインバッファの前記サイズ及び前記テクスチャーユニットの前記サイズを各スレッド内の前記テクスチャー要求オペレーションの数で除算することにより算出される、請求項１９に記載のプロセッサグループ。
【発明の詳細な説明】
【技術分野】
【０００１】
[001]本発明の実施形態は、一般的に、グラフィック処理ユニット（ＧＰＵ）における命令処理に係る。
【背景技術】
【０００２】
[002]コンピュータシステムの進歩につれて、グラフィック処理ユニット（ＧＰＵ）も益々進歩してきている。例えば、ＧＰＵが複数の実行ユニットを含んでおり、それら実行ユニットをビジーに維持することは、高い全ＧＰＵ性能を保証するための益々重要なタスクとなってきている。
【０００３】
[003]ＧＰＵは、テクスチャー処理オペレーションを行うためのテクスチャーユニットを含むことが多い。これらテクスチャーユニットは、メモリに記憶されたテクスチャーデータにアクセスしてテクスチャーオペレーションを行う必要がある。このメモリアクセスは、通常、ＧＰＵの実行ユニットの速度に対して比較的に長い時間を要するものである。これに対応して、所定時に幾つかのテクスチャー要求が発せられる。ある従来のＧＰＵにおいては、テクスチャー要求の各々は、パラメータを得るためレジスタを指定し、そのレジスタは、典型的には、そのテクスチャー処理オペレーションの結果のためのものと同じである。
【０００４】
[004]不都合なことに、処理過程にあり得るテクスチャーパイプラインの全てのテクスチャーオペレーションのためのレジスタファイル記憶スペースは、大量のメモリ記憶スペースとなってしまう。従って、記憶スペースに限界があることにより、発することのできる要求の数、従って、一時に処理され得るピクセルの数が制限されてしまう。その１つ解決法として、テクスチャーオペレーションの結果を、そのテクスチャー要求を含んでいた記憶場所へと書き込み戻すものがあった。しかしながら、このような解決法では、依然として、記憶結果スペースがテクスチャー要求のために割り当てられたままであり、このことは、任意の所定時にそのパイプラインにおいて処理されるピクセルの数が制限されてしまうことを意味しており、実行ユニットがビジーに維持されないことがあることを意味しており、ＧＰＵの全性能に影響が及ぼされてしまう。
【０００５】
[005]他の１つの解決法として、各スレッドが複数の未完了のテクスチャー要求を担い、こうすることにより、テクスチャー待ち時間をカバーするのに少しのスレッドしか必要とされないようにするものがある。不都合なことに、これでも、各スレッドが、中間結果の同時記憶を行えるようにするため、より多くのレジスタを必要とすることになる。これでは、必要とされるレジスタファイルのサイズが増大してしまう。スレッド当たり複数のテクスチャー命令を発し、それに対応して大きなレジスタファイルを必要としないようにすることができると、効果的であろう。このような形式において、セーブされている、例えば、テクスチャーオペレーションに割り当てられていない使用可能なレジスタファイルサイズを使用して、より多くのスレッドを発することができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
[006]従って、グラフィックスレッド処理のための記憶スペースの必要を減少させ且つデッドロックを防止することのできるシステムが必要とされている。本発明の実施形態によれば、実行ユニットのパイプライン結果のための記憶スペース（例えば、テクスチャーパイプラインの結果のためのバッファ）が設けられる。更に、各スレッドの要求の数を制限し、要求のセットの全ての要求を完了するのに使用可能なリソースがない限り、その要求のセットを発し又は開始させないようにすることにより、デッドロックを防止するような実施形態が提供される。従って、本発明の実施形態によれば、デッドロックを起こすことなく性能を増大させることができる。
【課題を解決するための手段】
【０００７】
[007]より詳細には、本発明の実施形態によれば、大きなレジスタファイル記憶スペースを必要とせずに、複数の未完了テクスチャー要求を担う各スレッドの使用を増大させることができる。何故ならば、テクスチャーオペレーションの結果がパイプラインバッファに記憶されるからである。テクスチャー命令は、２つの部分に分割され、その第１の部分は、テクスチャーユニットへのテクスチャー要求発行であり、第２の部分は、テクスチャーユニットからの結果を読み戻すオペレーションである。結果は、レジスタバッファでなく、パイプラインバッファユニットに置かれる。デッドロックを避けるため、スレッドは、バッファが要求の全てを受容できない限り、その要求を発しない。こうすることで、そのデータがバッファに存在していないために要求が満足されないような状態を避けることができる。バッファリングされた結果は、結果スロットの全てがふさがってしまい、パイプラインが停止してしまうのを避けるために、読み取られる必要がある。レジスタファイル記憶スペースの必要をより少なくすることにより、より多くのスレッドを同時に処理することができ、それにより、並列性を増大し、従って、ＧＰＵの性能を増大させることができる。
【０００８】
[008]１つの実施形態では、本発明は、グラフィック処理ユニット（ＧＰＵ）のデッドロックを防止するためのコンピュータで実施される方法である。この方法は、パイプラインの部分（例えば、テクスチャーパイプラインの部分又はテクスチャーユニットのバッファ）である使用可能なパイプラインバッファリソースの数を決定するステップと、第１のスレッドの１つ以上のテクスチャー要求に基づいて要求されるリソースの数を決定するステップと、を含む。もし、要求されるリソースの数がバッファにおける使用可能なリソースの数より少ない場合には、上記１つ以上の要求に対応するリソースがバッファにおいて割り当てられ、そうでない場合には、割り当てられない。この方法は、更に、使用可能なリソースの数を調整する（例えば、減少させる）ステップと、１つ以上の要求を発するステップと、を含む。そして、リソースの数は、他のオペレーションによりバッファの内容が読み出されたときに、調整される（例えば、増加される）。
【０００９】
[009]別の実施形態では、本発明は、グラフィック処理用のシステムとして実施され、このシステムでは、テクスチャーオペレーションがテクスチャー要求オペレーションとテクスチャー読戻しオペレーションとに分けられ、更に、テクスチャーオペレーションの結果が、レジスタファイルでなく、テクスチャーパイプラインに付随するバッファに記憶される。このシステムは、実行用のスレッドを選択するためのスケジューリングモジュールと、スレッドのテクスチャー要求の数を決定するための要求トラッキングモジュールと、を含む。テクスチャー要求の各々は、実行パイプラインのリソース（例えば、テクスチャーパイプラインのスロット又はテクスチャーユニットのバッファスロット）に対応し得る。このシステムは、更に、実行パイプラインの使用可能なバッファリソースの数を決定するためのリソース監視モジュールと、デッドロックを防止するため使用可能なリソース（例えば、テクスチャーユニットにおけるスロット）の数に基づいて要求を実行すべきか否かを決定し且つ実行パイプラインのリソースを割り当てるための実行モジュールと、を含む。
【００１０】
[010]このようにして、本発明の実施形態によれば、通常、グラフィック処理ユニット（ＧＰＵ）の利用度を増大させ、従って、その性能を増大させる。実施形態では、結果を記憶するためテクスチャーパイプライン用の記憶スペース（例えば、バッファ）が設けられ、レジスタファイルにおける記憶スペースを空けておくようにすることができる。レジスタファイルにおいて使用可能なスペースが増大することにより、実行ユニットがより多くのスレッドを同時に取り扱うことができるようになり、効果的である。本発明の実施形態にでは、更に、使用可能なバッファリソースに基づいて発することができる複数のテクスチャー要求の数を制御して、結果が読み取られるスレッドのポイントに常に達することができるようにすることにより、デッドロックを防止することができる。従って、本発明の実施形態によれば、デッドロックを起こすことなく性能を増大させることができる。
【００１１】
[011]別の実施形態では、本発明は、レジスタファイルでなく、パイプラインバッファにテクスチャー結果を記憶し且つテクスチャー要求及びテクスチャー読戻しオペレーションを含む２つのオペレーションにテクスチャー命令を分けるようなシステムにおいて計算上のデッドロックを防止するための方法として実施される。この方法は、実行ユニットのプロフィール（例えば、テクスチャーユニットのための）にアクセスするステップを含む。実行ユニットのプロフィールは、クロックサイクル当たり処理されるユニットの数及びパイプラインリソースの数を含み得る。パイプラインリソースの数は、パイプライン深さ及びバッファサイズを含み得る。この方法は、更に、スレッド当たりの要求の数及びデッドロックなしに実行できるスレッドの数を決定するステップと、その数のスレッドのみで同時に動作するステップと、を含む。
【００１２】
[012]添付図面において、本発明を、それに限定するというのでなく、例により説明する。添付の図面においては、同様の参照符号は同様の要素を示している。
【図面の簡単な説明】
【００１３】
【図１】本発明の一実施形態による例示のコンピュータシステムを示している。
【図２】本発明の一の実施形態による例示の実行ユニットのブロック図を示している。
【図３】本発明の一実施形態による例示のスレッドの図を示している。
【図４】本発明の一実施形態による例示のシステムのブロック図を示している。
【図５】グラフィック処理ユニット（ＧＰＵ）のデッドロックを防止するための例示のコンピュータ制御処理のフローチャートを示している。
【図６】本発明の一実施形態によるデッドロックを防止するための例示のコンピュータ制御処理のフローチャートを示している。
【発明の詳細な説明】
【００１４】
[019]本発明の好ましい実施形態について、以下詳細に説明する。これら実施形態の例を、添付図面に示す。本発明を好ましい実施形態に関連して説明するが、これらは、本発明をこれら実施形態に限定しようとしているものではないことを理解されたい。反対に、本発明は、特許請求の範囲の記載により限定されるような発明の精神及び範囲内に含まれる代替物、変形物及び均等物をカバーしようとするものである。さらに、本発明の実施形態の以下の詳細な説明においては、本発明を完全に理解することを可能とするため、種々の特定の細部について説明する。しかしながら、本発明がこれらの特定の細部なしでも実施することができるものであることは、当業者には認識されよう。一方では、よく知られた方法、手順、構成部分及び回路については、本発明の実施形態の態様を不必要に不明瞭なものとしてしまわないように、詳細に説明していない。
【００１５】
＜表記法及び命名法＞
[020]以下の詳細な説明の幾つかの部分は、コンピュータメモリ内のデータビットに関するオペレーションの手順、ステップ、ロジックブロック、処理及びその他の記号表現の形にてなされている。これらの説明及び表現は、自分の業績の実体を他の当業者に対して最も効果的に伝えるためデータ処理技術の当業者により使用される手段である。手順、コンピュータ実行ステップ、ロジックブロック、プロセス等は、ここで、且つ一般的に、希望の結果に至る自己矛盾のない一連のステップ又は命令であると考えられている。ステップは、物理量の物理的操作を必要とするものである。通常、必ずしもそうではないが、これらの量は、コンピュータシステムにおいて記憶されたり、転送されたり、結合されたり、比較されたり、その他の形にて操作されることのできる電気的又は磁気的信号の形を取っている。これらの信号を、ビット、値、要素、記号、文字、用語、数字等として記載するのが、時には、又、主として慣用されているという理由で、便宜的であることが分かっている。
【００１６】
[021]しかしながら、これらの及び同様の用語の全ては、適当な物理量に関連付けられるものであり、これらの量に適用される単なる便宜的なラベルに過ぎないことを、念頭におかれたい。前述したことから明らかなように、特に断らない限り、本発明を通じて、「処理する」、又は「アクセスする」、又は「実行する」、又は「記憶する」、又は「レンダリングする」等の如き用語を使用する説明は、コンピュータシステムのレジスタ及びメモリ内の物理（電子的）量として表されているデータを操作して、コンピュータシステムのメモリ又はレジスタ又は他の同様の情報記憶、送信又は表示デバイス内の物理量として同様に表される他のデータへと変換する集積回路（例えば、図１のコンピューティングシステム１００）又は同様の電子計算デバイスのオペレーション及び処理を指していることを、理解されたい。
【００１７】
＜コンピュータシステムプラットフォーム＞
[022]図１は、本発明の一実施形態によるコンピュータシステム１００を示している。コンピュータシステム１００は、本発明の実施形態による基本コンピュータシステムの構成要素を示しており、特定のハードウエアベースの機能及びソフトウエアベースの機能のための実行プラットフォームを提供する。一般的に、コンピュータシステム１００は、少なくとも１つのＣＰＵ１０１と、システムメモリ１１５と、少なくとも１つのグラフィック処理ユニット（ＧＰＵ）１１０と、を備えている。ＣＰＵ１０１は、ブリッジコンポーネント／メモリコントローラ（図示せず）を介してシステムメモリ１１５に結合され得、又は、ＣＰＵ１０１の内部のメモリコントローラ（図示せず）を介してシステムメモリ１１５に直接的に結合され得る。ＧＰＵ１１０は、ディスプレイ１１２に結合される。１つ以上の付加的なＧＰＵを、オプションとして、システム１００に任意的に結合して、計算能力を更に増大させることが可能である。ＧＰＵ１１０は、ＣＰＵ１０１及びシステムメモリ１１５に結合されている。ＧＰＵ１１０は、別個の構成部分、コネクタ（例えば、ＡＧＰスロット、ＰＣＩエクスプレススロット等）を介してコンピュータシステム１００に結合するように設計された別個のグラフィックカード、別個の集積回路ダイ（例えば、マザーボード上に直接に取り付けられた）として実施することができ、又は、コンピュータシステムチップセットコンポーネント（図示せず）の集積回路ダイ内に含まれた一体化ＧＰＵとして実施することもできる。さらに、高帯域グラフィックデータ記憶用のＧＰＵ１１０に対してローカルグラフィックメモリ１１４を含ませることもできる。
【００１８】
[023]ＣＰＵ１０１及びＧＰＵ１１０は、単一集積回路ダイとして一体化されていてもよく、これらＣＰＵ及びＧＰＵは、命令ロジック、バッファ、ファンクショナルユニットと等といった種々のリソースを共用してもよく、又は、グラフィック及び汎用オペレーション用に別個のリソースを設けてもよい。ＧＰＵは、更に、コアロジックコンポーネットに一体化されていてもよい。従って、ＧＰＵ１１０に関連するよう本明細書に説明する回路及び／又は機能の任意のもの又は全てのものは、適切に実装されたＣＰＵ１０１において実施でき、又は適切に実装されたＣＰＵ１０１により行うことができるものである。さらに、本明細書における実施形態は、ＧＰＵに関しているが、説明する回路及び／又は機能は、他のタイプのプロセッサ（例えば、汎用又は他の特定目的コプロセッサ）にて実施することもでき又はＣＰＵ内にて実施することができることに、注意されたい。
【００１９】
[024]システム１００は、例えば、専用グラフィックレンダリングＧＰＵ１１０に結合された強力汎用ＣＰＵ１０１を有するデスクトップコンピュータシステム又はサーバーコンピュータシステムとして実施することができる。このような実施形態では、周辺バス、特殊化オーディオ／ビデオコンポーネント、ＩＯデバイス等を加える構成要素を含ませることができる。同様に、システム１００は、ハンドヘルドデバイス（例えば、携帯電話等）、直接放送衛星（ＤＢＳ）／地上セットトップボックス、又は、例えば、ワシントン州レドモンドのマイクロソフトコーポレーションから入手できるＸｂｏｘ（登録商標）、又は日本国東京のソニーコンピュータエンターテインメントコーポレーションから入手できるＰｌａｙＳｔａｔｉｏｎ３（登録商標）のようなセットトップビデオゲームコンソールデバイスとして実施することができる。システム１００は、計算デバイスの電子装置（例えば、構成部分１０１、１１５、１１０、１１４等）が単一の集積回路ダイ内に全体的に含まれる「システムオンチップ」として実施することもできる。例としては、ディスプレイを有するハンドヘルド機器、カーナビゲーションシステム、携帯型娯楽システム等がある。
【００２０】
[025]本発明の実施形態は、通常、ＧＰＵのグラフィック処理利用度を増大させることができ、従って、グラフィック処理ユニット（ＧＰＵ）の性能を増大させることができる。実施形態では、テクスチャー結果を記憶するためのテクスチャーパイプラインバッファが設けられ、これにより、通常使用されているレジスタファイルの記憶スペースを空けることができるようになる。レジスタファイルにおいて使用可能なスペースが増大されると、実行ユニットがより多くのスレッドを同時に取り扱うことが可能となる。本発明の実施形態は、更に、パイプラインに対して発せられる複数のテクスチャー要求の数を制御して、それら結果が読み戻される各スレッドにおけるポイントへ常に達して実行可能とすることができるようにすることにより、パイプラインデッドロックを防止することができる。従って、本発明の実施形態は、デッドロックを起こすことなくプロセッサ性能を増大することができる。
【００２１】
[026]図２は、本発明の一実施形態によるＧＰＵの例示の実行ユニットのブロック図を示している。実行ユニット２００は、テクスチャーユニット２０２、数値演算ユニット２２０、スケジューラ２３０及びレジスタファイル２４０を含んでいる。ＧＰＵ（例えば、ＧＰＵ１１０）は、複数のスレッドを並列に実行するため、実行ユニット２００と実質的に同様の複数の実行ユニットを有することができることが、理解されよう。例えば、ＧＰＵは、各々２つの実行ユニットを有する８つのプロセッサグループを有し得る。従って、実施形態は、単一命令多重データ（ＳＩＭＤ）実行（例えば、並列における１６個のピクセルに対して１つの命令）を支援することができる。一実施形態では、本明細書で説明するスレッドは、当分野においてよく知られているように、画像又はビデオフレームの個々のピクセルである。
【００２２】
[027]テクスチャーユニット２０２は、テクスチャーパイプライン２０４及びパイプラインバッファ２１０を含んでいる。テクスチャーパイプライン２０４は、Ｎ個のスロット又はパイプライン位置２０６−２０８を有する。テクスチャーパイプライン２０４は、結果をパイプラインバッファ２１０へ書き込む。テクスチャーオペレーションは、比較的に長い時間（例えば、３００個のクロックサイクル）を要するメモリへのアクセスを必要とすることが多い。従って、テクスチャーパイプライン２０４は、このような遅延を受容するために、３００個のスロット又は要素長とし得る。例えば、テクスチャーパイプライン２０４は、隣接ピクセルを分析して、テクスチャーにおいてそれらピクセルの各々がどのくらい離れているかを決定することにより、ＬＯＤ（ｌｅｖｅｌ  ｏｆ  ｄｅｔａｉｌ）の計算を行うために、各スロットがクロックサイクル当たり４つのピクセルを受け取ることができるようにし得る。十分なワークロードを持って、テクスチャーパイプライン２０４をビジーに維持するためには、スロット当たり４ピクセルで３００個の深さをもったスロットを有するテクスチャーユニットに対しては、１２００個のピクセル又はスレッドのワークが必要とされる。他のスレッドは、テクスチャーオペレーションがテクスチャーパイプライン２０４によって行われている間、作動し続けることができる。複数のテクスチャーオペレーションを続けて発するようなスレッドの場合には、そのパイプラインをフルに維持するのに必要とされるスレッドはより少なくなる。例えば、２つのテクスチャーオペレーションを続けて発するスレッドの場合には、パイプラインをフルに維持するのに必要とされるスレッドの数は半数だけとなる。
【００２３】
[028]数値演算ユニット２２０は、スロット２２４〜２２６を有する数値演算パイプライン２２２を含んでいる。スレッドがテクスチャー要求の完了を待っている間に、数値演算ユニット２２０へ数値演算要求が発せられ得る。一実施形態では、数値演算ユニット２２０は、レジスタファイル２４０からソースデータを得て、結果デスティネーションデータをレジスタファイル２４０へ戻す。例えば、数値演算ユニット２２０がクロック当たり１６個のピクセルを取り扱え、結果を戻すのに５つのクロックを要する場合には、命令が独立しており且つ各スレッドが一時に１つの未完了の命令を有する限り、８０個のスレッドがその数値演算ユニットをビジーに維持する。別の実施例として、各スレッドが数値演算命令を発することができる場合には、各サイクルは、そのパイプラインをビジーに維持するのに１６個のスレッドを必要とする。前述の例を参照すると、１２８０個のスレッドがテクスチャーユニット２０２及び数値演算ユニット２２０の両方をビジーに維持する。１２８０個のスレッドが使用可能でない場合には、実行ユニットは、ワーク無しのままとされ、バブル、即ち処理アクティビティの全くない期間を生ずる。実行ユニットにおけるバブルは、そのパイプラインがロードされているときを除いて、望ましいものではないと、理解されている。
【００２４】
[029]性能を増大するためには、パイプラインを通して、より多くのスレッドを処理することが望ましい。従って、複数のテクスチャーオペレーションを有するスレッドを使用することにより、複数の増大したテクスチャースレッドを同時に処理することが可能となる。本発明の実施形態は、効果的な手段としてパイプラインバッファ２１０を提供して、相応に大きなレジスタファイルを必要とすることなく、テクスチャー記憶スペースを提供する。従来の技術においては、典型的には、同時に処理されるスレッドの数を増大させることができるようにするためには、相応に大きなレジスタファイルが必要とされていたのである。
【００２５】
[030]レジスタファイル２４０は、スレッド情報を記憶する。ワークの各ユニットは、スレッドを取り扱うためワークのユニットに関連する状態情報を有する。例えば、１つのピクセルについて、状態情報は、Ｘ、Ｙ及びテクスチャー座標を含み得る。レジスタファイル２４０のサイズは、数値演算ユニット及びテクスチャーの幅（例えば、クロック当たりのピクセル）及び深さ（例えば、クロックサイクル）に基づくことができる。即ち、レジスタの数は、未完了の状態において実行ユニット２００に存在し得るピクセル又はスレッドの数を制御する。一実施形態では、テクスチャーデータのための記憶スペースとしてテクスチャーパイプライン２０４及びパイプラインバッファ２１０を使用することにより、同じ数のスレッドを処理するのに必要なレジスタファイル２４０のリソースを減少させ、或いは、同じサイズのレジスタファイルが同時により多くのスレッドを処理することが可能であることにより、従来のユニットよりも性能を増大させる。
【００２６】
[031]一実施形態では、スケジューラ２３０が、テクスチャーオペレーションの座標をテクスチャーパイプライン２０４へ書き込む。テクスチャーパイプライン２０４へ書き込まれた座標に対応するレジスタファイル２４０の記憶位置は必要とされない。一実施形態では、テクスチャーユニット２０２は、テクスチャーパイプライン２０４に入る前に記憶されるべきテクスチャーオペレーション要求のためのバッファ（図示せず）を有し得る。従って、テクスチャーパイプライン２０４に入る前に記憶されるべきテクスチャーオペレーションのためのバッファにより、テクスチャーパイプライン２０４の前でバッファにおいてテクスチャー座標が生成され、それにより、テクスチャー座標をバッファリングするために使用され得たレジスタを空けておくことが可能とされる。
【００２７】
[032]パイプラインバッファ２１０は、テクスチャーパイプライン２０４から出力される結果を記憶するように動作することができる。スレッドは、各スロットが読み取られていない結果で占められてしまうことによりパイプラインが停止する前に、そのテクスチャーパイプラインからテクスチャーオペレーションの結果を読み出す。パイプラインバッファ２１０は、Ｎ個のスロット又は記憶位置２１２〜２１４を含む。パイプラインバッファ２１０は、パイプラインの停止を避けるよう結果がパイプラインバッファ２１０から読み出されることが必要となる前に所定量の時間を許容する。パイプラインバッファ２１０によれば、テクスチャー要求がテクスチャーパイプライン２０４へ発せられてテクスチャー要求がテクスチャーパイプライン２０４により処理されている間に、スペースを結果用にレジスタファイル２４０に割り当てることなく、テクスチャー要求をテクスチャーパイプライン２０４へ発することが可能となることが、理解されよう。従って、パイプラインバッファ２１０から結果を読み取るための記憶スペースは、その結果がパイプラインバッファ２１０において使用できるようになると、動的に割り当てられる。テクスチャーオペレーションがレジスタファイルを使用しないので、本発明の一実施形態によれば、各テクスチャーオペレーションは、２つのオペレーション、即ち、テクスチャーユニットに対する要求（テクスチャー要求）と、結果をそのテクスチャーユニットから読み戻すオペレーションに分けられる。
【００２８】
[033]一実施形態では、テクスチャー要求がテクスチャーパイプライン２０２の１つのスロットへ発せられると、パイプラインバッファ２１０における１つのスロットが、そのテクスチャー要求の結果を記憶するために割り当てられる。パイプラインバッファ２１０は、これに限定されないが、先入れ先出し（ＦＩＦＯ）バッファを含む種々の記憶タイプであってもよい。結果は順序通りでない態様にてパイプラインバッファ２１０から読み取ることができることは、理解されよう。例えば、１６個のスロットを有するバッファの場合には、発せられる要求は、１６番目毎に、同じスロットに割り当てられる。更に、１６個のスロットを有するバッファの場合には、テクスチャーパイプからの各結果は、バッファスロットの全てが使用できないものとなる（例えば、読み取られていない結果を有する）ことによりパイプラインが停止してしまうのを避けるよう、１６個のクロックサイクル内に読み取られる。バッファスロットは、命令がテクスチャーパイプラインに入れられたサイクルに基づくことができる。
【００２９】
[034]あるテクスチャー処理オペレーションは、他のテクスチャー処理オペレーションよりも実質的に多くの記憶スペースを必要とすることがある。例えば、あるテクスチャー処理オペレーションが、１６個のサンプルでテクスチャーをサンプリングし、それらの結果を平均化することを必要とすることがある。従来のテクスチャーパイプラインでは、平均化される位置の各々に対して、１６個のサンプルが必要とされる。それにより、従来のテクスチャーパイプラインのレジスタファイルの記憶スペースは増大し、所定の時間で処理できるスレッドの数が制限されてしまう。本発明の実施形態によれば、テクスチャーパイプラインへ１６個の要求を発し、次いで、それら結果を一時に１つずつ読み出して、それら結果を加算していくことができ、従って、レジスタファイル２４０において１６個のサンプルのためのスペースの必要性を減少させ又は省くことができる。更に、データがレジスタファイルに記憶される必要がある時、又は、結果がテクスチャーパイプラインバッファ２１０にて受け取られるにつれて計算できる時を決定するのに、コンパイラを係わらせることができることは、理解されよう。
【００３０】
[035]パイプラインバッファ２１０の使用により、より小さなレジスタファイルの使用が可能とされている。何故ならば、記憶位置が結果のために必要とされる前に、要求を発することができるからである。例えば、１６個の要求が発せられ、それから、レジスタファイルの座標に対応するスペースを、更なるスレッドに再割当てすることができる。テクスチャー結果が平均化される前述の例を参照すると、それらの結果は、単一レジスタにおいて結果を組み合わせることができるので、スペースの割当てを必要としない。従って、パイプラインバッファ２１０は、所定の時間でより多くのスレッドの処理を行うことができるようにし、それにより、実行ユニットをビジーに維持することができる。より詳細には、パイプラインバッファ２１０は、テクスチャーパイプライン２０４が記憶スペースとして効率的に使用され得るようにする。何故ならば、テクスチャーパイプライン２０４へ書き込まれた座標又は他のデータを記憶したレジスタファイル２４０の部分は、他のスレッドのためのデータの記憶スペースとして使用できるようになるからである。パイプラインバッファ２１０は、更に、所定の時間により多くのスレッドを処理できるようにすることにより、バブルを防止することができることは、理解されよう。
【００３１】
[036]パイプラインバッファ２１０の使用により、ソース及びデスティネーション命令のエミュレーションが可能となる。一実施形態では、スケジューラ２３０の状態マシンが、テクスチャー要求をテクスチャーユニット２０４へ書き込み、結果用の記憶スペースとしてレジスタファイル２４０を使用する代わりに、パイプラインバッファ２１０からそれら結果を読み取る。例えば、レジスタＲ０〜Ｒ３に記憶された座標のテクスチャーオペレーション用の命令（例えば、「テキストＲ０〜Ｒ３」）が実行され、そこでは、レジスタＲ０〜Ｒ３のデータがテクスチャーパイプライン２０４へ書き込まれ、結果がパイプラインバッファ２１０から読み取られ、レジスタＲ０〜Ｒ３に記憶される。ソース及びデスティネーション命令は、２つの命令、即ち、１）テクスチャー命令をテクスチャーパイプラインへ書き込むこと、及び、２）テクスチャーユニットからバッファへ結果を読み出すこと、になることは、理解されよう。
【００３２】
[037]図３は、複数のテクスチャーオペレーションを可能とする本発明の一実施形態による例示のスレッドの図を示している。例示のスレッド３００は、要求Ａ３０４、要求Ｂ３０６、要求Ｃ３０８、要求Ｄ３１０、ＭＡＤＤ３１２、読取り結果Ａ３１４、読取り結果Ｂ３１６、読取り結果Ｃ３１８及び読取り結果Ｄ３２０を含む。ＭＡＤＤ命令（例えば、ＭＡＤＤ３１２）は、テクスチャー結果に依存しておらず、従って、テクスチャー結果を待つ必要がないことは、理解されよう。一実施形態では、スレッド３００は、ＧＰＵ実行ユニット（例えば、実行ユニット２００）により実行される。スレッド３００が、より多くの要求、ＭＡＤＤ及び読取り結果を含み得ることは、理解されよう。要求３０４−３１０、ＭＡＤＤ３１２及び読取り結果３１４−３２０は、コンパイラにより配列され得る。
【００３３】
[038]プログラムカウンタ３０２は、要求Ａ３０４でスレッド３００の実行を開始する。一実施形態では、要求の数が決定され、この場合には、４つのテクスチャー要求３０４−３１０が存在する。使用可能なリソース（例えば、パイプラインスロット及びバッファ記憶位置を含むテクスチャーユニットスロット）の数が、４つのテクスチャーユニットリソースを使用することができるか否かについて、チェックされる。４つのテクスチャーリソースが使用できる場合には、リソース割当てカウンタが、パイプライン２０４に対して発せられている要求３０４−３１０に対応して４だけ増分させられる。４つのテクスチャーリソースをスレッド３００に割り当てることにより、テクスチャーオペレーションの完了時に、結果３１４−３２０が（例えば、パイプラインバッファ２１０から）読み取られることが保証されて、デッドロックが防止される。一実施形態では、リソースのチェック及びリソースの割当ては、アトミック操作である。
【００３４】
[039]使用可能な４つのテクスチャーリソースが存在しない場合には、スレッド３００は、４つのテクスチャーリソースが使用できるようになるまで、スリープ状態に置かれる。別のスレッドが、当該スレッドの実行のために十分なリソースがある場合には、実行され得る。テクスチャーオペレーションがテクスチャーパイプラインの下段に移動して、テクスチャー処理結果がそのパイプラインバッファから読み取られると、テクスチャーリソースが使用できるようになる。幾つかの実施形態によれば、スレッドは、全てのテクスチャー要求をパイプライン上に置くか、又は、何も置かないか、のみが許可されている。これにより、デッドロックが防止される。何故ならば、スレッドは、当該スレッドがパイプラインバッファからテクスチャー処理結果を読み取ることができるポイントに達するまでは、テクスチャーフェッチのいずれをも発することができないからである。結果バッファが一杯になると、パイプラインは、何かが読み取られるまでは、停止する。テクスチャー結果を読み取ることが予想されるスレッドが更なるテクスチャー要求を発するのを待つ場合には、デッドロックが生ずる。更に、これらのスレッドがテクスチャー結果を読み取らないシェーダプログラムを通してのパスを取る場合には、デッドロックが生ずる。
【００３５】
[040]一実施形態では、プログラムカウンタ３０２が要求３０６−３０８へと移動するときに、リソース割当てカウンタが、要求３０６−３０８の発行に関しては変化されない。読取り要求３１４−３２０の各々の発行時に、リソース割当てカウンタは、読取り要求３１４−３２０の各々が行われるにつれてパイプラインバッファ（例えば、パイプラインバッファ２１０）のスロットがフリーになることに対応して、１だけ減分される。
【００３６】
[041]リソーストラッキングは、種々の方法で実行され得ることが、理解されよう。例えば、リソース割当てカウンタは、テクスチャーユニットにおける空いている又は使用可能なリソースの数に初期化され、要求のセットが発せられる度に、当該カウンタは、その要求の数だけ減少させられる。各結果がテクスチャーユニットから読み取られると、カウンタは、増分される（例えば、そのカウンタは、結果３１４〜３２０の各々が読み取られるときに、増分される）。このことは、動的割当て構造を表している。
【００３７】
[042]デッドロックを防止するため、静的割当てを使用することもできることは、理解されよう。この実施形態では、どのくらいの数のスポットを、システムが保持することができるかが、知られている。例えば、テクスチャーユニットにおいて４００個のリソースが使用でき、各スレッドが４つのテクスチャーオペレーションを必要とする場合には、デッドロックを防止するために、スケジューラ２３０は、任意の時点で１００個の同時のスレッドのみを許容する。この場合には、カウンタは必要とされない。
【００３８】
[043]さらに、スレッドの命令は、実行を最適化するように、コンパイラにより配列又は順序付けされることが、理解されよう。例えば、テクスチャー要求が数値演算要求に依存していない場合には、当該テクスチャー要求は、当該数値演算要求（例えば、ＭＡＤＤ３１２）の前に移動され、当該テクスチャー要求が処理されている間に、当該数値演算要求を完了することができるようにすることができる。命令のこのような再配列は、命令が同時に実行され、テクスチャー要求情報がテクスチャーユニット（例えば、テクスチャーユニット２０２）に記憶されるので、スレッドが占めるスペースをより小さいものとすることを可能とする。コンパイラは、更に、予測ワークロード比率（例えば、各テクスチャー要求について４つの数値演算要求）を維持するように命令を配列し得る。ワークロード比率は、それによってハードウエアユニットが設計されたファクタであり、ワークをこの比率の当たりに平衡させることにより、ワークロードにおけるバブルを最少とすることができるものであることは、理解されよう。
【００３９】
[044]図４は、本発明の種々の実施形態によって使用される例示の構成要素を示している。システム４００においては、特定の構成要素が示されているのであるが、このような構成要素は例であることを、理解されたい。即ち、本発明の実施形態は、種々の他の構成要素又はシステム４００に示している構成要素の種々の変形を設けることでも、十分に適合できるものである。システム４００における構成要素は、本明細書に提示した以外の構成要素とでも動作できるものであり、また、システム４００の目的を達成するために、システム４００の構成要素の全てが必要とされているのでもないことは、理解されよう。
【００４０】
[045]図４は、本発明の一実施形態による例示のシステムのブロック図を示している。システム４００は、ハードウエア又はソフトウエアにて実施され得る。一実施形態では、システム４００は、ディスプレイに画像又はビデオをレンダリングするためのグラフィック命令を処理することができる。システム４００は、ＧＰＵの部分である実行ユニット４１０と通信し及び／又はそれを制御する。システム４００は、スケジューリングモジュール４０２、要求トラッキングモジュール４０４，リソース監視モジュール４０６及び実行モジュール４０８を含んでいる。
【００４１】
[046]スケジューリングモジュール４０２は、実行用にスレッドを選択する。スケジューリングモジュール４０２は、実行用にスレッドを選択し、そのスレッドの一部（例えば、１つ以上のテクスチャー要求及び１つ以上の数値演算要求）の実行のスケジューリングを行う。スケジューリングモジュール４０２は、実行用に次のスレッド又はその一部を選択することができる。
【００４２】
[047]要求トラッキングモジュール４０４は、テクスチャー要求の数を決定する。一実施形態では、それら要求は、テクスチャーユニット４１２又は数値演算ユニット４１４の実行パイプラインに対して発せられる。より詳細には、要求の数は、テクスチャー結果の読取り前のテクスチャーパイプラインに対するテクスチャー要求の数であってもよい。一実施形態では、テクスチャーユニット４１２のテクスチャーパイプラインは、テクスチャーユニット４１２のテクスチャーパイプラインからの結果を記憶するためのバッファを含む。本明細書に説明するように、それら要求は、コンパイラにより配列されていてもよい。
【００４３】
[048]リソース監視モジュール４０６は、実行パイプラインの使用可能なリソース（例えば、テクスチャーパイプライン及びパイプラインバッファ）の数を決定する。一実施形態では、リソース監視モジュール４０６は、テクスチャーユニット４１２の実行パイプラインの使用可能なリソースの数を決定する。別の実施形態では、リソース監視モジュール４０６は、使用可能な（例えば、再割当てされていない）リソースの数に対応するカウンタ、例えば、動的アーキテクチャーに基づいて、使用可能なリソースの数を決定する。更に別の実施形態では、リソース監視モジュール４０６は、所定の時間に進行中であることのできるスレッドの最大数に対応する数をチェックすることにより、例えば、静的アーキテクチャーにより、使用可能なリソースの数を決定する。
【００４４】
[049]実行モジュール４０８は、使用可能なリソースの数に基づいて要求を実行すべきか否かを決定し、実行パイプラインのリソースを割り当てる。要求のデータを記憶するのに十分なリソースを使用できない場合には、その要求又は要求のグループは、発せられない。一実施形態では、実行モジュール４０８は、それら要求を実行すべきか否かを決定し、パイプラインのリソースをアトミック操作として割り当て、それにより、同じリソースが２つ以上のスレッドへ割り当てられるという並列スレッド実行における問題を回避する。
【００４５】
[050]要求を実行すべきか否か及びリソースを割り当てるべきか否かを実行モジュール４０８が決定することにより、デッドロックが防止される。実行モジュール４０８は、（要求を有する）スレッドの部分が、結果が読み出さる部分へと、常に進むことができるようにする。換言すると、パイプライン内容は、それらが読み出される時にのみ、空となる。パイプラインが一杯であることによりスレッドがその内容を読み出すことができるポイントへ達することができない場合には、デッドロックが生ずる。本発明の実施形態によれば、要求のセットが発せられる前にリソースの完全割り当てがなされるか、又は、全く要求が発せられないようにすることができる。これにより、デッドロックが防止される。何故ならば、結果がテクスチャーユニットから読み取られる部分へと、そのプログラムが進むことができるかのチェックがなされるまでは、テクスチャー要求の全てが発せられないようにされているからである。一般的に言って、Ｘ個のテクスチャー要求を有するスレッドの場合には、それらＸ個のテクスチャー要求が発せられる前に、テクスチャーユニットにおけるＸ個のスロットが予約され又は割り当てられる。
【００４６】
[051]例えば、テクスチャーパイプラインが３００個のスロットを有し、バッファが１６個のスロット又は記憶位置を有する場合には、そのパイプラインの停止を生ずることなく、３１６個のテクスチャー要求をなし得る。スロットは、結果が読み取られ去るまでは、各要求に対してグループにて予約されたままである。例えば、スレッドが４つのテクスチャー要求を含む場合には、それら４つのテクスチャー要求は、テクスチャーユニットの４つのスロットがそれら要求に対応して割り当てられた状態にて発せられる（使用可能な４つのスロットがある場合のみ）。従って、各スレッドは、結果がテクスチャーユニット４１２から読み出されるポイントに当該スレッドが達することができるようにするのに十分なリソースがある場合にのみ、要求を発することができる。
【００４７】
[052]テクスチャーユニットのリソースがそのスレッドに対して割り当てられると、当該スレッドに対するリソースの割当てにより、それら要求が実行され得ることが保証されるので、テクスチャー要求がスケジューリングモジュール４０２次第で発せられることは、理解されよう。テクスチャー要求が完了するのに要する時間のため、スレッドは、結果がテクスチャーユニットから読み取ることができるようになるまで、又は、他の非テクスチャーオペレーションが完了されるまで、スケジューリングモジュール４０２によりスリープ状態に置かれる。例えば、テクスチャー結果を待っているスレッドは、数値演算ユニット（例えば、数値演算ユニット４１４）へ発する数値演算要求を有していてもよい。
【００４８】
[053]以下、図５及び図６を参照する。フローチャート５００及び６００は、本発明の種々の実施形態により使用される例示の機能を示している。フローチャート５００及び６００には、特定の機能ブロック（「ブロック」）が示されているが、このようなステップは例である。即ち、実施形態は、種々な他のブロック又はフローチャート５００及び６００に示されたブロックの種々の変形を行うのにも十分に適合され得る。フローチャート５００及び６００におけるブロックは、本明細書に示した順序と異なる順序にて行うことができること及びフローチャート５００及び６００におけるブロックの全てを行わなくてもよいことは、理解されよう。
【００４９】
[054]図５は、グラフィック処理ユニット（ＧＰＵ）の機能パイプラインのデッドロックを防止するためにパイプラインバッファを使用して種々のスレッドの実行結果を記憶する典型的なコンピュータ制御処理のフローチャートを示している。フローチャート５００の方法は、更に、スレッドのテクスチャーオペレーションを行うことにレジスタファイル記憶スペースを必要としないことにより、ＧＰＵの処理リソースの効率的な使用を可能とし得る。フローチャート５００の処理は、デッドロックを防止するための動的処理であることは、理解されよう。
【００５０】
[055]ブロック５０２において、パイプラインバッファ及び／又はパイプラインの使用可能なリソースの数が決定される。本明細書で説明するように、使用可能なリソースは、機能パイプライン（例えば、テクスチャーパイプライン）のパイプラインバッファの一部、又は、テクスチャーパイプラインのバッファ部分を含み得る。本明細書で説明するように、使用可能なリソースの数は、使用可能なリソースの数をトラッキングするカウンタに基づいて、決定することができる。
【００５１】
[056]ブロック５０４において、要求されるリソースの数が、第１のスレッドの１つ以上のテクスチャー要求に基づいて決定される。グループにてなされるテクスチャー要求の場合には、要求される数は、そのグループにおける要求の全てである。
【００５２】
[057]ブロック５０６において、要求されたリソースの数が使用可能なリソースの数より少ないことに応答して、その１つ以上の要求に対応するリソースが、パイプラインに割り当てられる。本明細書で説明するように、使用可能なリソースの数の決定及び要求されたリソースの数に対応するリソースの割当ては、アトミック操作であることができる。
【００５３】
[058]ブロック５０８において、使用可能なリソースの数が、発せられた要求を受容するように調整される。本明細書で説明するように、このような調整は、使用可能なリソースをトラッキングする数を増分することを含み得る。リソースの数は、リソースをトラッキングする数が実行ユニットのリソースと比較される方法に基づいて、増分又は減分されることは、理解されよう。
【００５４】
[059]ブロック５１０において、それら１つ以上の要求が発せられる。本明細書で説明するように、それら要求は、テクスチャー要求であってもよい。このような形式にて、テクスチャー要求のセットは、同じスレッドの対応する読取りが実行される時に、そのデータがそのバッファにあることが保証されるように、発せられる。
【００５５】
[060]ブロック５１２において、使用可能なリソースの数が調整される。本明細書で説明するように、この調整は、使用可能なリソースの数を減少させることを含み得る。要求を有する更なるスレッドがある場合には、ブロック５１６を行うことができ、第２のスレッドがアクセスされる。ブロック５１６が行われた後、ブロック５０２が、第２のスレッド用に行われる。要求結果の１つ以上が使用できる場合には、ブロック５１４を行うことができる。
【００５６】
[061]ブロック５１４において、それら１つ以上の要求に応答して１つ以上の結果が読み取られる。本明細書で説明するように、それら結果は、テクスチャーユニットのパイプラインバッファから読み取られる。次いで、ブロック５１６を行うことができ、第２のスレッドが選択される。
【００５７】
[062]図６は、機能パイプラインの結果データを、レジスタファイルでなく、パイプラインバッファへと書き込むシステムにおいて、本発明の一実施形態によりデッドロックを防止するための例示のコンピュータ制御処理のフローチャートを示している。一実施形態では、フローチャート６００の方法は、コンパイラにより行うことができる。フローチャート６００の処理は、デッドロックを防止するための静的処理であり得ることは、理解されよう。
【００５８】
[063]ブロック６０２において、実行ユニットのプロフィールが、ＧＰＵに対してアクセスされる。実行ユニットは、テクスチャーユニット及び数値演算ユニットを含み得る。一実施形態では、実行ユニットのプロフィールは、クロックサイクル当たり処理されるユニット（例えば、ピクセル）の数及びパイプラインリソースの数を含む。パイプラインリソースの数は、パイプライン深さ及びバッファサイズを含み得る。一実施形態では、バッファサイズは、テクスチャーパイプライン結果バッファのサイズに対応する。
【００５９】
[064]ブロック６０４において、デッドロック無しに実行され得るスレッド当たりのテクスチャー要求及びスレッドの数が決定される。本明細書に説明するように、スレッド当たりの要求及びスレッドの数は、テクスチャー要求の結果が読み取られる前に、発する必要のあるテクスチャー要求の数に基づき得る。例えば、テクスチャーパイプライン及びパイプラインバッファが４００個のスロットを有しており、読取りが必要とされる前にスレッド当たり４つのテクスチャー要求がある場合には、同時スレッドの数は、デッドロックを防止するため、このシステムでは１００に制限される。一実施形態では、スレッドの数は、次のタイルが処理される前に、空間タイルの全てのスレッドが完了するように、画像のタイルに基づく。例えば、ある１つのタイルの複数のスレッドが、プロセッサに存在している複数のタイルを利用するように、一緒にスケジューリングされる。これは、任意のキャッシュの局所性を利用し得ることが、理解されよう。こうして、タイルは、リソースの欠如のためテクスチャーパイプの停止を起こす可能性無く、テクスチャー要求及びテクスチャー戻しシーケンスを完了することができるように、処理される。
【００６０】
[065]ブロック６０６において、デッドロック無く実行され得るスレッド当たりの要求の数に基づいて、スレッドの命令が再配列される。本明細書に説明するように、コンパイラにより、結果がスレッドにより読み取られる前に、限定数の要求が発せられるよう、命令を再配列することができる。
【００６１】
[066]本発明の特定の実施形態の前述の説明は、例示のための説明として提示されたものである。これら説明は、これが全てであるというものでなく、又、本発明を、ここで開示した形そのものに限定しようとするものでなく、前述したことを考慮するならば、多くの変更及び変形が可能であるものである。これら実施形態は、本発明の原理及びその実際の応用について最良の説明をなし、それにより、他の当業者が、本発明及び種々な実施形態を、意図するような特定の用途に適合するように種々な変更を加えて最良に利用できるようにするために、選択され説明されているのである。本発明の範囲は、特許請求の範囲及びそれらの均等物により定められることを意図している。
【符号の説明】
【００６２】
１００…コンピュータシステム、１０１…ＣＰＵ、１１０…グラフィック処理ユニット（ＧＰＵ）、１１２…ディスプレイ、１１４…ローカルグラフィックメモリ、１１５…システムメモリ、２００…実行ユニット、２０２…テクスチャーユニット、２０４…テクスチャーパイプライン、２０６…パイプライン位置（スロット）、２０８…パイプライン位置（スロット）、２１０…パイプラインバッファ、２１２…記憶位置（スロット）、２１４…記憶位置（スロット）、２２０…数値演算ユニット、２２２…数値演算パイプライン、２２４…スロット、２２６…スロット、２３０…スケジューラ、２４０…レジスタファイル、３００…スレッド、３０２…プログラムカウンタ、３０４…テクスチャー要求Ａ、３０６…テクスチャー要求Ｂ、３０８…テクスチャー要求Ｃ、３１０…テクスチャー要求Ｄ、３１２…ＭＡＤＤ、３１４…読取り結果Ａ、３１６…読取り結果Ｂ、３１８…読取り結果Ｃ、３２０…読取り結果Ｄ、４００…システム、４０２…スケジューリングモジュール、４０４…要求トラッキングモジュール、４０６…リソース監視モジュール、４０８…実行モジュール、４１０…実行ユニット、４１２…テクスチャーユニット、４１４…数値演算ユニット、５００…フローチャート、６００…フローチャート。
【図１】
2010244529.tif 000003
【図２】
2010244529.tif 000004
【図３】
2010244529.tif 000005
【図４】
2010244529.tif 000006
【図５】
2010244529.tif 000007
【図６】
2010244529.tif 000008
【外国語明細書】
2010244529000001.pdf