(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-01-05
(45)【発行日】2022-01-20
(54)【発明の名称】動的なリソース割り当てによるウェーブ生成制御
(51)【国際特許分類】
G06F 9/46 20060101AFI20220113BHJP
G06F 9/50 20060101ALI20220113BHJP
G06F 9/38 20060101ALI20220113BHJP
【FI】
G06F9/46 410
G06F9/50 120A
G06F9/38 370A
(21)【出願番号】P 2020523297
(86)(22)【出願日】2018-09-26
(86)【国際出願番号】 US2018052840
(87)【国際公開番号】W WO2019083672
(87)【国際公開日】2019-05-02
【審査請求日】2021-09-27
(32)【優先日】2017-10-26
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】マキシム ヴィー. カザコフ
(72)【発明者】
【氏名】マイケル マントル
【審査官】坂庭 剛史
(56)【参考文献】
【文献】国際公開第2017/116517(WO,A1)
【文献】米国特許出願公開第2010/0083273(US,A1)
【文献】米国特許出願公開第2013/0283280(US,A1)
【文献】国際公開第2016/182636(WO,A1)
【文献】米国特許出願公開第2012/0131593(US,A1)
【文献】米国特許出願公開第2012/0066683(US,A1)
【文献】米国特許出願公開第2006/0064687(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/46
G06F 9/50
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
マルチスレッドプロセッサのプロセッサコアによって共有されているリソース内のウェーブのリソース割り当てを、前記プロセッサコアで実行されているウェーブと同時に測定することと、
前記マルチスレッドプロセッサにおいて、前記リソース割り当てを時間間隔に亘って平均化することと、
前記マルチスレッドプロセッサにおいて、前記リソース割り当ての平均に基づいていくつかのウェーブを生成することと、前記マルチスレッドプロセッサで実行するために前記生成されたウェーブをディスパッチすることと、を含む、
方法。
【請求項2】
前記ウェーブのリソース割り当てを測定することは、前記ウェーブの生成、前記ウェーブへのリソース割り当て、前記ウェーブからのリソース割り当て解除のうち少なくとも1つに対応する時間で、又は、所定の実行サイクル数に対応する時間間隔で、前記ウェーブのリソース割り当てを測定することを含む、
請求項1の方法。
【請求項3】
前記リソース割り当てを測定することは、前記ウェーブが前記プロセッサコアで実行されている間に、前記ウェーブの最大リソース割り当てを測定することを含む、
請求項1の方法。
【請求項4】
前記リソース内のウェーブのリソース割り当てを測定することは、基準時間に対するトレーリング期間の間に前記リソース内のウェーブのリソース割り当てを測定することを含む、
請求項1の方法。
【請求項5】
前記リソース割り当てを時間間隔に亘って平均化することは、前記トレーリング期間に亘って前記リソース割り当ての移動平均を生成することを含む、
請求項4の方法。
【請求項6】
前記いくつかのウェーブを生成することは、前記トレーリング期間に亘る前記リソース割り当ての移動平均に基づいて、前記基準時間後の前記いくつかのウェーブを生成することを含む、
請求項5の方法。
【請求項7】
以前のトレーリング期間における以前の移動平均に対する前記移動平均の変化に応じて、実行のためにディスパッチされるウェーブの数を変更することをさらに含む、
請求項6の方法。
【請求項8】
前記リソース割り当てを平均化することは、前記ウェーブの複数のサブセットに対する複数のリソース割り当ての平均を生成することを含み、
前記いくつかのウェーブを生成することは、前記複数のリソース割り当ての平均に基づいて決定された数のウェーブを生成することを含む、
請求項1の方法。
【請求項9】
前記ウェーブの複数のサブセットは、単一命令複数データ操作を含む前記ウェーブのサブセット、実行を完了したウェーブのサブセット、及び、前記ウェーブを実行するシェーダのタイプに対応するウェーブのサブセットのうち少なくとも1つを含む、
請求項8の方法。
【請求項10】
複数のプロセッサコアと、
前記複数のプロセッサコアによって実行されるいくつかのウェーブを生成するように構成されたコントローラであって、前記生成されるウェーブの数は、前記複数のプロセッサコアで実行されているウェーブによって共有されるリソース内のウェーブの測定されたリソース割り当ての平均値を使用して決定される、コントローラと、を備える、
処理システム。
【請求項11】
前記ウェーブのリソース割り当ては、前記ウェーブの生成、前記ウェーブへのリソース割り当て、前記ウェーブからのリソース割り当て解除のうち少なくとも1つに対応する時間で、又は、所定の実行サイクル数に対応する時間間隔で測定される、
請求項10の処理システム。
【請求項12】
前記測定されたリソース割り当ては、前記ウェーブが前記複数のプロセッサコアで実行されている間に測定された前記ウェーブの最大リソース割り当てである、
請求項10の処理システム。
【請求項13】
前記ウェーブのリソース割り当ては、基準時間に対するトレーリング期間の間に測定される、
請求項10の処理システム。
【請求項14】
前記ウェーブの測定されたリソース割り当ての平均値は、前記トレーリング期間に亘る前記測定されたリソース割り当ての移動平均である、
請求項13の処理
システム。
【請求項15】
前記コントローラは、前記トレーリング期間に亘る前記測定されたリソース割り当ての移動平均に基づいて、前記基準時間後の前記いくつかのウェーブを生成するように構成されている、
請求項14の処理システム。
【請求項16】
前記コントローラは、以前のトレーリング期間に亘る以前の移動平均に対する前記移動平均の変化に応じて、実行のためにディスパッチされるウェーブの数を変更するように構成されている、
請求項15の処理システム。
【請求項17】
前記測定されたリソース割り当ての平均値は、前記ウェーブの複数のサブセットに対する測定されたリソース割り当ての複数の平均値を含み、
前記コントローラは、前記測定されたリソース割り当ての複数の平均値に基づいて決定された数のウェーブを生成するように構成されている、
請求項10の処理システム。
【請求項18】
前記ウェーブの複数のサブセットは、単一命令複数データ操作を含む前記ウェーブのサブセット、実行を完了したウェーブのサブセット、及び、前記ウェーブを実行するシェーダのタイプに対応するウェーブのサブセットのうち少なくとも1つを含む、
請求項17の処理システム。
【請求項19】
マルチスレッドプロセッサにおいて、前記プロセッサで実行されている間にウェーブによって共有されるリソース内の前記ウェーブのリソース割り当ての平均値に基づいて決定されるレートで、前記ウェーブを生成することと、
生成されたウェーブを、前記マルチスレッドプロセッサのプロセッサコアによる実行のためにディスパッチすることと、
前記マルチスレッドプロセッサにおいて、前記ウェーブのリソース割り当ての平均値の変化に応じて、前記ウェーブの生成レートを変更することと、を含む、
方法。
【請求項20】
前記ウェーブの生成レートを変更することは、前記ウェーブのリソース割り当ての平均値の減少に応じて前記ウェーブの生成レートを増加させることと、前記ウェーブのリソース割り当ての平均値の増加に応じて前記ウェーブの生成レートを減少させることと、を含む、
請求項19の方法。
【発明の詳細な説明】
【背景技術】
【0001】
グラフィックス処理ユニット(GPU)及び他のマルチスレッド処理ユニットは、通常、複数のデータセットで単一プログラムの複数のインスタンスを同時に実行する複数の処理要素(プロセッサコア又はコンピューティングユニットとも呼ばれる)を実装する。インスタンスは、スレッド又はウェーブと呼ばれる。いくつかのウェーブが作成(又は生成)され、マルチスレッド処理ユニットの各処理要素にディスパッチされる。処理ユニットは、数千のウェーブが処理ユニットでプログラムを同時に実行するように、数百の処理要素を含むことができる。GPUの処理要素は、通常、プログラマブルシェーダ及び固定機能ハードウェアブロックのシーケンスから構成されるグラフィックスパイプラインを使用して、三次元(3D)グラフィックスを処理する。例えば、フレームに表示されるオブジェクトの3Dモデルは、ユーザに表示するためのピクセル値を生成するために、プリミティブ(例えば、グラフィックスパイプラインで処理される三角形、他のポリゴン又はパッチ等)のセットによって表すことができる。マルチスレッドGPUでは、ウェーブが、シェーダの異なるインスタンスを実行して、異なるプリミティブでの計算を同時又は並列に実行する。マルチスレッド処理ユニットで同時に実行されるウェーブは、処理ユニットのリソースの一部を共有する。共有リソースは、ウェーブの状態情報を記憶するベクトル汎用レジスタ(VGPR)と、ウェーブのデータを記憶するために使用されるローカルデータ共有(LDS)と、ローカルキャッシュ階層とメモリとの間で情報を移動するのに利用可能な帯域幅と、等を含む。
【0002】
添付の図面を参照することによって本開示をより良く理解することができ、その多くの特徴及び利点が当業者に明らかになる。異なる図面で同じ符号を使用している場合、類似又は同一のアイテムを示している。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、ディスプレイへの出力を意図した視覚イメージを生成するためのグラフィックス処理ユニット(GPU)を含む処理システムのブロック図である。
【
図2】いくつかの実施形態による、高次ジオメトリプリミティブを処理して三次元(3D)シーンのラスタライズ画像を生成することができるグラフィックスパイプラインを示す図である。
【
図3】いくつかの実施形態による、共有リソースの動的割り当てに基づくウェーブの生成をサポートする処理システムの一部のブロック図である。
【
図4】いくつかの実施形態による、共有リソースのウェーブの測定されたフットプリントを時間関数としてプロットした図である。
【
図5】いくつかの実施形態による、共有リソースのウェーブの平均フットプリントのプロット、及び、マルチスレッド処理ユニットにおける複数のインフライトのウェーブのプロットを含む図である。
【
図6】いくつかの実施形態による、マルチスレッド処理ユニットで実行されるウェーブのフットプリントの平均に基づいてウェーブの生成を制御する方法のフロー図である。
【
図7】いくつかの実施形態による、共有リソースの2つの異なるウェーブの測定されたフットプリントを時間関数としてプロットした図である。
【発明を実施するための形態】
【0004】
マルチスレッド処理ユニットによって同時に実行されるウェーブの数は、共有リソースの可用性によって制限される。従来のウェーブ生成技術では、全てのウェーブが同じリソース割り当て(本明細書では、ウェーブのフットプリントとも呼ばれる)を必要とし、さらに、ウェーブの実行中にウェーブのフットプリントが一定のままであることを必要とすることを想定している。同時に実行するためにディスパッチされるウェーブの数は、想定される静的なフットプリントを利用可能なリソースの合計と比較することによって決定される。ウェーブの実際のフットプリントは、通常、想定される静的なフットプリントと異なり、ウェーブのフットプリントは、通常、ウェーブが実行されるにつれて変化する。このことは、ウェーブへのリソースの非効率的な割り当てにつながる。例えば、ウェーブ毎の静的なフットプリントが、任意の個々のウェーブの実際のフットプリント以上の最大値を有すると想定すると、マルチスレッドGPUで同時に実行されるウェーブは、利用可能な全てのリソースよりも少ない量しか消費しない。別の例では、ウェーブ毎のフットプリントが、実行中のウェーブのフットプリント以下の最小値を有すると想定すると、ウェーブが同じリソースで競合するためにウェーブの実行がシリアライズされ、これにより、ウェーブを並列に実行することによって達成されるレイテンシの隠蔽の程度が低減又は排除される。ウェーブによって使用されるメモリ帯域幅が、使用可能なメモリユニット帯域幅を、実行中のウェーブの数で割った値を超える場合に、シリアライズが発生する。
【0005】
マルチスレッドプロセッサでウェーブを実行する間に、リソースを共有しているウェーブのフットプリントを測定することによって、共有リソースの競合によるシリアライズを回避しながら、マルチスレッドプロセッサ(GPU等)の共有リソースの使用率を向上させる。測定されたウェーブのフットプリントは、時間間隔で平均化され、ウェーブの平均フットプリントが決定される。マルチスレッドプロセッサでの実行のためにディスパッチされるウェーブの数(又は、実行のためのウェーブの生成レート)は、平均フットプリントに基づいて決定される。例えば、マルチスレッドプロセッサで同時に実行するためにディスパッチされるウェーブの数を、利用可能な共有リソースを平均フットプリントで割った値に設定することができる。いくつかの実施形態では、平均フットプリントは、マルチスレッドプロセッサで同時に実行するためにディスパッチされたウェーブのフットプリントの指数関数的に重み付けされた移動平均等の移動平均を使用して決定される。ウェーブのフットプリントは、ウェーブが生成されたとき、共有リソースがウェーブに割り当てられたとき、共有リソースが割り当て解除されたとき、各プロセッササイクルの間、所定のサイクル数が完了した後、又は、他の任意の時間若しくは時間間隔で測定されてもよい。単一の平均フットプリントが、ディスパッチされた全てのウェーブの平均をもとめることによって決定され、又は、複数の平均フットプリントが、ディスパッチされたウェーブのサブセットについて決定される。サブセットは、単一命令複数データ(SIMD)で実行されるウェーブ、実行が完了したウェーブ、様々なタイプのシェーダを実行するウェーブ等のように、ディスパッチされたウェーブの共通の特性に基づいて決定される。
【0006】
図1は、いくつかの実施形態による、ディスプレイ110への出力を意図した視覚イメージを生成するためのグラフィックス処理ユニット(GPU)105を含む処理システム100のブロック図である。GPU105は、複数のプロセッサコア111,112,113,114を含むマルチスレッドプロセッサであり、本明細書ではこれらをまとめて「プロセッサコア111~114」と呼ぶ。プロセッサコア111~114は、命令を同時又は並列に実行するように構成されている。
図1では、分かり易くするために4つのプロセッサコア111~114を示しているが、GPU105のいくつかの実施形態は、数十又は数百以上のプロセッサコアを含む。プロセッサコア111~114の処理リソースは、ディスプレイ110に表示するオブジェクトの画像をレンダリングするグラフィックスパイプラインを実装するために使用される。プロセッサコア111~114のいくつかの実施形態は、複数のデータセットで単一のプログラムの複数のインスタンス(又は、ウェーブ)を同時に実行する。GPU105のウェーブ生成制御ロジックは、本明細書で説明するように、動的に決定されたウェーブのフットプリントに基づいて、プロセッサコア111~114で実行されるウェーブを生成する。
【0007】
処理システム100は、メモリ115を含む。メモリ115のいくつかの実施形態は、ダイナミックランダムアクセスメモリ(DRAM)として実装されている。しかし、メモリ115は、スタティックランダムアクセスメモリ(SRAM)、不揮発性RAM等を含む他のタイプのメモリを使用して実装されてもよい。図示した実施形態では、GPU105は、バス120を介してメモリ115と通信する。しかし、GPU105のいくつかの実施形態は、直接接続を介して、又は、他のバス、ブリッジ、スイッチ、ルータ等を介して、メモリ115と通信する。GPU105は、メモリ115に記憶された命令を実行することができ、実行された命令の結果等の情報をメモリ115に記憶することができる。例えば、メモリ115は、GPU105のプロセッサコア111~114によって実行されるプログラムコードからの命令のコピー125を記憶することができる。
【0008】
処理システム100は、命令を実行するための中央処理装置(CPU)130を含む。CPU130のいくつかの実施形態は、命令を同時又は並列に独立して実行することができる複数のプロセッサコア131,132,133,134(本明細書ではまとめて「プロセッサコア131~134」と呼ぶ)を含む。また、CPU130は、バス120に接続されており、これにより、バス120を介してGPU105及びメモリ115と通信することができる。CPU130は、メモリ115に記憶されたプログラムコード135等の命令を実行することができ、実行された命令の結果等の情報をメモリ115に記憶することができる。また、CPU130は、ドローコールをGPU105に発行することによって、グラフィックス処理を開始することができる。ドローコールは、GPU105にフレーム内のオブジェクト(又は、オブジェクトの一部)のレンダリングを指示するために、CPU130によって生成され、GPU105に送信されるコマンドである。ドローコールのいくつかの実施形態は、オブジェクト又はその一部をレンダリングするためにGPU105によって使用されるテクスチャ、状態、シェーダ、レンダリングオブジェクト、バッファ等を定義する情報を含む。ドローコールに含まれる情報は、状態情報を含む状態ベクトルと呼ぶことができる。GPU105は、オブジェクトをレンダリングして、ディスプレイ110に提示されるピクセル値を生成し、ディスプレイ110は、ピクセル値を使用して、レンダリングされたオブジェクトを表す画像を表示する。
【0009】
入出力(I/O)エンジン140は、処理システム100の他の要素(例えば、キーボード、マウス、プリンタ、外部ディスク等)と同様に、ディスプレイ110に関連する入出力動作を処理する。I/Oエンジン140は、GPU105、メモリ115又はCPU130と通信できるように、バス120に接続されている。図示した実施形態では、I/Oエンジン140は、外部記憶媒体145(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ネットワークサーバ等)に記憶された情報を読み出すように構成されている。外部記憶媒体145は、ビデオゲーム等のアプリケーションを実行するために使用されるプログラムコードを表す情報を記憶する。外部記憶媒体145のプログラムコードは、GPU105によって実行される命令のコピー125、又は、CPU130によって実行されるプログラムコード135を形成するために、メモリ115に書き込まれてもよい。
【0010】
マルチスレッドGPU105のプロセッサコア111~114は、GPU105のウェーブの実行をサポートするために使用されるリソースを共有する。GPU105のいくつかの実施形態は、プロセッサコア111~114で実行されるウェーブの状態情報を記憶するベクトル汎用レジスタ(VGPR、明確にするために
図1に示されていない)のセットを実装する。VGPRは、プロセッサコア111~114で同時に実行されているウェーブ間で共有される。例えば、各ウェーブにはVGPRのサブセットが割り当てられ、ウェーブの状態情報が記憶される。また、ウェーブは、同時に実行されるウェーブ間で分割されるローカルデータ共有、ローカルキャッシュにアクセスするためにウェーブによって共有されるメモリ帯域幅等を含む、GPU105の他のリソースを共有する。マルチスレッドCPU130のプロセッサコア131~134もリソースを共有する。GPU105との関連で後述するように、ウェーブ生成及び共有リソースの動的な割り当ても、マルチスレッドCPU130のいくつかの実施形態で実施される。
【0011】
異なるウェーブは、プロセッサコア111~114での実行中に異なる量のリソースを消費する。したがって、各ウェーブは、異なるリソースフットプリントを有する。さらに、ウェーブによって消費されるリソースは、通常、当該ウェーブの実行中に変化する。例えば、ウェーブの状態情報を記憶するために必要なVGPRの数は、ウェーブが実行されると変化する。ウェーブによって生成される中間結果の量は、通常、ウェーブの実行が始まると増加し、ウェーブの実行中にピークに達し、ウェーブの実行が完了すると減少する。したがって、中間結果(及び、他の状態情報)を記憶するために必要なVGPRの数は、記憶する必要がある情報の量に応じて増加し、ピークに達し、その後減少する。同様のパターンが、ローカルデータの共有やメモリ帯域幅を含む他のリソースの消費においても見られる。
【0012】
GPU105は、GPU105の共有リソース内のウェーブのフットプリントの動的な推定に基づいて、プロセッサコア111~114で実行するためのウェーブを生成する。共有リソース内のウェーブのフットプリントは、プロセッサコア111~114で実行されるウェーブと同時に測定される。ウェーブの測定されたフットプリントは、例えば、測定されたフットプリントの指数関数的に重み付けされた移動平均を使用して、時間間隔に亘って平均化される。平均フットプリントに基づいて、プロセッサコア111~114によって実行される複数のウェーブが生成され、ディスパッチされる。例えば、生成されるウェーブの数を、利用可能な共有リソースを平均フットプリントで割った値に設定することができる。利用可能な共有リソースは、共有リソースの合計から、プロセッサコア111~114で現在実行されているウェーブに割り当てられている共有リソースを減算したものに等しい。
【0013】
場合によっては、GPU105は、共有リソース内のウェーブのフットプリントの平均値に基づいて決定されるレートでウェーブを生成する。GPU105は、リソース内のウェーブのフットプリントの平均値の変化に応じて、ウェーブの生成レートを変更する。GPU105は、処理システム100のボトルネックと考えられる単一のリソース内の平均フットプリントに基づいて、生成されるウェーブの数(又は、生成されるウェーブのレート)を決定することができ、又は、複数の共有リソース内の平均フットプリントの組み合わせに基づいて、ウェーブの数を決定することができる。
【0014】
図2は、いくつかの実施形態による、高次のジオメトリプリミティブを処理して三次元(3D)シーンのラスタライズ画像を生成することができるグラフィックスパイプライン200を示す図である。グラフィックスパイプライン200は、
図1に示すGPU105のいくつかの実施形態において実装される。例えば、グラフィックスパイプライン200は、
図1に示すマルチスレッドGPU105のプロセッサコア111~114を使用して実装されてもよい。
【0015】
グラフィックスパイプライン200は、シーンのモデルの部分を表すオブジェクトを定義するのに使用されるストレージリソース201からの情報にアクセスするように構成された入力アセンブラ202を含む。ソフトウェアで実装可能な頂点シェーダ203は、プリミティブの単一の頂点を入力として論理的に受信し、単一の頂点を出力する。頂点シェーダ203等のシェーダのいくつかの実施形態は、例えば、
図1に示すプロセッサコア111~114によって複数の頂点を同時に処理することができるように、大規模な単一命令多重データ(SIMD)処理を実施する。
図2に示すグラフィックスパイプライン200は、グラフィックスパイプライン200に含まれる全てのシェーダが、共有された大規模なSIMD計算ユニットにおいて同じ実行プラットフォームを有するように、ユニファイドシェーダモデル(unified shader model)を実装する。したがって、頂点シェーダ203を含むシェーダは、本明細書においてユニファイドシェーダプール(unified shader pool)204と呼ばれるリソースの共通セットを使用して実装される。ユニファイドシェーダプール204のいくつかの実施形態は、
図1に示すGPU105のプロセッサコア111~114を使用して実装される。
【0016】
ハルシェーダ205は、入力パッチを定義するのに使用される入力高次パッチ又はコントロールポイントに基づいて動作する。ハルシェーダ205は、テッセレーション係数及び他のパッチデータを出力する。ハルシェーダ205によって生成されたプリミティブは、オプションでテッセレータ206に提示されてもよい。テッセレータ206は、ハルシェーダ205からオブジェクト(パッチ等)を受信し、例えば、ハルシェーダ205によってテッセレータ106に提供されるテッセレーション係数に基づいて入力オブジェクトをテッセレーションすることによって、入力オブジェクトに対応するプリミティブを識別する情報を生成する。テッセレーションは、例えば、テッセレーション処理によって生成されるプリミティブの粒度を指定するテッセレーション係数によって示すように、例えばパッチ等の入力高次プリミティブを、より詳細なレベルを表す低次出力プリミティブのセットに分割する。したがって、シーンのモデルを(メモリ又は帯域幅を節約するために)少数の高次プリミティブで表すことができ、高次プリミティブをテッセレーションすることによってさらなる詳細を追加することができる。
【0017】
ドメインシェーダ207は、ドメイン位置及び(オプションで)他のパッチデータを入力する。ドメインシェーダ207は、提供された情報に基づいて動作し、入力ドメイン位置及び他の情報に基づいて、出力用の単一の頂点を生成する。ジオメトリシェーダ208は、入力プリミティブを受信し、入力プリミティブに基づいて、ジオメトリシェーダ208によって生成される最大4つのプリミティブを出力する。プリミティブの1つのストリームがラスタライザ209に提供され、最大4つのプリミティブのストリームがストレージリソース201のバッファに連結され得る。ラスタライザ209は、シェーディング操作と、他の操作(例えば、クリッピング、パースペクティブ分割、シザリング、ビューポート選択等)と、を実行する。ピクセルシェーダ210は、ピクセルフローを入力し、入力されたピクセルフローに応じて、0又は別のピクセルフローを出力する。出力マージャブロック211は、ピクセルシェーダ210から受信したピクセルに対して、ブレンド、デプス(depth)、ステンシル又は他の操作を実行する。
【0018】
グラフィックスパイプライン200のステージは、ユニファイドシェーダプール204の処理リソースを使用して、異なるステージによって実行されているウェーブによって共有されるストレージリソース215にアクセスすることができる。ストレージリソース215の一部は、
図1に示すGPU105の一部としてオンチップで実装されるか、
図1に示すメモリ115のいくつかの実施形態を使用してオフチップで実装される。ストレージリソース215は、複数のウェーブのワークグループ内での読み出し/書き込み通信及び同期に使用されるLDS220を含む。ストレージリソース215は、ウェーブによって実行された動作の中間結果等のように、ウェーブの現在の状態を定義する状態情報を記憶するVGPR225も含む。ストレージリソース215は、頂点データ、テクスチャデータ、及び、グラフィックスパイプライン200の1つ以上のステージによって頻繁に使用される他のデータ等の情報をキャッシュするために使用されるキャッシュ階層230をさらに含む。また、ストレージリソース215は、他のレジスタ、バッファ、メモリ又はキャッシュを含むことができる。グラフィックスパイプライン200の共有リソースは、グラフィックスパイプライン200のステージとストレージリソース215との間の通信をサポートするために使用されるメモリファブリックの帯域幅も含む。
【0019】
グラフィックスパイプライン200で実行中のウェーブは、ストレージリソース215及びグラフィックスパイプライン200の他の共有リソースにおいて異なるフットプリントを有する。例えば、画像の非常に詳細な前景部分をシェーディングするのに使用されるウェーブは、画像のあまり詳細ではない背景部分をシェーディングするのに使用されるウェーブよりも、共有リソースにおいて大きなフットプリントを有してもよい。また、ウェーブのフットプリントは、グラフィックスパイプライン200を通過するにつれて変化する。例えば、共有リソース内のウェーブのフットプリントは、頂点シェーダ203での実行中に(比較的小さい)第1値で開始することができ、その後、グラフィックスパイプライン200の後続するステージでウェーブが追加の中間結果を生成すると、ウェーブのフットプリントが増加し得る。したがって、ウェーブ生成制御ロジックは、LDS220、VGPR225、キャッシュ階層230、ストレージリソース215へのアクセスに使用されるメモリ帯域幅、及び、他の共有リソース内のウェーブのフットプリントの動的な推定に基づいて、グラフィックスパイプライン200で実行されるウェーブを生成するように構成されている。
【0020】
図3は、いくつかの実施形態による、共有リソースの動的割り当てに基づくウェーブの生成をサポートする処理システムの一部300のブロック図である。一部300は、
図1に示す処理システム100のいくつかの実施形態を実施するために使用される。例えば、一部300は、
図1に示すGPU105又はCPU130のいくつかの実施形態を実施するために使用されるマルチスレッド処理ユニット305を含む。処理ユニット305は、本明細書でまとめて「プロセッサコア310~313」と呼ばれる複数のプロセッサコア310,311,312,313を含む。プロセッサコア310~313は、LDS320と、VGPR325と、キャッシュ330と、を含むリソース315のセットを共有する。また、プロセッサコア310~313は、処理ユニット305と共有リソース315との間の接続335のメモリ帯域幅を共有する。
【0021】
プロセッサコア310~313で実行されるウェーブは、共有リソース315において異なるフットプリントを有する。例えば、第1ウェーブは、LDS320においてフットプリント340、VGPR325においてフットプリント341、キャッシュ330においてフットプリント342を有する。また、第1ウェーブは、フットプリント343と、接続335で利用可能なメモリ帯域幅と、を有する。共有リソース内のウェーブのフットプリント340~343は、プロセッサコア310~313で実行されるウェーブと同時に測定される。例えば、フットプリント340は、特定の時間に第1ウェーブに割り当てられるバイト数として測定されてもよく、フットプリント341は、特定の時間に第1ウェーブに割り当てられるレジスタ数として測定されてもよく、フットプリント342は、特定の時間に第1ウェーブに割り当てられるキャッシュエントリ数として測定されてもよい。接続335内のフットプリント343は、特定の時間における第1ウェーブに関連するキャッシュフェッチ又はミスの数に基づいて、測定又は推定されてもよい。フットプリント340~343の他の測定値(又は、他の共有リソースのフットプリント)も使用することができる。
【0022】
フットプリント340~343の複数の測定は、ウェーブ毎に経時的に行われる。ウェーブが生成されたとき、リソースがウェーブに割り当てられたとき、及び、リソースがウェーブから割り当て解除されたときに、測定を行うことができる。また、ウェーブのフットプリント340~343を、所定の実行サイクル数に対応する時間間隔で測定することができる。例えば、フットプリント340~343を、実行サイクル毎に1回、N実行サイクル毎に1回、又は、実行サイクルの他のサブセットの後に測定することができる。したがって、各ウェーブは、共有リソース内のウェーブのフットプリント340~343の経時的な変化を示す測定値のセットに関連付けられる。
【0023】
ウェーブ生成コントローラ345は、測定されたフットプリント340~343の平均値に基づいて、新たなウェーブを生成してプロセッサコア310~313にディスパッチする。ウェーブ生成コントローラ345のいくつかの実施形態は、ウェーブ内で実行される命令又は動作を示す情報350と、フットプリント340の測定値を示す情報355と、を受信する。ウェーブ生成コントローラ345は、特定の時間間隔に亘って測定されたフットプリント340~343の平均値を生成する。ウェーブ生成コントローラ345のいくつかの実施形態は、例えば、指数関数的に重み付けされた移動平均として、基準時間に対するトレーリング期間(trailing time interval)に亘る平均値を生成する。ウェーブのサブセットに対して異なる平均値を生成することができる。例えば、フットプリント340~343の平均値を、単一命令複数データ操作を含むウェーブのサブセット、実行を完了したウェーブのサブセット、ウェーブを実行するシェーダのタイプに対応するウェーブのサブセット等に対して生成することができる。
【0024】
ウェーブ生成コントローラ345は、フットプリント340~343の平均値に基づいて決定されたウェーブ数をディスパッチする(又は、決定されたレートでウェーブをディスパッチする)。例えば、トレーリング期間を決定するのに使用される基準時間の後に生成されるウェーブの数又はレートは、平均値に基づいて決定される。また、ウェーブ生成コントローラ345は、以前のトレーリング期間に亘る以前の移動平均に対する移動平均の変化に応じて、生成されるウェーブの数(又は、ウェーブ生成レート)を変更するように構成されている。例えば、移動平均の減少に応じて、より高いレートでウェーブを生成することができ、これは、より多くの共有リソース315が他のウェーブへの割り当てに利用可能であることを示している。別の例では、移動平均の増加に応じてウェーブをより低いレートで生成することができ、これは、他のウェーブに割り当てることができる共有リソースがより少ないことを示している。
【0025】
ウェーブ生成コントローラ345のいくつかの実施形態は、サブセットに対して計算された平均フットプリントに基づいて、ウェーブの異なるサブセットに対して生成される異なるウェーブ数(又は、異なるウェーブ生成レート)を決定する。例えば、ウェーブ生成コントローラ345は、単一命令複数データ操作、実行を完了したウェーブのサブセット、ウェーブを実行する異なるタイプのシェーダに対応するウェーブのサブセット等を含むウェーブのサブセットの平均値に基づいて、異なる数のウェーブを生成(又は、異なるレートでウェーブを生成)することができる。
【0026】
図4は、いくつかの実施形態による、共有リソースのウェーブの測定されたフットプリント405の時間関数としてのプロット400を示す図である。測定されたフットプリント405は、
図4において実線で示されている。しかし、いくつかの実施形態では、測定されたフットプリント405は、所定の実行サイクル数に対応する時間間隔等の特定の時間間隔における複数の離散測定値で形成される。最初に、測定されたフットプリント405は、比較的低い値で始まり、その後、ウェーブの実行が進むにつれて増加(又は、減少)する。測定されたフットプリント405の移動平均410は、基準時間420に対するトレーリング期間415の間に実行された測定の値を用いて計算される。例えば、移動平均410は、トレーリング期間415の間に実行された測定の値を用いて計算される、指数関数的に重み付けされた移動平均であってもよい。基準時間420は、現在の時間に対応してもよいし、所定の時間間隔で生じるように選択されてもよい。
【0027】
図5は、いくつかの実施形態による、共有リソースのウェーブの平均フットプリント505のプロット500、及び、マルチスレッド処理ユニットにおける複数のインフライトのウェーブ515のプロット510を含む図である。平均フットプリント505は、本明細書で説明するように、マルチスレッド処理ユニットのプロセッサコアで実行されるウェーブと同時に、ウェーブのフットプリントの測定値に基づいて決定される。次に、コントローラは、平均フットプリント505に基づいて、インフライトのウェーブの数515を決定する。本明細書で使用される「インフライトのウェーブ」という用語は、マルチスレッド処理ユニットのプロセッサコアで実行するために生成され、ディスパッチされたが、未だリタイアしていないウェーブを指す。したがって、インフライトのウェーブの数515は、コントローラによって生成されるウェーブの数、又は、コントローラが新たなウェーブを生成するレートによって決定される。
【0028】
プロット500は、各ウェーブが占有する共有リソース内のフットプリントであると最初に想定される最小平均フットプリント520を示している。また、プロット500は、個々のウェーブに割り当てられる共有リソースの最大量を表す最大平均フットプリント525も示している。コントローラは、平均フットプリントの現在値に基づいてウェーブを生成する。プロット510は、生成されるウェーブの数(又は、ウェーブが生成されるレート)を決定するために使用される平均フットプリントが最小平均フットプリント520に等しいので、インフライトのウェーブの数515が最初比較的高いことを示している。インフライトのウェーブの数515は、平均フットプリント505が最大値525に達するまで、平均フットプリント505の増加に応じて減少する。次に、インフライトのウェーブの数515は、平均フットプリント505の減少に応じて増加する。
【0029】
図6は、いくつかの実施形態による、マルチスレッド処理ユニットで実行されるウェーブのフットプリントの平均に基づいてウェーブの生成を制御する方法600のフロー図である。方法600は、
図1に示すコンピューティングシステム100、及び、
図3に示すコンピューティングシステムの一部300のいくつかの実施形態で実施される。
図6に示す方法600は、マルチスレッド処理ユニットで実行されるウェーブのための共有リソースの平均フットプリントを決定するが、方法600のいくつかの実施形態は、複数の共有リソース、ウェーブの異なるサブセット等の平均フットプリントを決定する。
【0030】
ブロック605において、コントローラは、初期のフットプリントに基づいて、マルチスレッド処理ユニットで実行するためのウェーブを生成する。いくつかの実施形態では、初期のフットプリントは、最小平均フットプリントに設定される。コントローラは、初期のフットプリントに基づいて決定された数のウェーブを生成(又は、決定されたレートでウェーブを生成)し続ける。
【0031】
ブロック610において、マルチスレッド処理ユニットで実行されているウェーブのフットプリントの移動平均が決定される。共有リソースの個々のウェーブのフットプリントが測定され、測定されたフットプリントを用いて移動平均が計算される。例えば、移動平均は、基準時間に対するトレーリング期間に亘って実行されるフットプリントの測定値を使用して決定されてもよい。
【0032】
決定ブロック615において、コントローラは、平均フットプリントが増加したか否かを決定する。増加していない場合、方法600は、決定ブロック620に進む。平均フットプリントが増加した場合、方法600は、決定ブロック625に進み、コントローラは、平均フットプリントが最大フットプリントに等しいか否かを決定する。平均フットプリントが最大フットプリントに等しい場合、方法600は、ブロック610に戻り、コントローラは、新たに取得したフットプリントの測定値に基づいて移動平均を計算し続ける。したがって、コントローラは、最大フットプリントに基づいて決定された数のウェーブを生成(又は、決定されたレートでウェーブを生成)し続ける。平均フットプリントが最大フットプリントに等しくない場合、方法600は、ブロック630に進む。コントローラは、平均フットプリントの増加に応じて、例えば、生成されるウェーブの数を減らすことによって、又は、ウェーブの生成レートを減少させることによって、ブロック630においてインフライトのウェーブの数を減らす。
【0033】
決定ブロック620において、コントローラは、平均フットプリントが減少したか否かを決定する。減少していない場合、方法600は、ブロック610に進む。したがって、コントローラは、以前の(変更されていない)平均フットプリントに基づいて決定された数のウェーブを生成(又は、決定されたレートでウェーブを生成)し続ける。平均フットプリントが減少した場合、方法600は、決定ブロック635に進み、コントローラは、平均フットプリントが最小フットプリントに等しいか否かを決定する。平均フットプリントが最小フットプリントに等しい場合、方法600は、ブロック610に戻り、コントローラは、新たに取得したフットプリントの測定値に基づいて移動平均を計算し続ける。したがって、コントローラは、最小フットプリントに基づいて決定された数のウェーブを生成(又は、決定されたレートでウェーブを生成)し続ける。平均フットプリントが最小フットプリントに等しくない場合、方法600は、ブロック640に進む。コントローラは、平均フットプリントの減少に応じて、例えば、生成されるウェーブの数を増やすことによって、又は、ウェーブの生成レートを増加させることによって、ブロック640においてインフライトのウェーブの数を増やす。
【0034】
図7は、いくつかの実施形態による、共有リソースの2つの異なるウェーブの測定されたフットプリント705,710の時間関数としてのプロット700を示す図である。測定されたフットプリント705,710は、
図7において実線で示されている。しかし、いくつかの実施形態では、測定されたフットプリント705,710は、所定の実行サイクル数に対応する時間間隔等の特定の時間間隔における複数の離散測定値で形成される。フットプリント705,710は、対応するウェーブがプロセッサコアで実行されている間に測定される。測定されたフットプリント705,710は、同時に存在し、時間的にオフセットされている。しかし、他の測定値は、必ずしも同時に存在し、又は、時間的にオフセットされているわけではない。例えば、場合によっては、測定されたフットプリント705,710は、異なる時間に、又は、ウェーブが異なるプロセッサで実行されている間に測定される。
【0035】
ウェーブは、異なるコードパス(例えば、GPUのシェーダ内の異なる実行パス等)を使用してウェーブを生成する異なる特性を有する。例えば、画面イメージ内の2つのタイプのマテリアルをシェーディングするように構成されたピクセルシェーダでウェーブが実行されている場合、ピクセルシェーダは、第1マテリアルタイプ又は第2マテリアルタイプのオブジェクトに対応するピクセルをシェーディングする場合に異なる動作をする場合がある。その結果、ピクセルシェーダを通過する異なるコードパスに沿って異なるピクセルをシェーディングするのに使用されるウェーブがもたらされる。異なるタイプのマテリアルのシェーディングに関連する特性を例示目的で使用しているが、異なる最大フットプリントをもたらすウェーブの他の特性を使用して、異なるタイプのウェーブを区別することもできる。
【0036】
異なるコードパスに沿って実行されるウェーブは、共有リソースの異なる最大フットプリントに到達する。図示した実施形態では、第1コードパスに沿って実行される第1ウェーブは、第1最大フットプリント715に到達し、第2コードパスに沿って実行される第2ウェーブは、第1最大フットプリント715よりも小さい第2最大フットプリント720に到達する。最大フットプリント715,720は、ウェーブがプロセッサコアで実行されている間にフットプリントを監視することによって決定される。第1コードパスに沿って実行されるウェーブ(第1ウェーブ等)の平均フットプリントは、ウェーブの最大フットプリント(第1最大フットプリント715等)を平均化することによって計算される。第2コードパスに沿って実行されるウェーブ(第2ウェーブ等)の平均フットプリントは、ウェーブの最大フットプリント(第2最大フットプリント720等)を平均化することによって計算される。
【0037】
いくつかの実施形態では、異なるタイプのウェーブの平均最大フットプリントを使用して、何れのタイプのウェーブが実行されているかに応じて、生成されるウェーブの異なる数(又は、レート)を決定する。例えば、ピクセルシェーダが第1タイプのマテリアルをシェーディングしている場合、ピクセルシェーダを通過する対応する第1コードパスに沿って実行されるウェーブの平均最大フットプリントを使用して、生成されるウェーブの数(又は、レート)を決定する。別の例では、ピクセルシェーダが第2タイプのマテリアルをシェーディングしている場合、ピクセルシェーダを通過する対応する第2コードパスに沿って実行されるウェーブの平均最大フットプリントを使用して、生成されるウェーブの数(又は、レート)を決定する。上記の場合、第1タイプのウェーブの平均最大フットプリントは、第2タイプのウェーブの平均最大フットプリントよりも大きい。したがって、第1タイプのウェーブは、第2タイプのウェーブよりも少ない数(又は、低いレート)で生成される。
【0038】
いくつかの実施形態では、上記の装置及び技術は、
図1~
図6を参照して上述したコンピューティングシステム等の1つ以上の集積回路(IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を備えるシステムに実装される。これらのICデバイスの設計及び製造には、電子設計自動化(EDA)及びコンピュータ支援設計(CAD)ソフトウェアツールが使用される。これらの設計ツールは、通常、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計又は適合するための処理の少なくとも一部を実行するように1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作する、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含むことができる。設計ツール又は製造ツールを表すソフトウェア命令は、通常、コンピューティングシステムがアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上のフェーズを表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶されてもよいし、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体からアクセスされてもよい。
【0039】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。かかる記憶媒体には、限定されないが、光媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、キャッシュ)、不揮発性メモリ(例えば、読み出し専用メモリ(ROM)、フラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体は、コンピュータシステムに内蔵されてもよいし(例えば、システムRAM又はROM)、コンピュータシステムに固定的に取り付けられてもよいし(例えば、磁気ハードドライブ)、コンピュータシステムに着脱可能に取り付けられてもよいし(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)、有線又は無線のネットワークを介してコンピュータシステムに接続されてもよい(例えば、ネットワークアクセス可能なストレージ(NAS))。
【0040】
いくつかの実施形態では、上記の技術のいくつかの態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装されてもよい。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶され、又は、非一時的なコンピュータ可読記憶媒体上で有形に具現化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、1つ以上のプロセッサによって実行されると、上記の技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する命令及び特定のデータを含むことができる。非一時的なコンピュータ可読記憶媒体は、例えば、磁気若しくは光ディスク記憶デバイス、例えばフラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス等を含むことができる。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈若しくは実行可能な他の命令フォーマットであってもよい。
【0041】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0042】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。