(57)【要約】  本開示は、第１の演算層における読み取り記憶ブロックのセットとして及び第２の演算層における書き込み記憶ブロックのセットとして動作する第１の記憶ブロックのセットを含むメモリ装置を提供し、第２の演算層は、第１の演算層に続く。メモリ装置は、第１の演算層における書き込み記憶ブロックのセットとして及び第２の演算層における読み取り記憶ブロックのセットとして動作する第２の記憶ブロックのセットも含む。
2021507352.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのコアのメモリ装置であって、
第１の演算層における読み取り記憶ブロックのセットとして及び第２の演算層における書き込み記憶ブロックのセットとして動作するように構成された第１の記憶ブロックのセットであって、前記第２の演算層は、前記第１の演算層に続く、第１の記憶ブロックのセットと、
前記第１の演算層における書き込み記憶ブロックのセットとして及び前記第２の演算層における読み取り記憶ブロックのセットとして動作するように構成された第２の記憶ブロックのセットと、
前記第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第１の読み取りポートであって、前記読み取り記憶ブロックのセットの第１の読み取り記憶ブロックからオペランドを受信し、且つ前記受信されたオペランドを前記少なくとも１つのコアの少なくとも１つの処理ユニットに提供するように構成された第１の読み取りポートと、
前記第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第２の読み取りポートであって、前記読み取り記憶ブロックのセットの第２の読み取り記憶ブロックから１つ又は複数のオペランドを受信し、且つ前記受信された１つ又は複数のオペランドを前記少なくとも１つのコアの前記少なくとも１つの処理ユニットに提供するように構成された第２の読み取りポートと、
前記第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第１の書き込みポートであって、格納のために１つ又は複数のオペランドを前記書き込み記憶ブロックのセットの第１の書き込み記憶ブロックに提供するように構成された第１の書き込みポートと
を含むメモリ装置。
【請求項２】
前記第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第２の書き込みポートであって、格納のためにオペランドを前記書き込み記憶ブロックのセットの第２の書き込み記憶ブロックに提供するように構成された第２の書き込みポートをさらに含む、請求項１に記載のメモリ装置。
【請求項３】
前記第１の記憶ブロックのセットは、第１及び第２の記憶ブロックを含み、及び前記第１の演算層内において、前記第１の記憶ブロックのセットの第１及び第２の記憶ブロックは、演算モードで動作するように構成され、それにより、前記第１の記憶ブロックのセットの前記第１及び第２の記憶ブロックは、前記第１の演算層において実行される演算で使用される前記オペランドを、それぞれ前記第１及び第２の読み取りポートを介して前記少なくとも１つの処理ユニットへと読み取るように構成される、請求項１又は２に記載のメモリ装置。
【請求項４】
前記第２の記憶ブロックのセットは、第１の記憶ブロック及び第２の記憶ブロックを含み、及び前記第１の演算層内において、前記第２の記憶ブロックのセットの前記第１の記憶ブロックは、結果モードで動作するように構成され、それにより、前記第２の記憶ブロックのセットの前記第１の記憶ブロックは、前記第１の演算層における前記実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項１〜３のいずれか一項に記載のメモリ装置。
【請求項５】
前記第１の演算層内において、前記第１の記憶ブロックのセットの前記第２の記憶ブロックは、プリロードモードで動作するように構成され、それにより、前記第２の記憶ブロックは、第２の演算層において実行される演算で使用されるプリロードオペランドを前記第２の記憶ブロック内に書き込むように構成される、請求項２〜４のいずれか一項に記載のメモリ装置。
【請求項６】
前記演算モード、前記結果モード及び前記プリロードモードの少なくとも１つは、各演算層の開始時、前記第１及び第２の記憶ブロックのセットの前記第１及び第２の記憶ブロックに動的に割り当てられる、請求項３〜５のいずれか一項に記載のメモリ装置。
【請求項７】
前記第２の演算層中、前記第２の記憶ブロックのセットは、前記演算モードで動作するように構成され、それにより、前記第２の記憶ブロックのセットは、前記第１の演算層内で前記第２の記憶ブロックのセットによって書き込まれたオペランドを、前記第２の演算層の演算を実行するために前記少なくとも１つの処理ユニットへと読み取るように構成される、請求項３〜６のいずれか一項に記載のメモリ装置。
【請求項８】
前記第２の演算層中、前記第１の記憶ブロックのセットの前記第１の記憶ブロックは、前記結果モードで動作するように構成され、それにより、前記第１の記憶ブロックは、前記第２の演算層における実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項３〜７のいずれか一項に記載のメモリ装置。
【請求項９】
前記第２の演算層中、前記第１の記憶ブロックのセットの前記第２の記憶ブロックは、プリロードモードで動作するように構成され、それにより、前記第２の記憶ブロックは、プリロードオペランドを前記第２の記憶ブロック内に書き込むように構成され、前記プリロードオペランドは、第３の演算層において実行される演算で使用される、請求項３〜８のいずれか一項に記載のメモリ装置。
【請求項１０】
前記第１及び第２の記憶ブロックのセットの各記憶ブロックは、単一の読み取り／書き込みスタティックランダムアクセスメモリ（１Ｒ／Ｗ  ＳＲＡＭ）である、請求項１〜９のいずれか一項に記載のメモリ装置。
【請求項１１】
前記第１及び第２の記憶ブロックのセットの各記憶ブロックは、それぞれのＮ：１マルチプレクサを介して前記第１及び第２の書き込みポートに通信可能に結合され、且つそれぞれのＭ：１マルチプレクサを介して前記第１及び第２の読み取りポートに通信可能に結合され、ここで、Ｎは、前記メモリ装置内の記憶ブロックの数であり、及びＭは、前記メモリ装置における書き込みポートの数である、請求項２〜１０のいずれか一項に記載のメモリ装置。
【請求項１２】
前記コアは、単一命令複数データ（ＳＩＭＤ）アーキテクチャを含む、請求項１〜１１のいずれか一項に記載のメモリ装置。
【請求項１３】
メモリ装置を制御するための方法であって、
第１の演算層のために、
前記メモリ装置の読み取りポートを介して少なくとも１つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして動作する第１の記憶ブロックのセットを選択することと、
格納のために前記メモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第２の記憶ブロックのセットを選択することと、
前記第１の演算層に続く第２の演算層において、
前記書き込み記憶ブロックのセットとして動作する前記第１の記憶ブロックのセットを選択することと、
前記読み取り記憶ブロックのセットとして動作する前記第２の記憶ブロックのセットを選択することと
を含む方法。
【請求項１４】
各演算層のために前記メモリ装置の前記第１及び第２の記憶ブロックのセットの動作モードを制御する命令を生成することをさらに含み、前記命令は、前記第１及び第２の記憶ブロックのセットの前記動作モードを設定する、請求項１３に記載の方法。
【請求項１５】
前記命令は、各演算層の開始時、動的に前記第１及び第２の記憶ブロックのセットの前記動作モードをさらに設定する、請求項１４に記載の方法。
【請求項１６】
前記動作モードを設定するための前記命令は、前記第１の記憶ブロックのセットの前記動作モードを演算モードに設定することをさらに含み、それにより、前記第１の記憶ブロックのセットは、前記少なくとも１つの処理ユニットを介して、前記第１の演算層において実行される演算で使用されるオペランドを読み取るように構成される、請求項１４又は１５に記載の方法。
【請求項１７】
前記第２の記憶ブロックのセットは、第１の記憶ブロック及び第２の記憶ブロックを含み、前記動作モードを設定するための前記命令は、前記第２の記憶ブロックのセットの第１の記憶ブロックの前記動作モードを結果モードに設定することをさらに含み、それにより、前記第１の記憶ブロックは、前記第１の演算層における前記実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項１４〜１６のいずれか一項に記載の方法。
【請求項１８】
前記第１の記憶ブロックのセットは、第１の記憶ブロック及び第２の記憶ブロックを含み、前記動作モードを設定するための前記命令は、前記第１の記憶ブロックのセットの第２の記憶ブロックの前記動作モードをプリロードモードに設定することをさらに含み、それにより、前記第２の記憶ブロックは、前記第２の演算層において実行される演算で使用されるプリロードオペランドを前記第２の記憶ブロック内に書き込むように構成される、請求項１４〜１７のいずれか一項に記載の方法。
【請求項１９】
前記動作モードを設定するための命令は、前記第２の記憶ブロックのセットを前記演算モードで動作するように設定することをさらに含み、それにより、前記第２の記憶ブロックのセットは、前記第１の演算層内で前記第２の記憶ブロックのセットによって書き込まれたオペランドを、前記第２の演算層の演算を実行するために前記少なくとも１つの処理ユニットへと読み取るように構成される、請求項１４〜１８のいずれか一項に記載の方法。
【請求項２０】
前記動作モードを設定するための命令は、前記第１の記憶ブロックのセットの前記第１の記憶ブロックの前記動作モードを前記結果モードに設定することをさらに含み、それにより、前記第１の記憶ブロックは、前記第２の演算層における実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項１４〜１９のいずれか一項に記載の方法。
【請求項２１】
前記動作モードを設定するための命令は、前記第１の記憶ブロックのセットの前記第２の記憶ブロックの前記動作モードを前記プリロードモードに設定することをさらに含み、それにより、前記第２の記憶ブロックは、第３の演算層において実行される演算で使用されるプリロードオペランドを前記第２の記憶ブロック内に書き込むように構成される、請求項１４〜２０のいずれか一項に記載の方法。
【請求項２２】
少なくとも１つの処理ユニットと関連付けられたメモリ装置を含むアクセラレータであって、前記メモリ装置は、
第１の記憶ブロックのセット、
第２の記憶ブロックのセット、
それぞれ前記第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された読み取りポートのセット、及び
それぞれ前記第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された書き込みポートのセット
を含む、アクセラレータと、
コンピュータコードを複数の命令にコンパイルするように構成されたホストユニットであって、前記複数の命令は、
第１の演算層のために、
前記読み取りポートのセットを介して前記少なくとも１つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして動作する前記第１の記憶ブロックのセットを選択することと、
格納のために前記書き込みポートのセットを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する前記第２の記憶ブロックのセットを選択することと、
前記第１の演算層に続く第２の演算層のために、
前記書き込み記憶ブロックのセットとして動作する前記第１の記憶ブロックのセットを選択することと、
前記読み取り記憶ブロックのセットとして動作する前記第２の記憶ブロックのセットを選択することと
を行う、ホストユニットと
を含むシステム。
【請求項２３】
メモリ装置によって実行可能な命令のセットを格納する非一時的コンピュータ可読媒体であって、前記命令のセットは、
第１の演算層のために、
前記メモリ装置の読み取りポートを介して少なくとも１つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして動作する第１の記憶ブロックのセットを選択することと、
格納のために前記メモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第２の記憶ブロックのセットを選択することと、
前記第１の演算層に続く第２の演算層において、
前記書き込み記憶ブロックのセットとして動作する前記第１の記憶ブロックのセットを選択することと、
前記読み取り記憶ブロックのセットとして動作する前記第２の記憶ブロックのセットを選択することと
を前記メモリ装置に実行させる、非一時的コンピュータ可読媒体。
【請求項２４】
前記メモリ装置によって実行可能な前記命令のセットは、
各演算層のために前記第１及び第２の記憶ブロックのセットの動作モードを制御することと、
前記受信された命令に基づいて前記第１及び第２の記憶ブロックのセットの前記動作モードを設定することと
を前記メモリ装置に実行させる、請求項２３に記載のコンピュータ可読媒体。
【請求項２５】
前記メモリ装置によって実行可能な前記命令のセットは、前記第１の記憶ブロックのセットの前記動作モードを演算モードに設定することを前記メモリ装置に実行させ、それにより、前記第１の記憶ブロックのセットは、前記少なくとも１つの処理ユニットを介して前記第１の演算層において実行される演算で使用されるオペランドを読み取るように構成される、請求項２４に記載のコンピュータ可読媒体。
【請求項２６】
前記第２の記憶ブロックのセットは、第１の記憶ブロック及び第２の記憶ブロックを含み、前記メモリ装置によって実行可能な前記命令のセットは、前記第２の記憶ブロックのセットの第１の記憶ブロックの前記動作モードを結果モードに設定することを前記メモリ装置に実行させ、それにより、前記第１の記憶ブロックは、前記第１の演算層における前記実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項２４又は２５に記載のコンピュータ可読媒体。
【請求項２７】
前記第１の記憶ブロックのセットは、第１の記憶ブロック及び第２の記憶ブロックを含み、前記メモリ装置によって実行可能な前記命令のセットは、前記第１の記憶ブロックのセットの第２の記憶ブロックの前記動作モードをプリロードモードに設定することを前記メモリ装置に実行させ、それにより、前記第２の記憶ブロックは、前記第２の演算層において実行される演算で使用されるプリロードオペランドを前記第２の記憶ブロック内に書き込むように構成される、請求項２４〜２６のいずれか一項に記載のコンピュータ可読媒体。
【請求項２８】
前記メモリ装置によって実行可能な前記命令のセットは、前記第２の記憶ブロックのセットの前記動作モードを前記演算モードで動作するように設定することを前記メモリ装置に実行させ、それにより、前記第２の記憶ブロックのセットは、前記第１の演算層内で前記第２の記憶ブロックのセットによって書き込まれたオペランドを、前記第２の演算層の演算を実行するために前記少なくとも１つの処理ユニットへと読み取るように構成される、請求項２４〜２７のいずれか一項に記載のコンピュータ可読媒体。
【請求項２９】
前記メモリ装置によって実行可能な前記命令のセットは、前記第１の記憶ブロックのセットの前記第１の記憶ブロックの前記動作モードを前記結果モードに設定することを前記メモリ装置に実行させ、それにより、前記第１の記憶ブロックは、前記第２の演算層における実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項２４〜２８のいずれか一項に記載のコンピュータ可読媒体。
【請求項３０】
前記メモリ装置によって実行可能な前記命令のセットは、前記第１の記憶ブロックのセットの前記第２の記憶ブロックの前記動作モードを前記プリロードモードに設定することを前記メモリ装置に実行させ、それにより、前記第２の記憶ブロックは、第３の演算層において実行される演算で使用されるプリロードオペランドを前記第２の記憶ブロック内に書き込むように構成される、請求項２４〜２９のいずれか一項に記載のコンピュータ可読媒体。
【請求項３１】
メモリ装置を制御するための方法であって、
第１の演算層のために、
前記メモリ装置の読み取りポートを介して処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして第１の記憶ブロックのセットを動作させることと、
格納のために前記メモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして第２の記憶ブロックのセットを動作させることと、
前記第１の演算層に続く第２の演算層のために、
前記書き込み記憶ブロックのセットとして前記第１の記憶ブロックのセットを動作させることと、
前記読み取り記憶ブロックのセットとして前記第２の記憶ブロックのセットを動作させることと
を含む方法。
【請求項３２】
各演算層のために前記第１及び第２の記憶ブロックのセットの動作モードを制御する命令をコンパイラから受信することと、
前記受信された命令に基づいて前記第１及び第２の記憶ブロックのセットの前記動作モードを設定することと
をさらに含む、請求項３１に記載の方法。
【請求項３３】
前記受信すること及び設定することは、各演算層の開始時に動的に起こる、請求項３２に記載の方法。
【請求項３４】
前記設定することは、前記第１の記憶ブロックのセットの前記動作モードを演算モードに設定することをさらに含み、それにより、前記第１の記憶ブロックのセットは、前記少なくとも１つの処理ユニットを介して前記第１の演算層において実行される演算で使用されるオペランドを読み取るように構成される、請求項３２又は３３に記載の方法。
【請求項３５】
前記第２の記憶ブロックのセットは、第１の記憶ブロック及び第２の記憶ブロックを含み、前記設定することは、前記第２の記憶ブロックのセットの第１の記憶ブロックの前記動作モードを結果モードに設定することをさらに含み、それにより、前記第１の記憶ブロックは、前記第１の演算層における前記実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項３２〜３４のいずれか一項に記載の方法。
【請求項３６】
前記第１の記憶ブロックのセットは、第１の記憶ブロック及び第２の記憶ブロックを含み、前記設定することは、前記第１の記憶ブロックのセットの第２の記憶ブロックの前記動作モードをプリロードモードに設定することをさらに含み、それにより、前記第２の記憶ブロックは、前記第２の演算層において実行される演算で使用されるプリロードオペランドを前記第２の記憶ブロック内に書き込むように構成される、請求項３２〜３５のいずれか一項に記載の方法。
【請求項３７】
前記設定することは、前記第２の記憶ブロックのセットを前記演算モードで動作するように設定することをさらに含み、それにより、前記第２の記憶ブロックのセットは、前記第１の演算層内で前記第２の記憶ブロックのセットによって書き込まれたオペランドを、前記第２の演算層の演算を実行するために前記少なくとも１つの処理ユニットへと読み取るように構成される、請求項３２〜３６のいずれか一項に記載の方法。
【請求項３８】
前記設定することは、前記第１の記憶ブロックのセットの前記第１の記憶ブロックの前記動作モードを前記結果モードに設定することをさらに含み、それにより、前記第１の記憶ブロックは、前記第２の演算層における実行された演算の結果を前記第１の記憶ブロック内に書き込むように構成される、請求項３２〜３７のいずれか一項に記載の方法。
【請求項３９】
前記設定することは、前記第１の記憶ブロックのセットの前記第２の記憶ブロックの前記動作モードを前記プリロードモードに設定することをさらに含み、それにより、前記第２の記憶ブロックは、第３の演算層において実行される演算で使用されるプリロードオペランドを前記第２の記憶ブロック内に書き込むように構成される、請求項３２〜３８のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
[0001]  本出願は、「An Efficient SRAM Organization to Enable a Wider Single Instruction Multiple Data Machine and Software Pipelining」という名称の２０１７年１２月２２日に出願された米国仮特許出願第６２／６１０，０８９号に基づき、その優先権を主張するものであり、その全内容は、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
背景
[0002]  ディープニューラルネットワークアルゴリズムは、大多数の行列計算を伴い、一般に、非常に広範な単一命令複数データ（ＳＩＭＤ）処理ユニット及び大容量のオンチップストレージを伴うハードウェアアーキテクチャをもたらす。ディープラーニングの本質により、時折、異なるＳＩＭＤレーンがデータを交換する必要がある。クロスレーンデータ処理及び演算を提供する多くのメモリアーキテクチャが存在するが、これらのアーキテクチャは、メモリアクセス待ち時間、バンクコンフリクト問題、性能問題などの受け入れ難い増加などのいくつかの理由のために不完全である。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
[0003]  本開示は、ＳＩＭＤアーキテクチャを有する演算デバイスに含まれるスタティックランダムアクセスメモリ（ＳＲＡＭ）装置を提供する。例示的な実施形態のいくつかは、コアのメモリ装置を対象とする。メモリ装置は、第１の演算層（computation layer）における読み取り記憶ブロックのセットとして及び第２の演算層における書き込み記憶ブロックのセットとして動作するように構成された第１の記憶ブロックのセットを含む。第２の演算層は、第１の演算層に続く。第２の記憶ブロックのセットは、第１の演算層における書き込み記憶ブロックのセットとして及び第２の演算層における読み取り記憶ブロックのセットとして動作するように構成される。
【０００４】
[0004]  メモリ装置は、第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第１の読み取りポートをさらに含む。第１の読み取りポートは、読み取り記憶ブロックのセットの第１の読み取り記憶ブロックからオペランドを受信し、且つ受信されたオペランドを少なくとも１つの処理ユニットに提供するように構成される。メモリ装置は、第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第２の読み取りポートをさらに含む。第２の読み取りポートは、読み取り記憶ブロックのセットの第２の読み取り記憶ブロックから１つ又は複数のオペランドを受信し、且つ受信された１つ又は複数のオペランドを少なくとも１つの処理ユニットに提供するように構成される。メモリ装置は、第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された第１の書き込みポートであって、格納のために１つ又は複数のオペランドを書き込み記憶ブロックのセットの第１の書き込み記憶ブロックに提供するように構成される第１の書き込みポートを追加的に含む。
【０００５】
[0005]  例示的な実施形態のいくつかは、メモリ装置を制御するための方法を対象とする。方法は、第１の演算層のために、メモリ装置の読み取りポートを介して少なくとも１つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして動作する第１の記憶ブロックのセットを選択することと、格納のためにメモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第２の記憶ブロックのセットを選択することとを含む。方法は、第１の演算層に続く第２の演算層において、書き込み記憶ブロックのセットとして動作する第１の記憶ブロックのセットを選択することと、読み取り記憶ブロックのセットとして動作する第２の記憶ブロックのセットを選択することとをさらに含む。
【０００６】
[0006]  例示的な実施形態のいくつかは、少なくとも１つの処理ユニットと関連付けられたメモリ装置を含むアクセラレータを含むシステムを対象とする。メモリ装置は、第１の記憶ブロックのセット、第２の記憶ブロックのセット及びそれぞれ第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合された読み取りポートのセットを含む。システムは、それぞれ第１及び第２の記憶ブロックのセットの各記憶ブロックに通信可能に結合される書き込みポートのセットをさらに含む。システムは、コードを複数の命令にコンパイルするように構成されたホストユニットをさらに含み、命令は、第１の演算層のために、読み取りポートのセットを介して少なくとも１つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットを動作させるために第１の記憶ブロックのセットを選択する。命令は、格納のために書き込みポートのセットを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第２の記憶ブロックのセットも選択する。
【０００７】
[0007]  さらに、命令は、第２の演算層のために、書き込み記憶ブロックのセットとして動作する第１の記憶ブロックのセットを選択し、且つ読み取り記憶ブロックのセットとして動作する第２の記憶ブロックのセットを選択する。
【０００８】
[0008]  例示的な実施形態のいくつかは、演算を実行するための複数の演算層を含むニューラルネットワークの処理要素内のメモリ装置によって実行可能な命令のセットを格納する非一時的コンピュータ可読媒体を対象とする。メモリ装置は、第１及び第２の読み取りポートと、第１及び第２の書き込みポートとを含み、第１の読み取りポート及び第１の書き込みポートは、直接メモリアクセス（ＤＭＡ）ユニットに通信可能に結合される。メモリ装置は、第１及び第２の読み取り及び書き込みポートに通信可能に結合された第１、第２、第３及び第４の記憶ブロックをさらに含み、命令は、第１、第２、第３及び第４の記憶ブロックのそれぞれを介して、実行された演算と関連付けられた演算値を１つの演算層あたり多くとも１つ読み取るか又は書き込むことをメモリ装置に行わせる。
【０００９】
[0009]  例示的な実施形態のいくつかは、メモリ装置を制御するための方法を対象とする。方法は、第１の演算層のために、メモリ装置の読み取りポートを介して少なくとも１つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして第１の記憶ブロックのセットを動作させることと、格納のためにメモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして第２の記憶ブロックのセットを動作させることとを含む。
【００１０】
[0010]  方法は、第１の演算層から続く第２の演算層のために、書き込み記憶ブロックのセットとして第１の記憶ブロックのセットを動作させることと、読み取り記憶ブロックのセットとして第２の記憶ブロックのセットを動作させることとをさらに含む。
【００１１】
図面の簡単な説明
[0011]  本開示の実施形態及び様々な態様は、以下の詳細な説明及び添付の図に示される。図に示される様々な特徴は、原寸に比例しない。
【図面の簡単な説明】
【００１２】
【図１Ａ】[0012]例示的なＳＲＡＭ装置を示す概略図である。
【図１Ｂ】[0013]図１ＡのＳＲＡＭ装置の例示的なバンクユニットを示す概略図である。
【図２】[0014]本開示の実施形態と一致する例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャを示す概略図である。
【図３Ａ】[0015]本開示の実施形態と一致するニューラルネットワークプロセッサの層の例示的な機能を示す概略図である。
【図３Ｂ】[0016]本開示の実施形態と一致する例示的なハードウェアニューラルネットワークプロセッサを示す概略図である。
【図４】[0017]本開示の実施形態と一致する、多層ネットワークにおける例示的なデータ共有を示す概略図である。
【図５】[0018]本開示の実施形態と一致する例示的なＳＲＡＭ装置を示す概略図である。
【図６】[0019]本開示の実施形態と一致する図５のＳＲＡＭ装置の例示的な記憶ブロックを示す概略図である。
【図７】[0020]本開示の実施形態と一致する図５及び６の例示的な装置の詳細な概略図を示す。
【図８】[0021]本開示の実施形態と一致する、図５〜７のＳＲＡＭ装置のデータマッピング及び記憶ブロック分類のための例示的な方法を特徴とする表を示す。
【図９】[0022]本開示の実施形態と一致する、図５〜８のＳＲＡＭ装置を介するデータマッピングのための例示的な方法のフロー図を示す。
【図１０】[0023]図５〜８のメモリ装置によって実行することができる例示的な動作を描写するフロー図である。
【発明を実施するための形態】
【００１３】
詳細な説明
[0024]  以下の説明は、添付の図面を参照し、添付の図面では、異なる図面の同じ番号は、別段の表現がない限り、同じ又は同様の要素を表す。例示的な実施形態の以下の説明に記載される実装形態は、本発明と一致するすべての実装形態を表すわけではない。代わりに、それらの実装形態は、添付の特許請求の範囲に記述されるように、本発明に関連する態様と一致する装置及び方法の単なる例である。
【００１４】
[0025]  図１Ａ及び１Ｂは、各演算ユニットに対して２つのオペランド及び１つの結果を有する単一命令複数データ（ＳＩＭＤ）アーキテクチャの例示的な従来の実装形態のブロック図を示す。ＳＩＭＤ又はベクトルアーキテクチャは、グラフィックス処理及びディープラーニングなどのデータ並列処理での演算をサポートするための使用が非常に一般的である。図１Ａの従来のアーキテクチャでは、メモリは、２つのオペランド（例えば、「ｏｐ１」及び「ｏｐ２」）を１つ又は複数の処理ユニットに供給し、１つ又は複数の処理ユニットは、結果Ｒを生成するための演算を実行する。Ｋ個の処理ユニットが並列に実行されると、これらのＫ個の処理ユニットは、各パイプライン処理サイクル中にＫ個の結果を生成するために、メモリから２Ｋ個のオペランドを消費する。Ｋ個の結果が生成された後、これらの結果は、メモリに書き戻すことができる。
【００１５】
[0026]  図１Ｂは、図１Ａのメモリの構造を示す。従来のシステムでは、メモリは、より高いトランジスタ密度のために、従ってより小さい面積、コスト及びより短い待ち時間のために１Ｒ／１Ｗ  ＳＲＡＭを使用する。そのようなシステムでは、ＳＲＡＭアレイの単一のバンクは、Ｗ個の１ビットセルを有するＤ個の行を含み得る。従って、より広範なメモリをサポートするためにマルチバンク設計が使用される。図１Ｂに示されるように、従来のシステムは、バンクの数を増加することにより（この事例ではＮ個のバンク）、広範な並列アクセスを実施することができる。各バンクは、潜在的には、Ｍ重の並列読み取り及び書き込みをサポートすることができ、ここで、Ｍ＝Ｗ／data_type_widthである。図１ＡのＫ個のプロセスユニットの場合、各パイプラインサイクルでは、２Ｋ回の読み取り（Ｋ個のプロセスユニットの各々に対して２つのオペランドに相当する）及びＫ回の書き込みがある。それに従って、従来のシステムがメモリバンクとして１Ｒ／１Ｗ  ＳＲＡＭを使用すると、Ｋ＝Ｍ＊Ｎ／２となり、なぜなら、単一の１Ｒ／１Ｗ  ＳＲＡＭが各サイクルに２つのオペランドセット（例えば、１つのセットは、オペランドｏｐ１に相当し、第２のセットは、オペランドｏｐ２に相当する）を供給することになるためであり、各オペランドセットは、利用可能なメモリの半分を占める。
【００１６】
[0027]  しかし、ディープラーニングなどの莫大なデータ並列処理を必要とするアプリケーションでは、Ｋの数は、非常に大きい（例えば、５１２又は１０２４個の処理ユニット）ことが望ましい。図１Ａ及び１Ｂの従来のアーキテクチャでは、２つの主要な問題がある。
【００１７】
[0028]  第１の問題は、Ｋの数がより小さい数に制限されることである。この制限は、メモリ読み取りポートと各バンクの出力ポートとの間にポイントツーポイント接続が存在することが原因である。完全に接続されたクロスバーは、狭幅のポートのみをサポートすることができる。メモリポートとバンクとの間のアービタ制御との何らかのよりスマートな接続により、そのような論理の待ち時間は、データ並列処理の幅の増大と共に急速に蓄積される。このデータ並列処理の幅の増大により、対応する待ち時間の増大がパイプライン設計において受け入れ難いものになるため、より広範な並列アクセスメモリのスケールアップが程なく停止する。例えば、従来のシステムでは、例示的な設計は、一般に、１６個以下のバンクを有する。各バンクが最大でＷ＝２５６ビット幅をサポートする場合、１６ビットのデータタイプに対し、最大の可能なＫの値は、Ｋ＝［２５６／（１６＊２）］＊１６＝１２８となる。このＫの値は、ディープラーニングにおける予期データ並列処理幅として極めて小さいものと見なされる。
【００１８】
[0029]  従来のシステムの第２の問題は、バンクコンフリクトに関与する。２つ以上の処理ユニットが互いにＭ／２離間し、同じバンクから読み取られる際、単一の読み取りポートを有するＳＲＡＭは、同じサイクルにおいて両方のユニットにアクセスを供給することができない。衝突が発生したアクセスは、シリアル化される。このシリアライゼーションは、受け入れ難いものであり、なぜなら、演算プログラムを減速するのみならず、固定待ち時間での各命令のスムーズな進行が予期されるＳＩＭＤマシンの簡単な制御パターンを複雑にするためである。さらに、シリアライゼーションは、データ依存性を取り扱うための静的／動的メカニズムも複雑にする。
【００１９】
[0030]  開示される実施形態は、ニューラルネットワークにおけるメモリ装置の改善及びメモリ装置を制御するための方法に関する。例示的な実施形態のいくつかは、より広範な単一命令複数データ（ＳＩＭＤ）アーキテクチャ及びソフトウェアパイプライン方式を可能にするメモリ構造の組織化及び分類を対象とする。ＳＩＭＤは、複数のデータポイントにおいて同じ動作を同時に実行する複数の処理ユニットを有するコンピュータアーキテクチャである。そのような装置は、ソフトウェアパイプライン方式を特徴とするニューラルネットワークで使用することができる。ソフトウェアパイプライン方式は、ハードウェアパイプラインと並行する方法でループを最適化するために使用される技法である。ソフトウェアパイプライン方式は、ｉｄの並べ替えがプロセッサの代わりにコンパイラによって行われることを除いて、順不同実行タイプのものである。
【００２０】
[0031]  例示的な実施形態は、本明細書では、例としてニューラルネットワークの使用によって説明される。本明細書で提供される実施形態は、ニューラルネットワークの使用によって説明されるが、例示的な実施形態は、演算を最適化することができる他のいかなるシステムにも適用できることを理解されたい。
【００２１】
[0032]  図２は、例示的なニューラルネットワーク処理ユニット（ＮＰＵ）アーキテクチャ１００を示す。ＮＰＵアーキテクチャ１００は、オンチップ通信システム１１０、ホストメモリ１２０、メモリコントローラ１３０、直接メモリアクセス（ＤＭＡ）ユニット１４０、ジョイントテストアクショングループ（ＪＴＡＧ）／テストアクセスエンド（ＴＡＰ）コントローラ１５０、周辺機器相互接続エクスプレス（ＰＣＩｅ）インタフェース１６０、バス１７０、グローバルメモリ１２６及び同様のものを含み得る。オンチップ通信システム１１０は、通信データに基づいてアルゴリズム動作を実行できることが理解される。その上、ＮＰＵアーキテクチャ１００は、メインメモリとして機能するためのオンチップメモリブロック（例えば、第二世代の８ＧＢ高帯域幅メモリ（ＨＢＭ２）の４つのブロック）を有するグローバルメモリ１２６を含み得る。
【００２２】
[0033]  オンチップ通信システム１１０は、グローバルマネージャ１１２及び複数のコア１１６を含み得る。グローバルマネージャ１１２は、１つ又は複数のコア１１６と協調するように構成された１つ又は複数のタスクマネージャ１１４を含み得る。各タスクマネージャ１１４は、ニューラルネットワークのためのシナプス／ニューロン回路を提供するコア１１６のアレイと関連付けることができる。例えば、図２のコアの最上層は、ニューラルネットワークへの入力層を表す回路を提供することができ、コアの第２の層は、ニューラルネットワークの１つ又は複数の隠れ層を表す回路を提供することができる。図２に示されるように、グローバルマネージャ１１２は、コア１１６の２つのアレイと協調するように構成された２つのタスクマネージャ１１４を含み得る。
【００２３】
[0034]  コア１１６は、１つ又は複数の処理要素を含み得、１つ又は複数の処理要素の各々は、グローバルマネージャ１１２の制御下で通信データに対する１つ又は複数の演算（例えば、乗算、加算、乗累算など）を実行するように構成された１つ又は複数の処理ユニットを含む単一命令複数データ（ＳＩＭＤ）アーキテクチャを含む。通信データパケットにおける演算を実行するため、コア１１６は、データパケットを格納するための少なくとも１つのバッファ、命令を格納するための１つ又は複数のバッファ、データパケットの情報を格納するための１つ又は複数のメモリ及びデータパケットの情報を処理するための１つ又は複数の処理要素を含み得る。各処理要素は、いかなる数の処理ユニットも含み得る。いくつかの実施形態では、コア１１６は、タイル又は同様のものと見なすことができる。
【００２４】
[0035]  ホストメモリ１２０は、ホストＣＰＵのメモリなどのオフチップメモリであり得る。例えば、ホストメモリ１２０は、ＤＤＲメモリ（例えば、ＤＤＲ  ＳＤＲＡＭ）又は同様のものであり得る。ホストメモリ１２０は、１つ又は複数のプロセッサ内で統合されたオンチップメモリと比べて、低アクセス速度で大量のデータを格納するように構成することができ、高次キャッシュの役割を果たす。
【００２５】
[0036]  メモリコントローラ１３０は、グローバルメモリ１２６内のメモリブロック（例えば、ＨＢＭ２）からのデータの読み取り及びメモリブロックへのデータの書き込みを管理することができる。例えば、メモリコントローラ１３０は、チップ通信システム１１０の外部から（例えば、ＤＭＡユニット１４０から若しくは別のＮＰＵと連通するＤＭＡユニットから）又はチップ通信システム１１０の内部から（例えば、グローバルマネージャ１１２のタスクマネージャによって制御された２Ｄメッシュを介してコア１１６のローカルメモリから）到来するデータの読み取り／書き込みを管理することができる。その上、図１には１つのメモリコントローラが示されているが、ＮＰＵアーキテクチャ１００において複数のメモリコントローラを提供できることが理解される。例えば、グローバルメモリ１２６内の各メモリブロック（例えば、ＨＢＭ２）に対して１つずつメモリコントローラが存在し得る。
【００２６】
[0037]  メモリコントローラ１３０は、メモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。メモリコントローラ１３０は、１つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタを含み得る。レジスタは、メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ及び他のタイプのレジスタを含み得る。これらのレジスタは、ソース、送り先、転送方向（入力／出力（Ｉ／Ｏ）デバイスから読み取るか若しくはＩ／Ｏデバイスに書き込む）、転送単位のサイズ、１バーストで転送されるバイト数及び／又はメモリコントローラの他の典型的な特徴のいくつかの組合せを指定することができる。
【００２７】
[0038]  ＤＭＡユニット１４０は、ホストメモリ１２０とグローバルメモリ１２６との間のデータ転送を補助することができる。加えて、ＤＭＡユニット１４０は、複数のＮＰＵ間のデータ転送を補助することができる。ＤＭＡユニット１４０は、ＣＰＵ割り込みを引き起こすことなく、オフチップデバイスがオンチップメモリとオフチップメモリとの両方にアクセスできるようにすることができる。従って、ＤＭＡユニット１４０もメモリアドレスを生成し、メモリ読み取り又は書き込みサイクルを開始することができる。ＤＭＡユニット１４０は、１つ又は複数のプロセッサによる書き込み及び読み取りが可能ないくつかのハードウェアレジスタ（メモリアドレスレジスタ、バイトカウントレジスタ、１つ又は複数の制御レジスタ及び他のタイプのレジスタを含む）を含むこともできる。これらのレジスタは、ソース、送り先、転送方向（入力／出力（Ｉ／Ｏ）デバイスから読み取るか若しくはＩ／Ｏデバイスに書き込む）、転送単位のサイズ及び／又は１バーストで転送されるバイト数のいくつかの組合せを指定することができる。ＮＰＵアーキテクチャ１００は、複数のＮＰＵアーキテクチャがホストＣＰＵを巻き込むことなく直接通信できるように、他のＮＰＵアーキテクチャ間でデータを転送するために使用することができる第２のＤＭＡユニットを含み得ることが理解される。
【００２８】
[0039]  ＪＴＡＧ／ＴＡＰコントローラ１５０は、システムアドレス及びデータバスへの直接的な外部アクセスを必要としないＮＰＵへの低オーバヘッドアクセスのためのシリアル通信インタフェース（例えば、ＪＴＡＧインタフェース）を実装する専用デバッグポートを指定することができる。ＪＴＡＧ／ＴＡＰコントローラ１５０は、チップ論理レベル及び様々な部品のデバイス能力を提示するテストレジスタセットにアクセスするためのプロトコルを実装するオンチップテストアクセスインタフェース（例えば、ＴＡＰインタフェース）も有し得る。
【００２９】
[0040]  周辺インタフェース１６０（ＰＣＩｅインタフェースなど）は、存在する場合、インターチップバスとして機能し（及び典型的にはインターチップバスである）、ＮＰＵと他のデバイスとの間の通信を提供する。
【００３０】
[0041]  バス１７０は、イントラチップバスとインターチップバスとの両方を含む。イントラチップバスは、システムアーキテクチャに求められるように、すべての内部のコンポーネントを互いに接続する。すべてのコンポーネントが他のすべてのコンポーネントに接続されるわけではないが、すべてのコンポーネントは、通信する必要がある他のコンポーネントへの何らかの接続を有する。インターチップバスは、ＮＰＵを他のデバイス（オフチップメモリ又は周辺機器など）と接続する。典型的には、ＰＣＩｅインタフェースが存在する場合、それは、インターチップバスであり、バス１７０は、イントラチップバスのみに関係するが、いくつかの実装形態では依然として専用バス間通信に関係し得る。
【００３１】
[0042]  ＮＰＵアーキテクチャ１００は、本開示の実施形態を組み込むが、開示される実施形態は、ディープラーニングなどのいくつかのアプリケーションを加速するためのアーキテクチャを有するいかなるアクセラレータチップにも適用できることが理解される。そのようなチップは、例えば、ディープラーニングのためのＧＰＵ、ベクトル処理能力を有するＣＰＵ又はニューラルネットワークアクセラレータであり得る。ＳＩＭＤ又はベクトルアーキテクチャは、一般的に、グラフィックス処理及びディープラーニングなどのデータ並列処理を伴う演算デバイスをサポートするために使用される。ＳＩＭＤアーキテクチャは、複数の処理要素を伴い、処理要素の各々は、複数のデータポイントにおいて同じ動作を同時に実行することができる。
【００３２】
[0043]  いくつかの実施形態では、ニューラルネットワークプロセッサは、コンパイラ（図示せず）を含む。コンパイラは、実行可能プログラムを作成するために、あるプログラミング言語で記載されたコンピュータコードをＮＰＵ命令に変換するプログラム又はコンピュータソフトウェアである。マシニングアプリケーションでは、コンパイラは、例えば、前処理、字句解析、構文解析、意味解析、入力プログラムから中間表現への変換、コード最適化及びコード生成又はそれらの組合せなどの様々な動作を実行することができる。
【００３３】
[0044]  いくつかの実施形態では、コンパイラは、ホストユニット（例えば、ホストメモリ１０４を有するＣＰＵ）上にあり得、ホストユニットは、コマンドをＮＰＵ  １００にプッシュする。これらのコマンドに基づいて、タスクマネージャ１０２２は、任意の数のタスクを１つ又は複数のコア（例えば、コア１０２４）に割り当てることができる。コマンドのいくつかは、ホストメモリ１０４からグローバルメモリ１１６に命令及びデータをロードするようにＤＭＡユニット１０８に指示することができる。次いで、ロードされた命令は、対応するタスクが割り当てられた各コアに分配することができ、１つ又は複数のコアは、これらの命令を処理することができる。
【００３４】
[0045]  コアによって受信される最初の少数の命令は、グローバルメモリ１１６からコアの１つ又は複数のローカルメモリ（例えば、コアのメモリ又はコアの各能動処理要素に対するローカルメモリ）にデータをロード／格納するように、コアに指示できることが理解される。次いで、各コアは、命令パイプラインを開始することができ、命令パイプラインは、ローカルメモリから命令をフェッチすること（例えば、フェッチユニットを介して）、命令を復号して（例えば、命令デコーダを介して）ローカルメモリアドレス（例えば、オペランドに対応する）を生成すること、ソースデータを読み取ること、演算を実行するか又はロード／格納すること、及び次いで結果を書き戻すことを伴う。
【００３５】
[0046]  図３Ａは、ニューラルネットワークの層２００の例示的な機能を示し、ソフトウェアアルゴリズム２１０及びハードウェア２２０を含む。ハードウェア２２０は、プライベートメモリモジュール２３０、処理ユニットアレイ２４０の１つ又は複数の処理ユニット、共有（例えば、放送）メモリモジュール２５０、書き込みバッファ２６０、入力オペランド２７０、出力オペランド２８０及び同様のものを含み得る。いくつかの実施形態では、ハードウェア２２０は、コア（例えば、図２のコア１１６）内に位置し得る。プライベートメモリモジュール２３０と共有メモリモジュール２５０との両方を組み込む単一且つ均質のメモリモジュールも採用できることを理解されたい。
【００３６】
[0047]  いくつかの実施形態では、処理ユニットアレイ２４０の処理ユニットは、乗算、加算、乗累算などの１つ又は複数の演算を提供することができる。処理ユニットアレイ２４０は、複数の処理ユニット２４２、２４４、２４６及び２４８（例えば、図３Ｂに示されるような処理ユニットのアレイ）を含み得る。
【００３７】
[0048]  プライベートメモリモジュール２３０は、別個のプライベートメモリブロックに仕切ることができ、それにより、複数の処理ユニット２４２、２４４、２４６及び２４８の各々は、図３Ｂに示されるように、対応するプライベートメモリセクション２３２、２３４、２３６及び２３８を有する。
【００３８】
[0049]  入力オペランド２７０は、処理ユニットアレイ２４０によって演算される入力データであり得る。いくつかの実施形態では、図３Ａの入力オペランド２７０は、図３Ｂに示されるように、１つ又は複数のプライベート入力オペランド２７２及び１つ又は複数の共有入力オペランド２７４を含み得る。プライベート入力オペランド２７２は、プライベートメモリモジュール２３０に格納することができ、共有入力オペランド２７４は、共有メモリモジュール２５０に格納することができる。
【００３９】
[0050]  ニューラルネットワークのアプリケーションでは、ソフトウェアアルゴリズム２１０は、共有データを有し、共有データは、共有メモリモジュール２５０に格納することができ、共有オペランド２７４として処理ユニットアレイ２４０の複数の処理ユニット２４２、２４４、２４６及び２４８の各々にブロードキャストすることができる。例えば、図３Ａに示されるアルゴリズムは、
Ａ＝ｓｉｇｍｏｉｄ（ｂ＋Ｘ＊Ｗ１）  （式１）
のベクトル演算を演算し、これは、ディープラーニングアルゴリズムにおいて呼び出される場合が多いニューラルネットワークの層２００における代表的な演算である。式１を参照すると、「ｂ」は、一定の値を含み得、「Ｘ」は、共有入力オペランド２７４を含み得、「Ｗ１」は、プライベート入力オペランド２７２を含み得る。
【００４０】
[0051]  図３Ａを参照すると、ベクトルサイズは、任意の自然数として設定することができる。ここで、４のベクトルサイズが例として取り入れられ、ベクトルを演算するための４ウェイＳＩＭＤハードウェアが使用される。処理ユニット２４２、２４４、２４６及び２４８は、以下の演算を並列で演算することができる。
ａ１＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１１＋ｘ２＊Ｗ１２１＋ｘ３＊Ｗ１３１＋ｘ４＊Ｗ１４１）  （式２）
ａ２＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１２＋ｘ２＊Ｗ１２２＋ｘ３＊Ｗ１３２＋ｘ４＊Ｗ１４２）  （式３）
ａ３＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１３＋ｘ２＊Ｗ１２３＋ｘ３＊Ｗ１３３＋ｘ４＊Ｗ１４３）  （式４）
ａ４＝ｓｉｇｍｏｉｄ（ｂ＋ｘ１＊Ｗ１１４＋ｘ２＊Ｗ１２４＋ｘ３＊Ｗ１３４＋ｘ４＊Ｗ１４４）  （式５）
【００４１】
[0052]  図３Ａの網掛けブロック及び点線は、「ａ１」がどのように計算されるかを示す。この演算から、「Ｗ１」アレイの各列のデータは、処理ユニットアレイ２４０の対応する処理ユニットに対してローカルであり、データは、プライベートメモリモジュール２３０の対応するメモリセクションにプライベート入力オペランド２７２として適宜格納できることが理解される。例えば、Ｗ１アレイの第１、第２、第３及び第４の列の各々におけるデータは、プライベートメモリモジュール２３０のそれらの対応するメモリセクション２３２、２３４、２３６及び２３８にプライベート入力オペランドとして格納することができる。
【００４２】
[0053]  図３Ａを参照すると、Ｗ１アレイは、格納データの行列を含み得、行列の各要素は、Ｗ１ｉｊ又はＷ１＿ｉｊとして表され（後に示されるように）、ここで、「ｉ」は、行列の行数を表し、「ｊ」は、行列の列数を表す。例えば、式２では、Ｗ１４１は、Ｗ１アレイの行４及び列１に位置する要素に格納されたデータを表す。行列の要素をアドレス指定するため、他の一般的に知られている表記も使用することができる。
【００４３】
[0054]  同時に、Ｘアレイのデータは、すべての処理ユニット２４２、２４４、２４６及び２４８によって利用され、共有メモリモジュール２５０に共有入力オペランド２７４として適宜格納され、共有メモリモジュール２５０からの読み取りを行うすべてのコンポーネントにブロードキャストされる。式２〜５は、ニューラルネットワークプロセッサの層２００において実行される例示的な演算を表し、ａ１、ａ２、ａ３及びａ４を計算するように設計される。
【００４４】
[0055]  いくつかの実施形態では、機械学習又はディープラーニングは、ニューラル処理の１つ又は複数の層のためのアルゴリズムを実施することによって遂行される、入力データに基づいて最終結果を生成するためにニューラルネットワークプロセッサを訓練することを含む。例えば、図３Ａの層２００は、バイアスｂ、Ｘアレイに格納されたデータ及びＷ１アレイに格納されたデータを使用して演算を実行するように構成されたアルゴリズムを含む第１の層を表す。第２及び第３の層（図示せず）は、バイアスｂ、Ｘアレイに格納されたデータ並びにＷ２及びＷ３アレイに格納されたデータを使用するアルゴリズムを含み得る。各層は、バイアスｂの異なる値、及び「Ｗ」アレイに格納された異なるパラメータを含み得る。
【００４５】
[0056]  図３Ａを参照すると、例えば、アレイＸは、異なるクラスの個人のスコアを含み得る。アレイＸのｘ１の値は、学生Ａの数学のスコアであり得、ｘ２は、英語のスコアであり得、ｘ３は、歴史のスコアであり得、ｘ４は、科学のスコアであり得る。最終結果は、スコア（入力データ）に基づいて、個人が学校への入学許可を得られるか又は入学を拒否されるかである。図３Ａに示されるように、及び式２〜５において説明されるように、データｘ１〜ｘ４は、「共有」され、ａ１〜ａ４の計算において共通である。
【００４６】
[0057]  図４は、多層ネットワークにおけるデータ共有を示す。本明細書で説明されるデータ共有は、プライベートデータが以前にプログラムの後の段階においてどのように共有データになり得たかを指す。いくつかの実施形態では、ニューラルネットワークアーキテクチャ３００は、多層（例えば、層３１０及び３２０）を含む。いくつかの実施形態では、層３１０の出力オペランド２８０は、層３２０に対する入力オペランド２７０として使用することができる。いくつかの実施形態では、１つの層の出力オペランド２８０は、１つ又は複数の層によって入力オペランド２７０として利用することができる。
【００４７】
[0058]  例えば、層３１０では、ａ１は、プライベートメモリモジュール２３０の処理ユニット２４２によって計算される。ａ１のデータは、層３２０に対するブロードキャスト入力になる。一般に、ニューラルネットワークは、層に組織化することができる。各層は、その入力において１つ又は複数の演算を実行し、出力を生成することができる。層の出力は、さらなる処理のために次の層に伝えることができる。例えば、前の層の出力は、次の層のための入力であり得る。それに従って、ローカルで生成された「ａ」は、共有メモリ２５０に戻して格納するか、又はプライベートメモリ２３０に格納し、後に共有メモリ２５０にコピーしなければならない。
【００４８】
[0059]  プライベートメモリ２３０に格納し、後に共有メモリ２５０にコピーすることに対する代替の解決法として、ａ１からの出力オペランド２８０は、メモリにコピーするよりも、共有メモリ２５０に直接戻して格納することができる。それにもかかわらず、この代替の解決法は、依然としてプログラムを減速させる恐れがある。単一の処理ユニット（例えば、処理ユニット２４２）は、１つのサイクルあたり１つのみの乗加算演算（例えば、Ｘｉ＊Ｗ１＿ｉｊ）を終了できるため、「ａ」の各演算は、複数のサイクルにわたって実行され得る。この理由のため、各サイクルにおいてプライベートメモリ２３０から１つのみのオペランドＷ１＿ｉｊが読み取られ、従って共有メモリ２５０から１つのみの「Ｘ」が必要である。結果的に、各メモリモジュールの共通の設計は、１つのサイクルあたり単一読み取り／単一書き込みである。最後のサイクルにおいて複数の処理ユニットによってすべての「ａ」が同時に生成される際、共有メモリ２５０は、それらをすべて書き戻す能力を有さない可能性がある。
【００４９】
[0060]  いくつかの実施形態では、これらの出力オペランド２８０を個別に消費するためのさらなる時間を共有メモリ２５０に与えるための書き込みバッファ２６０が導入される。しかし、処理ユニット２４０の出力速度が、書き込みバッファ２６０の幅より速い（例えば、ＡのサイズがＸより大きい）場合、書き込みバッファ２６０は、バックプレッシャを伝播し、処理ユニットアレイ２４０を強制的に減速させ、それによりプログラム全体の実行が減速する。
【００５０】
[0061]  図４から理解すべきものとして、ニューラルネットワークアルゴリズムでは、多層の計算が存在し得る。ａ１は、ＡＬＵによって計算され、それにより、ａ１のデータは、ローカルデータとして現れるようになるが、このデータは、次の演算層においてブロードキャスト入力になり得る。本明細書で提示される例示的な実施形態のいくつかは、そのような衝突を避けるためのメモリ装置及びそれを制御する方法を提供する。
【００５１】
[0062]  図５及び図６は、例示的な実施形態のいくつかによるメモリ装置を示す。図５は、コアの各処理ユニット０〜２Ｋに対する２つのオペランド「ｏｐ１」及び「ｏｐ２」並びに１つの結果「Ｒ」を有する単一命令複数データ（ＳＩＭＤ）アーキテクチャを示す。ＳＩＭＤのメモリユニットは、２つの書き込みポート（フル書き込みポート「F.Write」及びナロー書き込みポート「N.Write」など）と、２つの読み取りポート（フル読み取りポート「F.Read」及びナロー読み取りポート「N.Read」など）とを含む。
【００５２】
[0063]  図６は、図５のメモリ装置の構造を示す。図６に示されるように、メモリ装置は、４つの別個の記憶ブロックBlock０〜Block３を含み、各記憶ブロックは、多くのバンクユニットbank〜bankＮを含む。いくつかの実施形態によれば、各記憶ブロックは、１Ｒ／Ｗ  ＳＲＡＭであり得、従来のシステムで使用される１Ｒ／１Ｗ  ＳＲＡＭより実質的に小さく、より少ない電力を消費する。例示的な実施形態のいくつかによれば、図６の記憶ブロックの各々は、メモリ装置の書き込み及び読み取りポートの各々に通信可能に結合される。
【００５３】
[0064]  例示的な実施形態のいくつかによれば、記憶ブロックの各々が所定の演算サイクル中に演算値の１セットを多くとも読み取るか又は書き込むことができるように、データマッピングスキームを利用することができる。そのような組織は、記憶ブロックにおいて実装及び組織化されるスクラッチパッドメモリを提供する。この組織は、従来のアーキテクチャにおいて遭遇する並列アクセスコンフリクトを効率的に回避する。本明細書で開示されるアーキテクチャは、より広範なＳＩＭＤマシンを使用可能にするのみならず、粗粒度ソフトウェアパイプライン方式などの高度な最適化を実施するためのコンパイラも使用可能にする。
【００５４】
[0065]  様々な実施形態によれば、コンパイラを使用してデータマッピングを制御することができるため、図６に示されるように、コンパイラは、ｏｐ−１及びｏｐ−２をそれぞれブロック０及び１に割り当てることができる。このアーキテクチャは、図１Ａ及び１Ｂに関連して説明される従来のシステムの物理的な限界を克服する。それに従って、図５に示されるように、図１Ａに示されるアーキテクチャと比べてＳＩＭＤの２Ｋ幅を効率的にサポートすることができる。
【００５５】
[0066]  図７は、本開示の実施形態と一致する図５及び６のメモリ装置の例示的な実装形態の詳細な概略図を提供する。例示の目的のため、図６及び７に示される実施形態では、処理ユニット６３０の数は、３２個に等しく、データ幅は、１６ビットに等しいが、開示される実施形態と一致するコアにわたるいかなる数の処理ユニット及びデータ幅も使用できることが理解される。例えば、コアが３２個の処理要素を有し、処理要素の各々が３２個の処理ユニットを有すると、その合計は、そのコアに対して１０２４個の処理ユニットとなる。
【００５６】
[0067]  例えば、図７に示されるように、下位処理要素層では、開示される例示的な実施形態は、処理要素の１つにおける３２個の処理ユニット６３０（例えば、図７に示される乗累算器リデューサ（ＭＡＲ）など）を組織化し、データ共有のためにこれらの３２個の処理ユニット６３０に対して集中型の共有メモリ（ローカルメモリ（ＬＭ）６２０と呼ばれる）を使用する。ＬＭ  ６２０は、図５及び６のメモリ装置に等しい。例示的な実施形態のいくつかによれば、複数の処理要素６１０は、データハブ又はＤＭＡユニットを介してシステムにまとめて接続される。いくつかの実施形態では、各処理要素のローカルメモリは、分散型共有メモリアーキテクチャを形成することができる。これらのローカルメモリは、グローバルにアドレス指定することができ、データハブを介して電気的に接続され、それにより高速共有能力が提供される。
【００５７】
[0068]  各ローカルメモリ６２０は、フルポート（例えば、図７のローカルメモリ６２０の左側の２つのポートであり、１６ビットを有する３２個の接続を伴うF.write及びF.readポートと関連付けられ、処理要素の各処理ユニットに対して１つずつの接続である）を含み得、ローカルメモリ６２０への並列アクセスを処理ユニット６３０に提供する。フルポートは、ニューラルネットワークの完全に接続された層の重みなど、プライベートデータへのＳＩＭＤアクセスに対して使用することができる。ローカルメモリ６２０に格納され、同じローカルメモリと関連付けられた処理ユニット６３０と直接共有されるローカルデータは、プライベートデータと見なすことができることが理解される。各ローカルメモリ６２０は、ナローポート（例えば、図７のローカルメモリ６２０の右側の２つのポートであり、１６ビットを有する１つの接続を伴うN.write及びN.readポートと関連付けられる）も含み得、メモリへのナローアクセスを処理ユニット６３０に提供する。ナローポートは、ブロードキャストされる又はブロードキャストされた共有データに対して使用することができる。リモートデータ（例えば、別の処理要素のメモリ又はＤＭＡユニットに格納されたもの）及び１つ又は複数の他の処理要素及びそれらの対応する処理ユニット６３０と共有されるデータは、共有データと見なすことができることが理解される。例示的な実施形態のいくつかによれば、ナロー書き込みポート「N.write」は、マルチプレクサＭＵＸ  ７３１を介してＤＭＡ及びデータハブにアクセスするために使用することができる。図７では、太線で示されるデータ通信回線は、「全幅」通信回線（例えば、１６ビット×３２）を指すことを理解されたい。太線でないデータ通信回線は、「狭幅」通信回線（例えば、１６ビット）を指す。狭幅通信回線は、１６、１６×２、１６×３ビットなどであり得ることを理解されたい。その上、通信回線幅は、１６ビットに限定する必要はなく、４ビット、８ビット、３２ビットなどであり得ることを理解されたい。
【００５８】
[0069]  フルポート及びナローポートは、ローカルメモリ６２０の異なる記憶ブロックと関連付けるように構成される。ローカルメモリ６２０のこれらの複数の記憶ブロック（例えば、それぞれ１Ｒ／Ｗ  ＳＲＡＭであり得る記憶ブロックBlock０〜Block３）は、例えば、マルチプレクサ（例えば、マルチプレクサ７０５、７１０、７４０及び７４５）を介してすべてのフル及びナローポートに物理的に接続され、これらのポートへの及びこれらのポートからの同時アクセスを提供することができる。例えば、読み取りポートに関し、各ポートに対して１つずつのマルチプレクサがあり（例えば、F.readポートに対してマルチプレクサ７０５があり、N.readポートに対してマルチプレクサ７１０がある）、両方とも各々の記憶ブロックに接続される。例えば、図７に示されるように、記憶ブロックBlock０及びBlock３は、マルチプレクサ７０５とマルチプレクサ７１０との両方に通信可能に結合される。簡単にするために示されていないが、記憶ブロックBlock１及びBlock２も結合される。それに従って、図７に示される実施形態の場合、マルチプレクサ７０５とマルチプレクサ７１０との両方は、４：１マルチプレクサであり得、マルチプレクサへの入力の数は、ローカルメモリの記憶ブロックの数と一致する。例えば、８個の記憶ブロックがある場合、マルチプレクサ７０５とマルチプレクサ７１０との両方は、８：１マルチプレクサであり得る。記憶ブロックとマルチプレクサ７１０との間に１つ又は複数の他のマルチプレクサが存在し得ることが理解される。例えば、３２個の１６ビットの出力が存在する状況では、３２：１マルチプレクサは、N.readポートに提供するために、３２個の入力の１つを選択することができる。マルチプレクサ７０５及び７１０は、選択信号（コンパイラ命令を介して）を受信することができ、選択信号は、それらの対応するポートから出力される信号を選択するものである。
【００５９】
[0070]  書き込みポートに関し、各記憶ブロックは、F.writeポートとN.writeポートとの両方から受信される入力を選択する１つ又は複数の対応する２：１マルチプレクサを有する。例えば、図７に示されるように、マルチプレクサ７４０及び７４５は、それぞれ記憶ブロックBlock０及びBlock３に対応し得る。選択信号（コンパイラ命令を介して）に基づいて、マルチプレクサ７４０及び７４５は、それらの対応する記憶ブロックに対し、フル書き込みポート又はナロー書き込みポートを介して受信された選択データを提供することができる。簡単にするために示されていないが、記憶ブロックBlock１及びBlock２にデータを書き込むために同様のマルチプレクサを使用することができる。いくつかの実施形態では、データが記憶ブロックに書き込まれている状況では、F.write又はN.writeポートのいずれかから受信された１６ビットの入力の１つを選択する３２個の２：１マルチプレクサ（３２個の１６ビットの各入力に対して１つずつ）が存在し得る。記憶ブロックBlock０〜Block３とポートとの間のこれらの接続の構成は、コアによって受信された命令に基づいて確立することができる。
【００６０】
[0071]  例えば、１つ又は複数のコアにおいて実行されるＳＩＭＤ命令のシーケンスは、Ａｏｕｔ［１０２４］＝Ｗ１［１０２４］＊Ａｉｎ［１］の計算を実行するために、３２個の処理要素の各々のすべての３２個の処理ユニット６３０に関与し得る。
【００６１】
[0072]  ３２個の処理ユニットがある図７のコンポーネントに対してこの計算を簡単にするため、コンポーネントは、Ａｏｕｔ［３２］＝Ｗ１［３２］＊Ａｉｎ［１］の計算を実行することができる。この例では、記憶ブロックBlock０〜Block３は、データを格納するために使用することができ、Block０は、データＷ１［３２］を格納し、Block１は、ＤＭＡユニットを介してバックステージ制御シーケンスを介して受信されたデータＡｉｎ［１］を格納する。後にさらに説明されるように、３２個の処理ユニットは、結果Ａｏｕｔ［３２］を生成するために、Ａｉｎオペランドと、Ｗ１オペランドの１つとを受信し、対応する演算を実行することができ、結果Ａｏｕｔ［３２］は、ｍｕｘ  ７３０及びフル書き込みポートを介してローカルメモリ６２０に戻すことができる。
【００６２】
[0073]  各記憶ブロックBlock０〜Block３の設計は、１Ｒ／１Ｗ  ＳＲＡＭ（１回の読み取り及び１回の書き込みを提供することができる）の代わりに、１つの１Ｒ／Ｗ  ＳＲＡＭを使用して実施することができ（各記憶ブロックは、サイクルする１つの読み取り記憶ブロック又は１つの書き込み記憶ブロックとして機能する）、それにより約３０％のシリコンエリア低減及び電力節約がもたらされる。この例では、記憶ブロックBlock０〜Block３は、同一の機能を有し、ソフトウェアに基づいて、１つのサイクルあたり１つの読み取り記憶ブロック又は書き込み記憶ブロックとして機能するように構成することができる。すなわち、データ衝突を避けるため、任意の所定のサイクルに対して１つのポートを介する１つの専用記憶ブロックを通じるデータフローが１つのみ存在することを満たす限り（ただし、すべての記憶ブロックは、すべてのポートに物理的に接続される）、任意のタイプのデータ（プライベートデータ又は共有データにかかわらず）を任意の記憶ブロックに格納することができる。その上、他の記憶ブロックが存在し得、クロックサイクルに応じてアイドル状態であり得ることが理解される。
【００６３】
[0074]  様々な実施形態によれば、コンパイラは、データレーン間のバンクコンフリクトを回避するために、各ブロックアクセスにおけるアドレスアラインメントを確立することができる。従来のアーキテクチャとは対照的に、図５〜７のメモリ装置は、様々な記憶バンクが１つの演算サイクルあたり多くとも１つの演算値（例えば、現在の又は次の演算サイクルで使用される演算結果又はオペランド）において動作できるようにするための手段を提供することにより、コンパイラがバンクコンフリクトを回避できるようにする。従来のシステムでは、ｏｐ−１及びｏｐ−２は、両方のオペランドを格納するために同じバンクが利用される場合、衝突を引き起こす。ｏｐ−１及びｏｐ−２を同じブロックに割り当てることにより、アラインされていないアドレスが生じ得、これを受けて、同じオペランド（ｏｐ−１又はｏｐ−２）の異なるデータレーンからのバンクコンフリクトが生じる。本明細書で提供される実施形態によれば、オペランドは、異なる記憶ブロックに割り当てられる。具体的には、所定のいかなる演算層でも、記憶ブロックは、１つの演算値を多くとも読み取るか又は書き込むことができる。
【００６４】
[0075]  図８は、図５〜７の記憶ブロックによって提供することができるデータマッピング及び動作モードの例を提供する表を示す。図９は、複数の演算層中における図６の様々な記憶ブロックの機能を示す概略図である。図９の最初の２つの演算層は、図８の表で提供される例示的な層に相当する。
【００６５】
[0076]  図９に示されるように、各演算層は、いかなる数のサイクルも含み得る。図８及び９において提供される例では、各演算層は、少なくとも２つのサイクル（図９ではＣｒ及びＣｗとラベル付けされる）を含む。具体的には、各演算層は、少なくとも１つの読み取りサイクルＣｒと、少なくとも１つの書き込みサイクルＣｗとを含む。例示的な実施形態のいくつかによれば、各演算層の開始時、コンパイラは、様々な記憶ブロックの機能又は動作モードに関する命令をメモリ装置に提供することができる。
【００６６】
[0077]  図８及び９において提供される例では、層１のサイクルＣｒにおいて、記憶ブロックBlock１に演算動作モードが割り当てられる。演算動作モードでは、記憶ブロックは、現在の演算層のために実行される演算で使用するオペランドを取得するように構成することができる。本例では、Block１は、第１のオペランド（Ａ１）を読み取る。
【００６７】
[0078]  サイクルＣｒ中、Block０には、演算動作モードが割り当てられ、従って現在の演算層の演算で使用するオペランドのアレイを取得するように構成される。図８及び９によって提供される例では、Block０は、オペランドセットを有するアレイＷ１を取得する。
【００６８】
[0079]  すべてのオペランドが得られた時点で、処理ユニットは、演算を実行することができる。例えば、図７に示されるように、処理ユニット（ＭＡＲ）は、メモリ装置のF.Read及びN.Readポートを介してBlock１及びBlock０からそれぞれ第１のオペランド（Ａ１）及びアレイＷ１からのオペランドの１つを受信するように構成することができる。例えば、記憶ブロックBlock０は、アレイＷ１に３２個のオペランドを有し得、それらは、すべてフル読み取りポートに出力される。アレイＷ１のこれらのオペランドの各々は、演算のために別個の処理ユニットに提供される。さらに、記憶ブロックBlock１に格納された第１のオペランドＡ１は、ナロー読み取りポートに出力することができる。第１のオペランドＡ１は、アレイＷ１からのそれぞれのオペランドと共に演算するために処理ユニットの各々に提供し、Ａ２［３２］＝Ｗ１［３２］＊Ａ１［１］という結果を生成することができる。
【００６９】
[0080]  書き込みサイクルＣｗ中、Block２に結果動作モードが割り当てられる。結果動作モード中、記憶ブロックは、現在の演算層内において、第１及び第２のオペランドに関与する演算の結果（例えば、Ａ２）を格納するように構成される。結果は、処理要素の処理ユニットを介して、F.Writeポートを通じて（マルチプレクサ７３０を介して）提供される。Block２は、記憶ブロックBlock２のバンク内に、演算の１つ又は複数の結果として生じたオペランドＡ２を格納することができる。例えば、Ａ２［３２］の結果からの単一のオペランドをBlock２に格納する（マルチプレクサ７３０の選択信号を介して）ことができるが、Ａ２［３２］の結果からのすべてのオペランドを格納できることが理解される。
【００７０】
[0081]  また、書き込みサイクルＣｗ中、Block３にプリロード動作モードが割り当てられる。プリロード動作モード中、記憶ブロックは、次の演算層の演算中に使用されるＷ２アレイに対するオペランドを取得するように構成される。例示的な実施形態のいくつかによれば、プリロードされるオペランドは、ＤＭＡからメモリ装置のナロー書き込みポートを介して取得することができる。図８及び９によって提供される例では、プリロードアレイＷ２は、ＤＭＡから取得され、記憶ブロックBlock３のバンクユニット内に格納される。
【００７１】
[0082]  次の演算層（層２）中、前の層からの記憶ブロックに書き込まれた２つの値が利用される。具体的には、層１からの結果であるＡ２［３２］は、層２では第１のオペランドとして使用され、プリロードされたオペランドであるＷ２アレイは、第２のオペランドとして使用される。従って、記憶ブロックBlock２及びBlock３の動作モードは、層２の開始時、演算動作モードに動的に調整される。第１及び第２のオペランドであるＡ２［３２］及びＷ２アレイは、層２の読み取りサイクルＣｒ中、記憶ブロックBlock２及びBlock３のバンクユニットから読み取られる。
【００７２】
[0083]  演算層２で使用されるオペランドは、既に記憶ブロックに提供されているため、処理要素の処理要素は、演算を即座に実行することができる。第１及び第２のオペランドであるＡ２［３２］及びＷ２アレイは、メモリ装置のF.Read及びN.Readポートを介して記憶ブロックBlock２及びBlock３からそれぞれ取得される。
【００７３】
[0084]  演算層２の書き込みサイクルＣｗ中、記憶ブロックBlock０に結果動作モードが割り当てられる。従って、結果は、処理要素の処理ユニットを介して、フル書き込み又はナロー書き込みポートを通じて記憶ブロックBlock０に提供される。記憶ブロックBlock０は、記憶ブロックBlock０のバンク内に演算の結果Ａ３を格納する。
【００７４】
[0085]  また、層２の書き込みサイクルＣｗ中、Block１にプリロード動作モードが割り当てられる。例示的な実施形態のいくつかによれば、プリロードされるオペランドは、ＤＭＡからメモリ装置のナロー書き込みポートを介して取得することができる。図８及び９によって提供される例では、プリロードオペランドＷ３は、ＤＭＡからナロー書き込みポートを介して取得され、記憶ブロックBlock１のバンクユニット内に格納される。
【００７５】
[0086]  層２の場合と同様に、次の演算層（層３）中、前の層からの記憶ブロックに書き込まれた２つの値が利用される。具体的には、層２からの結果であるＡ３は、層３では第１のオペランドとして使用され、プリロードされたオペランドであるＷ３は、第２のオペランドとして使用される。従って、記憶ブロックBlock０及びBlock１の動作モードは、層３の開始時、演算動作モードに動的に調整される。第１及び第２のオペランドであるＡ３及びＷ３は、層３の読み取りサイクルＣｒ中、記憶ブロックBlock０及びBlock１のバンクユニットから読み取られる。
【００７６】
[0087]  その後、処理要素の処理要素は、演算を実行する。第１及び第２のオペランドであるＡ３及びＷ３は、メモリ装置のF.Read及びN.Readポートを介して記憶ブロックBlock０及びBlock１からそれぞれ取得される。
【００７７】
[0088]  層３の書き込みサイクルＣｗ中、記憶ブロック２に結果動作モードが割り当てられる。従って、結果は、処理要素の処理ユニットを介して、マルチプレクサ７３０を介して、F.Writeポートを通じて記憶ブロックBlock２に提供される。記憶ブロックBlock２は、記憶ブロックBlock２のバンク内に演算の結果Ａ４を格納する。
【００７８】
[0089]  また、層３の書き込みサイクルＣｗ中、Block３にプリロード動作モードが割り当てられる。従って、プリロードオペランドＷ４は、ＤＭＡから取得され、記憶ブロックBlock３のバンクユニット内に格納される。このサイクル中に格納されたプリロードオペランドは、次の演算層中にオペランドとして使用される。
【００７９】
[0090]  例示的な実施形態のいくつかによれば、読み取りサイクルＣｒ及び書き込みサイクルＣｗ中にそれぞれ実行される読み取り及び書き込みは、演算層内で同時に又は順次に起こり得る。図８及び９によって提供される例では、記憶ブロックは、読み取り（例えば、演算モード）並びに書き込み（例えば、結果及びプリロードモード）に焦点を合わせた動作モードを交互に繰り返すことを理解されたい。
【００８０】
[0091]  それぞれの演算層において起こるステップは、いかなる数のサイクルでも実行できることを理解されたい。例えば、例示的な実施形態のいくつかによれば、オペランドの読み取り（例えば、演算モードの記憶ブロックによって）を伴う動作は、同じサイクルにおいて起こり得る。さらに、プリロードオペランドの書き込みは、オペランドの読み取りと同じサイクルにおいて、演算結果の書き込み（例えば、結果モードの記憶によって）と同じサイクルにおいて又は異なる若しくは別個のサイクルにおいて起こり得る。
【００８１】
[0092]  例示的な実施形態のいくつかによれば、様々な記憶ブロックの動作モードを動的に変更することに加えて、記憶ブロックによってアクセス可能なデータのタイプも変更することができる。例えば、ＤＭＡからの読み取りオペランド（例ではラベルＷが割り当てられている）に割り当てられる記憶ブロックを変更することができる。異なるタイプのオペランドは、他のものと比べて大きいサイズのものであり得る。従って、記憶ブロックを変更することにより、ブロックが受信しているデータのタイプ及びいずれのソースからのものであるかに関し、個々のブロックの記憶需要のバランスを保つことについて補助をすることができる。
【００８２】
[0093]  図８及び９によって提供される例では、ある演算層において結果モードが割り当てられた記憶ブロックには、次の演算層において演算モードが割り当てられる。演算の結果は、結果モードの記憶ブロックのバンクユニット内に格納されるため、追加のデータ取得は、排除される。具体的には、次の演算層中に同じ記憶ブロックが演算モードに移行した時点で、前の演算層の結果であったオペランドは、記憶ブロックのバンクユニット内に既に格納されている。従って、決定及び演算モードの一定の移行を提供することにより、ニューラルネットワークの処理速度を向上することができる。
【００８３】
[0094]  加えて、プリロード動作モードの使用により、ニューラルネットワークの処理速度を増加することもできる。オペランドのプリロードにより、新しい演算層の開始時に速やかに演算を実行することができる。具体的には、各演算層の開始時、演算に必要な２つのオペランドは、結果及び演算モードの移行及びプリロードの使用を介して記憶ブロックに既に存在している。
【００８４】
[0095]  図１０は、図５〜９のメモリ装置によって行うことができる例示的な動作を描写するフロー図である。図１０は、実線の枠線で示されるいくつかの動作及び破線の枠線で示されるいくつかの動作を含むことを理解されたい。実線の枠線で囲まれる動作は、最大限広範な例示的な実施形態に含まれる動作である。破線の枠線で囲まれる動作は、枠線の例示的な実施形態の動作に含まれるか、その動作の一部であるか又はその動作に加えて行うことができるさらなる動作である例示的な実施形態である。これらの動作は、順番に実行する必要がないことを理解されたい。その上、すべての動作を実行しなければならないわけではないことを理解されたい。例示的な動作は、いかなる順番及びいかなる組合せでも実行することができる。
【００８５】
[0096]  図１０の例示的な動作について、図８及び９において提供される例を使用して説明し、メモリ装置は、少なくとも４つの記憶メモリブロックを含む。図１０の例示的な動作８〜１４は、第１の演算層（図９に示される層１）内で行われる。図１０の例示的な動作１５〜１９は、第２の演算層（図９に示される層２）内で行われる。
【００８６】
[0097]  Block０及びBlock１としてラベル付けされたブロックは、第１の記憶ブロックのセットに含まれ、Block２及びBlock３としてラベル付けされたブロックは、第２の記憶ブロックのセットに含まれる。図８及び９において提供される例に示されるように、第１の記憶ブロックのセットは、最初に（例えば、第１の演算層中に）メモリからオペランドを読み取るように構成され、第２の記憶ブロックのセットは、最初にメモリにオペランドを書き込むように構成される。第２の演算層中、第１及び第２の記憶ブロックのセットの動作が切り替えられ、それにより、第１の記憶ブロックのセットは、書き込みベースモードで動作するように構成され、第２の記憶ブロックのセットは、読み取りベースモードで動作するように構成される。
【００８７】
[0098]  例示的な実施形態のいくつかは、ステップ８において、各演算層のために第１及び第２の記憶ブロックのセットの動作モードを制御する命令をコンパイラから受信することを含み得る。例示的な実施形態のいくつかによれば、命令は、コンパイラにより、ホストユニットを介してメモリ装置に提供することができる。命令は、例えば、すべての演算サイクルの開始時又は任意の既定の時間間隔中に受信することができる。
【００８８】
[0099]  ステップ８において命令を受信した後、例示的な実施形態のいくつかは、受信された命令に基づいて第１及び第２の記憶ブロックのセットの動作モードを設定すること（ステップ９）をさらに含み得る。従って、記憶ブロックの動作モードは、各演算層の開始時に動的に調整することができる。例えば、図９で描写されるように、動作ブロックは、連続する演算層中、書き込みベースモードから読み取りベースモードに交互に繰り返すことができる。
【００８９】
[00100]  例示的な実施形態のいくつかは、ステップ１０において、第１の演算層において、メモリ装置の読み取りポートを介して少なくとも１つの処理ユニットにオペランドを提供することを可能にする読み取り記憶ブロックのセットとして動作する第１の記憶ブロックのセットを選択することを含む。図９によって提供される例では、記憶ブロックBlock０及びBlock１は、両方とも読み取りモードに設定される。例示的な実施形態のいくつかによれば、ステップ１０における選択することは、第１の記憶ブロックのセットの動作モードを演算動作モードに設定することを伴うステップ１１をさらに含み得、それにより、第１の記憶ブロックのセットは、演算で使用されるオペランドを読み取り（少なくとも１つの処理ユニットを介して）、第１の演算層において実行するように構成される。図９に示されるように、記憶ブロックBlock０及びBlock１は、両方とも演算モードであり、それにより、ブロックは、層１において実行される演算のためにＷ１及びＡ１のそれぞれの入力からオペランドを読み取るように構成される。例示的な実施形態のいくつかによれば、図７と併用して説明されるように、読み取ることは、フル読み取り又はナロー読み取りポートを介して実行することができる。
【００９０】
[00101]  例示的な実施形態のいくつかは、格納のためにメモリ装置の書き込みポートを介してオペランドを受信することを可能にする書き込み記憶ブロックのセットとして動作する第２の記憶ブロックのセットを選択することを伴うステップ１２を含み得る。図９に示されるように、記憶ブロックBlock２及びBlock３は、層１中、書き込みベースモードで提供される。具体的には、記憶ブロックBlock２及びBlock３は、それぞれ記憶ブロック自体のバンクユニット内に、演算の結果Ａ２及びＷ２に対するプリロード動作を書き込むように構成される。例えば、Ｗ２入力アレイの各オペランドを別個のバンクに格納することができるように、記憶ブロックの各バンクユニットは、１つ又は複数のオペランドを格納することができる。
【００９１】
[00102]  例示的な実施形態のいくつかによれば、ステップ１２の選択することは、第２の記憶ブロックのセットの第１の記憶ブロックを結果モードに設定すること（ステップ１３）をさらに含み、それにより、第１の記憶ブロックは、第１の演算層における実行された演算の結果を第１の記憶ブロック内に書き込むように構成される。図９に示されるように、第２の記憶ブロックのセットの第１の記憶ブロックは、Block２として示される。Block２は、入力Ｗ１及びＡ１からのオペランドに関与する演算からの結果Ａ２を書き込むように構成される。図７に示されるように、少なくとも処理ユニットを介して演算され次第、演算の結果は、処理ユニットとフル書き込みポート（F.write）との間のフィードバック接続を介して第１の記憶ブロックに提供することができる。
【００９２】
[00103]  例示的な実施形態のいくつかは、第２の記憶ブロックのセットの第２の記憶ブロックの動作モードをプリロードモードに設定すること（ステップ１４）をさらに含み得る。そのようなモード下では、第２の記憶ブロックは、第２の演算層において実行される演算で使用されるプリロードオペランドを第２の記憶ブロック内に書き込むように構成される。図９に示されるように、第２の記憶ブロックのセットの第２の記憶ブロックは、Block３として示される。Block３は、入力Ｗ２のオペランドをBlock３のバンクユニットに書き込むように構成される。Ｗ２入力アレイからのオペランドは、層２中に使用されるオペランドである。従って、これらのオペランドは、層１中にプリロードすることができる。そのようなプリロードにより、演算層２の開始時に複数のメモリ読み取りを行う必要なく、演算層２の演算を速やかに行うことができる。図７に示されるように、第２の記憶ブロックは、ＤＭＡからナロー書き込みポート（N.write）を介してプリロードオペランドを書き込むことができる。
【００９３】
[00104]  例示的な実施形態のいくつかは、第２の演算層の開始時、書き込み記憶ブロックのセットとして動作する第１の記憶ブロックのセットを選択することを伴うステップ１５を含む。図９に示されるように、Block０及びBlock１として示される第１の記憶ブロックのセットは、最初に層１において読み取りベースモードであったものであり、その後、演算層２において書き込みベースモードにされる。
【００９４】
[00105]  例示的な実施形態のいくつかによれば、ステップ１５の選択することは、ステップ１６において、第１の記憶ブロックのセットの第１の記憶ブロックの動作モードを結果モードに設定することをさらに含み得る。その動作モード下で動作するように設定されると、第１の記憶ブロックは、第２の演算層における実行された演算の結果を第１の記憶ブロック内に書き込むように構成される。図９に示されるように、第１の記憶ブロックのセットの第１の記憶ブロックは、Block０として示される。第２の演算層（層２）の開始中、Block０は、層２の演算の結果Ａ３の１つ又は複数のオペランドを書き込むように構成される。図７に示されるように、少なくとも処理ユニットを介して演算され次第、演算の結果は、処理ユニットとフル書き込みポート（F.write）との間のフィードバック接続を介して第１の記憶ブロックに提供することができる。
【００９５】
[00106]  例示的な実施形態のいくつかによれば、ステップ１５の選択することは、ステップ１７において、第１の記憶ブロックのセットの第２の記憶ブロックの動作モードをプリロードモードに設定することをさらに含み得る。そのようなモード下で動作すると、第２の記憶ブロックは、第３の演算層において実行される演算で使用されるプリロードオペランドを第２の記憶ブロック内に書き込むように構成される。図９に示されるように、第１の記憶ブロックのセットの第２の記憶ブロックは、Block１として示される。第２の演算層の開始中、Block１は、Ｗ３アレイのプリロードオペランドをBlock１の１つ又は複数のバンクユニット内に書き込むように構成される。例えば、Ｗ３入力アレイの各オペランドを別個のバンクに格納することができるように、記憶ブロックの各バンクユニットは、１つ又は複数のオペランドを格納することができる。図７に示されるように、第２の記憶ブロックは、ＤＭＡからナロー書き込みポート（N.write）のいずれかを介してプリロードオペランドを書き込むことができる。
【００９６】
[00107]  例示的な実施形態のいくつかは、読み取り記憶ブロックのセットとして動作する第２の記憶ブロックのセットを選択することを伴うステップ１８をさらに含み得る。図９に示されるように、Block２及びBlock３として示される第２の記憶ブロックのセットは、最初に（例えば、演算層１において）書き込みベースモードにされる。第２の演算層の開始時、第２の記憶ブロックのセットBlock２及びBlock３は、読み取りベースモードにされる。
【００９７】
[00108]  例示的な実施形態のいくつかによれば、ステップ１８の選択することは、ステップ１９において、第２の記憶ブロックのセットの動作モードを演算モードに設定することをさらに含み得る。そのようなモード下で動作すると、第２の記憶ブロックのセットは、第２の演算層において実行される演算で使用されるオペランドを読み取るように構成される。図９に示されるように、Block２及びBlock３として示される第２の記憶ブロックのセットは、最初に（例えば、演算層１内において）それらのそれぞれのバンクユニットにオペランドを書き込むように構成される。第２の演算層の開始時、Block２及びBlock３は、第２の演算層内で実行される演算を実行するために演算モードにされ、少なくとも１つの処理ユニットにオペランド（層１において書き込まれたものであり、入力Ａ２及びＷ２のオペランドである）を速やかに提供する。従って、書き込みベースモードから読み取りベースモードへと記憶ブロックのモードを交互に繰り返すことにより、演算の実行に必要なオペランドは既に記憶ブロック内に格納されているため、演算速度を増加することができる。
【００９８】
[00109]  本明細書で説明される様々な例示的な実施形態は、方法ステップ又はプロセスに一般的に関連して説明されており、方法ステップ又はプロセスは、一態様では、コンピュータ可読媒体において具体化されるコンピュータプログラム製品（ネットワーク接続環境においてコンピュータによって実行されるプログラムコードなどのコンピュータ実行可能命令を含む）によって実施することができる。例えば、命令により、分配表示を集中型のデータハブに送信させることができ、集中型のデータハブは、分配表示に属する分配パターンに従って共有データを分配できることが理解される。コンピュータ可読媒体は、着脱可能及び着脱不能な記憶装置を含み得、これらに限定されないが、読み取り専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、コンパクトディスク（ＣＤ）、デジタル多用途ディスク（ＤＶＤ）などを含む。一般に、プログラムモジュールは、特定のタスクを実行するか又は特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含み得る。コンピュータ実行可能命令、関連データ構造及びプログラムモジュールは、本明細書で開示される方法のステップを実行するためのプログラムコードの例を表す。そのような実行可能命令又は関連データ構造の特定のシーケンスは、そのようなステップ又はプロセスにおいて説明された機能を実装するための対応する行為の例を表す。
【００９９】
[00110]  前述の説明では、実装形態ごとに変化し得る多くの特有の詳細を参照して実施形態について説明した。説明される実施形態の適応形態及び変更形態は、ある程度なされ得る。本明細書で開示される本発明の説明及び実践を考慮することにより、他の実施形態が当業者に明らかになり得る。説明及び例は、単なる例示と見なされ、本発明の真の範囲及び趣旨は、以下の特許請求の範囲によって示されることが意図される。図に示されるステップのシーケンスは、単なる例示を目的とし、ステップの特定のシーケンスに限定することを意図しないことも意図される。従って、当業者は、同じ方法を実施する間、異なる順番でこれらのステップを実行できることを理解することができる。
【０１００】
[00111]  図面及び説明では、例示的な実施形態を開示した。しかし、これらの実施形態に対する多くの変形形態及び変更形態がなされ得る。それに従って、特有の用語が採用されているが、それらは、単に一般的且つ記述的な意味で使用され、限定する目的で使用されない。実施形態の範囲は、以下の特許請求の範囲によって定義される。
【図１Ａ】
2021507352.tif 000003
【図１Ｂ】
2021507352.tif 000004
【図２】
2021507352.tif 000005
【図３Ａ】
2021507352.tif 000006
【図３Ｂ】
2021507352.tif 000007
【図４】
2021507352.tif 000008
【図５】
2021507352.tif 000009
【図６】
2021507352.tif 000010
【図７】
2021507352.tif 000011
【図８】
2021507352.tif 000012
【図９】
2021507352.tif 000013
【図１０】
2021507352.tif 000014
【国際調査報告】
2021507352.tif 000015
2021507352.tif 000016