特表2025-532655IP Force 特許公報全文掲載

(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】
(54)【発明の名称】ニューラルネットワークプロセッサ
(51)【国際特許分類】
   
   
【FI】
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】
(86)(22)【出願日】
(85)【翻訳文提出日】
(86)【国際出願番号】
(87)【国際公開番号】
(87)【国際公開日】
(31)【優先権主張番号】63/407,757
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(31)【優先権主張番号】63/407,760
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(31)【優先権主張番号】63/407,758
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(31)【優先権主張番号】18/355,795
(32)【優先日】
(33)【優先権主張国・地域又は機関】
(81)【指定国・地域】
(71)【出願人】
【識別番号】507107291
【氏名又は名称】テキサス インスツルメンツ インコーポレイテッド
(74)【代理人】
【識別番号】230129078
【弁護士】
【氏名又は名称】佐藤 仁
(72)【発明者】
【氏名】マヘシュ エム メヘンデール
(72)【発明者】
【氏名】アトゥル レーレ
(72)【発明者】
【氏名】ナジェンドラ グルール
(72)【発明者】
【氏名】ヘトゥル サングヴィ
(72)【発明者】
【氏名】スリニヴァサ ビーエス チャクラヴァルシ
【テーマコード(参考)】
【Fターム(参考)】
5B033DD06
(57)【要約】
一例において、ニューラルネットワークプロセッサ(502)が、入力データレジスタ(528a)と、重みレジスタ(528b)と、入力精度の或る範囲の入力データ要素と重み精度の或る範囲の重み要素との間で乗累算(MAC)演算を実施するように構成可能な演算エンジン(524)と、コントローラ(522)とを含む。コントローラは、特定の入力精度の第1の指示と特定の重み精度の第2の指示とを受け取り、第1の指示と第2の指示とに基づいて演算エンジンを構成するように構成されている。コントローラはまた、命令に応答して、入力データ要素及び重み要素を演算エンジンにフェッチし、第1の指示と第2の指示とに基づいて構成された演算エンジンを用いて、特定の入力精度の入力データ要素と特定の重み精度の重み要素との間でMAC演算を実施して中間出力データ要素を生成するように構成されている。

【特許請求の範囲】
【請求項】
ニューラルネットワークプロセッサであって、
命令バッファと、
入力データレジスタと、
重みレジスタと、
中間出力データレジスタと、
特定の入力精度の第1の指示と特定の重み精度の第2の指示とを格納するように構成された構成レジスタと、
入力精度の或る範囲の入力データ要素と重み精度の或る範囲の重み要素との間で乗累算(MAC)演算を実施するように構成可能である演算エンジンと、
コントローラと、
を含み、前記コントローラが、
前記特定の入力精度の前記第1の指示と前記特定の重み精度の前記第2の指示とを前記構成レジスタから受け取り、
前記第1の指示と前記第2の指示とに基づいて前記演算エンジンを構成し、
前記命令バッファから命令を受け取り、
前記命令に応答して、
第1の数のビットを有する第1のパックドデータと第2の数のビットを有する第2のパックドデータとを、それぞれ、前記入力データレジスタ及び前記重みレジスタからフェッチし、
前記特定の入力精度に基づいて前記第1の数のビットから第1の数の前記入力データ要素を抽出し、
前記特定の重み精度に基づいて前記第2の数のビットから第2の数の前記重み要素を抽出し、
前記入力データ要素と前記重み要素とを前記演算エンジンにフェッチし、
前記第1の指示と前記第2の指示とに基づいて構成された前記演算エンジンを用いて、前記特定の入力精度の前記入力データ要素と前記特定の重み精度の前記重み要素との間でMAC演算を実施して、中間出力データ要素を生成し、
前記中間出力データ要素を前記中間出力データレジスタにおいて格納する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項1に記載のニューラルネットワークプロセッサであって、前記入力精度の範囲が、少なくとも、2値入力精度、符号付き4ビットの入力精度、符号なし4ビットの入力精度、符号付き8ビットの入力精度、及び符号なし8ビットの入力精度を含み、
前記重み精度の範囲が、少なくとも、2値重み精度、3値重み精度、2ビットの重み精度、4ビットの重み精度、及び8ビットの重み精度を含む、
ニューラルネットワークプロセッサ。
【請求項】
請求項2に記載のニューラルネットワークプロセッサであって、前記演算エンジンが、前記MAC演算を実施するように構成されたMAC)第1、第2、第3、及び第4のMACデータ入力との間に結合されたデータマルチプレクサを含み、前記データマルチプレクサが、前記コントローラに結合されたデータ制御入力を有し、
前記入力データレジスタが、第1の入力精度を各々が有する第1、第2、第3、及び第4の入力データ要素、又は、第2の入力精度を各々が有する第1、第2、第3、第4、第5、第6、第7、及び第8の入力データ要素を格納するように構成されており、
前記コントローラが、前記データマルチプレクサを、
前記第1の入力精度を示す前記第1の指示に応答して、
前記入力データレジスタの第1のデータビット出力を前記第1のMACデータ入力に接続して、前記第1の入力データ要素を提供し、
前記入力データレジスタの第2のデータビット出力を前記第2のMACデータ入力に接続して、前記第2の入力データ要素を提供し、
前記入力データレジスタの第3のデータビット出力を前記第3のMACデータ入力に接続して、前記第3の入力データ要素を提供し、
前記入力データレジスタの第4のデータビット出力を前記第4のMACデータ入力に接続して、前記第4の入力データ要素を提供し、
前記第2の入力精度を示す前記第1の指示に応答して、
前記第1のデータビット出力の半分の複製を前記第1のMACデータ入力に接続して、前記第1の入力データ要素又は前記第5の入力データ要素の複製を提供し、
前記第2のデータビット出力の半分の複製を前記第2のMACデータ入力に接続して、前記第2の入力データ要素又は前記第6の入力データ要素の複製を提供し、
前記第3のデータビット出力の半分の複製を前記第3のMACデータ入力に接続して、前記第3の入力データ要素又は前記第7の入力データ要素の複製を提供し、
前記第4のデータビット出力の半分の複製を前記第4のMACデータ入力に接続して、前記第4の入力データ要素又は前記第8の入力データ要素の複製を提供する、
ように制御するように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項3に記載のニューラルネットワークプロセッサであって、前記MACエンジンが、第1、第2、第3、及び第4のMAC重み入力のグループを有し、
前記重みレジスタが、重み要素の第1のグループ、重み要素の第2のグループ、重み要素の第3のグループ、及び重み要素の第4のグループを格納するように構成されており、
前記演算エンジンが、前記重みレジスタと前記第1、前記第2、前記第3、及び前記第4のMAC重み入力のグループとの間に結合された重みマルチプレクサを含み、前記重みマルチプレクサが、前記コントローラに結合された重み制御入力を有し、
前記コントローラが、前記重みマルチプレクサを、
前記第2の入力精度を示す前記第1の指示に応答して、前記重みレジスタの各ビットを前記第1、前記第2、前記第3、及び前記第4のMAC重み入力のグループの各それぞれのビットに接続して、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループにおいて重み要素の前記第1のグループを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第2のグループにおいて重み要素の前記第2のグループを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第3のグループにおいて重み要素の前記第3のグループを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第4のグループにおいて重み要素の前記第4のグループを提供し、
前記第1の入力精度を示す前記第1の指示に応答して、前記重みレジスタのビットの半分の複製を前記第1、前記第2、前記第3、及び前記第4のMAC重み入力のグループに接続して、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループにおいて重み要素の前記第1のグループ又は前記第3のグループの第1の半分の複製を提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループにおいて重み要素の前記第1のグループ又は前記第3のグループの第2の半分の複製を提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第3のグループにおいて重み要素の前記第2のグループ又は前記第4のグループの第1の半分の複製を提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第4のグループにおいて重み要素の前記第2のグループ又は前記第4のグループの第2の半分の複製を提供する、
ように制御するように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項4に記載のニューラルネットワークプロセッサであって、
前記MACエンジンが、複数の演算ユニットを含み、各演算ユニットが、
前記第1のMACデータ入力に結合されたそれぞれの第1の演算データ入力、前記第2のMACデータ入力に結合されたそれぞれの第2の演算データ入力、前記第3のMACデータ入力に結合されたそれぞれの第3の演算データ入力、及び前記第4のMACデータ入力に結合されたそれぞれの第4の演算データ入力と、
第1、第2、第3、及び第4のMAC重み入力のそれぞれのグループに結合されるそれぞれの第1、第2、第3、及び第4の演算重み入力と、
前記コントローラに結合されたシフト入力と、
累算入力と、
累算出力と、
を有し、
各演算ユニットが、
第1の乗算器入力と第1の乗算器出力とを有する第1の乗算器であって、前記第1の乗算器入力のうちの第1の乗算器入力が前記それぞれの第1の演算データ入力に結合されており、前記第1の乗算器入力のうちの第2の乗算器入力が前記それぞれ第1の演算重み入力に結合されている、前記第1の乗算器と、
第2の乗算器入力と第2の乗算器出力とを有する第2の乗算器であって、前記第2の乗算器入力のうちの第1の乗算器入力が前記それぞれ第2の演算データ入力に結合されており、前記第2の乗算器入力のうちの第2の乗算器入力が前記それぞれ第2の演算重み入力に結合されている、前記第2の乗算器と、
第3の乗算器入力と第3の乗算器出力とを有する第3の乗算器であって、前記第3の乗算器入力のうちの第1の乗算器入力が前記それぞれ第3の演算データ入力に結合されており、前記第3の乗算器入力のうちの第2の乗算器入力が前記それぞれ第3の演算重み入力に結合されている、前記第3の乗算器と、
第4の乗算器入力と第4の乗算器出力とを有する第4の乗算器であって、前記第4の乗算器入力のうちの第1の乗算器入力が前記それぞれ第4の演算データ入力に結合されており、前記第4の乗算器入力のうちの第2の乗算器入力が前記それぞれ第4の演算重み入力に結合されている、前記第4の乗算器と、
前記第1、前記第2、前記第3、及び前記第4の乗算器出力のそれぞれの第1の出力に結合された入力と、第1の加算器出力とを有する、第1の加算器と、
前記第1、前記第2、前記第3、及び前記第4の乗算器出力のそれぞれの第2の出力に結合された入力と、第2の加算器出力とを有する、第2の加算器と、
前記第1の加算器出力に結合されたビットシフタ入力と、前記シフト入力に結合されたビットシフタ制御入力と、ビットシフタ出力とを有するビットシフタと、
前記ビットシフタ出力に結合された入力と、前記第2の加算器出力に結合された入力と、第3の加算器出力とを有する、第3の加算器と、
前記累算器出力と、前記第3の加算器出力に結合された入力と、前記累算器入力に結合された入力とを有する、累算器と、
を含む、ニューラルネットワークプロセッサ。
【請求項】
請求項5に記載のニューラルネットワークプロセッサであって、前記コントローラが、前記第1の指示と前記第2の指示とに応答して、前記ビットシフタ制御入力の状態を設定するように構成されている、ニューラルネットワークプロセッサ。
【請求項】
請求項6に記載のニューラルネットワークプロセッサであって、前記コントローラが、
8ビットの入力精度を示す前記第1の指示に応答して、前記ビットシフタ制御入力を第1の状態に設定するように構成されており
4ビットの入力精度を示す前記第1の指示と4ビットの重み精度を示す前記第2の指示とに応答して、前記ビットシフタ制御入力を第2の状態に設定するように構成されており、
4ビットの入力精度を示す前記第1の指示と2ビットの重み精度を示す前記第2の指示とに応答して、前記ビットシフタ制御入力を第3の状態に設定するように構成されており、
前記ビットシフタが、前記ビットシフタ制御入力が前記第1の状態を有することに応答して4ビットの左シフト演算を実施するように構成されており、
前記ビットシフタが、前記ビットシフタ制御入力が前記第2の状態を有することに応答して2ビットの左シフト演算を実施するように構成されており、
前記ビットシフタが、前記ビットシフタ制御入力が前記第3の状態を有することに応答してシフト演算を実施しないように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項5に記載のニューラルネットワークプロセッサであって、前記第1、前記第2、前記第3、及び前記第4の乗算器の各々が、前記コントローラに結合された2値モード制御入力を有し、
前記第1、前記第2、前記第3、及び前記第4の乗算器の各々が、
前記2値モード制御入力が第1の状態を有することに応答して、
それぞれの前記第1、前記第2、前記第3、及び前記第4の乗算器入力の前記第1の乗算器入力の最上位ビット(MSB)と、前記第1、前記第2、前記第3、及び前記第4の乗算器入力の前記第2の乗算器入力との間でビット単位のXNOR演算を実施することに基づいて、それぞれの前記第1、前記第2、前記第3、及び前記第4の乗算器出力の前記第1の乗算器出力を生成し、
それぞれの前記第1、前記第2、前記第3、及び前記第4の乗算器入力の前記第1の乗算器入力の最下位ビット(LSB)と、それぞれの前記第1、前記第2、前記第3、及び前記第4の乗算器入力の前記第2の乗算器入力との間でビット単位のXNOR演算を実施することに基づいて、前記第1、前記第2、前記第3、及び前記第4の乗算器出力のそれぞれの前記第2の乗算器出力を生成し、
前記2値モード制御入力が第2の状態を有することに応答して、それぞれの前記第1、前記第2、前記第3、及び前記第4の乗算器入力の前記第1の乗算器入力と前記第2の入力との間で乗算演算を実施することに基づいて、それぞれの前記第1、前記第2、前記第3、及び前記第4の乗算器出力の前記第1及び前記第2の乗算器出力を生成する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項8に記載のニューラルネットワークプロセッサであって、前記累算器が、前記第1の加算器出力に結合された入力と、前記第2の加算器出力に結合された入力と、前記2値モード制御入力に結合された入力とを有し、前記累算器が、
前記2値モード制御入力が前記第1の状態を有することに応答して、
前記第1の加算器出力を前記累算器入力のMSBに加算することに基づいて前記累算器出力のMSBを設定し、
前記第2の加算器出力を前記累算器入力のLSBに加算することに基づいて前記累算器出力のLSBを設定し、
前記2値モード制御入力が前記第2の状態を有することに応答して、前記第3の加算器出力を前記累算器入力に加算することに基づいて前記累算器出力を設定する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項8に記載のニューラルネットワークプロセッサであって、前記コントローラが、前記第1又は前記第2の指示のうちの少なくとも1つが2値精度を示すことに応答して前記2値モード制御入力を前記第1の状態に設定するように構成されている、ニューラルネットワークプロセッサ。
【請求項】
請求項5に記載のニューラルネットワークプロセッサであって、前記コントローラが、8ビットの入力精度を示す前記第1の指示と2ビットの重み精度を示す前記第2の指示とに応答して、
前記データマルチプレクサに、
前記第1のMACデータ入力において8ビットの第1の入力データ要素を提供させ、
前記第2のMACデータ入力において8ビットの第2の入力データ要素を提供させ、
前記第3のMACデータ入力において8ビットの第3の入力データ要素を提供させ、
前記第4のMACデータ入力において8ビットの第4の入力データ要素を提供させ、
前記重みマルチプレクサに、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において2ビットの第1の重み要素の複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第2のMAC重み入力において2ビットの第2の重み要素の複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第3のMAC重み入力において2ビットの第3の重み要素の複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第4のMAC重み入力において2ビットの第4の重み要素の複製を提供させ、
4ビットの左シフト演算を実施するように前記演算ユニットの前記ビットシフタを制御する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項11に記載のニューラルネットワークプロセッサであって、前記2ビットの第1の重み、前記2ビットの第2の重み、前記2ビットの第3の重み、及び前記2ビットの第4の重みの各々が、それぞれの3値の第1の重み、3値の第2の重み、3値の第3の重み、及び3値の第4の重みを含むか、又は、それぞれの2値の第1の重み、2値の第2の重み、2値の第3の重み、又は2値の第4の重みから変換される、ニューラルネットワークプロセッサ。
【請求項】
請求項5に記載のニューラルネットワークプロセッサであって、前記コントローラが、4ビットの入力精度を示す前記第1の指示と4ビットの重み精度を示す前記第2の指示とに応答して、
前記データマルチプレクサに、
前記第1のMACデータ入力において4ビットの第1の入力データ要素の複製を提供させ、
前記第2のMACデータ入力において4ビットの第2の入力データ要素の複製を提供させ、
前記第3のMACデータ入力において4ビットの第3の入力データ要素の複製を提供させ、
前記第4のMACデータ入力において4ビットの第4の入力データ要素の複製を提供させ、
前記重みマルチプレクサに、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において4ビットの第1の重み要素を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第2のMAC重み入力において4ビットの第2の重み要素を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第3のMAC重み入力において4ビットの第3の重み要素を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第4のMAC重み入力において4ビットの第4の重み要素を提供させ、
2ビットの左シフト演算を実施するように前記演算ユニットの前記ビットシフタを制御する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項5に記載のニューラルネットワークプロセッサであって、前記コントローラが、4ビットの入力精度を示す前記第1の指示と2ビットの重み精度を示す前記第2の指示とに応答して、
前記データマルチプレクサに、
前記第1のMACデータ入力において2ビットの第1の入力データ要素と2ビットの第2の入力データ要素とを提供させ、
前記第2のMACデータ入力において2ビットの第3の入力データ要素と2ビットの第4の入力データ要素とを提供させ、
前記第3のMACデータ入力において2ビットの第5の入力データ要素と2ビットの第6の入力データ要素とを提供させ、
前記第4のMACデータ入力において2ビットの第7の入力データ要素と2ビットの第8の入力データ要素とを提供させ、
前記重みマルチプレクサに、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において2ビットの第1の重み要素と2ビットの第2の重み要素とを提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第2のMAC重み入力において2ビットの第3の重み要素と2ビットの第4の重み要素とを提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第3のMAC重み入力において2ビットの第5の重み要素と2ビットの第6の重み要素とを提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第4のMAC重み入力において2ビットの第7の重み要素と2ビットの第8の重み要素とを提供させ、
ビットシフト演算を実施しないように前記演算ユニットの前記ビットシフタを制御する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項5に記載のニューラルネットワークプロセッサであって、前記MACエンジンが、
前記複数の演算ユニットのうちの第1の演算ユニットの第1の累算器出力に結合された入力を有する第2のビットシフタと、
前記第2のビットシフタの前記出力に結合された入力と、前記複数の演算ユニットのうちの第2の演算ユニットの第2の累算器出力に結合された入力とを有する第4の加算器と、
を含み、
前記コントローラが、8ビットの入力精度を示す前記第1の指示と4ビットの重み精度を示す前記第2の指示とに応答して、
前記データマルチプレクサに、前記第1のMACデータ入力において8ビットの第1の入力データ要素を、前記第2のMACデータ入力において8ビットの第2の入力データ要素を、前記第1のMACデータ入力において8ビットの第3の入力データ要素を、及び、前記第2のMACデータ入力において8ビットの第4の入力データ要素を提供させ、
前記重みマルチプレクサに、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において4ビットの第1の重み要素のMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第2のグループの前記第1のMAC重み入力において前記4ビットの第1の重み要素のLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第2のMAC重み入力において4ビットの第2の重み要素のMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第2のMAC重み入力において前記4ビットの第2の重み要素のLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第3のMAC重み入力において4ビットの第3の重み要素のMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第3のMAC重み入力において前記4ビットの第3の重み要素のLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第4のMAC重み入力において4ビットの第4の重み要素のMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第4のMAC重み入力において前記4ビットの第4の重み要素のLSBの複製を提供させ、
4ビットの左シフト演算を実施するように前記演算ユニットの前記ビットシフタを制御し、
2ビットの左シフト演算を実施するように前記第2のビットシフタを制御し、
前記第4の加算器の出力のデータを前記中間出力データレジスタにおいて格納するように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項5に記載のニューラルネットワークプロセッサであって、前記MACエンジンが、
前記複数の演算ユニットのうちの第1の演算ユニットの第1の累算器出力に結合された入力を有する第2のビットシフタと、
前記第2のビットシフタの前記出力に結合された入力と、前記複数の演算ユニットのうちの第2の演算ユニットの第2の累算器出力に結合された入力とを有する第4の加算器と、
前記複数の演算ユニットのうちの第3の演算ユニットの第3の累算器出力に結合された入力を有する第3のビットシフタと、
前記第3のビットシフタの前記出力に結合された入力と、前記複数の演算ユニットのうちの第4の演算ユニットの第4の累算器出力に結合された入力とを有する第5の加算器と、
前記第4の加算器の前記出力に結合された入力を有する第4のビットシフタと、
前記第4のビットシフタの前記出力に結合された入力と前記第5の加算器の前記出力に結合された入力とを有する第6の加算器と、
を含み、
前記コントローラが、8ビットの入力精度を示す前記第1の指示と8ビットの重み精度を示す前記第2の指示とに応答して、
前記データマルチプレクサに、前記第1のMACデータ入力において8ビットの第1の入力データ要素を、前記第2のMACデータ入力において8ビットの第2の入力データ要素を、前記第3のMACデータ入力において8ビットの第3の入力データ要素を、及び、前記第4のMACデータ入力において8ビットの第4の入力データ要素を提供させ、
前記重みマルチプレクサに、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において8ビットの第1の重み要素の第1の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第2のグループの前記第1のMAC重み入力において前記8ビットの第1の重み要素の第2の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第3のグループの前記第1のMAC重み入力において前記8ビットの第1の重み要素の第1の2つのLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第4のグループの前記第1のMAC重み入力において前記8ビットの第1の重み要素の第2の2つのLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第2のMAC重み入力において8ビットの第2の重み要素の第1の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第2のMAC重み入力において前記8ビットの第2の重み要素の第2の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第3のグループの前記第2のMAC重み入力において前記8ビットの第2の重み要素の第1の2つのLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第4のグループの前記第2のMAC重み入力において前記8ビットの第2の重み要素の第2の2つのLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第3のMAC重み入力において8ビットの第3の重み要素の第1の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第3のMAC重み入力において前記8ビットの第3の重み要素の第2の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第3のグループの前記第3のMAC重み入力において前記8ビットの第3の重み要素の第1の2つのLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第4のグループの前記第3のMAC重み入力において前記8ビットの第3の重み要素の第2の2つのLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第4のMAC重み入力において8ビットの第4の重み要素の第1の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第4のMAC重み入力において前記8ビットの第4の重み要素の第2の2つのMSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第3のグループの前記第4のMAC重み入力において前記8ビットの第4の重み要素の第1の2つのLSBの複製を提供させ、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第4のグループの前記第4のMAC重み入力において前記8ビットの第4の重み要素の第2の2つのLSBの複製を提供させ、
4ビットの左シフト演算を実施するように前記演算ユニットの前記ビットシフタを制御し、
2ビットの左シフト演算を実施するように前記第2のビットシフタを制御し、
2ビットの左シフト演算を実施するように前記第3のビットシフタを制御し、
4ビットの左シフト演算を実施するように前記第4のビットシフタを制御し、
前記第6の加算器の出力のデータを前記中間出力データレジスタにおいて格納する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項4に記載のニューラルネットワークプロセッサであって、前記構成レジスタが、深さ方向畳み込み演算の第3の指示を格納するように構成されており、
前記重みマルチプレクサが、前記第3の指示に応答して、前記MACエンジンの前記MAC重み入力の少なくともいくつかにゼロ重み要素を提供するように構成されている、ニューラルネットワークプロセッサ。
【請求項】
請求項17に記載のニューラルネットワークプロセッサであって、前記重みマルチプレクサが、8ビットの入力精度を示す前記第1の指示と8ビットの重み精度を示す前記第2の指示とに応答して、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において8ビットの第1の重み要素の第1の2つのMSBの複製を提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第2のグループの前記第1のMAC重み入力において前記8ビットの第1の重み要素の第2の2つのMSBの複製を提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第3のグループの前記第1のMAC重み入力において前記8ビットの第1の重み要素の第1の2つのLSBの複製を提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第4のグループの前記第1のMAC重み入力において前記8ビットの第1の重み要素の第2の2つのLSBの複製を提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1、前記第2、前記第3、及び前記第4のグループの前記第2、前記第3、及び前記第4のMAC重み入力においてゼロを提供する、
ように構成される、
ニューラルネットワークプロセッサ。
【請求項】
請求項17に記載のニューラルネットワークプロセッサであって、前記重みマルチプレクサが、8ビットの入力精度を示す前記第1の指示と2ビットの重み精度を示す前記第2の指示とに応答して、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において2ビットの第1の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第2、前記第3、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第2のグループの前記第2のMAC重み入力において2ビットの第2の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第1、前記第3、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第3のグループの前記第3のMAC重み入力において2ビットの第3の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第3のグループの前記第1、前記第2、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第4のグループの前記第4のMAC重み入力において2ビットの第4の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第4のグループの前記第1、前記第2、及び前記第3のMAC重み入力においてゼロを提供する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項17に記載のニューラルネットワークプロセッサであって、前記重みマルチプレクサが、8ビットの入力精度を示す前記第1の指示と4ビットの重み精度を示す前記第2の指示とに応答して、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において4ビットの第1の重み要素のMSBの複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第1のグループの前記第2、前記第3、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第2のグループの前記第1のMAC重み入力において前記4ビットの第1の重み要素のLSBの複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第2、前記第3、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第3のグループの前記第2のMAC重み入力において4ビットの第2の重み要素のMSBの複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第3のグループの前記第1、前記第3、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第4のグループの前記第2のMAC重み入力において前記4ビットの第2の重み要素のLSBの複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第4のグループの前記第1、前記前記第3、及び前記第4のMAC重み入力においてゼロを提供する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項4に記載のニューラルネットワークプロセッサであって、前記構成レジスタが、平均プーリング演算の第4の指示を格納するように構成されており、
前記重みマルチプレクサが、前記第4の指示に応答して、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第1のグループの前記第1のMAC重み入力において論理1を表す2ビットの第1の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の\\第1のグループの前記第2、前記第3、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第2のグループの前記第2のMAC重み入力において論理1を表す2ビットの第2の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第2のグループの前記第1、前記第3、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第3のグループの前記第3のMAC重み入力において論理1を表す2ビットの第3の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第3のグループの前記第1、前記第2、及び前記第4のMAC重み入力においてゼロを提供し、
前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の第4のグループの前記第4のMAC重み入力において論理1を表す2ビットの第4の重み要素の複製を、並びに、前記第1、前記第2、前記第3、及び前記第4のMAC重み入力の前記第4のグループの前記第1、前記第2、及び前記第3のMAC重み入力においてゼロを提供する、
ように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
請求項1に記載のニューラルネットワークプロセッサであって、
前記中間出力データレジスタが、第1の中間出力データレジスタであり、
前記ニューラルネットワークプロセッサが、バイアス値を格納するように構成された第2の中間出力データレジスタをさらに含み、
前記コントローラが、前記命令が畳み込み演算の第1の命令を示すことに応答して、前記演算エンジンの出力と前記第2の中間出力データレジスタに格納された前記バイアス値とを合算することによって前記中間出力データ要素を生成し、前記合算の結果を前記第1の中間出力データレジスタにおいて格納するように構成されている、
ニューラルネットワークプロセッサ。
【請求項】
方法であって、
特定の入力精度の第1の指示と特定の重み精度の第2の指示とを受け取ることと、
前記第1の指示と前記第2の指示とに基づいてニューラルネットワークプロセッサの演算エンジンを構成することと、
命令バッファから命令を受け取ることと、
前記命令に応答して、
入力データ要素及び重み要素を、それぞれ、前記ニューラルネットワークプロセッサの入力データレジスタ及び重みレジスタから、前記第1の指示と前記第2の指示とに基づいて構成された前記演算エンジンにフェッチすることと、
中間出力データ要素を生成するため、前記第1の指示と前記第2の指示とに基づいて構成された前記演算エンジンを用いて、前記特定の入力精度の前記入力データ要素と前記特定の重み精度の前記重み要素との間で乗累算(MAC)演算を実施することと、
前記中間出力データ要素を前記ニューラルネットワークプロセッサの中間出力データレジスタにおいて格納することと、
を含む、方法。
【請求項】
請求項23に記載の方法であって、前記特定の入力精度が、少なくとも、2値入力精度と、符号付き4ビットの入力精度と、符号なし4ビットの入力精度と、符号付き8ビットの入力精度と、符号なし8ビットの入力精度とを含む、入力精度の或る範囲からのものであり、
前記特定の重み精度が、少なくとも、2値重み精度と、3値重み精度と、2ビットの重み精度と、4ビットの重み精度と、8ビットの重み精度とを含む、重み精度の或る範囲からのものである、
方法。
【請求項】
請求項23に記載の方法であって、前記乗累算(MAC)演算が、深さ方向畳み込み演算を含む、方法。
【発明の詳細な説明】
【技術分野】
【】
人工ニューラルネットワークは、生物学的神経回路網に基づくアーキテクチャを備える演算システムである。人工ニューラルネットワークは、或る演算タスクをどのように実施するかについて学習するために、訓練データを用いて訓練プロセスにおいて訓練され得る。人工ニューラルネットワークは、ニューラルネットワークプロセッサに実装され得、ニューラルネットワークプロセッサは、人工ニューラルネットワークの演算動作をサポートするためのメモリと演算リソースとを含み得る。アプリケーションによっては、ニューラルネットワークハードウェアアクセラレータ上で利用可能なメモリ及び演算リソースの量に制限を課すものがある。
【発明の概要】
【】
一例において、ニューラルネットワークプロセッサが提供される。ニューラルネットワークプロセッサは、命令バッファと、入力データレジスタと、重みレジスタと、中間出力データレジスタと、構成レジスタと、演算エンジンと、コントローラとを含む。構成レジスタは、特定の入力精度の第1の指示と特定の重み精度の第2の指示とを格納するように構成されている。演算エンジンは、入力精度の或る範囲の入力データ要素と重み精度の或る範囲の重み要素との間で乗累算(MAC)演算を実施するように構成可能である。コントローラは、特定の入力精度の第1の指示と特定の重み精度の第2の指示とを構成レジスタから受け取り、第1の指示と第2の指示とに基づいて演算エンジンを構成するように構成されている。コントローラはまた、命令バッファから命令を受け取り、命令に応答して、第1の数のビットを有する第1のパックドデータと第2の数のビットを有する第2のパックドデータとを、それぞれ、入力データレジスタ及び重みレジスタからフェッチし、特定の入力精度に基づいて第1の数のビットから第1の数の入力データ要素を抽出し、特定の重み精度に基づいて第2の数のビットから第2の数の重み要素を抽出し、入力データ要素と重み要素とを演算エンジンにフェッチし、第1の指示と第2の指示とに基づいて構成された演算エンジンを用いて特定の入力精度の入力データ要素と特定の重み精度の重み要素との間でMAC演算を実施して、中間出力データ要素を生成し、中間出力データ要素を中間出力データレジスタにおいて格納するように構成されている。
【】
一例において、或る方法が提供される。この方法は、特定の入力精度の第1の指示と特定の重み精度の第2の指示とを受け取ることと、第1の指示と第2の指示とに基づいてニューラルネットワークプロセッサの演算エンジンを構成することとを含む。この方法はさらに、命令バッファから命令を受け取ることと、命令に応答して、入力データ要素及び重み要素を、それぞれ、ニューラルネットワークプロセッサの入力データレジスタ及び重みレジスタから、第1の指示と第2の指示とに基づいて構成された演算エンジンにフェッチすることと含む。この方法はさらに、命令に応答して、第1の指示と第2の指示とに基づいて構成された演算エンジンを用いて、特定の入力精度の入力データ要素と特定の重み精度の重み要素との間で乗累算(MAC)演算を実施して中間出力データ要素を生成することと、中間出力データ要素をニューラルネットワークプロセッサの中間出力データレジスタにおいて格納することとを含む。
【図面の簡単な説明】
【】
【図】いくつかの例に従って、推論演算が実施され得るシステムを示す概略図である。
【】
【図】いくつかの例に従って、図1のシステムの電子デバイスによって実施されるデータ処理動作の例を示す概略図である。
【図】いくつかの例に従って、図1のシステムの電子デバイスによって実施されるデータ処理動作の例を示す概略図である。
【図】いくつかの例に従って、図1のシステムの電子デバイスによって実施されるデータ処理動作の例を示すチャートである。
【】
【図】いくつかの例に従って、ニューラルネットワークプロセッサを示す概略図である。
【】
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって実行可能な命令の例を示すチャートである。
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって実行可能な命令の例を示すチャートである。
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって実行可能な命令の例を示すチャートである。
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって実行可能な命令の例を示すチャートである。
【】
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって実行可能な命令のセットを示すチャートを含む。
【】
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって提供されるメモリ管理方式を示すチャートである。
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって提供されるメモリ管理方式を示すチャートである。
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサによって提供されるメモリ管理方式を示すチャートである。
【】
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサの循環バッファ回路を示す概略図である。
【】
【図】いくつかの例に従って、図10Aの循環バッファ回路の動作を示すチャートである。
【】
【図】いくつかの例に従って、図6A及び図6Bの命令シンタックスのフロー制御要素を示すチャートである。
【図】いくつかの例に従って、図6A及び図6Bの命令シンタックスのフロー制御要素を示すチャートである。
【】
【図】いくつかの例に従って、図5のニューラルネットワークプロセッサの演算エンジンの内部構成要素を示す概略図である。
【】
【図】いくつかの例に従って、図13の演算エンジンによって実施される畳み込み演算を示すチャートを含む。
【】
【図】いくつかの例に従って、異なる重み精度に対して図13の演算エンジンによって実施される後処理演算を示すチャートを含む。
【図】いくつかの例に従って、異なる重み精度に対して図13の演算エンジンによって実施される後処理演算を示すチャートを含む。
【図】いくつかの例に従って、異なる重み精度に対して図13の演算エンジンによって実施される後処理演算を示すチャートを含む。
【図】いくつかの例に従って、異なる重み精度に対して図13の演算エンジンによって実施される後処理演算を示すチャートを含む。
【】
【図】いくつかの例に従って、図13の演算エンジンによって実施される算術演算を示す概略図である。
【】
【図】いくつかの例に従って、図13の演算エンジンの乗算回路を示す概略図である。
【】
【図】いくつかの例に従って、図13の演算エンジンの演算ユニットを示す概略図である。
【】
【図】いくつかの例に従って、図18の演算ユニットの累算器を示す概略図である。
【】
【図】いくつかの例に従って、図18の演算ユニットを含む、図13の演算エンジンの内部構成要素を示す概略図である。
【図】いくつかの例に従って、図18の演算ユニットを含む、図13の演算エンジンの内部構成要素を示す概略図である。
【】
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【図】いくつかの例に従って、異なる入力精度及び重み精度に対する、図13の演算エンジンの異なる構成を示す概略図である。
【】
【図】いくつかの例に従って、図13の演算エンジンの内部マルチプレクサを示す概略図である。
【図】いくつかの例に従って、図13の演算エンジンの内部マルチプレクサを示す概略図である。
【図】いくつかの例に従って、図13の演算エンジンの内部マルチプレクサを示す概略図である。
【】
【図】いくつかの例に従って、図13の後処理エンジンの内部構成要素を示す概略図である。
【】
【図】いくつかの例に従って、図13の後処理エンジンの内部構成要素を示す概略図である。
【】
【図】いくつかの例に従って、図13の後処理エンジンの構成を示す概略図である。
【図】いくつかの例に従って、図13の後処理エンジンの構成を示す概略図である。
【図】いくつかの例に従って、図13の後処理エンジンの構成を示す概略図である。
【】
【図】いくつかの例に従って、図13の最大プーリングエンジンの内部構成要素及びそれらの動作を示す概略図である。
【図】いくつかの例に従って、図13の最大プーリングエンジンの内部構成要素及びそれらの動作を示す概略図である。
【図】いくつかの例に従って、図13の最大プーリングエンジンの内部構成要素及びそれらの動作を示すチャートである。
【】
【図】いくつかの例に従って、ニューラルネットワークプロセッサの動作を示すフローチャートである。
【図】いくつかの例に従って、ニューラルネットワークプロセッサの動作を示すフローチャートである。
【図】いくつかの例に従って、ニューラルネットワークプロセッサの動作を示すフローチャートである。
【図】いくつかの例に従って、ニューラルネットワークプロセッサの動作を示すフローチャートである。
【】
図面において、同じ(又は類似の)特徴を示すために同じ参照番号が用いられている。
【発明を実施するための形態】
【】
図1はシステム100を示す概略図である。システム100は、電子デバイス102a、102b、及び102cを含む複数の電子デバイス102と、クラウドネットワーク103とを含み得る。各電子デバイス102は、センサ104とデータプロセッサ106とを含み得る。例えば、電子デバイス102aは、センサ104aとデータプロセッサ106aとを含み、電子デバイス102bは、センサ104bとデータプロセッサ106bとを含み、電子デバイス102cは、センサ104cとデータプロセッサ106cとを含む。センサ104は、オーディオ/音響センサ、動きセンサ、画像センサなどの種々のタイプのものであり得る。いくつかの例において、各電子デバイス102は、異なるタイプの複数のセンサ(例えば、音響センサ及び動きセンサ)、又は同じタイプのセンサの複数のインスタンス(例えば、複数のマイクロフォン)を含み得る。各センサシステムは、刺激108(例えば、音響信号、光信号、動きなど)を受け取り、受け取った刺激に基づいて決定110を生成することができる。決定は、例えば、対象の事象が検出されたかどうかを示すことができる。例えば、電子デバイス102aは、刺激108aに基づいて決定110aを生成することができ、電子デバイス102bは、刺激108bに基づいて決定110bを生成することができ、電子デバイス102cは、刺激108cに基づいて決定110cを生成することができる。いくつかの例において、各電子デバイス102は、モノのインターネット(IoT)のエンドノードであり得、ネットワーク103のエッジデバイスであり得る。各電子デバイス102は、それぞれの決定110をクラウドネットワーク103に送信することができ、クラウドネットワーク103は、決定に基づいて動作を実施すること(例えば、異常事象に関するアラートを送信すること、法執行機関に連絡することなど)ができる。
【】
特定の電子デバイス102のデータプロセッサ106は、特定の電子デバイス上のセンサ104によって収集されたデータに対してデータ処理動作を実施して、決定110を生成することができる。例えば、センサ104がオーディオ/音響センサを含む例において、データプロセッサ106は、キーワードスポッティング、ボイスアクティビティ検出、及び特定の音響シグネチャ(例えば、ガラスの破損、射撃)の検出などのデータ処理動作を実施することができる。また、センサ104が動きセンサを含む例において、データプロセッサ106は、振動検出、アクティビティ認識、及び異常検出(例えば、家に誰もいないときに又は夜間に窓/ドアが叩かれたかどうか又は開けられたかどうか)などのデータ処理動作を実施することができる。また、センサ104が画像センサを含む例において、データプロセッサ106は、顔認識、ジェスチャ認識、及び視覚的ウェイクワード検出(例えば、人が環境内に存在するかどうかを判定すること)などのデータ処理動作を実施することができる。データプロセッサ106はまた、例えば、音声中のキーワードの検出、特定の音響シグネチャ、特定のアクティビティ、特定のジェスチャなどの検出を含むデータ処理動作の結果に基づいて、決定110を生成して出力することができる。電子デバイス102が複数のセンサを含む場合、データプロセッサ106は、異なるタイプのセンサデータに関するセンサフュージョン動作を実施して、決定110を生成することができる。
【】
データプロセッサ106は、センサ104によって生成されたセンサ信号を処理するための種々の回路要素を含み得る。例えば、データプロセッサ106は、センサ信号をサンプリングするためのサンプルホールド(S/H)回路を含み得る。データプロセッサ106は、サンプルをデジタル信号に量子化するためのアナログデジタル変換器(ADC)を含み得る。データプロセッサ106はまた、サンプルを処理するための人工ニューラルネットワークを実装するためのニューラルネットワークプロセッサを含み得る。人工ニューラルネットワーク(以下、「ニューラルネットワーク」)は、複数の処理ノードを含み得る。ニューラルネットワークは、センサデータに対して推論演算又は分類演算を実施して、前述の決定を生成することができる。推論演算は、センサデータを、ニューラルネットワーク訓練演算から取得される重み要素のセットと組み合わせることによって、決定を生成するために実施され得る。ニューラルネットワークの例としては、ディープニューラルネットワーク(DNN)、畳み込みニューラルネットワーク(CNN)などを挙げることができる。
【】
ニューラルネットワークの処理ノードは、例えば、入力層、複数の中間層(例えば、隠れ層)、及び出力層を含む、種々の層に分割され得る。入力層及び中間層は各々、CNNを形成する畳み込み層であり得、一方、出力層は全結合層であり得、入力層、中間層、及び出力層は共にDNNを形成する。入力層の各処理ノードは、入力セットの要素を受け取り、出力への要素の影響度を示すために、重み要素でその要素をスケーリングする。入力セットとしては、例えば、音響データ、動きデータ、画像データ、異なるタイプのデータの組み合わせ、又はそうしたデータから抽出された入力特徴のセットを挙げることができる。また、中間層内の処理ノードは、入力層の各処理ノードから受け取ったスケーリングされた要素を組み合わせて、中間出力のセットを演算することができる。例えば、中間層内の各処理ノードは、要素-重み積の和を演算し、次いで、活性化関数を和に適用することによって中間出力を生成し得る。1つの中間層の各処理ノードからの中間出力は、次の中間層の中間出力を決定するために、アクティブ化された投票(又は非投票)と見なされ、投票の影響を示す重みに関連付けることができる。中間出力は、特定の直前層の出力特徴を表すことができる。出力層は、最終中間層からのスケーリングされた中間出力の和を生成し得る。いくつかの例において、出力層は、スケーリングされた中間出力の和が閾値を超えるかどうかに基づいて2値出力(例えば、「はい」又は「いいえ」)を生成することができ、これは、データ処理動作からの決定(例えば、音声中のキーワードの検出、特定の音響シグネチャ、特定のアクティビティ、特定のジェスチャの検出)を示すことができる。
【】
データプロセッサ106のニューラルネットワークプロセッサは、人工ニューラルネットワークモデルに基づいて演算を実施するようにプログラムされ得る。ニューラルネットワークプロセッサは、モデルに関連付けられた演算動作(例えば、加算、乗算、活性化関数の処理など)を含む命令シーケンスに基づいてプログラムされ得る。命令はまた、データを取得及び格納するために内部及び外部メモリデバイスにアクセスすることができる。コンパイラは、ニューラルネットワークモデル、入力データ、並びに利用可能なメモリ及び演算リソースに関する情報を受け取り、ニューラルネットワーク処理を実施するために、例えば、そういったデータについて内部及び外部メモリデバイスにいつアクセスするか、ニューラルネットワークプロセッサのどの構成要素がニューラルネットワークモデルに基づいてデータに対して演算を実施するか、などを示す命令のセットを生成することができる。図1の例において、各電子デバイス102のデータプロセッサ106は、例えば、重み要素のセット、ニューラルネットワークモデルの各層を表すコンパイルされた命令などを含むデータ120(例えば、120a、120b、及び120c)をクラウドネットワーク103から受け取ることができる。いくつかの例において、各電子デバイス102のニューラルネットワークプロセッサは、初期重み要素を調整するために、訓練演算を実施することができる。いくつかの例において、訓練演算はまた、クラウドネットワーク103において実施され得、各電子デバイス102は、更新された重み要素をクラウドネットワーク103から受け取り、更新された重みを用いて推論/分類演算を実施することができる。
【】
図2、図3、及び図4は、音響信号を処理する際に電子デバイス102によって実施されるデータ処理動作の例を示す概略図である。図2は、音声中のワードを識別するための例示のデータ処理動作200を図示する。例示のデータ処理動作は、特徴抽出動作202と、DNN層処理演算204と、後処理演算206とを含む。特徴抽出動作202の一部として、データプロセッサ106は、センサ104から音響信号212のサンプルを受け取り、サンプルから特徴214を抽出することができる。音響信号は、時間によって異なる大きさ/電力レベルを有する音声信号を表すことができる。また、特徴214は、音響信号の識別特性を含み得、音響信号の識別特性に基づいて、後続の処理演算(例えば、DNN層処理演算204及び後処理演算206)は、音声中のワードを識別することができる。図2の例において、特徴214は、信号電力の時間-周波数分布を含み得る。いくつかの例において、特徴抽出動作202は畳み込み演算を含み得、畳み込み演算は、データプロセッサ106のCNN、汎用プロセッサ(例えば、マイクロコントローラ)、メモリ内演算(CIM)回路などを実装するニューラルネットワークプロセッサによって実施され得る。
【】
また、DNN層処理演算204の一部として、データプロセッサ106は、多層DNN及び重み要素216のセットを用いて特徴214を処理し、出力218のセットを演算することができる。後処理演算206は、出力218を後処理及び量子化して、推論出力220を生成することができる。後処理演算としては、例えば、出力218を推論出力のセットにマッピングするための活性化関数処理、並びに訓練中の収束を容易にするためのバッチ正規化(バッチノーム、すなわちBNorm)及び残差層処理などの他の後処理演算を挙げることができる。推論出力220は、候補ワードのセットに関する確率のセットを含み得る。図2の例において、推論出力220は、候補ワード「はい」を確率0.91で、「いいえ」を確率0.02で、他のワードを確率0.01でマッピングすることができる。いくつかの例において、候補ワード「はい」が候補ワードの中で最も高い確率にマッピングされることに基づいて、音声信号212がワード「はい」を含むという決定を後処理演算206の一部として行うこともできる。いくつかの例において、図2に示されているように、ニューラルネットワーク層の出力を表し得る後処理演算206の出力は、別のニューラルネットワーク層への入力としてDNN層処理演算204にフィードバックされ得る。
【】
図3は、図2のDNN層処理演算204の一部であり得る例示の処理動作300の例を示す。図3において、処理動作300は、出力データ要素304のセットを生成するために入力データ要素302のセットに対してニューラルネットワーク層によって実施される畳み込み演算であり得る。入力データ要素302及び出力データ要素304は各々、第1の次元(入力高さ)、第2の次元(入力幅)、及び第3の次元(入力チャネル)を含む多次元配列の形態であり得る。入力データ要素302の配列は、高さFh、幅Fwを有し、Nin個の入力チャネルを有することができる。例えば、入力データ要素302は特徴214を表すことができ、第1の次元は時間を表すことができ、第2の次元は周波数を表すことができ、第3の次元はデータチャネル(又はチャネル)を表すことができる。チャネルは、データソースを表すことができる。例えば、入力データ要素302が、複数のマイクロフォンによって生成されたオーディオデータである場合、特定のマイクロフォンから生成されたデータは、特定のデータチャネルに関連付けられ得る。別の例として、入力データ要素302が、異なる色チャネル(例えば、赤、緑、及び青)の画像センサによって生成された画像データである場合、特定の色チャネルの生成されたデータは、特定のデータチャネルに関連付けられ得る。
【】
畳み込み演算を実施して1つの出力データ要素(例えば、出力データ要素304a)を演算するために、データプロセッサ106は、重み要素306のセットと入力データ要素302のサブセットとの間でドット積を演算することができる。図3の例において、重み要素306はまた、重み高さKh、重み幅Kw、及びNin個の入力チャネルを有する多次元配列であり得る。重み要素306のセットは、入力データ要素302の異なるサブセットと重複するように入力データ要素302のセットに対してストライドDだけ移動され得る。異なるドット積(及び異なる出力データ要素304)は、下記のように、重み要素306のセットと入力データ要素302の異なる重複するサブセットとの間で異なるストライドで演算され得る。
【数】
【】
式1において、rは幅次元に沿った添え字を表し、sは高さ次元に沿った添え字を表し、cは入力チャネル次元に沿った添え字を表す。また、XceD+r,fD+sは、入力チャネルcの入力データ要素302を表し、幅次元に沿った添え字eD+r及び高さ次元に沿った添え字fD+sを有し、e及びfは、ストライドDの倍数であり、Fcr,sは、幅次元に沿った添え字r及び高さ次元に沿った添え字sを有する重みデータ要素306を表し、Ye,fは、幅次元に沿った添え字e及び高さ次元に沿った添え字fを有する出力データ要素304を表す。いくつかの例において、データプロセッサ106は、入力データ要素302と重み要素306の複数のセットとの間で畳み込み演算を実施して、Nout個の出力チャネルを有する出力データ要素304を生成することができ、入力データ要素と重み要素306の1つのセットとの間の畳み込みは、特定の出力チャネルの出力データ要素304を生成することができる。
【】
図4は、ループ命令400のセットの一例を示す。いくつかの例において、ループ命令400は、図3の処理動作300の一部、又は1つのニューラルネットワーク層によって実施される他の処理動作を表すことができる。例えば、ループ命令のセット400は、特定のストライドDでの畳み込み演算の一部を表すことができる。データプロセッサ106のニューラルネットワークプロセッサは、ループ命令のセットを実行して、入力データ要素302及び重み要素306の複数のセットからNout個の出力チャネルを有する出力データ要素304の多次元配列を演算することができる。ループ命令400は、ネストループ構造を表し、ネストループ構造は、出力チャネル(0~Nout-1の間のn)の次元及び入力チャネル(0~Nin-1の間のm)の次元における添え字の範囲をスイープする最も外側のループ402及び404と、入力高さ(0~Fh-1の間のi)の次元及び入力幅(0~Fw-1の間のj)の次元における添え字の範囲をスイープする中間ループ406及び408と、重みフィルタ/カーネル高さ(0~Kh-1の間のh)の次元及び重み幅(0~Kw-1の間のw)の次元における添え字の範囲をスイープする最も内側のループ410及び412とを含み、入力高さ、入力幅、及び入力チャネルの添え字の範囲に関連付けられた入力データ要素と、重み高さ、重み幅、入力チャネル、及び出力チャネルの添え字の範囲に関連付けられた重み要素との間のドット積として出力データ要素Yを演算することができる。
【】
ループ命令のセット400のパラメータは、ループ命令のセットによって表されるニューラルネットワーク層の特定のタイプ/トポロジーに基づいて構成され得る。例えば、各出力データ要素が、同じ入力チャネルの入力データ要素と重み要素とのドット積から生成される深さ方向畳み込み層を実装するために、最も外側のループ402及び404を1つのループにマージされ得るか、又は変数mが定数に設定され得る。また、平均プーリング層を実装するために、ニューラルネットワーク層に提供される重み要素の全てが1/(KW×Kh)に設定され得る。また、各出力データ要素が、入力データ要素と入力チャネルの数Ninに等しい深さを有する1×1カーネルとのドット積から生成される点単位畳み込み層を実装するために、Kw及びKh(重み要素配列の幅及び高さ)を各々1に設定することができる。また、全結合層を実装するために、Kw、Kh、Fw、及びFhを各々1に設定することができる。
【】
再び図1を参照すると、推論を実施するためにセンサデータをクラウドネットワーク103に送信するのではなく、電子デバイス102にセンサデータに対する推論演算をローカルで実施させることは、種々の利点をもたらすことができる。例えば、センサデータをローカルで保持及び処理することにより、電子デバイス102からクラウドネットワーク103へのセンサデータの送信が、低減され得るか又は完全に排除され得る。そのような構成は、特に、電子デバイス102が大量のセンサデータを連続的に生成する(例えば、常時オンのシステムの一部である)場合、センサデータの送信に伴う電力及び帯域幅を低減することができる。また、センサデータ(例えば、画像、音声データなど)の送信に関連付けられたセキュリティ及びプライバシーのリスクも低減することができる。また、推論決定を提供する際の速度及び信頼性を改善することもでき、又は少なくとも、センサデータの送信におけるネットワークボトルネック、クラウドネットワーク103が利用不可能であるなどの、電子デバイス102の外部の要因による影響を少なくすることができる。
【】
センサデータに対する推論演算を電子デバイス102にローカルで実施させることは有利であるが、種々の課題が存在する。具体的には、推論演算は、ニューラルネットワークプロセッサなどの専用ハードウェアによって実施するときでも、電力集約的であり得、大量のメモリ及び演算リソースを用いることがある。一方、電子デバイス102は、低電力デバイスであり得、特にそれらがIoTデバイスである場合、小型フォームファクタを有することがある。したがって、電子デバイス102上のニューラルネットワークプロセッサは、推論演算を実施するために利用可能な非常に限られたメモリ及び演算リソースを有することがある。また、異なるアプリケーションは、推論演算に関して異なり相矛盾する要件を有することがある。例えば、いくつかのアプリケーションは、推論演算に高い精度を必要とすることがあるが、いくつかの他のアプリケーションは、そのような高い精度を必要としないことがある。また、ニューラルネットワークプロセッサは、異なるアプリケーションをサポートするために、広範囲のニューラルネットワークトポロジー、層タイプ、カーネル/フィルタサイズ、並びにフィルタ、入力データ、及び出力データの次元をサポートすることがある。これらは全て、広範囲のアプリケーションをサポートするために、限られたメモリ及び演算リソースを用いて種々の推論演算を実施することができるニューラルネットワークプロセッサを有するための課題を提示する。
【】
図5は、で説明した課題の少なくともいくつかに対処することができるニューラルネットワークプロセッサ502を有する電子デバイス102の内部構成要素の例を示す概略図である。図5を参照すると、電子デバイス102は、メモリ512と、直接メモリアクセス(DMA)コントローラ516と、プロセッサ514と、センサインターフェース回路517とに相互接続518を介して結合されるニューラルネットワークプロセッサ502とを含み得る。センサインターフェース回路517は、センサ104とインターフェースするインターフェース回路要素(例えば、アナログデジタル変換器(ADC))を含み得る。いくつかの例において、ニューラルネットワークプロセッサ502と、メモリ512と、DMAコントローラ516と、相互接続518と、センサ104とは、システムオンチップ(SoC)などの集積回路(IC)の一部であり得る。いくつかの例において、ニューラルネットワークプロセッサ502は、スタンドアロンの特定用途向け集積回路(ASIC)であり得る。相互接続518は、SoCバス相互接続、又は他のタイプの相互接続であり得る。また、プロセッサ514は、汎用プロセッサであり得、種々のタスクを実施するための命令を実行可能な、例えば、中央処理装置(CPU)、一つ又は複数のプロセッサコアなどを含む。
【】
メモリ512は、ニューラルネットワークプロセッサ502とプロセッサ514とによって共有される。メモリ512は、推論演算を実施するためにニューラルネットワークプロセッサ502に提供される各ニューラルネットワーク層の命令、入力データ、及び重み、並びに、推論演算からニューラルネットワークプロセッサ502によって生成された出力データを格納し得る。入力データとしては、例えば、センサ104によって提供されたセンサデータ、センサデータから抽出された特徴データ、又は前のニューラルネットワーク層によって生成された中間出力データを挙げることができる。メモリ512はまた、プロセッサ514のためのプログラム命令及びデータなどの他のデータを格納することができる。メモリ512は、フラッシュメモリデバイス、スタティックランダムアクセスメモリ(SRAM)、抵抗性ランダムアクセスメモリ(ReRAM)などの任意の適切なオンチップメモリを含み得る。
【】
ニューラルネットワークプロセッサ502とプロセッサ514のために別々に専用メモリデバイスを提供するのではなく、プロセッサ514とニューラルネットワークプロセッサ502とにメモリ512を共有させることにより、電子デバイス102の総メモリサイズを低減することができ、これにより、電子デバイス102の電力及び占有面積が低減され得る。下記でより詳細に説明するように、メモリリソース使用量及びメモリデータ移動を低減するために、ニューラルネットワークプロセッサ502は、出力データが出力データの循環アドレス指定を用いて入力データを上書きするインプレース演算、及び常時オンのアプリケーションをサポートするための入力データの循環アドレス指定など、種々のメモリ管理方式を実装することができ、これにより、ニューラルネットワークプロセッサ502が限られたメモリリソースで動作することを可能にすることができる。また、ニューラルネットワークプロセッサ502は、メモリ512からのデータにアクセスするための可変レイテンシを処理するように構成されており、それにより、ニューラルネットワークプロセッサ502への最小限の性能影響でプロセッサ514の同時動作を可能にする。
【】
プロセッサ514は、ニューラルネットワークプロセッサ502を用いるソフトウェアプログラムを実行して推論演算を実施し、次いで推論演算の結果に基づいて追加演算を実施することができる。例えば、プロセッサ514は、ホームセキュリティシステムのためのソフトウェアプログラムを実行することができる。ソフトウェアプログラムは、ニューラルネットワークプロセッサ502への命令(例えば、アプリケーションプログラミングインターフェース(API))を含み得る。1つのAPIは、1つのニューラルネットワーク層における演算に関連付けられ得、ソフトウェアプログラムは、多重極ニューラルネットワーク層のための複数のAPIを含み得る。APIを呼び出す/実行すると、プロセッサ514は、ニューラルネットワークプロセッサ502によって実行可能なニューラルネットワーク層命令、並びに重み、パラメータ、及び入力データのメモリアドレスをニューラルネットワークプロセッサ502に提供することができ、次いで、ニューラルネットワークプロセッサは、こうしたデータをメモリ512のメモリアドレスにフェッチすることができる。プロセッサ514はまた、ニューラルネットワークプロセッサ502に制御信号を送信して、そのニューラルネットワーク層の演算を開始することができる。ニューラルネットワーク層演算が完了し、出力データがメモリ512に格納されると、ニューラルネットワークプロセッサ502は、出力データのメモリアドレス及び制御信号をプロセッサ514に返送して完了をシグナリングすることができ、プロセッサ514は、次のニューラルネットワーク層のための別のAPIを呼び出すことができる。プロセッサ514はまた、ソフトウェアプログラムを実行して、とりわけ、推論決定をクラウドネットワーク103(又は他のデバイス/システム)に送信すること、グラフィカルユーザインターフェースを提供することなどの他の機能を実施することができる。プロセッサ514は、ニューラルネットワークプロセッサ502と同時にそうした他の機能を実施することができる。
【】
DMAコントローラ516は、メモリ512とニューラルネットワークプロセッサ502との間で或るデータを転送するためにDMA動作を実施するように構成することができる。例えば、APIを呼び出すと、プロセッサ514は、格納された命令、重み、及びパラメータについてのメモリアドレスをニューラルネットワークプロセッサ502に(例えば、メモリ記述子の形態で)提供することができる。次いで、ニューラルネットワークプロセッサ502は、プロセッサ514によって提供されたメモリアドレスに基づいて、格納された命令、重み、及びパラメータを取得することができる。後述するように、いくつかの例において、ニューラルネットワークプロセッサ502は、DMAコントローラ516を用いて入力データをバルクでフェッチする代わりに、必要に応じて入力データをメモリ512から直接フェッチすることができる。また、ニューラルネットワークプロセッサ502は、DMAコントローラ516を用いて出力データをバルクでフェッチする代わりに、出力データが生成されてチャンクサイズに達すると、新たに生成された出力データを比較的小さなチャンク(例えば、32ビットのチャンクサイズ)でメモリ512に直接格納することができる。そのような構成により、ニューラルネットワークプロセッサ502上に入力/出力データバッファを有することを回避する(又は入力/出力データバッファのサイズを少なくとも低減する)ことができ、ニューラルネットワークプロセッサ502の電力及び占有面積を低減することができる。
【】
ニューラルネットワークプロセッサ502は、ニューラルネットワークハードウェアアクセラレータであり得、推論演算をサポートするためのニューラルネットワーク層演算のための演算リソース及びメモリリソースを含むハードウェアリソースを提供することができる。ニューラルネットワークプロセッサ502は、命令バッファ520と、演算コントローラ522と、構成可能な演算精度を有する演算エンジン524とを含み得る。ニューラルネットワークプロセッサ502はまた、重み及びパラメータバッファ526と、レジスタ528と、ロード/ストアコントローラ530と、アドレス生成器532とを含む。ロード/ストアコントローラ530は、メモリインターフェース534をさらに含む。ニューラルネットワークプロセッサ502の各構成要素は、後述するように、ニューラルネットワークプロセッサ502の種々の動作をサポートするために、組み合わせ論理回路(例えば、論理ゲート)、順序論理回路(例えば、ラッチ、フリップフロップなど)、及び/又はメモリデバイス(例えば、SRAM)を含み得る。
【】
命令バッファ520は、プロセッサ514からの制御信号に応答して、ニューラルネットワーク層のための演算命令をメモリ512からフェッチし、格納することができる。例えば、ニューラルネットワーク層演算を開始するためにAPIが呼び出されることに応答して、プロセッサ514は、ニューラルネットワーク層演算の命令(例えば、マイクロコード)をメモリ512から転送するか、又は命令を他のソース(例えば、別のプロセッサ)から受け取り、命令を命令バッファ520に格納するように命令バッファ520を制御することができる。
【】
演算コントローラ522は、命令バッファ520に格納された各演算命令を復号し、命令に基づいて動作を実施するように演算エンジン524と、ロード/ストアコントローラ530と、アドレス生成器532とを制御することができる。例えば、畳み込み演算を実施する命令に応答して、演算コントローラ522は、畳み込み演算のためのデータ及び重みがフェッチされ、それぞれ、データレジスタ528a及び重み/パラメータレジスタ528bに格納された後に、畳み込み演算のための演算を実施するように演算エンジン524を制御することができる。演算コントローラ522は、次に実行される命令を追跡/指示するプログラムカウンタ(PC)を維持することができる。いくつかの例において、演算命令は、演算コントローラ522によって抽出され得る、ループ要素、マクロ要素などのフロー制御要素を含み得る。次いで、演算コントローラ522は、フロー制御要素に応答してPC値を変更し、フロー制御要素に基づいて命令の実行のフロー/シーケンスを変更することができる。そのような構成は、ニューラルネットワーク層命令が、図4に示されているような、畳み込み層演算を反映するループ命令を含むことを可能にして、よりコンパクトにされ得、これにより、マイクロコードサイズを低減し、ニューラルネットワーク層トポロジーの命令への変換を容易にすることができる。
【】
演算エンジン524は、CNNネットワーク層演算をサポートするための畳み込み演算を実施するための回路要素と、ニューラルネットワーク出力データに対して後処理演算(例えば、BNorm及び残差層処理)を実施するための回路要素とを含み得る。下記で説明するように、演算エンジン524は、プロセッサ514によって提供され、構成レジスタ528cに格納されたパラメータに基づいて、ビット精度の或る範囲(例えば、2値(binary)精度、3値(ternary)精度、4ビット精度、8ビット精度など)にわたって重み及び入力データに対してMAC(例えば、畳み込み)及び後処理演算を実施するように構成可能である。パラメータは、特定のニューラルネットワーク層に提供され得、異なるニューラルネットワーク層の実行の間に更新され得る。これは、プロセッサ514が、例えば、推論演算を実施する必要性、推論結果を用いるアプリケーション、電子デバイス102の利用可能な電力などに基づいて、演算エンジン524における畳み込み及び後処理演算のビット精度を動的に構成することを可能にする。いくつかの例において、演算エンジン524は、異なるニューラルネットワーク層のための重み及び入力データに対する異なるビット精度を可能にし、これは、広範な精度と演算とのトレードオフを可能にすることができる。これは、ニューラルネットワークプロセッサ502がドメイン固有又はアプリケーション固有の命令セットプロセッサとして動作することも可能にし、ニューラルネットワークプロセッサ502は、或るアプリケーション(例えば、ディープニューラルネットワークに基づく機械学習)を効率的に実施するように構成/カスタマイズされ得る。
【】
重み及びパラメータバッファ526は、後処理演算をサポートするために、複数のニューラルネットワーク層のための重み、及びニューラルネットワークプロセッサ502の異なる内部構成要素のためのパラメータを格納することができる。ニューラルネットワークプロセッサ502は、例えば、DMAコントローラ516を介して、重み及びパラメータをメモリ512からフェッチすることができる。いくつかの例において、重み及びパラメータバッファ526は、SRAMデバイスを含み得る。特定のニューラルネットワーク層に関して静的である重み及びパラメータを格納するための重み及びパラメータバッファ526を有することにより、ニューラルネットワーク層に対する演算中にニューラルネットワークプロセッサ502とメモリ512との間におけるそのような静的なデータの移動を低減することができる。また、重み及びパラメータデータのサイズをニューラルネットワーク層演算のための入力及び出力データのサイズと比較して相対的に小さくすることができ、これにより、重み及びパラメータバッファ526が小さな占有面積を有することを可能にする。
【】
また、レジスタ528は、データレジスタ528aと、重み及びパラメータレジスタ528bと、アドレスレジスタ528cと、構成レジスタ528dとを含み得る。データレジスタ528aは、ニューラルネットワーク層演算のための入力データのサブセット及び出力データのサブセットを格納することができ、重み及びパラメータレジスタ528bは、ニューラルネットワーク層演算のための重みのサブセットと、後処理演算のためのパラメータとを格納することができる。アドレスレジスタ528cは、重み及び入力/出力データについてメモリ512においてロード/ストアコントローラ530によってアクセスされるメモリアドレスを格納することができる。アドレスレジスタ528cは、重み及びパラメータをフェッチするためにロード/ストアコントローラ530によってアクセスされる重み及びパラメータバッファ526内にアドレスを格納することができる。構成レジスタ528dは、ニューラルネットワークプロセッサ502のための種々の構成要素に共通である構成パラメータを格納することができる。例えば、構成レジスタ528dは、演算エンジン524における畳み込み演算及び後処理演算のための入力データ要素及び重み要素のビット精度、ニューラルネットワークプロセッサ502の特定のメモリ管理方式(例えば、インプレース演算、入力データの循環アドレス指定など)などを設定するためのパラメータを格納することができる。上述したように、こうしたパラメータのいくつかが、ニューラルネットワークの実行の間に、又は2つのニューラルネットワーク層の実行の間に、プロセッサ514によって提供/更新され得る。
【】
データレジスタ528a及び重みレジスタ528bの読出し/書込み動作は、演算コントローラ522によって実行される命令に基づいてロード/ストアコントローラ530によって実施され得る。例えば、データレジスタ528aへの入力データのフェッチを示す命令に応答して、ロード/ストアコントローラ530は、メモリインターフェース534を介して直接(例えば、DMAコントローラ516を介さずに)入力データをメモリ512からフェッチし、フェッチされたデータをデータレジスタ528aに格納することができる。また、出力データをメモリ512に戻して格納することを示す命令に応答して、ロード/ストアコントローラ530は、出力データをデータレジスタ528aからフェッチし、メモリインターフェース534を介して直接(例えば、DMAコントローラ516を介さずに)出力データをメモリ512に格納することができる。で説明したように、そのような構成により、ニューラルネットワークプロセッサ502上に入力/出力データバッファを有することを回避する(又は入力/出力データバッファのサイズを低減する)ことができ、ニューラルネットワークプロセッサ502の電力及び占有面積を低減することができる。
【】
また、後述するように、ロード/ストアコントローラ530は、アドレスレジスタ528cに格納されたメモリアドレスを設定することにより、出力データが入力データを上書きするインプレース演算、及び常時オンのアプリケーションをサポートするための入力データの循環アドレス指定など、種々のメモリ管理方式を実装することができる。そのような構成は、メモリ512内の入力/出力データの占有面積を低減し、メモリ512内の入力/出力データの移動を低減することができ、ニューラルネットワークプロセッサ502とプロセッサ514との間におけるメモリ512への共有アクセスを容易にする。一方、ロード/ストアコントローラ530はまた、演算コントローラ522によって実行される命令に基づいて、重み及びパラメータを重み及びパラメータバッファ526から重みレジスタ528bにフェッチすることができる。上述したように、プロセッサ514は、DMAコントローラ516を用いて別個のメモリインターフェース(図5には図示せず)を介して重み及びパラメータをメモリ512から又は別のプロセッサからフェッチし、重み及びパラメータを重み及びパラメータバッファ526に格納するように、ニューラルネットワークプロセッサ502を制御することができる。
【】
図6A、図6B、及び図6Cは、ニューラルネットワークプロセッサ502によって実行可能な命令の例を示すチャートである。図6A及び図6Bを参照すると、命令600は、複数のサブ命令を含み、複数のサブ命令は、サブ命令602、604、606、608、610、612、及び614を含み得る。各サブ命令は、ニューラルネットワークプロセッサ502の特定の構成要素を対象とし得、異なる構成要素は、サブ命令によってプログラムされ得、サブ命令によって表される動作を並列に及び/又は独立して実施し得る。例えば、サブ命令602は演算エンジン524を対象とする。サブ命令604は、重み、入力データ、出力データ、並びにバイアス、スケール、及びシフトなどの後処理パラメータにアクセスするためのメモリアドレスを生成するアドレス生成器532の一部を対象とする。サブ命令604はまた、開始ループインジケータを含み得、また演算コントローラ522を対象とし得る。サブ命令606は、入力データ及び出力データにアクセスするためのメモリアドレスを生成するアドレス生成器532の一部を対象とする。また、サブ命令608は、重み及び後処理パラメータ(例えば、バイアス、スケール、及びシフト)を重み及びパラメータバッファ526から重み/パラメータレジスタ528bにフェッチするために、ロード/ストアコントローラ530を対象とする。また、サブ命令610は、入力データをメモリ512からデータレジスタ528aにフェッチし、出力データをデータレジスタ528aからメモリ512に格納するために、ロード/ストアコントローラ530を対象とする。また、サブ命令612は、演算コントローラ522を対象とし、ループ又はマクロの命令のための終了インジケータを提供する。
【】
また、サブ命令614は、命令600のタイプを示す。ニューラルネットワークプロセッサ502は、異なるタイプ及びビット長の命令をサポートすることができる。例えば、図6A及び図6Bにおいて、命令600は、48ビット(48b)命令であり、48ビット(48b)命令は、演算エンジン524、アドレス生成器532、及びロード/ストアコントローラ530を対象とする5つのサブ命令(602、604、606、608、及び610)を有する。ニューラルネットワークプロセッサ502はまた、他のサブ命令に加えて、サブ命令602~610のサブセットを有する24ビット(24b)命令をサポートすることができる。サブ命令614に基づいて、演算コントローラ522は、命令のタイプ及びビット長を決定し、タイプ及びビット長に基づいて命令からサブ命令を復号及び抽出することができる。
【】
演算コントローラ522は、命令の所定のビット位置からサブ命令を抽出し、抽出したサブ命令に基づいてニューラルネットワークプロセッサ502の対象構成要素のための制御信号を生成することができる。演算コントローラ522は、それぞれのサブ命令を並列に実行するように演算エンジン524と、アドレス生成器532と、ロード/ストアコントローラ530とを制御することができ、これにより、ニューラルネットワークプロセッサ502は、N通り(例えば、サブ命令602~610の実行において5通り)の並列プログラマビリティを提供することができる。
【】
サブ命令602~610は各々、対象構成要素によって実行される動作及び/又はアクセスされるレジスタを識別するフィールドを含む。例えば、サブ命令602は、フィールド602a、602b、602c、及び602dを含む。フィールド602aは、乗累算(MAC)演算動作、BNorm演算動作、又は最大プーリング演算動作など、演算エンジン524によって実施される演算を識別することができる。フィールド602bは、演算の出力を格納するための宛先データレジスタ(MACreg0~MACreg7と標示されている)を識別することができる。フィールド602c及び602dは、それぞれ、ソース入力データレジスタ(図6A及び図6BにおいてDin0及びDin1と標示されている)及び重みレジスタ(図6A及び図6Bにおいて重み-0及び重み-1と標示されている)を識別し、ソース入力データレジスタ及び重みレジスタから入力データ要素及び重み要素が演算のためにフェッチされる。後述するように、いくつかの例において、フィールド602cはまた、最大プーリング演算が演算エンジン524によって実施されるかどうか、又は最大プーリング演算が0出力を提供するかどうかを示すことができる。
【】
また、サブ命令604は、フィールド604a、604b、及び604cを含む。フィールド604aは、フィールド604cによって識別されるソースアドレスレジスタに格納されたアドレスを更新するために実施される動作を識別することができ、更新されたアドレスは、フィールド604bによって識別される宛先アドレスレジスタに格納される。動作としては、例えば、1増分(ADD)、1減分(SUB)、及び宛先アドレスレジスタ内のアドレスをソースアドレスレジスタ内のアドレスで置き換えるための移動動作(MOV)を挙げることができる。アドレスは、(入力データ/出力データのための)メモリ512内のメモリアドレス、又は、(重み又はパラメータのための)重み及びパラメータバッファ526内の位置に対するエイリアス/参照/アドレスであり得る。ソース/宛先アドレスレジスタは、入力データ及び出力データのためのアドレスレジスタ(図6A及び図6BにおいてARin0、ARin1、ARout0、及びARout1と標示されている)、重みのためのアドレスレジスタ(図6A及び図6BにおいてARwt0及びARwt1と標示されている)、シフト及びスケールのためのアドレスレジスタ(図6A及び図6BにおいてARss0及びARss1と標示されている)、並びにバイアス値のためのアドレスレジスタ(図6A及び図6BにおいてARbias0及びARbias1と標示されている)を含み得る。いくつかの例において、フィールド604aはまた、ループの命令のための開始インジケータであり得るセットアップループ演算(SETUP_LP)を識別することができ、フィールド604cは、ループのためのループカウント値を格納するループカウントレジスタLC-reg(構成レジスタ528dの一部であり得る)を識別することができ、サブ命令604は、演算コントローラ522によって処理され得る。
【】
また、サブ命令606は、フィールド606a、606b、及び606cを含む。フィールド606aは、フィールド606cによって識別されるソースアドレスレジスタに格納されたアドレスを更新するために実施される動作を識別することができ、更新されたアドレスは、フィールド606bによって識別される宛先アドレスレジスタに格納される。動作としては、例えば、1増分(ADD)、1減分(SUB)、及び宛先アドレスレジスタ内のアドレスをソースアドレスレジスタ内のアドレスで置き換えるための移動動作(MOV)を挙げることができる。アドレスは、入力又は出力データのためのメモリ512内のメモリアドレスであり、ソース/宛先アドレスレジスタは、入力データ及び出力データのためのアドレスレジスタ(図6A及び図6BにおいてARin0、ARin1、ARout0、及びARout1と標示されている)を含み得る。後述するように、入力データのインプレース演算又は循環アドレス指定が実施される場合、アドレス生成器532は、循環バッファを用いて調整されたアドレスを処理して、入力/出力データの循環アドレス指定を提供することができる。
【】
また、サブ命令608は、フィールド608a、608b、及び608cを含む。フィールド608aは、フィールド608cによって識別されるアドレスレジスタ(例えば、ARwt0、ARwt1、ARss0、ARss1、ARbias0、ARbias1)に格納されたアドレスから重み/バイアス/スケール/シフトをフェッチし、フェッチした重み/バイアス/スケール/シフトをフィールド608bによって識別されるレジスタ(重み-0、重み-1、スケール-シフト-0、スケール-シフト-1、MACreg0~MACreg7)に格納するためのロード命令を示すことができる。
【】
また、サブ命令610は、フィールド610a、610b、及び610cを含む。フィールド610aは、サブ命令610がロード命令であるか、又はストア命令であるかを示すことができる。ロード命令の場合、フィールド610cは、そこから入力データがロードされるメモリアドレスを格納する、アドレスレジスタ(ARin0、ARin1)を識別することができ、フィールド610bは、入力データを格納する入力データレジスタ(Din0又はDin1)を識別することができる。ストア命令の場合、フィールド610cは、出力データを格納するためのメモリアドレスを格納するアドレスレジスタ(ARout0、ARout1)を識別することができ、フィールド610bは、そこから出力データがフェッチされる、出力データレジスタ(Dout)を識別することができる。
【】
いくつかの例において、Din0、Din1、及びDoutレジスタの各々は32ビットを有し、重みレジスタ及びスケールシフトレジスタの各々は64ビットを有し、各MACregレジスタは72ビットを有する。
【】
図6C及び図6Dは、24ビット命令630、632、634、及び636の例を示す。命令630は、24bタイプ1命令であり得、サブ命令602、606、610を含む。命令632は、24bタイプ2命令であり得、サブ命令602と、サブ命令608’とを含み、サブ命令608’は、(重み及びパラメータバッファ526から重み/パラメータレジスタ528bに重み及び後処理パラメータをフェッチするための)サブ命令608の機能と、バッファアドレスの自動増分とを含む。命令634は、24bタイプ3命令であり得、フロー制御(マクロ、停止)及びデバッグ(ブレークポイント)のためのサブ命令640を含む。また、命令636は、24bタイプ4命令であり得、サブ命令604とサブ命令606とを含む。24b命令630、632、634、及び634の各々は、(命令のタイプ/ビット長を示すための)サブ命令614と(フロー制御をサポートするための)サブ命令612とを含む。
【】
種々のビット長の命令及び種々の数のサブ命令を実行するように構成されたニューラルネットワークプロセッサ502を有することで、サブ命令の実行における並列性を最大化するための柔軟性を提供する一方、コードサイズ及び電力を低減することができる。具体的には、ニューラルネットワークプロセッサ502は、ニューラルネットワーク演算をサポートするために5つのサブ命令602、604、606、608、及び610を常に実行するわけではないが、サブ命令のいくつかの組合せ(例えば、メモリから読み出し、アドレスレジスタを増分するサブ命令)は、他の組み合わせよりも頻繁に共に実行される。したがって、より頻繁に共に実行されるサブ命令を有する24b命令をサポートすることにより、コードサイズが低減され得る。短縮された命令をフェッチ及び復号する際に消費される電力も低減することができる。一方、5つのサブ命令602~610を含む48b命令をサポートすることにより、サブ命令の実行における並列性を最大化することもできる。これらは全て、電力、コードサイズ、及び実行並列性に関する異なる要件を有する異なるアプリケーションをサポートする際に、ニューラルネットワークプロセッサ502の柔軟性を改善することができる。
【】
図7は、命令バッファ520に格納される命令/マイクロコードのセットを示すチャート700を含む。図7において、列702の値は、命令バッファ520内の各命令のアドレスを表すことができる。図7の例において、ニューラルネットワークプロセッサ502は、列702の値に従って命令を順次実行することができ、列702の各値は、実行のタイムスロットを表すこともできる。また、列706は、重みをフェッチする際にロード/ストアコントローラ530によって実行されるサブ命令610を表し、列704は、入力データをフェッチする際にロード/ストアコントローラ530によって実行されるサブ命令608を表し、列708は、入力データがフェッチされるメモリアドレスを更新する際にアドレス生成器532によって実行されるサブ命令606を表し、列710は、重みがフェッチされるメモリアドレスを更新する際にアドレス生成器532によって実行されるサブ命令604を表し、列712は、MAC演算を実施する際に演算エンジン524によって実行されるサブ命令602を表す。
【】
タイムスロット0において、ロード/ストアコントローラ530は、ARin0レジスタにおける特定されたメモリ512の第1のメモリアドレスにおける入力データのフェッチを開始する。入力データは、入力データレジスタDin0において格納される。また、ロード/ストアコントローラ530は、ARwt0レジスタにおける特定された(重み及びパラメータバッファ526の)第1のバッファアドレスにおける重み要素の第1のセットをフェッチし、重みレジスタWt0に重みを格納する。アドレス生成器532はまた、ARin0レジスタ内の第1のメモリアドレスを増分して第2のメモリアドレスを生成し、Wt0レジスタ内の第1のバッファアドレスを増分して第2のバッファアドレスを生成する。メモリ512からの入力データのフェッチは、タイムスロット1において継続することができる。
【】
タイムスロット2において、メモリ512から入力データレジスタDin0への入力データのフェッチが完了する。また、ロード/ストアコントローラ530は、ARwt0レジスタにおける特定された第2のバッファアドレスにおける重み要素の第2のセットをフェッチし、重みレジスタWt1において重みを格納する。アドレス生成器532はまた、Wt0レジスタ内の第2のバッファアドレスを増分して第3のバッファアドレスを生成する。演算エンジン524はまた、サブ命令602を実行して、Din0に格納された入力データと重みレジスタWt0内の重み要素のサブセット(Wt0L)との間でMAC演算を実施し、一方、ロード/ストアコントローラ530は、重みレジスタWt1に重みをフェッチする。
【】
タイムスロット3において、ロード/ストアコントローラ530は、ARin0レジスタにおいて特定されたメモリ512の第2のメモリアドレスにおける入力データのフェッチを開始する。入力データは、入力データレジスタDin1において格納される。アドレス生成器532はまた、ARin0レジスタ内の第2のメモリアドレスを増分して第3のメモリアドレスを生成する。演算エンジン524はまた、サブ命令602を実行して、Din0に格納された入力データと重みレジスタWt0内の重み要素の残り(Wt0H)との間でMAC演算を実施する。ロード/ストアコントローラ530は、重みレジスタWt0及びWt1内の重みが(タイムスロット3において)使用中であるか、又はまだ用いられていないか、のいずれかであるので、タイムスロット3において第3のバッファアドレスから重みをフェッチすることを保留する。
【】
タイムスロット4において、メモリ512の第2のメモリアドレスにおける入力データのフェッチが継続する。Din0に格納された入力データと、重みレジスタWt0内の重み要素の残りとの間でMAC演算が完了する。したがって、ロード/ストアコントローラ530は、重み要素の第3のセットを第3のバッファアドレスから重みレジスタWt0にフェッチする。アドレス生成器532はまた、第3のバッファアドレスを第4のバッファアドレスに増分する。演算エンジン524はまた、サブ命令602を実行して、Din0に格納された入力データと重みレジスタWt1内の重み要素のサブセット(Wt1L)との間でMAC演算を実施する。
【】
Din1への入力データのフェッチは、タイムスロット5において完了する。しかしながら、ロード/ストアコントローラ530は、演算エンジン524が、Din0における入力データを依然として演算しているので、第3のメモリアドレスから入力データレジスタDin0への入力データのフェッチを保留する。タイムスロット5において、演算エンジン524はまた、サブ命令602を実行して、Din0に格納された入力データと重みレジスタWt1内の重み要素の残り(Wt1H)との間でMAC演算を実施する。
【】
タイムスロット6において、ロード/ストアコントローラ530は、重み要素の第4のセットを第4のバッファアドレスから重みレジスタWt1にフェッチし、一方、演算エンジン524は、サブ命令602を実行して、Din0に格納された入力データと、タイムスロット4においてロード/ストアコントローラ530が更新した、重みレジスタWt0に格納された重みの第1のセット(Wt0L)との間でMAC演算を実施する。アドレス生成器532はまた、第4のバッファアドレスを第5のバッファアドレスに増分する。タイムスロット7において、演算エンジン524はまた、サブ命令602を実行して、Din0に格納された入力データと重みレジスタWt0内の重み要素の残り(Wt0H)との間でMAC演算を実施する。
【】
タイムスロット8において、演算エンジン524がサブ命令602を実行して、Din0に格納された入力データと重みレジスタWt1内の重み要素(Wt1L及びWt1H)との間でMAC演算を実施する一方、ロード/ストアコントローラ530は、第5のバッファアドレスにおける重みを重みレジスタWt0にフェッチする。タイムスロット8において重みレジスタWt0にフェッチされた重みは、Din1に格納された入力データとのMAC演算のために演算エンジン524によって用いられる。アドレス生成器532はまた、第5のバッファアドレスを増分して第6のバッファアドレスを生成する。
【】
タイムスロット9において、演算エンジン524はまた、サブ命令602を実行して、Din0に格納された入力データと重みレジスタWt1内の重み要素の残り(Wt1H)との間でMAC演算を実施し、Din0と重みとの間のMAC演算の第1のセットを完了する。MAC演算の結果は、データレジスタMACreg0~MACreg7に格納される。
【】
タイムスロット10において、ロード/ストアコントローラ530は、第6のバッファアドレスにおける重みを重みレジスタWt1にフェッチし、一方、演算エンジン524は、サブ命令602を実行して、Din1に格納された入力データと重みレジスタWt0における重み要素のサブセット(Wt0L)との間でMAC演算を実施する。
【】
タイムスロット11において、ロード/ストアコントローラ530は、メモリ512の第3のメモリアドレスにおける入力データをレジスタDin0にフェッチする。アドレス生成器532はまた、第3のメモリアドレスを増分して第4のメモリアドレスを生成し、演算エンジン524は、サブ命令602を実行して、Din1に格納された入力データと重みレジスタWt0内の重み要素の残り(Wt0H)との間でMAC演算を実施する。
【】
図7に示されているように、ニューラルネットワークプロセッサ502は、ロード/ストアコントローラ530による重み及び入力データのフェッチと、アドレス生成器532による重み及び入力データのフェッチのためのメモリ及びバッファアドレスの更新と、演算エンジン524における演算動作との間の並列性を最大化する(又は少なくとも増加させる)ように命令を実行することができる。ロード/ストアコントローラ530による重み及び入力データのフェッチの際の遅延に起因する演算エンジン524におけるストールも最小化(又は少なくとも低減)することができる。例えば、タイムスロット2及び3において、演算エンジン524がレジスタWt0内の重みに対する演算を実施する一方、ロード/ストアコントローラ530はレジスタWt1内の重みを更新し、これにより、演算エンジン524は、さらなる遅延なしに後続のタイムスロット4及び5においてレジスタWt1内の更新された重みに対する演算を実施することができ、演算エンジン524は、レジスタWt1内の重みが更新されるのを待つためにストールする必要がない。また、入力データは、メモリ512から1つのレジスタ(例えば、Din1)にフェッチされ、一方、演算エンジン524は、他のレジスタ(例えば、Din0)に格納された入力データを演算し、そのため、演算エンジン524は、更新された入力データを待つためにストールする必要がない。また、メモリ512へのアクセスを比較的長時間隔てる(例えば、図7においては、8タイムスロットで隔てる)ことにより、プロセッサ514とニューラルネットワークプロセッサ502との間のメモリアクセスの衝突も、回避すること又は少なくとも低減することができる。
【】
図8A及び図8Bは、アドレス生成器532によって実装され得る例示のメモリ管理方式を示すチャートである。図8A及び図8Bの例示のメモリ管理方式は、出力データが入力データを上書きし、出力データの循環アドレス指定が実装されるインプレース演算を表すことができる。そのような構成において、入力及び出力データは、メモリ512内の別個の空間に格納する必要がなく、これにより、ニューラルネットワークプロセッサ502によるメモリリソース使用を低減することができる。
【】
チャート800を参照すると、メモリ512は、16セットの入力データ要素(fm0)を格納することができ、入力データ要素の各セットは、4つの異なるチャネル(c0、c1、c2、及びc3)のための4つの入力データ要素を含む。チャート800の各行は、メモリアドレスに関連付けられ得、行は、連続するアドレスに関連付けられ得る。しかしながら、17セットの入力データ要素を格納するための空間が割り当てられ得、行16(メモリ空間802)は空であり、1セットの出力データ要素(fm1)を格納するために利用可能である。
【】
時間T0において、初期読出しアドレスは、ポインタ804によって示されているように、行0にある。行0内の入力データ要素の第1のセットが、入力データレジスタ(例えば、Din0)にフェッチされ、次いで、演算動作のために演算エンジン524にフェッチされる。演算動作の出力データ要素の第1のセットのための初期書込みアドレスは、ポインタ806によって示されているように、メモリ空間802に関連付けられる。そのような構成により、出力データが、依然として使用中であり得る入力データ要素の第1のセットを上書きすることを防止することができる。初期読出し及び書込みアドレスは、サブ命令606を用いて設定され得る。入力データ要素の第1のセットをフェッチした後、アドレス生成器532は、別のサブ命令606に応答して読出しアドレスを1だけ増分することができ、そのため、ポインタ804は、その後、行1を指示することができる。
【】
時間T1において、行1内の入力データ要素の第2のセット(fm0_01c0~fm0_01c3)が、ポインタ804によって示されているように、入力データレジスタにフェッチされる。入力データ要素の第2のセットをフェッチした後、アドレス生成器532は、サブ命令606に応答して読出しアドレスを1だけ増分することができ、そのため、ポインタ804は、その後、行2を指示することができる。出力データ要素の第1のセット(fm1_00c0~fm1_00c3)が、ポインタ806によって示されるように、行16に格納される。出力データ要素の第1のセットを行16に格納した後、アドレス生成器532は、サブ命令606に応答して書込みアドレスを1だけ増分することができる。しかしながら、インプレース演算をサポートするために、循環アドレス指定が出力データに提供され得、そのため、増分された書込みアドレスがラップアラウンドして行0を指示することができ、そのため、出力データ要素の次のセットが入力データ要素の第1のセットを上書きすることができる。
【】
図8Bを参照すると、時間T2において、行2内の入力データ要素の第3のセット(fm0_02c0~fm0_02c3)が、ポインタ804によって示されているように、入力データレジスタにフェッチされる。入力データ要素の第3のセットをフェッチした後、アドレス生成器532は、サブ命令606に応答して読出しアドレスを1だけ増分することができ、そのため、ポインタ804は、その後、行3を指示することができる。出力データ要素の第2のセット(fm1_00c0~fm1_00c3)が、ポインタ806によって示されるように、行0に格納される。出力データ要素の第2のセットを行0に格納した後、アドレス生成器532は、サブ命令606に応答して書込みアドレスを1だけ増分することができ、そのため、ポインタ806は、その後、行1を指示することができる。最後に、時間T3において、全ての出力データ要素が行0~14及び16に格納され、ポインタ806は、出力データ要素fm1_15_c0~fm1_15_c3を格納する行14を指示する。
【】
図9は、アドレス生成器532によって実装され得る、別の例示のメモリ管理方式を示すチャートを含む。図9の例示のメモリ管理方式は、ボイスコマンド認識アプリケーションなどの常時オンのアプリケーションをサポートするための入力データの循環アドレス指定を表すことができる。そのようなアプリケーションの場合、推論演算は、コマンド長よりも頻繁に実施され得る。したがって、2つの推論演算の間で入力データに著しい重複が存在することがある。
【】
例えば、ボイスコマンド認識の場合、入力音声サンプルは、40ミリ秒(ms)フレームにグループ化することができ、8つの周波数ドメイン特徴がフレーム毎に抽出され得る。したがって、1秒のコマンド長について、25フレームに対して特徴が抽出され、25個の位置と位置毎に8つのチャネルとを有する入力特徴が得られる。推論演算が120ms毎に実施される場合、推論演算によって処理される新しい入力特徴は、前の入力特徴のセットに対して、3つの新しい特徴のセット(3つの位置において、位置毎に8つのチャネル)を有することができる。重複する22セットの入力特徴は、割り当てられたメモリアドレスの同じセット内に入力特徴が収まるようにメモリ内で移動され得るが、そのようなデータ移動は、メモリアクセスにおけるレイテンシ、及びメモリによる電力消費を増加させる。
【】
重複する入力データをメモリ512内で移動させる代わりに、循環アドレス指定方式に従って新しい入力データが(例えば、センサ104によって、プロセッサ514によってなど)メモリ512に格納され得、アドレス生成器532はまた、同じ循環アドレス指定方式に基づいて入力データをフェッチするために入力データアドレスを更新することができる。図9のチャート900は、循環アドレス指定方式の一例を図示する。チャート900において、メモリ512は、25セットの入力データ要素を格納することができ、入力データ要素の各セットは、8つの異なるチャネル(c0~c7)の8つの入力データ要素を含む。チャート900の各行は、メモリアドレスに関連付けられ得、行は、連続するアドレスに関連付けられ得る。
【】
時間T0において、メモリ512は、入力データ要素の25個の初期セット(fm0_00×~fm0_24*)を格納する。第1の推論演算を実施するために25セットの入力データ要素をフェッチするための第1のアドレスは、ポインタ902によって示されている行0にある。アドレス生成器532は、行0に関連付けられたアドレスとして初期入力データアドレスを提供し、サブ命令606に応答して入力データアドレスを増分することができ、ロード/ストアコントローラ530は、メモリ512からの25セットの入力データ要素を入力データアドレスからフェッチすることができる。
【】
時間T1において、入力データ要素の新しい3つのセット(fm0_25*~fm0_27*)がメモリ512に格納される。入力データ要素の初期セットの残りの移動を回避するために、入力データ要素の新しいセットは、行0、1、及び2に関連付けられたメモリアドレスに格納され、入力データ要素fm0_00*~fm0_02*を上書きする。第2の推論演算を実施するために25セットの入力データ要素をフェッチするための第1のアドレスは、ポインタ902によって示されている行3にある。アドレス生成器532は、行3に関連付けられたアドレスとして初期入力データアドレスを提供し、サブ命令606に応答して入力データアドレスを増分することができ、ロード/ストアコントローラ530は、メモリ512からの25セットの入力データ要素を入力データアドレスからフェッチすることができる。しかし、入力データ要素の新しいセットを読み出すために、アドレス生成器532はまた、入力データのための循環アドレス指定方式を実装しており、入力データアドレスは、(入力データ要素fm024*を格納する)行24に関連付けられたアドレスを超えて増分した後にラップアラウンドし、行0で再開し、行2で終了する。
【】
時間T2において、入力データ要素の別の新しい3つのセット(fm0_28*~fm0_30*)がメモリ512に格納される。入力データ要素の初期セットの残りの移動を回避するために、入力データ要素の新しいセットは、行3、4、及び5に関連付けられたメモリアドレスに格納され、入力データ要素fm0_03*~fm0_05*を上書きする。第3の推論演算を実施するために25セットの入力データ要素をフェッチするための第1のアドレスは、ポインタ902によって示されている行6にある。アドレス生成器532は、行6に関連付けられたアドレスとして初期入力データアドレスを提供し、サブ命令606に応答して入力データアドレスを増分することができ、ロード/ストアコントローラ530は、メモリ512からの25セットの入力データ要素を入力データアドレスからフェッチすることができる。しかし、入力データ要素の新しいセットを読み出すために、アドレス生成器532はまた、入力データのための循環アドレス指定方式を実装しており、入力データアドレスは、(入力データ要素fm0_24*を格納する)行24に関連付けられたアドレスを超えて増分した後にラップアラウンドし、行0で再開し、行5で終了する。
【】
図10Aは、アドレス生成器532の一部であり得る循環バッファ回路1000の一例を示し、一方、図10Bは、循環バッファ1000の例示の動作を示すグラフを提示する。図10Bを参照して、循環バッファ回路1000は、入力/出力データアドレスARw0を受け取ることができる。循環バッファ1000は、循環アドレス指定が無効である場合、又はARw0が入力/出力データに割り当てられたメモリ領域1001の開始アドレス(図10A及び図10Bのstart-addr)及び終了アドレス(図10A及び図10Bのend-addr)内にある場合、ARw0を出力アドレスとして転送することができる。左側の図を参照すると、循環アドレス指定が有効であり、ARw0が(減分によって)オフセット(offset1)だけ開始アドレスを下回る場合、循環バッファ回路1000は、ラップアラウンドを実施し、offset1を終了アドレスから減算することによってARw0の循環したバージョン(ARw0cir0)を提供することができる。また、右側の図を参照すると、循環アドレス指定が有効であり、ARw0が(増分によって)オフセット(offset2)だけ開始アドレスを上回る場合、循環バッファ回路1000は、ラップアラウンドを実施し、開始アドレスからoffset2を減算することによってARw0の循環したバージョン(ARw0_cir1)を提供することができる。一方、循環アドレス指定が無効である場合、又はARw0がメモリ領域1001内にある場合、循環バッファ回路1000は、ARw0を出力アドレスとして転送することができる。
【】
図10Aを参照すると、循環バッファ回路1000は、マルチプレクサ1002、1004、1006及び1008と、差分回路1012、1014及び1016と、加算回路1020と、増分回路1022と、減分回路1024と、マルチプレクサ制御回路1030及び1032とを含み得る。循環バッファ回路1000は、入力/出力データアドレス(ARw0)を受け取るために入力/出力データアドレスレジスタ(例えば、ARin0又はARout0)に結合されたアドレス入力1040を有する。
【】
マルチプレクサ1002は、開始入力データアドレス(図10の「start-in」)及び開始出力データアドレス(図10の「start-out」)を受け取ることができ、マルチプレクサ1004は、終了入力データアドレス(図10の「end-in」)及び終了出力データアドレス(図10の「end-out」)を受け取ることができる。開始及び終了入力データアドレスは、入力データに割り当てられたメモリ領域を定義することができ、開始及び終了出力データアドレスは、出力データに割り当てられたメモリ領域を定義することができ、開始アドレスは、終了アドレスを下回る/終了アドレスよりも小さい。マルチプレクサ1002及び1004の各々は、循環アドレス指定モードが、入力データアドレスを更新するために(例えば、常時オンのアプリケーションのために)提供されるか、又は出力データアドレスのために(例えば、インプレース演算のために)提供されるかを示す指示M0を受け取ることもできる。指示M0は、構成レジスタ528cから受け取ることもできる。入力データアドレスを更新するために循環アドレス指定モードが提供される場合、マルチプレクサ1002は、開始入力データアドレスを開始アドレス(図10の「start-addr」)として提供することができ、マルチプレクサ1004は、終了入力データアドレスを終了アドレス(図10の「end-addr」)として提供することができ、そうでない場合、マルチプレクサ1002は、開始出力データアドレスを開始アドレスとして提供することができ、マルチプレクサ1004は、終了出力データアドレスを終了アドレスとして提供することができる。増分回路1022は、マルチプレクサ1004の出力に結合される入力を有し、増分された終了アドレス1060を生成することができ、減分回路1024は、マルチプレクサ1002の出力に結合される入力を有し、減分された開始アドレス1062を生成することができる。
【】
また、差分回路1012は、アドレス入力1040に結合される第1の入力と、マルチプレクサ1002の出力に結合される第2の入力とを有する。差分回路1014は、アドレス入力1040に結合される第1の入力と、マルチプレクサ1004の出力に結合される第2の入力とを有する。差分回路1012は、開始アドレスとARw0との間のオフセット1050を生成することができ、これはまた、ARw0が開始アドレスを上回るか又は下回るかを示す。また、差分回路1014は、終了アドレスとARw0との間のオフセット1052を生成することができ、これはまた、ARw0が開始アドレスを上回るか又は下回るかを示す。また、差分回路1016は、増分された終了アドレス1060からオフセット1050を減算することによってアドレス1070を生成することができ、加算回路1020は、減分された終了アドレス1062にオフセット1052を加算することによってアドレス1072を生成することができる。アドレス1070は、ARw0が開始アドレスを下回る場合、ラップアラウンドアドレスARw0_cir0であり得、アドレス1072は、ARw0が終了アドレスを上回る場合、ラップアラウンドアドレスARw0_cir1であり得る。
【】
マルチプレクサ1006及び1008は、入力アドレスARw0、アドレス1070(ARw0_cir0)、又はアドレス1072(ARw0_cir1)のうちの1つをアドレス出力1042に選択的に転送することができる。この選択は、マルチプレクサ制御回路1030及び1032によって実施される。具体的には、マルチプレクサ制御回路1030及び1032は各々、循環アドレス指定が有効であるかどうかの指示(図10の「circ enable」)を、例えば、構成レジスタ528cから受け取ることができる。循環アドレス指定が無効である場合、又はARw0が開始アドレスを上回る場合、又はARw0が終了アドレスを下回る場合、マルチプレクサ1006及び1008は、アドレス入力1040をアドレス出力1042に接続し、入力/出力データアドレスレジスタに格納されたアドレスを出力として提供することができる。一方、循環アドレスが有効であり、ARw0が開始アドレスを下回る場合、マルチプレクサ1006及び1008は、ARw0_cir0(アドレス1070)をアドレス出力1042に提供することができる。また、循環アドレスが有効であり、ARw0が終了アドレスを上回る場合、マルチプレクサ1006及び1008は、ARw0_cir1(アドレス1072)をアドレス出力1042に提供することができる。
【】
で説明したように、ニューラルネットワークプロセッサ502は、畳み込み層演算のコンパクトな表現を可能にする、図4に示されているもののようなループ要素及びマクロ要素など、フロー制御要素を含むサブ命令をサポートする。図11は、ニューラルネットワークプロセッサ502によって実行可能なループ要素を含む例示のプログラムを図示する。図11の上部を参照すると、プログラム1100は、命令1102、1104、1106、及び1108を含み、命令の各々が一つ又は複数のサブ命令を含み得る。命令1102は、サブ命令604を含み得、サブ命令604は、セットアップループ演算(SETUP_LP)を識別するフィールド604aと、ループカウントレジスタ(LC_reg)を識別するフィールド604cとを有し得る。フィールド604aは、セットアップループ演算を示すオペコードを含み得る。命令1102には、命令1104及び1106が続き、命令1104及び1106の各々が、ゼロ/デアサートされた終了マーカを示すサブ命令612を有する。プログラム1100はまた、命令1108を含み、命令1108は、アサートされた終了マーカを示すサブ命令612を有する。命令1102、1104、1106、及び1108は、命令1104から開始し命令1108で終了するループ演算を定義することができ、ループ演算は、命令1102のフィールド604cによって識別されるループカウントレジスタ内で定義された回数だけ繰り返される。ループ演算を実施するために、演算コントローラ522は、演算コントローラ522が命令を解析する際に、オペコードSETUP_LPとアサートされた終了マーカとが抽出される順序/シーケンスを追跡することにより、オペコードSETUP_LPtとアサートされた終了マーカとを含むサブ命令の一つ又は複数のペアを識別し、サブ命令のペアのプログラムカウンタ値を格納することができる。アサートされた終了マーカを抽出した後、演算コントローラ522は、プログラムカウンタをリセットして、ペアにされたSETUP_LPオペコードを有するサブ命令のカウント値に戻し、SETUP_LPサブ命令とアサートされた終了マーカとのペアの間で命令の実行を繰り返すことができる。
【】
図11はまた、ネストループ演算を表すプログラム1120を示す。プログラム1120は、命令1122、1124、1126、1128、1130、及び1132を含み、各々が一つ又は複数のサブ命令を含む。命令1122は、オペコードSETUP_LPを含み、第1のループカウントを格納する第1のループレジスタLC-reg0を識別する。命令1124は、オペコードSETUP_LPを含み、第2のループレジスタLC-reg1を識別する。命令1130はアサートされた終了マーカを含み、サブ命令1132もアサートされた終了マーカを含む。演算コントローラ522は、演算コントローラ522がSETUP_LPオペコード及びアサートされた終了マーカを抽出する順序に基づいて、サブ命令1122のSETUP_LPを命令1132のアサートされた終了マーカとペアにし、サブ命令1124のSETUP_LPを命令1130のアサートされた終了マーカとペアにすることができる。演算コントローラ522は、LC-reg0において特定された回数だけ、命令1124、1126、及び1128の実行を繰り返すことができる。また、サブ命令1130のアサートされた終了マーカを抽出すると、演算コントローラ522は、プログラムカウンタをリセットしてサブ命令1124の実行を再開し、LC-reg1において特定された回数だけ命令1126及び1128の実行を繰り返すことができ、それにより、ネストされたループ演算を実施する。
【】
図12は、ニューラルネットワークプロセッサ502によって実行可能なマクロ要素を含む例示のプログラム1200を示す。プログラム1200は、命令1201、1202、1204、1206、及び1208を含み、各々が一つ又は複数のサブ命令を含む。各命令はまた、プログラムカウンタ値に関連付けられており、アサート又はデアサートされた終了マーカを有する。命令1206は、フィールド1206a、1206b、及び1206cを含む。フィールド1206aは、命令のセットを含むマクロを識別するマクロ要素オペコード(MACRO)を含み得る。フィールド1206bは、マクロの最初の命令のプログラムカウント値(例えば、PC#0)を識別することができ、マクロの最後の命令は、アサートされた終了マーカサブ命令612を含み得る。フィールド1206cは、マクロが実行される回数を示すことができる。命令1206を実行すると、演算コントローラ522は、プログラムカウンタをフィールド1206bのカウント値にリセットし、アサートされた終了マーカを有する命令1204を受け取るまで、全ての後続の命令を実行することができる。命令1204は、図12に示していない他のサブ命令を含み得る。演算コントローラ522は、フィールド1206cにおいて特定された回数だけマクロの実行を繰り返すことができる。演算コントローラ522は、マクロの実行をその回数だけ繰り返した後、命令1206を実行するとプログラムカウンタのリセットを停止し、後続の命令1208の実行に進むことができる。
【】
図13は、演算エンジン524の内部構成要素の例を示す概略図である。図13を参照すると、演算エンジン524は、MACエンジン1300と、後処理エンジン1302とを含む。MACエンジン1300は、それぞれ、データレジスタ528aの入力データレジスタ(例えば、DIN0、DIN1)、重み/パラメータレジスタ528bの重みレジスタ(例えば、重み-0、重み-1)、及び重み/パラメータレジスタ528bのスケールシフトレジスタ(例えば、スケール-シフト-0、スケール-シフト-1)から入力データ要素及び重み要素を受け取ることができる。MAC演算を示すサブ命令602に応答して制御信号を生成する演算コントローラ522からの制御信号1301に応答して、MACエンジン1300は、入力データ要素と重み要素とに対してMAC演算を実施することができる。MACエンジン1300は、CNN層、DNN層、全結合層などのニューラルネットワーク層のためのMAC演算を実施し、データレジスタ528aのMACレジスタ(例えば、MACreg0~7)において中間出力データを格納するための、算術回路を含む。MACエンジン1300はまた、MACレジスタから古い部分和をフェッチし、MAC演算の結果を古い部分和に加算することによって古い部分和を更新し、更新した部分和をMACレジスタに戻して格納することができる。演算エンジン524はまた、累算を実施するためにMACエンジン1300によってどのMACレジスタがアクセスされるかを選択するためのMACレジスタマルチプレクサ1303を含む。
【】
また、後処理エンジン1302は、MACレジスタから中間出力データ要素を受け取ることができる。BNorm演算を示すサブ命令602に応答して制御信号を生成する演算コントローラ522からの制御信号1305に応答して、後処理エンジン1302は、中間出力データに対して後処理演算(例えば、BNorm及び残差層処理)を実施して出力データを生成し、出力データをデータレジスタ528aの出力データレジスタ(例えば、DOUT)において格納することができる。後述するように、後処理エンジン1302はまた、出力データレジスタにおいてデータパッキング演算を実施し、データパッキング演算を完了すると、出力データレジスタからの出力データをメモリ512に戻して格納するために、ロード/ストアコントローラ530に信号を送信することができる。そのような構成は、出力データを書き戻す際のメモリ512へのニューラルネットワークプロセス502のアクセスを低減することができ、これにより、メモリ使用量及び電力消費を低減することができる。また、後処理エンジン1302は、入力データレジスタから入力データ要素を受け取り、入力データ要素に基づいて残差モード演算を実施することもできる。
【】
上述したように、演算エンジン524は、プロセッサ514によって提供されるパラメータに基づいて、ビット精度の或る範囲(例えば、2値精度、3値精度、4ビット精度、8ビット精度など)にわたって重み及び入力データに対してMAC演算及び後処理演算を実施するように構成可能である。演算エンジン524は、精度構成可能性をサポートするために、重みマルチプレクサ1304と入力データマルチプレクサ1306とを含む。具体的には、入力データ及び重み構成1310に応じて、重みマルチプレクサ1304は、重みレジスタ(例えば、重み-0レジスタ又は重み-1レジスタのうちの1つ)に格納された重み要素の全て、又は格納された重み要素の半分の複製を、所定の数のビット(例えば、32ビット)を有するパックドデータとしてフェッチすることができる。また、構成1311に応じて、重みマルチプレクサ1304は、深さ方向畳み込み演算及び平均プーリングなどの種々の演算をサポートするために、重み要素に対して処理を実施することができる。深さ方向畳み込みの場合、重みマルチプレクサ1304は、重みレジスタに格納された8ビットの重みのうちの1つを選択し、8ビットの重みを重み要素のグループ(例えば、4グループ)に分割し、各重み要素グループに0をパディングすることができ、そのため、MACエンジン1300は、特定のチャネルの入力データ要素に0を乗算することができる。そのような構成は、特定のチャネルの中間出力が、そのチャネルの入力データのみに対するMAC演算に基づくことを確実にすることができる。別の例として、平均プーリング演算の場合、重みマルチプレクサ1304は、重み要素としてゼロ及び1を選択的に転送することができ、1の重み要素とペアにされた入力データ要素は、中間出力データ要素に表され、ゼロの重み要素とペアにされた入力データ要素は、ゼロにされ、中間出力データ要素に表されない。構成1311は、層タイプを示すことができ、層タイプはまた、深さ方向畳み込み演算が実施されるかどうかを示すことができる。構成1311はまた、平均プーリング演算が実施されるかどうかを示すことができる。構成1311は、構成レジスタ528dに格納された構成データ、及び/又は、命令に応答した演算コントローラ522からの制御信号に基づき得る。
【】
また、入力データマルチプレクサ1306は、入力データレジスタ(例えば、Din0又はDin1のうちの1つ)に格納された入力データ要素の全て、又は格納された入力データ要素の半分の複製を、所定の数のビット(例えば、32ビット)を有するパックドデータとして、フェッチすることができる。いくつかの例において、入力データ及び重み構成1310は、8ビットモード(D8)又は4ビットモード(D4)を含み得、D8又はD4は、演算エンジン524が入力データを8ビット形式でフェッチするか4ビット形式でフェッチするかを示す。入力データ及び重み構成1310は、構成レジスタ528Dに格納され、構成レジスタ528Dから受け取られ得る。演算エンジン524がD8モードで演算するかD4モードで演算するかは、入力精度及び重み精度に依存し得、入力精度及び重み精度はまた、(例えば、1クロックサイクルで)一度にMACエンジン1300にフェッチされる入力データ要素の数及び重み要素の数を決定することができる。
【】
また、MACエンジン1300及び後処理エンジン1302は、入力精度及び重み精度構成1312を受け取ることができる。入力データ精度及び重み精度に応じて、MACエンジン1300及び後処理エンジン1302の算術回路及び論理回路は、演算を別様に処理することができる。後処理エンジン1302はまた、例えば、後処理演算のためのパラメータを定義することができる後処理パラメータ1314を受け取り、後処理パラメータ1314の一部又は全ては、入力精度及び/又は重み精度に依存し得る。入力精度及び重み精度構成1312、並びに後処理パラメータ1314のいくつかが、構成レジスタ528dから受け取られ得る。シフト及びスケールなどの後処理パラメータ1314のいくつかが、後処理エンジン1302の異なる内部構成要素の間で異なり得る。こうしたパラメータは、重み/パラメータバッファ526から重み/パラメータレジスタ528bにフェッチされ得、後処理エンジン1302は、重み/パラメータレジスタ528bからそうしたパラメータを受け取ることができる。
【】
また、演算エンジン524は、入力データレジスタ(DIN0、DIN1)に格納された入力データ要素と出力データレジスタ(DOUT)に格納された出力データ要素とに対して最大プーリング演算を実施し、最大プーリングの結果を出力データレジスタ(DOUT)に戻して格納するための最大プーリングエンジン1320も含み得る。具体的には、最大プーリングエンジン1320は、入力データ要素が出力データ要素よりも高い値を有する場合、DIN0/DIN1における入力データ要素でDOUTの出力データ要素を上書きすることができる。演算コントローラ522は、例えば、実施される最大プーリング演算を示すサブ命令602のフィールド602cに応答して、最大プーリングエンジン1320に制御信号1322を提供することができる。次いで、最大プーリングエンジン1320は、制御信号1322に応答して最大プーリング演算を実施することができる。最大プーリングエンジン1320はまた、後処理パラメータ1314を受け取り、パラメータに基づいて最大プーリング演算を構成することができる。いくつかの例において、最大プーリングエンジン1320は、独立して、又はMACエンジン1300及び後処理エンジン1302と並列に、動作することができ、これにより、演算エンジン524の残りの部分による演算に関する最大プーリング演算の中断を最小限に抑え、効率を改善することができる。
【】
図14は、MACエンジン1300によって実施される例示の畳み込み演算を図示する。図14を参照すると、MACエンジン1300は、チャネル優先のシーケンス(channel major sequence)において畳み込み演算を実施することができる。MACエンジン1300は、まず、(出力チャネルのセットに関連付けられた重みのセットを用いて、)入力チャネルの第1のセットに関連付けられた、特定の高さ及び特定の幅の位置にある入力データ要素1404に対して畳み込み演算1402を実施して、中間出力データ要素1406の第1の部分和を生成することができる。入力データ要素1404は、入力データレジスタ(例えば、Din0)に格納され得、中間出力データ要素1406は、中間出力データレジスタ(例えば、MACreg0)に格納され得る。次いで、MACエンジン1300は、入力データ要素1404と同じ高さ及び同じ幅の位置にあるが、入力チャネルの第2のセットに関連付けられた入力データ要素1414に対して畳み込み演算1412を実施して、中間出力データ要素1406の第2の部分和を生成し、第2の部分和を第1の部分和に加算することができる。入力データ要素1414は、別の入力データレジスタ(例えば、Din1)に格納され得る。MACエンジン1300は、入力データ要素1424を含む、同じ高さ及び同じ幅の位置にある他の入力チャネルの入力データ要素に対して付加的な畳み込みを実施し、中間出力データレジスタにおける部分和を累算して、中間出力データ要素1406を生成することができる。全ての入力チャネルの特定の高さ及び幅の位置にある入力データ要素が処理された後、MACエンジン1300は、出力チャネルの異なるセットに関連付けられた重みの別のセットを用いて入力データ要素1404、1414、及び1424に対して畳み込み演算を再開して、異なる出力チャネルに関連付けられた中間出力データ要素1430及び1432などの中間出力データ要素の別のセットを演算することができる。
【】
図15A、図15B、図15C、及び図15Dは、異なるビット精度の重み要素及び入力データ要素を用いてMACエンジン1300及び後処理エンジン1302によって実施される、例示の畳み込み演算及び後処理演算を示す。図15Aにおいて、MACエンジン1300は、256個の8ビットの入力データ要素(in0、in1、in2、in3、...in254、及びin255と標示されている)と8ビットの重み要素との間で畳み込み演算を実施して、24ビットの中間出力データ要素を生成することができ、各中間出力データ要素は、入力データ要素と重み要素との積の和によって生成される。後処理エンジン1302は、各中間出力データ要素に対してBNorm及びクランプ/活性化関数演算(例えば、図14のReLU)を含む後処理演算を実施して、8ビットの出力データ要素を生成する。
【】
図15Bにおいて、MACエンジン1300は、256個の8ビットの入力データ要素(in0、in1、in2、in3、...in254、及びin255と標示されている)と1ビット(2値)の重み要素との間で畳み込み演算を実施して、16ビットの中間出力データ要素を生成することができ、各中間出力データ要素は、入力データ要素と重み要素との間の乗算積の和によって生成され、続いて、各中間出力データ要素に対して後処理演算(例えば、BNorm及びReLU)を実施して、8ビットの出力データ要素を生成する。2値重み(+1又は-1)を用いて、MACエンジン1300は、重み要素が1である場合に入力データ要素を単に転送し、重み要素が-1である場合に入力データ要素の負の表現を転送することにより、入力データ要素と重み要素との間の乗算積を生成することができ、これにより、複雑さ及び電力を低減し、演算の速度を増加させることができる。8ビットの重みと比較して、重みストレージを1/8に低減させることもできる。中間出力データ要素の精度が(24ビットから16ビットに)低減されるが、低減された精度は、特定のアプリケーションにとって依然として許容可能であり得、低減された精度の影響は、ニューラルネットワーク層の間で混合精度を有するニューラルネットワークトポロジーを有することによってさらに軽減することができる。
【】
図15Cにおいて、MACエンジン1300は、8ビットの入力データ要素と2ビットの3値重み要素(-1、0、+1)との間で畳み込み演算を実施して、16ビットの中間出力データ要素を生成することができ、各中間出力データ要素は、入力データ要素と重み要素との間の乗算積の和によって生成され、続いて、各中間出力データ要素に対して後処理演算(例えば、BNorm及びReLU)を実施して、8ビットの出力データ要素を生成する。2ビットの3値重み要素(重み要素を表すために3つの代替レベルを提供する)は、重みを表す際に2値重み(2つの代替レベルを提供する)よりも正確であり得る。また、MACエンジン1300は、重み要素が1である場合に入力データ要素を単に転送し、重み要素が-1である場合に入力データ要素の負の表現を転送し、重み要素がゼロである場合にゼロを転送することにより、入力データ要素と重み要素との間の乗算積を生成することができ、これにより、複雑さ及び電力を低減し、演算速度を増加させることができる。
【】
図15Dにおいて、MACエンジン1300は、8ビットの入力データ要素と2つのセットの2ビットの3値重み要素(-1、0、+1)との間で畳み込み演算を実施して、16ビットの中間出力データ要素を生成することができ、各中間出力データ要素は、入力データ要素と2つのセットの重み要素との間の乗算積の和によって生成され、2つのセットの重み要素から生成された中間出力データ要素が合算される。次いで、合算された中間出力データ要素が後処理(例えば、BNorm及びReLU)され、8ビットの出力データ要素を生成することができる。2つのセットの2ビットの3値重み要素(9つの代替レベルを提供する)を用いることで、重みを表す際に1つのセットの2ビットの3値重み要素(3つの代替レベルを提供する)を用いるよりも正確であり得、3値重み要素を用いるMACエンジン1300における簡略化された演算の同様の利益が提供される。
【】
図16は、例えば、図14のチャネル優先のシーケンスにおける例示の畳み込み演算をサポートするためにMACエンジン1300によって実施される算術演算の例を図示する。図16に示す算術演算は、MACエンジン1300によって1クロックサイクルで実施され得る。図16を参照すると、MACエンジン1300は、各クロックサイクルで、4つの入力値X[0]、X[1]、X[2]、及びX[3]を受け取ることができ、4つの入力値の各々が、異なる入力チャネルに関連付けられている。MACエンジン1300はまた、例えば、(出力チャネル0及び入力チャネル0に関連付けられた)W[0、0]、(出力チャネル1及び入力チャネル3に関連付けられた)W[1、3]等の、異なる入力チャネル及び出力チャネルに関連付けられた16個の重み値を受け取ることができる。図16の例示の演算は、8ビットの入力データ要素及び2ビットの重み要素、又は4ビットの入力データ要素及び4ビットの重み要素に対して実施され得る。後述するように、入力精度及び重み精度に応じて、演算エンジン524は、8ビットの入力データ要素又は4ビットの入力データ要素を受け取ることができる。また、演算エンジン524は、4ビットの重み要素、2ビットの重み要素、8ビットの重み要素などを受け取ることもできる。演算エンジン524は、入力データ及び重み構成1310と精度構成1312とにより、重み/データを分割して図16の例示の演算を実施するように構成され得る。例えば、演算エンジン524は、4ビットの重みを2つの2ビットの重みに分割し、2セットの重みに対して8ビットのデータ及び2ビットの重み演算を実施することができ、各重み値は、単一の4ビットの重み要素、2つの2ビットの重み要素を含み得るか、又は8ビットの重み要素の半分であり得る。
【】
MACエンジン1300は、入力データX[0]~X[3]と、特定の出力チャネル及びX[0]~X[3]の入力チャネルに関連付けられた重みとの乗算に基づいて、異なる出力チャネルに各々が関連付けられた、中間出力データ要素Y[0]、Y[1]、Y[2]、及びY[3]の各々について、部分和を生成することができる。例えば、中間出力データ要素Y[0]について、MACエンジン1300は、W[0、3]とX[3]との間の乗算積、W[0、2]とX[2]との間の乗算積、W[0、1]とX[1]との間の乗算積、及びW[0、0]とX[0]との間の乗算積を演算し、乗算積を中間出力データレジスタMACreg0~MACreg3のうちの1つからの前の部分和Y0’に合算することによって累算演算を実施して、新しい部分和Y0を生成することができ、新しい部分和Y0は、前の部分和Y0’の代わりにMACreg0~MACreg3に格納され得る。加算は、飽和加算であり得る。畳み込み演算の第1の命令の場合、バイアス値(例えば、Bias0)を、中間出力データレジスタMACreg4~MACreg7の別のセットからマルチプレクサ(図16において、MUXと標示されている)を介してMACエンジン1300にフェッチすることができ、乗算積は、部分和を生成するためにバイアス値に加算され得る。そのような構成により、後続の後処理演算において加算を実施することを回避することができ、これにより、後処理演算を高速化することができる。第1の命令が実行された後、畳み込み演算の後続の命令について、マルチプレクサは、乗算積を前の部分和に加算するために、MACreg0~MACreg3の出力をMACエンジン1300に配路(route)することができる。
【】
MACエンジン1330は、乗算演算1602などの16個の乗算演算を実施して、1クロックサイクルで乗算積を生成することができる。いくつかの例において、MACエンジン1330は、16個の乗算演算を並列に実施するために16個の乗算回路を含み得る。MACエンジン1330はまた、新しい部分和をY’[0]に加算することにより、MACレジスタに格納された前の部分和Y’[0]を更新することができる。
【】
下記の表1は、演算エンジン524によってサポートされる入力精度及び重み精度のセットを示す。各行はまた、所与の入力精度及び重み精度について、クロックサイクル毎に演算エンジン524によって処理される入力データ要素の数と、クロックサイクル毎に演算エンジン524によって提供される出力データ要素の数と、クロックサイクル毎に演算エンジン524によって実施される乗累算(MAC)演算の数とを示す。サイクル毎のMACの数は、処理される入力データ要素の数とクロックサイクル毎に生成される出力データ要素の数との積に等しくし得る。
【】
いくつかの例において、後述するように、MACエンジン1330は、32個の4ビット2ビット乗算回路の配列を含み得、各乗算回路は、クロックサイクル毎に4ビットの数と2ビットの数との間の乗算演算(又はビット単位演算)を実施することができ、32個の乗算回路は、4ビットの数と2ビットの数との間の32個の乗算を実施することができる。
【】
8ビットの入力データ要素及び2ビットの重み要素(2値又は3値)の場合、各入力データ要素は2つの4ビットのデータ値に分割され得、2つの乗算回路が、1つの8ビットのデータ要素及び1つの2ビットの重み要素について演算を実施する。したがって、32個の乗算回路の配列は、クロックサイクル毎に8ビットの入力データ及び2ビットの重みの32/2の演算動作を実施することができる。
【】
8ビットの入力データ要素及び4ビットの重み要素の場合、各入力データ要素は2つの4ビットのデータ値に分割され得、各4ビットの重み要素は2つの2ビットの重み値に分割され得、4つの乗算回路が、1つの8ビットのデータ要素及び1つの4ビットの重み要素について演算を実施する。したがって、32個の乗算回路の配列は、クロックサイクル毎に8ビットの入力データ及び4ビットの重みの32/(2×2)個の演算動作を実施することができる。
【】
8ビットの入力データ要素及び8ビットの重み要素の場合、各入力データ要素は2つの4ビットのデータ値に分割され得、各重み要素は4つの2ビットの重み値に分割され得、8つの乗算回路が、1つの8ビットのデータ要素及び1つの8ビットの重み要素について演算を実施する。したがって、32個の乗算回路の配列は、クロックサイクル毎に8ビットの入力データ及び4ビットの重みの32/(2×4)個の演算動作を実施することができる。
【】
4ビットの入力データ要素及び4ビットの重み要素の場合、各重み要素は2つの2ビットの重み値に分割され得、2つの乗算回路が、1つの4ビットのデータ要素及び1つの2ビットの重み要素について演算を実施する。したがって、32個の乗算回路の配列は、クロックサイクル毎に4ビットの入力データ及び2ビットの重みの32/2個の演算動作を実施することができる。
【】
2値重み及び2値データの場合、MACエンジン1330(又は演算エンジン524)は、2値重みを2ビットの重みに内部的に変換することができる。後述するように、各乗算回路は、2値重みと2値データとの間で4ビット単位の演算動作(例えば、XNOR)を実施することができ、32個の乗算回路の配列は、クロックサイクル毎に2値重み及び2値データの128個の演算動作を実施することができる。
【表】
【】
図17は、MACエンジン1300の一部としり得る例示の乗算回路1700の動作を図示する。例示の乗算回路1700は、乗算演算1602など、図16に示されている乗算演算を実施することができる。乗算回路1700は、図16のX[0]~X[3]のうちの1つであり得る8ビットの入力値D[7:0]と、図16の重み値のうちの1つ(例えば、W[0、0])であり得る4ビットの重み値W[3:0]とを受け取ることができる。入力値D及び重み値Wの各々は、符号付き又は符号なしであり得る。乗算回路1700は、2つの4ビット×2ビット乗算回路1702及び1704を含み得る。図17において、乗算回路1702及び1704の論理演算は、命令の形態で表され、命令は、乗算回路1702及び1704を表す論理回路に統合され(及び論理回路を表し)得る。
【】
乗算回路1700は、乗算器構成1710を受け取って、種々のモードで乗算演算を実施するように乗算回路1702及び1704の各々を構成することができる。乗算器構成1710は、精度構成1312の一部とすることができ、D[7:4]が符号付きであるかどうかを示す第1のフラグ(例えば、D[7:4]は、フラグがアサートされる場合又は論理1を表す場合に符号付きであり、フラグがデアサートされる場合又は論理0を表す場合に符号なしである)と、D[3:0]が符号付きであるかどうかを示す第2のフラグ(両方とも入力精度に基づく)と、W[3:2]が符号付きであるかどうかを示す第3のフラグと、W[1:0]が符号付きであるかどうかを示す第4のフラグ(両方とも重み精度に基づく)と、2値モードで動作するかどうかを示す第5のフラグと、を含み得る。乗算回路1702及び1704は、精度構成1312が、入力データ及び重みの両方が1ビット(2値)精度を有することを示す場合、2値モードで動作することができる。
【】
乗算器構成1710が、2値モードが無効であることを示す場合、乗算回路1702は、4ビットのLSBのD[3:0]と2ビットのLSBのW[1:0]との間で乗算演算を実施することにより、出力N0を7ビット符号付き数として生成することができ、乗算回路1704は、4ビットのMSBのD[7:4]と2ビットのMSBのW[3:2]との間で乗算演算を実施することにより、出力N1を7ビットの符号付き数として生成することができる。乗算器構成1710に基づいて、N0についての乗算演算は、D[3:0]又はW[1:0]のうちの少なくとも1つが符号付きである場合、符号付き乗算演算であり得、N1についての乗算演算は、D[7:4]又はW[3:2]のうちの少なくとも1つが符号付きである場合、符号付き乗算演算であり得る。
【】
一方、乗算器構成1710が、2値モードが有効であることを示す場合、乗算回路1702は、D[3:0]とW[3:0]との間でビット単位のXNOR演算(例えば、図17の
)を実施し、ビット単位のXNOR出力を合算することにより、8ビット出力N0を生成することができる。また、乗算回路1704は、D[7:4]とW[3:0]との間でビット単位のXNOR演算を実施し、ビット単位のXNOR出力を合算することにより、8ビット出力N1を生成することができる。XNOR演算の真理値表を下記に示し、-1は論理0で表され、+1は論理1で表される。表から分かるように、このように表された2つの2値数の乗算は、XNOR演算を用いて演算され得る。
【表】
【】
MACエンジン1300は、表1に記載された入力精度及び重み精度の或る範囲について中間出力データ要素を生成するためにMAC演算を実施するための、複数の演算ユニットを含み得、複数の演算ユニットの各々が、乗算回路1700及び他の論理回路のセットを含む。図18は、演算ユニット1800の一例を図示する。図18を参照すると、演算ユニット1800は、図18に示すX0、X1、X2、及びX3をそれぞれ受け取るための、4つの演算データ入力を有することができる。演算ユニット1800はまた、図18に示すW0、W1、W2、及びW3をそれぞれ受け取るための、4つの演算重み入力を有する。演算ユニット1800はまた、1700a、1700b、1700c、及び1700dを含む4つの乗算回路1700を含む。乗算回路1700aの入力は、第1の演算データ入力及び第1の演算重み入力に結合されている。乗算回路1700bの入力は、第2の演算データ入力と第2の演算重み入力とに結合されている。乗算回路1700cの入力は、第3の演算データ入力と第3の演算重み入力とに結合されている。乗算回路1700dの入力は、第4の演算データ入力と第4の演算重み入力とに結合されている。上述したように、各乗算回路1700は2つの7ビット出力N0及びN1を生成する。乗算回路1700aは、7ビット出力N0a、N1aを生成し、乗算回路1700bは、7ビット出力N0b、N1bを生成し、乗算回路1700cは、7ビット出力N0c、N1cを生成し、乗算回路1700dは、7ビット出力N0d、N1dを生成する。また、上述したように、各乗算回路1700a~dは乗算器構成1710を受け取る。
【】
演算ユニット1800はまた、加算器1802a、1802b、及び1802cと、加算器1804a、1804b、及び1804cとを含む。加算器1802a、1802b、及び1802cは、N1aと、N1bと、N1cと、N1dとの和をMAC_Lとして生成し、MAC_Lは、9ビットを有し、非2値モードで動作するときに符号付き数として表される。また、加算器1804a、1804b、及び1804cは、N0aと、N0bと、N0cと、N0dとの和をMAC_Rとして生成し、MAC_Rも、9ビットを有し、非2値モードで符号付き数として表される。演算ユニット1800はまた、ビットシフタ回路1806を含み、ビットシフタ回路1806は、シフト制御1808において特定された数のビットだけMAC_Lの左シフトを実施してMAC_L’を生成することができる。演算ユニット1800は、構成レジスタ528cからシフト制御1808を受け取ることができる。後述するように、左ビットシフトの量は、入力精度及び重み精度に基づく。また、演算ユニット1800は、MAC RとMAC L’との和をMAC outとして生成する加算器1809を含み、MAC outは、13ビットを有し、MAC出力として非2値モードで符号付き数として表すことができる。MAC_L及びMAC_RもMAC出力であり得る。
【】
演算ユニット1800はまた、累算器1810を含み、累算器1810は、古い部分和としてMACreg in(18ビット)を受け取り、古い部分和にMAC出力を加算することによって古い部分和を更新して新しい部分和MACreg outを生成することができる。図19は、累算器1810の例示の内部構成要素及びそれらの動作を示す。図19において、累算器1810の論理演算は、命令の形態で表され、命令は、累算器1810を表す論理回路に統合され(及び論理回路を表し)得る。
【】
図19を参照すると、累算器1810は2つの加算器1902及び1904を含み得、2つの加算器の各々が9ビット加算器であり得る。MACエンジン1300が2値モードで動作しない場合、加算器1902及び1904は、18ビット加算器を形成することができ、18ビット加算器は、13ビットのMAC outを18ビットの古い部分和に加算することによって古い部分和(MACreg_in)を更新する。加算器1904は、まず、MAC_outの9ビットのLSBとMACreg_inとの間で9ビットの加算を実施し、次いで、MAC outのMSBとMACreg_inのMSBとの間の加算のために、繰り上げ(もしある場合)を加算器1902に伝搬して、18ビットのMACreg_outを生成することができる。加算/合算は、飽和加算とすることができ、次式によって表すことができる。
MACreg_out[17:0]=Saturate((MACreg_in[17:0]+MAC_out[12:0]),18bits) (式2)
【】
一方、MACエンジン1300が2値モードで動作する場合、N0a、N0b、N0c、N0dの各々及びN1a、N1b、N1c、N1dの各々は、最大値4をとることができ、MAC_L及びMAC_Rは、各々最大値16をとることができる。加算器1902及び1904は、2つの別個の9ビット加算器とし得る。加算器1902は、MACreg_inの9ビットのMSBとMAC_Lの6ビットのLSBとを合算することによってMACreg_outの9ビットのMSBを生成することができる。加算器1904は、MACreg_inの9ビットのLSBとMAC Rの6ビットのLSBとを合算することによって、MACreg_outの9ビットのLSBを生成することができる。加算器1904から加算器1902への繰り上げがないので、加算器1902及び1904は、加算を並列に実施し、部分和の更新を高速化することができる。
【】
図20A及び図20Bは、図18の演算ユニット1800を含むMACエンジン1300を示す概略図である。図20A及び図20Bを参照すると、MACエンジン1300は、演算ユニット1800a、1800b、1800c、及び1800dを含む。MACエンジン1300は、入力データマルチプレクサ1306から、8ビットの入力データIN0、IN1、IN2、及びIN3をそれぞれ受け取るため、第1、第2、第3、及び第4のMACデータ入力を有する。各演算ユニットの第1の演算データ入力は、(IN0を受け取るために)第1のMACデータ入力に結合されている。各演算ユニットの第2の演算データ入力は、(IN1を受け取るために)第2のMACデータ入力に結合されている。各演算ユニットの第3の演算データ入力は、(IN2を受け取るために)第3のMACデータ入力に結合されている。各演算ユニットの第4の演算データ入力は、(IN3を受け取るために)第4のMACデータ入力に結合されている。入力データマルチプレクサ1306は、Din0又はDin1入力データレジスタのうちの1つから入力データを選択的に転送し、D4モード又はD8モードに応じて、入力データレジスタに格納された全てのビット(例えば、4つの8ビットの入力データを含む32ビット)又はビットの半分の複製(16ビット)を転送することができる。例えば、D8モードにおいて、入力データマルチプレクサ1306は、(入力チャネル0に関連付けられた)X0をIN0として、(入力チャネル1に関連付けられた)X1をIN1として、(入力チャネル2に関連付けられた)X2をIN2として、(入力チャネル3に関連付けられた)X3をIN3として転送することができる。D4モードにおいて、入力データマルチプレクサ1306は、X2ビットの下半分(LSB)の複製をIN0として、X2ビットの上半分(MSB)の複製をIN1として、X3ビットの下半分の複製をIN2として、X3ビットの上半分の複製をIN3として転送することができる。入力データマルチプレクサ1306はまた、X0ビットの下半分の複製をIN0として、X0ビットの上半分の複製をIN1として、X1ビットの下半分の複製をIN2として、X1の上半分の複製をIN3として転送することができる。
【】
また、MACエンジン1300は、第1、第2、第3、及び第4のMAC重み入力のグループを含む。各演算ユニットは、第1、第2、第3、及び第4のMAC重み入力のそれぞれのグループに結合されており、第1の演算重み入力はグループの第1のMAC重み入力に結合され、第2の演算重み入力はグループの第2のMAC重み入力に結合され、第3の演算重み入力はグループの第3のMAC重み入力に結合され、第4の演算重み入力はグループの第4のMAC重み入力に結合されている。各演算ユニットは、重みマルチプレクサ1304から4つの4ビットの重みを受け取ることができる。例えば、演算ユニット1800aは、演算ユニット1800aの、それぞれの、第1、第2、第3、及び第4の演算重み入力において、4ビットの重みW0a、W1a、W2a、及びW3aを受け取る。演算ユニット1800bは、演算ユニット1800bの、それぞれの、第1、第2、第3、及び第4の演算重み入力において、4ビットの重みW0b、W1b、W2b、及びW3bを受け取る。演算ユニット1800cは、演算ユニット1800cの、それぞれの、第1、第2、第3、及び第4の演算重み入力において、4ビットの重みW0c、W1c、W2c、及びW3cを受け取る。また、演算ユニット1800dは、演算ユニット1800dの、それぞれの、第1、第2、第3、及び第4の演算重み入力において、4ビットの重みW0d、W1d、W2d、及びW3dを受け取る。図20において、第1、第2、第3、及び第4のMAC重み入力の第1のグループが、それぞれ、W0a、W1a、W2a、及びW3aを受け取ることができる。第1、第2、第3、及び第4のMAC重み入力の第2のグループが、それぞれ、W0b、W1b、W2b、及びW3bを受け取ることができる。第1、第2、第3、及び第4のMAC重み入力の第3のグループが、それぞれ、W0c、W1c、W2c、及びW3cを受け取ることができる。第1、第2、第3、及び第4のMAC重み入力の第4のグループが、それぞれ、W0d、W1d、W2d、及びW3dを受け取ることができる。
【】
重みマルチプレクサ1304は、重み-0レジスタ又は重み-1レジスタのうちの1つから重みを選択的に転送することができる。D4モードにおいて、演算ユニット1800a及び1800bは、選択された重みレジスタの32個の上半分のビットを受け取ることができ、演算ユニット1800c及び1800dは、選択されたレジスタの32個の下半分のビットを受け取ることができる。D8モードにおいて、演算ユニット1800a及び1800bは、選択された重みレジスタの上半分のビットの半分の複製(16ビット)を受け取ることができ、演算ユニット1800c及び1800dは、選択された重みレジスタの下半分のビットの半分の複製(16ビット)を受け取ることができる。演算ユニット1800a~dは、中間出力データ要素を1つのMACレジスタに格納することができ、各中間出力データ要素は18ビットを有することができる。
【】
図20A及び図20Bはまた、MACエンジン1300又は後処理エンジン1302の一部とし得るデータマージ回路2002を図示する。後述するように、或る入力精度及び重み精度について、演算ユニット1800a~dの一部又は全ての出力をマージして、特定の中間出力データ要素を生成することができる。データマージ回路2002は、ビットシフタ2004a、2004b、及び2006を含む。ビットシフタ2004aは、演算ユニット1800aの18ビット出力に対して2ビットの左シフトを実施するように構成されており、ビットシフタ2004bは、演算ユニット1800cの18ビット出力に対して2ビットの左シフトを実施するように構成されている。データマージ回路2002はまた、加算器2008a、2008b、及び2030を含む。加算器2008aは、演算ユニット1800aの出力の左シフトバージョンを演算ユニット1800bの出力に加算して、部分和2020aを生成することができる。加算器2008bは、演算ユニット1800cの出力の左シフトバージョンを演算ユニット1800dの出力に加算して、部分和2020bを生成することができる。ビットシフタ2006は、部分和2020aに対して4ビットの左シフトを実施するように構成されている。データマージ回路2002はまた、部分和2020aの左シフトバージョンを部分和2020bに加算することによって部分和2032を生成するため、加算器2030を含む。MACレジスタマルチプレクサ1303は、演算ユニット1800a~1800dの18ビット出力と、部分和2020a、2020b、及び2032とを受け取り、後述するように、入力精度及び重み精度に基づいて、それらのうちの1つを選択してMACレジスタに格納することができる。
【】
図21A~図21Fはまた、異なる入力精度及び重み精度を伴うMAC演算をサポートするため、演算エンジン1800a~d、データマージ回路2002、重みマルチプレクサ1304、入力データマルチプレクサ1303、及びMACレジスタマルチプレクサ1303の異なる構成を図示する。
【】
図21A-1及び図21A-2は、各入力データ要素が8ビットの数であり、各重み要素が2ビットの数である、例示の構成を図示する。入力データマルチプレクサ1306は、D8モードで動作し、4つの8ビットの入力データ要素を含む32ビットの入力データを各サイクルで提供することができる。2ビットの重み要素は、3値重み(-1、0、1)であり得るか、又は1ビットの2値重みから拡張され得る(例えば、+1がビット01にマッピングされ、-1がビット11にマッピングされる)。また、重みマルチプレクサ1304は、D8モードで動作することができ、32ビットの重み(16×2ビットの重み要素を含む)を提供するために、重みレジスタにおける格納された重み要素の半分を複製する。演算ユニット1800aは、第1、第2、第3、及び第4の演算データ入力において4つの8ビットの入力データ要素を受け取り、第1、第2、第3、及び第4の重み入力において2ビットの重み要素の4つの複製を受け取ることができる。演算ユニット1800aは、Y0などの中間出力データ要素のうちの1つについての部分和を下記のように演算することができる。
Y0=(W0×X0H+W1×X1H+W2×X2H+W3×X3H)<<4+(W0×X0L+W1×X1L+W2×X2L+W3×X3L) (式3)
【】
式(3)において、W0、W1、W2及びW3の各々は、2ビットの重み要素である。X0、X1、X2、X3は各々、8ビットの入力データ要素である。X0H、X1H、X2H、及びX3Hは、それぞれ、X0、X1、X2、及びX3の4ビットのMSB(D[7:4]ビットとしても表される)であり、一方、X0L、X1L、X2L、及びX3Lは、それぞれ、X0、X1、X2、及びX3の4ビットのLSB(D[3:0]ビットとしても表される)である。(演算ユニット1800aの)乗算回路1700aは、W0×X0HをN0aとして、W0×X0LをN0bとして生成し、乗算回路1700bは、W1×X1HをN1aとして、W1×X1LをN1bとして生成し、乗算回路1700cは、W2×X2HをN2aとして、W2×X2LをN2bとして生成し、乗算回路1700dは、W3×X3HをN3aとして、W3×X3LをN3bとして生成する。シフト制御1808は、MAC_Lを4ビットだけ左シフトするようにビットシフタ回路1806aを制御することができる。MACレジスタマルチプレクサ1303は、累算器1810aの出力をMACレジスタに選択的に接続し、データマージ回路2002を迂回することができる。
【】
図21B-1及び図21B-2は、各入力データ要素が4ビットの数であり、各重み要素が4ビットの数である、例示の構成を図示する。入力データマルチプレクサ1306は、D4モードで動作し、4つの4ビットの入力データ要素を含む16ビットの入力データ(例えば、Din0/Din1レジスタ内のビットの半分を複製することによる)を各サイクルで提供することができる。また、重みマルチプレクサ1304もD4モードで動作することができ、64ビットの重み(16×4ビットの重み要素を含む)を提供するために、重みレジスタにおける格納された重み要素の全てを提供する。演算ユニット1800aは、第1、第2、第3、及び第4の演算データ入力において4ビットのX0、X1、X2、X3(各々D[3:0]ビットとして表される)の複製を受け取り、第1、第2、第3、及び第4の演算重み入力において4つの4ビットの重み要素を受け取ることができる。演算ユニット1800aは、Y0についての部分和を下記のように演算することができる。
Y0=(W0H×X0+W1H×X1+W2H×X2+W3H×X3)<<2+(W0L×X0+W1L×X1+W2L×X2+W3L×X3) (式4)
【】
式4において、W0、W1、W2、及びW3の各々は、4ビットの重み要素である。X0、X1、X2、及びX3は、各々4ビットの入力データ要素である。W0H、W1H、W2H、及びW3Hは、それぞれ、W0、W1、W2、及びW3の2ビットのMSBであり、一方、W0L、W1L、W2L、及びW3Lは、それぞれ、W0、W1、W2、及びW3の2ビットのLSBである。乗算回路1700aは、X0及びX4を8ビットの入力として、W0を4ビットの入力として(D4モードで動作する入力データマルチプレクサ1306から)受け取り、X0×W0HをN0aとして、X4×W0LをN0bとして生成する。また、乗算回路1700bは、X1×W1HをN1aとして、X5×W1LをN1bとして生成し、乗算回路1700cは、X2×W2HをN2aとして、X6×W2LをN2bとして生成し、乗算回路1700dは、X3×W3HをN3aとして、X7×W3LをN3bとして生成する。シフト制御1808は、MAC_Lを2ビットだけ左シフトするようにビットシフタ回路1806aを制御することができる。MACレジスタマルチプレクサ1303は、累算器1810aの出力をMACレジスタに選択的に接続し、データマージ回路2002を迂回することができる。
【】
後続のサイクル(図21B-1及び図21B-2に図示せず)において、演算ユニット1800aは、第1、第2、第3、及び第4の演算重み入力において、4ビットのX4、X5、X6、X7の複製と、4つの4ビットの重み要素W4、W5、W6、及びW7とを受け取り、式2に基づいて部分和を演算し、部分和をY0に加算することができる。
【】
図21C-1及び図21C-2は、各入力データ要素が4ビットの数であり、各重み要素が2ビットの数である、例示の構成を図示する。入力データマルチプレクサ1306は、D8モードで動作し、8つの4ビットの入力データ要素を含む32ビットの入力データを各サイクルで提供することができる。また、重みマルチプレクサ1304は、D4モードで動作することもでき、64ビットの重み(32×2ビットの重み要素を含む)を提供するために、重みレジスタにおける格納された重み要素の全てを提供する。演算ユニット1800aは、8つの2ビットの重み要素を、それぞれの第1、第2、第3、及び第4の重み入力において2つの2ビットの重み要素と共に受け取ることができる。演算ユニット1800aは、8つの4ビットの入力データ要素を、それぞれの第1、第2、第3、及び第4の入力データ入力において2つの4ビットの入力データ要素と共に受け取ることができる。演算ユニット1800aは、Y0についての部分和を下記のように演算することができる。
Y0=(W0×X0+W2×X2+W4×X4+W6×X6)+(W1×X1+W3×X3+W5×X5+W7×X7) (式5)
【】
式5において、W0、W1、W2、及びW3の各々は、2ビットの重み要素である。X0、X1、X2、X3、X4、X5、X6、及びX7は各々、4ビットの入力データ要素である(D[3:0]ビットとして表される)。乗算回路1700aは、X0及びX1を8ビットの入力として、A0及びA1を4ビットの入力として受け取り、A0×X0をN0aとして、A1×X1をN0bとして生成する。また、乗算回路1700bは、A2×X2をN1aとして、A3×X3をN1bとして生成し、乗算回路1700cは、A4×X4をN2aとして、A5×X5をN2bとして生成し、乗算回路1700dは、A6×X6をN3aとして、A7×X7をN3bとして生成する。シフト制御1808は、MAC_Lを左シフトしないようにビットシフタ回路1806aを制御することができる。したがって、図21C-1及び図21C-2においてビットシフタ回路1806aが省略されている。MACレジスタマルチプレクサ1303は、累算器1810aの出力をMACレジスタに選択的に接続し、データマージ回路2002を迂回することができる。
【】
図21D-1及び図21D-2は、各入力データ要素が8ビットの数であり、各重み要素が4ビットの数である、例示の構成を図示する。入力データマルチプレクサ1306は、D8モードで動作し、4つの8ビットの入力データ要素を含む32ビットの入力データを各サイクルで提供することができる。また、重みマルチプレクサ1304もD8モードで動作することができ、64ビットの重み(8×4ビットの重み要素の複製を含む)を提供するために、重みレジスタにおける格納された重み要素の半分を複製する。演算ユニット1800の各々は、4ビットの重み要素の2ビットの複製の4セットと、4つの8ビットの入力データ要素とを受け取ることができる。演算ユニット1800a、1800b、1800c、及び1800dは、Y0及びY1についての部分和を下記のように演算することができる。
Y0H=(W0H×X0H+W1H×X1H+W2H×X2H+W3H×X3H)<<4+(W0H×X0L+W1H×X1L+W2H×X2L+W3H×X3L) (式6)
Y0L=(W0L×X0H+W1L×X1H+W2L×X2H+W3L×X3H)<<4+(W0L×X0L+W1L×X1L+W2L×X2L+W3L×X3L) (式7)
Y0=Y0H<<2+Y0L (式8)
Y1H=(W4H×X0H+W5H×X1H+W6H×X2H+W7H×X3H)<<4+(W4H×X0L+W5H×X1L+W6H×X2L+W7H×X3L) (式9)
Y1L=(W4L×X0H+W5L×X1H+W6L×X2H+W7L×X3H)<<4+(W4L×X0L+W5L×X1L+W6L×X2L+W7L×X3L) (式10)
Y1=Y1H<<2+Y1L (式11)
【】
式6~式11において、W0、W1、W2、W3、W4、W5、W6、及びW7の各々は、4ビットの重み要素である。X0、X1、X2、及びX3は各々、8ビットの入力データ要素である。W0H、W1H、W2H、W3H、W4H、W5H、W6H、W7Hは、それぞれ、W0、W1、W2、W3、W4、W5、W6、及びW7の2ビットのMSBであり、一方、W0L、W1L、W2L、W3L、W4L、W5L、W6L、W7Lは、それぞれ、W0、W1、W2、W3、W4、W5、W6、及びW7の2ビットのLSBである。また、X0H、X1H、X2H、及びX3Hは、それぞれ、X0、X1、X2、及びX3の4ビットのMSB(D[7:4]ビットとしても表される)であり、一方、X0L、X1L、X2L、及びX3Lは、それぞれ、X0、X1、X2、及びX3の4ビットのLSB(D[3:0]ビットとしても表される)である。
【】
複数の演算ユニット1800が、Y0H及びY0Lの演算に関与し得る。例えば、演算ユニット1800aの第1の演算重み入力は、W0Hの複製を受け取ることができ、演算ユニット1800aの第2の演算重み入力は、W1Hの複製を受け取ることができ、演算ユニット1800aの第3の演算重み入力は、W2Hの複製を受け取ることができ、演算ユニット1800aの第4の演算重み入力は、W3Hの複製を受け取ることができる。また、演算ユニット1800bの第1の演算重み入力は、W0Lの複製を受け取ることができ、演算ユニット1800bの第2の演算重み入力は、W1Lの複製を受け取ることができ、演算ユニット1800bの第3の演算重み入力は、W2Lの複製を受け取ることができ、演算ユニット1800bの第4の演算重み入力は、W3Lの複製を受け取ることができる。
【】
また、演算ユニット1800cの第1の演算重み入力は、W4Hの複製を受け取ることができ、演算ユニット1800cの第2の演算重み入力は、W5Hの複製を受け取ることができ、演算ユニット1800cの第3の演算重み入力は、W6Hの複製を受け取ることができ、演算ユニット1800cの第4の演算重み入力は、W7Hの複製を受け取ることができる。演算ユニット1800dの第1の演算重み入力は、W4Lの複製を受け取ることができ、演算ユニット1800dの第2の演算重み入力は、W5Lの複製を受け取ることができ、演算ユニット1800dの第3の演算重み入力は、W6Lの複製を受け取ることができ、演算ユニット1800dの第4の演算重み入力は、W7Lの複製を受け取ることができる。演算ユニット1800a~1800dの各々の第1の演算データ入力は、X0を受け取ることができ、演算ユニット1800a~1800dの各々の第2の演算データ入力は、X1を受け取ることができ、演算ユニット1800a~1800dの各々の第3の演算データ入力は、X2を受け取ることができ、演算ユニット1800a~1800dの各々の第4の演算データ入力は、X3を受け取ることができる。
【】
演算ユニット1800aは、W0H×X0H+W1H×X1H+W2H×X2H+W3H×X3H及びW0H×X0L+W1H×X1L+W2H×X2L+W3H×X3Lを演算することができ、演算ユニット1800bは、W0L×X0H+W1L×X1H+W2L×X2H+W3L×X3H及びW0L×X0L+W1L×X1L+W2H×X2L+W3H×X3Lを演算することができる。各演算ユニットのビットシフタ1806A及び1806Bは、4ビットの左シフトを実施することができる。Y0Hの部分和は、第1のMACレジスタ(例えば、MACreg0)に格納され、Y0Lの部分和は、第2のMACレジスタ(例えば、MACreg1)に格納され得る。また、同じサイクルにおいて、演算ユニット1800cが、W4H×X0H+W5H×X1H+W6H×X2H+W7H×X3H及びW4H×X0L+W5H×X1L+W6H×X2L+W7H×X3Lとを演算して、Y1Hの部分和を生成することができ、演算ユニット1800dが、W4L×X0H+W5L×X1H+W6L×X2H+W7L×X3H及びW4L×X0L+W5L×X1L+W6L×X2L+W7L×X3Lを演算して、Y1Lの部分和を生成することができる。Y1Hの部分和及びY1Lの部分和は、第3のMACレジスタ(例えば、MACreg2)及び第4のMACレジスタ(例えば、MACreg3)に格納され得る。したがって、2つの出力(Y0及びY1)の部分和をサイクル毎に生成することができる。
【】
図21E-1及び図21E-2は、各入力データ要素が8ビットであり、各重み要素が8ビットである、例示の構成を図示する。入力データマルチプレクサ1306は、D8モードで動作し、4つの8ビットの入力データ要素を含む32ビットの入力データを各サイクルで提供することができる。また、重みマルチプレクサ1304もD8モードで動作することができ、64ビットの重み(4×8ビットの重み要素の複製を含む)を提供するため、重みレジスタにおける格納された重み要素の半分を複製する。各演算ユニット1800は、8ビットの重み要素の2ビットの複製の4つのセットと、4つの8ビットの入力データ要素とを受け取ることができる。演算ユニット1800a~1800dは、Y0についての部分和を下記のように演算することができる。
Y0HH=(W0HH×X0H+W1HH×X1H+W2HH×X2H+W3HH×X3H)<<4+(W0HH×X0L+W1HH×X1L+W2HH×X2L+W3HH×X3L) (式12)
Y0HL=(W0HL×X0H+W1HL×X1H+W2HL×X2H+W3HL×X3H)<<4+(W0HL×X0L+W1HL×X1L+W2HL×X2L+W3HL×X3L) (式13)
Y0LH=(W0LH×X0H+W1LH×X1H+W2LH×X2H+W3LH×X3H)<<4+(W0LH×X0L+W1LH×X1L+W2LH×X2L+W3LH×X3L) (式14)
Y0LL=(W0LL×X0H+W1LL×X1H+W2LL×X2H+W3LL×X3H)<<4+(W0LL×X0L+W1LL×X1L+W2LL×X2L+W3LL×X3L) (式15)
Y0=Y0HH<<6+Y0HL<<4+Y0LH<<2+Y0LL (式16)
【】
式12~16において、W0HH、W1HH、W2HH及びW3HHは、それぞれ、W0、W1、W2及びW3のビット[7:6]であり、W0HL、W1HL、W2HL及びW3HLは、それぞれ、W0、W1、W2及びW3のビット[5:4]であり、W0LH、W1LH、W2LH及びW3LHは、それぞれ、W0、W1、W2、及びW3のビット[3:2]であり、W0LL、W1LL、W2LL及びW3LLは、それぞれ、W0、W1、W2、及びW3のビット[1:0]である。また、X0H、X1H、X2H、及びX3Hは、それぞれ、X0、X1、X2、及びX3の4ビットのMSB(D[7:4]ビットとしても表される)であり、一方、X0L、X1L、X2L、及びX3Lは、それぞれ、X0、X1、X2、及びX3の4ビットのLSB(D[3:0]ビットとしても表される)である。また、Y0HH、Y0HL、Y0LH、Y0LLは、それぞれ、Y0のビット[7:6]、ビット[5:4]、ビット[3:2]、ビット[1:0]である。
【】
複数の演算ユニット1800が、Y0HH、Y0HL、Y0LH、及びY0LLの演算に関与し得る。例えば、演算ユニット1800aの第1の演算重み入力は、W0HHの複製を受け取ることができ、演算ユニット1800aの第2の演算重み入力は、W1HHの複製を受け取ることができ、演算ユニット1800aの第3の演算重み入力は、W2HHの複製を受け取ることができ、演算ユニット1800aの第4の演算重み入力は、W3HHの複製を受け取ることができる。また、演算ユニット1800bの第1の演算重み入力は、W0HLの複製を受け取ることができ、演算ユニット1800bの第2の演算重み入力は、W1HLの複製を受け取ることができ、演算ユニット1800bの第3の演算重み入力は、W2HLの複製を受け取ることができ、演算ユニット1800bの第4の演算重み入力は、W3HLの複製を受け取ることができる。
【】
また、演算ユニット1800cの第1の演算重み入力は、W0LHの複製を受け取ることができ、演算ユニット1800cの第2の演算重み入力は、W1LHの複製を受け取ることができ、演算ユニット1800cの第3の演算重み入力は、W2LHの複製を受け取ることができ、演算ユニット1800cの第4の演算重み入力は、W3LHの複製を受け取ることができる。演算ユニット1800dの第1の演算重み入力は、W0LLの複製を受け取ることができ、演算ユニット1800dの第2の演算重み入力は、W1LLの複製を受け取ることができ、演算ユニット1800dの第3の演算重み入力は、W2LLの複製を受け取ることができ、演算ユニット1800dの第4の演算重み入力は、W3LLの複製を受け取ることができる。演算ユニット1800a~1800dの各々の第1の演算データ入力は、X0を受け取ることができ、演算ユニット1800a~1800dの各々の第2の演算データ入力は、X1を受け取ることができ、演算ユニット1800a~1800dの各々の第3の演算データ入力は、X2を受け取ることができ、演算ユニット1800a~1800dの各々の第4の演算データ入力は、X3を受け取ることができる。
【】
演算ユニット1800aは、W0HH×X0H+W1HH×X1H+W2HH×X2H+W3HH×X3H、及びW0HH×X0L+W1HH×X1L+W2HH×X2L+W3HH×X3Lを演算することができ、演算ユニット1800bは、W0HL×X0H+W1HL×X1H+W2HL×X2H+W3HL×X3H、及びW0HL×X0L+W1HL×X1L+W2HL×X2L+W3HL×X3Lを演算することができ、演算ユニット1800cは、W0LH×X0H+W1LH×X1H+W2LH×X2H+W3LH×X3H、及びW0LH×X0L+W1LH×X1L+W2LH×X2L+W3LH×X3Lを演算することができ、演算ユニット1800dは、W0LL×X0H+W1LL×X1H+W2LL×X2H+W3LL×X3H、及びW0LL×X0L+W1LL×X1L+W2LL×X2L+W3LL×X3Lを演算することができる。各演算ユニットのビットシフタ1806a~dは、4ビットの左シフトを実施することができる。Y0HHの第1の部分和は第1のMACレジスタ(例えば、MACreg0)に格納され得、Y0HLの部分和は第2のMACレジスタ(例えば、MACreg1)に格納され得、Y0LHの部分和は第3のMACレジスタ(例えば、MACreg2)に格納され得、Y0LLの部分和は第4のMACレジスタ(例えば、MACreg3)に格納され得る。演算ユニット1800は、Y0HHを符号付き数として演算し、Y0HL、Y0LH、及びY0LLを符号なし数として演算することができる。
【】
図21F、図21G、及び図21Hは、深さ方向畳み込み演算をサポートするための例示の構成を図示する。上述したように、深さ方向畳み込み演算では、中間出力データ要素は、同じチャネルの入力データ要素から生成され得る。深さ方向畳み込み演算をサポートするために、重みマルチプレクサ1304は、異なるチャネルの入力データ要素に対して乗算演算を実施するように割り当てられた或る乗算器にゼロを選択的に転送することができ、そのため、そのような乗算器の出力は、ゼロであり、中間出力データ要素に寄与しない。
【】
図21F-1及び図21F-2は、8ビットの入力データ要素と8ビットの重み要素との間の深さ方向畳み込み演算をサポートするための例示の構成を図示する。深さ方向畳み込み演算をサポートするために、演算ユニット1800a~dは、重みマルチプレクサ1304から、特定のチャネルの非ゼロ重み(例えば、W0HH、W0HL、W0LH、W0LL)と、他のチャネルのゼロ重みとを受け取ることができる。図21Fの構成において、演算ユニット1800a~dは、データマージ回路2002と共に、Y0を下記のように演算することができる。
Y0HH=(W0HH×X0H)<<4+(W0HH×X0L) (式17)
Y0HL=(W0HL×X0H)<<4+(W0HL×X0L) (式18)
Y0LH=(W0LH×X0H)<<4+(W0LH×X0L) (式19)
Y0LL=(W0LL×X0H)<<4+(W0LL×X0L) (式20)
Y0=Y0HH<<6+Y0HL<<4+Y0LH<<2+Y0LL (式21)
【】
図21G-1及び図21G-2は、8ビットの入力データ要素と2ビットの重み要素との間の深さ方向畳み込み演算をサポートするための、例示の構成を図示する。図21G-1及び図21G-2において、演算ユニット1800aは、(第1のチャネルの)Y0を演算するように割り当てられ得、第1の演算重み入力において第1のチャネルの非ゼロ重み(W0)のみを受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができる。演算ユニット1800bは、(第2のチャネルの)Y1を演算するように割り当てられ得、第2の演算重み入力において第2のチャネルの非ゼロ重み(W1)のみを受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができる。また、演算ユニット1800cは、(第3のチャネルの)Y2を演算するように割り当てられ得、第3の演算重み入力において第3のチャネルの非ゼロ重み(W2)のみを受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができる。また、演算ユニット1800dは、(第4のチャネルの)Y3を演算するように割り当てられ得、第4の演算重み入力において第4のチャネルの非ゼロ重み(W3)のみを受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができる。図21Gの構成において、演算ユニット1800a~dは、Y0、Y1、Y2、及びY3を下記のように演算することができる。
Y0=(W0×X0H)<<4+(W0×X0L) (式22)
Y1=(W1×X1H)<<4+(W1×X1L) (式23)
Y2=(W2×X2H)<<4+(W2×X2L) (式24)
Y3=(W3×X2H)<<4+(W3×X3L) (式25)
【】
図21H-1及び図21H-2は、8ビットの入力データ要素と4ビットの重み要素との間の深さ方向畳み込み演算をサポートするための、例示の構成を図示する。図21Hにおいて、演算ユニット1800a及び1800bは、(第1のチャネルの)Y0を演算するように割り当てられ得、第1の演算重み入力において第1のチャネルの非ゼロ重み(W0)のみを受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができる。演算ユニット1800c及び1800dは、(第2のチャネルの)Y1を演算するように割り当てられ得、第2の演算重み入力において第2のチャネルの非ゼロ重み(W1)のみを受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができる。図21Hの構成で、演算ユニット1800a~dは、データマージ回路2002と共に、Y0及びY1を下記のように演算することができる。
Y0H=(W0H×X0H)<<4+(W0H×X0L) (式26)
Y0L=(W0L×X0H)<<4+(W0L×X0L) (式27)
Y1H=(W1H×X1H)<<4+(W1H×X1L) (式28)
Y1L=(W1L×X1H)<<4+(W1L×X1L) (式29)
Y0=Y0H<<2+Y0L (式30)
Y1=Y1H<<2+Y1L (式31)
【】
後続のサイクル(図示せず)において、演算ユニット1800a及び1800bは、第3の演算重み入力において第3のチャネルの非ゼロ重み(W2)を受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができ、演算ユニット1800c及び1800dは、第4の演算重み入力において第4のチャネルの非ゼロ重み(W3)を受け取り、他の演算重み入力において他のチャネルについてのゼロ重みを受け取ることができ、Y2及びY3を下記のように演算することができる。
Y2H=(W2H×X2H)<<4+(W2H×X2L) (式32)
Y2L=(W2L×X2H)<<4+(W2L×X2L) (式33)
Y3H=(W3H×X3H)<<4+(W3H×X3L) (式34)
Y3L=(W3L×X3H)<<4+(W3L×X3L) (式35)
Y2=Y2H<<2+Y2L (式36)
Y3=Y3H<<2+Y3L (式37)
【】
図22A、図22B、及び図22Cは、MACレジスタマルチプレクサ1303、入力データマルチプレクサ1306、及び重みマルチプレクサ1304の内部構成要素の例を図示する。図22Aは、MACレジスタマルチプレクサ1303の例示の内部構成要素を図示する。図22Aを参照すると、MACレジスタマルチプレクサ1303は、デマルチプレクサ回路2200とマルチプレクサ回路2202とを含み得る。デマルチプレクサ回路2200は、演算ユニット1800のセットの出力(4つのMACreg_out、8つのMACreg_outなどの複数のMACreg_out[17:0])とMACレジスタの入力との間に結合されており、マルチプレクサ回路2202は、MACレジスタの出力と演算ユニット1800のセットの入力(複数のMACreg_in[17:0])との間に結合されている。デマルチプレクサ回路2200は、演算ユニット1800の出力をMACレジスタの入力に接続して、演算ユニット1800によって生成された部分和を格納するように、又はバイアス値(Bias0、Bias1、Bias2、及びBias3)をMACレジスタのいくつかに格納するように、演算コントローラ522によって(例えば、サブ命令に基づいて)制御され得る。バイアス値は、後処理演算の一部として部分和に加算され得る。演算コントローラ522は、ニューラルネットワーク層演算の第1のサブ命令を実行することに応答して、バイアス値をMACレジスタに格納するようにデマルチプレクサ回路2200を制御することができる。初期化動作の一部としてバイアス値をMACレジスタに導入することにより、後処理エンジン1302による後処理演算の一部としてバイアスを加えることによって引き起こされるレイテンシが回避され得る。また、マルチプレクサ2202は、特定の演算ユニット1800によって更新するための前の部分和をどのMACレジスタが提供するかを選択するためのサブ命令に基づいて、演算コントローラ522によって制御することもできる。
【】
図22Bは、入力データマルチプレクサ1306の例示の内部構成要素を図示する。図22Bを参照すると、入力データマルチプレクサ1306は、第1の入力データレジスタ(Din0)と第2の入力データレジスタ(Din1)とに結合された入力と、4つの入力データIN0、IN1、IN2、及びIN3を提供するためにMACエンジン1300に結合された出力とを有し得る。入力データマルチプレクサ1306はまた、マルチプレクサ2210、2212と、複製回路2214と、マルチプレクサ2216とを含む。マルチプレクサ2210、2212、及び2216は、制御信号M0、M1、及びM2によって制御され、制御信号M0、M1、及びM2のいくつかが、入力データ及び重み構成1310から導出され得、制御信号M0、M1、及びM2のいくつかが、演算コントローラ522によって提供され得る。例えば、マルチプレクサ2210は、レジスタDin0又はDin1のうちの1つからのデータをIN0、IN1、IN2、及びIN3として選択的に提供するように制御信号M0によって制御され得る。マルチプレクサ2212は、D4モードにおいて、ビットを複製するために、選択されたレジスタの上位16ビット(ビット31~16)又は下位16ビット(ビット15~0)から8ビットを選択することができる。複製回路2214は、選択された8ビット値を2つの4ビット値に分割し、各4ビット値を複製することによって2つの8ビット値を生成する。マルチプレクサ2216は、選択された8ビット値をIN0、IN1、IN2、及びIN3として(D8モードにおいて)転送するように、又はそれぞれの複製された4ビット値を各々が含む8ビット値をIN0、IN1、IN2、及びIN3として転送するように、D4モード又はD8モードに基づいて設定される制御信号M2によって制御され得る。
【】
図22Cは、重みマルチプレクサ1304の例示の内部構成要素を図示する。図22Cを参照すると、重みマルチプレクサ1304は、第1の重みレジスタ(重み-0レジスタ)と第2の重みレジスタ(重み-1レジスタ)とに結合された入力と、第1のグループの重みW0a、W1a、W2a、及びW3aと、第2のグループの重みW0b、W1b、W2b、及びW3bと、第3のグループの重みW0c、W1c、W2c、及びW3cと、第4のグループの重みW0d、W1d、W2d、及びW3dとを提供するためにMACエンジン1300の4つのグループの重み入力に結合された出力とを有することができる。重みマルチプレクサ1304はまた、マルチプレクサ2220、2222と、複製回路2224と、マルチプレクサ2226とを含む。マルチプレクサ2220、2222、及び2226は、制御信号M0、M1、及びM2によって制御され、制御信号M0、M1、及びM2のいくつかが、入力データ及び重み構成1310から導出され得、制御信号M0、M1、及びM2のいくつかが、演算コントローラ522によって提供され得る。例えば、マルチプレクサ2210は、重み-0レジスタ又は重み-1レジスタのうちの1つから64ビットのデータを重みのグループとして選択的に提供するように、制御信号M0によって制御され得る。マルチプレクサ2222は、D8モードにおいて、ビットを複製するために、選択されたレジスタの上位32ビット(Wt1H又はWt0Hのうちの1つ)又は下位32ビット(Wt1L又はWt0Lのうちの1つ)から16ビットを選択することができる。複製回路2224は、選択された32ビット値を2つの16ビット値に分割し、各16ビット値について複製することによって2つの32ビット値を生成する。マルチプレクサ2226は、D4モードにおいて、選択されたレジスタから64ビット値を重みのグループとして転送するように、又はD8モードにおいて16ビット値の複製から2つの32ビット値を重みのグループとして転送するように、D4モード又はD8モードに基づいて設定される制御信号M2によって制御され得る。
【】
加えて、重みマルチプレクサ1304はまた、深さ方向及び平均プーリング論理2228を含む。論理2228は、(例えば、構成1311からの)深さ方向畳み込みイネーブル信号によって有効化されたとき、64ビットの重み-0レジスタ又は重み-1レジスタのうちの1つから8ビットのうちの1つを選択することができ、8ビットを2ビットの4つのグループに分割し、重みグループにゼロをパディングし、重みグループを演算ユニット1800a、1800b、1800c、及び1800dに送信することができる。また、重みマルチプレクサ1304は、入力データ及び重み構成1310からの重み精度に応じて、図21F~図21Hに示されているように、各グループの異なる重みをゼロでパディングすることができる。また、重みマルチプレクサ1304は、(例えば、構成1311からの)平均プーリングイネーブル信号によって有効化されると、図21G-1及び図21G-2のように、重み要素W0、W1、W2、及びW3の複製を、第1、第2、第3、及び第4の重み要素のグループにおいて提供することができ、W0、W1、W2、及びW3の各々は論理1に等しい。
【】
図23は、後処理エンジン1302の例示の内部構成要素を図示する。図23を参照すると、後処理エンジン1302は、後処理回路2302とデータパッキング回路2304とを含む。後処理回路2302は、Y0、Y1、Y2、及びY3などの異なるチャネルの中間出力データをMACレジスタから受け取ることができる。後処理回路2302は、後処理演算を示すサブ命令602に応答して制御信号を生成する演算コントローラ522からの制御信号1305に応答して、中間出力データに対して後処理演算(例えば、BatchNorm、残差層処理など)を実施するために、算術回路及び種々の論理回路などの回路を含む。処理回路2302はまた、入力精度、出力精度、及び重み精度を示す精度構成1312と、出力データビットサイズ/精度を含む後処理演算の種々のパラメータを定義する後処理パラメータ1314とを受け取り、精度構成1312と後処理パラメータ1314とに基づいて後処理演算を構成する。いくつかの例において、処理回路2302は、中間出力データY0、Y1、Y2、及びY3に対して複数の後処理演算を並列に実施して、出力データOut0、Out1、Out2、及びOut3を1クロックサイクルで生成することができる。いくつかの例において、処理回路2302は、上述したように、異なる入力精度及び重み精度について中間出力データ要素を提供するために、図20A及び図20Bのデータマージ回路2002を含み得る。
【】
データパッキング回路2304は、Out0、Out1、Out2、及びOut3などの出力データをDOUTレジスタにおいて格納することができる。いくつかの例において、DOUTレジスタは32ビットを有する。データパッキング回路2304は、DOUTレジスタの特定のビット位置に出力データを格納し、DOUTレジスタが出力データで満たされる(例えば、32ビットの出力データが格納される)ことに応答して、出力データをDOUTレジスタからメモリ512にフェッチして戻すために制御信号2305をロード/ストアコントローラ530に送信するように構成されており、これにより、DOUTレジスタを新しい出力データで上書きすることができる。
【】
具体的には、入力精度、出力精度、及び重み精度の或るセットについて、データパッキング回路2304は、4つの8ビットの出力データ要素Out0、Out1、Out2、及びOut3を1クロックサイクルで生成することができる。データパッキング回路2304は、1クロックサイクル後に4つの8ビットの出力データ要素をDOUTレジスタに格納し、次いで、制御信号2305をロード/ストアコントローラ530に送信することができる。入力、出力、及び重み精度の異なるセットについて、処理回路2302は、4つの4ビットの出力データ要素又は2つの8ビットの出力データ要素など、16ビットの出力データをクロックサイクル毎に生成し得る。そのような場合、処理回路2302は、第1のクロックサイクルの後にDOUTレジスタの第1のビット位置に16ビットの出力データの第1のセットを格納し、次いで、第2のクロックサイクルの後にDOUTレジスタの第2のビット位置に16ビットの出力データの第2のセットを格納することができる。そのような構成により、ロード/ストアコントローラ530が、メモリ512の書込み動作のために最適化され得る特定の数のビット(例えば、32ビット)のチャンクで出力データを送信することが可能となる。そのような構成により、出力データを書き戻す際のメモリ512へのニューラルネットワークプロセス502のアクセスを低減することができ、メモリ使用量及び電力消費を低減することができる。
【】
いくつかの例において、データパッキング回路2304はまた、演算コントローラ522から制御信号2306を受け取り、制御信号2306に応答して制御信号2305を送信することができる。演算コントローラ522は、命令バッファ520からの命令に応答して制御信号2306を生成することができる。
【】
図24は、処理回路2302の内部構成要素の例を図示する。図24を参照すると、処理回路2302は、中間出力データ要素を受け取るためのデータ入力と、出力データ要素を提供するためのデータ出力との間に結合された一連の処理回路を含み得る。処理回路は、乗算回路2402と、ビットシフタ2404と、飽和回路2406と、加算器2408と、クランプ回路2410とを含み得、各々が、中間出力データ要素を処理し出力データ要素を提供するために、算術回路(例えば、加算器及び乗算器)及び/又は論理回路(例えば、ビットシフタ回路、飽和回路、及びクランプ回路のためのマルチプレクサ及びデマルチプレクサを用いて実装されるマッピングテーブルなど)を含み得る。例えば、処理回路2302は、処理回路2302の(例えば、Y0を受け取るための)第1の入力と処理回路2302の(例えば、Out0を提供するための)第1の出力との間に結合された、乗算回路2402a、ビットシフタ2404a、飽和回路2406a、加算器2408a、及びクランプ回路2410aと、処理回路2302の(例えば、Y1を受け取るための)第2の入力と処理回路2302の(例えば、Out1を提供するための)第2の出力との間に結合された、乗算回路2402b、ビットシフタ2404b、飽和回路2406b、加算器2408b、及びクランプ回路2410bと、処理回路2302の(例えば、Y2を受け取るための)第3の入力と処理回路2302の(例えば、Out2を提供するための)第3の出力との間に結合された、乗算回路2402c、ビットシフタ2404c、飽和回路2406c、加算器2408c、及びクランプ回路2410cと、処理回路2302の(例えば、Y3を受け取るための)第4の入力と処理回路2302の(例えば、Out3を提供するための)第4の出力との間に結合された、乗算回路2402d、ビットシフタ2404d、飽和回路2406d、加算器2408d、及びクランプ回路2410dとを含み得る。
【】
処理回路2302はまた、処理回路2302の入力と乗算回路2402a~dの入力との間に結合されたデータ配路回路2412と、クランプ回路2410a~dの出力と処理回路2302の出力との間に結合されたデータ配路回路2414とを含む。後述するように、入力精度、出力精度、及び重み精度に基づいて、データ配路回路2412は、中間出力データ要素を乗算回路に、データ配路回路2414は、クランプ回路の出力を処理回路2302の出力に配路することができる。さらなる処理回路2302は、加算器2408aの出力と加算器2408bの入力との間に結合されたマルチプレクサ回路2416aと、加算器2408cの出力と加算器2404dの入力との間に結合されたマルチプレクサ回路2416cとを含む。マルチプレクサ回路2416は、重み精度に基づいて制御され得る。
【】
各乗算回路2402は、中間出力データ要素をスケーリング係数(図24において、スケール[0]、スケール[1]、スケール[2]、及びスケール[3]と標示されている)でスケーリングするために、2302のそれぞれの入力に結合されている。ビットシフタ2404の入力は、シフトパラメータ(図24において、シフト[0]、シフト[1]、シフト[2]、シフト[3]と標示されている)によって特定される数のビットだけ、スケーリングされた中間出力データ要素の右シフトを実施するために、乗算器の出力に結合されている。飽和回路2406の入力は、ビットシフタの出力に結合されている。飽和回路2406は、データ要素が-215と(215-1)との間にある場合、スケーリングされ右シフトされた中間出力データ要素を転送することができ、そうでない場合、データ要素が-215を下回る場合に下限-215を出力し、データ要素が(215-1)を上回る場合に上限(215-1)を出力することができる。いくつかの例において、飽和回路2406の上限及び下限は、固定され/組み込まれており、プログラム可能ではない可能性がある。加算器2408は、スケーリングされ、右シフトされ、制限された中間出力データ要素に或る値を加算することができる。加算される値は、残差層処理を提供するために、入力データレジスタDIN0/DIN1からフェッチされ得る残差層出力(in[0]、in[1]、in[2]、及びin[3]と標示されている)からのものであり得る。いくつかの例において、加算される値はまた、マルチプレクサ回路2416に対する制御に基づいて、処理回路2302内の別の加算回路2408の出力から得られるものであり得る。加算器2408aの出力は、クランプ回路2410の入力に結合されている。クランプ回路2410は、活性化関数の正規化線形ユニット(ReLU)に基づき得るクランプ関数を実装することができる。クランプ関数はまた、上側値(clamp_highと標示されている)と下側値(clamp_lowと標示されている)との間で出力をクランプ/制限することができる。スケール、シフト、clamp_high、及びclamp_lowの値、並びに接続は、精度構成1312及び/又は後処理パラメータ1314において定義され得る。例えば、異なるclamp_high値及びclamp_low値は、出力データ精度に基づいて下記のように設定され得る。
【表】
【】
各中間出力データ要素Y_n(例えば、Y0、Y1、Y2、及びY3)について、処理回路2302は、出力データ要素Out_n(例えば、Out0、Out1、Out2、及びOut3)を下記の式に基づいて生成することができる。スケーリング及びシフトは、異なるチャネルについて異なることがある。また、図22で上述したように、中間出力データ要素を初期化するために、バイアス値bias[n]がMACレジスタに導入され得る。
Out n=clamp(Scale[n]×(Y_n+bias[n])>>shift[n]、clamp_high、clamp_low) (式38)
【】
図24において、スケール値(例えば、スケール[0]~スケール[3])及びシフト値(例えば、シフト[0]~シフト[3])は、異なるニューラルネットワーク層の間で異なることがあり、重み/パラメータレジスタ529b(並びに重み及びパラメータバッファ526)から受け取られ得る。clamp_high値及びclamp_low値は、異なるニューラルネットワーク層の間で比較的静的であり得、構成レジスタ528dから受け取られ得る。
【】
図25A、図25B、及び図25Cは、異なる入力精度及び重み精度のための後処理演算をサポートするための処理回路2302の異なる構成を図示する概略図である。簡潔にするために、データ配路回路2412及び2414並びにマルチプレクサ回路2416a~cが省略されているが、それらのデータ配路動作は図25A~図25Cに示されている。
【】
図25Aは、図15Dにも示されている、8ビットのデータ及び2-ternary(2T)重みをサポートするための処理回路2302の例示の構成である。図25Aにおいて、データ配路回路2412は、第1の入力を乗算回路2402aに、第2の入力を乗算回路2402bに、第3の入力を乗算回路2402cに、第4の入力を乗算回路2402dに接続することができる。また、2T重み演算をサポートするために、マルチプレクサ回路2416aは、加算器2408aの出力を加算器2408bの入力に配路することができ、そのため、加算器2408bは、飽和回路2406aの(Y0のための)出力と飽和回路2406bの(Y1のための)出力とを加算し、その和をクランプ回路2410bに提供する。また、マルチプレクサ回路2416cは、加算器2408cの出力を加算器2408dの入力に配路することができ、そのため、加算器2408dは、飽和回路2406cの(Y2のための)出力と飽和回路2406dの(Y3のための)出力とを加算し、その和をクランプ回路2410dに提供する。データ配路回路2414は、複製Out0及びOut2を提供するためにクランプ回路2410bの出力を第1及び第3の出力に配路し、複製Out1及びOut3を提供するためにクランプ回路2410dの出力を第2及び第4の出力に配路することができる。いくつかの例において、データパッキング回路2304は、第1のクロックサイクルで処理回路2302によって生成されたOut0又はOut2のうちの1つとOut1又はOut3のうちの1つとを、DOUTレジスタの第1のビット位置に格納し、次いで、第2のクロックサイクルで処理回路2302によって生成されたOut0又はOut2のうちの1つとOut1又はOut3のうちの1つとをDOUTレジスタの第2のビット位置に格納し、次いで、DOUTレジスタからメモリ512への出力データのフェッチを開始するために制御信号2305を送信することができる。いくつかの例において、データパッキング回路2304はまた、あるクロックサイクルで処理回路2302によって生成されたOut0、Out2、Out1、及びOut3を格納し、DOUTレジスタからメモリ512への出力データのフェッチを開始するために、制御信号2305を送信することができる。
【】
図25B及び図25Cは、データ配路回路2412の一部であり得るデータマージ回路2002を含む処理回路2302の例示の構成を図示する。図25Bにおいて、データマージ回路2002は、図21D-1及び図21D-2にあるように、8ビットの入力データ及び4ビットの重みをサポートするように構成される。データ配路回路2412は、加算器2008aの出力を乗算回路2402a及び2402cの入力に配路し、加算器2008bの出力を乗算回路2402b及び2402dの入力に配路することができる。処理回路2302は、Out0及びOut2を複製として生成し、Out1及びOut3を複製として生成することができる。データパッキング回路2304は、Out0及びOut2、Out1及びOut3を1クロックサイクルで生成された複製データとしてDOUTレジスタに格納し得、又は上述したように、2つの異なるクロックサイクルからのOut0/Out2及びOut1/Out3の異なるセットをDOUTレジスタに格納し得る。
【】
また、図25Cにおいて、データマージ回路2002は、図21Eにあるように、8ビットの入力データ及び8ビットの重みをサポートするように構成されている。データ配路回路2412は、加算器2008aの出力を乗算回路2402a及び2402cの入力に配路し、加算器2030の出力を乗算回路2402a~dの入力に配路することができる。処理回路2302は、Out0、Out1、Out2、及びOut4(3?)を複製として生成することができる。データパッキング回路2304は、上述したように、Out0~Out3を1クロックサイクルで生成された複製データとしてDOUTレジスタに格納し得、又は4つの異なるクロックサイクルからの異なるOut0/Out1/Out2/Out3をDOUTレジスタに格納し得る。
【】
図26A-1、図26A-2、及び図26Bは、最大プーリングエンジン1320の内部構成要素及びそれらの動作の例を図示する。最大プーリングエンジン1320は、DIN0又はDIN1入力データレジスタのうちの1つの入力データレジスタの入力データ要素をDOUTレジスタの出力データ要素と比較し、DOUTレジスタ内の特定の出力データ要素が、比較されている入力データ要素よりも低い値を有する場合、特定の出力データ要素を置き換えることができる。最大プーリングエンジン1320は、DOUTレジスタを上書きしないように、又は最大プーリング演算の結果としてゼロを出力しないように、迂回され得る。
【】
図26A-1及び図26A-2を参照すると、最大プーリングエンジン1320は、マルチプレクサ2602と、比較回路要素2604と、マルチプレクサ2606とを含み得る。マルチプレクサ2602は、入力データレジスタDIN0又はDIN1のどちらが最大プーリング演算を実施するかを選択するように、(例えば、後処理パラメータ1314に基づいて)制御され得る。比較回路要素2604は、例えば、4ビット比較を実施するか8ビット比較を実施するか、比較が符号付きであるか符号なしであるか、などを示す構成データを、端子cnfg-hi[1:0]及びcnfg-lo[1:0]を介して受け取り、構成データに基づいて、8ビットチャンク(例えば、DIN[31:24]とDOUT[31:24]との間、DIN[23:16]とDOUT[23:16]との間、DIN[15:8]とDOUT[15:8]との間、及びDIN[7:0]とDOUT[7:0]との間)で、(DIN0又はDIN1のうちの1つからの)入力データと(DOUTの)出力データとを比較することができる。構成データは、構成レジスタ528dからの後処理パラメータ1314の一部であり得る。
【】
各8ビットチャンクについて、4ビットのMSB間の比較は、比較回路2604a(図26A及び図26Bにおいて、CMP-hiとも標示されている)などのMSB比較回路によって実施され得、4ビットのLSB間の比較は、比較回路2604b(図26A及び図26Bにおいて、CMP-loとも標示されている)などのLSB比較回路によって実施され得る。CMP-hi回路はまた、8ビット比較について、DOUTのMSBがDINのMSBと同じ値又はそれよりも大きい値を有するが、DOUTのLSBがDINのLSBよりも小さい値を有するとき、CMP-lo回路が、DOUTがDINよりも小さいと示さないことを確実にするために、4ビットのMSBの比較結果をCMP-lo回路に送信することができる。また、比較の結果に応じて、マルチプレクサ(例えば、マルチプレクサ2604c及び2604d)が、出力データの8ビットチャンクの4ビットのMSB及び/又は4ビットのLSBを入力データで上書きすることができる。8ビット比較の場合、マルチプレクサは、8ビットのDOUTデータ全体が8ビットのDINデータよりも低い値を有する場合にのみ、8ビットのDOUTデータを8ビットのDINデータで上書きする。また、マルチプレクサ2606は、DOUTデータの8ビットチャンク又はゼロのいずれかを提供することができる。一方、4ビット比較の場合、マルチプレクサは、4ビットのDOUTデータと4ビットのDINデータとを比較し、他の4ビットのDIN/DOUTデータの比較結果を考慮することなく、4ビットのDINデータが4ビットのDOUTデータを超える場合、4ビットのDOUTデータを置き換えることができる。
【】
図26Bは、CMP-hi回路及びCMP-lo回路の例示の動作を示すチャート2610及び2612である。図26Bにおいて、チャート2610及び2612は、それぞれ、CMP-hi回路及びCMP-lo回路の論理演算を示しており、これらの論理演算は、命令の形態で表され、命令は、CMP-hi回路及びCMP-lo回路を表す論理回路に統合され(及び論理回路を表し)得る。
【】
チャート2610を参照すると、CMP-hi回路(例えば、比較回路2604a)は、比較されているDINデータとDOUTデータの8ビットチャンクの4ビットのMSBが符号付きデータであるか符号なしデータであるか、などの構成データを受け取ることができる。データが符号付きである場合、CMP-hiは、DINデータの4ビットのMSBとDOUTデータの4ビットのMSBの両方を符号拡張することができ、そうでない場合、(MSBの前にゼロを追加することによって)それらをゼロでプリペンドすることができる。
【】
DINデータの4ビットのMSBがDOUTデータの4ビットのMSBよりも大きい値を有する場合、CMP-hi回路は、マルチプレクサ(例えば、マルチプレクサ回路2604c)がDOUTデータの4ビットのMSBをDINデータの4ビットのLSBで上書きするように制御信号を設定することができる。CMP-hi回路はまた、第1の比較信号(set cmp-res=「GT」)をCMP-lo回路に提供することができる。一方、DINデータの4ビットのMSBとDOUTデータの4ビットのMSBとが同じである場合、CMP-hi回路は、第2の比較信号(set cmp-res=「EQ」)を提供することができる。第1及び第2の比較信号は、DOUTのMSBがDINよりも高い値を有するが、DOUTのLSBがDINよりも低い値を有するという誤った比較判定を行うことを回避するために、CMP-lo回路に提供される。DINデータの4ビットのMSBがDOUTデータと同じ値を有する場合又はそれよりも低い値を有する場合の両方において、CMP-hi回路は、DOUTレジスタ内のDOUTデータの4ビットのMSBを維持することができる。
【】
また、チャート2612を参照すると、CMP-lo回路(例えば、比較回路2604b)は、比較されているDINデータとDOUTデータの8ビットチャンクの4ビットのLSBが符号付きデータであるか符号なしデータであるか、及び8ビット比較が実施されるか4ビット比較が実施されるか、などの構成データを受け取ることができる。データが符号付きである場合、CMP-loは、DINデータの4ビットのLSBとDOUTデータの4ビットのLSBの両方を符号拡張することができ、そうでない場合、それらをゼロでプリペンドすることができる。また、4ビット比較が実施される場合、CMP-lo回路は、CMP-hi回路からの制御信号を無視し、DINデータの4ビットのLSBがより高い値を有する場合、DOUTデータの4ビットのLSBをDINデータの4ビットのLSBで上書きすることができる。また、8ビット比較が実施される場合、CMP-lo回路は、第1の制御信号が、DOUTデータの4ビットのMSBがDINデータの4ビットのMSBよりも高い値を有することを示す場合、又は第2の制御信号が、4ビットのMSBが等しく、DOUTデータの4ビットのLSBがDINデータの4ビットのLSBよりも低い値を有することを示す場合にのみ、(マルチプレクサ回路2604dを用いて)DOUTデータの4ビットのLSBをDINデータの4ビットのLSBで上書きすることができる。
【】
図27は、ニューラルネットワークプロセッサの動作の方法2700のフローチャートを示す。方法2700は、例えば、演算コントローラ522、ロード/ストアコントローラ530、演算エンジン524などの、ニューラルネットワークプロセッサ502の種々の構成要素によって実施され得る。
【】
動作2702において、演算コントローラ522は、命令バッファ520から第1の命令を受け取る。第1の命令の例示のシンタックスが、図6A及び図6Bに図示されている。第1の命令は、入力データレジスタへの入力データ要素のフェッチを示すサブ命令610と、重みレジスタへの重み要素のフェッチを示すサブ命令608とを含み得る。
【】
動作2704において、第1の命令(例えば、サブ命令610)に応答して、ロード/ストアコントローラ530は、入力データ要素をニューラルネットワークプロセッサの外部のメモリ(例えば、メモリ512)からニューラルネットワークプロセッサの入力データレジスタ(例えば、データレジスタ528aのDin0又はDin1)にフェッチする。ロード/ストアコントローラ530は、入力データ要素をフェッチするために、メモリインターフェース534を介して読出し動作を実施することができる。読出しアドレスは、アドレス生成器532によって生成することができ、図8A~図10Bで説明されるような循環アドレス指定方式に基づき得る。
【】
また、動作2706において、第1の命令(例えば、サブ命令608)に応答して、ロード/ストアコントローラ530は、重み要素をニューラルネットワークプロセッサの重みバッファ(例えば、重み及びパラメータバッファ526)からニューラルネットワークプロセッサの重みレジスタ(例えば、重み/パラメータレジスタ528bの重み-0レジスタ又は重み-1レジスタ)にフェッチする。重み要素及び入力データ要素のフェッチは、並列に実施され得る。
【】
動作2708において、演算コントローラ522は、命令バッファ520から第2の命令を受け取る。第2の命令は、重みレジスタに格納された重み要素と入力データレジスタに格納された入力データ要素とに対して演算エンジン524によって実施される演算動作(例えば、MAC演算、後処理演算など)を示すサブ命令602を含み得る。
【】
動作2710において、演算エンジンは、第2の命令に応答して、入力データ要素及び重み要素を、それぞれ、入力データレジスタ及び重みレジスタからフェッチすることができる。
【】
動作2712において、演算エンジンは、第2の命令に応答して、入力データ要素及び重み要素に対してMAC演算及び後処理演算を含む演算動作を実施して、出力データ要素を生成することができる。
【】
動作2714において、演算エンジンは、出力データ要素を出力データレジスタ(例えば、Dout)に格納することができる。
【】
図28は、ニューラルネットワークプロセッサの動作の方法2800のフローチャートを示す。方法2800は、例えば、演算コントローラ522、ロード/ストアコントローラ530、MACエンジン1300を含む演算エンジン524などの、ニューラルネットワークプロセッサ502の種々の構成要素によって実施され得る。
【】
動作2802において、演算コントローラ522は、特定の入力精度の第1の指示と特定の重み精度の第2の指示とを受け取る。第1の指示と第2の指示とは、構成レジスタ528cから受け取られ得る。
【】
動作2804において、演算コントローラ522は、第1の指示と第2の指示とに基づいてニューラルネットワークプロセッサの演算エンジンを構成する。こういった構成は、例えば、重みマルチプレクサ1304及び入力データマルチプレクサ1306についてD4/D8モードを設定すること、MACエンジン1300の演算ユニット1800について2値モードを含む(又は2値モードを含まない)構成1710を設定することなどに基づき得る。
【】
動作2806において、演算コントローラ522は、命令バッファから命令を受け取る。命令は、重みレジスタに格納された重み要素及び入力データレジスタに格納された入力データ要素に対してMACエンジン1300によって実施されるMAC演算のセットを示すサブ命令602を含み得る。
【】
動作2808において、命令に応答して、第1の指示と第2の指示とに基づいて構成された演算エンジンは、入力データ要素及び重み要素を、それぞれ、入力データレジスタ及び重みレジスタからフェッチすることができる。上述したように、重みが4ビット精度であるか8ビット精度であるか、及び入力データ要素が4ビット精度であるか8ビット精度であるかに応じて、D8/D4モードを設定することができ、重みマルチプレクサ1304及びデータマルチプレクサ1306は、図21A~図21Hに示されるように、異なるビット精度の重み要素及び異なるビット精度の入力データ要素を演算ユニット1800にフェッチすることができる。ビット精度に応じて、重みマルチプレクサ1304は、重み要素の異なるビットを異なる演算ユニットに提供すること、又は異なる重み要素を異なる演算ユニットに提供することができる。重みマルチプレクサ1304はまた、D8モードでビットのいくつかを複製し得る。また、データマルチプレクサ1306は、D4モードで入力データ要素の複製を提供することができる。
【】
動作2810において、第1の指示と第2の指示とに基づいて構成された演算エンジンは、命令に応答して、特定の入力精度の入力データ要素と特定の重み精度の重み要素との間で乗累算(MAC)演算を実施して、中間出力データ要素を生成することができる。例えば、2値モードにおいて、演算エンジンは、入力データ要素と重み要素との間でビット単位のXNOR演算を実施することができる。また、或るデータ及び重み精度(例えば、8ビットの入力精度及び2ビットの重み精度、4ビットの入力精度及び重み精度など)について、各演算ユニットは、中間出力データ要素を生成することができる。他のデータ及び重み精度(例えば、8ビットの入力精度及び4ビットの重み精度、8ビットの入力精度及び8ビットの重み精度)について、演算エンジンは、図21D及び図21Eに示されているように、データマージ回路(例えば、データマージ回路2002)を用いて、異なる演算ユニットからの出力をマージして、中間出力データ要素を生成することができる。
【】
動作2812において、演算エンジンは、中間出力データ要素を中間出力データレジスタ(例えば、MACレジスタ)において格納することができる。
【】
図29A及び図29Bは、ニューラルネットワークプロセッサの動作の方法2900のフローチャートを示す。方法2900は、例えば、演算コントローラ522、ロード/ストアコントローラ530、MACエンジン1300を含む演算エンジン524などの、ニューラルネットワークプロセッサ502の種々の構成要素によって実施され得る。
【】
動作2902において、演算コントローラ522は、特定の出力精度の第1の指示と特定の重み精度の第2の指示とを受け取る。演算コントローラ522はまた、特定の入力精度の第3の指示を受け取ることができる。第1、第2、及び第3の指示は、構成レジスタ528cから受け取ることができる。
【】
動作2904において、演算コントローラ522は、第1の指示と第2の指示と(第3の指示と)に基づいて後処理エンジン1302を構成する。こういった構成は、例えば、図25A~図25Cに示されているように、出力精度(8ビット又は4ビット)に基づいてクランプ高値及びクランプ低値を設定することと、2-ternary重みをサポートするため、加算器2408aの出力を加算器2408bの入力に配路するようにマルチプレクサ回路2416aを設定し、加算器2408cの出力を加算器2408dの入力に配路するようにマルチプレクサ回路2416bを設定することと、8ビットの入力精度及び4ビットの重み精度又は8ビットの入力精度及び8ビットの重み精度をサポートするために、データマージ回路2002の出力を乗算器2402a~dに配路するようにデータ配路回路2412を設定することとに基づき得る。
【】
動作2906において、演算コントローラ522は、命令バッファから第1の命令を受け取る。第1の命令は、重みレジスタに格納された重み要素と入力データレジスタに格納された入力データ要素とに対してMACエンジン1300によって実施されるMAC演算のセットを示すサブ命令602を含み得る。
【】
動作2908において、演算エンジン524のMACエンジン1300は、第1の命令に応答して、入力データ要素及び重み要素を、それぞれ、入力データレジスタ及び重みレジスタからフェッチすることができる。いくつかの例において、演算エンジン524はまた、入力精度及び重み精度に基づいて構成され得る。上述したように、重みが4ビット精度であるか8ビット精度であるか、及び入力データ要素が4ビット精度であるか8ビット精度であるかに応じて、D8/D4モードを設定することができ、重みマルチプレクサ1304及びデータマルチプレクサ1306は、図21A~図21Hに示されるように、異なるビット精度の重み要素と異なるビット精度の入力データ要素とを演算ユニット1800にフェッチすることができる。ビット精度に応じて、重みマルチプレクサ1304は、重み要素の異なるビットを異なる演算ユニットに提供すること、又は異なる重み要素を異なる演算ユニットに提供することができる。重みマルチプレクサ1304はまた、D8モードでビットのいくつかを複製し得る。また、データマルチプレクサ1306は、D4モードで入力データ要素の複製を提供することができる。
【】
動作2910において、MACエンジン1300は、命令に応答して、特定の入力精度の入力データ要素と特定の重み精度の重み要素との間で乗累算(MAC)動作を実施して、中間出力データ要素を生成することができる。例えば、2値モードについて、演算エンジンは、入力データ要素と重み要素との間でビット単位のXNOR演算を実施することができる。また、或るデータ及び重み精度(例えば、8ビットの入力精度及び2ビットの重み精度、4ビットの入力精度及び重み精度など)について、各演算ユニットは、中間出力データ要素を生成することができる。他のデータ及び重み精度(例えば、8ビットの入力精度及び4ビットの重み精度、8ビットの入力精度及び8ビットの重み精度)について、演算エンジンは、図21D及び図21Eに示されているように、データマージ回路(例えば、データマージ回路2002)を用いて、異なる演算ユニットからの出力をマージして、中間出力データ要素を生成することができる。
【】
動作2912において、MACエンジン1300は、中間出力データ要素を中間出力データレジスタ(例えば、MACレジスタ)において格納することができる。
【】
図29Bを参照すると、動作2914において、演算コントローラ522は、命令バッファから第2の命令を受け取る。第2の命令は、中間出力データに対して後処理エンジン1302によって実施される後処理演算(例えば、BNorm)を示すサブ命令602を含み得る。
【】
動作2916において、第1の指示と第2の指示と(第3の指示と)に基づいて構成された後処理エンジン1302は、第2の命令に応答して、中間出力データ要素を中間出力データレジスタからフェッチする。
【】
動作2918において、第1の指示と第2の指示と(第3の指示と)に基づいて構成された後処理エンジン1302は、第2の命令に応答して、図24及び図25A~図25Cに示されているように、中間データ要素に対して、BNorm動作、残差層処理などの後処理演算を実施して、出力データ要素を生成する。スケーリング、ビットシフト、クランプなどを含む後処理演算が、1クロックサイクルで実施され得る。
【】
動作2920において、後処理エンジン1302は、第2の命令に応答して、データレジスタ528aの出力データレジスタ(例えば、Dout)において出力データ要素を格納する。出力データ要素の格納は、データパッキング回路2304によって実施され得る。閾値サイズのデータ(例えば、32ビット)をDoutに格納すると、データパッキング回路2304は、出力データをメモリ512にフェッチするために、制御信号2305をロード/ストアコントローラ530に送信することができる。
【】
本記載において、「結合する」という用語は、本記載と一貫する機能的関係を可能にする、接続、通信、又は信号経路を包含し得る。例えば、デバイスAが、或る行為を実施するようにデバイスBを制御するための信号を提供する場合、(a)第1の例において、デバイスAはデバイスBに結合され、又は(b)第2の例において、介在する構成要素CがデバイスAとデバイスBとの間の機能的な関係を実質的に変更しない場合、デバイスAは介在する構成要素Cを介してデバイスBに結合され、そのため、デバイスBはデバイスAによって提供される制御信号を介してデバイスAによって制御されるようにする。また、本記載において、或るタスク又は機能を実施する「ように構成される」デバイスは、その機能を実施するように製造業者によって製造時に構成(例えば、プログラム及び/又はハードワイヤード)されてもよく、並びに/又は、その機能及び/又は他の付加的な又は代替の機能を実施するように製造後にユーザによって構成可能(又は再構成可能)であってもよい。こうした構成は、デバイスのファームウェア及び/又はソフトウェアプログラミングを介するもの、デバイスのハードウェア構成要素及び相互接続の構築及び/又はレイアウトを介するもの、或いは、それらの組み合わせであり得る。また、本記載において、或る構成要素を含む回路又はデバイスが、代わりに、それらの構成要素に結合されて、説明される回路要素又はデバイスを形成するように適合されてもよい。例えば、一つ又は複数の半導体素子(トランジスタなど)、一つ又は複数の受動素子(抵抗器、コンデンサ、及び/又はインダクタなど)、並びに/又は一つ又は複数の供給源(電圧源及び/又は電流源など)を含むものとして説明される構造が、代わりに、単一の物理デバイス(例えば、半導体ダイ及び/又は集積回路(IC)パッケージ)内に半導体素子のみを含んでいてもよく、製造時又は製造後のいずれかにおいて、エンドユーザー及び/又は第三者などによって、受動素子及び/又は供給源の少なくともいくつかに結合されて、説明される構造を形成するように適合されていてもよい。
【】
特定のトランジスタ構造がで言及されているが、他のトランジスタ又はデバイス構造が代わりに用いられてもよい。例えば、付加的な変更をほとんど又は全く伴わずに、n型MOSFETの代わりにp型MOSFETが用いられてもよい。また、他のタイプのトランジスタ(バイポーラトランジスタなど)が、示されたトランジスタの代わりに利用され得る。コンデンサは、異なるデバイス構造(平行板コンデンサを形成するために互いに上下に形成された金属構造など)を用いて実装されてもよく、或いは、半導体基板表面により近い又は半導体基板表面からより遠い(金属又はドープ半導体)層上に形成されてもよい。
【】
で用いられる場合、「端子」、「ノード」、「相互接続」、及び「ピン」という用語は、互換的に用いられる。特に反対の記載がない限り、こうした用語は、概して、デバイス要素、回路要素、集積回路、デバイス、又は他の電子機器若しくは半導体構成要素の間の相互接続、或いは、それらの終端を意味するために用いられる。
【】
或る構成要素が、特定のプロセス技術のものであるとして本明細書で説明されている場合があるが、こうした構成要素は、他のプロセス技術の構成要素と交換されてもよい。本明細書で説明される回路は、構成要素を置換する前に利用可能であった機能と少なくとも部分的に同様の機能を提供するために置換される構成要素を含むように再構成可能である。抵抗器として示されている構成要素は、別段の記載がない限り、概して、示されている抵抗器によって表されるインピーダンスの量を提供するように直列及び/又は並列に結合される、任意の一つ又は複数の要素を表す。例えば、本明細書で単一の構成要素として図示及び説明されている抵抗器又はコンデンサを、代わりに、それぞれ、その単一の抵抗器又はコンデンサと同じ2つのノード間に直列又は並列に結合される、複数の抵抗器又はコンデンサとしてもよい。また、本記載における「接地端子」という語句の使用には、シャーシ接地、アース接地、浮動接地、仮想接地、デジタル接地、共通接地、及び/又は、本説明の教示に適用可能であるか若しくは好適な、任意の他の形態の接地接続が含まれる。別段の記載がない限り、或る値に先行する「約」、「およそ」、又は「実質的に」は、記載された値の+/-10パーセントを意味する。
【】
特許請求の範囲内で、説明された例における改変が可能であり、他の例も可能である。
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【図】
【国際調査報告】

[広告欄]

ログインすれば広告は減ります

ログインすれば広告は減ります