(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-01-27
(45)【発行日】2025-02-04
(54)【発明の名称】ニアメモリデータ削減
(51)【国際特許分類】
G06F 12/00 20060101AFI20250128BHJP
G06F 12/0804 20160101ALI20250128BHJP
【FI】
G06F12/00 560F
G06F12/0804 100
(21)【出願番号】P 2022523534
(86)(22)【出願日】2020-07-14
(86)【国際出願番号】 US2020041910
(87)【国際公開番号】W WO2021080656
(87)【国際公開日】2021-04-29
【審査請求日】2023-07-11
(32)【優先日】2019-10-21
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ヌワン ジャヤセーナ
(72)【発明者】
【氏名】シャイジーン アガ
【審査官】田名網 忠雄
(56)【参考文献】
【文献】米国特許出願公開第2016/0098200(US,A1)
【文献】特開平11-015773(JP,A)
【文献】特開2007-011878(JP,A)
【文献】特開2019-061631(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 12/08 - 12/128
(57)【特許請求の範囲】
【請求項1】
ニアメモリ削減ユニットであって、
削減アドレス範囲を格納するように構成された削減アドレスレジスタと、
データ削減結果を格納するように構成された結果レジスタと、
データ削減ロジックと、を備え、
前記データ削減ロジックは、
オフダイメモリにデータを格納するストア動作の宛先アドレスが、前記削減アドレスレジスタに格納された削減アドレス範囲内にあると判別したことに応じて、
前記ストア動作のデータ値を削減操作によって処理して、更新されたデータ削減結果を生成することと、
前記更新されたデータ削減結果を前記結果レジスタに格納することと、
を行うように構成されている、
ニアメモリ削減ユニット。
【請求項2】
前記データ削減ロジックは、前記削減アドレス範囲を、前記ニアメモリ削減ユニットの前記削減アドレス範囲をプログラムする操作によって指定された値に初期化するように構成されている、
請求項1のニアメモリ削減ユニット。
【請求項3】
前記削減アドレス範囲は、連続するメモリアドレスの範囲である、
請求項1のニアメモリ削減ユニット。
【請求項4】
前記削減アドレス範囲は、メモリアドレスのストライド範囲である、
請求項1のニアメモリ削減ユニット。
【請求項5】
前記結果レジスタに格納された前記データ削減結果は、前記削減アドレスレジスタに格納された前記削減アドレス範囲の変化又は初期化操作に応じて、指定された値に初期化される、
請求項1のニアメモリ削減ユニット。
【請求項6】
前記結果レジスタの更新の現在のカウントを格納するように構成されたカウンタレジスタをさらに備え、前記データ削減ロジックは、データを前記オフダイメモリに格納する前記ストア動作の前記宛先アドレスが、前記削減アドレスレジスタに格納された前記削減アドレス範囲内にあると判別したことに応じて、前記結果レジスタに格納された前記更新の現在のカウントをインクリメントするように構成されている、
請求項1のニアメモリ削減ユニット。
【請求項7】
前記データ削減ロジックは、
データを
前記オフダイメモリに格納する前記ストア動作の前記データ値を処理して、処理済みのデータ値を生成することと、
前記処理済みのデータ値を前記削減操作によって処理して、更新された削減結果を生成することと、
を行うように構成されている、
請求項1のニアメモリ削減ユニット。
【請求項8】
前記データ値を処理することは、前記データ値を関数で処理すること、又は、前記データ値に定数を適用すること、のうち1つ以上を含む、
請求項7のニアメモリ削減ユニット。
【請求項9】
前記オフダイメモリはメインメモリである、
請求項1のニアメモリ削減ユニット。
【請求項10】
前記オフダイメモリにデータを格納する前記ストア動作によって指定された前記データがキャッシュに格納され、
前記ストア動作は、前記ストア動作によって指定された前記データを、前記キャッシュから
前記オフダイメモリに格納するために実行される、
請求項1のニアメモリ削減ユニット。
【請求項11】
前記ストア動作は第1のストア動作であり、前記データ削減ロジックは、前記第1のストア動作の前記宛先アドレスと同じ宛先アドレスを有する第2のストア動作を受信したことに応じて、エラービットを設定するように構成されている、
請求項1のニアメモリ削減ユニット。
【請求項12】
前記ニアメモリ削減ユニットは、メモリコントローラ、メモリモジュールに割り当てられるスタンドアロンエンティティ、又は、スタックメモリパッケージのダイのうち1つ以上に実装されている、
請求項1のニアメモリ削減ユニット。
【請求項13】
前記削減操作は、前記ストア動作の前記データ値を、前記結果レジスタに格納された累積データ削減結果に加算する加算演算である、
請求項1のニアメモリ削減ユニット。
【発明の詳細な説明】
【背景技術】
【0001】
本項に記載されるアプローチは、追求され得るアプローチであるが、必ずしも以前に着想又は追求されたアプローチではない。したがって、特に断りのない限り、本項に記載される何れのアプローチが、本項に含まれているという理由だけで、従来技術と見なされると想定されるべきではない。さらに、本項に記載される何れのアプローチも、本項に含まれているという理由だけで、よく理解され、日常的で、又は、従来通りであると見なされるべきではない。
【0002】
機械学習等のある種のコンピューティングプロセスは、大きなデータセットが生成されるため、これを削減する必要がある。データ削減自体は、メモリから読み取られたデータのバイトに対して少ない演算しか行わないという演算量対バイト率の低い加算演算を含む。しかしながら、キャッシュ等の利用可能なオンチップ又はオンダイメモリよりも大きいデータセットは、メインメモリに格納する必要があり、メインメモリからオンチップ又はオンダイメモリにデータを取り出してデータ削減を実行するにはコストがかかる。データ移動コストは、データ削減の計算コストが低い割に法外に高く、データ移動によりキャッシュ汚染が生じる可能性がある。同じ問題は、並列コンピューティングのアプローチにも当てはまる。
【0003】
この問題に対する技術的な解決策として、データ削減操作を、削減されるデータを生成する操作にピギーバック(piggybacking)させることを伴う。これにより、削減されるデータが生成される際にデータ削減を実行することが可能になるが、不利な点がある。先ず、行列の乗算及び畳み込み等の汎用的な計算は、多くの場合、様々な状況で再利用できるように実装されており、CPU/GPUキャッシュ、GPUレジスタ、LDS/共有メモリ等の利用可能なオンチップレジスタを最適に利用し得るため、データ削減操作を含むことは、性能に悪影響を与え、さらに亜種の生成及び維持にもつながり、その再利用性が阻害される可能性がある。さらに、データセットを生成する操作は、同じ出力先に対して複数の書き込みを行う等の特殊な技術を使用することがあり、1つの書き込みでデータ削減操作を含めることが不可能な場合がある。これは、複数の書き込みからの出力を同じ記憶位置にマージするためにL2アトミック(L2 atomics)を利用するGPUで一般的に行われる。したがって、計算操作によって生成される大量のデータを削減するためのより優れたアプローチが必要とされている。
【0004】
実施形態は、添付図面の図に限定ではなく例として示されており、図において、同様の符号は同様の要素を指す。
【図面の簡単な説明】
【0005】
【
図1】本明細書に記載されるニアメモリデータ削減を実施するためのニアメモリ削減(NMR)ユニットを示すブロック図である。
【
図2】NMRユニットを使用してデータを削減するためのアプローチを示すフロー図である。
【
図3A】2つのメモリモジュールという観点からデータを削減するためのアプローチの例示的な実装を示す図である。
【
図3B】2つのメモリモジュールという観点からデータを削減するためのアプローチの例示的な実装を示す図である。
【
図3C】2つのメモリモジュールという観点からデータを削減するためのアプローチの例示的な実装を示す図である。
【
図3D】2つのメモリモジュールという観点からデータを削減するためのアプローチの例示的な実装を示す図である。
【
図3E】2つのメモリモジュールという観点からデータを削減するためのアプローチの例示的な実装を示す図である。
【
図4】各メモリストア動作後にツリーベースのペアワイズ(pair-wise)データ削減を使用するデータ削減を実行するための例示的なアプローチを示すブロック図である。
【
図5】「レーン内(in-lane)」データ削減を実行するためのアプローチを示すブロック図である。
【
図6】「レーン内」データ削減を実行するためのアプローチを示すフロー図である。
【発明を実施するための形態】
【0006】
以下の説明では、説明のために、実施形態の十分な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、当業者には、実施形態が、これらの具体的な詳細がなくても実施されることが明らかであろう。他の例では、実施形態を不必要に不明瞭にすることを回避するために、周知の構造及びデバイスがブロック図の形態で示されている。
I.概要
II.アーキテクチャ
III.ニアメモリデータ削減
A.概要
B.スレッドのための共有リソース割り当ての変更
C.有用性メトリック
D.リソース割り当ての揺らぎ(oscillation)への対処
IV.操作例
V.レーン内データ削減
【0007】
I.概要
オフチップ又はオフダイメモリへのストア動作(格納操作)中にニアメモリデータ削減を実施するためのアプローチが提供される。ニアメモリ削減(NMR)ユニットは、指定されたアドレス範囲への書き込み動作中にニアメモリデータ削減を提供する。NMRユニットは、削減されるアドレスの範囲で構成されており、ストア動作がアドレスの範囲内のアドレスを指定すると、NRMユニットは、ストア動作によって指定されたデータ値を累積削減結果に加算することによって、データ削減を実行する。一実施形態では、NRMユニットは、データ削減がいつ完了したのかを決定するために使用される累積削減結果に対する更新回数のカウントを保持する。
【0008】
このアプローチは、データ削減を実行するためにオフチップメモリからオンチップメモリにデータを読み戻すコストを回避し、マイクロプロセッサ、スタックメモリのロジックダイの演算ユニット、又は、メモリコントローラが容易にアクセスできるレジスタに累積削減結果を維持する。さらに、アプローチは、キャッシュの汚染を低減し、データが準備完了になると、削減されるデータを生成する演算処理と同時にデータ削減を実行することを可能にする。
【0009】
II.アーキテクチャ
図1は、本明細書で説明する、ニアメモリ削減を実施するためのニアメモリ削減(NMR)ユニット100を示すブロック図である。NMRユニット100は、削減アドレスレジスタ110と、結果レジスタ120と、オプションのカウンタレジスタ130と、算術論理ユニット(ALU)140と、データ削減ロジック150と、を含む。実施形態は、図に示され、ALU140を含むNMR100という観点から本明細書に記載されているが、いくつかの実施形態では、NMR100は、任意のタイプのデータ削減操作(例えば、加算、最小値若しくは最大値の決定、AND、OR、XOR等の算術演算及び/又は論理演算)を実行するためのデジタル回路を含む。NMRユニット100は、特定の実施形態に応じて変化する、より少ない又は追加の要素を含み、実施形態は、任意の特定の要素に限定されない。実施形態によれば、本明細書に記載され、単一のレジスタとして図に示される様々なレジスタは、特定の実施形態に応じて、複数のレジスタによって実装される。
【0010】
削減アドレスレジスタ110は、データ削減が実行されるアドレス範囲を格納する。以下により詳細に説明するように、格納されたアドレス範囲は、ストア動作が削減されるかどうかを決定するためにデータ削減ロジック150によって使用される物理アドレス又は論理アドレスである。結果レジスタ120は、累積データ削減結果を格納する。結果レジスタ120は、初期化コマンドに応じて、例えばゼロ等の指定された値に初期化される。或いは、結果レジスタ120は、削減アドレスレジスタ110に新たなアドレス範囲が格納されることに応じて、指定された値に初期化される。
【0011】
カウンタレジスタ130は、結果レジスタ120が最後に初期化されてからの結果レジスタ120の更新の現在のカウントを格納する。更新の現在のカウントは、例えば、データ削減がいつ完了したのかを決定するためにメモリコントローラによって使用される。加算器140は、単一の加算器又は複数の加算器として実装され、結果レジスタ120に格納された累積データ削減結果にストア動作のデータ値を加算する。
【0012】
データ削減ロジック150は、NMRユニット100によって実行されるデータ削減を管理する。これは、削減されるストア動作を特定すること、データ削減を実行すること、及び、カウンタレジスタ130内の更新の現在のカウントをオプションでインクリメント(増分)することを含む。削減されるストア動作は、削減アドレスレジスタ110に維持されるアドレス範囲内のアドレスを指定する。ストア動作を削減するために、NMRユニット100は、ストア動作によって指定されたデータ値を、結果レジスタ120に格納された累積データ削減結果に加算させる。また、データ削減ロジック150は、カウンタレジスタ130に格納されている更新の現在のカウントをオプションでインクリメントする。データ削減ロジック150は、コンピュータハードウェア、コンピュータソフトウェア、又は、コンピュータハードウェアとコンピュータソフトウェアとの任意の組み合わせによって実装される。
【0013】
一実施形態によれば、プリミティブ(つまり、プリミティブ命令又は低レベル命令)のセットは、プロセスがNMRユニット100の機能を呼び出すことを可能にするために提供される。例示的なプリミティブは以下を含むが、これに限定されない。
program_reduction_address_range(address_begin,address_end)
read_reduction_result()
【0014】
program_reduction_address_range(address_begin,address_end)プリミティブは、データ削減が実行されるアドレス範囲で削減アドレスレジスタ110をプログラムすることによって、データ削減のためにNMRユニット100を準備する。一実施形態によれば、アドレス範囲は、開始アドレス及びlength_countによって識別され、終了アドレスは、address_begin+length_countとして計算される。アドレス範囲は、連続するアドレスに限定されず、一実施形態によれば、program_reduction_address_rangeプリミティブは、削減されるアドレス間のギャップを指定するストライド引数(stride argument)をサポートする。或いは、program_reduction_address_rangeプリミティブは、複数の連続しない、非ストライドのアドレス範囲に亘るデータ削減を可能にするために、複数のアドレス範囲引数をサポートする。一実施形態によれば、program_reduction_address_rangeプリミティブにより、結果レジスタ120内の累積データ削減結果及び/又はカウンタレジスタ130の現在のカウントが、ゼロ等の指定された値に初期化される。指定された値は、program_reduction_address_rangeプリミティブの引数として含まれるか、データ削減ロジック150内で別に構成される。或いは、initialize_nmr(value)等の別のプリミティブが、結果レジスタ120及び/又はカウンタレジスタ130を初期化するために提供され、このvalue引数は初期化値である。read_reduction_result()プリミティブにより、累積データ削減結果が結果レジスタ120から読み取られる。
【0015】
実施形態は、アドレス範囲及びNMRユニット100のレジスタに格納された累積データ削減結果という観点から図に示され、本明細書に記載されているが、実施形態は、アドレス範囲及び累積データ削減結果が、通常のロード動作及びストア動作を使用してアクセス可能な記憶位置にマッピングされることを含む。
【0016】
一実施形態によれば、NMRユニット100は、対応するメモリモジュールに割り当てられるスタンドアロンエンティティとして実装される。或いは、NMRユニット100に関してここで説明する様々な要素及び機能は、メモリコントローラ、又は、ハイブリッドメモリキューブ(HMC)パッケージ若しくは高帯域幅メモリ(HBM)パッケージ等のスタックメモリパッケージのダイに実装される。一実施形態によれば、NMRユニット100は、3Dスタックメモリ若しくは従来のDRAMのメモリ層のメモリアレイ/バンク近くに、又は、メモリコントローラ若しくは最後のレベルのキャッシュの近く若しくはその内部に実装される。任意の数のNMRユニット100が、同時ニアメモリ削減を可能にするために実装される。NMRユニット100は、例えば、不揮発性デュアルインラインメモリモジュール(NVDIMM)及びNVDIMM-P、SRAMスクラッチパッドメモリ等を含む、ニアメモリコンピューティングに対応可能な任意のタイプのメモリと共に使用される。
【0017】
III.ニアメモリデータ削減
図2は、NRMユニット100を使用してデータを削減するためのアプローチを示すフロー
図200である。この例では、データ削減が加算演算を使用して実行されるが、実施形態はこの例に限定されず、実施形態は、他のタイプのデータ削減操作を使用することを含む。ステップ202では、初期化が実行され、特定の実装に応じて変化するいくつかの異なるタスクを含む。一実施形態によれば、NMRユニット100、より具体的には、結果レジスタ120及び/又はカウンタレジスタ130は、ゼロ等の指定された値に初期化される。他の実施形態では、ゼロ以外の値を使用する。一実施形態によれば、NMRユニット100の初期化は、初期化プリミティブ又は本明細書に上述したように、削減されるアドレス範囲を指定するprogram_reduction_address_rangeによって呼び出される。削減されるアドレス範囲は、メモリモジュールによってサポートされているアドレス範囲全体、又は代替的に、メモリモジュールによってサポートされているアドレス範囲のサブセットである。一実施形態によれば、初期化は、例えば削減されるデータの符号付き/符号なし整数、単精度/倍精度浮動小数点等のように、ビット幅及びデータタイプ等の追加の制御情報を初期化することを含む。これにより、NMRユニット100は、受信したストア動作の情報を正しく解釈することができる。
【0018】
初期化が完了した後、次にステップ204では、少なくともアドレス及び値を指定するストア動作(格納操作)が受信され、そのアドレスへのメモリ書き込みが実行される。ストア動作は、特定の実施形態に応じて、他の情報を指定する。一実施形態によれば、メモリ書き込みは、ニアメモリ削減が実行されるメモリにキャッシュをバイパス又はフロースルーする方式で発行される。例えば、一実施形態では、ストア動作は、引数を含むか、キャッシュをバイパスするように特別に設計される。他の実施形態では、メモリに書き込まれる値は、キャッシュラインの何れの部分が書き込まれたかを示す追加のメタデータと共にキャッシュに取り込まれるが、削減される値は、NMRユニット100がデータ削減においてデータ値を含むことを確実にするために、キャッシュからオフダイメモリにフラッシュされる。メタデータが追跡され、キャッシュラインの何れのサブセット(複数可)が修正されたかを示す削減エンジンに通信され、データ削減に組み込まれる必要がある。この情報は、部分的な書き込みをサポートするアーキテクチャ(例えば、エラー訂正コード(ECC)のない特定のグラフィックスプロセッシングユニット(GPU)等)において、バイトイネーブルビットの形態で利用できる。ストア動作は、NMRユニット100によって、例えばメモリコントローラから受信される。したがって、本明細書に記載されるアプローチは、キャッシュを使用するストア動作と、キャッシュをバイパスしてオフダイメモリに直接データを格納するストア動作と、に適用できる。
【0019】
ステップ206では、ストア動作が削減アドレス範囲内にあるかどうかの判別が行われる。一実施形態によれば、ストア動作によって指定されたアドレスは、削減アドレスレジスタ110に格納されたアドレス範囲と比較される。例えば、ストア動作によって指定されたアドレスのうち、削減アドレスレジスタ110内の下位アドレス以上であり、削減アドレスレジスタ110内の上位アドレス以下であるアドレスは、削減アドレス範囲内にある。
【0020】
ステップ208において、ストア動作が削減アドレス範囲内にあると判別された場合、ステップ210において、ストア動作によって指定されたデータ値が、累積削減結果に加算される。例えば、データ削減ロジック150は、加算器140を介して、ストア動作で指定されたデータ値を、結果レジスタ120に格納された累積データ削減結果に加算させる。或いは、ストア動作で指定されたデータ値は、関数によって処理されるか、例えば定数によってスケーリングされて、結果レジスタ120内の累積データ削減結果に加算される処理済みデータ値を生成する。
【0021】
カウンタレジスタ130に格納された現在のカウントは、オプションでインクリメントされる。例えば、整数値の形態の現在のカウントは、データ削減が実行される毎に、つまり、ストア動作が削減アドレス範囲内のアドレスを指定した場合に、1つずつインクリメントされる。一実施形態によれば、カウンタレジスタ130内の現在のカウントは、例えば、指定された反復回数の後に、データ削減を停止するために使用される。例えば、アルゴリズムは、現在のカウントを使用して、データ削減を、指定されたアドレス範囲で指定された反復回数に制限し、計算リソースの消費を低減することによって、近似的なデータ削減を提供する。
【0022】
プロセスは、ステップ212の後で、又は、ステップ208でストア動作が削減アドレス範囲内にないと判別したことに応じて、ステップ214で完了する。
【0023】
上述したプロセスは、データ削減が完了するまで任意の回数繰り返される。データ削減の完了は、特定の実施形態に応じて変わる異なる方法で決定される。例えば、データ削減ロジック150は、指定された反復回数だけデータ削減を実行する。別の例として、program_reduction_address_rangeプリミティブは、実行されるデータ削減の反復回数を指定する引数を含む。これにより、アプリケーションプログラムは、実行されるデータ削減の特定の数を指定することができる。さらなる例として、メモリコントローラ又は処理ユニットは、対象のメモリモジュールのカウンタレジスタ130に格納されている現在のカウントを読み取り、指定された数のデータ削減が完了するとデータ削減を停止する。例えば、メモリコントローラは、複数のNRM100のカウンタレジスタ130から現在のカウントを取り出し、次に、現在のカウントの全てが指定された数を満たすと、データ削減が完了したことをマイクロプロセッサに通知する。次に、マイクロプロセッサは、各NMRユニット100の結果レジスタ120から累積削減結果を読み取り、これらの値を最終削減結果に減少させる。或いは、最終的な削減結果は、スタックメモリのロジックダイ内又はメモリコントローラの近くの算術ユニットによって生成される。
【0024】
カウンタレジスタ130に格納されている現在のカウントを読み取る代わりに、メモリコントローラは、削減されるアドレス範囲を知っているので、ストア動作の数を追跡して、いつデータ削減が完了したのかを決定する。一実施形態によれば、データ削減の完了により、以下により詳細に説明するように、ツリー削減がトリガされる。削減されるデータがキャッシュされる実施形態では、ニアメモリ削減の完了は、キャッシュ内のデータがデータ削減結果に含まれていることを確実にするために、キャッシュされたデータのオフチップメモリへのフラッシュをトリガすることを含む。
【0025】
データ削減サイクルが完了したと見なされる前に、NMRユニット100が、以前のストア動作からの値を既に含むアドレスを指定するストア動作を受信する状況が発生する場合がある。一実施形態によれば、NMRユニット100は、同じアドレスへの複数の書き込みを検出し、例えば、メモリコントローラによってポーリングされ、マイクロプロセッサに提供され得るエラービットを設定する等して、エラーをフラグ付けする。或いは、新しい値は、結果レジスタ120に格納された累積データ削減結果に加算され、これは、エラー耐性がある又は近似アルゴリズムに基づく計算には十分である。
【0026】
IV.操作例
図3A~
図3Eは、図中でメモリモジュール-0及びメモリモジュール-1として識別される2つのメモリモジュールという観点から、データを削減するためのアプローチの例示的な実施形態を示している。
図3A~
図3Eは、ステップの時系列的なシーケンスを示している。この例では、2つのメモリモジュールは、インタリーブされたアドレス、つまり、第1のメモリモジュールのアドレス0及び2と、第2のメモリモジュールのアドレス1及び3とを有し、これは、メモリモジュールレベルの並列処理を提供するために一般的に行われる。メモリモジュールの各々は、特定の実施形態に応じて、任意の数の他のアドレスを有する。2つのメモリモジュールの各々は、対応するNMRユニット100を有する。
【0027】
図3Aで開始し、2つのメモリモジュールが初期化され、これは、各メモリモジュールの削減値をゼロに設定することと、削減されるアドレス範囲(この例では、アドレス0~3)を指定することと、を含む。本明細書で上述したように、program_reduction_address_rangeプリミティブは、削減されるアドレス範囲を指定し、結果レジスタ120及びカウンタレジスタ130を初期化するために使用される。或いは、別の初期化コマンドが、結果レジスタ120及びカウンタレジスタ130を初期化するために使用される。削減されるアドレス範囲は、削減アドレスレジスタ110に格納される。
【0028】
図3Bでは、値10がアドレス0に格納されることを指定する第1のストア動作が受信される。第1のメモリモジュールを管理するメモリコントローラは、値10をメモリモジュール-0のアドレス位置0に格納させる。第1のメモリモジュールのNMRユニット100のデータ削減ロジック150は、ストア動作で指定されたアドレスが、削減アドレスレジスタ110に格納された削減アドレス範囲内にあるかどうかを判別する。ストア動作で指定されたアドレス0が、削減アドレスレジスタ110の削減アドレス範囲内にあるので、データ削減ロジック150は、ストア動作で指定された値10を、加算器140を介して、結果レジスタ120に格納された累積削減結果に加算させる。
図3Bにおいて、これは、第1のメモリモジュール、つまりメモリモジュール-0の削減された値である、削減値-0が10に更新されることによって示されている。第1のメモリモジュールのNMRユニット100のデータ削減ロジック150は、カウンタレジスタ130に格納されている現在のカウントをインクリメントする。第2のメモリモジュールであるメモリモジュール-1については、アドレス0を処理しないので、変更がない。
【0029】
ストア動作によって指定されたアドレスが、削減アドレスレジスタ110に格納された削減アドレス範囲外である場合、ストア動作によって指定された値は、第1のメモリモジュールに格納されるが、その値は、結果レジスタ120に格納された累積削減結果に加算されないであろう。例えば、ストア動作によって、値7がアドレス50に格納されることが指定されたと仮定する。第1のメモリモジュールがアドレス50で構成されていたと仮定すると、値7は、アドレス50に格納されが、ストア動作で指定されたアドレス50は、削減アドレスレジスタ110に指定された削減アドレス範囲内にないため、結果レジスタ120に格納された累積削減結果に加算されないであろう。
【0030】
図3Cでは、値99がアドレス1に格納されることを指定する第2のストア動作が受信される。第2のメモリモジュールを管理するメモリコントローラは、値99をアドレス位置1に格納させる。第2のメモリモジュールのNMRユニット100のデータ削減ロジック150は、ストア動作で指定されたアドレスが、削減アドレスレジスタ110に格納された削減アドレス範囲内にあるかどうかを判別する。ストア動作で指定されたアドレス1は、削減アドレスレジスタ110に格納された削減アドレス範囲0~3内にあるので、データ削減ロジック150は、ストア動作で指定された値99を、加算器140を介して、結果レジスタ120に格納された累積削減結果に加算させる。
図3Cでは、これは、第2のメモリモジュール、つまりメモリモジュール-1の削減された値である削減値-1が99に更新されることによって示されている。第2のメモリモジュールのNMRユニット100のデータ削減ロジック150は、カウンタレジスタ130に格納されている現在のカウントをインクリメントする。第1のメモリモジュールであるメモリモジュール-0については、アドレス1を処理しないので、変更がない。
【0031】
例を続けると、
図3Dにおいて、値44がアドレス2に格納されることを指定する第3のストア動作が受信される。第1のメモリモジュールを管理するメモリコントローラは、値44をアドレス位置2に格納させる。第1のメモリモジュールのNMRユニット100のデータ削減ロジック150は、ストア動作で指定されたアドレスが、削減アドレスレジスタ110に格納された削減アドレス範囲内にあるかどうかを判別する。ストア動作で指定されたアドレス2は、削減アドレスレジスタ110に格納された削減アドレス範囲0~3内にあるので、データ削減ロジック150は、ストア動作で指定された値44を、加算器140を介して、結果レジスタ120に格納された累積削減結果に加算させる。
図3Dにおいて、これは、削減値-0が、以前の値10に新しい値44を加えた合計である54に更新されることによって示されている。第1のメモリモジュールのNMRユニット100のデータ削減ロジック150は、カウンタレジスタ130に格納されている現在のカウントをインクリメントする。第2のメモリモジュールであるメモリモジュール-1については、アドレス2を処理しないので、変更がない。
【0032】
図3Eに示す最終操作では、値22がアドレス3に格納されることを指定する第4のストア動作が受信される。第2のメモリモジュールを管理するメモリコントローラは、値22をアドレス位置3に格納させる。第2のメモリモジュールのNMRユニット100のデータ削減ロジック150は、ストア動作で指定されたアドレスが、削減アドレスレジスタ110に格納された削減アドレス範囲内にあるかどうかを判別する。ストア動作で指定されたアドレス3は、削減アドレスレジスタ110に格納された削減アドレス範囲0~3内にあるので、データ削減ロジック150は、ストア動作で指定された値22を、加算器140を介して、結果レジスタ120に格納された累積削減結果に加算させる。
図3Eにおいて、これは、削減値-1が、以前の値99に新しい値22を加えた合計である121に更新されることによって示されている。第2のメモリモジュールのNMRユニット100のデータ削減ロジック150は、カウンタレジスタ130に格納されている現在のカウントをインクリメントする。第1のメモリモジュールであるメモリモジュール-0については、アドレス3を処理しないので、変更がない。
【0033】
これらの例によって提供される技術的な解決策は、1)単一の記憶位置ではなくメモリアドレスの範囲にわたってメモリ削減を提供すること、及び、2)メモリ内アトミック(in-memory atomics)が(メモリ帯域幅削減なしに)記憶位置に読み取り-修正-書き込み操作を実行するのに対し、この解決策は、累積削減結果を各NMRユニット100の結果レジスタ120に格納し、データ削減を実行するために、メインメモリからキャッシュ等のオンチップメモリにデータを読み戻す必要性が回避されることによって、メモリ内アトミックと異なる。
【0034】
V.レーン内データ削減
メモリインターフェースの幅が、格納されているデータ要素の幅を超えることは少なくない。例えば、メモリインターフェースの論理幅は、256ビット又は512ビットであるが、格納されているデータ要素の幅は、8ビット、16ビット、32ビット又は64ビットとなる場合がある。したがって、256ビット幅のインターフェースを備えたメモリモジュールの場合、メモリストア動作毎に8つの32ビットデータ要素が格納される。
【0035】
ハードウェア内の複数のデータ要素にわたってデータ削減を同時に実行するための1つのアプローチは、ツリーベースのペアワイズデータ削減、つまり「クロスレーン」データ削減を使用する。
図4は、メモリインターフェースの論理幅が格納されているデータ要素の幅を超える場合に、各メモリストア動作後にツリーベースのペアワイズデータ削減を実行するための例示的なアプローチを示すブロック図である。この例では、メモリインターフェース幅は256ビットであり、各データ要素は32ビットで表され、メモリストア動作毎に最大8つの32ビットデータ要素を提供する。
図4に示すインターフェースデータ要素の幅は例示的な値であり、実施形態はこれらの例に限定されない。また、この例では、データ削減が加算を使用して実行されるが、実施形態は、加算を使用してデータ削減を実行することに限定されず、他のタイプの算術演算及び論理演算を含む。
【0036】
図4の例では、データ転送プロセスは3つのメモリストア動作を含み、完全なツリーベースのペアワイズデータ削減が各メモリストア動作後に実行される。より具体的には、第1のメモリストア動作(メモリ格納操作)後に、ツリーの第1のレベルで、32ビットデータ要素の4つのペアに対して4つの加算演算が実行され、ペア合計が生成される。ツリーの次のレベルでは、初期の加算セットから4つのペアの合計に対して2つの加算演算が実行され、残りの2つのペア合計が生成される。ツリーの最終レベルでは、残りの2つのペアの合計が加算されて、第1のメモリストア動作における8つの32ビットデータ要素全ての完全データ削減、つまり合計である結果1が生成される。
【0037】
このプロセスは、第2のメモリストア動作で8つの32ビットデータ要素に対して繰り返され、データ削減結果が結果1に加算されて結果2が生成される。第3(及び最終)のメモリストア動作の8つの32ビットデータ要素も同様に削減され、結果が結果2に加算され、3つのメモリストア動作の24の32ビットデータ要素全ての合計である最終結果が生成される。このアプローチは、3つのストア動作に少なくとも3つの加算サイクルを必要とし、各加算サイクルは、データ削減を完了するために、7つの追加の加算及び3つのステップを必要とし、これは計算コストがかかる。
【0038】
一実施形態によれば、
図4のクロスレーンデータ削減アプローチとは対照的に、レーン内データ削減アプローチは、データ転送における全てのメモリストア動作にわたって、メモリインターフェースの32ビット幅の各部分内で加算を実行する。データ転送の最終メモリストア動作の後に、完全なツリーベースのペアワイズデータ削減が実行される。
【0039】
図5は、「レーン内」データ削減を実行するためのアプローチを示すブロック図である。データは、2つの非最終メモリストア動作と、1つの最終メモリストア動作と、を含む3つのメモリストア動作を使用してメモリに格納される。一実施形態によれば、データの各レーンは、メモリストア動作の全てにわたって別々に削減される。
図5に示す例では、各メモリストア動作中に、データ削減が各32ビットデータ要素、つまりレーンに対して実行され、8つの32ビットデータ削減値が提供される。加算演算を使用したデータ削減の場合、各32ビットデータ要素は、その対応する32ビットデータ要素、つまりレーンの累積値に加算され、8つの32ビット累積データ値が提供される。最終メモリストア動作の後に、完全なツリーベースのペアワイズデータ削減が8つの32ビットデータ要素にわたって実行され、最終データ削減結果が生成される。加算演算を使用したデータ削減の場合、最終データ削減結果は、3つのメモリストア動作からの32ビットデータ要素の全ての合計である。
【0040】
図5に示すように、第1のメモリストア動作(メモリ格納操作)が、第1の32ビットデータ要素に値17を指定したと仮定する。値17は、第1の32ビットデータ要素、つまり第1のレーンの累積値に加算される。この例では、第1の32ビットデータ値の初期の累積値はゼロであると推定されているので、第1のレーンの累積値は、第1のメモリストア動作後には17である。これは、他の32ビットデータ値、つまりレーンの各々について繰り返される。累積データ値は、レジスタ、キャッシュ、メインメモリ、又は、本明細書において上述したNMRユニット100に保持される。
【0041】
第2のメモリストア動作は、第1の32ビットデータ要素、つまり第1のレーンに値9を指定する。値9は、第1のレーンの累積値17に加算され、第1の32ビットデータ要素の新しい累積値26が生成される。これは、他の32ビットデータ値、つまりレーンの各々について繰り返される。
【0042】
第3(最終)のメモリストア動作は、第1の32ビットデータ要素に値11を指定する。値11が累積値26に加算され、第1の32ビットデータ要素の新しい累積値37が生成される。これは、他の32ビットデータ値、つまりレーンの各々について繰り返される。第3のメモリストア動作後、他の8つの32ビットレーンの各々も、3つのメモリストア動作の各々からの対応する32ビットのデータ要素の合計である累積値を有する。次に、完全なツリーベースのペアワイズデータ削減が8つの累積した32ビットデータ値に対して実行され、
図5に示す最終結果が生成される。
【0043】
このアプローチは、各メモリストア動作の後に完全なツリーベースのペアワイズデータ削減を実行する代わりに、各メモリストア動作の後に単一のセットの並列加算が実行されるので、
図4に示すアプローチよりも計算コストが低い。
図5に示す例では、8つの並列加算のセットが、各メモリストア動作後に実行される。加算の総数は、
図4に示すアプローチと同じであるが、必要なステップがより少ない。
図4の例では、完全なツリーベースのペアワイズデータ削減の各々に3つ、結果2及び最終結果を生成するために2つの、合計23の加算及び11のステップが必要である。対照的に、
図5のレーン内データ削減アプローチは、23の加算を使用するが、必要なステップは5つのみである。
【0044】
実施形態は、等しい幅のレーン、つまりレーンの全てが32ビット幅であるという観点から、図に示され、本明細書に記載されているが、実施形態は、これらの例に限定されない。一実施形態によれば、レーンは異なる幅を有し、メモリコントローラ又はレーン内データ削減を実行している他の要素は、メモリストア動作内で別々のデータ要素を決定することができ、データ要素の位置は、メモリストア動作の全てにわたって一貫している。レーン内データ削減の使用は、例えば、メモリストア動作のパラメータを介して選択可能であり、及び/又は、メモリコントローラは、レーン内データ削減を実行するように構成されている。
【0045】
図6は、「レーン内」データ削減を実行するためのアプローチを示すフロー
図600である。ステップ602において、初期化が実行され、特定の実施形態に応じて変化するいくつかの異なるタスクを含む。一実施形態によれば、累積データ値を格納する記憶位置(例えば、レジスタ、NRMユニット100、他の記憶位置)は、ゼロ等の指定された値に初期化される。他の実施形態は、特定の実施形態に応じて、ゼロ以外の値を使用する。
【0046】
初期化完了後に、ステップ604において、メモリインターフェースの幅よりも小さいビット幅を有する複数のデータ要素を含むメモリストア動作(メモリ格納操作)が受信される。ステップ606において、データ要素の累積値が更新される。例えば、メモリコントローラは、メモリストア動作で指定されたデータ要素の値を、対応する各レーンの累積値に加算させる。
【0047】
ステップ608において、メモリストア動作が最終メモリストア動作であるかどうかが判別される。メモリストア動作が最終メモリストア動作ではない場合、制御はステップ604に戻る。現在のメモリストア動作が最終メモリストア動作である場合、ステップ610において、上述したように、完全なツリーベースのペアワイズデータ削減が実行されて最終データ削減結果が生成され、プロセスはステップ612で完了する。