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

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

▶ 三星電子株式会社の特許一覧

特許7550614インメモリコンピューティングに対するデータ配置のための方法及びその方法が適用されたメモリモジュール
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-05
(45)【発行日】2024-09-13
(54)【発明の名称】インメモリコンピューティングに対するデータ配置のための方法及びその方法が適用されたメモリモジュール
(51)【国際特許分類】
   G06F 12/00 20060101AFI20240906BHJP
   G06F 9/34 20180101ALI20240906BHJP
   G06F 12/06 20060101ALI20240906BHJP
   G11C 5/04 20060101ALI20240906BHJP
   H10B 12/00 20230101ALI20240906BHJP
   H10B 99/00 20230101ALI20240906BHJP
【FI】
G06F12/00 560F
G06F9/34 350A
G06F9/34 350B
G06F12/06 540E
G11C5/04 220
H10B12/00 681F
H10B99/00 495
【請求項の数】 22
(21)【出願番号】P 2020191783
(22)【出願日】2020-11-18
(65)【公開番号】P2021128752
(43)【公開日】2021-09-02
【審査請求日】2023-09-22
(31)【優先権主張番号】62/975,577
(32)【優先日】2020-02-12
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】16/859,829
(32)【優先日】2020-04-27
(33)【優先権主張国・地域又は機関】US
【早期審査対象出願】
(73)【特許権者】
【識別番号】390019839
【氏名又は名称】三星電子株式会社
【氏名又は名称原語表記】Samsung Electronics Co.,Ltd.
【住所又は居所原語表記】129,Samsung-ro,Yeongtong-gu,Suwon-si,Gyeonggi-do,Republic of Korea
(74)【代理人】
【識別番号】110000051
【氏名又は名称】弁理士法人共生国際特許事務所
(72)【発明者】
【氏名】マラディ,クリシュナ テジャ
(72)【発明者】
【氏名】皇甫文沁
【審査官】北村 学
(56)【参考文献】
【文献】特開平06-215160(JP,A)
【文献】特開2003-272384(JP,A)
【文献】特開2008-123479(JP,A)
【文献】特開2019-028572(JP,A)
【文献】特開2019-075101(JP,A)
【文献】米国特許第05953738(US,A)
【文献】米国特許出願公開第2017/0255390(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 12/00
G06F 9/34
G06F 12/06
G11C 5/04
G11C 11/4093
H10B 12/00
H10B 99/00
(57)【特許請求の範囲】
【請求項1】
メモリモジュールであって、
ダイナミックランダムアクセスメモリ(DRAM)バンクを含むメモリダイと、
ホストプロセッサからオペランド及び命令を受信するメモリコントローラと、を備え、
前記DRAMバンクは、
複数のページに配列されたDRAMセルのアレイと、
算術論理ユニット(ALU)を含むインメモリコンピューティング(IMC)モジュールと、を含み、
前記メモリコントローラは、
前記命令に基づいて、複数のデータレイアウトの中から、前記DRAMセルのアレイの前記複数のページから前記IMCモジュールへの前記オペランドの配置を指定するためのデータレイアウトを決定し、
前記決定されたデータレイアウトに従って、前記DRAMバンクに前記オペランドを供給し、
前記命令に従って、前記オペランドに対して前記ALUによる演算を実行するように、前記DRAMバンクの前記IMCモジュールを制御するように構成され、
前記IMCモジュールは、オペランドレジスタを更に含み、
前記オペランドは、第1のオペランド及び第2のオペランドを含み、
前記複数のデータレイアウトの中から一つのオペランド(1OP)データレイアウトを決定した場合、
前記第1のオペランドは、前記DRAMバンクの外部から前記IMCモジュールに供給され、
前記第2のオペランドは、前記DRAMセルから前記オペランドレジスタを介して前記IMCモジュールに供給されることを特徴とするメモリモジュール。
【請求項2】
前記第1のオペランドは、複数の第1のタイルに分割され、
前記第2のオペランドは、複数の第2のタイルに分割され、
各タイルは、複数の値を含み、
前記メモリコントローラは、
前記オペランドレジスタに前記第1のオペランドの第1のタイルを格納し、
前記オペランドレジスタに格納された前記第1のオペランドの第1のタイル、及び前記第2のオペランドの複数の第2のタイルの各々に対して、前記ALUによる演算を実行するように更に構成されることを特徴とする請求項1に記載のメモリモジュール。
【請求項3】
前記第1のオペランドは、複数の第1のタイルに分割され、
前記第2のオペランドは、複数の第2のタイルに分割され、
各タイルは、複数の値を含み、
前記複数のデータレイアウトの中から同じページ(SR)データレイアウトを決定した場合
前記メモリコントローラは、前記DRAMセルの同じページに、一つ以上の前記第1のタイル及び一つ以上の前記第2のタイルを格納するよう構成されることを特徴とする請求項1に記載のメモリモジュール。
【請求項4】
前記メモリコントローラは、
前記オペランドレジスタに前記一つ以上の前記第1のタイルの中の一つの第1のタイルを格納し、
前記オペランドレジスタに格納された前記第1のタイル、及び前記DRAMセルのアレイの前記第1のタイルと同じページに格納された前記一つ以上の前記第2のタイルのそれぞれに対して、前記ALUによる演算を実行するように更に構成されることを特徴とする請求項3に記載のメモリモジュール。
【請求項5】
前記DRAMバンクの前記IMCモジュールは、アキュムレータを更に含み、
前記アキュムレータは、累積値を格納するように構成されたアキュムレータレジスタを含み、
前記アキュムレータは、
前記ALUによって演算された出力を受信し、
前記累積値と前記出力との合計で前記アキュムレータレジスタを更新するように構成され、
前記命令は、前記第1のオペランドと前記第2のオペランドとの内積を計算することを含み、
前記第1のタイルの中の一つの第1のタイルは、行データを格納し、
前記第2のタイルの中の一つの第2のタイルは、列データを含むことを特徴とする請求項4に記載のメモリモジュール。
【請求項6】
前記第1のタイルは、第1の数の値を有し、
前記第2のタイルは、第2の数の値を有し、
前記DRAMバンクの前記IMCモジュールは、出力バッファを含み、
前記出力バッファは、前記第1の数の値と前記第2の数の値との積以上を格納するためのサイズを有し、
前記命令は、前記第1のオペランドと前記第2のオペランドとの外積を計算することを含み、
前記第1のタイルの中の一つの第1のタイルは、行データを格納し、
前記第2のタイルの中の一つの第2のタイルは、列データを含むことを特徴とする請求項4に記載のメモリモジュール。
【請求項7】
前記第1のタイルは、第1の数の値を有し、
前記第2のタイルは、第2の数の値を有し、
前記DRAMバンクの前記IMCモジュールは、出力バッファを含み、
前記出力バッファは、前記第1の数の値及び前記第2の数の値の中の大きい方の値以上を格納するためのサイズを有し、
前記命令は、前記第1のオペランドと前記第2のオペランドとのテンソル積を計算することを含み、
前記第1のタイルの中の一つの第1のタイルは、行データを格納し、
前記第2のタイルの中の一つの第2のタイルは、列データを含むことを特徴とする請求項4に記載のメモリモジュール。
【請求項8】
前記第1のオペランドは、複数の第1のタイルに分割され、
前記第2のオペランドは、複数の第2のタイルに分割され、
各タイルは、複数の値を含み、
前記複数のデータレイアウトの中から異なるページ(DR)データレイアウトを決定した場合
前記メモリコントローラは、
前記DRAMセルのアレイの第1のページに前記第1のタイルのサブセットを格納し、
前記DRAMセルのアレイの第2のページに前記第2のタイルのサブセットを格納するよう構成されることを特徴とする請求項1に記載のメモリモジュール。
【請求項9】
前記メモリコントローラは、
前記オペランドレジスタに前記第1のページから前記第1のオペランドの第1のタイルを格納し、
前記オペランドレジスタに格納された前記第1のオペランドの第1のタイル、及び前記第2のページからの前記第2のオペランドの複数の第2のタイルのそれぞれに対して、前記ALUによる演算を実行するように更に構成されることを特徴とする請求項8に記載のメモリモジュール。
【請求項10】
前記DRAMバンクの前記IMCモジュールは、前記ALUによって演算された出力をバッファリングするように構成されたハードウェアのバッファを更に含むことを特徴とする請求項1に記載のメモリモジュール。
【請求項11】
前記ハードウェアのバッファは、前記IMCモジュールの結果レジスタのサイズの4倍以上のサイズを有することを特徴とする請求項10に記載のメモリモジュール。
【請求項12】
前記DRAMバンクの前記IMCモジュールは、アキュムレータを更に含み、
前記アキュムレータは、累積値を格納するように構成されたアキュムレータレジスタを含み、
前記アキュムレータは、
前記ALUによって演算された出力を受信し、
前記累積値と前記出力との合計で前記アキュムレータレジスタを更新するように構成されることを特徴とする請求項1に記載のメモリモジュール。
【請求項13】
前記メモリモジュールは、シリコン貫通電極によって接続されたメモリダイのスタックを含む高帯域幅メモリ(HBM)モジュールであり、
前記メモリダイのスタックは、前記メモリダイを含むことを特徴とする請求項1に記載のメモリモジュール。
【請求項14】
インメモリ(in-memory)計算を実行する方法であって、
メモリモジュールのメモリコントローラによって、ホストプロセッサからオペランド及び命令を受信する段階と、
前記メモリコントローラによって、前記命令に基づいて、複数のデータレイアウトの中からデータレイアウトを決定する段階と、
前記決定されたデータレイアウトに従って、前記メモリモジュールのダイナミックランダムアクセスメモリ(DRAM)バンクに前記オペランドを供給する段階と、
前記命令に従って、前記オペランドに対して算術論理ユニット(ALU)による演算を実行するように、前記DRAMバンクのインメモリコンピューティング(IMC)モジュールを制御する段階と、を有し、
前記DRAMバンクは、
複数のページに配列されたDRAMセルのアレイと、
前記ALUを含む前記IMCモジュールと、を含み、
前記データレイアウトは、前記DRAMセルのアレイの前記複数のページから前記IMCモジュールへの前記オペランドの配置を指定し、
前記IMCモジュールは、オペランドレジスタを更に含み、
前記オペランドは、第1のオペランド及び第2のオペランドを含み、
前記複数のデータレイアウトの中から一つのオペランド(1OP)データレイアウトを決定した場合、
前記第1のオペランドは、前記DRAMバンクの外部から前記IMCモジュールに供給され、
前記第のオペランドは、前記DRAMセルから前記オペランドレジスタを介して前記IMCモジュールに供給されることを特徴とする方法。
【請求項15】
前記第1のオペランドは、複数の第1のタイルに分割され、
前記第2のオペランドは、複数の第2のタイルに分割され、
各タイルは、複数の値を含み、
前記メモリコントローラは、
前記オペランドレジスタに前記第1のオペランドの第1のタイルを格納し、
前記オペランドレジスタに格納された前記第1のオペランドの第1のタイル、及び前記第2のオペランドの複数の第2のタイルの各々に対して、前記ALUによる演算を実行するように更に構成されることを特徴とする請求項14に記載の方法。
【請求項16】
前記第1のオペランドは、複数の第1のタイルに分割され、
前記第2のオペランドは、複数の第2のタイルに分割され、
各タイルは、複数の値を含み、
前記複数のデータレイアウトの中から同じページ(SR)データレイアウトを決定した場合
前記メモリコントローラは、前記DRAMセルの同じページに、一つ以上の前記第1のタイル及び1つ以上の前記第2のタイルを格納するよう構成されることを特徴とする請求項14に記載の方法。
【請求項17】
前記メモリコントローラは、
前記オペランドレジスタに前記一つ以上の前記第1のタイルの中の一つの第1のタイルを格納し、
前記オペランドレジスタに格納された前記第1のタイル、及び前記DRAMセルのアレイの前記第1のタイルと同じページに格納された前記一つ以上の前記第2のタイルのそれぞれに対して、前記ALUによる演算を実行するように更に構成されることを特徴とする請求項16に記載の方法。
【請求項18】
前記DRAMバンクの前記IMCモジュールは、アキュムレータを更に含み、
前記アキュムレータは、累積値を格納するように構成されたアキュムレータレジスタを含み、
前記アキュムレータは、
前記ALUによって演算された出力を受信し、
前記累積値と前記出力との合計で前記アキュムレータレジスタを更新するように構成され、
前記命令は、前記第1のオペランドと前記第2のオペランドとの内積を計算することを含み、
前記第1のタイルの中の一つの第1のタイルは、行データを格納し、
前記第2のタイルの中の一つの第2のタイルは、列データを含むことを特徴とする請求項17に記載の方法。
【請求項19】
前記第1のタイルは、第1の数の値を有し、
前記第2のタイルは、第2の数の値を有し、
前記DRAMバンクの前記IMCモジュールは、出力バッファを含み、
前記出力バッファは、前記第1の数の値と前記第2の数の値との積以上を格納するためのサイズを有し、
前記命令は、前記第1のオペランドと前記第2のオペランドとの外積を計算することを含み、
前記第1のタイルの中の一つの第1のタイルは、行データを格納し、
前記第2のタイルの中の一つの第2のタイルは、列データを含むことを特徴とする請求項17に記載の方法。
【請求項20】
前記第1のタイルは、第1の数の値を有し、
前記第2のタイルは、第2の数の値を有し、
前記DRAMバンクの前記IMCモジュールは、出力バッファを含み、
前記出力バッファは、前記第1の数の値及び前記第2の数の値の中の大きい方の値以上を格納するためのサイズを有し、
前記命令は、前記第1のオペランドと前記第2のオペランドとのテンソル積を計算することを含み、
前記第1のタイルの中の一つの第1のタイルは、行データを格納し、
前記第2のタイルの中の一つの第2のタイルは、列データを含むことを特徴とする請求項17に記載の方法。
【請求項21】
前記第1のオペランドは、複数の第1のタイルに分割され、
前記第2のオペランドは、複数の第2のタイルに分割され、
各タイルは、複数の値を含み、
前記複数のデータレイアウトの中から異なるページ(DR)データレイアウトを決定した場合
前記メモリコントローラは、
前記DRAMセルのアレイの第1のページに前記第1のタイルのサブセットを格納し、
前記DRAMセルのアレイの第2のページに前記第2のタイルのサブセットを格納するよう構成されることを特徴とする請求項14に記載の方法。
【請求項22】
前記メモリコントローラは、
前記オペランドレジスタに前記第1のページから前記第1のオペランドの第1のタイルを格納し、
前記オペランドレジスタに格納された前記第1のオペランドの第1のタイル、及び前記第2のページからの前記第2のオペランドの複数の第2のタイルのそれぞれに対して、前記ALUによる演算を実行するように更に構成されることを特徴とする請求項21に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、インメモリコンピューティングに対するデータ配置のためのシステム及び方法に関する。
【背景技術】
【0002】
高帯域幅メモリ(High Bandwidth Memory;HBM)は、グラフィックス処理装置(GPU)用高性能メモリとしてしばしば使用される。HBMは、一般的なDRAMに比べて非常に広いバスを有するという利点がある。現在のHBMアーキテクチャは、シリコン貫通電極(through silicon via;TSV)を使用して接続される複数のスタックDRAMダイ(例えば、ダイス(dice))と、HBMのバッファ及びGPUのHBMメモリコントローラとして機能するロジックダイとを含む。メモリ内のプロセス(例えば、インメモリ処理(in-memory processing))機能をメモリシステムに追加することによって、さらに性能が向上する。
【0003】
上述の内容は、本発明の実施形態の背景に対する理解を深めるためだけのものであり、従来技術を構成しない情報を含む。
【先行技術文献】
【特許文献】
【0004】
【文献】特開2019-075101号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明は、上記従来技術に鑑みてなされたものであって、本発明の目的は、メモリモジュールの性能を向上させることができる方法、及び性能が向上したメモリモジュールを提供することにある。
【課題を解決するための手段】
【0006】
上記目的を達成するためになされた本発明の一態様によるメモリモジュールは、複数のダイナミックランダムアクセスメモリ(DRAM)バンクを含むメモリダイと、メモリコントローラと、を含み、前記DRAMバンクの各々は、複数のページに配列されたDRAMセルのアレイと、前記複数のページの内の開かれたページの値を格納する行バッファと、入出力(IO)モジュールと、インメモリコンピューティング(IMC)モジュールと、を含み、前記ページの各々は複数の前記DRAMセルを含み、前記DRAMセルの各々はビット値を格納し、前記IMCモジュールは、前記行バッファ又は前記IOモジュールからオペランドを受信し、前記オペランド及び複数の算術論理演算から選択された一つの算術論理演算に基づいて出力を計算するように構成された算術論理ユニット(ALU)と、前記ALUによって計算された前記出力を格納するように構成された結果レジスタと、を含み、前記メモリコントローラは、ホストプロセッサから、第1のオペランド、第2のオペランド、及び命令を受信し、前記命令に基づいて、複数のデータレイアウトから一つのデータレイアウトを決定し、前記一つのデータレイアウトに従って、前記DRAMバンクに前記第1のオペランド及び前記第2のオペランドを供給し、前記命令に従って、前記第1のオペランド及び第2のオペランドに対して前記複数の算術論理演算のうち前記一つの算術論理演算を実行するように、前記DRAMバンクの前記IMCモジュールを制御するように構成されたことを特徴とする。
【0007】
前記複数のデータレイアウトは、一つのオペランド(1OP)データレイアウトを含み、前記第1のオペランドは、前記DRAMセルに書き込まれ、前記第2のオペランドは、前記ホストプロセッサから前記DRAMバンクの前記IMCモジュールに直接供給され得る。
【0008】
前記IMCモジュールは、オペランドレジスタをさらに含み、前記メモリコントローラは、さらに、前記オペランドレジスタに前記第1のオペランドの第1のタイルを格納し、前記オペランドレジスタに格納された前記第1のオペランドの第1のタイル、及び前記第2のオペランドの複数の第2のタイルの各々に対して、算術論理演算を実行するように構成され得る。
【0009】
前記第1のオペランドは複数の第1のタイルに分割され、前記第2のオペランドは複数の第2のタイルに分割され、前記タイルの各々は複数の値を含み、前記複数のデータレイアウトは同じ行(SR)データレイアウトを含み、前記メモリコントローラは、前記DRAMセルのアレイの同じページに一つ以上の前記第1のタイル及び一つ以上の前記第2のタイルを格納し得る。
【0010】
前記IMCモジュールは、オペランドレジスタをさらに含み、前記メモリコントローラは、さらに、前記オペランドレジスタに前記一つ以上の第1のタイルの内の一つの第1のタイルを格納し、前記オペランドレジスタに格納された前記第1のオペランド、及び前記DRAMセルのアレイの前記第1のタイルと同じページに格納された一つ以上の前記第2のタイルのそれぞれに対して、算術論理演算を実行するように構成され得る。
【0011】
前記DRAMバンクの前記IMCモジュールは、アキュムレータ(accumulator)をさらに含み、前記アキュムレータは、累積値を格納するように構成されたアキュムレータレジスタを含み、前記アキュムレータは、前記ALUによって計算された出力を受信し、累積値と出力との合計で前記アキュムレータレジスタを更新するように構成され、前記命令は、前記第1のオペランドと前記第2のオペランドの内積を計算することを含み、前記第1のタイルの内の前記一つの第1のタイルは行データを格納し、前記第2のタイルの内の一つの第2のタイルは列データを含み得る。
【0012】
前記第1のタイルは第1の数の値を有し、前記第2のタイルは第2の数の値を有し、前記DRAMバンクの前記IMCモジュールは、出力バッファを含み、前記出力バッファは、前記第1の数の値と前記第2の数の値の積以上を格納するためのサイズを有し、前記命令は、前記第1のオペランドと前記第2のオペランドの外積を計算することを含み、前記第1のタイルの内の前記一つの第1のタイルは行データを格納し、前記第2のタイルの内の一つ第2のタイルは列データを含み得る。
【0013】
前記第1のタイルは第1の数の値を有し、前記第2のタイルは第2の数の値を有し、前記DRAMバンクの前記IMCモジュールは、出力バッファを含み、前記出力バッファは、前記第1の数の値と前記第2の数の値の内の大きい方の値以上を格納するためのサイズを有し、前記命令は、前記第1のオペランドと前記第2のオペランドのテンソル積を計算することを含み、前記第1のタイルの内の前記一つの第1のタイルは行データを格納し、前記第2のタイルの内の一つの第2のタイルは列データを含み得る。
【0014】
前記第1のオペランドは複数の第1のタイルに分割され、前記第2のオペランドは複数の第2のタイルに分割され、前記タイルの各々は複数の値を含み、前記複数のデータレイアウトは、異なる行(DR)データレイアウトを含み、前記メモリコントローラは、前記DRAMセルのアレイの第1のページに前記第1のタイルのサブセットを格納し、前記DRAMセルのアレイの第2のページに前記第2のタイルのサブセットを格納し得る。
【0015】
前記IMCモジュールは、オペランドレジスタをさらに含み、前記メモリコントローラは、さらに、前記オペランドレジスタの前記第1のページから前記第1のオペランドの第1のタイルを格納し、前記オペランドレジスタに格納された前記第1のオペランド、及び前記第2のページから前記第2のオペランドの複数の第2のタイルのそれぞれに算術論理演算を実行するように構成されることが好ましい。
【0016】
前記DRAMバンクの各々の前記IMCモジュールは、前記ALUによって計算された前記出力をバッファリングするように構成されたバッファをさらに含むことが好ましい。
【0017】
前記バッファは、前記結果レジスタのサイズの4倍以上のサイズを有し得る。
【0018】
前記DRAMバンクの各々の前記IMCモジュールは、アキュムレータをさらに含み、前記アキュムレータは、累積値を格納するように構成されたアキュムレータレジスタを含み、前記アキュムレータは、前記ALUによって計算された前記出力を受信し、前記累積値と前記出力との合計で前記アキュムレータレジスタを更新するように構成されることが好ましい。
【0019】
前記メモリモジュールは、シリコン貫通電極によって接続されたメモリダイのスタックを含む高帯域幅メモリ(HBM)モジュールであり、前記メモリダイのスタックは、前記メモリダイを含み得る。
【0020】
上記目的を達成するためになされた本発明の一態様による方法は、インメモリ計算を実行する方法において、メモリモジュールのメモリコントローラによって、第1のオペランド、第2のオペランド、命令を受信する段階と、前記メモリコントローラによって、前記命令に基づいて複数のデータレイアウトから一つのデータレイアウトを決定する段階と、前記データレイアウトに従って、前記メモリモジュールの少なくとも一つのDRAMバンクに前記第1のオペランド及び前記第2のオペランドを供給する段階と、前記命令に従って、前記第1のオペランド及び前記第2のオペランドに対して複数の算術論理演算の内の一つの算術論理演算を実行するように、前記DRAMバンクのIMCモジュールを制御する段階と、を含み、前記DRAMバンクの各々は、複数のページに配列されたDRAMセルのアレイと、前記複数のページの内の開かれたページの値を格納する行バッファと、IOモジュールと、前記IMCモジュールと、を含み、前記ページの各々は前記DRAMセルを含み、前記DRAMセルの各々はビット値を格納し、前記IMCモジュールは、前記行バッファ又は前記IOモジュールからオペランドを受信し、前記オペランド及び複数の算術論理演算から選択された一つの算術論理演算に基づいて出力を計算するように構成されたALUと、前記ALUによって計算された前記出力を格納するように構成された結果レジスタと、を含むことを特徴とする。
【0021】
前記複数のデータレイアウトは、一つのオペランド(1OP)データレイアウトを含み、前記第1のオペランドは、前記DRAMセルに書き込まれ、前記第2のオペランドは、前記ホストプロセッサから前記DRAMバンクの前記IMCモジュールに直接供給され得る。
【0022】
前記IMCモジュールは、オペランドレジスタをさらに含み、前記メモリコントローラは、さらに、前記オペランドレジスタに前記第1のオペランドの第1のタイルを格納し、前記オペランドレジスタに格納された前記第1のオペランドの第1タイル、及び前記第2のオペランドの複数の第2のタイルの各々に対して、算術論理演算を実行するように構成され得る。
【0023】
前記第1のオペランドは複数の第1のタイルに分割され、前記第2のオペランドは複数の第2のタイルに分割され、前記タイルの各々は複数の値を含み、前記複数のデータレイアウトは、同じ行(SR)データレイアウトを含み、前記メモリコントローラは、前記DRAMセルのアレイの同じページに一つ以上の前記第1のタイル及び1つ以上の前記第2のタイルを格納し得る。
【0024】
前記IMCモジュールは、オペランドレジスタをさらに含み、前記メモリコントローラは、さらに、前記オペランドレジスタに前記一つ以上の第1のタイルの内の一つの第1のタイルを格納し、前記オペランドレジスタに格納された前記第1のオペランドと、前記DRAMセルのアレイの前記第1のタイルと同じページに格納された前記一つ以上の第2のタイルのそれぞれに対して、算術論理演算を実行するように構成され得る。
【0025】
前記少なくとも一つのDRAMバンクの前記IMCモジュールは、アキュムレータをさらに含み、前記アキュムレータは、累積値を格納するように構成されたアキュムレータレジスタを含み、前記アキュムレータは、前記ALUによって計算された前記出力を受信し、前記累積値と前記出力との合計で前記アキュムレータレジスタを更新するように構成され、前記命令は、前記第1のオペランドと前記第2のオペランドの内積を計算する段階を含み、前記第1のタイルの内の前記一つの第1のタイルは行データを格納し、前記第2のタイルの内の一つの第2のタイルは列データを含み得る。
【0026】
前記第1のタイルは第1の数の値を有し、前記第2のタイルは第2の数の値を有し、前記少なくとも一つのDRAMバンクの前記IMCモジュールは、出力バッファを含み、前記出力バッファは、前記第1の数の値と前記第2の数の値の積以上を格納するためのサイズを有し、前記命令は、前記第1のオペランドと前記第2のオペランドの外積を計算する段階を含み、前記第1のタイルの内の前記一つの第1のタイルは行データを格納し、前記第2のタイルの内の一つの第2のタイルは列データを含み得る。
【0027】
前記第1のタイルは第1の数の値を有し、前記第2のタイルは第2の数の値を有し、前記少なくとも一つのDRAMバンクの前記IMCモジュールは、出力バッファを含み、前記出力バッファは、前記第1の数の値と前記第2の数の値の内の大きい方の値以上を格納するためのサイズを有し、前記命令は、前記第1のオペランドと前記第2のオペランドのテンソル積を計算する段階を含み、前記第1のタイルの前記一つの第1のタイルは行データを格納し、前記第2のタイルの内の一つの第2のタイルは列データを含み得る。
【0028】
前記第1のオペランドは複数の第1のタイルに分割され、前記第2のオペランドは複数の第2のタイルに分割され、前記タイルの各々は複数の値を含み、前記複数のデータレイアウトは、異なる行(DR)データレイアウトを含み、前記メモリコントローラは、前記DRAMセルのアレイの第1のページに前記第1のタイルのサブセットを格納し、前記DRAMセルのアレイの第2のページに前記第2のタイルのサブセットを格納し得る。
【0029】
前記IMCモジュールは、オペランドレジスタをさらに含み、前記メモリコントローラは、さらに、前記オペランドレジスタの前記第1のページから前記第1のオペランドの第1のタイルを格納し、前記オペランドレジスタに格納された前記第1のオペランド、及び前記第2のページから前記第2のオペランドの複数の第2のタイルのそれぞれに対して、算術論理演算を実行するように構成されることが好ましい。
【発明の効果】
【0030】
本発明によるインメモリコンピューティングに対するデータ配置のための方法及びその方法が適用されたメモリモジュールによれば、メモリモジュールの性能を向上させることができる。
【図面の簡単な説明】
【0031】
図1】本発明の一実施形態によるメモリ(例えば、HBM)システムのアーキテクチャを示すブロック図である。
図2A】本発明の一実施形態による、埋め込み算術論理ユニット(embedded ALU)を有するメモリバンクの概略ブロック図である。
図2B】本発明の一実施形態によるDRAMセルの例を示す回路図である。
図2C】DRAMセルのアレイ、行デコーダ、IOSA、IMCモジュール、及び列デコーダを含む、本発明の一実施形態によるDRAMバンクの概略図である。
図3】本発明の一実施形態によるDRAMブロックのアレイを示す概略図である。
図4A】第1のオペランド(行列A)がDRAMに格納され、第2のオペランド(行列B)が内蔵されたメモリモジュールの外部からブロードキャストされる場合のGEMMに対するデータの配置を、本発明の一実施形態による統合されたインメモリコンピューティング(IMC)と共に概略的に示す図である。
図4B】双方のオペランド(行列A及び行列B)がメモリモジュールのDRAMの同じページに格納されている場合のGEMMに対するデータの配置を、本発明の一実施形態による統合されたIMCと共に概略的に示す図である。
図4C】双方のオペランド(行列A及び行列B)がメモリモジュールのDRAMの異なるページに格納されている場合のGEMMに対するデータの配置を、本発明の一実施形態による統合されたIMCと共に概略的に示す図である。
図5A】一つのオペランド(1OP)データレイアウトにおける行列Aの第1の行と行列Bの第1の列との乗算の概略図である。
図5B】1OPデータレイアウトにおける行列Aの第1の行の第1の値と行列Bの各列の第1の値との乗算をデータの再利用と共に示した概略図である。
図6A】同じ行(SR)データレイアウトにおける行列Aの第1の行と行列Bの第1の列との乗算の概略図である。
図6B】SRデータレイアウトにおける行列Aの第1の行の第1の値と行列Bの各列の第1の値に対するデータの再利用による乗算の概略図である。
図7A】異なる行(DR)データレイアウトにおける行列Aの第1の行と行列Bの第1列との乗算の概略図である。
図7B】DRデータレイアウトにおける行列Bの各列の第1の値と行列Aの第1の行の第2の値により、行列Bの各列の第2の値による行列Aの第1の行の第1の値のデータ再利用による乗算の概略図である。
図8】DRAMバンクのIMCモジュールの概略ブロック図である。
図9】本発明の一部の実施形態による、同じ行(SR)レイアウトを使用する計算を説明するためのGEMMの一例の概略図である。
図10】本発明の実施形態による、IMCモジュールを有するDRAMバンク内のデータの配置を制御するための方法を示すフローチャートである。
【発明を実施するための形態】
【0032】
本発明の特徴及びそれを達成するための方法は、以下の実施形態の詳細な説明及び図面を参照することにより、容易に理解される。以下、図面を参照しながら実施形態をより詳細に説明するが、図面全体にわたって同じ参照番号は同じ要素を指す。しかし、本発明は、様々な異なる形態で実施することができ、本明細書で説明する実施形態に限定されない。むしろ、これらの実施形態は、本発明が徹底且つ完全なものとなり、本発明の態様及び特徴が当業者に十分に伝わるように例として提供するものである。したがって、本発明の態様及び特徴の完全な理解のために、当業者に不必要なプロセス、要素、及び技術は説明しない。特に記載がない限り、同様の参照番号は、図面及び明細書に記載された説明全体を通じて同様の要素を指すので、その説明は繰り返さない。図面において、要素、層、及び領域の相対的なサイズは、明確にするために誇張されている場合がある。
【0033】
以下の説明では、説明を目的として、様々な実施形態の完全な理解のために、多数の特定の詳細な説明を提示する。しかし、様々な実施形態は、これらの特定の詳細な説明がなくても実施でき、又は一つ以上の同等の構成で実施してもよい。他方、公知の構造及び装置は、様々な実施形態を曖昧にすることを避けるために、ブロック図の形で示す。
【0034】
本明細書で使用される用語は、特定の実施形態を説明するためのものであり、本発明を限定することを意図するものではない。単数形の表現は、文脈がそうでないことを明確に示さない限り、複数形の表現も含む。本明細書で使用される「含む」及び「有する」などの用語は、開示する特徴、数字、ステップ、演算、要素、及び/又は構成要素の存在を特定するが、一つ以上の他の特徴、数字、ステップ、演算、要素、構成要素、及び/又はそれらの組み合わせの存在又は追加を排除するものではない。本明細書で使用される用語「及び/又は」は、一つ以上の関連して挙げられた項目の任意の且つ全ての組み合わせを含む。
【0035】
本明細書に記載する本発明の実施形態による電子又は電気装置及び/又は任意の他の関連装置又は構成要素は、任意の適切なハードウェア、ファームウェア(例えば、特定用途向け集積回路(Application-Specific Integrated Circuit))、ソフトウェア、又はそれらの組み合わせを利用して実装される。例えば、一部の環境では、これらの装置の様々な構成要素は、一つの集積回路(IC)チップ上に、又は別のICチップ上に形成される。また、これらの装置の様々な構成要素は、フレキシブルプリント回路フィルム、テープキャリアパッケージ(TCP)、プリント回路基板(PCB)上に実装されてもよく、又は一つの基板上に形成されてもよい。さらに、これらの装置の様々な構成要素は、コンピュータプログラム命令を実行し、本明細書で説明する様々な機能を行うために他のシステムの構成要素と相互作用する一つ以上のコンピューティングデバイス内における一つ以上のプロセッサ上で実行されるプロセス又はスレッドである。コンピュータプログラム命令は、例えば、ランダムアクセスメモリ(RAM)等の標準的なメモリデバイスを使用してコンピューティングデバイス内に実装されるメモリに格納される。コンピュータプログラム命令はまた、例えば、CD-ROM、フラッシュドライブなどの他の非一時的なコンピュータ読取可能媒体に格納される。また、当業者は、本発明の例示的な実施形態の思想及び範囲内で様々なコンピューティングデバイスの機能が単一のコンピューティングデバイスに結合若しくは統合されるか、又は特定のコンピューティングデバイスの機能が一つ以上の他のコンピューティングデバイスにわたって分散されることを認識すべきである。
【0036】
特に定義しない限り、本明細書で使用する技術用語又は科学用語を含むすべての用語は、本発明が属する技術分野の通常の知識を有する者が一般に理解するものと同じ意味を有する。また、通常使用される辞書に定義されているような用語は、関連技術及び/又は本明細書の文脈上の意味と一致すると解釈され、本明細書で明らかに定義しない限り、理想的又は過度に公式的な意味に解釈されない。
【0037】
本発明の一部の態様は、一般に、インメモリコンピューティング(in-memory compute)の文脈におけるメモリ内のデータ配置の管理に関する。インメモリコンピューティングに関する内容の一例は、メモリを含むDRAM(Dynamic Random Access Memory)ダイと、HBMロジックダイ上のALU及びメモリコントローラとを含むHBMシステムであり、ここで、HBMロジックダイ上のALUは、インメモリコンピューティングを実行する。HBMロジックダイのメモリコントローラは、DRAMダイのメモリへのデータの格納、及びDRAMダイからのデータの読み取りを制御する。
【0038】
明確化のため、本明細書で使用する用語「インメモリコンピューティング」は、DRAMダイに格納されたデータを使用して、外部データバスを通過することなく、高帯域幅メモリモジュール等のメモリモジュール内で計算を実行することを意味する。比較コンピュータシステムでは、プロセッサは外部DRAMデータバスを介してメインメモリ(例えば、DRAM)に接続され、メインメモリからのデータへのアクセスは、プロセッサ内のレジスタファイル内のデータ及び/又はプロセッサにより近いハードウェアキャッシュ(例えば、L1キャッシュ、L2キャッシュ)内のデータへのアクセスよりも大幅に遅い(例えば、数十倍遅い)。メモリ又はその近くにさらなるプロセッサ(例えば、「インメモリプロセッサ(in-memory processor)」)を配置することで、外部バスを通過することによって惹起される遅延を回避することができ、これにより、高性能の計算が達成される。
【0039】
本発明の実施形態の態様は、ALU等の計算回路(computational circuitry)をDRAMバンクと同じダイ上に配置する(例えば、それぞれのDRAMバンクのセンス増幅器又は行バッファに直接接続される)ことに関する。
【0040】
DRAMモジュールの設計及び性能特性により、メモリ内のデータの特定の配列は、インメモリコンピューティングの性能に影響を与え得る。したがって、本発明の実施形態の一部の態様は、メモリモジュール(例えば、HBMメモリモジュール)のDRAMモジュール内にデータを配置するためのシステム及び方法に関し、ここでデータの配置は、IMCモジュールによって実行される計算の特性に基づいて制御される。
【0041】
図1は、本発明の一実施形態によるメモリ(例えば、HBM)システムのアーキテクチャを示すブロック図である。
【0042】
図1を参照すると、本発明の実施形態は、FIM(Function-In-Memory)メモリシステム100のためのシステムを提供する。メモリシステム100(又は、HBMシステム)は、メモリモジュール110(又は、HBMモジュール)に統合されるさらなる(additional)コンピューティングリソースをサポートする。例えば、様々な実施形態において、メモリシステム100は、一部のデータコンピューティング及び移動がメモリ内で実行されるようにし、且つ大容量メモリスクラッチパッド(high-capacity memory scratchpad)を提供する。メモリシステム100は、グラフィックス処理装置(GPU)又は中央処理装置(CPU)等のホストプロセッサ170に接続された少なくとも一つのメモリモジュール110を含む。様々な実施形態において、メモリモジュール110は、内部メモリバス130を介してメモリコントローラ140(例えば、ロジックダイ上)に接続された一つ以上のDRAMダイ120を含む。様々な実施形態において、ホストプロセッサ170は、メモリモジュール110とインタフェースするためのホストメモリコントローラ180(又は、ホストコントローラ)を含む。しかし、本発明の実施形態は、これに限定されるものではない。たとえば、ホストメモリコントローラ180は、ホストプロセッサ170から分離されてもよい(例えば、ホストプロセッサ170とは別のダイ又は同じダイとして)。
【0043】
様々な実施形態によると、メモリコントローラ140は、ホストプロセッサ170からの命令の実行を調整するように構成される。命令は、通常の命令とFIM命令の両方を含む。例えば、通常の命令(例えば、メモリ内機能(function-in-memory;FIM)命令ではなく、伝統的なロード及びストア機能)は、ホストメモリコントローラ180によって送信され、メモリコントローラ140によって受信されて、通常の方法で実行される。例えば、通常の命令は、外部バス190を介して受信したデータをDRAMダイ120に格納する命令、及びDRAMダイ120からデータを検索し、外部バス190を介してホストプロセッサ170にデータを送信する命令を含む。一部の実施形態において、通常の命令及びFIM命令は、DRAMダイの特定の位置(例えば、特定のバンクの特定のページ)にデータを格納する動作を含む。これらのデータは2つの異なるオペランドを含み、ここで、それぞれのオペランドは複数の値(例えば、浮動小数点又は整数値)を含み、以下でより詳細に説明するように、これらのオペランドの値は、様々なデータ配置戦略に従って、DRAMダイの異なる位置に分散して配置(distribute)される。
【0044】
本発明の実施形態の態様は、IMC(in-memory compute)の使用に関する。いくつかの比較HBMシステムは、DRAMダイ120の外部(例えば、メモリコントローラ140に配置)にあるALUを含み、ALUが外部バス190を通過することなく、1つ以上のDRAMダイ120に格納されたデータに対する演算(operation)(例えば、算術演算(arithmetic operations))を実行できるように、DRAMダイ120のメモリバンクによって共有される。例えば、メモリコントローラ140は、DRAMダイ120の異なる部分の間でデータを移動又はコピーするために、データ移動演算(例えば、ロード/ストア ペア命令(load/store pair instructions))を実行する。例えば、メモリコントローラは、ALUを利用する計算FIM命令(例えば、アトミック命令及びALU命令)の実行を調整することで、元々は複数の通常命令であったFIM命令を実行する。別の例として、一部の場合、ホストプロセッサ170から受信したFIM命令は、IMCが統合されたメモリモジュールに、学習済みの機械学習モデル(例えば、ニューラルネットワーク(neural network))を使用して、ニューラルネットワークの訓練中に逆伝播(backpropagation)を実行させるか、又は2つの行列を乗算するために、供給された入力に基づいて推論を計算する等の特定の計算を実行させる。このような場合、メモリコントローラ140は、受信したデータ(例えば、命令のオペランド)をDRAMバンクの特定のページに格納し、FIM命令に関連するデータを格納するDRAMバンクに特定のALU演算を提供することによって、これらの命令の実行を調整する。メモリコントローラ140は、特定のFIM命令を実行する際の計算性能を向上させる方法で、受信したデータ(オペランド)をDRAMバンクの特定のページに配置する。その結果は、DRAMダイ120に格納されるか、又は外部バス190を介してホストプロセッサ170に戻される。
【0045】
本発明の実施形態の一部の態様は、IMCモジュールをDRAMダイ120のメモリバンクに統合することによってメモリ境界演算を加速することに関し、これにより、DRAMダイ120とメモリコントローラ140との間で内部メモリバス130を通過すること(traversal)を避ける。例えば、IMCモジュールは、データを保持するDRAMバンクと同じ物理的半導体ダイ上にある。それぞれのDRAMバンクは、関連するIMCモジュールを有し、それによって、データが内部メモリバス130をメモリコントローラに通過することなく(例えば、DRAMバンクからデータを送信することなく)、DRAMバンクに格納されたデータに対して計算が実行できる。また、上記計算は、DRAMバンクのIMCモジュール間で並列化(parallelized across)できる。
【0046】
本発明の実施形態の態様は高帯域幅メモリに関して説明しているが、実施形態はこれに限定されず、他のタイプのDRAMシステムにおいて、DRAMダイにIMCモジュールを統合することにも適用される。
【0047】
図2Aは、本発明の一実施形態による、埋め込み算術論理ユニット(embedded ALU)を有するメモリバンクの概略ブロック図である。図2Aに示すように、DRAMバンク200は、行及び列(又はページ及び列)に配列されたDRAMセル210のアレイを含む。図2Aに例示するように、DRAMバンク200は、n行(又はページ)及びm列に配列されたDRAMセル210を含む。複数のビットラインB1~Bmは列方向に沿って延在し、複数の行イネーブルライン(row enable lines)R1~Rnはアレイの行方向に沿って延在し、ビットラインと交差する。各ビットラインは、対応する列のすべてのセル(DRAMセル210)に接続される(例えば、アレイのi番目の列のすべてのセルは、ビットラインBiに接続される)。同様に、各行イネーブルラインR1~Rnは、対応する行の各DRAMセル210に接続される(例えば、アレイのj番目の行又はページのすべてのセルは、行イネーブルラインRjに接続される)。また、DRAMバンク200のDRAMセル210の行は、DRAMページと呼ばれる。
【0048】
図2Bは、本発明の一実施形態によるDRAMセルの例を示す回路図である。それぞれのDRAMセル210は、一般に、データ電圧を格納するためのコンデンサ212(例えば、ビット値、ここで各コンデンサは0ビットを表す電圧又は1ビットを表す電圧を格納する)と、コンデンサ212にデータ電圧を送信するためのスイッチ214とを含むものとしてモデル化される。図2Bに示す特定のDRAMセル210は、アレイのi番目の行及びj番目の列にある。したがって、図2Bに示すDRAMセル210のスイッチ214は、i番目のビットラインBiとコンデンサ212の一方の端子との間に接続され、コンデンサ212の他方の端子は接地に接続される。図2Bに示すように、DRAMセル210のスイッチ214のゲート電極は、j番目の行イネーブルラインRjに接続され、スイッチ214がオンになると、コンデンサ212がビットラインBiに接続される。
【0049】
図2Aを再び参照すると、DRAMバンク200は、行イネーブルラインR1~Rnに接続された行デコーダ220を含み、行デコーダ220は、例えば、メモリコントローラ140から供給される行アドレスに対応する行イネーブルラインの特定の一つに、行イネーブル信号を供給するように構成される。DRAMセル210のアレイの特定の行r(又はページ)にデータを書き込むか又は読み取る際、行デコーダ220は、特定の行(又はページ)に対応する行イネーブルラインに行イネーブル信号を供給する。データを書き込む際には、特定の行(又はページ)がイネーブルされている間、書き込まれるデータに対応する電圧がビットラインB1~Bmに供給される。同様に、DRAMセル210のアレイの特定の行(又はページ)からデータを読み取る際、コンデンサ212に格納された電圧に対応する電圧は、ビットラインB1~Bmに沿って送信され、センス増幅器232を含む入出力センス増幅器層230(又はIOSA)によって読み取られる。センス増幅器232の各センス増幅器は、ビットラインの内の対応する一つに接続される(例えば、センス増幅器232は、m個のセンス増幅器を含む)。例えば、一部の実施形態において、DRAMセル210のアレイは、8,192個の列、及び8,192個の対応するセンス増幅器232に接続された8,192個の対応するビットライン(例えば、ビットラインB1~B8192)を含む(例えば、各ページには8,192ビット又は8キロビットのデータを格納できる)。センス増幅器232は、「プリチャージ(precharge)」コマンドによって消去されるまで、現在の行(又はページ)から読み取られたデータを格納するので、センス増幅器232は「行バッファ(row buffer)」と呼ばれる。
【0050】
列デコーダ240は、マルチプレクサ234を使用してデータ列の一サブセット(subset)を選択するために使用され、読み取られたデータは、そのデータの計算を実行するために、グローバルIO層236を介してIMCモジュール250に供給される。例えば、一部の実施形態において、列デコーダ240及びマルチプレクサ234は、DRAMセル210の8,192個の列から256ビット(256b)のデータの選択を可能にする。
【0051】
センス増幅器232に現在格納されているページとは異なるDRAMバンク200のページからデータをロードする場合、「プリチャージ」(PRE)コマンドは現在のページを閉じ、次のアクセスのためにDRAMバンク200を準備するために使用される。次に、「活性化(activate)」(ACT)コマンドを使用して、DRAMバンクの特定の行又はページを開き、その開かれたページのデータをセンス増幅器232に格納する。その後、データがセンス増幅器232から読み取られて(READ)、IMCモジュール250に送信される。
【0052】
一方、すでに開いているページからIMCモジュール250にデータをロードする場合には、例えば、列デコーダ240を使用してセンス増幅器232に既に格納されているデータの適切なサブセットを選択することにより(PRE及びACTコマンドは省略してもよい)、READコマンドでデータをロードするのに十分である。
【0053】
様々な実施形態によれば、IMCモジュール250(又はALU&Reg)は、ALU252及び1つ以上のレジスタを含む。図2Aに示す実施形態において、IMCモジュール250は、オペランドレジスタ(Rop)254(又は入力バッファ)及び結果レジスタ(Rz)256を含む。マルチプレクサ257及び258は、(例えば、ALU252に対する第1のオペランド及び第2のオペランドとして)ALU252の2つの入力へのデータの流れを制御するために使用される。例えば、図2Aに示す実施形態において、オペランドレジスタ(Rop)254は、ALU252の第1のオペランド入力に接続され、第1のマルチプレクサ257は、センス増幅器232からグローバルIO層236を介して、又は入出力(IO)モジュール260(又は、書き込み入力/出力及び読み取り入力/出力、又はWIO及びRIO)を介して、外部ソース(例えば、ホストプロセッサ)からのデータを書き込むために、オペランドレジスタ(Rop)254に接続される。図2Aに示す実施形態のように、第2のマルチプレクサ258もまた、グローバルIO層236を介してセンス増幅器232から、又はIOモジュール260を介して外部ソースから、ALU252の第2のオペランド入力に直接データを供給するように構成される。ALU252は、その計算を結果レジスタ(Rz)256に出力し、データは、結果レジスタ(Rz)256からグローバルIO層236を介してDRAMセル210に書き戻されるか、又はIOモジュール260(又は、WIO及びRIO)を介してホストプロセッサ170に送信される。
【0054】
一部の実施形態によると、ALU252は、様々な計算演算(例えば、簡単な計算コマンド)を実行するように構成される。例えば、ALU252は、算術演算、ビット単位(bitwise)、シフト演算(shift operations)等を実行するように構成された16ビットALU、32ビットALU、又は64ビットALUである。様々な実施形態において、ALU252は、整数演算(interger operations)、浮動小数点演算(floating point operations)、又はその両方を実行する回路を含む。例えば、ALU252は、ADD(+)、SUBTRACT(-)、MULTIPLY(×)、及びDIVIDE(÷)等の算術演算、AND(&)、OR(|)、XOR(^)、及びNOT(~)演算、並びにテンソル演算(tensor operations)等のビット演算を実行するように構成される。また、一部の実施形態において、ALU252は、単一命令、複数データ(SIMD)、又はデータのベクトルに対する演算を並列に実行するためのベクトル命令を実装する。本発明の実施形態によるALU252によって実装されるベクトル演算の例は、内積(’)、外積
、整流線形ユニット(ReLU)、平方(vsSqr)、及び平方根(vsSqrt)を含む。ALU252は、アトミック及び非アトミック演算に利用される。以下の表1は、本発明の一部の実施形態によるALU252によってサポートされる演算を挙げている。
【0055】
【表1】
【0056】
図2Cは、上述したDRAMセル210のアレイ、行デコーダ220、入出力センス増幅器層(IOSA)230、IMCモジュール(ALU&Reg)250、及び列デコーダ240を含む、本発明の一実施形態によるDRAMバンク200の概略図である。
【0057】
図3は、本発明の一実施形態によるDRAMブロックのアレイを示す概略図である。図3に示す実施形態のように、16個のDRAMバンク200は、4×4アレイに配列され、DRAMバンクA~Pとしてラベル付けされ、BG0(DRAMバンクA、B、C、及びDを含む)、BG1(DRAMバンクE、F、G、及びHを含む)、BG2(DRAMバンクI、J、K、及びLを含む)、並びにBG3(DRAMバンクM、N、O、及びPを含む)としてラベル付けされた4つのバンクグループに配列される。図2Cに関して上述したように、図3に示す各DRAMバンク200は、DRAMダイ120内で(例えば、外部バスを通過することなく)計算を実行するためのIMCモジュール250を含む。また、図3に示すように、DRAMダイ120は、外部ソースからのデータを(例えば、DRAMダイ120を複数の他のスタック型DRAMダイ120及びメモリコントローラ140に接続するシリコン貫通電極又はTSVを介して)ブロックの4つの列に多重化するように構成されたマルチプレクサ300(例えば、4:1マルチプレクサ)をさらに含む。例えば、マルチプレクサ300は、すべてのDRAMバンク200に、256ビット(256b)データベクトルをブロードキャスト(broadcast)するか、又はDRAMバンク200の特定の列(BG0、BG1、BG2、又はBG3)にデータベクトルを供給するために使用される。
【0058】
DRAMダイ120に統合されたIMCモジュール250等のIMCを含むメモリシステム100は、演算を実行するために、データが外部バス(例えば、バス190)のボトルネックを通過する必要がないので、メモリ境界のホスト演算の性能を加速させる。ただし、IMCは、依然として、ALUパイプライン処理(pipelining)及びDRAMプロセスの形態のコンピューティングオーバーヘッド、並びにデータ配置及びDRAMタイミングの形態のメモリオーバーヘッドに遭遇する。
【0059】
したがって、本発明の実施形態の態様は、統合されたIMCモジュール250によってインメモリコンピューティングを実行する際に、DRAMタイミングオーバーヘッドの影響を回避又は減少させるために、DRAM内にデータを配置するシステム及び方法に関する。本発明の実施形態の一部の態様は、改善された性能を達成するためのソフトウェア及びハードウェアの共同設計に関する。
【0060】
様々な実施形態において、メモリコントローラ140は、DRAMダイ120への演算及びDRAMダイ120からの演算を提供し、データの入力及び出力を管理する。したがって、本発明の実施形態の一部の態様は、ホストプロセッサ170によってメモリシステム100のメモリコントローラ140に提供された命令に従って、DRAMダイ120内にデータを配置するように構成されたメモリコントローラ140に関する。例えば、本発明の実施形態の一部の態様は、インメモリコンピューティングと、APIを使用してプログラムのソースコードをコンパイル又は解釈する際に、APIへの呼び出しに従ってデータを配置するようにメモリコントローラ140を制御するためのコマンドを生成するように構成されたコンパイラ(例えば、データコンパイラ)と、を有するHBMと相互作用するアプリケーション・プログラミング・インターフェース(API)を提供することに関する。例えば、APIは、GEMM(Genernal Matrix-Matrix Multiplication)を実行するための関数呼び出し(function call)を提供し、コンパイラは、データに対して実行される演算(例えば、内積、外積、行列乗算など)を含む要素、及びデータのサイズ(例えば、データがメモリのページに適合するか否か)に基づくデータのナイーブな(naive)配置よりも性能が改善する方法で、オペランド行列を表すデータをDRAMダイ120に配置するようにメモリコントローラ140を制御するコマンドのシーケンスを生成する。APIを介してIMCでDRAMを使用するようにソフトウェアを作成する際に、本発明の一部の実施形態によるコンパイラ又はデータコンパイラは、DRAMダイ120の特定の位置にデータを配置し、DRAMダイ120の計算を実行するためのIMCモジュールを制御し、結果を格納するために、ソフトウェアのソースコードの少なくとも一部をメモリコントローラ140によって実行されるコマンドに変換する。
【0061】
一実施形態によると、16レーン(lane)のALUは、半精度浮動小数点(half-precision floating-point)(FP-16)計算で8GFLOPS(ギガ浮動小数点演算/秒)のピーク性能を達成する。(本発明の実施形態によるIMCモジュールの性能をFLOPSに関して本明細書に説明しているが、本発明の実施形態は、浮動小数点演算を実行することに限定されず、様々なデータレイアウトの相対的な性能は、例えば、整数演算の実行する際と似ている。)したがって、第2世代高帯域幅メモリ標準(HBM2)を使用する4つのダイ(4H又は4-Hi)のスタックを使用する、本発明の一実施形態によるIMCの実装は、FP-16計算(ダイあたり256バンク×4ダイのスタック=1,024バンク、各バンクは対応する16レーンのALUを有する)で8TFLOPS(テラ浮動小数点演算/秒)を達成する。
【0062】
TFLOPSで測定されるピーク計算性能は、異なるデータレイアウトシナリオの下で変わる。
一番目の場合(2OPと表記)、メモリモジュール110の外部からの2つのオペランドがインメモリコンピューティングALUに完全に供給され、その結果はバッファリングされて(buffered)完全に累積され、これにより、上述の8TFLOPSのピーク計算性能が得られる。
【0063】
二番目の場合(1OPと表記)、第1のオペランドはHMBの外部からIMCに完全に供給されるが、第2のオペランドはDRAMダイ120の任意の位置から読み取られる。これは、約6.5TFLOPSにピーク計算性能を低下させる。
【0064】
三番目の場合(DRと表記)、双方のオペランドはDRAMの異なるページに配置され、結果がDRAMに書き戻される。このシナリオでは、約0.8TFLOPSが測定された計算性能である(例えば、2OPの場合よりも1桁遅い)。
【0065】
四番目の場合(SRと表記)で、双方のオペランドはDRAMブロックの同じ行又はページに位置する。これはDRの場合よりも性能が大幅に向上し、約3.3TFLOPSになる。
【0066】
したがって、データの考慮に基づいて、様々なデータレイアウトのトレードオフが行われる。例えば、1OPの場合、第1のオペランドがDRAMにあり、第2のオペランドがHBMの外部からブロードキャストされると、性能が高くなる(上記のように約6.5TFLOPS)が、ホストプロセッサ170にオーバーヘッドが発生し、第2のオペランドをHBMに提供しなければならない。
【0067】
図4Aは、第1のオペランド(行列A)がDRAMに格納され、第2のオペランド(行列B)がメモリモジュールの外部からブロードキャストされる場合のGEMMに対するデータの配置を、本発明の一実施形態による統合されたIMCと共に概略的に示す図である。例示のために、DRAMバンク200-Oをより詳細に示している。図4Aに示すように、第1のオペランド行列Aに関連するデータは、DRAMバンク200-Oの一つのページ401(例えば、第1の行又は第1のページ)に配置され、第2のオペランド行列Bに関連するデータは、(例えば、マルチプレクサ300を介して)DRAMダイ120の外部からブロードキャストされる。計算結果Cは、DRAMバンク200-Oの異なるページ402に配置される。
【0068】
双方のオペランドがDRAM内にある場合、双方のオペランドを同じページ又は同じ行(SR)に配置することは、以下で詳細に説明するように、実行する必要があるPRE及びACT演算の数を部分的に減らすことによって、計算性能を向上させる(例えば、約3.3TFLOPS)が、DRAMの正しい部分にデータを配置することに関してより多くの制約を課す。
【0069】
図4Bは、双方のオペランド(行列A及び行列B)が、メモリモジュールのDRAMの同じページに格納されている場合のGEMMに対するデータの配置を、本発明の一実施形態による統合されたIMCと共に概略的に示す図である。例示のために、DRAMバンク200-Oをより詳細に示している。図4Bに示すように、第1のオペランド行列A及び第2のオペランドの行列Bに関連するデータは、DRAMバンク200-Oのページ411(例えば、第1の行又は第1のページ)に配置される。より詳細には、ページ411の前半部は第1のオペランド行列Aからのデータで満たされ、ページ411の後半部は第2のオペランド行列Bからのデータで満たされる。行列A及び行列Bが図4Aに関して上述したものと同じサイズと仮定すると、残りのデータを格納するためにさらにページが必要になる。このように、第1のオペランド行列A及び第2のオペランドの行列Bの双方に関連するデータもページ412に配置される。行列乗算の結果Cは、DRAMバンク200のページ413に格納される。
【0070】
一方、オペランドを異なるページに配置することは、より柔軟で、レイアウトに対する制約を減らす(例えば、固定サイズのメモリのページにきちんと適合しないサイズを有するデータに適合する)が、一般に計算性能が低下する。
【0071】
図4Cは、双方のオペランド(行列A及び行列B)が、メモリモジュールのDRAMの異なるページに格納されている場合のGEMMに対するデータの配置を、本発明の一実施形態による統合されたIMCと共に概略的に示す図である。例示のために、DRAMバンク200-Oをより詳細に示している。図4Cに示すように、第1のオペランド行列Aに関連するデータは、ページ421に配置され、第2のオペランド行列Bに関連するデータは、ページ422に配置され、結果Cはページ423に配置される。
【0072】
図4A図4B、及び図4Cに示す異なるデータ配置戦略(1OP、SR、及びDR)の様々な性能への影響は、以下の図5A図5B図6A図6B図7A、及び図7Bを参照して、より詳細に説明する。例えば、図5Aに示すように、行列AはM×K行列であり、行列BはK×N行列であるので、行列Aと行列Bの積である行列Cのサイズは、M×Nである。説明のために、以下の例ではK=5の場合を説明しているが、本発明の実施形態はそれに限定されない。標準行列乗算に従って、結果行列Cの左上の値C00は、行列A(各位置Aijは、例えば16個の半精度浮動小数点値のベクトル又は「タイル」を水平順に示し、図5A図5B図6A図6B図7A、及び図7Bは、A00、A01、A02、A03、及びA04を示す)の第1の行に、行列B(各位置Bijは、例えば、16個の半精度浮動小数点値のベクトル又は「タイル」を垂直順に示す)の第1の列をペアとして乗算して計算される。つまり、C00はA00・B00+A01・B10+A02・B20+A03・B30+A04・B40を格納する。図5A図5B図6A図6B図7A、及び図7Bにおいて、シェーディング(shading)処理は共に乗算されるオペランドを識別するために使用する。より詳細には、同じパターンを使用してシェーディング処理された2つのオペランドが、図示する計算の一部として共に乗算される。本発明の実施形態の態様は、浮動小数点オペランドに対して浮動小数点演算を実行するように構成されたIMCに関して説明しているが、本発明の実施形態はそれに限定されず、例えば、整数オペランドに対する整数演算を実行するように構成されたIMCに適用してもよい。
【0073】
図5Aは、一つのオペランド(1OP)データレイアウトにおける行列Aの第1の行と行列Bの第1の列との乗算の概略図である。ここで、本発明の一実施形態による一つのオペランドが外部から供給され、一つのオペランドがインメモリコンピューティングでDRAMバンクに格納される。図5Aに示すように、行列Aの第1の行のタイルA00、A01、A02、A03、及びA04は、DRAMバンク200の同じページ401(行)に格納され、行列Bのベクトル又はタイルB00、B10、B20、B30、及びB40は、外部から供給され、結果(例えば、C00)は、DRAMバンク200の別のページ402に格納される。
【0074】
乗算を計算するプロセスは、DRAMバンク200から値A00を読み取り、A00・B00を計算することによって開始する。これには、ページ401を開くことが含まれ、したがって、センス増幅器232を準備するためにプリチャージ(PRE)コマンドが必要となり、その後にページ401をセンス増幅器232にロードするための活性化(ACT)コマンド、及びセンス増幅器232からIMCモジュール250にA00の値をロードするための読み取り(READ)コマンドが続く。上述のように、B00は外部から入力として提供されるため、この値の取得にDRAM演算は必要でない。ALU252は、その後、乗算A00・B00を計算し、出力バッファ(例えば、出力レジスタRz)に一時的な結果を格納する。
【0075】
次に、ALU252は、DRAMからA01を読み取ることによって乗算A01・B10を計算する。これはまた、PREコマンド、ACTコマンド、及びREADコマンドが必要である。ベクトル又はタイルB10は、外部から入力として提供されるため、A01・B10が計算され、A00・B00を格納するバッファ(例えば、出力レジスタRz)の一時的な結果に追加される。このプロセスは、行列A及び行列Bの残りの値に対して繰り返される。その結果、それぞれの計算(例えば、タイルA00及びB00等の2つのオペランドの乗算)は、計算ごとに1つのPRE、1つのACT、及び1つのREADを必要とする。図8に関して以下でより詳細に説明するように、一部の実施形態では、IMCは値を格納し、先に格納された値と新たに受信した値の合計(sum)で格納された値を更新するように構成されるアキュムレータをさらに含む。
【0076】
図5Bは、1OPデータレイアウトにおける行列Aの第1の行の第1の値と行列Bの各列の第1の値との積をデータ再利用と共に示した概略図である。ここで、本明細書の一実施形態によれば、一つのオペランドが外部から供給され、1つのオペランドがインメモリコンピューティングでDRAMバンクに格納される。図5Bは、図5Aに示すものとは異なり、DRAMからロードされたデータは、行列Bの異なる列に対して再利用される(例えば、オペランドレジスタ(Rop)254に格納される)。特に、2つの行列を乗算する際に、行列Aのすべての行のj番目の要素は、行列Bのj番目の行のすべての要素と乗算される。したがって、行列Aの各要素を一度ロードし、それを行列Bのすべての列(N列)に乗算することにより、DRAMバンク200からのデータロードのコストは、N列にわたって償却(amortized)される。より詳細には、行列A及び行列Bを乗算する場合、従来どおり、タイルA00は、PREコマンド、ACTコマンド、及びREADコマンドを使用してDRAMバンク200から読み取られ、タイルB00は、外部から入力として受信される。ALU252は、C00の合計の一部を計算するためにA00・B00を計算する。しかし、DRAMからタイルA01をロードする代わりに(例えば、別のPRE、ACT、及びREADシーケンスを使用)、C01に対して計算する乗算の内の一つであるA00・B01を計算するために、タイルA00を再利用して(外部から受信された)B01を乗算する。その結果、各計算には、1/N PRE、1/N ACTが必要であり、計算ごとに1つのREADが必要である(行列Aの別の部分をロードするためのPRE及びACTコマンドが、行列BのN列に対して償却されるため)。
【0077】
図6Aは、同じ行(SR)データレイアウトにおける行列Aの第1の行と行列Bの第1の列との乗算の概略図である。ここで、本発明の一実施形態によれば、双方のオペランドは、インメモリコンピューティングを有するDRAMバンクの同じページに格納される。図6Aに示すように、行列Aの第1の行のタイルA00、A01、及びA02、並びに行列Bの第1の行のタイルB00、B10、及びB20は、DRAMバンク200の同じページ411に格納され、行列AのタイルA03及びA04、並びに行列BのタイルB30及びB40は、DRAMバンク200のページ412に格納される。その結果(例えば、C00)は、DRAMバンク200のページ413に格納される。
【0078】
結果(例えば、内積)を計算するプロセスは、DRAMバンク200からタイルA00を読み取り、A00・B00を計算することによって開始する。これには、ページ411を開くことが含まれ、したがって、プリチャージ(PRE)コマンドが必要となり、その後に活性化(ACT)コマンド、及びセンス増幅器232からIMCモジュール250にタイルA00をロードするための読み取り(READ)コマンドが続く。タイルB00はDRAMから読み取る。しかし、タイルB00がA00と同じページ411にあり、その値は既にセンス増幅器232に格納されているので、READコマンドで十分である(タイルB00をIMCモジュール250に読み取るために、さらにPRE及びACTを実行する必要はない)。したがって、タイルA00及びB00が読み取られると、ALU252はA00・B00を計算し、一時的な結果をバッファに格納する。同様に、タイルA01とタイルB10は、いずれもページ411にもあり、したがって、ページ411がA00を読み取るために最初に開かれた際に、センス増幅器232に予め格納されているため、PREとACTなしでA01・B10を計算するためのタイルA01及びB10の読み取りも同様に、READコマンドを使用して実行する。そのため、各計算は、計算ごとに1/rPRE、1/rACT、及び2READ演算を実行する。ここで、rは、DRAMバンク200の同じページに格納されている一致する値のペアの数である。例えば、上述のように、図6Aは、行列Aの第1の行のタイルA00、A01、及びA02と、行列Bの第1の行のタイルB00、B10、及びB20とが、DRAMバンクのページ411に格納される場合を示す。したがって、計算A00・B00、A01・B10、及びA02・B20は、ページ411に3組のタイル(例えば、r=3)が含まれているため、それぞれ1/3PRE、1/3ACT、及び2READコマンドを償却する。A03・B30及びA04・B40を計算する際、ページ412に2組の値(例えば、r=2)が含まれているため、このような計算は、それぞれ1/2PRE、1/2ACT、及び2READコマンドをそれぞれ償却する。計算ごとに必要なPRE及びACTコマンドの数が減ることにより、全体の計算性能が向上する。
【0079】
図6Bは、SRデータレイアウトにおける行列Aの第1の行の第1の値と行列Bの各列の第1の値に対するデータの再利用による乗算の概略図である。ここで、本発明の一実施形態による双方のオペランドは、インメモリコンピューティングを有するDRAMバンクの同じページに格納される。図5A及び図5Bの配列間の比較と同様の方法で、図6Bに示す計算プロセスは、DRAMからロードされた値が再利用されるという点で図6Aに示すものと異なる。より詳細には、行列の乗算は、第1のオペランドの指定された行のi番目の要素と第2のオペランドの各列のi番目の要素との乗算を含むということに基づいて、行列Aと行列Bの要素は、指定された行列Aの行の各要素のデータが、乗算される行列Bの行の値と同じページに配置されるように、DRAMバンク200に配列される。
【0080】
例えば、図6Bに示すように、行列Aに行列Bを乗算すると、行列AのタイルA00は、結果行列Cの第1の行の一部(例えば、、C00、C01、C02、C03、C04、C05等の項のいずれか)を計算するプロセスにおいて、行列Bのすべての列の第1のタイル(行列Bの第1の行のすべての要素、例えば、B00、B01、B02、B03、B04、B05、...)に乗算される。同様に、行列Aの値A01に行列Bのすべての列の第2のタイルが乗算される(図6Bに示すように、行列Bの第2の行のすべての要素、例えば、B10、B11、B12、B13、B14、B15、...)。
【0081】
このように、行列Aの少なくとも一つの値は、行列Bの対応値と同じページに格納される。図6Bに示す特定の例において、ページ411は、行列AからタイルA00、行列BからタイルB00、B01、B02、B03、B04、B05、...を格納し、ページ412は、行列AからタイルA01、行列BからタイルB10、B11、B12、B13、B14、B15、...を格納する。DRAM内のデータのこのような配列により、DRAMのページが少なくともN+1エントリを格納すると仮定すると、各計算は、1/N PREコマンド、1/N ACTコマンド、及び(N+1)/N READコマンド(PREコマンド及びACTコマンドは、行列BのN列で償却されるため)を実行する。
【0082】
図7Aは、異なる行(DR)データレイアウトにおける行列Aの第1の行と行列Bの第1の列との乗算の概略図である。ここで、オペランドは、本発明の一実施形態によるインメモリコンピューティングでDRAMバンクの異なるページに格納される。図7Aに示すように、行列Aの第1の行のタイルA00、A01、A02、A03、及びA04は、ページ421に格納される一方、行列Bの第1の列のタイルB00、B10、B20、B30、及びB40は、別のページ422に格納される。
【0083】
タイルB00がタイルA00とは異なるページ422(行)にあるため、C00を計算するプロセスは、PRE、ACT、及びREADコマンドのシーケンスを使用して、タイルB00を読み取り、その後に、PRE、ACT、及びREADコマンドのシーケンスを使用して、DRAMバンク200のページ421(行)からA00を読み取ることによって、A00・B00を計算することから始まる。ALU252は、A00・B00を計算し、その結果を一時的なバッファに格納する。C00計算を継続するために、タイルA01は、ページ421(行)から読み取られ、ページ422(行)からB10が読み取られ、ここで、それぞれの値は、DRAMバンク200に対するPRE、ACT、及びREADシーケンスの実行を含む。
【0084】
図7Bは、DRデータレイアウトにおける行列Bの各列の第1の値と行列Aの第1の行の第2の値とにより、行列Bの各列の第2の値による行列Aの第1の行の第1の値のデータ再利用による乗算の概略図である。ここで、オペランドは、本発明の一実施例によるインメモリコンピューティングでDRAMバンクの異なるページに格納される。
【0085】
図5Bにおける説明及び1OPにおけるデータ再利用と同様の方法により、行列Bで乗算を実行する際に行列Aから取り出したデータを再利用することで、メモリ演算の数が減る。図7Aにおける説明のように、指定された行列Aの行の各i番目の値は、行列Bのi番目の行の各値と乗算される。したがって、指定された行列Bの行のすべての値がDRAMバンク200の同じページに格納されると、PRE及びACTコマンドの数が減少し、それによって性能が向上する。
【0086】
例えば、行列Aに行列Bを乗算するプロセスは、N個の部分和(例えば、C00、C01、C02、...、C0Nの一部)を計算するために、行列AのタイルA00に行列Bの第1の行のN個のタイル(B00、B01、B02、...、B0N)のそれぞれを乗算することから始まる。このプロセスは、DRAMバンク200からタイルA00をロードすることにより始まる。これには、ページ421(行)を開き、行列AのタイルA00をオペランドレジスタ(Rop)254にロードするため、PREコマンド、ACTコマンド、及びREADコマンドが含まれる。A00をロードした後、行列Bの第1の行のタイルB00、B01、B02、...、B0NがタイルA00に乗算されるようロードされる。図7Bに示すように、行列Bのこれらの値がすべて同じページにある場合(例えば、B00、B01、B02、B03、B04、...は、図7Bに示すDRAMバンク200のページ422にある)、このページにアクセスするために使用されたPRE及びACTコマンドが、そのページに格納されたN個の値で償却される。したがって、行列Aの一つの値に行列Bの一つの行のすべての値を乗算するには、2つのPREコマンド、2つのACTコマンド、及びN+1 READコマンドが必要となり、行のN個の値を償却すると、計算ごとに2/N PREコマンド、2/N ACTコマンド、及び(N+1)/N READコマンドが生成される。上述の例と同様の方法で、DRAMコマンドの数の減少は、全体の計算性能(例えば、行列乗算演算)を向上させる。
【0087】
上述のデータ配置オプションは、サイクルレベル(cycle-level)の高帯域幅メモリ-メモリ内機能(HBM-FIM)シミュレータを使用して実験的にテストし、これはGEMM記録と共にIMC用にカスタマイズされた。実験アーキテクチャには4つの4H HBM2モジュールを含むHBMが含まれており、ここでDRAMのアレイサイズは16,384(16Kib)行×8,192(8Kib)列(例えば、各ページのサイズは8,192b)であり、行バッファのサイズは、8,192ビット(8Kib)である。IMCモジュールは、待ち時間周期を備えた16レーンのFP-16ベクトルユニットと768ビットバッファを含み、パイプライン動作が可能であった。様々な実施形態において、バッファはより小さくてもよく(例えば、256ビットの入力バッファ及び256ビットの出力バッファを含む512ビットのバッファ)、又はより大きくてもよい(例えば、256ビットの入力バッファ及び1,024ビットの出力バッファを備えた1,280ビットのバッファ)。一部の実施形態において、入力バッファは、256ビットよりも大きい(例えば、512ビット)。
【0088】
本発明の実施形態の一部の態様は、DRAMバンク200のレベルでさらなるバッファ及びアキュムレータ(例えば、DRAMバンクでバンクごとに提供されるさらなるハードウェア)を含むことに関する。
【0089】
図8は、DRAMバンクのIMCモジュールの概略ブロック図である。ここで、IMCモジュールは、本発明の一実施形態による結果バッファ、アキュムレータ、及びバッファにさらに接続される。
【0090】
図8に示すように、ALU252は、入力オペランドA(図8では256ビットのオペランドA[0:255]と表示)及び入力オペランドB(図8では256ビットのオペランドB[0:255]と表示)を受信する。ALUは、2つの入力オペランド(例えば、加算、乗算、内積、外積など)に対する演算を実行し、結果C(図8では256ビットの結果C[0:255]と表示)を計算する。
【0091】
図8を参照すると、IMCモジュール250は、ALU252の出力に接続されたアキュムレータ802をさらに含む。例えば、ALU252の出力は、結果レジスタ(Rz)256及びアキュムレータ802の双方に接続され、結果Cが結果レジスタ(Rz)256に格納され、アキュムレータ802に供給される。アキュムレータ802は、累積値(例えば、256ビット値)を格納するアキュムレータレジスタを含む。アキュムレータ802がALU252から新たな結果を受信すると、新たな結果は、アキュムレータレジスタに既に格納されている累積値に追加(例えば、累算)される(例えば、アキュムレータ802のアキュムレータレジスタに格納されている値が更新されるか、又は新たな結果と先にアキュムレータ802に格納されている値の合計として設定される)。一部の実施形態において、アキュムレータ802は、リセットコマンドに応答して、アキュムレータレジスタをリセットする(例えば、アキュムレータレジスタに格納された累積値をゼロに設定する)ように構成される。アキュムレータ802は、行列の乗算を計算する場合(例えば、結果行列の各値が第1のオペランドの行と第2のオペランドの列の内積である場合)等、内積(inner products又はdot products)の計算の際に特に役立つ。図8に示す実施形態において、IMCモジュール250は、512ビットの第1のバッファ812及び512ビットの第2のバッファ814として示される1,024ビットの出力バッファをさらに含む。多数の結果値を格納するさらに大きな出力バッファは、メモリコントローラ140がDRAMバンクの別のページを開いてその結果を格納する前に、一度に多数の結果を計算するために、DRAMバンクを制御できるようにする。例えば、図6Bに示すようにSRデータレイアウトでデータを再利用する場合、結果を格納するためにページを開くには、PRE及びACTコマンドをさらに必要とするオペランドを格納するページ(例えば、図6A及び図6Bに示すページ411)とは異なるDRAMバンク200の別のページ(例えば、図6A及び図6Bに示すページ413)に書き込まれた部分和を計算するために、第1のオペランド行列Aの一つの値に、第2のオペランド行列Bの行に対応する異なる値を乗算する。しかし、出力バッファが大きいほど、演算を完了するのに必要なページ切り替え量が減り(各ページの切り替えにはPRE及びACTが必要なため)、そのため、計算性能が向上する。図8は、アキュムレータ802及びより大きな出力バッファ(812、814)の双方を有するIMCモジュール250を示すが、本発明の実施形態はそれに限定されず、IMCモジュール250がさらなる出力バッファ812及び814なしでアキュムレータ802を含む実施形態、並びにIMCモジュール250がアキュムレータ802なしでさらなる出力バッファ812及び814を含む実施形態を含む。本発明の一部の実施形態において、IMCモジュール250は、(例えば、多数の値が同時に蓄積されるように)並列に配列された多数のアキュムレータ802を含む。本発明の実施形態はさらに、2つの512ビットの出力バッファ812及び814を有する場合に限定されず、512ビットよりも大きいか又は小さい、及び/又は2つ以上の出力バッファ又は2つ未満の出力バッファを含む。IMCモジュール250の様々な部分は、異なる量の待ち時間を有する。例えば、乗算演算を実行するALU252が4サイクルの待ち時間を導入し、累積演算は1サイクルの待ち時間を含む。
【0092】
本発明の実施形態の態様は、GEMMを実装することに関して、以下でより詳細に説明する。
【0093】
図9は、本発明の一部の実施形態による、同じ行(SR)レイアウトを使用する計算を説明するためのGEMMの一例の概略図である。より具体的には、図9は、行列A及び行列Bの積を示し、行列A及び行列Bの積をアキュムレータ802に現在格納されている値に追加することにより、アキュムレータ(例えば、アキュムレータ802)に格納された結果Cを更新することを示す(結果C+=行列A×行列B)。図9に示す計算では、行列Aの16タイルと行列Bの16タイルが共に乗算され、ここで、各タイルは、16個のFP-16要素(256ビット)を有する。特定の内部タイルの構成レイアウトは、以下でより詳細に説明するが、GEMMの全体的な複雑さ(complexity)は、別のレイアウトでも同様である。図9に示すように、同様のパターンでシェーディング処理されたタイルは、共に乗算されたタイルである。上述のように、図9は、同じ行(SR)データレイアウトを示し、ここで、行列A及び行列Bの32個の値すべてが、DRAMバンク200の同じページ414に格納され、各計算のオペランド(例えば、タイルA00、並びにタイルB00、B01、B02、及びB03)は、すべて同じページ414に格納される。個々の計算の結果は、結果レジスタ(Rz)256に蓄積され、結果Cを計算する。
【0094】
タイル-レベル(tile-level)乗算の一つの特定例として、DRAMバンク200の同じページからロードされた2つのタイルA00及びB00の内積(inner products又はdot products)を計算する際、タイルA00は、行列Bの点線タイルB00である。一部の実施形態において、上述のように、各タイルは、16個のFP-16要素を含む。例えば、タイルA00は要素a00、a01、...、a15を含み、タイルB00は要素b00、b01、...、b15を含み、タイルA00及びB00の内積は積のペアの合計(=a00×b00+a01×b01+...+a15×b15)である。したがって、2つのタイルの内積(inner products又はdot products)は、単一の要素又は単一の値を生成することから、本発明の実施形態によるIMCモジュールは、結果を格納するために、より少ないバッファレジスタ(例えば、アキュムレータレジスタ802)で内積を計算する。そのため、アキュムレータレジスタを含む本発明の一部の実施形態によるIMCモジュールは、内積の計算等、値の累算を含む計算を実行するのに非常に適している。一部の実施形態において、内積の計算に適したアキュムレータを含むIMCモジュールは、学習済みのニューラルネットワークを使用して推論(又は順方向伝搬)を実行するために使用され、学習済みのニューラルネットワークで第1のオペランドが入力(例えば、以前の層からの活性化)を示し、第2のオペランドは、学習済みのニューラルネットワークの層のニューロンに関連する重みを示す。
【0095】
タイル-レベル乗算の別の例として、DRAMバンク200の同じページからロードされた2つのタイルの外積を計算する場合、第1のタイルのすべての値は、第2のタイルのすべての値に乗算され、2つのタイルを同時にロードする。例えば、上述のように、各タイルが16個の値を含む場合、2つのタイルの外積は16×16=256の出力値を有する。ツリー-加算器(tree-adder)の累積が不要であり、256個の出力値を並列に計算するため、外積は内積よりも簡単なハードウェアで計算することができる。しかし、外積の計算には、(例えば、外積の結果のすべての値を格納するために)本発明の実施形態によるIMCモジュール250において多くの出力バッファレジスタ(例えば、 出力バッファ812及び814)を必要とする。例えば、各タイルが最大16個のFP-16値を含むと仮定すると、外積を計算するように構成されたIMCモジュール250は、256個の値を格納するのに十分な大きさの出力バッファ(例えば、256×16ビット=4,096ビットのバッファ)を含む。したがって、出力バッファを含む本発明の一部の実施形態によるIMCモジュールは、第1および第2のオペランド(上記の例では、オペランドの各タイルは16個の値を含むため、出力バッファには少なくとも256個の値が格納される)のタイル内の値の数の積以上のサイズを格納する大きさを有するオペランドの外積を含む計算を実行するのに適する。
【0096】
タイル-レベル乗算の第3の例として、DRAMバンク200の同じページからロードされた2つのタイルのテンソル積を計算する場合、2つのタイルは、行列に配列された値をを含む。例えば、各タイルが16個のFP-16値を含む場合、各タイルは、4×4行列値に配列される。このタイルのテンソル積を計算すると、4×4の結果行列が生成される。例えば、各タイルが最大16個のFP-16値を含むと仮定すると、16値の内の2つの4×4タイルのテンソル積を計算するように構成されたIMCモジュール250は、16個の値を格納するのに十分な大きさの出力バッファ(例えば、16×16ビット=256ビットのバッファ)を有する。したがって、本発明の実施形態によるIMCモジュールは、第1および第2のオペランドの内の大きい方の値の数と同じ値の数を格納するのに十分な大きさの出力バッファを含む計算(オペランドのテンソル積を含む)を実行するのに適する。本発明の実施形態によるテンソル積を実装するIMCモジュールは、内積の計算及び外積の計算に適したIMCモジュールハードウェアに比べて、より簡単なハードウェア及び中間数のバッファレジスタを備えた中間グラウンド(middle ground)を示す。
【0097】
より詳細には、2つの4×4行列AとBとの間でテンソル積を実装することは、64の乗算演算、48の加算演算、及び行列A/行列Bでの転置(transpose)を含む。本発明の一実施形態による16レーンのe-ALU252を使用する場合、16個の演算が並列に実行される。これらの64+48=112の演算は、7サイクルのALU(一回のサイクルで乗算を実行すると仮定)で実行される。本発明の別の実施形態において、性能を向上させるために、64レーンのALU252は、2~3サイクル又は4~6ナノ秒(nanoseconds)で2つの4×4行列を表す2つのタイルのテンソル積の計算に使用される。したがって、ALU252でレーンの数を増加させることは、計算間で可能な並列化の量を増加させ、性能を向上させる。
【0098】
したがって、本発明の実施形態の態様は、インメモリコンピューティングを備えたDRAMシステムにおけるデータ配置のためのシステム及び方法に関する。SR(単一ページ)データレイアウトに関して、内積、外積、及びテンソル積を計算する上記の3つの例において、単一の行は、(行列の)列データを有する第2のタイルと同じページに(行列の)行データを有する第1のタイルを含む。
【0099】
本発明の一部の実施形態によると、メモリモジュール110のメモリコントローラ140(又はクライアント側メモリコントローラ)は、ホストプロセッサ170から受信した命令に従って、ホストプロセッサ170から受信したデータ(オペランド)の配置を制御する。例えば、命令が内積、外積、又はテンソル積を計算すべきか否かに基づいて、及びオペランドのサイズ(例えば、行列の寸法(dimensions))に基づいて、メモリコントローラ140は、1OP、SR又はDRデータレイアウトを使用し、それに応じてデータを格納するようにDRAMバンクを制御する。
【0100】
図10は、本発明の実施形態による、IMCモジュールを有するDRAMバンク内のデータの配置を制御するための方法を示すフローチャートである。ステップS1110において、メモリコントローラ140は、オペランド(例えば、第1のオペランド及び第2のオペランド)と、オペランドに適用される命令(例えば、関数)とを受信する。例えば、これらの命令は、内積、外積の計算、学習済みのニューラルネットワーク及び入力ベクトルを使用した推論の実行、ニューラルネットワークの学習のための逆伝搬{でんぱん}アルゴリズム(backpropagation algorithm)のステップの実行等を含む。
【0101】
ステップS1130において、メモリコントローラ140は、命令に基づいて、DRAMダイ上のDRAMバンクに一方又は両方のオペランドを格納するために使用するデータレイアウト(例えば、1OP、SR、又はDR)を決定する。一部の実施形態において、(例えば、ホストメモリコントローラ180からの)命令は、どのデータレイアウトを使用するかを明示して指定する。一部の実施形態において、実行する計算のタイプ、及びDRAMバンクにおけるそのような計算を加速するためのメモリ又はハードウェア要件に基づいて、レイアウトが選択される(例えば、内積を計算するための命令は、アキュムレータを有するDRAMバンクにデータが配置されるのに対し、外積を計算する命令は、より多くの出力バッファを有するDRAMバンクにデータが配置される)。
【0102】
ステップS1150において、メモリコントローラ140は、選択されたデータレイアウトに基づいて、第1のオペランド及び第2のオペランドをDRAMバンクに供給する。一例として、1OPの場合、メモリコントローラ140は、第1のオペランドの少なくとも第1のタイルを格納し、第2のオペランドの第2のタイルをDRAMバンクのIMCモジュールに直接供給するように、DRAMバンク200を制御する。他の例として、SRの場合、メモリコントローラ140は、DRAMバンクの同じ行又は同じページに、第1および第2のオペランドに対応するタイルを格納するように、DRAMバンク200を制御する。
【0103】
ステップS1170において、メモリコントローラ140は、入力命令に基づいた演算を実行するように、DRAMバンク200のIMCモジュールを制御する。例えば、学習済みのモデルを使用して推論を実行する命令の場合、演算は、一つのオペランドに基づいて入力ベクトルを用意し、第2のオペランドに格納されたパラメータに基づいて入力ベクトルの値に重みを付けることが含まれる。
【0104】
本明細書では、特定の例示的な実施形態を提示しているが、本発明は、開示された実施形態に限定されず、本発明の思想や技術範囲を逸脱しない範囲内で多様に変更実施することが可能である。
【符号の説明】
【0105】
100:メモリシステム
110:メモリモジュール
120:DRAMダイ
130:内部メモリバス
140:メモリコントローラ
170:ホストプロセッサ
180:ホストメモリコントローラ
190:外部バス
200:DRAMバンク
210:DRAMセル
212:コンデンサ
214:スイッチ
220:行デコーダ
230:入出力センス増幅器層(IOSA)
232:センス増幅器
234:マルチプレクサ
236:グローバルIO層
240:列デコーダ
250:IMCモジュール(ALU&Reg)
252:ALU
254:オペランドレジスタ(Rop)
256:結果レジスタ(Rz)
257:第1のマルチプレクサ
258:第2のマルチプレクサ
260:入出力(IO)モジュール
300:マルチプレクサ
401、402、411、412、413、421、422、423 ページ
802 アキュムレータ
812 第1のバッファ
814 第2のバッファ
図1
図2A
図2B
図2C
図3
図4A
図4B
図4C
図5A
図5B
図6A
図6B
図7A
図7B
図8
図9
図10