(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-28
(54)【発明の名称】ニアメモリコンピューティングを用いた複合操作のアトミック性の提供
(51)【国際特許分類】
G06F 12/00 20060101AFI20240621BHJP
G06F 9/46 20060101ALI20240621BHJP
【FI】
G06F12/00 572A
G06F12/00 560F
G06F12/00 560A
G06F9/46 430
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023577528
(86)(22)【出願日】2022-06-27
(85)【翻訳文提出日】2024-01-17
(86)【国際出願番号】 US2022035118
(87)【国際公開番号】W WO2023278323
(87)【国際公開日】2023-01-05
(32)【優先日】2021-06-28
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ヌワン ジャヤセーナ
【テーマコード(参考)】
5B160
【Fターム(参考)】
5B160CB03
5B160CD17
(57)【要約】
ニアメモリコンピューティングを使用した複合操作のアトミック性の提供が開示される。一実施形態では、複合アトミック操作は、ニアメモリ命令ストアに記憶される順次操作セットに分解される。メモリコントローラは、複合アトミック操作を発行する要求をホスト実行エンジンから受信し、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始する。複合アトミック操作は、ユーザ定義の複合アトミック操作であってもよい。
【選択図】
図1
【特許請求の範囲】
【請求項1】
ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する方法であって、
順次操作セットをニアメモリ命令ストアに記憶することであって、前記順次操作は複合アトミック操作の構成操作である、ことと、
前記複合アトミック操作を発行するための要求を受信することと、
記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することと、を含む、
方法。
【請求項2】
前記複合アトミック操作に対応する前記順次操作セットを記憶するための要求を受信することを含み、
前記複合アトミック操作は、ユーザ定義の複合アトミック操作である、
請求項1の方法。
【請求項3】
前記ユーザ定義の複合アトミック操作に対する前記順次操作セットを記憶するための要求は、ホストシステムソフトウェア又はホストアプリケーションからのアプリケーションプログラミングインターフェース(API)コールを介して受信される、
請求項2の方法。
【請求項4】
前記順次操作セットをニアメモリ命令ストアに記憶することであって、前記順次操作は複合アトミック操作の構成操作である、ことは、
複数の複合アトミック操作のそれぞれに対応する複数の順次操作セットを記憶することと、
特定の複合アトミック操作を前記ニアメモリ命令ストア内の対応する順次操作セットの場所にマップするテーブルを記憶することと、を含む、
請求項1の方法。
【請求項5】
前記記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セット内の各操作を前記ニアメモリ命令ストアから読み取ることであって、前記ニアメモリ命令ストアは前記メモリコントローラに結合されている、ことと、
前記メモリコントローラが、前記ニアメモリ計算ユニットに対して各操作を発行することと、を含む、
請求項1の方法。
【請求項6】
前記記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セットを実行するためのコマンドをメモリデバイスに対して発行することを含み、
前記ニアメモリ命令ストアは、前記メモリデバイスに結合されている、
請求項1の方法。
【請求項7】
前記メモリコントローラは、一連のトリガを通して、前記ニアメモリ計算ユニット上での前記構成操作の実行を調整する、
請求項6の方法。
【請求項8】
前記ニアメモリ命令ストア及び前記ニアメモリ計算ユニットは、メモリデバイスとインターフェースするメモリコントローラに近接して結合されている、
請求項1の方法。
【請求項9】
前記順次操作セットは、1つ以上の算術演算を含む、
請求項1の方法。
【請求項10】
メモリコントローラは、前記順次操作セット内の全ての操作が開始されるまで待機してから、別のメモリアクセスをスケジュールする、
請求項1の方法。
【請求項11】
ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するためのコンピューティングデバイスであって、
論理を備え、
前記論理は、
複合アトミック操作の構成操作である順次操作のセットである順次操作セットをニアメモリ命令ストアに記憶することと、
前記複合アトミック操作を発行するための要求を受信することと、
記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することと、
を行うように構成されている、
コンピューティングデバイス。
【請求項12】
前記コンピューティングデバイスは、前記複合アトミック操作に対応する前記順次操作セットを記憶するための要求を受信するように構成された論理を備え、
前記複合アトミック操作は、ユーザ定義の複合アトミック操作である、
請求項11のコンピューティングデバイス。
【請求項13】
前記ユーザ定義の複合アトミック操作に対する前記順次操作セットを記憶するための要求は、ホストシステムソフトウェア又はホストアプリケーションからのアプリケーションプログラミングインターフェース(API)コールを介して受信される、
請求項12のコンピューティングデバイス。
【請求項14】
前記複合アトミック操作の構成操作である順次操作のセットである順次操作セットをニアメモリ命令ストアに記憶することは、
複数の複合アトミック操作のそれぞれに対応する複数の順次操作セットを記憶することと、
特定の複合アトミック操作を前記ニアメモリ命令ストア内の対応する順次操作セットの場所にマップするテーブルを記憶することと、を含む、
請求項11のコンピューティングデバイス。
【請求項15】
前記記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セット内の各操作を前記ニアメモリ命令ストアから読み取ることであって、前記ニアメモリ命令ストアは前記メモリコントローラに結合されている、ことと、
前記メモリコントローラが、前記ニアメモリ計算ユニットに対して各操作を発行することと、を含む、
請求項11のコンピューティングデバイス。
【請求項16】
前記記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セットを実行するためのコマンドをメモリデバイスに対して発行することを含み、
前記ニアメモリ命令ストアは、前記メモリデバイスに結合されている、
請求項11のコンピューティングデバイス。
【請求項17】
前記ニアメモリ命令ストア及び前記ニアメモリ計算ユニットは、メモリデバイスとインターフェースするメモリコントローラに近接して結合されている、
請求項11のコンピューティングデバイス。
【請求項18】
ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するためのシステムであって、
メモリデバイスと、
前記メモリデバイスに結合されたニアメモリ計算ユニットと、
順次操作セットを記憶するニアメモリ命令ストアであって、前記順次操作は複合アトミック操作の構成操作である、ニアメモリ命令ストアと、
メモリコントローラと、を備え、
前記メモリコントローラは、
前記複合アトミック操作を発行するための要求を受信することと、
記憶した順次操作セットの実行を前記ニアメモリ計算ユニット上で開始することと、
を行うように構成されている、
システム。
【請求項19】
前記記憶した順次操作セットの実行を前記ニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セット内の各操作を前記ニアメモリ命令ストアから読み取ることであって、前記ニアメモリ命令ストアはメモリコントローラに結合されている、ことと、
前記メモリコントローラが、前記ニアメモリ計算ユニットに対して各操作を発行することと、を含む、
請求項18のシステム。
【請求項20】
前記記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記記憶した順次操作セットを実行するためのコマンドを前記メモリデバイスに対して発行することを含み、
前記ニアメモリ命令ストアは、前記メモリデバイスに結合されており、
前記メモリコントローラは、一連のトリガを通して、前記ニアメモリ計算ユニット上での前記構成操作の実行を調整する、
請求項18のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
コンピューティングシステムは、多くの場合、命令を取り出して実行し、実行した命令の結果を適切な場所に記憶することができるいくつかの処理リソース(例えば、1つ以上のプロセッサ)を含む。処理リソース(例えば、中央処理ユニット(central processing unit、CPU)又はグラフィック処理ユニット(graphics processing unit、GPU))は、データに対して論理演算を行うことによって命令を実行するのに使用することができる、例えば、算術論理ユニット(arithmetic logic unit、ALU)回路、浮動小数点ユニット(floating point unit、FPU)回路及び/又は組み合わせ論理ブロック等のいくつかの機能ユニットを備えることができる。例えば、機能ユニット回路は、オペランドに対する加算、減算、乗算及び/又は除算等の算術演算を実施するために使用することができる。典型的には、処理リソース(例えば、プロセッサ及び/又は関連機能ユニット回路)は、メモリデバイスの外部にあってもよく、データは、処理リソースとメモリデバイスとの間のバス又はインターコネクトを介してアクセスされて、命令セットを実行する。メモリデバイス内のデータをフェッチするため又は記憶するためのアクセスの量を低減させるために、コンピューティングシステムは、処理リソース又は処理リソース群による使用のために最近アクセスされた又は変更されたデータを一時的に記憶するキャッシュ階層を用いることができる。しかしながら、データを処理リソースのより近くにもってくるのではなく、データを記憶する記憶場所のより近くでデータ処理が実行されるように、処理リソースがメモリの内部及び/又は近くに実装されるメモリベース実行デバイスに特定の操作をオフロードすることによって、処理性能が更に改善され得る。ニアメモリ又はインメモリ計算デバイスは、外部通信(すなわち、ホストからメモリデバイスへの通信)を低減することによって時間を節約することができ、電力も節約することができる。
【図面の簡単な説明】
【0002】
【
図1】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するための例示的なシステムのブロック図である。
【
図2】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するための別の例示的なシステムのブロック図である。
【
図3】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するための別の例示的なシステムのブロック図である。
【
図4】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図である。
【
図5】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図である。
【
図6】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図である。
【
図7】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図である。
【
図8】本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図である。
【発明を実施するための形態】
【0003】
同じ記憶場所を更新する複数のスレッドは、多くのアプリケーションドメイン(グラフ処理、機械学習推奨システム、科学シミュレーション等)において共通のモチーフであり、スレッド間同期を必要とすることが多い。複数の並列スレッドからのインメモリデータ構造に対する不規則な更新は、同一のデータアイテム(data items)に対する矛盾する同時更新に起因する不正確な結果を回避する技術を必要とする。ソフトウェアベースの技術を使用して、これらの更新の正確さを確保することができるが、そのようなソフトウェアベースのソリューションは、高オーバーヘッドを招く。更に、ハードウェアにおけるアトミック操作のサポートは、通常、同期プリミティブ(例えば、ロック)に限定され、バルクデータに対するユーザ定義又は複合アトミック操作のアトミックアプリケーションには拡張されない。
【0004】
上述したように、ソフトウェアソリューションは、同時更新の正確性を提供するために使用することができる。例えば、ソフトウェアを使用して、スレッド間の明示的な同期(例えば、ロックの獲得)を提供することができる。しかしながら、これは、同期操作自体(例えば、ロックの獲得及び解放)のオーバーヘッド、及び、過同期(多くのデータ要素が典型的には細粒データ構造の単一同期変数を介して保護されるため)を招く。ソフトウェアを使用して、不規則な更新のストリームを、それらが影響するデータアイテムのインデックスによってソートすることもできる。ソートされると、同一データ要素に対する複数の更新が検出され(それらはソートされたリストで隣接しているため)、処理される。しかしながら、これは、更新のストリームをソートするオーバーヘッドを招き、これは、多くの場合、対象アプリケーションにおける大量のデータである。また、ソフトウェアは、所定のデータ要素に対する全ての更新が1つのスレッドによって実行される(それによって同期の必要性を回避する)ように、冗長計算を実行するために使用され得る。しかしながら、これは計算の数を増加させ、全てのアルゴリズムがこのアプローチに適しているわけではない。正確性を提供するために使用可能な別の技術は、ロックフリーデータ構造(lock free data structures)である。これらは、明示的な同期の必要性を回避するが、ソフトウェアの複雑さを大幅に増加させ、同期オーバーヘッドを除いて、それらの従来の対応物よりも遅くなり、どのような場合でも適用可能というわけではない。
【0005】
更に、メモリ内での単純なアトミック操作(例えば、アトミック加算)が利用可能になる場合、そのような操作は、完了するために一連の算術演算を必要とする複合ユーザ定義のアトミック操作の能力を欠いている。例えば、アトミック加算(又は「フェッチ・アンド・アッド(fetch-and-add)」)操作は、メモリ内の単一の場所から値を読み取り、単一のオペランド値を読み取り値に加算し、結果をメモリ内の同じ場所に記憶することに限定される。
【0006】
本開示によるいくつかの実施形態は、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供することを対象とする。いくつかの実施形態は、メモリコントローラがニアメモリ又はインメモリ計算ユニットを利用してユーザ定義の複合操作をアトミックに実行することを可能にする機構を提供して、明示的なスレッドレベル同期の困難さ及びオーバーヘッドを回避する。いくつかの実施形態は、ソフトウェア同期及び他のソフトウェア技術のオーバーヘッドなしに、ユーザ定義の複合アトミック操作(user-defined, complex atomic operations)をバルクデータに適用する柔軟性を更に提供する。いくつかの実施形態は、ユーザプログラマビリティを更にサポートして、任意のアトミック操作を可能にする。具体的には、いくつかの実施形態は、メモリコントローラ等の細粒度のアウトオブオーダスケジューラのコンテキストにおいてアトミック性の必要性に対処する。
【0007】
一実施形態は、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する方法を対象とし、この方法は、シーケンシャルな操作のセット(順次操作セット)(set of sequential operations)をニアメモリ命令ストアに記憶することを含み、順次操作(sequential operations)は、複合アトミック操作の構成操作である。また、本方法は、複合アトミック操作を発行する要求を受信することを含む。また、本方法は、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することを含む。いくつかの実施形態では、本方法は、複合アトミック操作に対応する順次操作セットを記憶する要求を受信することを含み、複合アトミック操作は、ユーザ定義の複合アトミック操作である。これらの実施形態のうちいくつかでは、ユーザ定義の複合アトミック操作のために順次操作セットを記憶する要求は、ホストシステムソフトウェア又はホストアプリケーションからのアプリケーションプログラミングインターフェース(API)コールを介して受信される。場合によっては、順次操作セットは、1つ以上の算術演算を含む。いくつかの実施形態では、メモリコントローラは、順次操作セット内の全ての操作が開始されるまで待機してから、別のメモリアクセスをスケジュールする。
【0008】
いくつかの実施形態では、順次操作セットをニアメモリ命令ストアに記憶することであって、順次操作は複合アトミック操作の構成操作である、ことは、複数の複合アトミック操作にそれぞれ対応する複数の順次操作セットを記憶することと、特定の複合アトミック操作を、ニアメモリ命令ストア内の対応する順次操作セットの場所にマップするテーブルを記憶することと、を含む。
【0009】
いくつかの実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、メモリコントローラが、ニアメモリ命令ストアから順次操作セット内の各操作を読み取ることを含み、ニアメモリ命令ストアはメモリコントローラに結合されている。そのような実施形態は、メモリコントローラが、ニアメモリ計算ユニットに対して各操作を発行することを更に含む。
【0010】
いくつかの実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、順次操作セットを実行するためのコマンドを、メモリコントローラがメモリデバイスに対して発行することを含み、ニアメモリ命令ストアはメモリデバイスに結合されている。これらの実施形態のうちいくつかでは、メモリコントローラは、一連のトリガを通してニアメモリ計算ユニット上での構成操作の実行を調整する。いくつかの実施形態では、ニアメモリ命令ストア及びニアメモリ計算ユニットは、メモリデバイスとインターフェースするメモリコントローラに近接して結合されている。
【0011】
別の実施形態は、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するためのコンピューティングデバイスを対象とする。コンピューティングデバイスは、ニアメモリ命令ストアに順次操作セットを記憶するように構成されており、順次操作は、複合アトミック操作の構成操作である。また、コンピューティングデバイスは、複合アトミック操作を発行する要求を受信するように構成されている。コンピューティングデバイスは、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始するように更に構成されている。いくつかの実施形態では、コンピューティングデバイスは、複合アトミック操作に対応する順次操作セットを記憶する要求を受信するように更に構成されており、複合アトミック操作は、ユーザ定義の複合アトミック操作である。一例では、ユーザ定義の複合アトミック操作のために順次操作セットを記憶する要求は、ホストシステムソフトウェア又はホストアプリケーションからのAPIコールを介して受信される。
【0012】
いくつかの実施形態では、順次操作セットをニアメモリ命令ストアに記憶することであって、シーケンシャルな操作は複合アトミック操作の構成操作である、ことは、複数の複合アトミック操作にそれぞれ対応する複数の順次操作セットを記憶することと、特定の複合アトミック操作を、ニアメモリ命令ストア内の対応する順次操作セットの場所にマップするテーブルを記憶することと、を含む。
【0013】
いくつかの実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、メモリコントローラが、ニアメモリ命令ストアから順次操作セット内の各操作を読み取ることを含み、ニアメモリ命令ストアはメモリコントローラに結合されている。そのような実施形態は、メモリコントローラが、ニアメモリ計算ユニットに対して各操作を発行することを更に含む。
【0014】
いくつかの実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、順次操作セットを実行するためのコマンドを、メモリコントローラがメモリデバイスに対して発行することを含み、ニアメモリ命令ストアはメモリデバイスに結合されている。これらの実施形態のうちいくつかでは、メモリコントローラは、一連のトリガを通してニアメモリ計算ユニット上での構成操作の実行を調整する。いくつかの実施形態では、ニアメモリ命令ストア及びニアメモリ計算ユニットは、メモリデバイスとインターフェースするメモリコントローラに近接して結合されている。
【0015】
更に別の実施形態は、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するためのシステムを対象とする。システムは、メモリデバイスと、メモリデバイスに結合されたニアメモリ計算ユニットと、順次操作セットを記憶するニアメモリ命令ストアと、を含み、順次操作は、複合アトミック操作の構成操作である。また、システムは、複合アトミック操作を発行する要求を受信し、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始するように構成されたメモリコントローラを含む。
【0016】
ニアメモリ命令ストアがメモリコントローラに結合されているいくつかの実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、メモリコントローラが、順次操作セット内の各操作をニアメモリ命令ストアから読み取ることと、メモリコントローラが、ニアメモリ計算ユニットに対して各操作を発行することと、を含む。
【0017】
ニアメモリ命令ストアがメモリデバイスに結合されているいくつかの実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、順次操作セットを実行するためのコマンドを、メモリコントローラがメモリデバイスに対して発行することを含む。これらの実施形態のうちいくつかでは、メモリコントローラは、一連のトリガを通してニアメモリ計算ユニット上での構成操作の実行を調整する。
【0018】
本開示による実施形態は、
図1から始めて更に詳細に説明される。明細書及び図面を通じて、同じ符号は同じ構成要素を指す。
図1は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するための例示的なシステム100のブロック図を示している。
図1の例示的なシステム100は、少なくとも1つのホスト実行エンジン102を含むホストデバイス130(例えば、システムオンチップ(SoC)デバイス又はシステムインパッケージ(SiP)デバイス)を含む。図示されていないが、ホストデバイス130は、複数の異なるタイプのホスト実行エンジンを含む複数のホスト実行エンジンを含み得る。様々な例では、ホスト実行エンジン102は、中央処理装置(CPU)、グラフィックス処理装置(GPU)、アクセラレーテッドプロセッシングユニット(APU)、特定用途向けプロセッサ、構成可能プロセッサ、又は、複数の同時計算シーケンスをサポート可能な他の計算エンジンである。いくつかの実施形態では、ホスト計算エンジンは、複数の物理コア又は他の形態の独立実行ユニットを含む。ホストデバイス130は、ホスト実行エンジン102上で1つ以上のアプリケーションをホストする。ホストされるアプリケーションは、例えば、シングルスレッドアプリケーション又はマルチスレッドアプリケーションであり、ホスト実行エンジン102は、アプリケーションの複数の同時スレッド若しくは複数の同時アプリケーションを実行し、及び/又は、複数の実行エンジン102は、同一アプリケーション若しくは複数のアプリケーションのスレッドを同時に実行する。
【0019】
また、システム100は、ホスト-メモリインターフェース180(例えば、バス又はインターコネクト)を介してメモリデバイス108にアクセスするためにホスト実行エンジン102によって使用される少なくとも1つのメモリコントローラ106を含む。いくつかの例では、メモリコントローラ106は、複数のホスト実行エンジン102によって共有される。
図1の例は単一のメモリコントローラ106及び単一のメモリデバイス108を図示しているが、システム100は、それぞれが1つ以上のメモリデバイス内のメモリチャネルに対応する複数のメモリコントローラを含み得る。メモリコントローラ106は、ホスト実行エンジン102又はシステム100内の他のリクエスタから受信したメモリ要求をバッファリングするための保留中要求キュー(pending request queue)116を含む。例えば、保留中要求キュー116は、1つのホスト実行エンジン上で実行される複数のスレッドから受信したメモリ要求、又は、複数のホスト実行エンジン上でそれぞれ実行されるスレッドから受信したメモリ要求を保持する。単一の保留中要求キュー116が示されているが、いくつかの実施形態は、複数の保留中要求キューを含む。また、メモリコントローラ106は、保留中要求キュー116内で保留されているメモリ要求を処理する順序を決定し、メモリデバイス108に対してメモリ要求を発行するスケジューラ118を含む。ホストデバイス130の構成要素として
図1に示されているが、メモリコントローラ106は、ホストデバイスとは別であってもよい。
【0020】
いくつかの例では、メモリデバイス108は、メモリコントローラ106がメモリ要求を発行する相手であるDRAMデバイスである。様々な例では、メモリデバイス108は、高帯域幅メモリ(HBM)、デュアルインラインメモリモジュール(DIMM)、又は、それらのチップ若しくはダイである。
図1の例では、メモリデバイス108は、メモリコントローラ106から受信したメモリ要求を処理する少なくとも1つのDRAMバンク128を含む。
【0021】
いくつかの実施形態では、メモリコントローラ106は、ダイ(例えば、入力/出力ダイ)上に実装され、ホスト実行エンジン102は、1つ以上の異なるダイ上に実装されている。例えば、ホスト実行エンジン102は、それぞれがプロセッサコア(例えば、CPUコア又はGPUコア)又は他の独立した処理ユニットに対応する複数のダイによって実装され得る。いくつかの例では、メモリコントローラ106及びホスト実行エンジン102を含むホストデバイス130は、(例えば、SoCアーキテクチャ内の)同一チップ上に実装されている。いくつかの例では、メモリデバイス108、メモリコントローラ106及び1つ以上のホスト実行エンジン102を含むホストデバイス130は、(例えば、SoCアーキテクチャ内の)同一チップ上に実装されている。いくつかの例では、メモリデバイス108、メモリコントローラ106及びホスト実行エンジン102を含むホストデバイス130は、同一パッケージ内に(例えば、SiPアーキテクチャ内に)実装されている。
【0022】
また、例示的なシステム100は、メモリコントローラ106に近接して結合され、それとインターフェースする(すなわち、ホスト-メモリインターフェース180のホスト側にある)ニアメモリ命令ストア132を含む。いくつかの例では、ニアメモリ命令ストア132は、メモリコントローラ106と同じダイ又は同じチップ上に位置するバッファ又は他の記憶デバイスである。ニアメモリ命令ストア132は、複合アトミック操作に対応する順次操作セット134を記憶するように構成されている。すなわち、順次操作セット134は、複合アトミック操作の構成操作である。順次操作セット134(すなわち、ロード及びストア等のメモリ操作並びに計算操作)は、順次実行されると、複合アトミック操作を完了する。このコンテキストでは、複合アトミック操作は、複合アトミック操作によってアクセスされる同じ記憶場所へのアクセスに介入することなく完了される操作である。いくつかの例では、ニアメモリ命令ストア132は、複数の複合アトミック操作に対応する複数の異なる順次操作セットを記憶する。いくつかの実施形態では、特定の複合アトミック操作に対応する特定の順次操作セットは、順次操作セットの最初の操作のニアメモリ命令ストア132内の記憶場所(例えば、アドレス)によって識別される。
【0023】
複合アトミック操作の要求をメモリコントローラ106で受信すると、この要求は、保留中要求キュー116に記憶され、その後、メモリコントローラ106によって実施されるスケジューリングポリシーに従って処理するためにスケジューラ118によって選択される。複合アトミック操作の要求は、ホスト実行エンジンのレジスタ値又はメモリアドレス等のオペランドを含み得る。処理するために複合アトミック操作がスケジュールされると、対応する順次操作セット134がニアメモリ命令ストア132から読み出され、メモリコントローラ106によって完了するように調整されてから、処理するために保留中要求キューから任意の他の操作を選択する(すなわち、アトミック性を保持する)。構成操作を発行する場合に、メモリコントローラは、複合アトミック操作要求において供給されるオペランドに基づいて構成操作にオペランドの値を挿入する。
【0024】
ニアメモリ命令ストア132が複数の複合アトミック操作に対応する複数の順次操作セットを記憶する場合に、メモリコントローラ106に送信される複合アトミック操作要求は、要求が対応する複合アトミック操作の指標を含む。いくつかの例では、各複合アトミック操作は、当該複合アトミック操作に対応する順次操作セット134の複合アトミック操作識別子として使用することができる一意のオペコードを有する。他の例では、要求が複合アトミック操作要求であることを示すために1つのオペコードが使用され、特定の複合アトミック操作及び対応する順次操作セットを識別するために、複合アトミック操作識別子が要求とともに引数として渡される。一例では、ルックアップテーブルが、複合アトミック操作識別子を、順次操作セットのうち第1の操作を含むニアメモリ命令ストア132内の記憶場所にマップする。
【0025】
いくつかの例では、複合アトミック操作は、ユーザ定義のアトミック操作である。例えば、ユーザ定義の複合アトミック操作は、アプリケーション開発者によって提供されるアトミック操作の表現に基づいて、開発者によって(例えば、カスタムコードシーケンスを書き込むことによって)、又は、ソフトウェアツール(例えば、コンパイラ又はアセンブラ)によって、その構成操作に分解される。ニアメモリ命令ストア132は、例えば、システム起動時、アプリケーション起動時又はアプリケーション実行時に、ホスト実行エンジン102によって順次操作セット134で初期化される。いくつかの例では、順次操作セット134を記憶することは、システムソフトウェアコンポーネントによって実行される。一例では、このシステムソフトウェアは、アプリケーションの開始時にニアメモリ命令ストア132のある領域を当該アプリケーションに割り当て、アプリケーションコードは、順次操作セット134をニアメモリ命令ストア132に記憶することを実行する。複合アトミック操作のための順次操作セット134をニアメモリ命令ストアに書き込む特定の操作は、メモリにマップされた書き込みを介して、又は、特定のアプリケーションプログラミングインターフェース(API)呼び出しを介して達成され得る。したがって、ホスト実行エンジン102は、ニアメモリ命令ストア132とインターフェースして、順次操作セット134を提供する。しかしながら、ニアメモリ命令ストア132は、ニアメモリ命令ストア132がホスト実行エンジン102の構成要素ではないという点で、ホスト実行エンジン102によって用いられる他のキャッシュ及びバッファと区別される。むしろ、ニアメモリ命令ストア132は、メモリコントローラと近接して関連付けられている(すなわち、ホスト実行エンジン102とメモリコントローラ106との間のインターフェースのメモリコントローラ側にある)。
【0026】
図1の例示的なシステム100において、メモリデバイス108は、ニアメモリ計算ユニット142を含む。いくつかの例では、ニアメモリ計算ユニット142は、基本算術演算を実行し、ロード命令及びストア命令を実行するために、算術論理ユニット(ALU)、レジスタ、制御論理及び他の構成要素を含む。場合によっては、ニアメモリ計算ユニット142は、メモリデバイス108の構成要素であるインメモリ処理(PIM)ユニットである。図示されていないが、ニアメモリ計算ユニット142は、DRAMバンク128内に、又は、1つ以上のメモリコアダイに結合されたメモリ論理ダイ内に実装され得る。他の例では、図示されていないが、ニアメモリ計算ユニット142は、メモリデバイス108とは別であるがそれに近接して結合されている特定用途向けプロセッサ又は構成可能プロセッサ等の処理ユニットである。
【0027】
メモリコントローラ106が、メモリデバイス108に対する発行について複合アトミック操作をスケジュールする場合に、メモリコントローラは、ニアメモリ命令ストア132から順次操作セット134を読み取り、ニアメモリ計算ユニット142に対するコマンドとして操作を発行する。ニアメモリ計算ユニット142は、順次操作セット134内の操作用コマンドをメモリコントローラ106から受信し、複合アトミック操作を実行する。すなわち、ニアメモリ計算ユニット142は、順次操作セット134に含まれない操作による如何なる介在アクセスもなしに、順次操作セット134内の各操作(例えば、ロード、ストア、加算、乗算)をターゲットとなる記憶場所に対して実行する。
【0028】
メモリ要求がメモリコントローラ106によって受信されると、メモリコントローラ106は、メモリ要求が複合アトミック操作要求であるかどうかを判定する。例えば、特別なオペコード又はコマンドは、メモリ要求が複合アトミック操作要求であることを示す。要求が複合アトミック操作に関するものである場合、順次操作セット134は、ニアメモリ命令ストア132からフェッチされ、実行のためにニアメモリ計算ユニット142に対して発行される。ニアメモリ命令ストア132内の構成操作の開始点は、メモリコントローラ106で受信した複合アトミック操作要求内で直接的に(例えば、ニアメモリ命令ストア132内の場所によって)又は間接的に(例えば、含まれる複合アトミック操作識別子のテーブルルックアップを介して)示される。複合アトミック操作の完了は、アトミック操作要求内に符号化された構成操作の数、ニアメモリ命令ストア132に記憶した命令ストリーム内に埋め込まれたマーカ、ニアメモリ計算ユニット142からの肯定応答、又は、別の好適な技術の何れかによって示される。例えば、構成操作の数は、順次操作セット134の開始点を識別するルックアップテーブルに含まれ得る。
【0029】
更なる説明のために、
図2は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するための別の例示的なシステム200のブロック図を示している。例示的なシステム200は、ニアメモリ命令ストア232が、メモリコントローラ106ではなく、メモリデバイス108に近接して結合されている(すなわち、ホスト-メモリインターフェース180のメモリ側にある)ことを除いて、
図1の例示的なシステム100に類似している。いくつかの例では、
図2に示されるように、ニアメモリ命令ストア232は、メモリデバイス108の構成要素である。これらの例では、ニアメモリ命令ストア232は、メモリデバイスのバッファ若しくは他の独立したストレージ構成要素であるか、又は、ニアメモリ命令ストア232として使用するために割り当てられたDRAMストレージ(例えば、DRAMバンク128)の一部であり得る。他の例では、ニアメモリ命令ストア232は、外部にあるが、メモリデバイス108に近接して結合されている。順次操作セット234は、上述したように、システム若しくはアプリケーションの起動時に、又は、アプリケーション実行時に、メモリコントローラ106を介してホスト実行エンジン102によってニアメモリ命令ストレージ232に記憶される。
【0030】
図2の例では、メモリコントローラ106は、複合アトミック操作要求の受信に応じてニアメモリ命令ストア232から順次操作セット234を読み取る必要はない。むしろ、メモリコントローラ106は、ニアメモリ計算ユニット142上で順次操作セット234の実行を開始することができる。いくつかの実施形態では、メモリコントローラ106は、ニアメモリ計算ユニット142がニアメモリ命令ストア232から順次操作セットを読み取るように、複合アトミック操作の発行を示す単一のコマンドをメモリデバイス108に対して発行する。そのような場合、メモリコントローラ106によって直接的に又は間接的に(例えば、複合アトミック操作識別子のテーブルルックアップを介して)受信した複合アトミック操作要求は、順次操作セット234の持続時間(例えば、クロックサイクル単位)又は複合アトミック操作のために実行される構成操作の数の指標を含む。この情報はメモリコントローラ106によって使用され、アトミック性を確保しつつ、後続のコマンドがメモリデバイス108に送信され得る時期を決定する。他の実施形態では、複合アトミック操作要求は、複合アトミック操作の構成操作を調整するためにメモリコントローラ106がメモリデバイス108に送信する必要のある一連のトリガを含む。1つのそのような実施形態では、トリガは、メモリデバイス108によって解釈され、それに関連付けられたニアメモリ命令ストア232に記憶した順次操作を調整することになる一連のロード及びストア操作(又はその変形)を含む。そのような実施形態の一例は、特定の値を介したロード及び別の特定の値を介したストアを示す、複合アトミック操作要求の一部としてメモリコントローラ106で受信したビットベクトル又は配列である。これらのロード及びストアは、複合アトミック操作と関連付けられた1つ以上のメモリアドレスを用いてホスト実行エンジン102によって発行され得る(最も単純なケースは、全てのそのような操作が、複合アトミック操作要求の一部としてメモリコントローラ106に送信される単一のアドレスを用いて発行される)。複合アトミック操作と関連付けられた全てのトリガは、メモリデバイス108に送信されてから、任意の他の保留中の要求がメモリコントローラによって処理されて、アトミック性を確保する。
【0031】
更なる説明のために、
図3は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するための別の例示的なシステム300のブロック図を示している。例示的なシステム300は、ニアメモリ命令計算ユニット342が、メモリデバイス108ではなく、メモリコントローラ106に近接して結合されている(すなわち、ホスト-メモリインターフェース180のホスト側にある)ことを除いて、
図1の例示的なシステム100に類似している。
図3の例示的なシステム300のいくつかの実施形態では、
図1の例示的なシステム100を参照しながら上述したように、メモリコントローラ106は、複合アトミック操作の要求を受信したことに応じて、ニアメモリ命令ストア132から順次操作セット134内の操作を読み取り、各構成操作をニアメモリ計算ユニット342に対して発行する。他の実施形態では、メモリコントローラ106は、ニアメモリ命令ストア132から順次操作セット134内の操作を読み取るようにニアメモリ計算ユニット342に促す単一のコマンドをニアメモリ計算ユニット342に対して発行する。例えば、コマンドは、複合アトミック操作識別子又はニアメモリ命令ストア132内の場所を含み得る。この例示的なシステムでは、順次操作セット134の実行により、ホスト-メモリインターフェース180を介してメモリデバイス108からの読み取り及び書込みを開始し、複合アトミック操作に必要なメモリデータにアクセスする。いくつかの例では、コマンドは、操作の数を示すか又は順次操作セット134にマーカが含まれていて、シーケンスの終了を示す。いくつかの実施形態では、ニアメモリ計算ユニット342は、順次操作セット134が完了したことをメモリコントローラ106にシグナリングし、メモリコントローラ106が、アトミック性を保持しつつ、保留中要求キュー116内の次の要求の処理に進むことができるようにする。これらの例では、ニアメモリ計算ユニット342は、ホスト-メモリインターフェースのホスト側に位置するので、そのようなシグナリングは、メモリインターフェース上に追加のトラフィックを生成しない。
【0032】
更なる説明のために、
図4は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する例示的な方法を説明するフロー図を示している。本方法は、ニアメモリ命令ストアに順次操作セットを記憶すること(402)を含み、順次操作は、複合アトミック操作の構成操作である。いくつかの例では、複合アトミック操作は、1つ以上の記憶場所へのアクセスに介入することなく完了される必要のある、1つ以上の記憶場所をターゲットとする順次操作セットである。いくつかの例では、ニアメモリ命令ストアに順次操作セットを記憶すること(402)は、例えば、
図1及び
図3のニアメモリ命令ストア132又は
図3のニアメモリ命令ストア232等のニアメモリ命令ストアに、複合アトミック操作に対応する構成操作を記憶することによって実行される。いくつかの実施形態では、ニアメモリ命令ストアに順次操作セットを記憶すること(402)は、ホスト実行エンジン(例えば、
図1~
図3のホスト実行エンジン102)が、順次操作セットの操作をニアメモリ命令ストアに書き込むことによって実行される。他の実施形態では、ニアメモリ命令ストアに順次操作セットを記憶すること(402)は、メモリコントローラ(例えば、
図1~
図3のメモリコントローラ106)が、ニアメモリ命令ストアに順次操作セットの操作を書き込むことによって実行される。
【0033】
複合アトミック操作は、複合アトミック操作によってアクセスされる記憶場所に記憶したデータの変更を介在させることなく実行される一連の構成操作を含む。例えば、特定の記憶場所にあるデータに対して複合アトミック操作を実行する第1のスレッドは、複合アトミック操作の完了前に他のスレッドが当該記憶場所にアクセスしないことが保証される。ハードウェア固有ではない(すなわち、ニアメモリ計算実装、メモリベンダ等に固有である)複合アトミック操作を提供し、ユーザ定義の複合アトミック操作を提供するために、複合アトミック操作の構成操作がニアメモリ命令ストアに記憶される。これにより、プロセッサが、複合アトミック操作のために単一の命令をディスパッチすることが可能となり、複合アトミック操作は、「フェッチ・アンド・アッド」等の単純なアトミック操作よりも多くの構成操作を含むことができる。引数として2つの記憶場所及びスカラ値をとる「フェッチ・フェッチ・アッド・アンド・マルチプライ(fetch-fetch-add-and-multiply)」アトミック操作であるユーザ定義の複合操作の非限定的な例を考える。この例示的な複合アトミック操作では、第1の値が第1の記憶場所からロードされ、第2の値が第2の記憶場所からロードされ、第2の値が第1の値に加算され、この結果にスカラ値が乗算され、最終結果が第1の記憶場所に書き込まれる。擬似コードで書くと、例示的な複合アトミック操作FetchFetchAddMult(mem_location1,mem_location2,value1)は、以下の一連の構成操作を含み得る。
load reg1,[mem_location1]//mem_location1の値をreg1にロードする
load reg2,[mem_location2]//mem_location2の値をreg2にロードする
add reg1,reg1,reg2//reg1及びreg2の値を加算し、その結果をreg1に記憶する
mult reg1,reg1,value1//reg1内の値にvalue1を乗算し、その結果をreg1に記憶する
store mem_location1,reg1///reg1の値をmem_location1に記憶する。
複合アトミック操作が実行され、結果は、他のスレッドによるmem_location1及びmem_location2へのアクセスに介在することなく記憶される。メモリコントローラは、複合アトミック操作の構成操作の全てがディスパッチされるまで、他の待機メモリ要求をディスパッチしない。
【0034】
また、
図4の例示的な方法は、複合アトミック操作を発行する要求を受信すること(404)を含む。いくつかの例では、複合アトミック操作を発行する要求を受信すること(404)は、複合アトミック操作の要求を含むメモリ要求を受信するメモリコントローラ(例えば、例えば、
図1~
図3のメモリコントローラ106)によって実行される。例えば、メモリ要求は、ホスト実行エンジン(例えば、
図1~
図3のホスト実行エンジン102)から受信される。いくつかの実施形態では、複合アトミック操作の要求は、要求内の特殊命令若しくはオペコードによって、又は、フラグ若しくは引数によって示される。いくつかの実施形態では、複合アトミック操作を発行する要求を受信すること(404)は、要求内の特殊命令、オペコード、フラグ、引数又はメタデータに基づいて、要求が複合アトミック操作要求であることを判定することを含む。いくつかの例では、要求のメタデータは、順次操作セットに含まれる構成操作の数、又は、複合アトミック操作の完了に必要な持続時間を示す。いくつかの実施形態では、複合アトミック操作を発行する要求を受信すること(404)は、複合アトミック操作要求ではないメモリ要求を含む他のメモリ要求とともに、要求を保留中要求キュー(例えば、
図1~
図3の保留中要求キュー116)に挿入することを含む。
【0035】
また、
図4の例示的な方法は、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)を含む。いくつかの例では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)は、ニアメモリ計算ユニット(例えば、
図1及び
図2のニアメモリ計算ユニット142又は
図3のニアメモリ計算ユニット342)に対する発行のために複合アトミック操作要求をスケジュールするメモリコントローラ(例えば、
図1~
図3のメモリコントローラ106)のスケジューラ(例えば、
図1~
図3のスケジューラ118)によって実行される。いくつかの実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)は、以下でより詳細に説明されるように、ニアメモリ命令ストアから複合アトミック操作に対応する順次操作セットを読み取ることと、実行のためにニアメモリ計算ユニットに対して各操作を発行することと、を含む。他の実施形態では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)は、以下でより詳細に説明されるように、ニアメモリ計算ユニットにコマンドを送信して、ニアメモリ命令ストアから順次操作セットを読み出し、命令を実行することを含む。
【0036】
更なる説明のために、
図5は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図を示している。
図4の例と同様に、
図5の例示的な方法は、ニアメモリ命令ストアに順次操作セットを記憶すること(402)であって、順次操作は、複合アトミック操作の構成操作である、ことと、複合アトミック操作を発行する要求を受信すること(404)と、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)と、を含む。
【0037】
また、
図5の例示的な方法は、複合アトミック操作に対応する順次操作セットを記憶する要求を受信すること(502)を含み、複合アトミック操作は、ユーザ定義の複合アトミック操作である。いくつかの例では、複合アトミック操作に対応する順次操作を記憶する要求を受信すること(502)であって、複合アトミック操作はユーザ定義の複合アトミック操作である、ことは、ユーザ定義の複合アトミック操作から分解された順次操作セットを記憶する要求を表す命令を実行するホスト実行エンジン(例えば、
図1~
図3のホスト実行エンジン102)によって実行される。様々な例において、ユーザ定義の複合アトミック操作の構成操作への分解は、開発者によって(例えば、カスタムコードシーケンスを書くことによって)、アプリケーション開発者によって提供される複合アトミック操作の表現に基づいてソフトウェアツール(例えば、コンパイラ又はアセンブラ)によって、又は、ソースコードの何らかの他の注釈を通じて実行される。順次操作セットを記憶する要求は、システム起動時、アプリケーション起動時又はアプリケーショ実行時間中に受信される。いくつかの例では、順次操作セットを記憶する要求は、システムソフトウェアコンポーネントによって発行される。いくつかの例では、システムソフトウェアは、アプリケーションの開始時にニアメモリ命令ストアの或る領域を当該アプリケーションに割り当て、順次操作セットをニアメモリ命令ストアの当該領域に記憶する要求は、ユーザアプリケーションコードによって発行される。様々な実施形態では、ニアメモリ命令ストアに構成操作を書き込む特定の要求は、メモリにマップされた書き込みを介して、又は、特定のAPI呼び出しを介して達成される。
【0038】
更なる説明のために、
図6は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する、別の例示的な方法を説明するフロー図を示している。
図4の例と同様に、
図6の例示的な方法は、ニアメモリ命令ストアに順次操作セットを記憶すること(402)であって、順次操作は、複合アトミック操作の構成操作である、ことと、複合アトミック操作を発行する要求を受信すること(404)と、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)と、を含む。
【0039】
図6の例示的な方法では、順次操作セットをニアメモリ命令ストアに記憶すること(402)であって、順次操作は、複合アトミック操作の構成操作である、ことは、複数の複合アトミック操作にそれぞれ対応する複数の連続操作セットを記憶すること(602)を含む。いくつかの例では、複数の複合アトミック操作にそれぞれ対応する複数の順次操作セットを記憶すること(602)は、特定の複合アトミック操作について、ニアメモリ命令ストレージの或るメモリ領域に特定の順次操作セットを連続して記憶し、異なる複合アトミック操作について、ニアメモリ命令ストレージの別のメモリ領域に別の特定の順次操作セットを連続して記憶すること等によって実行される。例えば、複合アトミック操作の順次操作セットは、順次操作セットにおける第1の操作の記憶場所(例えば、アドレス、ライン、オフセット等)によって識別することができる。複合アトミック操作1がニアメモリ命令ストアのライン0~15を占有し、複合アトミック操作2がニアメモリ命令ストアのライン16~31を占有し、以下同様である例について考える。そのような例では、複合アトミック操作1はライン0によって識別することができ、複合アトミック操作2はライン16によって識別することができる。いくつかの例では、マーカは、シーケンスの終了を示すために使用される。上記の例を使用すると、ライン15及び31は、順次操作セット内のシーケンスの終了を示すヌルラインであり得る。
【0040】
図6の例示的な方法では、順次操作セットをニアメモリ命令ストアに記憶すること(402)であって、順次操作は、複合アトミック操作の構成操作である、ことは、特定の複合アトミック操作を、ニアメモリ命令ストア内の対応する順次操作セットの場所にマップするテーブルを記憶すること(604)を含む。いくつかの例では、特定の複合アトミック操作を、ニアメモリ命令ストア内の対応する順次操作セットの場所にマップするテーブルを記憶すること(604)は、複合アトミック操作識別子を、対応する順次操作セットを識別するニアメモリ命令ストア内の特定の場所にマップするルックアップテーブルをインプリメントすることによって行われる。上記の例を使用すると、ルックアップテーブルは、複合アトミック操作2をニアメモリ命令ストアのライン16にマップすることができる。いくつかの実施形態では、ルックアップテーブルは、シーケンスに含まれる構成操作の数、又は、順次操作がニアメモリ計算ユニットに対して発行を開始してから順次操作セットを完了するのに必要な持続時間を示す。
【0041】
更なる説明のために、
図7は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図を示している。
図4の例と同様に、
図7の例示的な方法は、ニアメモリ命令ストアに順次操作セットを記憶すること(402)であって、順次操作は、複合アトミック操作の構成操作である、ことと、複合アトミック操作を発行する要求を受信すること(404)と、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)と、を含む。
【0042】
図7の例では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)は、メモリコントローラが、ニアメモリ命令ストアから順次操作セット内の各操作を読み取ること(702)を含み、ニアメモリ命令ストアはメモリコントローラに結合されている。
図7の例では、ニアメモリ命令ストア(例えば、
図1及び
図3のニアメモリ命令ストア132)は、ニアメモリ命令ストアがホスト-メモリインターフェース(例えば、
図1~
図3のホスト-メモリインターフェース180)のメモリコントローラ側に実装されているという点で、メモリコントローラ(例えば、
図1及び
図3のメモリコントローラ106)に結合されている。いくつかの例では、メモリコントローラが、ニアメモリ命令ストアから順次操作セット内の各操作を読み取ること(702)ことであって、ニアメモリ命令ストアはメモリコントローラに結合されている、ことは、ニアメモリ命令ストアに記憶した順次操作セット内の最初の操作を識別することによって実行される。ニアメモリ命令ストアが複数の複合アトミック操作に対応する複数の順次操作セットを含む実施形態では、メモリコントローラが、ニアメモリ命令ストアから順次操作セット内の各操作を読み取ること(702)は、複合アトミック操作識別子を識別することと、複合アトミック操作識別子をニアメモリ命令ストア内の記憶場所にマップするテーブルから順次操作セット内の最初の操作の場所を決定することと、を含む。
【0043】
順次操作セット内の最初の操作が識別され、ニアメモリ計算ユニット又はニアメモリ計算ユニットを含むメモリデバイスに対して発行されると、順次操作セット内の次の操作が、場所を何らかの値(例えば、ライン番号、オフセット、アドレス範囲)だけ増分することによって識別される。カウンタは、シーケンス内の各操作の場所を反復的に決定するために、メモリコントローラによって用いられ得る。いくつかの例では、メモリコントローラが、ニアメモリ命令ストアから順次操作セット内の各操作を読み取ること(702)は、複合アトミック操作識別子を、複合アトミック操作に対応する順次操作セットに含まれる操作の数にマップするテーブルから、順次操作セット内の操作の数を決定することを含む。いくつかの実施形態では、順次操作セット内のマーカは、シーケンスの終了を示す。
【0044】
図7の例では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)は、メモリコントローラが、ニアメモリ計算ユニットに対して各操作を発行すること(704)を含む。いくつかの例では、メモリコントローラが、ニアメモリ計算ユニットに対して各操作を発行すること(704)は、ニアメモリ命令ストアから読み取られた順次操作セット内の1つ以上の操作に1つ以上のオペランドを挿入することを含む。例えば、複合アトミック操作要求は、メモリアドレス又はホスト実行エンジンによって計算されたレジスタ値等のオペランド値を含み得る。この例では、これらの値は、ニアメモリ命令ストアから読み出された構成操作のオペランドとして挿入される。いくつかの実施形態では、複合アトミック操作要求は、順次操作セットにマップされ得るオペランドのベクトル又は配列を含む。いくつかの例では、メモリコントローラがニアメモリ計算ユニットに対して各操作を発行すること(704)は、ニアメモリ計算ユニット(例えば、
図1のニアメモリ計算ユニット142又は
図3のニアメモリ計算ユニット342)に対して操作シーケンス内の構成操作ごとにコマンドを発行するメモリコントローラ(例えば、
図1及び
図3のメモリコントローラ106)によって実行される。
【0045】
メモリコントローラが、ニアメモリ命令ストアから順次操作セット内の各操作を読み取ること(702)、及び、メモリコントローラが、ニアメモリ計算ユニットに対して各操作を発行すること(704)は、反復プロセス(各操作がニアメモリ命令ストアから読み取られ、ニアメモリ計算ユニット対する発行がスケジュールされてから次の操作が読み取られる)として上述したように説明されているが、順次操作は、ニアメモリ命令ストアからバッチで読み取ることが可能であるが更に企図される。例えば、メモリコントローラは、複数の操作又は更にはセットの全ての操作をメモリコントローラ内のバッファ又はキューに読み込み、そのバッチをメモリコントローラに読み込んだ後、バッチ内の操作ごとにコマンドの発行を開始する。更に、メモリコントローラは、複合アトミック操作のための順次操作のセット内の操作の全てがニアメモリ計算ユニットに対して発行されるまで、保留中要求キューからの他の如何なるメモリ要求の発行もスケジュールせず、したがって、複合アトミック操作のアトミック性を保持することが理解されるであろう。
【0046】
更なる説明のために、
図8は、本開示のいくつかの実施形態による、ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する別の例示的な方法を説明するフロー図を示している。
図4の例と同様に、
図8の例示的な方法は、ニアメモリ命令ストアに順次操作セットを記憶すること(402)であって、順次操作は、複合アトミック操作の構成操作である、ことと、複合アトミック操作を発行する要求を受信すること(404)と、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)と、を含む。
【0047】
図8の例では、記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始すること(406)は、順次操作セットを実行するためのメモリデバイスへのコマンドを、メモリコントローラがニアメモリ計算ユニットに対して発行すること(802)を含み、ニアメモリ命令ストアはメモリデバイスと関連付けられている。
図8の例では、ニアメモリ命令ストア(例えば、
図2のニアメモリ命令ストア232)は、ニアメモリ命令ストアがホスト-メモリインターフェース(例えば、
図1~
図3のホスト-メモリインターフェース180)のメモリデバイス側に実装されているという点で、メモリデバイス(例えば、
図1及び
図3のメモリデバイス108)と関連付けられている。いくつかの例では、ニアメモリ計算命令ストアは、例えば、DRAMの割り当て部分、メモリコアダイ内のバッファ、1つ以上のメモリコアダイに結合されたメモリ論理ダイ内のバッファ(例えば、メモリデバイスがHBMスタックである場合)等として、メモリデバイス内に実装されているか、又は、メモリデバイスに結合されている。いくつかの実施形態では、ニアメモリ計算ユニットは、メモリデバイスのPIMユニットである。他の例では、ニアメモリストアは、例えばメモリアクセラレータ内のニアメモリ計算ユニットに結合されたバッファとして実装されている。これらの例では、そのようなメモリアクセラレータは、メモリダイ(すなわち、メモリデバイス)と同じチップ上に又は同じパッケージ内に実装されており、直接高速インターフェースを介してメモリダイに結合されている。
【0048】
図8の例では、順次操作セットを実行するためのメモリデバイスへのコマンドを、メモリコントローラがニアメモリ計算ユニットに対して発行すること(802)は、ニアメモリ計算ユニット(例えば、
図2のニアメモリ計算ユニット142)に対して、又は、ニアメモリ計算ユニットに結合されたメモリデバイスに対してメモリコマンドを発行するメモリコントローラ(例えば、
図2のメモリコントローラ106)によって実行され得る。いくつかの実施形態では、コマンドは、ニアメモリ命令ストア内の対応する順次操作セットを識別するためにニアメモリ計算ユニットによって使用される複合アトミック操作識別子を提供する。また、このテーブルは、複合アトミック操作のために実行される構成操作の持続時間又は数を示すことができる。いくつかの実施形態では、メモリコントローラで受信した複合アトミック操作要求は、複合アトミック操作のために実行される構成操作の持続時間又は数を直接示す。構成操作の実行時間は、後続のメモリ操作をスケジュールする時期を決定する際にメモリコントローラによって使用される。この持続時間を待機してから別のメモリアクセスコマンドを発行することによって、複合アトミック操作のアトミック性が保持される。いくつかの例では、ニアメモリ計算ユニットに対して発行されるコマンドは、複合アトミック操作でターゲットとされるオペランド値又はメモリアドレスを含む。一例では、コマンドは、オペランド及び/又はメモリアドレスのベクトル又は配列を含む。
【0049】
いくつかの例では、メモリコントローラは、一連のトリガを通してニアメモリ計算ユニット上での構成操作の実行を調整する。例えば、メモリコントローラは、構成操作の数に対応する複数のコマンドを発行し、各コマンドは、ニアメモリ計算ユニットがニアメモリ命令ストア内の次の構成操作を実行するためのトリガである。一例では、ニアメモリ計算ユニットは、複合アトミック操作識別子を含むコマンドを受信する。次いで、ニアメモリ計算ユニットは、複合アトミック操作に対応するニアメモリ命令ストアの領域内の順次操作セットの第1の操作の場所を識別する。トリガの受信に応じて、ニアメモリ計算ユニットは、ニアメモリ命令ストアの領域内の場所をインクリメントし、次の構成操作を読み出し、当該構成操作を実行する。
【0050】
上記を考慮して、当業者の読者は、本開示のいくつかの利点を理解するであろう。メモリの近くにユーザ定義及び/又は複合アトミック計算を提供することによって、明示的な同期のオーバーヘッド又は代替ソフトウェア技術のオーバーヘッドなしに、メモリに対する複数の同時更新を実行することができる。ユーザ定義可能な複合アトミック操作は、計算エンジンからメモリコントローラに送信される単一の要求に符号化される。メモリコントローラは、複合アトミック操作に対する単一の要求を受信し、1つ以上のインメモリ又はニアメモリ計算ユニットに対するユーザ定義コマンドのシーケンスを生成して複合操作を調整することができ、アトミックに(すなわち、システム内の任意の他の要求元からの他の介入操作なしに)行うことができる。
【0051】
いくつかの実施形態は、システム、装置方法、及び/又は論理回路であり得る。本開示のコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(instruction-set-architecture、ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Smalltalk、C++等のオブジェクト配向プログラミング言語、並びに、「C」プログラミング言語又は同様のプログラミング言語等の従来の手続き型プログラミング言語等の1つ以上のプログラミング言語の任意の組み合わせで書き込まれたソースコード若しくはオブジェクトコードの何れかであり得る。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA)又はプログラマブル論理アレイ(PLA)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いることによって、コンピュータ可読プログラム命令を実行し得る。
【0052】
本開示の態様は、本開示のいくつかの実施形態による方法、装置(システム)及び論理回路のフロー図及び/又はブロック図を参照して本明細書に記載されている。フロー図及び/又はブロック図の各ブロック、並びに、フロー図及び/又はブロック図におけるブロックの組み合わせは、論理回路によって実施され得ることが理解されよう。
【0053】
また、論理回路は、プロセッサ、他のプログラマブルデータ処理装置又は他のデバイスに実装されて、コンピュータ実装プロセスを生成するために、プロセッサ、他のプログラマブル装置又は他のデバイス上で実行される一連の動作ステップを行わせることができ、そのため、コンピュータ、他のプログラマブル装置又は他のデバイス上で実行される命令は、フロー図及び/又はブロック図のブロックにおいて指定された機能/行為を実施する。
【0054】
図中のフロー図及びブロック図は、本開示の様々な実施形態によるシステム、方法及び論理回路の可能な実施形態のアーキテクチャ、機能及び動作示す。これに関して、フロー図又はブロック図の各ブロックは、指定された論理機能を実施するための1つ以上の実行可能命令を含む、命令のモジュール、セグメント又は部分を表すことができる。いくつかの代替的な実施形態では、ブロックに記載されている機能は、図に記載された順序から外れて発生する場合がある。例えば、連続して示される2つのブロックは、実際には実質的に同時に実行されてもよいし、ブロックは、関与する機能に応じて、逆の順序で実行されてもよい。ブロック図及び/又はフロー図の各ブロック、並びに、ブロック図及び/又はフロー図におけるブロックの組み合わせは、指定された機能若しくは行為を実行するか、又は、専用ハードウェアとコンピュータ命令との組み合わせを行う、専用ハードウェアベースのシステムによって実施することができることにも留意されたい。
【0055】
本開示は、その実施形態を参照して具体的に示され、説明されてきたが、以下の特許請求の範囲の趣旨及び範囲から逸脱することなく、形態及び詳細に対して様々な変更が行われ得ることを理解されたい。したがって、本明細書に記載された実施形態は、説明のためのものに過ぎず、本発明を限定するものではない。本開示は、詳細な説明ではなく添付の特許請求の範囲によって定義され、その範囲内の全ての差異は、本発明に含まれると解釈されるべきである。
【手続補正書】
【提出日】2024-02-16
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
ニアメモリコンピューティングを使用して複合操作のアトミック性を提供する方法であって、
順次操作セットをニアメモリ命令ストアに記憶することであって、前記順次操作は複合アトミック操作の構成操作である、ことと、
前記複合アトミック操作を発行するための要求を受信することと、
記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することと、を含む、
方法。
【請求項2】
前記複合アトミック操作に対応する前記順次操作セットを記憶するための要求を受信することを含み、
前記複合アトミック操作は、ユーザ定義の複合アトミック操作である、
請求項1の方法。
【請求項3】
前記ユーザ定義の複合アトミック操作に対する前記順次操作セットを記憶するための要求は、ホストシステムソフトウェア又はホストアプリケーションからのアプリケーションプログラミングインターフェース(API)コールを介して受信される、
請求項2の方法。
【請求項4】
前記順次操作セットをニアメモリ命令ストアに記憶することであって、前記順次操作は複合アトミック操作の構成操作である、ことは、
複数の複合アトミック操作のそれぞれに対応する複数の順次操作セットを記憶することと、
特定の複合アトミック操作を前記ニアメモリ命令ストア内の対応する順次操作セットの場所にマップするテーブルを記憶することと、を含む、
請求項1の方法。
【請求項5】
前記記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セット内の各操作を前記ニアメモリ命令ストアから読み取ることであって、前記ニアメモリ命令ストアは前記メモリコントローラに結合されている、ことと、
前記メモリコントローラが、前記ニアメモリ計算ユニットに対して各操作を発行することと、を含む、
請求項1の方法。
【請求項6】
前記記憶した前記順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セットを実行するためのコマンドをメモリデバイスに対して発行することを含み、
前記ニアメモリ命令ストアは、前記メモリデバイスに結合されている、
請求項1の方法。
【請求項7】
前記メモリコントローラは、一連のトリガを通して、前記ニアメモリ計算ユニット上での前記構成操作の実行を調整する、
請求項6の方法。
【請求項8】
前記ニアメモリ命令ストア及び前記ニアメモリ計算ユニットは、メモリデバイスとインターフェースするメモリコントローラに近接して結合されている、
請求項1の方法。
【請求項9】
前記順次操作セットは、1つ以上の算術演算を含む、
請求項1の方法。
【請求項10】
メモリコントローラは、前記順次操作セット内の全ての操作が開始されるまで待機してから、別のメモリアクセスをスケジュールする、
請求項1の方法。
【請求項11】
ニアメモリコンピューティングを使用して複合操作のアトミック性を提供するためのシステムであって、
メモリデバイスと、
前記メモリデバイスに結合されたニアメモリ計算ユニットと、
順次操作セットを記憶するニアメモリ命令ストアであって、前記順次操作は複合アトミック操作の構成操作である、ニアメモリ命令ストアと、
メモリコントローラと、を備え、
前記メモリコントローラは、
前記複合アトミック操作を発行するための要求を受信することと、
記憶した順次操作セットの実行を前記ニアメモリ計算ユニット上で開始することと、
を行うように構成されている、
システム。
【請求項12】
前記記憶した順次操作セットの実行を前記ニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記順次操作セット内の各操作を前記ニアメモリ命令ストアから読み取ることであって、前記ニアメモリ命令ストアはメモリコントローラに結合されている、ことと、
前記メモリコントローラが、前記ニアメモリ計算ユニットに対して各操作を発行することと、を含む、
請求項
11のシステム。
【請求項13】
前記記憶した順次操作セットの実行をニアメモリ計算ユニット上で開始することは、
メモリコントローラが、前記記憶した順次操作セットを実行するためのコマンドを前記メモリデバイスに対して発行することを含み、
前記ニアメモリ命令ストアは、前記メモリデバイスに結合されており、
前記メモリコントローラは、一連のトリガを通して、前記ニアメモリ計算ユニット上での前記構成操作の実行を調整する、
請求項
11のシステム。
【国際調査報告】