(57)【要約】【課題】1つまたは複数のシェーダステージを含むグラフィックス処理パイプラインで、スレッドグループの処理に対する改善を提供すること。【解決手段】データ処理システムは、実行すべき命令のストリームに関して、命令ストリーム内で並べ替えることができる任意の命令が存在するか否かを判定し(41)、各々のこのような命令を命令完了トラッカに割り当て、命令のための符号化内に、命令が割り当てられている命令完了トラッカの指標を含める(42)。命令ストリーム内の各命令に対して、もしあれば、命令がどの命令完了トラッカに依存するかの指標も提供される(43、44)。次いで、命令完了トラッカに依存しているとして示される命令が実行されることになっている場合、命令を実行する前に、関連する命令完了トラッカの状態がチェックされる。【選択図】図3A
2014235747.tif 000002
【特許請求の範囲】
【請求項１】
データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインを含むデータ処理システムを動作させる方法であって、
実行ステージによって実行すべき命令のストリームについて、前記命令ストリーム内で並べ替えることができる任意の命令が存在するかどうかを判定するステップと、
前記命令ストリーム内で並べ替えることができると判定された各命令を、命令完了トラッカに割り当て、前記命令が割り当てられた前記命令完了トラッカの指標を前記命令のための符号化に含めるステップと、
命令完了トラッカに割り当てられている命令に依存する前記命令ストリーム内の各命令に対して、命令完了トラッカに割り当てられている命令に依存する前記命令がどの命令完了トラッカに依存するかの指標を前記命令ストリーム内に提供するステップと、
実行のための前記実行ステージに前記命令ストリーム内の命令をディスパッチするステップと、
前記命令ストリーム内の前記命令を実行する際、
前記割り当てられた命令完了トラッカを使用して前記命令の完了を追跡するステップと、
命令完了トラッカに依存しているとして示される任意の命令について、前記命令を実行する前に、その命令完了トラッカの状態をチェックするステップと
を含む、方法。
【請求項２】
並べ替えることができる前記命令ストリーム内の前記命令が、メモリロード、メモリ格納、メモリアトミック、属性補間、およびテクスチャルックアップを含む、請求項1に記載の方法。
【請求項３】
各命令完了トラッカが、前記命令の完了を追跡するために使用されるカウンタを備える、請求項1または2に記載の方法。
【請求項４】
命令が割り当てられている前記命令完了トラッカが、前記命令がどの命令トラッカに割り当てられているのかを指定する命令符号化内の領域内で示される、請求項1から3のいずれか一項に記載の方法。
【請求項５】
もしあれば、前記命令ストリーム内の命令に対して提供される、前記命令がどの命令完了トラッカに依存するかの前記指標が、前記命令ストリーム内の直前の命令内で示される、請求項1から4のいずれか一項に記載の方法。
【請求項６】
フェンス命令を前記命令ストリーム内に含めるステップをさらに含み、前記フェンス命令が、前記フェンス命令の後の命令が実行される前に、前記フェンス命令の前の前記ストリーム内の所与のタイプのすべての前記命令を強制的に完了させる、請求項1から5のいずれか一項に記載の方法。
【請求項７】
分岐命令を前記命令ストリーム内に含めるステップをさらに含み、前記分岐命令が、それに関連付けられた異なる命令トラッカ依存関係の2つ以上のセットを有し、命令トラッカ依存関係の前記セットのうちの1つが満たされる場合、分岐が取られる、請求項1から6のいずれか一項に記載の方法。
【請求項８】
前記データ処理システムが、グラフィックス処理動作を実行するためにグラフィックスシェーダプログラムを実行する1つまたは複数のプログラム可能なシェーダステージを含むグラフィックス処理パイプラインを含むグラフィックス処理システムを備える、請求項1から7のいずれか一項に記載の方法。
【請求項９】
データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインを含むデータ処理システムを動作させる方法であって、命令の前記実行が他の命令の完了に依存することができ、命令の完了が追跡され、前記命令の実行に関して他の命令の完了に依存する命令の依存関係は、前記依存関係の命令に関連付けることができ、
前記方法が、
実行すべき命令のストリーム内に、命令の依存関係の2つ以上の異なるセットが関連付けられている条件分岐命令を含めるステップであって、命令依存関係の各々の異なるセットが、それに関連して従うための前記命令ストリーム内の所与の経路を有する、ステップと、
実行のための実行ステージに前記命令ストリーム内の命令をディスパッチするステップと、
前記命令ストリーム内の前記条件分岐命令を実行する際、前記命令に関連する命令依存関係の前記セットの状態をチェックし、前記チェックに基づいて、前記命令ストリーム内の経路に従うステップと
を含む、方法。
【請求項１０】
データ処理動作を実行する命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインと、
前記実行パイプラインの実行ステージのための命令のストリームを生成するために、前記実行パイプラインのためのプログラムをコンパイルするコンパイラと
を備えるデータ処理システムであって、
前記コンパイラが、
実行ステージによって実行すべき命令のストリームについて、前記命令ストリーム内で並べ替えることができる任意の命令が存在するかどうかを判定し、
前記命令ストリーム内で並べ替えることができると判定された各命令を、命令完了トラッカに割り当て、命令が割り当てられた前記命令完了トラッカの指標を、前記命令のための符号化に含め、
命令完了トラッカに割り当てられている命令に依存する前記命令ストリーム内の各命令に対して、命令完了トラッカに割り当てられている命令に依存する命令がどの命令完了トラッカに依存するかの指標を前記命令ストリーム内に提供する
ように構成され、
前記実行パイプラインの少なくとも1つの実行ステージが、命令ストリーム内の命令を実行する際、
前記割り当てられた命令完了トラッカを使用して前記命令の完了を追跡し、
前記命令完了トラッカに依存しているとして示される任意の命令について、前記命令を実行する前に、その命令完了トラッカの状態をチェックする
ように構成されている、データ処理システム。
【請求項１１】
並べ替えることができる前記命令ストリーム内の前記命令が、メモリロード、メモリ格納、メモリアトミック、属性補間、およびテクスチャルックアップを含む、請求項10に記載のデータ処理システム。
【請求項１２】
各命令完了トラッカが、前記命令の完了を追跡するために使用されるカウンタを備える、請求項10または11に記載のデータ処理システム。
【請求項１３】
命令が割り当てられている前記命令完了トラッカが、前記命令がどの命令トラッカに割り当てられているのかを指定する命令符号化内の領域内で示される、請求項10から12のいずれか一項に記載のデータ処理システム。
【請求項１４】
もしあれば、前記命令ストリーム内の命令に対して提供される、前記命令がどの命令完了トラッカ依存するかの前記指標が、前記命令ストリーム内の直前の命令内で示される、請求項10から13のいずれか一項に記載のデータ処理システム。
【請求項１５】
前記コンパイラが、さらに、フェンス命令を前記命令ストリーム内に含めるように構成され、前記フェンス命令が、前記フェンス命令の後の命令が実行される前に、前記フェンス命令の前の前記ストリーム内の所与のタイプのすべての前記命令を強制的に完了させる、請求項10から14のいずれか一項に記載のデータ処理システム。
【請求項１６】
前記コンパイラが、さらに、分岐命令を前記命令ストリーム内に含めるように構成され、前記分岐命令が、それに関連付けられた異なる命令トラッカ依存関係の2つ以上のセットを有し、命令トラッカ依存関係の前記セットのうちの1つが満たされる場合、分岐が取られる、請求項10から15のいずれか一項に記載のデータ処理システム。
【請求項１７】
グラフィックス処理動作を実行するためにグラフィックスシェーダプログラムを実行する1つまたは複数のプログラム可能なシェーダステージを含むグラフィックス処理パイプラインを含むグラフィックス処理システムを備える、請求項10から16のいずれか一項に記載のデータ処理システム。
【請求項１８】
データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインの実行ステージのための命令を生成するためにプログラムをコンパイルするコンパイラであって、
前記実行パイプラインの実行ステージによって実行すべき命令のストリームに関して、前記命令ストリーム内で並べ替えることができる任意の命令が存在するかどうかを判定し、
前記命令ストリーム内で並べ替えることができると判定されている各命令を、命令完了トラッカに割り当て、前記命令が割り当てられている前記命令完了トラッカの指標を、前記命令の符号化に含め、
命令完了トラッカに割り当てられている命令に依存する前記命令ストリーム内の各命令に対して、命令完了トラッカに割り当てられている命令に依存する命令がどの命令完了トラッカに依存するかの指標を前記命令ストリーム内に提供する
ように構成されている、コンパイラ。
【請求項１９】
データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む、データ処理システムのための実行パイプラインであって、
前記実行パイプラインの少なくとも1つの実行ステージが、命令ストリーム内の命令を実行する際、
命令が命令完了トラッカに割り当てられている前記実行ステージのためのコンパイラによって提供される前記命令のための符号化内の指標に応答して、示された割り当てられた命令完了トラッカを使用して、前記命令の完了を追跡し、
前記実行ステージのためのコンパイラによって提供される命令のための符号化内の、前記命令ストリーム内の命令が命令完了トラッカに依存することの指標に応答して、前記命令完了トラッカに依存しているとして示される前記命令を実行する前に、前記示された命令完了トラッカの状態をチェックする
ように構成されている、実行パイプライン。
【請求項２０】
データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインであって、命令の前記実行が他の命令の完了に依存することができ、命令の完了が追跡され、前記命令の実行に関して他の命令の完了に依存する命令の依存関係は、前記依存関係の命令に関連付けることができる、実行パイプラインと、
処理回路網と
を備えるデータ処理システムであって、
前記処理回路網は、
実行すべき命令のストリーム内に、命令の依存関係の2つ以上の異なるセットに関連している条件分岐命令を含めることであって、命令依存関係の各々の異なるセットが、それに関連して従うための前記命令ストリーム内の所与の分岐経路を有する、含めること、および、
実行のための前記実行パイプラインに前記命令ストリーム内の命令をディスパッチすること
を行うように構成され、
前記実行パイプラインが、前記命令ストリーム内の前記条件分岐命令を実行する際、前記命令に関連する命令依存関係の前記セットの状態をチェックし、前記チェックに基づいて、前記命令ストリーム内の経路に従うように構成されている、
データ処理システム。
【請求項２１】
データ処理システム上で実行されると、請求項1から9のいずれか一項に記載の方法のすべてのステップを実行するように適合されたコードを含むコンピュータプログラム。
【請求項２２】
実質的に、添付図面のいずれか1つに関連して本明細書で説明されたようにデータ処理システムを動作させる方法。
【請求項２３】
実質的に、添付図面のいずれか1つに関連して本明細書で記載されたようなデータ処理システム。
【請求項２４】
実質的に、添付図面のいずれか1つに関連して本明細書で記載されたようなデータ処理システムのためのコンパイラ。
【請求項２５】
実質的に、添付図面のいずれか1つに関連して本明細書で記載されたようなデータ処理システムのための実行パイプライン。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理システムに関し、詳細には、1つまたは複数のプログラム可能な処理ステージ(「シェーダ」)を含むグラフィックス処理システムの動作に関する。
【背景技術】
【０００２】
当技術分野で知られているように、グラフィックス処理は、最終的なレンダ出力、たとえば、表示されるフレームを生成するために、典型的には、パイプライン方式で、データに対して動作する1つまたは複数のパイプラインステージによって実行される。多くのグラフィックス処理パイプラインは、現在、一般に「シェーダ」と呼ばれる、1つまたは複数のプログラム可能な処理ステージを含む。たとえば、グラフィックス処理パイプラインは、ジオメトリシェーダ、頂点シェーダ、およびフラグメント(ピクセル)シェーダのうちの1つまたは複数、典型的にはすべてを含むことができる。これらのシェーダは、グラフィックスパイプラインの残りによって処理するための、および/または出力するための出力データ(たとえば、頂点シェーダの場合、適切に変換され、照明処理された(lit)頂点データ)の所望のセットを生成するために、入力データ値に対してシェーダプログラムを実行するプログラム可能な処理ステージである。グラフィックス処理パイプラインのシェーダは、プログラム可能な処理回路網を共有することができ、またはそれらは、各々別個のプログラム可能な処理ユニットであってもよい。
【０００３】
グラフィックス処理ユニット(GPU)シェーダコアは、したがって、レンダターゲット、たとえば、フレームなど、生成すべきグラフィックス出力内の各グラフィックスアイテムのための小さいプログラムを実行することによってグラフィックス処理を実行する処理ユニットである(この場合、「アイテム」は、通常、頂点またはフラグメント(ピクセル)である)。これは、一般に、典型的なレンダ出力、たとえば、フレームが、それぞれを独立して処理することができるかなり多くの頂点およびフラグメントを特徴とするという点で、高度な並列性を可能にする。
【０００４】
当技術分野で知られているように、グラフィックス処理パイプラインの所与の「シェーダ」によって実行すべきシェーダプログラムは、GLSL、HLSL、OpenCLなどの高レベルのシェーダプログラミング言語を使用するグラフィックス処理を必要とするアプリケーションによって提供されることになる。このシェーダプログラムは、関連した言語標準(仕様)で定義された所望のプログラミングステップを示す「式」から構成されることになる。高レベルのシェーダプログラムは、次に、シェーダ言語コンパイラによって、目標のグラフィックス処理パイプラインのためのバイナリコードに変換される。このバイナリコードは、所与の目標のグラフィックス処理パイプラインのための命令セット仕様で指定された「命令」から構成されることになる。当技術分野で知られているように、シェーダ言語表現をバイナリコード命令に変換するためのコンパイルプロセスは、コンパイラ内のプログラムのいくつかの中間表現を介して行われてもよい。したがって、高レベルのシェーダ言語で書かれるプログラムは、コンパイラ固有の中間表現に変換されてもよく(コンパイラ内にいくつかの連続的な中間表現が存在してもよい)、最終的な中間表現が、目標のグラフィックス処理パイプラインのためのバイナリコード命令に変換される。
【０００５】
シェーダ実行効率を向上させる既知の方法は、実行スレッド(各スレッドは、1つの頂点または1つのフラグメント(ピクセル)に対応する)を、スレッドの「グループ」または「バンドル」にグループ化することであり、1つのグループのスレッドは、一度に1つの命令のロックステップで実行される。このように、命令フェッチおよびスケジューリングリソースを、グループ内のすべてのスレッド間で共有することができる。(このようなスレッドグループに使用される他の用語は、「ワープ」および「波面(wavefront)」を含む。便宜上、「スレッドグループ」という用語が、本明細書で使用されるが、これは、特に明記しない限り、すべての等価の用語および構成を包含することを意図している。)
【０００６】
スレッドグループアーキテクチャでの実行ユニットは、典型的には、深くパイプライン化される。これらは、通常、クロックサイクル毎に実行を複数のスレッドグループ間で交互に行うことによって、高利用率に保たれる。
【０００７】
既存のスレッドグループアーキテクチャでは、グループ内の命令の実行は、厳密に順番通りの方法で行われ、スレッドグループが命令の実行を開始すると、現在の命令が完了するまで、次の命令に進むことはできない。
【０００８】
算術命令は、典型的に、かなり短いレイテンシを有するため、これは、通常、算術命令に関する問題ではない。GPUは、通常、算術のみのコードの利用率をかなりうまく維持するためには十分すぎるほどに実行中のスレッドグループを有する。
【０００９】
しかしながら、非決定的なレイテンシを有する命令については、はるかにずっと問題である可能性がある。このような命令の例は、メモリアクセス(ロード、格納、およびアトミック)およびテクスチャルックアップを含む。メモリアクセスは、キャッシュヒットの場合、低いレイテンシを有することができるが、キャッシュミスの場合、かなり高いレイテンシを示す傾向がある。これは、特に、ロードおよびアトミックに関する場合である(格納の場合は、しばしば、書き込み収集(write gathering)を実行することによって、レイテンシを隠すことができる)。テクスチャルックアップは、比較的高いキャッシュミス率によるメモリアクセス、ならびにメモリアクセスの前および後の両方での多数の固定機能の処理ステージを特徴とする傾向がある。
【００１０】
順次スレッドグループベースのアーキテクチャでは、少数のキャッシュミスが、キャッシュミスが解決されるために待機している間に、スレッドグループの大部分またはすべてでさえ容易にブロックさせる可能性がある。これは、ときには、同じメモリ領域に対するキャッシュミスを生成する複数のスレッドグループによってさらに悪化される。
【００１１】
また、スレッドのロックステップ実行のため、単一のスレッドグループ命令に関して複数のキャッシュミスを被る可能性がある。これは、グループ内の個々のスレッドが、異なるキャッシュラインでキャッシュミスを被る場合に発生する。この場合、すべてのキャッシュミスが解決されるまで、グループは、続行することができず、これは、長い時間がかかる可能性がある。
【００１２】
ときには、スレッドグループの大きいグループが「バンチ」を形成する場合、「バンチング」現象も生じる。この「バンチ」は、異なるタイプの実行ユニット間を全体として移動する傾向があり、その結果、「バンチ」によって現在占有されている実行ユニットは、他の実行ユニットが休止している間、フルレートで実行している。休止する実際の実行ユニットは、「バンチ」が実行される間、あちこちにシフトする。これは、かなり劣った実行ユニット利用率をもたらす。
【発明の概要】
【発明が解決しようとする課題】
【００１３】
本出願人は、したがって、たとえば、1つまたは複数のシェーダステージを含むグラフィックス処理パイプラインで、スレッドグループの処理に対する改善の余地が残っていると考えている。
【課題を解決するための手段】
【００１４】
本発明の第1の態様によれば、データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインを含むデータ処理システムを動作させる方法が提供され、この方法は、
実行ステージによって実行すべき命令のストリームについて、命令ストリーム内で並べ替えることができる任意の命令が存在するかどうかを判定するステップと、
命令ストリーム内で並べ替えることができると判定された各命令を、命令完了トラッカに割り当て、命令が割り当てられている命令完了トラッカの指標を、命令のための符号化に含めるステップと、
命令完了トラッカに割り当てられている命令に依存する命令ストリーム内の各命令に対して、命令完了トラッカに割り当てられている命令に依存する命令がどの命令完了トラッカに依存するかの指標を命令ストリーム内に提供するステップと、
実行のための実行ステージに命令ストリーム内の命令をディスパッチするステップと、
命令ストリーム内の命令を実行する際、
割り当てられた命令完了トラッカを使用して命令の完了を追跡するステップと、
命令完了トラッカに依存しているとして示される任意の命令について、命令を実行する前に、その命令完了トラッカの状態をチェックするステップと
を含む。
【００１５】
本発明の第2の態様によれば、データ処理システムが提供され、このデータ処理システムは、
データ処理動作を実行する命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインと、
実行パイプラインの実行ステージのための命令を生成するために、実行パイプラインのためのプログラムをコンパイルするコンパイラとを備え、
コンパイラは、
実行パイプラインの実行ステージによって実行すべき命令のストリームについて、命令ストリーム内で並べ替えることができる任意の命令が存在するかどうかを判定し、
命令ストリーム内で並べ替えることができると判定された各命令を、命令完了トラッカに割り当て、命令が割り当てられた命令完了トラッカの指標を命令のための符号化に含め、
命令完了トラッカに割り当てられている命令に依存する命令ストリーム内の各命令に対して、命令完了トラッカに割り当てられている命令に依存する命令がどの命令完了トラッカに依存するかの指標を命令ストリーム内に提供する
ように構成され、
実行パイプラインの少なくとも1つの実行ステージは、コンパイラからの命令ストリーム内の命令を実行する際、
割り当てられた命令完了トラッカを使用して命令の完了を追跡し、
命令完了トラッカに依存しているとして示される任意の命令について、命令を実行する前に、その命令完了トラッカの状態をチェックする
ように構成されている。
【００１６】
本発明は、データ処理パイプライン内の命令ストリーム(シーケンス)の実行に関する。しかしながら、本発明では、命令ストリーム内で並べ替えることができる、実行ステージに関する命令ストリーム内の命令(すなわち、順不同で実行されることが許可されることになる命令)は、識別され、次にそれらの完了が追跡され、もしあれば、そのように識別された命令に対する命令ストリーム内の命令の依存関係は、命令ストリーム内に符号化される。以下にさらに議論されるように、これは、任意の必要な命令依存関係が強制され得ることを依然として保証しながら、所与の命令シーケンス(ストリーム)内の命令が順不同で実行されることを(それが可能である場合)容易にする。その場合、これにより、たとえば、厳密に順番通りのスレッドグループ内の命令の実行に関連する、上述した問題を回避、または少なくとも低減することができる。
【００１７】
上述したように、本発明は、グラフィックス処理システムでの特定の用途を有することになると考えられる。したがって、データ処理システムは、好適には、グラフィックス処理システムを含み、実行パイプラインは、好適には、グラフィックス処理パイプラインを備え、実行ステージは、好適には、グラフィックス処理動作を実行するためにグラフィックスシェーダプログラムを実行する1つまたは複数のプログラム可能なグラフィックスシェーディングステージ(シェーダ)を備える。しかしながら、本発明は、同様の問題が生じる可能性がある、スカラまたはスーパスカラCPUパイプラインなどの、CPUなどの他の形態のデータ処理システムに等しく適用可能である。
【００１８】
同様に、上述したように、本発明は、実行スレッドがスレッドグループ内に一緒にグループ化され得るデータ処理システムに特定の用途を有することになると考えられ、スレッドグループでは、グループのスレッドは、ロックステップで、一度に1命令実行される。したがって、データ処理システム、たとえば、グラフィックス処理システムは、好適には、実行スレッドがスレッドグループ内に一緒にグループ化され得るものであり、スレッドグループでは、グループのスレッドは、ロックステップで、一度に1命令実行され、実行ステージによって実行すべき命令のストリームは、好適には、スレッドグループによって実行すべき命令のストリーム(シーケンス)である。
【００１９】
並べ替えることができる命令ストリーム内の命令は、任意の適切かつ所望の命令であってもよい。好適実施形態では、並べ替えることができる特定の選択された命令タイプのセットが存在する(それゆえ、特定のタイプの任意の命令が、命令ストリーム内に存在するかどうかが判定される)。好適実施形態では、「並べ替え可能な」命令(すなわち、順不同で実行されることが許可される命令)は、メモリロード、メモリ格納、メモリアトミック、属性補間、およびテクスチャルックアップのうちの1つまたは複数、好ましくはすべてを含む。
【００２０】
命令完了トラッカは、任意の所望かつ適切な方法で実現されてもよい。好適実施形態では、各トラッカは、命令の完了を追跡するために使用されるカウンタを備える。好適には、カウンタは、そのカウンタによって追跡されている命令が、適切な実行ユニットにディスパッチされると、インクリメントされ、命令が実際に完了すると、デクリメントされる。この場合、「0」のカウントは、問題のカウンタによって現在追跡されているすべての命令が完了していることを示すことになる(ゼロより大きいカウントは、そのトラッカに関する未処理の動作の数を示すことになる)。
【００２１】
命令トラッカは、任意の1時点で追跡することができる命令のセット数(たとえば、最大カウント値)を有することができる。これは、1命令程度に小さくてもよく、異なるトラッカについて異なっていてもよい。トラッカに関する命令の最大数に達している場合、そのトラッカを使用することになっている任意の新しい命令は、好適には、(トラッカが、新しい命令を追跡できるようになるまで)スレッドグループをストールさせる。
【００２２】
命令完了トラッカの数は、所望のように選択されてもよい。たとえば、実行ユニットおよび/またはスレッドグループに対して1つのみの命令完了トラッカが存在してもよいが、好適実施形態では、実行ユニットおよび/またはスレッドグループに対して複数の命令完了トラッカ、たとえば、2、4、または8個の命令完了トラッカが存在する。たとえば、ロード命令に対して1つのトラッカ、および格納命令に対して1つのトラッカ、または各ロードおよび格納命令に対して複数のトラッカなどが存在してもよい。
【００２３】
したがって、好適には、たとえば、スレッドグループのためのカウンタのセットを含む、たとえば、スレッドグループのための(そして、各スレッドグループのための)命令完了トラッカのセットが存在する。これは、事実上、したがって、命令ストリーム内の命令の依存関係を強制および追跡するために使用され得る「スコアボード」を提供し、各トラッカ(カウンタ)は、スコアボード中の1つの「スロット」または「エントリ」である。
【００２４】
関連データ(スコアボードに関するデータ構造)(カウント値)は、所望のように、たとえば、パイプラインメモリの適切な領域に格納されてもよい。
【００２５】
並べ替えることができる命令が識別されると、命令完了トラッカに割り当てられる。この割り当ては、好適には、レジスタ割り当てと同様の方法で行われる。たとえば、互いに独立した2つ以上のロードが存在する場合、1つのロードにのみ依存する命令が実行される前に、両方のロードが完了するのを待つ必要がないように、各ロードを異なる完了トラッカに割り当てることが望ましい可能性がある。一般に、システムは、所望のようにより効率的な動作を容易にするために、命令を完了トラッカに割り当てることができる。
【００２６】
命令が割り当てられている命令完了トラッカは、それ自体をコーディングする命令で示される(命令に含まれる)。好適には、どの命令トラッカに命令が割り当てられているのかを指定する命令符号化内の領域が存在する。この指標は、次に、命令がディスパッチおよび実行されるとき、命令完了トラッカ(たとえば、カウンタ)を更新するために使用される。
【００２７】
命令ストリーム内の並べ替え可能な命令を識別するだけでなく、命令ストリーム内の各命令に対して、もしあれば、命令がどの命令完了トラッカに依存するかの(すなわち、命令ストリーム内の他の命令に対する依存関係の影響の)指標が提供される。この指標は、好適には、(たとえば、命令のフィールド内の)命令コーディングの一部として、命令ストリームに含まれる。この指標は、それ自体が関係する命令によって符号化されてもよい(すなわち、問題の命令(動作)に依存する)が、好適実施形態では、この指標は、命令ストリーム内の直前の命令内に示される(命令ストリーム内の直前の命令によって符号化される)。この場合、これにより、命令完了追跡情報に基づいて、依存関係がある命令に対する命令フェッチを保留させることが可能になる。これは、電力消費を低減するのを助けることができる。
【００２８】
命令が実行されるとき、命令に関する指示された命令完了トラッカ依存関係が、最初にチェックされる。好適には、関連する命令完了トラッカのすべてが、それらが追跡しているすべての命令が完了したことを示す(たとえば、「0」のカウント値を有する)場合、命令は実行されるが、関連する命令完了トラッカのいずれかが、未処理の命令が存在することを示す(たとえば、ゼロより大きいカウント値を有する)場合、すべての関連する命令完了トラッカが、それらが追跡しているすべての命令が完了されたことを示すまで、命令の実行は、保留される(ストールされる)。命令は、所望のようにストールされてよく、パイプラインは、例えば、この場合、無関係なスレッドグループを代わりに実行する。
【００２９】
この構成は、命令の順不同の実行を、それが可能である場合、依然として促進しながら、データ依存関係が、それらが命令ストリーム内に実際に存在する場合、強制されることを可能にする。
【００３０】
本発明は、命令ストリーム内の依存関係を追跡および強制するための「スコアボード」構成を効果的に提供することが、上記から理解されるであろう。しかしながら、従来のスコアボードシステムとは異なり、本発明のスコアボードは、「明示的」であり、スコアボードの存在および機能は、命令コーディング内に露出される(依存関係などは、実際の実行可能なコード内にマークされる)。これは、たとえば、実行ステージ(ユニット)が、どのような依存関係の決定自体を実行するどのような必要性も排除し、それにより、たとえば、電力消費を低減し、たとえば、コンパイラが、依存関係を有する命令を設定することを可能にする。
【００３１】
好適実施形態では、「フェンス」命令が、命令ストリーム内に含まれて(命令ストリームに追加されて)よく、「フェンス」命令は、「フェンス」命令の後の任意の命令が実行される前に、「フェンス」命令の前のストリーム内の所与のタイプのすべての命令を強制的に完了させる。これは、命令ストリーム内の命令のグループが順番に実行されることを保証するために使用され得る。この場合、「フェンス」命令は、たとえば、1つのタイプの命令のみ、たとえば、ロード命令もしくは格納命令に、または2つ以上のタイプの命令、たとえば、ロードおよび格納命令の両方に関連することができる。このような「フェンス」命令は、(ロードおよび格納「フェンス」について)すべての命令完了トラッカに依存しているとして示されるロードおよび格納命令、(ロード「フェンス」について)以前のロード命令を追跡するために使用されているすべての命令完了トラッカに依存しているとして示されるロード命令などによって実施されてもよい。
【００３２】
好適実施形態では、その上、または代わりに、実行パイプラインが、たとえば、同じスレッドグループから起こるすべてのロード/格納に対して、このような「フェンス」命令を暗黙のうちに挿入することが可能である。
【００３３】
好適実施形態では、「分岐」命令が、命令ストリーム内に含まれて(命令ストリームに追加されて)よく、「分岐」命令は、それに関連付けられた異なる命令完了トラッカ依存関係の2つの(またはより多くの)セットを有し、命令完了トラッカ依存関係のセットのうちの1つが満たされる場合、適切な分岐が取られる。これは、命令ストリーム内の依存関係の複数の異なるセットの第1のものが満たされる場合にトリガされる、条件分岐機構を提供することができる。これは、たとえば、異なる未処理の命令が完了するのを待機する2つ以上の命令が存在するが、待機命令は、互いに対して任意の順序で実行されてもよい場合、望ましい可能性がある。この場合、分岐命令は、どの待機命令が満たされる第1のものであるかを決定する(そして次に、その命令を分岐させ、他の命令は、その後に実行される)ため使用され得る。好適実施形態では、分岐命令がチェックされる時、どの分岐条件も満たされない場合、分岐命令は、分岐条件の1つが満たされるまで、ストールされる。
【００３４】
このような分岐命令は、新規であり、それ自体で発明的であり得ると考えられる。
【００３５】
本発明の別の態様によれば、データ処理動作を実行するためにプログラム命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインを含むデータ処理システムを動作させる方法が提供され、命令の実行は、他の命令の完了に依存することができ、命令の完了は追跡され、命令の実行に関して他の命令の完了に依存する命令の依存関係は、依存関係の命令に関連付けることができ、
この方法は、
実行すべき命令のストリーム内に、命令の依存関係の2つ以上の異なるセットに関連付けられている条件分岐命令を含めるステップであって、命令依存関係の各々の異なるセットが、それに関連して従うための命令ストリーム内の所与の経路を有する、ステップと、
実行のための実行ステージに命令ストリーム内の命令をディスパッチするステップと、
命令ストリーム内の条件分岐命令を実行する際、命令に関連する命令依存関係のセットの状態をチェックし、チェックに基づいて、命令ストリーム内の経路に従うステップと
を含む。
【００３６】
本発明の別の態様によれば、データ処理システムが提供され、このデータ処理システムは、
データ処理動作を実行するためにプログラム命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインであって、命令の実行は、他の命令の完了に依存することができ、命令の完了は追跡され、命令の実行に関して他の命令の完了に依存する命令の依存関係は、依存関係の命令に関連付けることができる、実行パイプラインと、
処理回路網と
を備え、この処理回路網は、
実行すべき命令のストリーム内に、命令の依存関係の2つ以上の異なるセットに関連している条件分岐命令を含めることであって、命令依存関係の各々の異なるセットは、それに関連して従うための命令ストリーム内の所与の経路を有する、含めること、および
実行のための実行パイプラインに命令ストリーム内の命令をディスパッチすること
を行うように構成され、
実行パイプラインは、命令ストリーム内の条件分岐命令を実行する際、命令に関連する命令依存関係のセットの状態をチェックし、チェックに基づいて、命令ストリーム内の経路に従うように構成されている。
【００３７】
当業者によって理解されるように、本発明のこれらの態様および実施形態は、本明細書に記載の本発明の好適およびオプションの特徴の任意の1つもしくは複数またはすべてを、適宜に含むことができる。
【００３８】
命令ストリーム内の並べ替えることができる命令の識別、命令完了トラッカの割り当て(および命令のための符号化へのその包含)、ならびにもしあれば、各命令がどの命令完了トラッカに依存するかの指標の命令ストリームへの提供は、実行パイプラインのためのコンパイラによって実行される。グラフィックス処理システムの場合には、グラフィックス処理パイプラインのためのシェーダコンパイラが、好適には、この動作を実行する。コンパイラは、たとえば、好適実施形態では、実行パイプラインを含むデータ処理システムのホストプロセッサ上で動作することができる((コンパイラおよびコンパイルされたコードが、全体的なデータ処理システム、たとえば、グラフィックス処理システム内の別々のプロセッサ上で動作することになるように)実行パイプラインは、ホストプロセッサに関連付けられた、グラフィックスプロセッサなど、別のプロセッサ上にある)。しかしながら、コンパイルされたコードと同じプロセッサ上で動作するコンパイラ、または別個のシステム上で事前にコンパイルされており、コンパイルされた形態で配布されるプログラムなど、別個のプロセッサ上で動作しているコンパイラなど、他の構成も可能である。
【００３９】
本発明は、コンパイラ自体にもおよぶ。したがって、本発明の別の態様によれば、データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインの実行ステージのための命令を生成するためにプログラムをコンパイルするコンパイラが提供され、このコンパイラは、
実行パイプラインの実行ステージによって実行すべき命令のストリームに関して、命令ストリーム内で並べ替えることができる任意の命令が存在するかどうかを判定し、
命令ストリーム内で並べ替えることができると判定されている各命令を、命令完了トラッカに割り当て、命令が割り当てられている命令完了トラッカの指標を、命令の符号化に含め、
命令完了トラッカに割り当てられている命令に依存する命令ストリーム内の各命令に対して、命令完了トラッカに割り当てられている命令に依存する命令がどの命令完了トラッカに依存するかの指標を命令ストリーム内に提供する
ように構成されている。
【００４０】
したがって、本発明の別の態様によれば、データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含む実行パイプラインの実行ステージのための命令を生成するためにプログラムをコンパイルする方法が提供され、この方法は、
実行パイプラインの実行ステージによって実行すべき命令のストリームに関して、命令ストリーム内に並べ替えることができる任意の命令が存在するかどうかを判定するステップと、
命令ストリーム内で並べ替えることができると判定されている各命令を、命令完了トラッカに割り当て、命令の符号化に、割り当てられている命令完了トラッカの指標を含めるステップと、
命令完了トラッカに割り当てられている命令に依存する命令ストリーム内の各命令に対して、命令完了トラッカに割り当てられている命令に依存する命令がどの命令完了トラッカに依存するかの指標を命令ストリーム内に提供するステップと
を含む。
【００４１】
本発明は、本発明の命令に応じて(および本発明の命令を使用して)(すなわち、それ自体を並べ替えることができる命令を検出する必要なく、またはこのような検出を行う回路網を有する必要なく)順不同の処理を実行することができる実行ステージを有する実行パイプラインにもおよぶ。
【００４２】
したがって、本発明の別の態様によれば、データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含むデータ処理システムのための実行パイプラインが提供され、
実行パイプラインの少なくとも1つの実行ステージは、命令ストリーム内の命令を実行する際、
命令が命令完了トラッカに割り当てられている実行ステージのためのコンパイラによって提供される命令のための符号化内の指標に応答して、示された割り当てられた命令完了トラッカを使用して、命令の完了を追跡し、
実行ステージのためのコンパイラによって提供される命令のための符号化内の、命令ストリーム内の命令が命令完了トラッカに依存することの指標に応答して、命令完了トラッカに依存しているとして示される命令を実行する前に、示された命令完了トラッカの状態をチェックする
ように構成されている。
【００４３】
本発明の別の態様によれば、データ処理動作を実行するために命令を実行する1つまたは複数のプログラム可能な実行ステージを含むデータ処理システムのための実行パイプラインを動作させる方法が提供され、この方法は、
実行パイプラインの少なくとも1つの実行ステージが、命令ストリーム内の命令を実行する際、
命令が命令完了トラッカに割り当てられている実行ステージのためのコンパイラによって提供される命令のための符号化内の指標に応答して、示された割り当てられた命令完了トラッカを使用して、命令の完了を追跡するステップと、
命令ストリーム内の命令が命令完了トラッカに依存する実行ステージのためのコンパイラによって提供される命令のための符号化内の命令に応答して、命令完了トラッカに依存しているとして示される命令を実行する前に、示された命令完了トラッカの状態をチェックするステップと
を含む。
【００４４】
当業者によって理解されるように、本発明のこれらの態様は、本明細書に記載の本発明の好適およびオプションの特徴の任意の1つもしくは複数またはすべてを、適宜に含むことができ、好適には含む。
【００４５】
グラフィックス処理パイプラインの場合、実行ユニット(ステージ)は、好適には、頂点シェーダ、フラグメントシェーダなど、グラフィックス処理パイプラインのプログラム可能なシェーディングステージを含む。これらのステージは、所望のように任意の適切な方法で実現されてもよく、任意の所望のかつ適切なシェーディング、たとえば、頂点シェーディング、フラグメントシェーディングなどの機能を、それぞれ、適宜に実行することができる。フラグメントシェーダの場合、たとえば、フラグメントシェーダは、たとえば、表示のためのフレームを表すレンダ出力値のセットを生成するために、プリミティブをレンダリングすることができる。これらの出力値は、次に、表示のためのフレームバッファなど、格納および使用のための外部メモリにエクスポートされてもよい。
【００４６】
好適には、実行パイプラインのすべての実行ステージ(各実行ステージ)は、本発明の方法で動作することができ、実際に動作する。
【００４７】
各プログラム可能な処理ステージ(実行ユニット)は、プログラム可能な処理回路など、任意の適切なプログラム可能なハードウェア要素を含むことができる。各プログラム可能な処理ステージは、処理パイプラインの他のプログラム可能なステージに、別個の回路要素として提供されてもよく、またはプログラム可能な処理ステージは、それらのプログラム可能な処理回路網の一部もしくは全部(この場合、所望のプログラム可能な処理ステージとして機能するように異なってプログラムされる)を共有してもよい。
【００４８】
プログラム可能な処理(シェーダ)ステージだけでなく、グラフィックス処理パイプラインは、グラフィックス処理パイプラインが含むことができる、ラスタライザ、初期深度(または初期深度およびステンシル)テスタ、後期深度(または深度およびステンシル)テスタ、ブレンダ、タイルバッファ、書き出しユニットなど、任意の他の適切な所望の処理ステージを含むこともできる。
【００４９】
本発明は、表示のためのフレーム、テクスチャ出力のためのレンダなど、生成するためにグラフィックス処理パイプラインが使用され得るすべての形態の出力に使用され得る。グラフィックス処理からの、たとえば、フラグメントシェーディングされた出力データ値は、好適には、表示のためのフレームバッファなど、格納および使用のための外部の、たとえばメインのメモリにエクスポートされる。
【００５０】
本発明は、任意の適切な形式または構成のグラフィックスプロセッサに適用可能である。具体的には、タイルベースのグラフィックスプロセッサおよびグラフィックス処理システムに適用可能である。したがって、好適実施形態では、グラフィックス処理システムおよびグラフィックス処理パイプラインは、それぞれ、タイルベースのシステムおよびパイプラインである。
【００５１】
特に好適な実施形態では、本発明の様々な機能は、単一のグラフィックス処理プラットフォーム上で実行され、グラフィックス処理プラットフォームは、たとえば、表示デバイスのためのフレームバッファに書き込まれるレンダリングされたフラグメントデータを生成および出力する。
【００５２】
本発明は、適切に構成されたマイクロプロセッサベースのシステムなど、任意の適切なシステムで実施されてもよい。好適実施形態では、本発明は、コンピュータおよび/またはマイクロプロセッサベースのシステムで実施される。
【００５３】
本発明の様々な機能は、任意の所望の適切な方法で実行されてもよい。たとえば、本発明の機能は、所望のように、ハードウェアまたはソフトウェアで実現されてもよい。したがって、たとえば、特に明記しない限り、本発明の様々な機能的要素および「手段」は、適切な専用ハードウェア要素、および/または所望の方法で動作するようにプログラムされ得るプログラム可能なハードウェア要素など、様々な機能などを実行するために動作可能な、適切なプロセッサ、コントローラ、機能的ユニット、回路網、処理ロジック、マイクロプロセッサ構成などを含むことができる。
【００５４】
ここで、当業者によって理解されるように、本発明の様々な機能などは、所与のプロセッサ上で複製および/または並列に実行されてもよいことにも注意すべきである。同様に、様々な処理ステージは、所望ならば、処理回路網などを共有することができる。
【００５５】
上述した特定の機能を実行するために必要な任意のハードウェアを条件として、データ処理システムおよびパイプラインは、データ処理パイプラインが含む、通常の機能的ユニットなどの任意の1つもしくは複数、またはすべてを、別の方法で含むことができる。
【００５６】
本発明の上述した態様および実施形態のすべては、本明細書に記載の好適およびオプションの特徴の任意の1つもしくは複数、またはすべてを、適宜に含むことができ、好適には含むことも、当業者には理解されるであろう。
【００５７】
本明細書による方法は、ソフトウェア、たとえばコンピュータプログラムを、少なくとも部分的に使用して実施されてもよい。したがって、さらなる側面から見ると、本発明は、データ処理手段にインストールされると、特に本明細書に記載の方法を実行するように適合されるコンピュータソフトウェア、プログラム要素がデータ処理手段上で実行されると、本明細書に記載の方法を実行するためのコンピュータソフトウェアコード部分を含むコンピュータプログラム要素、およびプログラムがデータ処理システム上で実行されると、本明細書に記載の方法のすべてのステップを実行するように適合されたコード手段を含むコンピュータプログラムを提供することが分かるであろう。データプロセッサは、マイクロプロセッサシステム、プログラム可能なFPGA(フィールドプログラマブルゲートアレイ)などであってもよい。
【００５８】
本発明は、データ処理手段を備えるグラフィックスプロセッサ、レンダラ、またはマイクロプロセッサシステムを動作させるために使用されると、前記データ処理手段と協働して、前記プロセッサ、レンダラ、またはシステムに、本発明の方法のステップを実行させる、このようなソフトウェアを含むコンピュータソフトウェアキャリアにもおよぶ。このようなコンピュータソフトウェアキャリアは、ROMチップ、CD ROM、RAM、フラッシュメモリ、もしくはディスクなどの物理的記憶媒体であってもよく、またはワイヤ上の電子信号、光信号、もしくは衛星などへの無線信号であってもよい。
【００５９】
本発明の方法のすべてのステップが、コンピュータソフトウェアによって実行される必要はなく、したがって、さらに広い態様によれば、本発明は、本明細書に記載の方法のステップの少なくとも1つを実行するためのコンピュータソフトウェア、およびコンピュータソフトウェアキャリアにインストールされたこのようなコンピュータソフトウェアを提供することが、さらに理解されるであろう。
【００６０】
本発明は、コンピュータシステムと共に使用するためのコンピュータプログラム製品として、適宜に適切に具体化されてもよい。このような実施は、コンピュータ可読媒体、たとえば、ディスケット、CD ROM、ROM、RAM、フラッシュメモリ、またはハードディスクなど、有形の非一時的な媒体に各々固定された一連のコンピュータ可読命令を含むことができる。光もしくはアナログ通信ラインを含むがこれらに限定されない有形の媒体を介して、またはマイクロ波、赤外線、もしくは他の伝送技術を含むがこれらに限定されない無線技術を無形的に使用して、モデムまたは他のインタフェースデバイスを介してコンピュータシステムに伝送可能な一連のコンピュータ可読命令を含むこともできる。一連のコンピュータ可読命令は、本明細書で上述した機能のすべてまたは一部を具体化する。
【００６１】
当業者は、このようなコンピュータ可読命令が、多くのコンピュータアーキテクチャまたはオペレーティングシステムと共に使用するためのいくつかのプログラミング言語で書かれてもよいことを理解するであろう。さらに、このような命令は、半導体、磁気、もしくは光を含むがこれらに限定されない、現在のもしくは将来の任意のメモリ技術を使用して格納されてもよく、または光、赤外線、もしくはマイクロ波を含むがこれらに限定されない、現在もしくは将来の任意の通信技術を使用して伝送されてもよい。このようなコンピュータプログラム製品は、添付の印刷されたまたは電子文書を有するリムーバブル媒体、たとえば、収縮包装されたソフトウェアとして配布されてもよく、コンピュータシステムに、たとえば、システムROMまたは固定ディスクに予めロードされてもよく、またはネットワーク、たとえば、インターネットもしくはワールドワイドウェブを介してサーバもしくは電子掲示板から配布されてもよい。
【００６２】
本発明のいくつかの好適実施形態を、例としてのみ、添付図面を参照して説明する。
【図面の簡単な説明】
【００６３】
【図１】例示的なコンピュータグラフィックス処理システムを示す図である。
【図２】本発明の方法で動作させることができるグラフィックス処理パイプラインを概略的に示す図である。
【図３Ａ】図1のグラフィックス処理システムの動作の好適実施形態を概略的に示す図である。
【図３Ｂ】図1のグラフィックス処理システムの動作の好適実施形態を概略的に示す図である。
【図４】本発明の好適実施形態の動作をさらに示す図である。
【図５】本発明の好適実施形態の動作をさらに示す図である。
【図６】本発明の好適実施形態の動作をさらに示す図である。
【図７】本発明の好適実施形態の動作をさらに示す図である。
【発明を実施するための形態】
【００６４】
同様の参照番号は、図面内で適切な場合、同様の構成要素に使用される。
【００６５】
ここで、本発明の好適実施形態を、表示のためのコンピュータグラフィックスの処理との関連で説明する。
【００６６】
図1は、典型的なコンピュータグラフィックス処理システムを示す。
【００６７】
ホストプロセッサ1上で実行されるゲームなどのアプリケーション2は、関連するグラフィックス処理ユニット(グラフィックス処理パイプライン)3によって実行すべきグラフィックス処理動作を必要とすることになる。これを行うために、アプリケーションは、API(アプリケーションプログラミングインタフェース)呼び出しを生成することになり、API呼び出しは、アプリケーション2によって要求されるグラフィックス出力を生成するために、グラフィックスプロセッサ3への適切なコマンドを生成するために、ホストプロセッサ1上で実行されているグラフィックス処理パイプライン3のために、ドライバ4によって解釈される。これを容易にするために、(たとえば、表示すべきフレームを生成するために)グラフィックス出力のためのホストシステム1上で実行されているアプリケーション2からのコマンドに応答して、「コマンド」のセットがグラフィックスプロセッサ3に提供されることになる。
【００６８】
図2は、本実施形態のグラフィックス処理パイプライン3をより詳細に示す。
【００６９】
図2に示すグラフィックス処理パイプライン3は、タイルベースのレンダラであり、したがって、当技術分野で知られているように、生成すべき出力フレームなどのレンダ出力データアレイのタイルを生成することになる。
【００７０】
(当技術分野で知られているように、タイルベースのレンダリングでは、イミディエイトモードレンダリングでのように一度に有効に処理される全体的なレンダ出力、たとえば、フレームではなく、レンダ出力、たとえば、表示すべきフレームは、通常「タイル」と呼ばれる、複数のより小さいサブ領域に分割される。各タイル(サブ領域)は、別々に(典型的には次々に)レンダリングされ、レンダリングされたタイル(サブ領域)は、次に、完全なレンダ出力、たとえば、表示のためのフレームを提供するために、再結合される。このような構成では、レンダ出力は、典型的には、規則的なサイズおよび形状(通常、たとえば、正方形または矩形である)のサブ領域(タイル)に分割されるが、これは、必須ではない。)
【００７１】
レンダ出力データアレイは、当技術分野で知られているように、典型的には、スクリーンまたはプリンタなどの表示デバイス上に表示するために意図された出力フレームであってもよいが、たとえば、(「テクスチャにレンダリング(render to texture)」出力としても知られる)後のレンダリングプロセスで使用するために意図された中間データなどを含むこともできる。
【００７２】
(当技術分野で知られているように、コンピュータグラフィックス画像が表示されることになっている場合、通常は、最初に一連のプリミティブ(ポリゴン)として定義され、プリミティブは、次に、グラフィックスレンダリングのためのグラフィックスフラグメントに順番に分割される(ラスタライズされる)。通常のグラフィックスレンダリング動作中、レンダラは、フラグメントが正確に表示され得るように、各フラグメントに関連する(たとえば)色(赤、緑、および青、RGB)ならびに透明度(アルファ、a)データを変更することになる。フラグメントが完全にレンダラを通過した後、次に、それらの関連するデータ値は、出力する、たとえば、表示する準備ができているメモリに格納される。)
【００７３】
図2は、本実施形態の動作に関連するグラフィックス処理パイプライン3の主要な要素およびパイプラインステージを示す。当業者によって理解されるように、図2に示されていないグラフィックス処理パイプラインの他の要素が存在してもよい。ここで、図2は、単なる概略であり、たとえば、実際には、図示された機能ユニットおよびパイプラインステージは、それらが図2で別々のステージとして概略的に示されているにもかかわらず、かなりのハードウェア回路を共有してもよいことにも注意すべきである。図2に示すようなグラフィックス処理パイプラインのステージ、要素、およびユニットなどの各々は、所望のように実装されてもよく、したがって、たとえば、必要な動作および機能を実行するための適切な回路網および/または処理ロジックなどを備えることになることも理解されるであろう。
【００７４】
図2に示すように、グラフィックス処理パイプライン3は、頂点シェーダ20、ハルシェーダ21、テッセレータ22、ドメインシェーダ23、ジオメトリシェーダ24、ラスタライズステージ25、初期Z(深度)およびステンシルテストステージ26、フラグメントシェーディングステージ27の形態のレンダラ、後期Z(深度)およびステンシルテストステージ28、ブレンディングステージ29、タイルバッファ30、ならびにダウンサンプリングおよび書き出し(マルチサンプルリゾルブ)ステージ31を含む、いくつかのステージを含む。
【００７５】
頂点シェーダ20は、当技術分野で知られているように、たとえば、生成すべき出力に対して定義された頂点に関連付けられた入力データ値を受け取り、グラフィックス処理パイプライン3の後続のステージによって使用するための対応する「頂点シェーディングされた」出力データ値のセットを生成するために、これらのデータ値を処理する。頂点シェーディングは、たとえば、レンダリングすべき画像内の照明の効果を考慮するために、入力データを変更する。
【００７６】
当技術分野で知られているように、ハルシェーダ21は、パッチ制御点のセットに対して動作を実行し、パッチ定数として知られる追加のデータを生成し、テッセレーションステージ22は、ハルのより高い次元の表現を作成するために、ジオメトリを細分し、ドメインシェーダ23は、(頂点シェーダと同様)テッセレーションステージによって出力された頂点に対して動作を実行し、ジオメトリシェーダ24は、三角形、点、または線などのプリミティブ全体を処理する。これらのステージは、頂点シェーダ21と共に、グラフィックス処理パイプライン3に提供されるコマンドおよび頂点データに応答して、レンダリングすべきプリミティブをセットアップするために、変形および照明操作ならびにプリミティブセットアップなど、必要なフラグメントフロントエンド動作のすべてを効果的に実行する。
【００７７】
グラフィックス処理パイプライン3のラスタライズステージ25は、当技術分野で知られているように、レンダ出力(たとえば、表示すべき画像)を構成するプリミティブを、処理のための個々のグラフィックスフラグメントにラスタライズする。これを行うため、ラスタライザ25は、レンダリングするためのグラフィックスプリミティブを受信し、プリミティブをサンプリング点にラスタライズし、プリミティブをレンダリングするための(適切なサンプリング点を表す)適切な位置を有するグラフィックスフラグメントを生成する。
【００７８】
ラスタライザによって生成されたフラグメントは、次に、前方へ、処理するためのパイプラインの残りの部分に送られる。
【００７９】
初期Z/ステンシルステージ26は、当技術分野で知られているように、任意のフラグメントがこのステージで破棄され(間引かれ)得るかどうかを確認するために、ラスタライザ25から受信するフラグメントに対してZ(深度)テストを実行する。これを行うため、新しいフラグメントが、すでにレンダリングされているフラグメントによって遮蔽されることになるか否かを判定するために、ラスタライザ25から出るフラグメントの(フラグメントに関連付けられた)深度値を、すでにレンダリングされているフラグメントの深度値(これらの深度値は、タイルバッファ30の一部である深度(Z)バッファに格納される)と比較する。同時に、初期ステンシルテストが行われる。
【００８０】
フラグメント初期Zおよびステンシルテストステージ26に合格したフラグメントは、次に、フラグメントシェーディングステージ27に送られる。フラグメントシェーディングステージ27は、当技術分野で知られているように、適切なレンダリングされたフラグメントデータを生成するために、フラグメントを処理するために、初期Zおよびステンシルテストに合格したフラグメントに対して、適切なフラグメント処理動作を実行する。
【００８１】
このフラグメント処理は、当技術分野で知られているように、適切なフラグメントデータを生成するために、フラグメントに対するフラグメントシェーダプログラムの実行、フラグメントへのテクスチャの適用、フラグメントへのフォギングまたは他の操作の適用など、任意の適切な所望のフラグメントシェーディング処理を含むことができる。本実施形態では、フラグメントシェーディングステージ27は、シェーダパイプライン(プログラム可能なフラグメントシェーダ)の形態である。
【００８２】
次に、レンダリングされたフラグメントが、実際に最終的な画像に見られることになるかどうかを判定するために、シェーディングされたフラグメントに対して、特に、パイプライン深度テストの終わりを実行する、「後期」フラグメントZおよびステンシルテストステージ28が存在する。この深度テストは、当技術分野で知られているように、フラグメントシェーディングステージ27から出るフラグメントの(フラグメントに関連付けられた)深度値を、(深度バッファに格納されているような)すでにレンダリングされているフラグメントの深度値と比較することによって、新しいフラグメントが、すでにレンダリングされているフラグメントのフラグメントデータを置換すべきであるか否かを判定するために、タイルバッファ30内のZバッファに格納されたフラグメントの位置に対するZバッファ値を使用する。この後期フラグメント深度およびステンシルテストステージ28は、また、フラグメントに対して、任意の必要な「後期」アルファおよび/またはステンシルテストを実行する。
【００８３】
後期フラグメントテストステージ28に合格したフラグメントは、次に、必要であれば、ブレンダ29内のタイルバッファ30にすでに格納されたフラグメントとの任意の必要なブレンディング演算が施される。ディザなど(図示せず)など、フラグメントに対して必要な任意の他の残りの動作も、このステージで行われる。
【００８４】
最後に、(ブレンドされた)出力フラグメントデータ(値)は、タイルバッファ30に書き込まれ、タイルバッファ30から、出力フラグメントデータを、たとえば、表示のためのフレームバッファに出力することができる。出力フラグメントに関する深度値も、タイルバッファ30内のZバッファに適切に書き込まれる。(タイルバッファは、当技術分野で知られているように、それぞれ、(処理されているタイルの各サンプリング点に対して本質的に)バッファが表す各サンプリング点に関する適切な色、たとえば、またはZ値を格納する色および深度バッファを格納することになる。)これらのバッファは、当技術分野で知られているように、全体的なレンダ出力(たとえば、表示すべき画像)の部分(タイル)を表すフラグメントデータのアレイを格納し、バッファ内のサンプリング値の個々のセットは、全体的なレンダ出力の個々のピクセル値に対応する(たとえば、4倍のマルチサンプリングが使用されている場合、標本値の各々の2×2のセットは、出力ピクセルに対応することができる)。
【００８５】
タイルバッファは、グラフィックス処理パイプライン(チップ)上に(ローカルに)配置されるRAMの一部として提供される。
【００８６】
タイルバッファ30からのデータは、ダウンサンプリング(マルチサンプルリゾルブ)書き出しユニット31に入力され、そこから、表示デバイス(図示せず)のフレームバッファなどの外部のメモリ出力バッファに出力される(ライトバックされる)。(表示デバイスは、たとえば、コンピュータモニタまたはプリンタなどの、ピクセルのアレイを備えるディスプレイを含むことができる。)
【００８７】
ダウンサンプリングおよび書き出しユニット31は、出力バッファに出力するための出力値(ピクセル)を生成するために、タイルバッファ30に格納されたフラグメントデータを、出力バッファ(デバイス)のための適切な解像度に(すなわち、出力デバイスのピクセルに対応するピクセルデータのアレイが生成されるように)ダウンサンプリングする。
【００８８】
レンダ出力のタイルが処理され、そのデータが格納のためのメインメモリに(たとえば、メインメモリ内のフレームバッファ(図示せず)に)エクスポートされると、次に、次のタイルが処理され、全体的なレンダ出力(たとえば、表示すべきフレーム(画像))を生成するために、十分なタイルが処理されるまで、同じように続く。プロセスは、次に、次のレンダ出力(たとえば、フレーム)に対して繰り返され、同じように続く。
【００８９】
グラフィックス処理パイプライン3のための他の構成は、もちろん可能になる。
【００９０】
上記は、図1に示すグラフィックス処理システムの動作の特定の特徴を説明する。本発明の実施形態による図1に示すグラフィックス処理システムの動作のさらなる特徴を、ここで説明する。
【００９１】
図2から分かるように、グラフィックス処理パイプライン3は、いくつかのプログラム可能な処理または「シェーダ」ステージ、すなわち、頂点シェーダ20、ハルシェーダ21、ドメインシェーダ23、ジオメトリシェーダ24、およびフラグメントシェーダ27を含む。これらのプログラム可能なシェーダステージは、各々のシェーダプログラムを実行し、シェーダプログラムは、1つまたは複数の入力変数を有し、出力変数のセットを生成し、アプリケーションによって提供される。これを行うため、アプリケーション2は、GLSL、HLSL、OpenCLなどなどの高レベルのシェーダプログラミング言語を使用して実装されるシェーダプログラムを提供する。これらのシェーダプログラムは、次に、シェーダ言語コンパイラによって、目標のグラフィックス処理パイプライン3のためのバイナリコードに変換される。これは、当技術分野で知られているように、コンパイラ内のプログラムの1つのまたは複数の中間表現の作成を含むことができる。(コンパイラは、たとえば、ドライバ4の一部であってもよく、コンパイラを実行させるために、特別なAPI呼び出しが存在する。コンパイラの実行は、したがって、アプリケーションによって生成されるAPI呼び出しに応答してドライバによって行われるドローコール準備の一部とみなされてもよい。)
【００９２】
上述したように、グラフィックス処理パイプライン内の各シェーダは、生成すべきグラフィックス出力内の各グラフィックスアイテムのための小さいプログラムを実行することによってグラフィックス処理を実行する処理ユニットである(この点で「アイテム」は、通常、頂点、フラグメント、またはピクセルである)。本実施形態は、シェーダによって実行すべき実行スレッド(ここで、各スレッドは、1つのグラフィックスアイテムに対応する)が、ロックステップで、一度に1命令実行されることになっているスレッドの「グループ」または「バンドル」に編成されている状況に関連する。
【００９３】
本実施形態では、スレッドグループに関する命令の依存関係を追跡し、スレッドグループ内の命令の順不同の実行を可能にするために、「スコアボード」構成が使用される。これは、以下のように実現される。
【００９４】
本実施形態は、(各々のスレッドグループのための8個の「スコアボード」エントリまたはスロットを有する)8個の命令完了トラッカをサポートするスコアボードを使用する。所望ならば、他の数のスコアボードエントリ(スロット(命令完了トラッカ))が可能になる。
【００９５】
スコアボードエントリ(命令完了トラッカ)の各々は、それに関連付けられたカウンタを有する。カウンタは、限られた幅のものであり、カウンタがその最大値に達した場合、そのスコアボードスロット(カウンタ)を使用して並べ替え可能命令を実行する試みは、(カウンタが減少するまで)関連するスレッドグループをストールさせる。カウンタ幅は、1ビット程度に小さくてもよい。異なるスロットごとに異なる幅を有することも可能になる。
【００９６】
スコアボードに関するデータ(スロットカウンタ値)は、任意の適切な方法で実装されてもよく、たとえば、適切なパイプラインメモリに格納されてもよい。
【００９７】
ホストプロセッサ1上で実行されるグラフィックス処理パイプラインシェーダコンパイラが、シェーダプログラムのための命令ストリームを処理するとき、命令ストリーム内で、順不同で実行されることが許可される命令(並べ替え可能命令)を識別する。本実施形態では、(存在する場合)識別された「並べ替え可能」命令は、メモリロードおよび格納、属性補間、ならびにテクスチャルックアップである。他の構成も、もちろん可能になる。
【００９８】
コンパイラが、命令ストリーム内の並べ替え可能命令を識別した場合、それを、スコアボードスロット(エントリ)(命令完了トラッカ)に割り当て、並べ替え可能命令がどのスコアボードスロットに割り当てられているのかを指定するデータを、命令のフィールド内に符号化する。この割り当ては、所望のように、たとえば、命令の性質、およびスコアボードスロットの現在の使用状況に応じて行われてもよい。
【００９９】
並べ替え可能命令が、実行のための適切なシェーダにディスパッチされると、示されたスコアボードスロットスロット(エントリ)は、(現在、そのスロットに関連付けられた未処理の動作(命令)が存在することを示すために)そのカウンタをインクリメントする。命令が実際に完了すると、スロットのカウンタは、それに対応してデクリメントされる。
【０１００】
命令ストリーム内の並べ替え可能命令の識別と同様に、コンパイラは、また、命令ストリーム内の各命令に対して、並べ替え可能であろうとなかろうと、もしあれば、命令がどのスコアボードスロット(命令完了トラッカ)に依存するかを示す注釈を提供する。この注釈は、データ依存関係がシェーダプログラム内に本当に存在する場合、それらのデータ依存関係を強制するために使用される。
【０１０１】
本実施形態では、この注釈は、関連する命令が完了することを必要とする命令上には実際に置かれず、直前の命令上に置かれる(命令内に符号化される)。これは、その依存関係がまだ満たされていない依存命令の命令フェッチを保留することを容易にする。
【０１０２】
命令は、次に、実行のためのシェーダにディスパッチされる。シェーダでは、各命令がフェッチされる前に、示された関連する依存関係スロット(命令完了トラッカ)のカウンタ値がチェックされる。すべての関連するスロットが0のカウンタ値を有する(したがって、現在の命令が依存するすべての命令が完了していることを示す)場合、命令は、フェッチされ、実行される。すべての関連するスロットが0のカウンタ値を持たない(したがって、現在の命令が依存する命令の少なくともいくつかがまだ完了していないことを示す)場合、命令のフェッチ(したがって、実行)は、すべての関連するスロットのカウンタ値が0に達するまで、(任意の適切な機構を使用して)保留される。
【０１０３】
図3Aおよび図3Bは、このプロセスを示す。コンパイラは、命令ストリーム内の命令に達すると(ステップ40)、それが並べ替え可能命令であるか否かを判定する(ステップ41)。そうである場合、スコアボードスロットをその命令に割り当て、その割当を命令内に符号化する(ステップ42)。そうでない場合、スコアボードスロットは、割り当てられない。
【０１０４】
コンパイラは、次に、命令がそれ以前の命令に依存しているかどうかを判定し(ステップ43)、(もしあれば)現在の命令の決定された依存関係のための関連するスコアボードスロットによって、以前の命令に注釈を付ける(ステップ44)。
【０１０５】
命令は、次に、シェーダにディスパッチされる(ステップ45)。並べ替え可能命令がディスパッチされると、その関連するスロットのためのカウンタは、インクリメントされる(ステップ46、47)。対応して、このような命令が完了すると、カウンタは、デクリメントされる(ステップ51)。
【０１０６】
命令が実行されることになっている場合、命令に関連付けられているとして示される依存関係スロットのカウンタ値は、チェックされる(ステップ48)。すべての関連するスロットが0のカウンタ値を有する場合、命令は、実行される(ステップ49)。すべての関連するスロットが0のカウンタ値を持たない場合、命令の実行は、すべての関連するスロットのカウンタが0に達するまで、保留される(ステップ50)。
【０１０７】
図4は、3つの命令、レジスタR0内にメモリからの値をロードする第1の命令と、レジスタR1内に一定の値を移動させる第2の命令と、レジスタR0およびR1の内容を加算し、結果をレジスタR2内に置く第3の命令とを含む短い命令シーケンスに関する本発明の実施形態で使用されるスコアボード構成を示す。
【０１０８】
この場合、図4に示すように、コンパイラは、第1の命令を並べ替え可能命令であるとして識別することになるので、この例では、それをスコアボードスロット(エントリ)0に割り当てる。また、第3の命令を、第1の命令(ロード命令)の完了に依存しているとして認識するので、スコアボードエントリ(スロット)0に依存しているとして第3の命令に注釈を付ける。
【０１０９】
命令は、次に、パイプラインにディスパッチされる。図4に示すように、第1の命令がディスパッチされると、スコアボードエントリ0のカウンタは、ロード命令が保留中であることを示すために、インクリメントされる。この場合、ロード命令は、キャッシュミスにより完了するのに長い時間を要することが仮定される。
【０１１０】
処理は、次に、第2の命令に移り、第2の命令は、どのスコアボードスロットにも依存しないように実行されてもよい。実行ユニットは、次に、第3の命令を実行することを試みるが、スコアボードエントリ0から、第3の命令が依存するロード命令がまだ完了していないことを判定する。第3の加算命令は、したがって、この段階では実行することができない。最後に、スコアボードエントリ0のカウンタが0である場合、第3の加算命令は、実行することができ、ロードは、完了し、加算は、発行され得る。
【０１１１】
図5は、対応する動作を示すが、この動作では、第3の加算命令の依存関係は、(図5に示すように)第2の移動命令のための符号化内に示される。この場合、移動命令が実行されると、次の命令は、スコアボードエントリ0に依存するので、第3の加算命令のフェッチは、第1のロード命令が完了するまで、延期されることが識別される。
【０１１２】
図6は、依存する格納動作を実施するための本発明の例示的な動作を示す。この場合、一連の4つの格納命令が存在し、第4の格納命令は、第2および第3の格納命令の完了に依存することが仮定される。これを容易にするために、図6に示すように、第2および第3の格納命令は、同じスコアボードスロット(エントリ)、この場合ではスコアボードエントリ1に割り当てられ、第4の依存する格納命令は、第2および第3の格納命令が完了した後にのみ実行されるように、そのスコアボードエントリに依存しているとして示される。(しかしながら、図6に示すように、第4の格納命令は、第1の格納命令に依存しないので、第1の格納命令がまだ完了していない場合でも、実行されてもよい。)
【０１１３】
所望であれば、上記の実施形態に対する様々な代替および追加が可能になる。
【０１１４】
たとえば、上記の実施形態では、明示的なスコアボードが提供するもの以外の依存関係追跡は、実行されない。これは、明示的なスコアボードテストが存在しない場合、スレッドからの読み取り、書き込み、およびアトミックは、互いに対して任意の順序で実行されることを意味する。そういう状況であれば、コンパイラが、メモリ書き込みが前の読み取りまたは書き込みと重ならないことを証明できない場合、コンパイラは、この書き込みを、問題の前の読み取りまたは書き込みに依存するとしてマークする。同様に、コンパイラが、メモリ読み取りが前の書き込みと重ならないことを証明できない場合、コンパイラは、この読み取りを、すべての影響を受ける、前の書き込みに依存するとしてマークする。
【０１１５】
これに対する代替として、別の実施形態では、コンパイラは、「メモリフェンス」命令を命令ストリーム内に挿入することができる。このような命令は、たとえば、スレッドグループからの命令に順序を強制するように、実行ユニット(たとえば、ロード/格納ユニット)に命じる命令である。たとえば、フェンス命令の前に発行されるすべてのロード/格納命令は、フェンスの後のすべてのロード/格納命令の前に完了する必要がある。これは、たとえば、すべてのスコアボード「スロット」に依存しているとして示される命令を使用することによって、達成され得る。ロードの並べ替えのみを阻止する「ロードフェンス」命令、および格納の並べ替えのみを阻止する「格納フェンス」命令を有することも可能になる。
【０１１６】
別の可能性は、同じスレッドグループから発行されたすべてのロード/格納に対するメモリフェンスなどを暗黙的に挿入するロード/格納パイプラインを有することになる。
【０１１７】
本出願人は、いくつかの場合、実行ユニットが、2つ以上の未処理のアイテムを待機している可能性があるが、これらのアイテムは、任意の順序で処理され得ることを認識している。この場合の実施効率を最大にするために、スコアボード「分岐」命令が使用されてもよい(この状況を認識した場合、コンパイラによって命令ストリーム内に挿入されてもよい)。この命令は、スコアボードスロット(エントリ)のサブセットをテストする条件分岐であり、テストすべきあるサブセットのすべてのスコアボードスロットが、ゼロに等しいカウンタ値を有する場合、分岐が取られ、テストすべき他のサブセットのすべてのスコアボードスロットが、ゼロに等しいカウンタ値を有する場合、別の分岐(経路)が取られ、そうでなければ、ブランチ命令は、ストールされる。テストするスコアボードスロットのセットは、分岐命令自体に符号化される。このようなスコアボード分岐命令は、2つのセットのうちの少なくとも1つが満たされるとすぐに命令が実行されるように、依存関係の2つの異なるセットで注釈付けされるべきである。分岐は、スレッドグループの相違を生じさせることができないように、スレッドグループ内のすべてのスレッドに対して常に同じ方向を取る。
【０１１８】
図7は、スコアボード分岐命令の動作を概略的に示す。この例では、分岐命令は、シーケンス内の第3の命令であり、(この場合、シーケンス内の命令7に分岐する)行われているスコアボードエントリ0に依存し、スコアボードエントリ0または1にある第2の依存関係サブセットを有する(この場合、実行は、シーケンス内の次の命令(この場合、命令4)に移る)。どちらの分岐条件も満たされない場合、分岐命令の実行は、ストールされる。
【０１１９】
本発明は、少なくともその好適実施形態で、たとえば、スレッドグループベースのGPUシェーダコア内のスレッドグループのための命令の順不同の実行を容易にするための機構を提供することが、上記から分かる。これは、所与の量のハードウェアリソースで利用することができる並列性の量を増加させるのを助け、したがって、実行ユニットの利用率を改善するのを助ける。
【０１２０】
これは、少なくとも本発明の好適実施形態では、「明示的」スコアボード機構を使用することによって達成され、「明示的」スコアボード機構では、命令の依存関係が、命令自体に符号化される。
【符号の説明】
【０１２１】
1  ホスト
2  アプリケーション
3  グラフィックス処理パイプライン
4  ドライバ
20  頂点シェーダ
21  ハルシェーダ
22  テッセレータ
23  ドメインシェーダ
24  ジオメトリシェーダ
25  ラスタライズステージ
26  初期Z(深度)およびステンシルテストステージ
27  フラグメントシェーディングステージ
28  後期Z(深度)およびステンシルテストステージ
29  ブレンディングステージ
30  タイルバッファ
31  ダウンサンプリングおよび書き出し(マルチサンプルリゾルブ)ステージ
【図１】
2014235747.tif 000003
【図２】
2014235747.tif 000004
【図３Ａ】
2014235747.tif 000005
【図３Ｂ】
2014235747.tif 000006
【図４】
2014235747.tif 000007
【図５】
2014235747.tif 000008
【図６】
2014235747.tif 000009
【図７】
2014235747.tif 000010
【外国語明細書】
2014235747000001.pdf