(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-17
(45)【発行日】2023-04-25
(54)【発明の名称】メモリ装置及びそれを制御するための方法
(51)【国際特許分類】
G06F 13/16 20060101AFI20230418BHJP
G06F 15/167 20060101ALI20230418BHJP
G06F 9/38 20180101ALI20230418BHJP
G06F 15/80 20060101ALI20230418BHJP
G06F 12/02 20060101ALI20230418BHJP
G06N 3/063 20230101ALI20230418BHJP
G06N 3/10 20060101ALI20230418BHJP
【FI】
G06F13/16 510E
G06F15/167 610Z
G06F9/38 370A
G06F15/80
G06F12/02 520Z
G06N3/063
G06N3/10
(21)【出願番号】P 2020531604
(86)(22)【出願日】2018-12-21
(86)【国際出願番号】 US2018067370
(87)【国際公開番号】W WO2019126793
(87)【国際公開日】2019-06-27
【審査請求日】2021-11-26
(32)【優先日】2017-12-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】511050697
【氏名又は名称】アリババ グループ ホウルディング リミテッド
(74)【代理人】
【識別番号】100079108
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【氏名又は名称】内藤 和彦
(72)【発明者】
【氏名】ハン,リャン
(72)【発明者】
【氏名】ジャン,シャオウェイ
(72)【発明者】
【氏名】チェン,ジャン
【審査官】松平 英
(56)【参考文献】
【文献】特許第6250780(JP,B1)
【文献】特開2012-174016(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
12/00-12/06
13/16-13/18
15/16-15/177
15/80
G06N 3/00-3/12
7/08-99/00
(57)【特許請求の範囲】
【請求項1】
少なくとも1つのコアのメモリ装置であって、
第1の演算層における読み取り記憶ブロックのセットとして及び第2の演算層における書き込み記憶ブロックのセットとして動作するように構成された第1の記憶ブロックのセットであって、前記第2の演算層は、前記第1の演算層に続く、第1の記憶ブロックのセットと、
前記第1の演算層における書き込み記憶ブロックのセットとして及び前記第2の演算層における読み取り記憶ブロックのセットとして動作するように構成された第2の記憶ブロックのセットと、
前記第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第1の読み取りポートであって、前記読み取り記憶ブロックのセットの第1の読み取り記憶ブロックからオペランドを受信し、且つ前記受信されたオペランドを前記少なくとも1つのコアの少なくとも1つの処理ユニットに提供するように構成された第1の読み取りポートと、
前記第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第2の読み取りポートであって、前記読み取り記憶ブロックのセットの第2の読み取り記憶ブロックから1つ又は複数のオペランドを受信し、且つ前記受信された1つ又は複数のオペランドを前記少なくとも1つのコアの前記少なくとも1つの処理ユニットに提供するように構成された第2の読み取りポートと、
前記第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第1の書き込みポートであって、格納のために1つ又は複数のオペランドを前記書き込み記憶ブロックのセットの第1の書き込み記憶ブロックに提供するように構成された第1の書き込みポートと
を含むメモリ装置。
【請求項2】
前記第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第2の書き込みポートであって、格納のためにオペランドを前記書き込み記憶ブロックのセットの第2の書き込み記憶ブロックに提供するように構成された第2の書き込みポートをさらに含む、請求項1に記載のメモリ装置。
【請求項3】
前記第1の記憶ブロックのセットは、第1及び第2の記憶ブロックを含み、及び前記第1の演算層内において、前記第1の記憶ブロックのセットの第1及び第2の記憶ブロックは、演算モードで動作するように構成され、それにより、前記第1の記憶ブロックのセットの前記第1及び第2の記憶ブロックは、前記第1の演算層において実行される演算で使用される前記オペランドを、それぞれ前記第1及び第2の読み取りポートを介して前記少なくとも1つの処理ユニットへと読み取るように構成される、請求項1又は2に記載のメモリ装置。
【請求項4】
前記第2の記憶ブロックのセットは、第1の記憶ブロック及び第2の記憶ブロックを含み、及び前記第1の演算層内において、前記第2の記憶ブロックのセットの前記第1の記憶ブロックは、結果モードで動作するように構成され、それにより、前記第2の記憶ブロックのセットの前記第1の記憶ブロックは、前記第1の演算層における前記実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項3に記載のメモリ装置。
【請求項5】
前記第1の演算層内において、前記
第2の記憶ブロックのセットの前記第2の記憶ブロックは、プリロードモードで動作するように構成され、それにより、前記第2の記憶ブロックは、第2の演算層において実行される演算で使用されるプリロードオペランドを前記第2の記憶ブロック内に書き込むように構成される、
請求項4に記載のメモリ装置。
【請求項6】
前記演算モード、前記結果モード及び前記プリロードモードの少なくとも1つは、各演算層の開始時、前記第1及び第2の記憶ブロックのセットの前記第1及び第2の記憶ブロックに動的に割り当てられる、
請求項5に記載のメモリ装置。
【請求項7】
前記第2の演算層中、前記第2の記憶ブロックのセットは、前記演算モードで動作するように構成され、それにより、前記第2の記憶ブロックのセットは、前記第1の演算層内で前記第2の記憶ブロックのセットによって書き込まれたオペランドを、前記第2の演算層の演算を実行するために前記少なくとも1つの処理ユニットへと読み取るように構成される、
請求項6に記載のメモリ装置。
【請求項8】
前記第2の演算層中、前記第1の記憶ブロックのセットの前記第1の記憶ブロックは、前記結果モードで動作するように構成され、それにより、前記第1の記憶ブロックは、前記第2の演算層における実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項7に記載のメモリ装置。
【請求項9】
前記第2の演算層中、前記第1の記憶ブロックのセットの前記第2の記憶ブロックは、
前記プリロードモードで動作するように構成され、それにより、前記第2の記憶ブロックは、プリロードオペランドを前記第2の記憶ブロック内に書き込むように構成され、前記プリロードオペランドは、第3の演算層において実行される演算で使用される、
請求項8に記載のメモリ装置。
【請求項10】
前記第1及び第2の記憶ブロックのセットの各記憶ブロックは、単一の読み取り/書き込みスタティックランダムアクセスメモリ(1R/W SRAM)である、請求項1~9のいずれか一項に記載のメモリ装置。
【請求項11】
前記第1及び第2の記憶ブロックのセットの各記憶ブロックは、それぞれのN:1マルチプレクサを介して前記第1及び第2の書き込みポートに通信可能に結合され、且つそれぞれのM:1マルチプレクサを介して前記第1及び第2の読み取りポートに通信可能に結合され、ここで、
Mは、前記メモリ装置内の記憶ブロックの数であり、及び
Nは、前記メモリ装置における書き込みポートの数である、請求項2~10のいずれか一項に記載のメモリ装置。
【請求項12】
前記コアは、単一命令複数データ(SIMD)アーキテクチャを含む、請求項1~11のいずれか一項に記載のメモリ装置。
【請求項13】
メモリ装置を制御するための方法であって、
第1の演算層のために、
第1の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第1の記憶ブロックのセットの動作モードを、前記メモリ装置の読み取りポートを介して少なくとも1つの処理ユニットにオペランドを提供することを可能にする演算モードに設定することと、
第2の記憶ブロックのセットが書き込み記憶ブロックのセットとして動作するように、前記第2の記憶ブロックのセットの一部の記憶ブロックの動作モードを、前記メモリ装置の書き込みポートを介して演算の結果を受信することを可能にする結果モードに設定し、前記第2の記憶ブロックのセットの他の一部の記憶ブロックの動作モードを、前記メモリ装置の書き込みポートを介してプリロードオペランドを受信することを可能にするプリロードモードに設定することと、
前記第1の演算層に続く第2の演算層のために、
前記第1の記憶ブロックのセットが書き込み記憶ブロックのセットとして動作するように、前記第1の記憶ブロックのセットの一部の記憶ブロックの前記動作モードを前記結果モードに設定し、前記第1の記憶ブロックのセットの他の一部の記憶ブロックの前記動作モードを前記プリロードモードに設定することと、
前記第2の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第2の記憶ブロックのセットの前記動作モードを前記演算モードに設定することと
を含む方法。
【請求項14】
各演算層のために前記メモリ装置の前記第1及び第2の記憶ブロックのセットの動作モードを制御する命令を生成することをさらに含み、前記命令は、前記第1及び第2の記憶ブロックのセットの前記動作モードを設定する、請求項13に記載の方法。
【請求項15】
前記命令は、各演算層の開始時、動的に前記第1及び第2の記憶ブロックのセットの前記動作モードをさらに設定する、請求項14に記載の方法。
【請求項16】
前記動作モードを設定するための前記命令は、前記第1の記憶ブロックのセットの前記動作モードを
前記演算モードに設定することをさらに含み、それにより、前記第1の記憶ブロックのセットは、前記少なくとも1つの処理ユニットを介して、前記第1の演算層において実行される演算で使用されるオペランドを読み取るように構成される、請求項14又は15に記載の方法。
【請求項17】
前記第2の記憶ブロックのセットは、第1の記憶ブロック及び第2の記憶ブロックを含み、前記動作モードを設定するための前記命令は、前記第2の記憶ブロックのセットの
前記第1の記憶ブロックの前記動作モードを
前記結果モードに設定することをさらに含み、それにより、前記第1の記憶ブロックは、前記第1の演算層における前記実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項16に記載の方法。
【請求項18】
前記動作モードを設定するための前記命令は、前記
第2の記憶ブロックのセットの
前記第2の記憶ブロックの前記動作モードを
前記プリロードモードに設定することをさらに含み、それにより、前記第2の記憶ブロックは、前記第2の演算層において実行される演算で使用されるプリロードオペランドを前記第2の記憶ブロック内に書き込むように構成される、
請求項17に記載の方法。
【請求項19】
前記動作モードを設定するための
前記命令は、前記第2の記憶ブロックのセットを前記演算モードで動作するように設定することをさらに含み、それにより、前記第2の記憶ブロックのセットは、前記第1の演算層内で前記第2の記憶ブロックのセットによって書き込まれたオペランドを、前記第2の演算層の演算を実行するために前記少なくとも1つの処理ユニットへと読み取るように構成される、
請求項18に記載の方法。
【請求項20】
前記第1の記憶ブロックのセットは、第1の記憶ブロック及び第2の記憶ブロックを含み、
前記動作モードを設定するための
前記命令は、前記第1の記憶ブロックのセットの前記第1の記憶ブロックの前記動作モードを前記結果モードに設定することをさらに含み、それにより、前記第1の記憶ブロックは、前記第2の演算層における実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項19に記載の方法。
【請求項21】
前記動作モードを設定するための
前記命令は、前記第1の記憶ブロックのセットの前記第2の記憶ブロックの前記動作モードを前記プリロードモードに設定することをさらに含み、それにより、前記第2の記憶ブロックは、第3の演算層において実行される演算で使用されるプリロードオペランドを前記第2の記憶ブロック内に書き込むように構成される、
請求項20に記載の方法。
【請求項22】
少なくとも1つの処理ユニットと関連付けられたメモリ装置を含むアクセラレータであって、前記メモリ装置は、
第1の記憶ブロックのセット、
第2の記憶ブロックのセット、
それぞれ前記第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された読み取りポートのセット、及び
それぞれ前記第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された書き込みポートのセット
を含む、アクセラレータと、
コンピュータコードを複数の命令にコンパイルするように構成されたホストユニットであって、前記複数の命令は、
第1の演算層のために、
前記第1の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第1の記憶ブロックのセットの動作モードを、前記読み取りポートのセットを介して前記少なくとも1つの処理ユニットにオペランドを提供することを可能にする演算モードに設定することと、
前記第2の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第2の記憶ブロックのセットの一部の記憶ブロックの動作モードを、前記書き込みポートのセットを介して演算の結果を受信することを可能にする結果モードに設定し、前記第2の記憶ブロックのセットの他の一部の記憶ブロックの動作モードを、前記書き込みポートのセットを介してプリロードオペランドを受信することを可能にするプリロードモードに設定することと、
前記第1の演算層に続く第2の演算層のために、
前記第1の記憶ブロックのセットが書き込み記憶ブロックのセットとして動作するように、前記第1の記憶ブロックのセットの一部の記憶ブロックの前記動作モードを前記結果モードに設定し、前記第1の記憶ブロックのセットの他の一部の記憶ブロックの前記動作モードを前記プリロードモードに設定することと、
前記第2の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第2の記憶ブロックのセットの前記動作モードを前記演算モードに設定することと
を行う、ホストユニットと
を含むシステム。
【請求項23】
メモリ装置によって実行可能な命令のセットを格納する非一時的コンピュータ可読媒体であって、前記命令のセットは、
第1の演算層のために、
第1の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第1の記憶ブロックのセットの動作モードを、前記メモリ装置の読み取りポートを介して少なくとも1つの処理ユニットにオペランドを提供することを可能にする演算モードに設定することと、
第2の記憶ブロックのセットが書き込み記憶ブロックのセットとして動作するように、前記第2の記憶ブロックのセットの一部の記憶ブロックの動作モードを、前記メモリ装置の書き込みポートを介して演算の結果を受信することを可能にする結果モードに設定し、前記第2の記憶ブロックのセットの他の一部の記憶ブロックの動作モードを、前記書き込みポートを介してプリロードオペランドを受信することを可能にするプリロードモードに設定することと、
前記第1の演算層に続く第2の演算層のために、
前記第1の記憶ブロックのセットが書き込み記憶ブロックのセットとして動作するように、前記第1の記憶ブロックのセットの一部の記憶ブロックの前記動作モードを前記結果モードに設定し、前記第1の記憶ブロックのセットの他の一部の記憶ブロックの前記動作モードを前記プリロードモードに設定することと、
前記第2の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第2の記憶ブロックのセットの前記動作モードを前記演算モードに設定することと
を前記メモリ装置に実行させる、非一時的コンピュータ可読媒体。
【請求項24】
前記メモリ装置によって実行可能な前記命令のセットは、
各演算層のために前記第1及び第2の記憶ブロックのセットの動作モードを制御することと、
前記受信された命令に基づいて前記第1及び第2の記憶ブロックのセットの前記動作モードを設定することと
を前記メモリ装置に実行させる、請求項23に記載のコンピュータ可読媒体。
【請求項25】
前記メモリ装置によって実行可能な前記命令のセットは、前記第1の記憶ブロックのセットの前記動作モードを
前記演算モードに設定することを前記メモリ装置に実行させ、それにより、前記第1の記憶ブロックのセットは、前記少なくとも1つの処理ユニットを介して前記第1の演算層において実行される演算で使用されるオペランドを読み取るように構成される、請求項24に記載のコンピュータ可読媒体。
【請求項26】
前記第2の記憶ブロックのセットは、第1の記憶ブロック及び第2の記憶ブロックを含み、前記メモリ装置によって実行可能な前記命令のセットは、前記第2の記憶ブロックのセットの
前記第1の記憶ブロックの前記動作モードを
前記結果モードに設定することを前記メモリ装置に実行させ、それにより、前記第1の記憶ブロックは、前記第1の演算層における前記実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項25に記載のコンピュータ可読媒体。
【請求項27】
前記メモリ装置によって実行可能な前記命令のセットは、前記
第2の記憶ブロックのセットの
前記第2の記憶ブロックの前記動作モードを
前記プリロードモードに設定することを前記メモリ装置に実行させ、それにより、前記第2の記憶ブロックは、前記第2の演算層において実行される演算で使用されるプリロードオペランドを前記第2の記憶ブロック内に書き込むように構成される、
請求項26に記載のコンピュータ可読媒体。
【請求項28】
前記メモリ装置によって実行可能な前記命令のセットは、前記第2の記憶ブロックのセットの前記動作モードを前記演算モードで動作するように設定することを前記メモリ装置に実行させ、それにより、前記第2の記憶ブロックのセットは、前記第1の演算層内で前記第2の記憶ブロックのセットによって書き込まれたオペランドを、前記第2の演算層の演算を実行するために前記少なくとも1つの処理ユニットへと読み取るように構成される、
請求項27に記載のコンピュータ可読媒体。
【請求項29】
前記メモリ装置によって実行可能な前記命令のセットは、前記第1の記憶ブロックのセットの前記第1の記憶ブロックの前記動作モードを前記結果モードに設定することを前記メモリ装置に実行させ、それにより、前記第1の記憶ブロックは、前記第2の演算層における実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項28に記載のコンピュータ可読媒体。
【請求項30】
前記メモリ装置によって実行可能な前記命令のセットは、前記第1の記憶ブロックのセットの前記第2の記憶ブロックの前記動作モードを前記プリロードモードに設定することを前記メモリ装置に実行させ、それにより、前記第2の記憶ブロックは、第3の演算層において実行される演算で使用されるプリロードオペランドを前記第2の記憶ブロック内に書き込むように構成される、
請求項29に記載のコンピュータ可読媒体。
【請求項31】
メモリ装置を制御するための方法であって、
第1の演算層のために、
第1の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記メモリ装置の読み取りポートを介して処理ユニットにオペランドを提供することを可能にする演算モードで第1の記憶ブロックのセットを動作させることと、
第2の記憶ブロックのセットが書き込み記憶ブロックのセットとして動作するように、前記メモリ装置の書き込みポートを介して演算の結果を受信することを可能にする結果モードで第2の記憶ブロックのセットの一部の記憶ブロックを動作させ、前記メモリ装置の書き込みポートを介してプリロードオペランドを受信することを可能にするプリロードモードで前記第2の記憶ブロックのセットの他の一部の記憶ブロックを動作させることと、
前記第1の演算層に続く第2の演算層のために、
前記第1の記憶ブロックのセットが書き込み記憶ブロックのセットとして動作するように、前記第1の記憶ブロックのセットの一部の記憶ブロックを前記結果モードで動作させ、前記第1の記憶ブロックのセットの他の一部の記憶ブロックを前記プリロードモードで動作させることと、
前記第2の記憶ブロックのセットが読み取り記憶ブロックのセットとして動作するように、前記第2の記憶ブロックのセットを前記演算モードで動作させることと
を含む方法。
【請求項32】
各演算層のために前記第1及び第2の記憶ブロックのセットの動作モードを制御する命令をコンパイラから受信することと、
前記受信された命令に基づいて前記第1及び第2の記憶ブロックのセットの前記動作モードを設定することと
をさらに含む、請求項31に記載の方法。
【請求項33】
前記受信すること及び設定することは、各演算層の開始時に動的に起こる、請求項32に記載の方法。
【請求項34】
前記設定することは、前記第1の記憶ブロックのセットの前記動作モードを
前記演算モードに設定することをさらに含み、それにより、前記第1の記憶ブロックのセットは、前記少なくとも1つの処理ユニットを介して前記第1の演算層において実行される演算で使用されるオペランドを読み取るように構成される、請求項32又は33に記載の方法。
【請求項35】
前記第2の記憶ブロックのセットは、第1の記憶ブロック及び第2の記憶ブロックを含み、前記設定することは、前記第2の記憶ブロックのセットの
前記第1の記憶ブロックの前記動作モードを
前記結果モードに設定することをさらに含み、それにより、前記第1の記憶ブロックは、前記第1の演算層における前記実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項34に記載の方法。
【請求項36】
前記設定することは、
前記第2の記憶ブロックのセットの
前記第2の記憶ブロックの前記動作モードを
前記プリロードモードに設定することをさらに含み、それにより、前記第2の記憶ブロックは、前記第2の演算層において実行される演算で使用されるプリロードオペランドを前記第2の記憶ブロック内に書き込むように構成される、
請求項35に記載の方法。
【請求項37】
前記設定することは、前記第2の記憶ブロックのセットを前記演算モードで動作するように設定することをさらに含み、それにより、前記第2の記憶ブロックのセットは、前記第1の演算層内で前記第2の記憶ブロックのセットによって書き込まれたオペランドを、前記第2の演算層の演算を実行するために前記少なくとも1つの処理ユニットへと読み取るように構成される、
請求項36に記載の方法。
【請求項38】
前記第1の記憶ブロックのセットは、第1の記憶ブロック及び第2の記憶ブロックを含み、
前記設定することは、前記第1の記憶ブロックのセットの前記第1の記憶ブロックの前記動作モードを前記結果モードに設定することをさらに含み、それにより、前記第1の記憶ブロックは、前記第2の演算層における実行された演算の結果を前記第1の記憶ブロック内に書き込むように構成される、
請求項37に記載の方法。
【請求項39】
前記設定することは、前記第1の記憶ブロックのセットの前記第2の記憶ブロックの前記動作モードを前記プリロードモードに設定することをさらに含み、それにより、前記第2の記憶ブロックは、第3の演算層において実行される演算で使用されるプリロードオペランドを前記第2の記憶ブロック内に書き込むように構成される、
請求項38に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願の相互参照
[0001] 本出願は、「An Efficient SRAM Organization to Enable a Wider Single Instruction Multiple Data Machine and Software Pipelining」という名称の2017年12月22日に出願された米国仮特許出願第62/610,089号に基づき、その優先権を主張するものであり、その全内容は、参照により本明細書に組み込まれる。
【背景技術】
【0002】
背景
[0002] ディープニューラルネットワークアルゴリズムは、大多数の行列計算を伴い、一般に、非常に広範な単一命令複数データ(SIMD)処理ユニット及び大容量のオンチップストレージを伴うハードウェアアーキテクチャをもたらす。ディープラーニングの本質により、時折、異なるSIMDレーンがデータを交換する必要がある。クロスレーンデータ処理及び演算を提供する多くのメモリアーキテクチャが存在するが、これらのアーキテクチャは、メモリアクセス待ち時間、バンクコンフリクト問題、性能問題などの受け入れ難い増加などのいくつかの理由のために不完全である。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
[0003] 本開示は、SIMDアーキテクチャを有する演算デバイスに含まれるスタティックランダムアクセスメモリ(SRAM)装置を提供する。例示的な実施形態のいくつかは、コアのメモリ装置を対象とする。メモリ装置は、第1の演算層(computation layer)における読み取り記憶ブロックのセットとして及び第2の演算層における書き込み記憶ブロックのセットとして動作するように構成された第1の記憶ブロックのセットを含む。第2の演算層は、第1の演算層に続く。第2の記憶ブロックのセットは、第1の演算層における書き込み記憶ブロックのセットとして及び第2の演算層における読み取り記憶ブロックのセットとして動作するように構成される。
【0004】
[0004] メモリ装置は、第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第1の読み取りポートをさらに含む。第1の読み取りポートは、読み取り記憶ブロックのセットの第1の読み取り記憶ブロックからオペランドを受信し、且つ受信されたオペランドを少なくとも1つの処理ユニットに提供するように構成される。メモリ装置は、第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第2の読み取りポートをさらに含む。第2の読み取りポートは、読み取り記憶ブロックのセットの第2の読み取り記憶ブロックから1つ又は複数のオペランドを受信し、且つ受信された1つ又は複数のオペランドを少なくとも1つの処理ユニットに提供するように構成される。メモリ装置は、第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第1の書き込みポートであって、格納のために1つ又は複数のオペランドを書き込み記憶ブロックのセットの第1の書き込み記憶ブロックに提供するように構成される第1の書き込みポートを追加的に含む。
【0005】
[0005] 例示的な実施形態のいくつかは、メモリ装置を制御するための方法を対象とする。方法は、第1の演算層のために、メモリ装置の読み取りポートを介して少なくとも1つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして動作する第1の記憶ブロックのセットを選択することと、格納のためにメモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第2の記憶ブロックのセットを選択することとを含む。方法は、第1の演算層に続く第2の演算層において、書き込み記憶ブロックのセットとして動作する第1の記憶ブロックのセットを選択することと、読み取り記憶ブロックのセットとして動作する第2の記憶ブロックのセットを選択することとをさらに含む。
【0006】
[0006] 例示的な実施形態のいくつかは、少なくとも1つの処理ユニットと関連付けられたメモリ装置を含むアクセラレータを含むシステムを対象とする。メモリ装置は、第1の記憶ブロックのセット、第2の記憶ブロックのセット及びそれぞれ第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合された読み取りポートのセットを含む。システムは、それぞれ第1及び第2の記憶ブロックのセットの各記憶ブロックに通信可能に結合される書き込みポートのセットをさらに含む。システムは、コードを複数の命令にコンパイルするように構成されたホストユニットをさらに含み、命令は、第1の演算層のために、読み取りポートのセットを介して少なくとも1つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットを動作させるために第1の記憶ブロックのセットを選択する。命令は、格納のために書き込みポートのセットを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第2の記憶ブロックのセットも選択する。
【0007】
[0007] さらに、命令は、第2の演算層のために、書き込み記憶ブロックのセットとして動作する第1の記憶ブロックのセットを選択し、且つ読み取り記憶ブロックのセットとして動作する第2の記憶ブロックのセットを選択する。
【0008】
[0008] 例示的な実施形態のいくつかは、演算を実行するための複数の演算層を含むニューラルネットワークの処理要素内のメモリ装置によって実行可能な命令のセットを格納する非一時的コンピュータ可読媒体を対象とする。メモリ装置は、第1及び第2の読み取りポートと、第1及び第2の書き込みポートとを含み、第1の読み取りポート及び第1の書き込みポートは、直接メモリアクセス(DMA)ユニットに通信可能に結合される。メモリ装置は、第1及び第2の読み取り及び書き込みポートに通信可能に結合された第1、第2、第3及び第4の記憶ブロックをさらに含み、命令は、第1、第2、第3及び第4の記憶ブロックのそれぞれを介して、実行された演算と関連付けられた演算値を1つの演算層あたり多くとも1つ読み取るか又は書き込むことをメモリ装置に行わせる。
【0009】
[0009] 例示的な実施形態のいくつかは、メモリ装置を制御するための方法を対象とする。方法は、第1の演算層のために、メモリ装置の読み取りポートを介して少なくとも1つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして第1の記憶ブロックのセットを動作させることと、格納のためにメモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして第2の記憶ブロックのセットを動作させることとを含む。
【0010】
[0010] 方法は、第1の演算層から続く第2の演算層のために、書き込み記憶ブロックのセットとして第1の記憶ブロックのセットを動作させることと、読み取り記憶ブロックのセットとして第2の記憶ブロックのセットを動作させることとをさらに含む。
【0011】
図面の簡単な説明
[0011] 本開示の実施形態及び様々な態様は、以下の詳細な説明及び添付の図に示される。図に示される様々な特徴は、原寸に比例しない。
【図面の簡単な説明】
【0012】
【
図1A】[0012]例示的なSRAM装置を示す概略図である。
【
図1B】[0013]
図1AのSRAM装置の例示的なバンクユニットを示す概略図である。
【
図2】[0014]本開示の実施形態と一致する例示的なニューラルネットワーク処理ユニット(NPU)アーキテクチャを示す概略図である。
【
図3A】[0015]本開示の実施形態と一致するニューラルネットワークプロセッサの層の例示的な機能を示す概略図である。
【
図3B】[0016]本開示の実施形態と一致する例示的なハードウェアニューラルネットワークプロセッサを示す概略図である。
【
図4】[0017]本開示の実施形態と一致する、多層ネットワークにおける例示的なデータ共有を示す概略図である。
【
図5】[0018]本開示の実施形態と一致する例示的なSRAM装置を示す概略図である。
【
図6】[0019]本開示の実施形態と一致する
図5のSRAM装置の例示的な記憶ブロックを示す概略図である。
【
図7】[0020]本開示の実施形態と一致する
図5及び6の例示的な装置の詳細な概略図を示す。
【
図8】[0021]本開示の実施形態と一致する、
図5~7のSRAM装置のデータマッピング及び記憶ブロック分類のための例示的な方法を特徴とする表を示す。
【
図9】[0022]本開示の実施形態と一致する、
図5~8のSRAM装置を介するデータマッピングのための例示的な方法のフロー図を示す。
【
図10】[0023]
図5~8のメモリ装置によって実行することができる例示的な動作を描写するフロー図である。
【発明を実施するための形態】
【0013】
詳細な説明
[0024] 以下の説明は、添付の図面を参照し、添付の図面では、異なる図面の同じ番号は、別段の表現がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明に記載される実装形態は、本発明と一致するすべての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲に記述されるように、本発明に関連する態様と一致する装置及び方法の単なる例である。
【0014】
[0025]
図1A及び1Bは、各演算ユニットに対して2つのオペランド及び1つの結果を有する単一命令複数データ(SIMD)アーキテクチャの例示的な従来の実装形態のブロック図を示す。SIMD又はベクトルアーキテクチャは、グラフィックス処理及びディープラーニングなどのデータ並列処理での演算をサポートするための使用が非常に一般的である。
図1Aの従来のアーキテクチャでは、メモリは、2つのオペランド(例えば、「op1」及び「op2」)を1つ又は複数の処理ユニットに供給し、1つ又は複数の処理ユニットは、結果Rを生成するための演算を実行する。K個の処理ユニットが並列に実行されると、これらのK個の処理ユニットは、各パイプライン処理サイクル中にK個の結果を生成するために、メモリから2K個のオペランドを消費する。K個の結果が生成された後、これらの結果は、メモリに書き戻すことができる。
【0015】
[0026]
図1Bは、
図1Aのメモリの構造を示す。従来のシステムでは、メモリは、より高いトランジスタ密度のために、従ってより小さい面積、コスト及びより短い待ち時間のために1R/1W SRAMを使用する。そのようなシステムでは、SRAMアレイの単一のバンクは、W個の1ビットセルを有するD個の行を含み得る。従って、より広範なメモリをサポートするためにマルチバンク設計が使用される。
図1Bに示されるように、従来のシステムは、バンクの数を増加することにより(この事例ではN個のバンク)、広範な並列アクセスを実施することができる。各バンクは、潜在的には、M重の並列読み取り及び書き込みをサポートすることができ、ここで、M=W/data_type_widthである。
図1AのK個のプロセスユニットの場合、各パイプラインサイクルでは、2K回の読み取り(K個のプロセスユニットの各々に対して2つのオペランドに相当する)及びK回の書き込みがある。それに従って、従来のシステムがメモリバンクとして1R/1W SRAMを使用すると、K=M*N/2となり、なぜなら、単一の1R/1W SRAMが各サイクルに2つのオペランドセット(例えば、1つのセットは、オペランドop1に相当し、第2のセットは、オペランドop2に相当する)を供給することになるためであり、各オペランドセットは、利用可能なメモリの半分を占める。
【0016】
[0027] しかし、ディープラーニングなどの莫大なデータ並列処理を必要とするアプリケーションでは、Kの数は、非常に大きい(例えば、512又は1024個の処理ユニット)ことが望ましい。
図1A及び1Bの従来のアーキテクチャでは、2つの主要な問題がある。
【0017】
[0028] 第1の問題は、Kの数がより小さい数に制限されることである。この制限は、メモリ読み取りポートと各バンクの出力ポートとの間にポイントツーポイント接続が存在することが原因である。完全に接続されたクロスバーは、狭幅のポートのみをサポートすることができる。メモリポートとバンクとの間のアービタ制御との何らかのよりスマートな接続により、そのような論理の待ち時間は、データ並列処理の幅の増大と共に急速に蓄積される。このデータ並列処理の幅の増大により、対応する待ち時間の増大がパイプライン設計において受け入れ難いものになるため、より広範な並列アクセスメモリのスケールアップが程なく停止する。例えば、従来のシステムでは、例示的な設計は、一般に、16個以下のバンクを有する。各バンクが最大でW=256ビット幅をサポートする場合、16ビットのデータタイプに対し、最大の可能なKの値は、K=[256/(16*2)]*16=128となる。このKの値は、ディープラーニングにおける予期データ並列処理幅として極めて小さいものと見なされる。
【0018】
[0029] 従来のシステムの第2の問題は、バンクコンフリクトに関与する。2つ以上の処理ユニットが互いにM/2離間し、同じバンクから読み取られる際、単一の読み取りポートを有するSRAMは、同じサイクルにおいて両方のユニットにアクセスを供給することができない。衝突が発生したアクセスは、シリアル化される。このシリアライゼーションは、受け入れ難いものであり、なぜなら、演算プログラムを減速するのみならず、固定待ち時間での各命令のスムーズな進行が予期されるSIMDマシンの簡単な制御パターンを複雑にするためである。さらに、シリアライゼーションは、データ依存性を取り扱うための静的/動的メカニズムも複雑にする。
【0019】
[0030] 開示される実施形態は、ニューラルネットワークにおけるメモリ装置の改善及びメモリ装置を制御するための方法に関する。例示的な実施形態のいくつかは、より広範な単一命令複数データ(SIMD)アーキテクチャ及びソフトウェアパイプライン方式を可能にするメモリ構造の組織化及び分類を対象とする。SIMDは、複数のデータポイントにおいて同じ動作を同時に実行する複数の処理ユニットを有するコンピュータアーキテクチャである。そのような装置は、ソフトウェアパイプライン方式を特徴とするニューラルネットワークで使用することができる。ソフトウェアパイプライン方式は、ハードウェアパイプラインと並行する方法でループを最適化するために使用される技法である。ソフトウェアパイプライン方式は、idの並べ替えがプロセッサの代わりにコンパイラによって行われることを除いて、順不同実行タイプのものである。
【0020】
[0031] 例示的な実施形態は、本明細書では、例としてニューラルネットワークの使用によって説明される。本明細書で提供される実施形態は、ニューラルネットワークの使用によって説明されるが、例示的な実施形態は、演算を最適化することができる他のいかなるシステムにも適用できることを理解されたい。
【0021】
[0032]
図2は、例示的なニューラルネットワーク処理ユニット(NPU)アーキテクチャ100を示す。NPUアーキテクチャ100は、オンチップ通信システム110、ホストメモリ120、メモリコントローラ130、直接メモリアクセス(DMA)ユニット140、ジョイントテストアクショングループ(JTAG)/テストアクセスエンド(TAP)コントローラ150、周辺機器相互接続エクスプレス(PCIe)インタフェース160、バス170、グローバルメモリ126及び同様のものを含み得る。オンチップ通信システム110は、通信データに基づいてアルゴリズム動作を実行できることが理解される。その上、NPUアーキテクチャ100は、メインメモリとして機能するためのオンチップメモリブロック(例えば、第二世代の8GB高帯域幅メモリ(HBM2)の4つのブロック)を有するグローバルメモリ126を含み得る。
【0022】
[0033] オンチップ通信システム110は、グローバルマネージャ112及び複数のコア116を含み得る。グローバルマネージャ112は、1つ又は複数のコア116と協調するように構成された1つ又は複数のタスクマネージャ114を含み得る。各タスクマネージャ114は、ニューラルネットワークのためのシナプス/ニューロン回路を提供するコア116のアレイと関連付けることができる。例えば、
図2のコアの最上層は、ニューラルネットワークへの入力層を表す回路を提供することができ、コアの第2の層は、ニューラルネットワークの1つ又は複数の隠れ層を表す回路を提供することができる。
図2に示されるように、グローバルマネージャ112は、コア116の2つのアレイと協調するように構成された2つのタスクマネージャ114を含み得る。
【0023】
[0034] コア116は、1つ又は複数の処理要素を含み得、1つ又は複数の処理要素の各々は、グローバルマネージャ112の制御下で通信データに対する1つ又は複数の演算(例えば、乗算、加算、乗累算など)を実行するように構成された1つ又は複数の処理ユニットを含む単一命令複数データ(SIMD)アーキテクチャを含む。通信データパケットにおける演算を実行するため、コア116は、データパケットを格納するための少なくとも1つのバッファ、命令を格納するための1つ又は複数のバッファ、データパケットの情報を格納するための1つ又は複数のメモリ及びデータパケットの情報を処理するための1つ又は複数の処理要素を含み得る。各処理要素は、いかなる数の処理ユニットも含み得る。いくつかの実施形態では、コア116は、タイル又は同様のものと見なすことができる。
【0024】
[0035] ホストメモリ120は、ホストCPUのメモリなどのオフチップメモリであり得る。例えば、ホストメモリ120は、DDRメモリ(例えば、DDR SDRAM)又は同様のものであり得る。ホストメモリ120は、1つ又は複数のプロセッサ内で統合されたオンチップメモリと比べて、低アクセス速度で大量のデータを格納するように構成することができ、高次キャッシュの役割を果たす。
【0025】
[0036] メモリコントローラ130は、グローバルメモリ126内のメモリブロック(例えば、HBM2)からのデータの読み取り及びメモリブロックへのデータの書き込みを管理することができる。例えば、メモリコントローラ130は、チップ通信システム110の外部から(例えば、DMAユニット140から若しくは別のNPUと連通するDMAユニットから)又はチップ通信システム110の内部から(例えば、グローバルマネージャ112のタスクマネージャによって制御された2Dメッシュを介してコア116のローカルメモリから)到来するデータの読み取り/書き込みを管理することができる。その上、
図1には1つのメモリコントローラが示されているが、NPUアーキテクチャ100において複数のメモリコントローラを提供できることが理解される。例えば、グローバルメモリ126内の各メモリブロック(例えば、HBM2)に対して1つずつメモリコントローラが存在し得る。
【0026】
[0037] メモリコントローラ130は、メモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。メモリコントローラ130は、1つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタを含み得る。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、1つ又は複数の制御レジスタ及び他のタイプのレジスタを含み得る。これらのレジスタは、ソース、送り先、転送方向(入力/出力(I/O)デバイスから読み取るか若しくはI/Oデバイスに書き込む)、転送単位のサイズ、1バーストで転送されるバイト数及び/又はメモリコントローラの他の典型的な特徴のいくつかの組合せを指定することができる。
【0027】
[0038] DMAユニット140は、ホストメモリ120とグローバルメモリ126との間のデータ転送を補助することができる。加えて、DMAユニット140は、複数のNPU間のデータ転送を補助することができる。DMAユニット140は、CPU割り込みを引き起こすことなく、オフチップデバイスがオンチップメモリとオフチップメモリとの両方にアクセスできるようにすることができる。従って、DMAユニット140もメモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。DMAユニット140は、1つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタ(メモリアドレスレジスタ、バイトカウントレジスタ、1つ又は複数の制御レジスタ及び他のタイプのレジスタを含む)を含むこともできる。これらのレジスタは、ソース、送り先、転送方向(入力/出力(I/O)デバイスから読み取るか若しくはI/Oデバイスに書き込む)、転送単位のサイズ及び/又は1バーストで転送されるバイト数のいくつかの組合せを指定することができる。NPUアーキテクチャ100は、複数のNPUアーキテクチャがホストCPUを巻き込むことなく直接通信できるように、他のNPUアーキテクチャ間でデータを転送するために使用することができる第2のDMAユニットを含み得ることが理解される。
【0028】
[0039] JTAG/TAPコントローラ150は、システムアドレス及びデータバスへの直接的な外部アクセスを必要としないNPUへの低オーバヘッドアクセスのためのシリアル通信インタフェース(例えば、JTAGインタフェース)を実装する専用デバッグポートを指定することができる。JTAG/TAPコントローラ150は、チップ論理レベル及び様々な部品のデバイス能力を提示するテストレジスタセットにアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース(例えば、TAPインタフェース)も有し得る。
【0029】
[0040] 周辺インタフェース160(PCIeインタフェースなど)は、存在する場合、インターチップバスとして機能し(及び典型的にはインターチップバスである)、NPUと他のデバイスとの間の通信を提供する。
【0030】
[0041] バス170は、イントラチップバスとインターチップバスとの両方を含む。イントラチップバスは、システムアーキテクチャに求められるように、すべての内部のコンポーネントを互いに接続する。すべてのコンポーネントが他のすべてのコンポーネントに接続されるわけではないが、すべてのコンポーネントは、通信する必要がある他のコンポーネントへの何らかの接続を有する。インターチップバスは、NPUを他のデバイス(オフチップメモリ又は周辺機器など)と接続する。典型的には、PCIeインタフェースが存在する場合、それは、インターチップバスであり、バス170は、イントラチップバスのみに関係するが、いくつかの実装形態では依然として専用バス間通信に関係し得る。
【0031】
[0042] NPUアーキテクチャ100は、本開示の実施形態を組み込むが、開示される実施形態は、ディープラーニングなどのいくつかのアプリケーションを加速するためのアーキテクチャを有するいかなるアクセラレータチップにも適用できることが理解される。そのようなチップは、例えば、ディープラーニングのためのGPU、ベクトル処理能力を有するCPU又はニューラルネットワークアクセラレータであり得る。SIMD又はベクトルアーキテクチャは、一般的に、グラフィックス処理及びディープラーニングなどのデータ並列処理を伴う演算デバイスをサポートするために使用される。SIMDアーキテクチャは、複数の処理要素を伴い、処理要素の各々は、複数のデータポイントにおいて同じ動作を同時に実行することができる。
【0032】
[0043] いくつかの実施形態では、ニューラルネットワークプロセッサは、コンパイラ(図示せず)を含む。コンパイラは、実行可能プログラムを作成するために、あるプログラミング言語で記載されたコンピュータコードをNPU命令に変換するプログラム又はコンピュータソフトウェアである。マシニングアプリケーションでは、コンパイラは、例えば、前処理、字句解析、構文解析、意味解析、入力プログラムから中間表現への変換、コード最適化及びコード生成又はそれらの組合せなどの様々な動作を実行することができる。
【0033】
[0044] いくつかの実施形態では、コンパイラは、ホストユニット(例えば、ホストメモリ104を有するCPU)上にあり得、ホストユニットは、コマンドをNPU 100にプッシュする。これらのコマンドに基づいて、タスクマネージャ1022は、任意の数のタスクを1つ又は複数のコア(例えば、コア1024)に割り当てることができる。コマンドのいくつかは、ホストメモリ104からグローバルメモリ116に命令及びデータをロードするようにDMAユニット108に指示することができる。次いで、ロードされた命令は、対応するタスクが割り当てられた各コアに分配することができ、1つ又は複数のコアは、これらの命令を処理することができる。
【0034】
[0045] コアによって受信される最初の少数の命令は、グローバルメモリ116からコアの1つ又は複数のローカルメモリ(例えば、コアのメモリ又はコアの各能動処理要素に対するローカルメモリ)にデータをロード/格納するように、コアに指示できることが理解される。次いで、各コアは、命令パイプラインを開始することができ、命令パイプラインは、ローカルメモリから命令をフェッチすること(例えば、フェッチユニットを介して)、命令を復号して(例えば、命令デコーダを介して)ローカルメモリアドレス(例えば、オペランドに対応する)を生成すること、ソースデータを読み取ること、演算を実行するか又はロード/格納すること、及び次いで結果を書き戻すことを伴う。
【0035】
[0046]
図3Aは、ニューラルネットワークの層200の例示的な機能を示し、ソフトウェアアルゴリズム210及びハードウェア220を含む。ハードウェア220は、プライベートメモリモジュール230、処理ユニットアレイ240の1つ又は複数の処理ユニット、共有(例えば、放送)メモリモジュール250、書き込みバッファ260、入力オペランド270、出力オペランド280及び同様のものを含み得る。いくつかの実施形態では、ハードウェア220は、コア(例えば、
図2のコア116)内に位置し得る。プライベートメモリモジュール230と共有メモリモジュール250との両方を組み込む単一且つ均質のメモリモジュールも採用できることを理解されたい。
【0036】
[0047] いくつかの実施形態では、処理ユニットアレイ240の処理ユニットは、乗算、加算、乗累算などの1つ又は複数の演算を提供することができる。処理ユニットアレイ240は、複数の処理ユニット242、244、246及び248(例えば、
図3Bに示されるような処理ユニットのアレイ)を含み得る。
【0037】
[0048] プライベートメモリモジュール230は、別個のプライベートメモリブロックに仕切ることができ、それにより、複数の処理ユニット242、244、246及び248の各々は、
図3Bに示されるように、対応するプライベートメモリセクション232、234、236及び238を有する。
【0038】
[0049] 入力オペランド270は、処理ユニットアレイ240によって演算される入力データであり得る。いくつかの実施形態では、
図3Aの入力オペランド270は、
図3Bに示されるように、1つ又は複数のプライベート入力オペランド272及び1つ又は複数の共有入力オペランド274を含み得る。プライベート入力オペランド272は、プライベートメモリモジュール230に格納することができ、共有入力オペランド274は、共有メモリモジュール250に格納することができる。
【0039】
[0050] ニューラルネットワークのアプリケーションでは、ソフトウェアアルゴリズム210は、共有データを有し、共有データは、共有メモリモジュール250に格納することができ、共有オペランド274として処理ユニットアレイ240の複数の処理ユニット242、244、246及び248の各々にブロードキャストすることができる。例えば、
図3Aに示されるアルゴリズムは、
A=sigmoid(b+X*W1) (式1)
のベクトル演算を演算し、これは、ディープラーニングアルゴリズムにおいて呼び出される場合が多いニューラルネットワークの層200における代表的な演算である。式1を参照すると、「b」は、一定の値を含み得、「X」は、共有入力オペランド274を含み得、「W1」は、プライベート入力オペランド272を含み得る。
【0040】
[0051]
図3Aを参照すると、ベクトルサイズは、任意の自然数として設定することができる。ここで、4のベクトルサイズが例として取り入れられ、ベクトルを演算するための4ウェイSIMDハードウェアが使用される。処理ユニット242、244、246及び248は、以下の演算を並列で演算することができる。
a1=sigmoid(b+x1*W1
11+x2*W1
21+x3*W1
31+x4*W1
41) (式2)
a2=sigmoid(b+x1*W1
12+x2*W1
22+x3*W1
32+x4*W1
42) (式3)
a3=sigmoid(b+x1*W1
13+x2*W1
23+x3*W1
33+x4*W1
43) (式4)
a4=sigmoid(b+x1*W1
14+x2*W1
24+x3*W1
34+x4*W1
44) (式5)
【0041】
[0052]
図3Aの網掛けブロック及び点線は、「a1」がどのように計算されるかを示す。この演算から、「W1」アレイの各列のデータは、処理ユニットアレイ240の対応する処理ユニットに対してローカルであり、データは、プライベートメモリモジュール230の対応するメモリセクションにプライベート入力オペランド272として適宜格納できることが理解される。例えば、W1アレイの第1、第2、第3及び第4の列の各々におけるデータは、プライベートメモリモジュール230のそれらの対応するメモリセクション232、234、236及び238にプライベート入力オペランドとして格納することができる。
【0042】
[0053]
図3Aを参照すると、W1アレイは、格納データの行列を含み得、行列の各要素は、W1ij又はW1_ijとして表され(後に示されるように)、ここで、「i」は、行列の行数を表し、「j」は、行列の列数を表す。例えば、式2では、W1
41は、W1アレイの行4及び列1に位置する要素に格納されたデータを表す。行列の要素をアドレス指定するため、他の一般的に知られている表記も使用することができる。
【0043】
[0054] 同時に、Xアレイのデータは、すべての処理ユニット242、244、246及び248によって利用され、共有メモリモジュール250に共有入力オペランド274として適宜格納され、共有メモリモジュール250からの読み取りを行うすべてのコンポーネントにブロードキャストされる。式2~5は、ニューラルネットワークプロセッサの層200において実行される例示的な演算を表し、a1、a2、a3及びa4を計算するように設計される。
【0044】
[0055] いくつかの実施形態では、機械学習又はディープラーニングは、ニューラル処理の1つ又は複数の層のためのアルゴリズムを実施することによって遂行される、入力データに基づいて最終結果を生成するためにニューラルネットワークプロセッサを訓練することを含む。例えば、
図3Aの層200は、バイアスb、Xアレイに格納されたデータ及びW1アレイに格納されたデータを使用して演算を実行するように構成されたアルゴリズムを含む第1の層を表す。第2及び第3の層(図示せず)は、バイアスb、Xアレイに格納されたデータ並びにW2及びW3アレイに格納されたデータを使用するアルゴリズムを含み得る。各層は、バイアスbの異なる値、及び「W」アレイに格納された異なるパラメータを含み得る。
【0045】
[0056]
図3Aを参照すると、例えば、アレイXは、異なるクラスの個人のスコアを含み得る。アレイXのx1の値は、学生Aの数学のスコアであり得、x2は、英語のスコアであり得、x3は、歴史のスコアであり得、x4は、科学のスコアであり得る。最終結果は、スコア(入力データ)に基づいて、個人が学校への入学許可を得られるか又は入学を拒否されるかである。
図3Aに示されるように、及び式2~5において説明されるように、データx1~x4は、「共有」され、a1~a4の計算において共通である。
【0046】
[0057]
図4は、多層ネットワークにおけるデータ共有を示す。本明細書で説明されるデータ共有は、プライベートデータが以前にプログラムの後の段階においてどのように共有データになり得たかを指す。いくつかの実施形態では、ニューラルネットワークアーキテクチャ300は、多層(例えば、層310及び320)を含む。いくつかの実施形態では、層310の出力オペランド280は、層320に対する入力オペランド270として使用することができる。いくつかの実施形態では、1つの層の出力オペランド280は、1つ又は複数の層によって入力オペランド270として利用することができる。
【0047】
[0058] 例えば、層310では、a1は、プライベートメモリモジュール230の処理ユニット242によって計算される。a1のデータは、層320に対するブロードキャスト入力になる。一般に、ニューラルネットワークは、層に組織化することができる。各層は、その入力において1つ又は複数の演算を実行し、出力を生成することができる。層の出力は、さらなる処理のために次の層に伝えることができる。例えば、前の層の出力は、次の層のための入力であり得る。それに従って、ローカルで生成された「a」は、共有メモリ250に戻して格納するか、又はプライベートメモリ230に格納し、後に共有メモリ250にコピーしなければならない。
【0048】
[0059] プライベートメモリ230に格納し、後に共有メモリ250にコピーすることに対する代替の解決法として、a1からの出力オペランド280は、メモリにコピーするよりも、共有メモリ250に直接戻して格納することができる。それにもかかわらず、この代替の解決法は、依然としてプログラムを減速させる恐れがある。単一の処理ユニット(例えば、処理ユニット242)は、1つのサイクルあたり1つのみの乗加算演算(例えば、Xi*W1_ij)を終了できるため、「a」の各演算は、複数のサイクルにわたって実行され得る。この理由のため、各サイクルにおいてプライベートメモリ230から1つのみのオペランドW1_ijが読み取られ、従って共有メモリ250から1つのみの「X」が必要である。結果的に、各メモリモジュールの共通の設計は、1つのサイクルあたり単一読み取り/単一書き込みである。最後のサイクルにおいて複数の処理ユニットによってすべての「a」が同時に生成される際、共有メモリ250は、それらをすべて書き戻す能力を有さない可能性がある。
【0049】
[0060] いくつかの実施形態では、これらの出力オペランド280を個別に消費するためのさらなる時間を共有メモリ250に与えるための書き込みバッファ260が導入される。しかし、処理ユニット240の出力速度が、書き込みバッファ260の幅より速い(例えば、AのサイズがXより大きい)場合、書き込みバッファ260は、バックプレッシャを伝播し、処理ユニットアレイ240を強制的に減速させ、それによりプログラム全体の実行が減速する。
【0050】
[0061]
図4から理解すべきものとして、ニューラルネットワークアルゴリズムでは、多層の計算が存在し得る。a1は、ALUによって計算され、それにより、a1のデータは、ローカルデータとして現れるようになるが、このデータは、次の演算層においてブロードキャスト入力になり得る。本明細書で提示される例示的な実施形態のいくつかは、そのような衝突を避けるためのメモリ装置及びそれを制御する方法を提供する。
【0051】
[0062]
図5及び
図6は、例示的な実施形態のいくつかによるメモリ装置を示す。
図5は、コアの各処理ユニット0~2Kに対する2つのオペランド「op1」及び「op2」並びに1つの結果「R」を有する単一命令複数データ(SIMD)アーキテクチャを示す。SIMDのメモリユニットは、2つの書き込みポート(フル書き込みポート「F.Write」及びナロー書き込みポート「N.Write」など)と、2つの読み取りポート(フル読み取りポート「F.Read」及びナロー読み取りポート「N.Read」など)とを含む。
【0052】
[0063]
図6は、
図5のメモリ装置の構造を示す。
図6に示されるように、メモリ装置は、4つの別個の記憶ブロックBlock0~Block3を含み、各記憶ブロックは、多くのバンクユニットbank~bankNを含む。いくつかの実施形態によれば、各記憶ブロックは、1R/W SRAMであり得、従来のシステムで使用される1R/1W SRAMより実質的に小さく、より少ない電力を消費する。例示的な実施形態のいくつかによれば、
図6の記憶ブロックの各々は、メモリ装置の書き込み及び読み取りポートの各々に通信可能に結合される。
【0053】
[0064] 例示的な実施形態のいくつかによれば、記憶ブロックの各々が所定の演算サイクル中に演算値の1セットを多くとも読み取るか又は書き込むことができるように、データマッピングスキームを利用することができる。そのような組織は、記憶ブロックにおいて実装及び組織化されるスクラッチパッドメモリを提供する。この組織は、従来のアーキテクチャにおいて遭遇する並列アクセスコンフリクトを効率的に回避する。本明細書で開示されるアーキテクチャは、より広範なSIMDマシンを使用可能にするのみならず、粗粒度ソフトウェアパイプライン方式などの高度な最適化を実施するためのコンパイラも使用可能にする。
【0054】
[0065] 様々な実施形態によれば、コンパイラを使用してデータマッピングを制御することができるため、
図6に示されるように、コンパイラは、op-1及びop-2をそれぞれブロック0及び1に割り当てることができる。このアーキテクチャは、
図1A及び1Bに関連して説明される従来のシステムの物理的な限界を克服する。それに従って、
図5に示されるように、
図1Aに示されるアーキテクチャと比べてSIMDの2K幅を効率的にサポートすることができる。
【0055】
[0066]
図7は、本開示の実施形態と一致する
図5及び6のメモリ装置の例示的な実装形態の詳細な概略図を提供する。例示の目的のため、
図6及び7に示される実施形態では、処理ユニット630の数は、32個に等しく、データ幅は、16ビットに等しいが、開示される実施形態と一致するコアにわたるいかなる数の処理ユニット及びデータ幅も使用できることが理解される。例えば、コアが32個の処理要素を有し、処理要素の各々が32個の処理ユニットを有すると、その合計は、そのコアに対して1024個の処理ユニットとなる。
【0056】
[0067] 例えば、
図7に示されるように、下位処理要素層では、開示される例示的な実施形態は、処理要素の1つにおける32個の処理ユニット630(例えば、
図7に示される乗累算器リデューサ(MAR)など)を組織化し、データ共有のためにこれらの32個の処理ユニット630に対して集中型の共有メモリ(ローカルメモリ(LM)620と呼ばれる)を使用する。LM 620は、
図5及び6のメモリ装置に等しい。例示的な実施形態のいくつかによれば、複数の処理要素610は、データハブ又はDMAユニットを介してシステムにまとめて接続される。いくつかの実施形態では、各処理要素のローカルメモリは、分散型共有メモリアーキテクチャを形成することができる。これらのローカルメモリは、グローバルにアドレス指定することができ、データハブを介して電気的に接続され、それにより高速共有能力が提供される。
【0057】
[0068] 各ローカルメモリ620は、フルポート(例えば、
図7のローカルメモリ620の左側の2つのポートであり、16ビットを有する32個の接続を伴うF.write及びF.readポートと関連付けられ、処理要素の各処理ユニットに対して1つずつの接続である)を含み得、ローカルメモリ620への並列アクセスを処理ユニット630に提供する。フルポートは、ニューラルネットワークの完全に接続された層の重みなど、プライベートデータへのSIMDアクセスに対して使用することができる。ローカルメモリ620に格納され、同じローカルメモリと関連付けられた処理ユニット630と直接共有されるローカルデータは、プライベートデータと見なすことができることが理解される。各ローカルメモリ620は、ナローポート(例えば、
図7のローカルメモリ620の右側の2つのポートであり、16ビットを有する1つの接続を伴うN.write及びN.readポートと関連付けられる)も含み得、メモリへのナローアクセスを処理ユニット630に提供する。ナローポートは、ブロードキャストされる又はブロードキャストされた共有データに対して使用することができる。リモートデータ(例えば、別の処理要素のメモリ又はDMAユニットに格納されたもの)及び1つ又は複数の他の処理要素及びそれらの対応する処理ユニット630と共有されるデータは、共有データと見なすことができることが理解される。例示的な実施形態のいくつかによれば、ナロー書き込みポート「N.write」は、マルチプレクサMUX 731を介してDMA及びデータハブにアクセスするために使用することができる。
図7では、太線で示されるデータ通信回線は、「全幅」通信回線(例えば、16ビット×32)を指すことを理解されたい。太線でないデータ通信回線は、「狭幅」通信回線(例えば、16ビット)を指す。狭幅通信回線は、16、16×2、16×3ビットなどであり得ることを理解されたい。その上、通信回線幅は、16ビットに限定する必要はなく、4ビット、8ビット、32ビットなどであり得ることを理解されたい。
【0058】
[0069] フルポート及びナローポートは、ローカルメモリ620の異なる記憶ブロックと関連付けるように構成される。ローカルメモリ620のこれらの複数の記憶ブロック(例えば、それぞれ1R/W SRAMであり得る記憶ブロックBlock0~Block3)は、例えば、マルチプレクサ(例えば、マルチプレクサ705、710、740及び745)を介してすべてのフル及びナローポートに物理的に接続され、これらのポートへの及びこれらのポートからの同時アクセスを提供することができる。例えば、読み取りポートに関し、各ポートに対して1つずつのマルチプレクサがあり(例えば、F.readポートに対してマルチプレクサ705があり、N.readポートに対してマルチプレクサ710がある)、両方とも各々の記憶ブロックに接続される。例えば、
図7に示されるように、記憶ブロックBlock0及びBlock3は、マルチプレクサ705とマルチプレクサ710との両方に通信可能に結合される。簡単にするために示されていないが、記憶ブロックBlock1及びBlock2も結合される。それに従って、
図7に示される実施形態の場合、マルチプレクサ705とマルチプレクサ710との両方は、4:1マルチプレクサであり得、マルチプレクサへの入力の数は、ローカルメモリの記憶ブロックの数と一致する。例えば、8個の記憶ブロックがある場合、マルチプレクサ705とマルチプレクサ710との両方は、8:1マルチプレクサであり得る。記憶ブロックとマルチプレクサ710との間に1つ又は複数の他のマルチプレクサが存在し得ることが理解される。例えば、32個の16ビットの出力が存在する状況では、32:1マルチプレクサは、N.readポートに提供するために、32個の入力の1つを選択することができる。マルチプレクサ705及び710は、選択信号(コンパイラ命令を介して)を受信することができ、選択信号は、それらの対応するポートから出力される信号を選択するものである。
【0059】
[0070] 書き込みポートに関し、各記憶ブロックは、F.writeポートとN.writeポートとの両方から受信される入力を選択する1つ又は複数の対応する2:1マルチプレクサを有する。例えば、
図7に示されるように、マルチプレクサ740及び745は、それぞれ記憶ブロックBlock0及びBlock3に対応し得る。選択信号(コンパイラ命令を介して)に基づいて、マルチプレクサ740及び745は、それらの対応する記憶ブロックに対し、フル書き込みポート又はナロー書き込みポートを介して受信された選択データを提供することができる。簡単にするために示されていないが、記憶ブロックBlock1及びBlock2にデータを書き込むために同様のマルチプレクサを使用することができる。いくつかの実施形態では、データが記憶ブロックに書き込まれている状況では、F.write又はN.writeポートのいずれかから受信された16ビットの入力の1つを選択する32個の2:1マルチプレクサ(32個の16ビットの各入力に対して1つずつ)が存在し得る。記憶ブロックBlock0~Block3とポートとの間のこれらの接続の構成は、コアによって受信された命令に基づいて確立することができる。
【0060】
[0071] 例えば、1つ又は複数のコアにおいて実行されるSIMD命令のシーケンスは、Aout[1024]=W1[1024]*Ain[1]の計算を実行するために、32個の処理要素の各々のすべての32個の処理ユニット630に関与し得る。
【0061】
[0072] 32個の処理ユニットがある
図7のコンポーネントに対してこの計算を簡単にするため、コンポーネントは、Aout[32]=W1[32]*Ain[1]の計算を実行することができる。この例では、記憶ブロックBlock0~Block3は、データを格納するために使用することができ、Block0は、データW1[32]を格納し、Block1は、DMAユニットを介してバックステージ制御シーケンスを介して受信されたデータAin[1]を格納する。後にさらに説明されるように、32個の処理ユニットは、結果Aout[32]を生成するために、Ainオペランドと、W1オペランドの1つとを受信し、対応する演算を実行することができ、結果Aout[32]は、mux 730及びフル書き込みポートを介してローカルメモリ620に戻すことができる。
【0062】
[0073] 各記憶ブロックBlock0~Block3の設計は、1R/1W SRAM(1回の読み取り及び1回の書き込みを提供することができる)の代わりに、1つの1R/W SRAMを使用して実施することができ(各記憶ブロックは、サイクルする1つの読み取り記憶ブロック又は1つの書き込み記憶ブロックとして機能する)、それにより約30%のシリコンエリア低減及び電力節約がもたらされる。この例では、記憶ブロックBlock0~Block3は、同一の機能を有し、ソフトウェアに基づいて、1つのサイクルあたり1つの読み取り記憶ブロック又は書き込み記憶ブロックとして機能するように構成することができる。すなわち、データ衝突を避けるため、任意の所定のサイクルに対して1つのポートを介する1つの専用記憶ブロックを通じるデータフローが1つのみ存在することを満たす限り(ただし、すべての記憶ブロックは、すべてのポートに物理的に接続される)、任意のタイプのデータ(プライベートデータ又は共有データにかかわらず)を任意の記憶ブロックに格納することができる。その上、他の記憶ブロックが存在し得、クロックサイクルに応じてアイドル状態であり得ることが理解される。
【0063】
[0074] 様々な実施形態によれば、コンパイラは、データレーン間のバンクコンフリクトを回避するために、各ブロックアクセスにおけるアドレスアラインメントを確立することができる。従来のアーキテクチャとは対照的に、
図5~7のメモリ装置は、様々な記憶バンクが1つの演算サイクルあたり多くとも1つの演算値(例えば、現在の又は次の演算サイクルで使用される演算結果又はオペランド)において動作できるようにするための手段を提供することにより、コンパイラがバンクコンフリクトを回避できるようにする。従来のシステムでは、op-1及びop-2は、両方のオペランドを格納するために同じバンクが利用される場合、衝突を引き起こす。op-1及びop-2を同じブロックに割り当てることにより、アラインされていないアドレスが生じ得、これを受けて、同じオペランド(op-1又はop-2)の異なるデータレーンからのバンクコンフリクトが生じる。本明細書で提供される実施形態によれば、オペランドは、異なる記憶ブロックに割り当てられる。具体的には、所定のいかなる演算層でも、記憶ブロックは、1つの演算値を多くとも読み取るか又は書き込むことができる。
【0064】
[0075]
図8は、
図5~7の記憶ブロックによって提供することができるデータマッピング及び動作モードの例を提供する表を示す。
図9は、複数の演算層中における
図6の様々な記憶ブロックの機能を示す概略図である。
図9の最初の2つの演算層は、
図8の表で提供される例示的な層に相当する。
【0065】
[0076]
図9に示されるように、各演算層は、いかなる数のサイクルも含み得る。
図8及び9において提供される例では、各演算層は、少なくとも2つのサイクル(
図9ではCr及びCwとラベル付けされる)を含む。具体的には、各演算層は、少なくとも1つの読み取りサイクルCrと、少なくとも1つの書き込みサイクルCwとを含む。例示的な実施形態のいくつかによれば、各演算層の開始時、コンパイラは、様々な記憶ブロックの機能又は動作モードに関する命令をメモリ装置に提供することができる。
【0066】
[0077]
図8及び9において提供される例では、層1のサイクルCrにおいて、記憶ブロックBlock1に演算動作モードが割り当てられる。演算動作モードでは、記憶ブロックは、現在の演算層のために実行される演算で使用するオペランドを取得するように構成することができる。本例では、Block1は、第1のオペランド(A
1)を読み取る。
【0067】
[0078] サイクルCr中、Block0には、演算動作モードが割り当てられ、従って現在の演算層の演算で使用するオペランドのアレイを取得するように構成される。
図8及び9によって提供される例では、Block0は、オペランドセットを有するアレイW
1を取得する。
【0068】
[0079] すべてのオペランドが得られた時点で、処理ユニットは、演算を実行することができる。例えば、
図7に示されるように、処理ユニット(MAR)は、メモリ装置のF.Read及びN.Readポートを介してBlock1及びBlock0からそれぞれ第1のオペランド(A
1)及びアレイW
1からのオペランドの1つを受信するように構成することができる。例えば、記憶ブロックBlock0は、アレイW
1に32個のオペランドを有し得、それらは、すべてフル読み取りポートに出力される。アレイW
1のこれらのオペランドの各々は、演算のために別個の処理ユニットに提供される。さらに、記憶ブロックBlock1に格納された第1のオペランドA
1は、ナロー読み取りポートに出力することができる。第1のオペランドA
1は、アレイW
1からのそれぞれのオペランドと共に演算するために処理ユニットの各々に提供し、A
2[32]=W
1[32]*A
1[1]という結果を生成することができる。
【0069】
[0080] 書き込みサイクルCw中、Block2に結果動作モードが割り当てられる。結果動作モード中、記憶ブロックは、現在の演算層内において、第1及び第2のオペランドに関与する演算の結果(例えば、A2)を格納するように構成される。結果は、処理要素の処理ユニットを介して、F.Writeポートを通じて(マルチプレクサ730を介して)提供される。Block2は、記憶ブロックBlock2のバンク内に、演算の1つ又は複数の結果として生じたオペランドA2を格納することができる。例えば、A2[32]の結果からの単一のオペランドをBlock2に格納する(マルチプレクサ730の選択信号を介して)ことができるが、A2[32]の結果からのすべてのオペランドを格納できることが理解される。
【0070】
[0081] また、書き込みサイクルCw中、Block3にプリロード動作モードが割り当てられる。プリロード動作モード中、記憶ブロックは、次の演算層の演算中に使用されるW
2アレイに対するオペランドを取得するように構成される。例示的な実施形態のいくつかによれば、プリロードされるオペランドは、DMAからメモリ装置のナロー書き込みポートを介して取得することができる。
図8及び9によって提供される例では、プリロードアレイW
2は、DMAから取得され、記憶ブロックBlock3のバンクユニット内に格納される。
【0071】
[0082] 次の演算層(層2)中、前の層からの記憶ブロックに書き込まれた2つの値が利用される。具体的には、層1からの結果であるA2[32]は、層2では第1のオペランドとして使用され、プリロードされたオペランドであるW2アレイは、第2のオペランドとして使用される。従って、記憶ブロックBlock2及びBlock3の動作モードは、層2の開始時、演算動作モードに動的に調整される。第1及び第2のオペランドであるA2[32]及びW2アレイは、層2の読み取りサイクルCr中、記憶ブロックBlock2及びBlock3のバンクユニットから読み取られる。
【0072】
[0083] 演算層2で使用されるオペランドは、既に記憶ブロックに提供されているため、処理要素の処理要素は、演算を即座に実行することができる。第1及び第2のオペランドであるA2[32]及びW2アレイは、メモリ装置のF.Read及びN.Readポートを介して記憶ブロックBlock2及びBlock3からそれぞれ取得される。
【0073】
[0084] 演算層2の書き込みサイクルCw中、記憶ブロックBlock0に結果動作モードが割り当てられる。従って、結果は、処理要素の処理ユニットを介して、フル書き込み又はナロー書き込みポートを通じて記憶ブロックBlock0に提供される。記憶ブロックBlock0は、記憶ブロックBlock0のバンク内に演算の結果A3を格納する。
【0074】
[0085] また、層2の書き込みサイクルCw中、Block1にプリロード動作モードが割り当てられる。例示的な実施形態のいくつかによれば、プリロードされるオペランドは、DMAからメモリ装置のナロー書き込みポートを介して取得することができる。
図8及び9によって提供される例では、プリロードオペランドW
3は、DMAからナロー書き込みポートを介して取得され、記憶ブロックBlock1のバンクユニット内に格納される。
【0075】
[0086] 層2の場合と同様に、次の演算層(層3)中、前の層からの記憶ブロックに書き込まれた2つの値が利用される。具体的には、層2からの結果であるA3は、層3では第1のオペランドとして使用され、プリロードされたオペランドであるW3は、第2のオペランドとして使用される。従って、記憶ブロックBlock0及びBlock1の動作モードは、層3の開始時、演算動作モードに動的に調整される。第1及び第2のオペランドであるA3及びW3は、層3の読み取りサイクルCr中、記憶ブロックBlock0及びBlock1のバンクユニットから読み取られる。
【0076】
[0087] その後、処理要素の処理要素は、演算を実行する。第1及び第2のオペランドであるA3及びW3は、メモリ装置のF.Read及びN.Readポートを介して記憶ブロックBlock0及びBlock1からそれぞれ取得される。
【0077】
[0088] 層3の書き込みサイクルCw中、記憶ブロック2に結果動作モードが割り当てられる。従って、結果は、処理要素の処理ユニットを介して、マルチプレクサ730を介して、F.Writeポートを通じて記憶ブロックBlock2に提供される。記憶ブロックBlock2は、記憶ブロックBlock2のバンク内に演算の結果A4を格納する。
【0078】
[0089] また、層3の書き込みサイクルCw中、Block3にプリロード動作モードが割り当てられる。従って、プリロードオペランドW4は、DMAから取得され、記憶ブロックBlock3のバンクユニット内に格納される。このサイクル中に格納されたプリロードオペランドは、次の演算層中にオペランドとして使用される。
【0079】
[0090] 例示的な実施形態のいくつかによれば、読み取りサイクルCr及び書き込みサイクルCw中にそれぞれ実行される読み取り及び書き込みは、演算層内で同時に又は順次に起こり得る。
図8及び9によって提供される例では、記憶ブロックは、読み取り(例えば、演算モード)並びに書き込み(例えば、結果及びプリロードモード)に焦点を合わせた動作モードを交互に繰り返すことを理解されたい。
【0080】
[0091] それぞれの演算層において起こるステップは、いかなる数のサイクルでも実行できることを理解されたい。例えば、例示的な実施形態のいくつかによれば、オペランドの読み取り(例えば、演算モードの記憶ブロックによって)を伴う動作は、同じサイクルにおいて起こり得る。さらに、プリロードオペランドの書き込みは、オペランドの読み取りと同じサイクルにおいて、演算結果の書き込み(例えば、結果モードの記憶によって)と同じサイクルにおいて又は異なる若しくは別個のサイクルにおいて起こり得る。
【0081】
[0092] 例示的な実施形態のいくつかによれば、様々な記憶ブロックの動作モードを動的に変更することに加えて、記憶ブロックによってアクセス可能なデータのタイプも変更することができる。例えば、DMAからの読み取りオペランド(例ではラベルWが割り当てられている)に割り当てられる記憶ブロックを変更することができる。異なるタイプのオペランドは、他のものと比べて大きいサイズのものであり得る。従って、記憶ブロックを変更することにより、ブロックが受信しているデータのタイプ及びいずれのソースからのものであるかに関し、個々のブロックの記憶需要のバランスを保つことについて補助をすることができる。
【0082】
[0093]
図8及び9によって提供される例では、ある演算層において結果モードが割り当てられた記憶ブロックには、次の演算層において演算モードが割り当てられる。演算の結果は、結果モードの記憶ブロックのバンクユニット内に格納されるため、追加のデータ取得は、排除される。具体的には、次の演算層中に同じ記憶ブロックが演算モードに移行した時点で、前の演算層の結果であったオペランドは、記憶ブロックのバンクユニット内に既に格納されている。従って、決定及び演算モードの一定の移行を提供することにより、ニューラルネットワークの処理速度を向上することができる。
【0083】
[0094] 加えて、プリロード動作モードの使用により、ニューラルネットワークの処理速度を増加することもできる。オペランドのプリロードにより、新しい演算層の開始時に速やかに演算を実行することができる。具体的には、各演算層の開始時、演算に必要な2つのオペランドは、結果及び演算モードの移行及びプリロードの使用を介して記憶ブロックに既に存在している。
【0084】
[0095]
図10は、
図5~9のメモリ装置によって行うことができる例示的な動作を描写するフロー図である。
図10は、実線の枠線で示されるいくつかの動作及び破線の枠線で示されるいくつかの動作を含むことを理解されたい。実線の枠線で囲まれる動作は、最大限広範な例示的な実施形態に含まれる動作である。破線の枠線で囲まれる動作は、枠線の例示的な実施形態の動作に含まれるか、その動作の一部であるか又はその動作に加えて行うことができるさらなる動作である例示的な実施形態である。これらの動作は、順番に実行する必要がないことを理解されたい。その上、すべての動作を実行しなければならないわけではないことを理解されたい。例示的な動作は、いかなる順番及びいかなる組合せでも実行することができる。
【0085】
[0096]
図10の例示的な動作について、
図8及び9において提供される例を使用して説明し、メモリ装置は、少なくとも4つの記憶メモリブロックを含む。
図10の例示的な動作8~14は、第1の演算層(
図9に示される層1)内で行われる。
図10の例示的な動作15~19は、第2の演算層(
図9に示される層2)内で行われる。
【0086】
[0097] Block0及びBlock1としてラベル付けされたブロックは、第1の記憶ブロックのセットに含まれ、Block2及びBlock3としてラベル付けされたブロックは、第2の記憶ブロックのセットに含まれる。
図8及び9において提供される例に示されるように、第1の記憶ブロックのセットは、最初に(例えば、第1の演算層中に)メモリからオペランドを読み取るように構成され、第2の記憶ブロックのセットは、最初にメモリにオペランドを書き込むように構成される。第2の演算層中、第1及び第2の記憶ブロックのセットの動作が切り替えられ、それにより、第1の記憶ブロックのセットは、書き込みベースモードで動作するように構成され、第2の記憶ブロックのセットは、読み取りベースモードで動作するように構成される。
【0087】
[0098] 例示的な実施形態のいくつかは、ステップ8において、各演算層のために第1及び第2の記憶ブロックのセットの動作モードを制御する命令をコンパイラから受信することを含み得る。例示的な実施形態のいくつかによれば、命令は、コンパイラにより、ホストユニットを介してメモリ装置に提供することができる。命令は、例えば、すべての演算サイクルの開始時又は任意の既定の時間間隔中に受信することができる。
【0088】
[0099] ステップ8において命令を受信した後、例示的な実施形態のいくつかは、受信された命令に基づいて第1及び第2の記憶ブロックのセットの動作モードを設定すること(ステップ9)をさらに含み得る。従って、記憶ブロックの動作モードは、各演算層の開始時に動的に調整することができる。例えば、
図9で描写されるように、動作ブロックは、連続する演算層中、書き込みベースモードから読み取りベースモードに交互に繰り返すことができる。
【0089】
[00100] 例示的な実施形態のいくつかは、ステップ10において、第1の演算層において、メモリ装置の読み取りポートを介して少なくとも1つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして動作する第1の記憶ブロックのセットを選択することを含む。
図9によって提供される例では、記憶ブロックBlock0及びBlock1は、両方とも読み取りモードに設定される。例示的な実施形態のいくつかによれば、ステップ10における選択することは、第1の記憶ブロックのセットの動作モードを演算動作モードに設定することを伴うステップ11をさらに含み得、それにより、第1の記憶ブロックのセットは、演算で使用されるオペランドを読み取り(少なくとも1つの処理ユニットを介して)、第1の演算層において実行するように構成される。
図9に示されるように、記憶ブロックBlock0及びBlock1は、両方とも演算モードであり、それにより、ブロックは、層1において実行される演算のためにW
1及びA
1のそれぞれの入力からオペランドを読み取るように構成される。例示的な実施形態のいくつかによれば、
図7と併用して説明されるように、読み取ることは、フル読み取り又はナロー読み取りポートを介して実行することができる。
【0090】
[00101] 例示的な実施形態のいくつかは、格納のためにメモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第2の記憶ブロックのセットを選択することを伴うステップ12を含み得る。
図9に示されるように、記憶ブロックBlock2及びBlock3は、層1中、書き込みベースモードで提供される。具体的には、記憶ブロックBlock2及びBlock3は、それぞれ記憶ブロック自体のバンクユニット内に、演算の結果A
2及びW
2に対するプリロード動作を書き込むように構成される。例えば、W
2入力アレイの各オペランドを別個のバンクに格納することができるように、記憶ブロックの各バンクユニットは、1つ又は複数のオペランドを格納することができる。
【0091】
[00102] 例示的な実施形態のいくつかによれば、ステップ12の選択することは、第2の記憶ブロックのセットの第1の記憶ブロックを結果モードに設定すること(ステップ13)をさらに含み、それにより、第1の記憶ブロックは、第1の演算層における実行された演算の結果を第1の記憶ブロック内に書き込むように構成される。
図9に示されるように、第2の記憶ブロックのセットの第1の記憶ブロックは、Block2として示される。Block2は、入力W
1及びA
1からのオペランドに関与する演算からの結果A
2を書き込むように構成される。
図7に示されるように、少なくとも処理ユニットを介して演算され次第、演算の結果は、処理ユニットとフル書き込みポート(F.write)との間のフィードバック接続を介して第1の記憶ブロックに提供することができる。
【0092】
[00103] 例示的な実施形態のいくつかは、第2の記憶ブロックのセットの第2の記憶ブロックの動作モードをプリロードモードに設定すること(ステップ14)をさらに含み得る。そのようなモード下では、第2の記憶ブロックは、第2の演算層において実行される演算で使用されるプリロードオペランドを第2の記憶ブロック内に書き込むように構成される。
図9に示されるように、第2の記憶ブロックのセットの第2の記憶ブロックは、Block3として示される。Block3は、入力W
2のオペランドをBlock3のバンクユニットに書き込むように構成される。W
2入力アレイからのオペランドは、層2中に使用されるオペランドである。従って、これらのオペランドは、層1中にプリロードすることができる。そのようなプリロードにより、演算層2の開始時に複数のメモリ読み取りを行う必要なく、演算層2の演算を速やかに行うことができる。
図7に示されるように、第2の記憶ブロックは、DMAからナロー書き込みポート(N.write)を介してプリロードオペランドを書き込むことができる。
【0093】
[00104] 例示的な実施形態のいくつかは、第2の演算層の開始時、書き込み記憶ブロックのセットとして動作する第1の記憶ブロックのセットを選択することを伴うステップ15を含む。
図9に示されるように、Block0及びBlock1として示される第1の記憶ブロックのセットは、最初に層1において読み取りベースモードであったものであり、その後、演算層2において書き込みベースモードにされる。
【0094】
[00105] 例示的な実施形態のいくつかによれば、ステップ15の選択することは、ステップ16において、第1の記憶ブロックのセットの第1の記憶ブロックの動作モードを結果モードに設定することをさらに含み得る。その動作モード下で動作するように設定されると、第1の記憶ブロックは、第2の演算層における実行された演算の結果を第1の記憶ブロック内に書き込むように構成される。
図9に示されるように、第1の記憶ブロックのセットの第1の記憶ブロックは、Block0として示される。第2の演算層(層2)の開始中、Block0は、層2の演算の結果A
3の1つ又は複数のオペランドを書き込むように構成される。
図7に示されるように、少なくとも処理ユニットを介して演算され次第、演算の結果は、処理ユニットとフル書き込みポート(F.write)との間のフィードバック接続を介して第1の記憶ブロックに提供することができる。
【0095】
[00106] 例示的な実施形態のいくつかによれば、ステップ15の選択することは、ステップ17において、第1の記憶ブロックのセットの第2の記憶ブロックの動作モードをプリロードモードに設定することをさらに含み得る。そのようなモード下で動作すると、第2の記憶ブロックは、第3の演算層において実行される演算で使用されるプリロードオペランドを第2の記憶ブロック内に書き込むように構成される。
図9に示されるように、第1の記憶ブロックのセットの第2の記憶ブロックは、Block1として示される。第2の演算層の開始中、Block1は、W
3アレイのプリロードオペランドをBlock1の1つ又は複数のバンクユニット内に書き込むように構成される。例えば、W
3入力アレイの各オペランドを別個のバンクに格納することができるように、記憶ブロックの各バンクユニットは、1つ又は複数のオペランドを格納することができる。
図7に示されるように、第2の記憶ブロックは、DMAからナロー書き込みポート(N.write)のいずれかを介してプリロードオペランドを書き込むことができる。
【0096】
[00107] 例示的な実施形態のいくつかは、読み取り記憶ブロックのセットとして動作する第2の記憶ブロックのセットを選択することを伴うステップ18をさらに含み得る。
図9に示されるように、Block2及びBlock3として示される第2の記憶ブロックのセットは、最初に(例えば、演算層1において)書き込みベースモードにされる。第2の演算層の開始時、第2の記憶ブロックのセットBlock2及びBlock3は、読み取りベースモードにされる。
【0097】
[00108] 例示的な実施形態のいくつかによれば、ステップ18の選択することは、ステップ19において、第2の記憶ブロックのセットの動作モードを演算モードに設定することをさらに含み得る。そのようなモード下で動作すると、第2の記憶ブロックのセットは、第2の演算層において実行される演算で使用されるオペランドを読み取るように構成される。
図9に示されるように、Block2及びBlock3として示される第2の記憶ブロックのセットは、最初に(例えば、演算層1内において)それらのそれぞれのバンクユニットにオペランドを書き込むように構成される。第2の演算層の開始時、Block2及びBlock3は、第2の演算層内で実行される演算を実行するために演算モードにされ、少なくとも1つの処理ユニットにオペランド(層1において書き込まれたものであり、入力A
2及びW
2のオペランドである)を速やかに提供する。従って、書き込みベースモードから読み取りベースモードへと記憶ブロックのモードを交互に繰り返すことにより、演算の実行に必要なオペランドは既に記憶ブロック内に格納されているため、演算速度を増加することができる。
【0098】
[00109] 本明細書で説明される様々な例示的な実施形態は、方法ステップ又はプロセスに一般的に関連して説明されており、方法ステップ又はプロセスは、一態様では、コンピュータ可読媒体において具体化されるコンピュータプログラム製品(ネットワーク接続環境においてコンピュータによって実行されるプログラムコードなどのコンピュータ実行可能命令を含む)によって実施することができる。例えば、命令により、分配表示を集中型のデータハブに送信させることができ、集中型のデータハブは、分配表示に属する分配パターンに従って共有データを分配できることが理解される。コンピュータ可読媒体は、着脱可能及び着脱不能な記憶装置を含み得、これらに限定されないが、読み取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)などを含む。一般に、プログラムモジュールは、特定のタスクを実行するか又は特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含み得る。コンピュータ実行可能命令、関連データ構造及びプログラムモジュールは、本明細書で開示される方法のステップを実行するためのプログラムコードの例を表す。そのような実行可能命令又は関連データ構造の特定のシーケンスは、そのようなステップ又はプロセスにおいて説明された機能を実装するための対応する行為の例を表す。
【0099】
[00110] 前述の説明では、実装形態ごとに変化し得る多くの特有の詳細を参照して実施形態について説明した。説明される実施形態の適応形態及び変更形態は、ある程度なされ得る。本明細書で開示される本発明の説明及び実践を考慮することにより、他の実施形態が当業者に明らかになり得る。説明及び例は、単なる例示と見なされ、本発明の真の範囲及び趣旨は、以下の特許請求の範囲によって示されることが意図される。図に示されるステップのシーケンスは、単なる例示を目的とし、ステップの特定のシーケンスに限定することを意図しないことも意図される。従って、当業者は、同じ方法を実施する間、異なる順番でこれらのステップを実行できることを理解することができる。
【0100】
[00111] 図面及び説明では、例示的な実施形態を開示した。しかし、これらの実施形態に対する多くの変形形態及び変更形態がなされ得る。それに従って、特有の用語が採用されているが、それらは、単に一般的且つ記述的な意味で使用され、限定する目的で使用されない。実施形態の範囲は、以下の特許請求の範囲によって定義される。