IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ アドバンスト・マイクロ・ディバイシズ・インコーポレイテッドの特許一覧 ▶ エーティーアイ・テクノロジーズ・ユーエルシーの特許一覧

特表2025-503426ディスパッチのためのキャッシュブロッキング
<>
  • 特表-ディスパッチのためのキャッシュブロッキング 図1
  • 特表-ディスパッチのためのキャッシュブロッキング 図2
  • 特表-ディスパッチのためのキャッシュブロッキング 図3
  • 特表-ディスパッチのためのキャッシュブロッキング 図4
  • 特表-ディスパッチのためのキャッシュブロッキング 図5
  • 特表-ディスパッチのためのキャッシュブロッキング 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2025-02-04
(54)【発明の名称】ディスパッチのためのキャッシュブロッキング
(51)【国際特許分類】
   G06F 9/52 20060101AFI20250128BHJP
   G06F 12/0842 20160101ALI20250128BHJP
   G06F 12/0875 20160101ALI20250128BHJP
   G06F 12/0877 20160101ALI20250128BHJP
   G06F 9/38 20180101ALI20250128BHJP
【FI】
G06F9/52 150A
G06F12/0842
G06F12/0875 106
G06F12/0877 107
G06F9/38 370A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024535508
(86)(22)【出願日】2022-12-20
(85)【翻訳文提出日】2024-07-10
(86)【国際出願番号】 US2022053566
(87)【国際公開番号】W WO2023129435
(87)【国際公開日】2023-07-06
(31)【優先権主張番号】17/564,474
(32)【優先日】2021-12-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(71)【出願人】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【弁理士】
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【弁理士】
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【弁理士】
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】サウラブ シャルマ
(72)【発明者】
【氏名】ハシェム ハシェミ
(72)【発明者】
【氏名】パーヴォ ペッシ
(72)【発明者】
【氏名】ミカ ツオミ
(72)【発明者】
【氏名】ジャンパオロ トマージ
(72)【発明者】
【氏名】ジェレミー ルカーチ
(72)【発明者】
【氏名】グエンナディ リグール
【テーマコード(参考)】
5B013
5B205
【Fターム(参考)】
5B013DD01
5B205KK22
5B205LL15
(57)【要約】
処理システム[100]は、ワークアイテムの連続ディスパッチ[135]を部分[145]に分割する。連続ディスパッチは、バリア[202]、[204]によって互いに分離され、各バリアは、後続のディスパッチのワークアイテムが実行を開始するためには、前のディスパッチのワークアイテムが実行を完了しなければならないことを示す。いくつかの実施形態では、処理システムは、第1のディスパッチの部分の実行を、第1のディスパッチによって生成されたデータを消費する後続のディスパッチの部分とインターリーブする。それによって、処理システムは、後続のコンシューマ(又はコンシューマ/プロデューサ)ディスパッチのためにデータ局所性を保ち、処理効率を容易にしながら、プロデューサディスパッチによってローカルキャッシュ[120]に書き込まれるデータの量を低減する。
【選択図】図2
【特許請求の範囲】
【請求項1】
方法であって、
データをキャッシュに書き込むワークアイテムの第1のディスパッチの第1の部分を実行することであって、前記第1のディスパッチは、第1の複数の部分を含み、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれるデータの量は、前記キャッシュの記憶容量を超えない、ことと、
前記ワークアイテムの前記第1のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第1の部分を実行することであって、前記第2のディスパッチは、第2の複数の部分を含む、ことと、を含む、
方法。
【請求項2】
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第2のディスパッチの前記第1の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第3のディスパッチの第1の部分を実行することであって、前記第3のディスパッチは、第3の複数の部分を含む、ことを含む、
請求項1の方法。
【請求項3】
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、データを前記キャッシュに書き込む前記ワークアイテムの前記第1のディスパッチの第2の部分を実行することを含む、
請求項1の方法。
【請求項4】
前記ワークアイテムの前記第1のディスパッチの前記第2の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第1のディスパッチの前記第2の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取る前記ワークアイテムの前記第2のディスパッチの第2の部分を実行することを含む、
請求項3の方法。
【請求項5】
前記ワークアイテムの前記第1のディスパッチの前記第1の部分は、前記ワークアイテムの前記第2のディスパッチの前記第1の部分よりも大きい、
請求項1の方法。
【請求項6】
前記ワークアイテムの前記第1のディスパッチを前記第1の複数の部分に分割することと、
前記ワークアイテムの前記第2のディスパッチを前記第2の複数の部分に分割することと、を含む、
請求項1の方法。
【請求項7】
前記第1の複数の部分及び前記第2の複数の部分は、不均等なサイズである、
請求項1の方法。
【請求項8】
方法であって、
データをキャッシュに書き込むワークアイテムの第1のディスパッチを第1の複数の部分に分割することと、
前記第1のディスパッチによって書き込まれたデータを前記キャッシュから読み取るワークアイテムの第2のディスパッチを第2の複数の部分に分割することと、
前記第1の複数の部分の実行を前記第2の複数の部分の実行とインターリーブすることと、を含む、
方法。
【請求項9】
前記第1のディスパッチ及び前記第2のディスパッチのうち少なくとも1つによって書き込まれたデータを前記キャッシュから読み取るワークアイテムの第3のディスパッチを第3の複数の部分に分割することと、
前記第3の複数の部分の実行を、前記第1の複数の部分の実行及び前記第2の複数の部分の実行とインターリーブすることと、を含む、
請求項8の方法。
【請求項10】
前記第1の複数の部分のうち第1の部分は、前記第2の複数の部分のうち第1の部分よりも大きい、
請求項8又は9の方法。
【請求項11】
前記第1の複数の部分のうち前記第1の部分によって前記キャッシュに書き込まれるデータの量は、前記キャッシュの記憶容量を超えない、
請求項10の方法。
【請求項12】
前記第1の複数の部分及び前記第2の複数の部分は、不均等なサイズである、
請求項8の方法。
【請求項13】
インターリーブすることは、
前記第1の複数の部分のうち第1の部分を実行することと、
前記第1の複数の部分のうち前記第1の部分が実行を完了したことに応じて、前記第2の複数の部分のうち第1の部分を実行することと、を含む、
請求項8の方法。
【請求項14】
デバイスであって、
キャッシュと、
プロセッサと、を備え、
前記プロセッサは、
データを前記キャッシュに書き込むワークアイテムの第1のディスパッチの第1の部分を実行することであって、前記第1のディスパッチは、第1の複数の部分を含み、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれるデータの量は、前記キャッシュの記憶容量を超えない、ことと、
前記ワークアイテムの前記第1のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第1の部分を実行することであって、前記第2のディスパッチは、第2の複数の部分を含む、ことと、
を行うように構成されている、
デバイス。
【請求項15】
前記プロセッサは、
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第2のディスパッチの前記第1の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第3のディスパッチの第1の部分を実行することであって、前記第3のディスパッチは、第3の複数の部分を含む、ことを行うように構成されている、
請求項14のデバイス。
【請求項16】
前記プロセッサは、
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、データを前記キャッシュに書き込む前記ワークアイテムの前記第1のディスパッチの第2の部分を実行することを行うように構成されている、
請求項14のデバイス。
【請求項17】
前記プロセッサは、
前記ワークアイテムの前記第1のディスパッチの前記第2の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第1のディスパッチの前記第2の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取る前記ワークアイテムの前記第2のディスパッチの第2の部分を実行することを行うように構成されている、
請求項16のデバイス。
【請求項18】
前記ワークアイテムの前記第1のディスパッチの前記第1の部分は、前記ワークアイテムの前記第2のディスパッチの前記第1の部分よりも大きい、
請求項14のデバイス。
【請求項19】
前記プロセッサは、
前記ワークアイテムの前記第1のディスパッチを前記第1の複数の部分に分割することと、
前記ワークアイテムの前記第2のディスパッチを前記第2の複数の部分に分割することと、
を行うように構成されている、
請求項14のデバイス。
【請求項20】
前記第1の複数の部分及び前記第2の複数の部分は、不均等なサイズである、
請求項14のデバイス。
【発明の詳細な説明】
【背景技術】
【0001】
グラフィックス処理ユニット(Graphics Processing Unit、GPU)及び他のマルチスレッド処理ユニット等の並列処理ユニットは、典型的には、複数のデータセットに対して単一のプログラムの複数のインスタンスを同時に実行する複数の処理要素(プロセッサコア又は計算ユニットとも称される)を実装する。例えば、処理要素は、単一命令複数データ(Single-Instruction-Multiple-Data、SIMD)プロトコルを実装して、複数のプロセッサコアを使用して複数のデータセットに対して同じ命令を同時に実行することができる。
【0002】
階層実行モデルは、異なるデータセットを使用して実行される命令のカーネルを定義する。例えば、例を挙げるとディスプレイのピクセルに対応するワークアイテム(本明細書ではスレッド又はストリームとも呼ばれる)のグリッドのディスパッチは、並列処理ユニットのキャッシュに記憶されたデータセットにアクセスする。サーフェス又はテクスチャ等のいくつかのデータセットは、連続ディスパッチによって修正され、読み取られる。例えば、プロデューサディスパッチと呼ばれる第1のディスパッチは、データをキャッシュに書き込み、コンシューマ/プロデューサディスパッチと呼ばれる後続のディスパッチは、プロデューサディスパッチによって書き込まれたデータを読み取り、修正する。コンシューマディスパッチは、前のディスパッチによって書き込まれたデータを読み取る。しかしながら、キャッシュに記憶することができるデータの量はキャッシュのサイズによって制約され、プロデューサディスパッチによって生成されるデータの量はしばしばキャッシュの記憶容量を超え、キャッシュの「スラッシング(thrashing)」をもたらす。このようなデータは、後続のディスパッチによって読み取ることができる前にキャッシュから追い出される(エビクトされる)ことが多い。
【発明の概要】
【課題を解決するための手段】
【0003】
一例では、方法は、データをキャッシュに書き込むワークアイテムの第1のディスパッチの第1の部分を実行することを含み、第1のディスパッチは、第1の複数の部分を含む。第1のディスパッチの第1の部分によってキャッシュに書き込まれるデータの量は、キャッシュの記憶容量を超えない。ワークアイテムの第1のディスパッチの第1の部分が実行を完了したことに応じて、本方法は、第1のディスパッチの第1の部分によってキャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第1の部分を実行することを更に含み、第2のディスパッチは、第2の複数の部分を含む。
【0004】
いくつかの例では、方法は、ワークアイテムの第2のディスパッチの第1の部分が実行を完了したことに応じて、第1のディスパッチの第1の部分及び第2のディスパッチの第1の部分のうち少なくとも1つによってキャッシュに書き込まれたデータを読み取るワークアイテムの第3のディスパッチの第1の部分を実行することを更に含む。第3のディスパッチは、第3の複数の部分を含む。いくつかの例では、方法は、ワークアイテムの第2のディスパッチの第1の部分が実行を完了したことに応じて、キャッシュにデータを書き込むワークアイテムの第1のディスパッチの第2の部分を実行することを更に含む。
【0005】
方法は、いくつかの例において、ワークアイテムの第1のディスパッチの第2の部分が実行を完了したことに応じて、第1のディスパッチの第1の部分及び第1のディスパッチの第2の部分のうち少なくとも1つによってキャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第2の部分を実行することを更に含む。いくつかの例では、ワークアイテムの第1のディスパッチの第1の部分は、ワークアイテムの第2のディスパッチの第1の部分よりも大きい。
【0006】
いくつかの例では、方法は、ワークアイテムの第1のディスパッチを第1の複数の部分に分割することと、ワークアイテムの第2のディスパッチを第2の複数の部分に分割することと、を更に含む。いくつかの例では、第1の複数の部分及び第2の複数の部分は、不均等なサイズである。
【0007】
別の例では、方法は、データをキャッシュに書き込むワークアイテムの第1のディスパッチを第1の複数の部分に分割することと、第1のディスパッチによって書き込まれたデータをキャッシュから読み取るワークアイテムの第2のディスパッチを第2の複数の部分に分割することと、第1の複数の部分の実行を第2の複数の部分の実行とインターリーブすることと、を含む。いくつかの例では、方法は、第1のディスパッチ及び第2のディスパッチのうち少なくとも1つによって書き込まれたデータをキャッシュから読み取るワークアイテムの第3のディスパッチを第3の複数の部分に分割することと、第3の複数の部分の実行を、第1の複数の部分の実行及び第2の複数の部分の実行とインターリーブすることと、を更に含む。
【0008】
いくつかの例では、第1の複数の部分の第1の部分は、第2の複数の部分の第1の部分よりも大きい。いくつかの例では、第1の複数の部分の第1の部分によってキャッシュに書き込まれるデータの量は、キャッシュの記憶容量を超えない。いくつかの例では、第1の複数の部分及び第2の複数の部分は、不均等なサイズである。いくつかの例では、インターリーブすることは、第1の複数の部分の第1の部分を実行することと、第1の複数の部分の第1の部分が実行を完了したことに応じて、第2の複数の部分の第1の部分を実行することと、を含む。
【0009】
別の例では、デバイスは、キャッシュと、キャッシュにデータを書き込むワークアイテムの第1のディスパッチの第1の部分を実行するように構成されたプロセッサと、を含み、第1のディスパッチは、第1の複数の部分を含み、第1のディスパッチの第1の部分によってキャッシュに書き込まれるデータの量は、キャッシュの記憶容量を超えない。プロセッサは、ワークアイテムの第1のディスパッチの第1の部分が実行を完了したことに応じて、第1のディスパッチの第1の部分によってキャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第1の部分を実行するように構成されており、第2のディスパッチは第2の複数の部分を含む。
【0010】
いくつかの例では、プロセッサは、ワークアイテムの第2のディスパッチの第1の部分が実行を完了したことに応じて、第1のディスパッチの第1の部分及び第2のディスパッチの第1の部分のうち少なくとも1つによってキャッシュに書き込まれたデータを読み取るワークアイテムの第3のディスパッチの第1の部分を実行するように更に構成されており、第3のディスパッチは第3の複数の部分を含む。プロセッサは、いくつかの例では、ワークアイテムの第2のディスパッチの第1の部分が実行を完了したことに応じて、キャッシュにデータを書き込むワークアイテムの第1のディスパッチの第2の部分を実行するように更に構成されている。
【0011】
いくつかの例では、プロセッサは、ワークアイテムの第1のディスパッチの第2の部分が実行を完了したことに応じて、第1のディスパッチの第1の部分及び第1のディスパッチの第2の部分のうち少なくとも1つによってキャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第2の部分を実行するように更に構成されている。ワークアイテムの第1のディスパッチの第1の部分は、いくつかの例では、ワークアイテムの第2のディスパッチの第1の部分よりも大きい。
【0012】
いくつかの例では、プロセッサは、ワークアイテムの第1のディスパッチを第1の複数の部分に分割し、ワークアイテムの第2のディスパッチを第2の複数の部分に分割するように更に構成されている。いくつかの例では、第1の複数の部分及び第2の複数の部分は不均等なサイズである。
【0013】
本開示は、添付の図面を参照することによってより良好に理解され、その数々の特徴及び利点が当業者に明らかになり得る。異なる図面における同じ符号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0014】
図1】いくつかの実施形態による、連続ディスパッチを部分に分割し、部分の実行をインターリーブするように構成された処理システムのブロック図である。
図2】いくつかの実施形態による、連続ディスパッチを部分にパーティション分割し、パーティション間にバリアを挿入して部分の実行をインターリーブするディスパッチパーティション及びインターリービングモジュールのブロック図である。
図3】いくつかの実施形態による、連続ディスパッチのインターリーブされた部分の実行の反復を示す図である。
図4】いくつかの実施形態による、連続ディスパッチのインターリーブされた部分の開始位置を示す図である。
図5】いくつかの実施形態による、連続ディスパッチのインターリーブされた部分の開始位置を示す図である。
図6】いくつかの実施形態による、連続ディスパッチを部分に分割し、部分の実行をインターリーブする方法を示すフロー図である。
【発明を実施するための形態】
【0015】
並列処理ユニットのプロセッサコアは、空間的及び/又は時間的データ局所性がディスパッチ内及びディスパッチ間に存在するように、同じデータセットに連続的にアクセスするワークアイテムのディスパッチを実行することが多い。例示のために、ワークアイテムの一連のディスパッチに添付されるテクスチャ等のサーフェスが、連続するレンダリングパス又はノイズ除去パスにおいて読み取られる。例えば、シーン内のオブジェクトをレンダリングするピクセルに対応するワークアイテムの第1のディスパッチはグローバルイルミネーションを生成し、ワークアイテムの第2のディスパッチはシャドーイングを生成するか又はフィルタリングを実施する。第1のディスパッチ及び第2のディスパッチの両方は、ピクセルにマッピングする同じテクスチャデータを必要とする。いくつかの場合には、第1のディスパッチのワークアイテムは、リードアフターライト局所性(read-after-write locality)と呼ばれるものにおけるテクスチャとして後続のディスパッチのワークアイテムによって消費される、順序付けられていないアクセスビュー(unordered access view、UAV)バッファ又はレンダリングターゲット等のデータを生成する。
【0016】
命令を実行する過程で、並列処理ユニットのプロセッサコアは、プロセッサコアによって開始されるアクセスが比較的迅速に且つ比較的低いエネルギー消費で実施されるローカルキャッシュに又はプロセッサコアによって開始されるアクセスが比較的ゆっくり且つ比較的高いエネルギー消費で実施されるメモリ階層のより遠隔のレベルに記憶されたデータにアクセスする。典型的には、そのデータがメモリ階層内でプロセッサコアに近接して記憶されるほど、プロセッサコアによってより迅速且つエネルギー効率的にアクセスされる。処理効率を向上させるために、いくつかの処理システムは、データが近い将来にプロセッサコアによって再びアクセスされることを期待して、アクセスのために最近要求されたデータをプロセッサコアにより近いメモリ階層のレベルに移動させ、最近アクセスされていないデータをメモリ階層のより遠隔のレベルに移動させるメモリ管理プロトコルを実装する。
【0017】
後続のコンシューマ(又はコンシューマ/プロデューサ)ディスパッチが前のプロデューサディスパッチによって生成されたデータを消費するワークアイテムの連続ディスパッチの場合、プロデューサディスパッチによって生成されたデータを、コンシューマディスパッチによってアクセス可能なローカルキャッシュに記憶することにより、プロセッサコアによる比較的迅速なアクセスが容易になる。しかしながら、多くの場合、プロデューサディスパッチによって生成されるデータの量は、ローカルキャッシュの記憶容量を超え、その結果、メモリ階層のより遠隔のレベルへのデータの追い出しが生じ、後続のコンシューマディスパッチによる処理のために、そこからデータをフェッチしなければならない。
【0018】
後続のコンシューマ(又はコンシューマ/プロデューサ)ディスパッチのためにデータ局所性を保ちながら、プロデューサディスパッチによってローカルキャッシュに書き込まれるデータの量を低減するために、処理システムは、ワークアイテムの連続ディスパッチを部分に分割する。連続ディスパッチは、バリアによって互いに分離され、各バリアは、後続のディスパッチのワークアイテムが実行を開始するためには、前のディスパッチのワークアイテムが実行を完了しなければならないことを示す。いくつかの実施形態では、処理システムは、第1のプロデューサディスパッチ(第1のディスパッチと呼ばれる)を有限個の部分に分割し、第1の部分(2次元(2-D)ディスパッチについては(0,0)の開始位置、又は、3次元(3-D)ディスパッチについては(0,0,0)の開始位置を有する)は、第1の部分によって書き込まれたデータがローカル(最下位レベル)キャッシュの記憶容量を超えないようなサイズにされる。いくつかの実施形態では、第1のプロデューサディスパッチの部分は、等しいサイズである。他の実施形態では、第1のプロデューサディスパッチの部分は不均等なサイズにされる。例えば、第1のディスパッチの第1の部分は、第1のディスパッチの他の部分よりも大きいサイズである。
【0019】
処理システムは、第1のプロデューサディスパッチの直後に続き、第1のプロデューサディスパッチによって生成されたデータを消費するコンシューマ/プロデューサ又はコンシューマディスパッチ(第2のディスパッチと呼ばれる)を有限個の部分に分割する。コンシューマディスパッチがプロデューサディスパッチの以前に実行された部分によって生成された正しい(意図された)データを消費するようにコヒーレンシを保証するために、処理システムは、プロデューサディスパッチ部分が実行を完了するまでコンシューマディスパッチ部分が実行しないことを保証するために、部分間にバリアを挿入する。
【0020】
いくつかの実施形態では、第2のディスパッチの部分は等しいサイズである。他の実施形態では、第2のディスパッチの部分は不均等なサイズにされる。例えば、いくつかの実施形態において、処理システムは、第2のディスパッチの第1の部分(2次元(2-D)ディスパッチについては(0,0)の開始位置、又は、3次元(3-D)ディスパッチについては(0,0,0)の開始位置を有する)を、第2のディスパッチの第1の部分のワークアイテムが、第1のディスパッチの第1の部分の隣接するワークアイテムによって生成されたデータにアクセスして、例えばフィルタリング又は平均化を実施するように第1のディスパッチの第1の部分よりも小さくなるサイズにする。
【0021】
処理システムは、依存関係の性質(すなわち、依存関係が単純であるか複雑であるか)にかかわらず、一連の依存ディスパッチを同じ数の部分(すなわち、ブロック又はタイル)に分割する。プロデューサディスパッチのための部分サイズは、コンシューマディスパッチのための部分サイズとは異なり得る。しかしながら、プロデューサディスパッチとコンシューマディスパッチとの間の部分の数は同じままである。これにより、処理システムは、効率的な方法で部分間にバリアを配置することができる。
【0022】
処理効率を促進するために、いくつかの実施形態では、処理システムは、第1のディスパッチの部分の実行を、第1のディスパッチによって生成されたデータを消費する後続のディスパッチの部分とインターリーブする。例えば、いくつかの実施形態において、処理システムは、第1のディスパッチの第1の部分と、それに続く第2のディスパッチの第1の部分と、それに続く第1のディスパッチの第2の部分と、それに続く第2のディスパッチの第2の部分と、を実行する。ディスパッチの部分の実行をインターリーブすることによって、処理システムは、計算ユニット間で作業負荷のバランスをとる。
【0023】
図1は、いくつかの実施形態による、連続ディスパッチを部分に分割し、部分の実行をインターリーブするように構成された処理システム100を示す。処理システム100は、いくつかの実施形態による、ディスプレイ175に出力するように意図された視覚画像を創出するためのグラフィック処理ユニット(GPU)等の並列処理ユニット110を含む。並列プロセッサは、単一の命令を複数のデータ又はスレッドに対して並列に実行することができるプロセッサである。並列プロセッサの例は、グラフィックス、機械知能又は計算動作を実行するためのグラフィックス処理ユニット(GPU)、超並列プロセッサ、単一命令複数データ(SIMD)アーキテクチャプロセッサ、及び、単一命令複数スレッド(single instruction multiple thread、SIMT)アーキテクチャプロセッサ等のプロセッサを含む。いくつかの実施形態では、並列プロセッサは、コンピュータの一部として含まれる個別のデバイスである。高度プロセッサユニット等の他の実施形態では、並列プロセッサは、中央プロセッサユニット(central processor unit、CPU)等のホストプロセッサと共に単一のデバイスに含まれる。以下の説明は、例示の目的でグラフィックス処理ユニット(GPU)を使用するが、以下に説明される実施形態は、他のタイプの並列プロセッサに適用可能である。
【0024】
処理システム100は、メモリ150を含む。メモリ150のいくつかの実施形態は、ダイナミックランダムアクセスメモリ(dynamic random access memory、DRAM)として実装される。しかしながら、メモリ150は、スタティックランダムアクセスメモリ(static random access memory、SRAM)、不揮発性RAM等を含む他のタイプのメモリを使用して実装することもできる。図示された実施形態では、並列処理ユニット110は、バス160上でメモリ150と通信する。しかしながら、並列処理ユニット110のいくつかの実施形態は、直接接続で、又は、他のバス、ブリッジ、スイッチ、ルータ等を介して、メモリ150と通信する。並列処理ユニット110は、メモリ150に記憶された命令を実行し、並列処理ユニット110は、実行された命令の結果等の情報をメモリ150に記憶する。例えば、メモリ150は、並列処理ユニット110によって実行されるアプリケーション155から命令のコピーを記憶することができる。並列処理ユニット110のいくつかの実施形態は、命令を同時に又は並列に独立して実行する複数のプロセッサコア(計算ユニットと呼ばれる)115を含む。
【0025】
処理システム100は、概して、アプリケーション155等の命令セット(例えばコンピュータプログラム)を実行して、電子デバイスのための指定されたタスクを実行するように構成されている。そのようなタスクの例は、電子デバイスの動作のアスペクトを制御すること、ユーザに情報を表示して、特定のユーザエクスペリエンスを提供すること、他の電子デバイスと通信すること等を含む。したがって、異なる実施形態では、処理システム100は、デスクトップコンピュータ、ラップトップコンピュータ、サーバ、ゲームコンソール、タブレット、スマートフォン等の多数のタイプの電子デバイスのうち何れかで採用されている。処理システム100は、図1に示されるよりも多い又は少ない構成要素を含み得ることを理解されたい。例えば、処理システム100は、1つ以上の入力インターフェース、不揮発性ストレージ、1つ以上の出力インターフェース、ネットワークインターフェース、及び、1つ以上のディスプレイ又はディスプレイインターフェースを更に含み得る。
【0026】
処理システム100は、命令を実行するための中央処理ユニット(CPU)105を含む。CPU105のいくつかの実施形態は、同時に又は並列に命令を独立して実行する複数のプロセッサコア(明確化のために図示せず)を含む。また、CPU105は、バス160に接続され、したがって、バス160を介して並列処理ユニット110及びメモリ150と通信する。CPU105は、メモリ150に記憶されたアプリケーション155のためのプログラムコード等の命令を実行し、CPU105は、実行された命令の結果等の情報をメモリ150に記憶する。また、CPU105は、並列処理ユニット110にドローコールを発行することによって、グラフィックス処理を開始することができる。ドローコールは、CPU105によって生成され、並列処理ユニット110がフレーム内のオブジェクト(又はオブジェクトの一部分)をレンダリングするように命令するために並列処理ユニット110に送信されるコマンドである。ドローコールのいくつかの実施形態は、オブジェクト又はその部分をレンダリングするために、並列処理ユニット110によって使用されるテクスチャ、状態、シェーダ、レンダリングオブジェクト、バッファ等を定義する情報を含む。並列処理ユニット110は、オブジェクトをレンダリングして、ディスプレイ175に提供されるピクセルの値を生成し、ディスプレイ175は、ピクセル値を使用して、レンダリングされたオブジェクトを表す画像を表示する。
【0027】
いくつかの実施形態では、レンダリングされる各フレームは、複数のパスにおいて、並列処理ユニット110のグラフィックスパイプラインによって処理される。例えば、シーンのジオメトリに対する第1のパス中に、ピクセル単位の照明を計算するために必要な属性のみがGバッファに書き込まれる。第2のパス中、グラフィックスパイプラインは、拡散及びスペキュラ照明データのみを出力する。グラフィックスパイプラインを通るフレームの第3のパスでは、グラフィックスパイプラインは、バックライトデータを読み取り、最終ピクセル単位シェーディングを出力する。したがって、マルチパスレンダリングでは、フレームのシーン及び関連付けられたオブジェクトが複数回レンダリングされる。オブジェクトが描かれる毎に、グラフィックスパイプラインは、オブジェクトの外観の追加のアスペクトを計算し、追加のアスペクトを以前の結果と組み合わせる。フレーム又はフレームのオブジェクトがグラフィックスパイプラインによってレンダリングされる毎に、レンダリングパスと称される。
【0028】
入力/出力(Input/Output、I/O)エンジン170は、ディスプレイ175に関連付けられた入力又は出力動作、及び、キーボード、マウス、プリンタ、外部ディスク等のような処理システム100の他の要素を扱う。I/Oエンジン170は、I/Oエンジン170が並列処理ユニット110、メモリ150又はCPU105と通信するようにバス160に結合される。図示された実施形態では、I/Oエンジン170は、コンパクトディスク(CD)、デジタルビデオディスク(DVD)等の外部記憶媒体180に記憶された情報を読み取るように構成されている。外部記憶媒体180は、ビデオゲーム等のアプリケーションを実行するために使用されるプログラムコードを表す情報を記憶する。外部記憶媒体180上のプログラムコードは、並列処理ユニット110又はCPU105によって実行される命令のコピーを形成するためにメモリ150に書き込むことができる。
【0029】
いくつかの実施形態では、並列処理ユニット110は、ドローコールに応じて異なるプリミティブを同時に処理するように構成された複数の段階(ステージ)を含むグラフィックスパイプライン(明確化のために図1には図示せず)を実装する。並列処理ユニット110内のグラフィックスパイプラインの段階は、ビデオゲーム等のアプリケーションによって生成された異なるプリミティブを同時に処理することができる。ジオメトリがグラフィックスパイプラインに提示される場合、ハードウェア状態設定は、グラフィックスパイプラインの状態を定義するように選択される。状態の例としては、シーンのレンダリングに使用される、ラスタライザ状態、ブレンド状態、深度ステンシル状態、提示されたジオメトリのプリミティブトポロジタイプ、及び、シェーダ(例えば、頂点シェーダ、ドメインシェーダ、ジオメトリシェーダ、ハルシェーダ、ピクセルシェーダ等)が挙げられる。グラフィックスパイプライン状態に実装されるシェーダは、対応するバイトコードによって表される。場合によっては、グラフィックスパイプライン状態を表す情報をハッシュ又は圧縮して、グラフィックスパイプライン状態のより効率的な表現を提供する。
【0030】
ドライバ165は、アプリケーション155から等のより高いレベルのグラフィックコンピューティングプログラムが並列処理ユニット110と相互作用することを可能にするコンピュータプログラムである。例えば、ドライバ165は、アプリケーション155から受信した標準コードを、並列処理ユニット110によって理解されるネイティブフォーマットコマンドストリームに変換する。ドライバ165は、アプリケーション155からの入力が、並列処理ユニット110の設定を指示することを可能にする。そのような設定には、レンダリングモード、アンチエイリアシング制御、テクスチャフィルタ制御、バッチビニング制御、及び、遅延ピクセルシェーディング制御の選択が含まれる。
【0031】
CPUから受信したコマンドのセットを実行するために、並列処理ユニット110は、コマンドプロセッサ125、ディスパッチユニット130、複数の計算ユニット115、及び、キャッシュ120を含む。コマンドプロセッサ125は、CPU105からコマンドを受信し、受信したコマンドを処理するために準備するように構成されたハードウェアのセットである。例えば、いくつかの実施形態では、コマンドプロセッサ125は、受信したコマンドをバッファリングし、受信したコマンドを処理するために1つ以上のキューに編成し、受信したコマンドを復号するか又は他の方法で解釈するための動作等を実施する。
【0032】
ディスパッチユニット130は、コマンドプロセッサ125から受信したディスパッチコマンド(図示せず)に応じてディスパッチ動作を実施するように構成されたハードウェアのセットである。ディスパッチコマンドに応じて、ディスパッチユニット130は、ワークアイテムのグリッドにアクセスし、ワークアイテムのサブセット(例えば、ディスパッチ135)を、ウェーブフロントとして処理するために計算ユニット115にディスパッチする。ドローコールとは異なり、ディスパッチ135は、グラフィックスパイプラインを経由せずに並列処理ユニット110によって処理することができる。
【0033】
複数の計算ユニット115は、ディスパッチユニット130によってディスパッチされたディスパッチ(例えば、ディスパッチ135)に対してシェーディング動作を一緒に実施する。異なる実施形態では、計算ユニット115は、コマンドプロセッサ125から受信されたコマンドに基づいて、ジオメトリ演算、テクスチャ演算、テッセレーション演算、頂点演算、メッシュ演算、プリミティブ演算、レイトレーシング演算、計算演算等、又は、それらの任意の組み合わせを実施する。いくつかの実施形態では、これらの演算を実施するために、計算ユニット115の各々は、受信されたディスパッチのワークアイテムを使用して指定された演算を実行するように構成された1つ以上のSIMD要素を含む。
【0034】
キャッシュ120は、複数の計算ユニット115のためのデータを記憶する。したがって、シェーダ動作を実行する過程で、複数の計算ユニット115は、キャッシュ120に対してデータを記憶し、取り出す。記憶され、取り出されたデータは、処理されている特定のワークアイテムに基づく。例えば、いくつかの実施形態では、ディスパッチ135の各ワークアイテムは、画像の個々のピクセルに対応し、キャッシュ120は、ディスパッチ135に含まれる個々のピクセルごと、又は、個々のピクセルのサブセットごとのデータ(例えば、テクスチャ値)を記憶する。いくつかの実施形態では、並列処理ユニット110は、複数のキャッシュレベル及びシステムメモリ150を有するメモリ階層に関連付けられ、キャッシュ120は、複数のキャッシュレベルのうち何れかを表す。
【0035】
ディスパッチ間のデータ局所性を活用するキャッシュ120へのアクセスを容易にするために、並列処理ユニット110は、ディスパッチパーティション及びインターリービングモジュール140を含む。ディスパッチパーティション及びインターリービングモジュール140は、ハードウェア、ファームウェア、ソフトウェア又はそれらの組み合わせで実装することができる。ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ135等の連続ディスパッチについてキャッシュ120に記憶されたデータの局所性を分析し、キャッシュ120に記憶されたデータのデータ局所性と、アプリケーション155のワークアイテムによって生成されたデータを記憶するためのキャッシュ120の記憶容量と、に基づいて、ディスパッチを有限個の部分145にパーティション分割する。例えば、ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ135によって生成されたデータが後続のディスパッチ(図示せず)によって消費されることになり、且つ、キャッシュ120の記憶容量を超えるであろうと判定した場合、いくつかの実施形態では、ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ135及び後続のディスパッチを有限個の部分145に分割する。ディスパッチ135を、キャッシュ120内に収まるデータを生成する部分145にパーティション分割することによって、ディスパッチパーティション及びインターリービングモジュール140は、キャッシュ120への後続アクセスに必要なデータが後続アクセス時にキャッシュ120内に依然として存在する確率を増加させ、したがって、キャッシュ120におけるヒット率を増加させ、ディスパッチ間のレイテンシを減少させる。
【0036】
いくつかの実施形態において、ディスパッチパーティション及びインターリービングモジュール140は、プロデューサディスパッチの一部からのデータを消費するディスパッチの一部のワークアイテムが実行を開始する前に、プロデューサディスパッチの一部の全てのワークアイテムが実行を完了するのを保証するために、異なるディスパッチからの部分145の間にバリアを挿入する。ディスパッチパーティション及びインターリービングモジュール140は、プロデューサ及びコンシューマディスパッチ135のワークアイテムを実行する計算ユニット115の作業負荷のバランスをとるために、ディスパッチ135の部分145の実行をインターリーブする。
【0037】
図2は、いくつかの実施形態による、連続ディスパッチを部分にパーティション分割し、パーティション間にバリアを挿入して部分の実行をインターリーブするディスパッチパーティション及びインターリービングモジュール140のブロック図200である。図示した例では、ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチパーティション及びインターリービングモジュール140がデータ局所性を有するものとして、且つ、キャッシュ120の容量を超えるデータを生成するものとして識別する3つのディスパッチ、ディスパッチ-1 210、ディスパッチ-2 220、ディスパッチ-3 230を受信する。ディスパッチ-1 210は、アプリケーション155によって挿入されたバリア202によってディスパッチ-2 220から分離される。同様に、ディスパッチ-2 220は、アプリケーション155によって挿入されたバリア204によってディスパッチ-3 230から分離される。バリア202、204は、第2のディスパッチの実行が開始するためには、第1のディスパッチが実行を完了しなければならないことを示す。
【0038】
ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ-1 210、ディスパッチ-2 220、ディスパッチ-3 230のそれぞれを2つの部分に分割する。したがって、ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ-1 210を部分1-0 211及び部分1-1 212に分割する。ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ-2 220を部分2-0 221及び部分2-1 222に分割し、ディスパッチ-3 230を部分3-0 231及び部分3-1 232に分割する。いくつかの実施形態では、各ディスパッチの部分は等しいサイズであり、他の実施形態では、各ディスパッチの部分は不均等なサイズである。
【0039】
ディスパッチパーティション及びインターリービングモジュール140は、部分をインターリーブし、部分間にバリアを挿入して、バリアによって第2の部分から分離された第1の部分が、第2の部分が実行を開始する前に実行を完了することを確実にする。図示された例では、ディスパッチパーティション及びインターリービングモジュール140は、以下のように部分をインターリーブする:実行する第1の部分は、部分1-0 211であり、その後にバリア250が続く。部分1-0 211が実行を完了した後、部分2-0 221が実行される。バリア252は、部分2-0 221を次の部分である部分3-0 231から分離する。したがって、部分2-0 221は、部分3-0 231が実行される前に実行を完了する。部分3-0 231は、部分1-1 212が実行を開始する前に部分3-0 231が実行を完了しなければならないように、バリア254によって次の部分である部分1-1 212から分離される。バリア256は、部分2-1 222が実行される前に部分1-1 212が実行を完了しなければならないように、部分1-1 212を次の部分である部分2-1 222から分離する。最後の部分である部分3-1 232は、バリア258によって部分2-1 222から分離される。したがって、部分2-1 222は、部分3-1 232が実行される前に実行を完了しなければならない。ディスパッチ210、220、230を、キャッシュ120の記憶容量を超えないデータを生成するサイズの部分に分割することによって、ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ210、220、230がキャッシュ120をスラッシングすることを防止する。更に、実行のために部分をインターリーブすることによって、ディスパッチパーティション及びインターリービングモジュール140は、他の計算ユニット115がディスパッチ210、220、230の部分のワークアイテムを実行している間、アイドルとなる計算ユニット115がより少なくなるように、計算ユニット115にわたって作業負荷をバランスさせる。
【0040】
図3は、いくつかの実施形態による、連続ディスパッチのインターリーブされた部分の実行の反復を示す図300である。図示した例では、図2の3つのディスパッチ210、220、230の各々は、4つの部分に分割されている。したがって、ディスパッチ-1 210は、部分1-0 211、部分1-1 212、部分1-2 213、及び、部分1-3 214に分割されている。ディスパッチ-2 220は、部分2-0 221、部分2-1 222、部分2-2 223、及び、部分2-3 224に分割されている。ディスパッチ-3 230は、部分3-0 231、部分3-1 232、部分3-2 233、及び、部分3-3 234に分割されている。ディスパッチ-1 210は、後続のディスパッチによる消費のためのデータを生成するプロデューサディスパッチである。ディスパッチ-2 220は、ディスパッチ-1 210によって生成されたデータを消費し、後続のディスパッチによる消費のためのデータを生成するコンシューマ/プロデューサディスパッチである。ディスパッチ-3 230は、以前のディスパッチ210、220によって生成されたデータを消費するコンシューマディスパッチである。
【0041】
ディスパッチ210、220、230の部分は、反復0 302から開始する6回の反復で実行される。反復0 302において、プロデューサディスパッチ-1 210の部分1-0 211が実行される。いくつかの実施形態では、部分1-0は、プロデューサディスパッチ-1 210の他の部分より大きく、コンシューマ/プロデューサディスパッチ-2 220及びコンシューマディスパッチ-3 230の部分より大きくなるようなサイズにされる。反復1 304では、プロデューサディスパッチ-1 210の部分1-1 212と、コンシューマ/プロデューサディスパッチ-2 220の部分2-0 221とが実行される。部分2-0 221は、部分1-0 211によって生成されたデータを消費するので、部分1-0 211の実行が反復0 302において完了した後に、部分2-0 221が反復1 304において実行される。
【0042】
反復2 306では、プロデューサディスパッチ-1 210の部分1-2 213、コンシューマ/プロデューサディスパッチ-2 220の部分2-1 222、及び、コンシューマディスパッチ-3 230の部分3-0 231が実行される。部分2-1 222は、部分1-1 212によって生成されたデータを消費するので、反復1 304において部分1-1 212の実行が完了した後に、部分2-1 222が反復2 306において実行される。同様に、部分3-0 231は、部分2-0 221によって生成されたデータを消費するので、反復1 304における部分2-0 221の実行後に、部分3-0 231が反復2 306において実行される。
【0043】
反復3 308では、プロデューサディスパッチ-1 210の部分1-3 214、コンシューマ/プロデューサディスパッチ-2 220の部分2-2 223、及び、コンシューマディスパッチ-3 230の部分3-1 232が実行される。部分2-2 223は、部分1-2 213によって生成されたデータを消費するので、部分1-2 213の実行が反復2 306において完了した後に、部分2-2 223が反復3 308において実行される。同様に、部分3-2 232は、部分2-1 222によって生成されたデータを消費するので、反復2 306における部分2-1 222の実行後に、部分3-1 232が反復3 308において実行される。
【0044】
反復4 310では、コンシューマ/プロデューサディスパッチ-2 220の部分2-3 224及びコンシューマディスパッチ-3 230の部分3-2 233が実行される。部分2-3 224は、部分1-3 214によって生成されたデータを消費するので、部分1-3 214の実行が反復3 308において完了した後に、部分2-3 224が反復4 310において実行される。同様に、部分3-2 233は、部分2-2 223によって生成されたデータを消費するので、反復3 308における部分2-2 223の実行後に、部分3-2 233が反復4 310において実行される。
【0045】
反復5 312では、コンシューマディスパッチ-3 230の部分3-3 234が実行される。部分3-3 234は、部分2-3 234によって生成されたデータを消費するので、反復4 310における部分2-3 224の実行後に、部分3-3 234が反復5 312において実行される。複数の部分を並列にインターリーブ及び実行することによって、ディスパッチパーティション及びインターリービングモジュール140は、部分の間にバリア(例えば、バリア250、252、254、256、258)を挿入することによって被る任意の性能ペナルティを緩和する。
【0046】
図4は、いくつかの実施形態による、連続ディスパッチのインターリーブされた部分の相対開始位置を示す図400である。「単純マッピング」と呼ばれる図示された実施形態では、ディスパッチ210、220、230の部分は等しいサイズであり、同じ開始位置を共有する。例えば、図示された実施形態において、部分1-0 211、2-0 221、及び、3-0 231は、同じブロック寸法及び開始位置を使用する。
【0047】
時間T1において、部分1-0 211は、ワークアイテムのグリッドの左上隅の開始位置で実行される。時間T2において、部分1-0 211及び1-1 212が実行される。部分1-1 212は、ワークアイテムのグリッドの上部中央に開始位置を有し、部分1-0 211が水平軸上で終了する場所から開始する。部分1-0 211及び1-1 212は両方ともディスパッチ-1 210の部分であるので、それらの間にバリアがなく、それらは重複する実行を有することができる。時間T3において、部分2-0 221及び1-1 212が実行され、部分2-0 221の開始位置は、ワークアイテムのグリッドの左上隅にある。部分2-0 221は、部分2-0 221が消費するデータを生成する部分1-0 211と同じサイズ及び開始位置を有する。部分2-0 221は、部分1-1 212によって生成されたデータを消費しないので、部分2-0 221及び部分1-1 212は、重複する実行を有することができる。
【0048】
時間T4において、部分2-0 221、1-1 212、1-2 213が実行される。部分1-2 213は、ワークアイテムのグリッドの中央左に開始位置を有し、部分1-0 211が垂直軸上で終了する場所から開始し、ワークアイテムのグリッドの底部で終了する。時間T5において、部分2-0 221、2-1 222、1-2 213が実行される。部分2-1 222は、部分2-1 222が消費するデータを生成する部分1-1 212と同じサイズ及び開始位置を有する。時間T6において、部分3-0 231、2-1 222、1-2 213が実行される。部分3-0 231は、部分3-0 231が消費するデータを生成する部分2-0 221と同じサイズ及び開始位置を有する。
【0049】
時間T7において、部分3-0 231、2-1 222、1-2 213、1-3 214が実行される。部分1-3 214は、ワークアイテムのグリッドの中央に開始位置を有し、部分1-2 213が水平軸上で終了し、部分2-1 222が垂直軸上で終了する場所から開始し、ワークアイテムのグリッドの右下で終了する。時間T8において、部分3-0 231、2-1 222、2-2 223、1-3 214が実行される。部分2-2 223は、部分2-2 223が消費するデータを生成する部分1-2 213と同じサイズ及び開始位置を有する。時間T9において、部分3-0 231、3-1 232、2-2 223、1-3 214が実行される。部分3-1 232は、部分3-1 232が消費するデータを生成する部分2-1 222と同じサイズ及び開始位置を有する。
【0050】
時刻T10において、部分3-1 231、3-1 232、2-2 223、2-3 224が実行される。部分2-3 224は、部分2-3 224が消費するデータを生成する部分1-3 214と同じサイズ及び開始位置を有する。時間T11において、部分3-0 231、3-1 232、3-2 233、2-3 224が実行される。部分3-2 233は、部分3-2 233が消費するデータを生成する部分2-2 223と同じサイズ及び開始位置を有する。時間T12において、部分3-0 231、3-1 232、3-2 233、3-3 234が実行される。部分3-3 234は、部分3-3 234が消費するデータを生成する部分2-3 224と同じサイズ及び開始位置を有する。
【0051】
図5は、いくつかの実施形態による、連続ディスパッチのインターリーブされた部分の相対開始位置を示す図400である。図示された実施形態では、ディスパッチ210、220、230の対応する部分は、全て均等なサイズではなく、常に同じ開始位置を共有するわけではない。図示した例では、ディスパッチ-3 230がコンシューマディスパッチであるので、ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ-3 230を、図4に示す単純なマッピングシナリオと同じ開始位置を有する4つの等しいサイズの部分、部分3-0 231、3-1 232、3-2 233、3-3 234に分割する。ワークアイテムのグリッドの第1の行及び列で開始するディスパッチ-2 220の部分は、ディスパッチ-3 230の対応する部分と比較してより広く且つより高く、ワークアイテムのグリッドの第1の行及び列で開始するディスパッチ-1 210の部分は、ディスパッチ-2 220の対応する部分と比較してより広く且つより高い。
【0052】
いくつかの実施形態では、残りの行及び列について、ディスパッチ-1 210及びディスパッチ-2 220の部分の寸法は、最後の行及び列を除いて、ディスパッチ-3 230の部分と同一である。最後の行及び列について、ディスパッチ-1 210及びディスパッチ-2 220の部分の寸法は、それぞれディスパッチ-1 210及びディスパッチ-2 220の寸法にクランプされる。ディスパッチパーティション及びインターリービングモジュール140は、ディスパッチ-1 210及びディスパッチ-2 220の部分の第1の行及び第1の列の寸法に追加された同じワークアイテム(スレッドグループ)の量を開始位置に追加することによって、ディスパッチ-1 210及びディスパッチ-2 220の残りの部分(すなわち、部分1-1 212、1-2 213、1-3 214、2-1 222、2-2 223、2-3 234)の開始位置を計算する。プロデューサディスパッチの部分をコンシューマディスパッチの対応する部分よりも大きくなるようなサイズにし、部分の開始位置をオフセットすることによって、ディスパッチパーティション及びインターリービングモジュール140は、コンシューマディスパッチのワークアイテムが、プロデューサディスパッチの隣接するワークアイテムによって生成されたデータにアクセスすることを可能にし、したがって、フィルタリング又は平均化等の動作を実施することができる。
【0053】
時間T1において、部分1-0 211は、ワークアイテムのグリッドの左上隅の開始位置で実行される。時間T2において、部分1-0 211及び1-1 212が実行される。部分1-1 212は、ワークアイテムのグリッドの上部中央の右に開始位置を有し、部分1-0 211が水平軸上で終了する場所から開始する。部分1-0 211及び1-1 212は両方ともディスパッチ-1 210の部分であるので、それらの間にバリアがなく、それらは重複する実行を有することができる。時間T3において、部分2-0 221及び1-1 212が実行され、部分2-0 221の開始位置は、ワークアイテムのグリッドの左上隅にある。部分2-0 221は、部分2-0 221が消費するデータを生成する部分1-0 211よりも小さく、部分2-0のワークアイテムが、部分1-0 211の対応するワークアイテムの隣接データに対して演算を実行することを可能にする。部分2-0 221は、部分1-1 212によって生成されたデータを消費しないので、部分2-0 221及び部分1-1 212は、重複する実行を有することができる。
【0054】
時間T4において、部分2-0 221、1-1 212、1-2 213が実行される。部分1-2 213は、ワークアイテムのグリッドの左下に開始位置を有し、部分1-0 211が垂直軸上で終了する場所から開始し、ワークアイテムのグリッドの底部で終了する。時間T5において、部分2-0 221、2-1 222、1-2 213が実行される。部分2-1 222は、部分1-0 211及び1-1 212と部分的に重複する。部分2-1 222は、部分2-1 222が消費するデータを生成する部分1-1 212よりも短く広い。時間T6において、部分3-0 231、2-1 222、1-2 213が実行される。部分3-0 231は、部分3-0 231が消費するデータを生成する部分2-0 221と同じ開始位置を有し、部分2-0 221よりも小さい。
【0055】
時間T7において、部分3-0 231、2-1 222、1-2 213、1-3 214が実行される。部分1-3 214は、ワークアイテムのグリッドの右下隅に開始位置を有し、部分1-2 213が水平軸上で終了し、部分2-1 222が垂直軸上で終了する場所から開始し、ワークアイテムのグリッドの右下で終了する。時間T8において、部分3-0 231、2-1 222、2-2 223、1-3 214が実行される。部分2-2 223は、部分2-2 223が消費するデータを生成する部分1-2 213よりも高く、狭い。時間T9において、部分3-0 231、3-1 232、2-2 223、1-3 214が実行される。部分3-1 232は、部分3-1 232が消費するデータを生成する部分2-1 222よりも広く、短い。
【0056】
時刻T10において、部分3-1 231、3-1 232、2-2 223、2-3 224が実行される。部分2-3 224は、部分2-3 224が消費するデータを生成する部分1-3 214よりも高く、広い。時間T11において、部分3-0 231、3-1 232、3-2 233、2-3 224が実行される。部分3-2 233は、部分3-2 233が消費するデータを生成する部分2-2 223よりも高く、狭い。時間T12において、部分3-0 231、3-1 232、3-2 233、3-3 234が実行される。部分3-3 234は、部分3-3 234が消費するデータを生成する部分2-3 224よりも高く、広い。先に述べたように、部分3-0 231、3-1 232、3-2 233、3-3 234は、それらのソースディスパッチのように等しいサイズであり、ディスパッチ-3 230は、後続のディスパッチのためのデータを生成しないコンシューマディスパッチである。
【0057】
図6は、いくつかの実施形態による、連続ディスパッチを部分に分割し、部分の実行をインターリーブするための方法600を示すフロー図である。いくつかの実施形態では、方法600は、図1に示される処理システム100等の処理システムによって実施される。ブロック602において、ディスパッチパーティション及びインターリービングモジュール140は、コンシューマ/プロデューサ依存性を有する連続ディスパッチのプロデューサディスパッチが、キャッシュ120の記憶容量を超えるデータを生成すると判定する。ディスパッチパーティション及びインターリービングモジュール140は、プロデューサディスパッチ(例えば、ディスパッチ-1 210)を部分(例えば、部分1-0 211、1-1 212、1-2 213、1-3 214)に分割する。いくつかの実施形態では、部分は等しいサイズを有し、他の実施形態では、部分は不均等なサイズであり、第1の部分(例えば、部分1-0 211)は、残りの部分よりも大きい。ブロック604において、ディスパッチパーティション及びインターリービングモジュール140は、コンシューマ/プロデューサディスパッチ(例えば、ディスパッチ-2 220)を部分(例えば、部分2-0 221、2-1 222、2-2 223、2-3 224)に分割する。いくつかの実施形態では、部分は等しいサイズを有し、他の実施形態では、部分は不均等なサイズであり、第1の部分(例えば、部分2-0 221)は、部分2-0 221によって消費されるデータを生成する対応する部分1-0 211よりも小さい。
【0058】
ブロック606において、ディスパッチパーティション及びインターリービングモジュール140は、コンシューマディスパッチ(例えば、ディスパッチ-3 230)を部分(例えば、部分3-0 231、3-1 232、3-2 233、3-3 234)に分割する。いくつかの実施形態では、部分は等しいサイズを有し、他の実施形態では、部分は不均等なサイズであり、第2の部分(例えば、部分3-0 231)は、部分3-0 231によって消費されるデータを生成する対応する部分1-0 221よりも小さい。ブロック608において、ディスパッチパーティション及びインターリービングモジュール140は、各ディスパッチの各部分の開始位置を決定する。部分が等しいサイズである実施形態では、各ディスパッチの各々対応する部分は、同じ開始位置を有する(すなわち、部分1-0 211、2-0 221及び3-0 231は同じ開始位置を有し、部分1-1 212、2-1 222及び3-1 232は同じ開始位置を有し、部分1-2 213、2-2 223及び3-2 233は同じ開始位置を有し、部分1-3 214、2-3 224及び3-3 234は同じ開始位置を有する)。部分が不均等なサイズである実施形態では、各ディスパッチの最初の部分以外の各コンシューマ/プロデューサ又はコンシューマディスパッチの各々対応する部分は、データを消費するプロデューサディスパッチの開始位置からオフセットされた開始位置を有する。
【0059】
ブロック610において、ディスパッチパーティション及びインターリービングモジュール140は、プロデューサ、プロデューサ/コンシューマ、及び、コンシューマディスパッチの部分の実行をインターリーブする。例えば、ディスパッチパーティション及びインターリービングモジュール140は、計算ユニット115のうち1つ以上における実行のために、ディスパッチ-1 210の第1の部分(部分1-0 211)をスケジュールする。部分1-0 211が実行を完了したことに応じて、ディスパッチパーティション及びインターリービングモジュール140は、計算ユニット115のうち1つ以上における実行のために、ディスパッチ-2 220の第1の部分(部分2-0 221)をスケジュールする。部分2-0 221が実行を完了したことに応じて、ディスパッチパーティション及びインターリービングモジュール140は、計算ユニット115のうち1つ以上における実行のために、ディスパッチ-3 230の第1の部分(部分3-0 231をスケジュールする。部分3-0 231が実行を完了したことに応じて、ディスパッチパーティション及びインターリービングモジュール140は、計算ユニット115のうち1つ以上における実行のために、ディスパッチ-1 210の第2の部分(部分1-1 212)をスケジュールする。ディスパッチパーティション及びインターリービングモジュール140は、最後のコンシューマディスパッチが実行を完了するまで、ディスパッチの部分のスケジューリングを継続し、各部分のディスパッチを交互に行う。
【0060】
いくつかの実施形態では、上記の装置及び技術は、図1図5を参照して上述した処理システム等の1つ以上の集積回路(integrated circuit、IC)デバイス(集積回路パッケージ又はマイクロチップとも呼称される)を含むシステムに実装されている。電子設計自動化(electronic design automation、EDA)及びコンピュータ支援設計(computer aided design、CAD)ソフトウェアツールは、これらのICデバイスの設計及び製造に使用することができる。これらの設計ツールは、典型的には、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計するか又は適応させるためのプロセスの少なくとも一部を実行するために、1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作するための、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含み得る。設計ツール又は製造ツールを表すソフトウェア命令は、典型的には、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶され、そこからアクセスされる。
【0061】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0062】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装される。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶されるか、別の方法で明確に具体化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、命令及び特定のデータを含んでもよく、当該命令及び特定のデータは、1つ以上のプロセッサによって実行されると、上述した技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する。非一時的なコンピュータ可読記憶媒体は、例えば、磁気又は光ディスク記憶デバイス、フラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス(単数又は複数)等を含み得る。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈され若しくは別の方法で実行可能な他の命令形式で実装可能である。
【0063】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0064】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
図1
図2
図3
図4
図5
図6
【手続補正書】
【提出日】2024-08-15
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
方法であって、
データをキャッシュに書き込むワークアイテムの第1のディスパッチの第1の部分を実行することであって、前記第1のディスパッチは、第1の複数の部分を含み、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれるデータの量は、前記キャッシュの記憶容量を超えない、ことと、
前記ワークアイテムの前記第1のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第1の部分を実行することであって、前記第2のディスパッチは、第2の複数の部分を含む、ことと、を含む、
方法。
【請求項2】
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第2のディスパッチの前記第1の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第3のディスパッチの第1の部分を実行することであって、前記第3のディスパッチは、第3の複数の部分を含む、ことを含む、
請求項1の方法。
【請求項3】
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、データを前記キャッシュに書き込む前記ワークアイテムの前記第1のディスパッチの第2の部分を実行することを含む、
請求項1の方法。
【請求項4】
前記ワークアイテムの前記第1のディスパッチの前記第2の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第1のディスパッチの前記第2の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取る前記ワークアイテムの前記第2のディスパッチの第2の部分を実行することを含む、
請求項3の方法。
【請求項5】
前記ワークアイテムの前記第1のディスパッチの前記第1の部分は、前記ワークアイテムの前記第2のディスパッチの前記第1の部分よりも大きい、
請求項1の方法。
【請求項6】
前記ワークアイテムの前記第1のディスパッチを前記第1の複数の部分に分割することと、
前記ワークアイテムの前記第2のディスパッチを前記第2の複数の部分に分割することと、を含む、
請求項1の方法。
【請求項7】
前記第1の複数の部分及び前記第2の複数の部分は、不均等なサイズである、
請求項1の方法。
【請求項8】
デバイスであって、
キャッシュと、
プロセッサと、を備え、
前記プロセッサは、
データを前記キャッシュに書き込むワークアイテムの第1のディスパッチの第1の部分を実行することであって、前記第1のディスパッチは、第1の複数の部分を含み、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれるデータの量は、前記キャッシュの記憶容量を超えない、ことと、
前記ワークアイテムの前記第1のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分によって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第2のディスパッチの第1の部分を実行することであって、前記第2のディスパッチは、第2の複数の部分を含む、ことと、
を行うように構成されている、
デバイス。
【請求項9】
前記プロセッサは、
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第2のディスパッチの前記第1の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取るワークアイテムの第3のディスパッチの第1の部分を実行することであって、前記第3のディスパッチは、第3の複数の部分を含む、ことを行うように構成されている、
請求項のデバイス。
【請求項10】
前記プロセッサは、
前記ワークアイテムの前記第2のディスパッチの前記第1の部分が実行を完了したことに応じて、データを前記キャッシュに書き込む前記ワークアイテムの前記第1のディスパッチの第2の部分を実行することを行うように構成されている、
請求項のデバイス。
【請求項11】
前記プロセッサは、
前記ワークアイテムの前記第1のディスパッチの前記第2の部分が実行を完了したことに応じて、前記第1のディスパッチの前記第1の部分及び前記第1のディスパッチの前記第2の部分のうち少なくとも1つによって前記キャッシュに書き込まれたデータを読み取る前記ワークアイテムの前記第2のディスパッチの第2の部分を実行することを行うように構成されている、
請求項10のデバイス。
【請求項12】
前記ワークアイテムの前記第1のディスパッチの前記第1の部分は、前記ワークアイテムの前記第2のディスパッチの前記第1の部分よりも大きい、
請求項のデバイス。
【請求項13】
前記プロセッサは、
前記ワークアイテムの前記第1のディスパッチを前記第1の複数の部分に分割するように構成されている、
請求項のデバイス。
【請求項14】
前記プロセッサは、
前記ワークアイテムの前記第2のディスパッチを前記第2の複数の部分に分割するように構成されている、
請求項8のデバイス。
【請求項15】
前記第1の複数の部分及び前記第2の複数の部分は、不均等なサイズである、
請求項のデバイス。
【国際調査報告】