(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024075608
(43)【公開日】2024-06-04
(54)【発明の名称】ニューラルネットワーク計算タイル
(51)【国際特許分類】
G06F 17/16 20060101AFI20240528BHJP
G06N 3/063 20230101ALI20240528BHJP
【FI】
G06F17/16 M
G06N3/063
【審査請求】有
【請求項の数】16
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024033695
(22)【出願日】2024-03-06
(62)【分割の表示】P 2021203544の分割
【原出願日】2017-08-15
(31)【優先権主張番号】15/335,769
(32)【優先日】2016-10-27
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】テマム,オリビエ
(72)【発明者】
【氏名】ナラヤナスワミ,ラビ
(72)【発明者】
【氏名】カイタン,ハーシット
(72)【発明者】
【氏名】ウ,ドン・ヒョク
(57)【要約】 (修正有)
【課題】命令帯域幅および命令メモリの低減を可能にするニューラルネット計算タイルを提供する。
【解決手段】ニューラルネットワーク(NN)計算タイル200は、NN計算タイルに出入りするデータフローのための通信経路を各々が与えるデータ経路202及びデータ経路205を含む。データ経路202は、NN計算タイルを出るデータのための出力経路を与えるリング出力203及びNN計算タイルに入るデータのための入力経路を与えるリング入力204を含む。NN計算タイルはまた、TensorOpテンソルトラバーサルユニット(TTU)226を含むTensorOp制御206及びDMAOpTTU228を含むDMAOp制御208を含む。TensorOp制御は、TensorOpTTUレジスタ232への書込及びTensorOpTTUレジスタからの読出を管理し、TensorOpTTUによる実行のためのトラバース操作を管理する。
【選択図】
図2
【特許請求の範囲】
【請求項1】
テンソル計算を加速するための計算ユニットであって、
第1のデータ幅を有し、入力活性化または出力活性化のうちの少なくとも1つを格納するための第1のメモリバンクと、
前記第1のデータ幅よりも大きい第2のデータ幅を有し、計算を実行する際に用いられる1つまたは複数のパラメータを格納するための第2のメモリバンクと、
前記第2のメモリバンクからパラメータを受け取り計算を実行する少なくとも1つの積和(「MAC」)演算子を含む少なくとも1つのセルと、
少なくとも前記第1のメモリバンクとデータ通信する第1のトラバーサルユニットとを備え、前記第1のトラバーサルユニットは、前記第1のメモリバンクに制御信号を与えて、前記MAC演算子によってアクセス可能なデータバスに入力活性化を与えるように構成され、
前記計算ユニットは、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行し、前記1つまたは複数の計算は、前記MAC演算子によって実行され、部分的に、前記データバスから受け取られる前記入力活性化と前記第2のメモリバンクから受け取られるパラメータとの乗算演算を含む、計算ユニット。
【請求項2】
前記計算ユニットは、複数のループを含むループネストを実行することによって、前記計算のうちの1つまたは複数を実行し、前記ループネストの構造は、前記データアレイの1つまたは複数の次元をトラバースするよう前記第1のトラバーサルユニットによって用いられるそれぞれのループを含む、請求項1に記載の計算ユニット。
【請求項3】
前記1つまたは複数の計算は、前記第1のトラバーサルユニットによって与えられるテンソル演算に部分的に基づいて実行され、前記テンソル演算は、前記データアレイの1つまたは複数の要素にアクセスするためのループネスト構造を含む、請求項2に記載の計算ユニット。
【請求項4】
前記計算ユニットの外部にあるソースから受け取られる命令に基づいて、前記第1のメモリバンクの少なくとも1つのメモリ位置および前記第2のメモリバンクの少なくとも1つのメモリ位置にアクセスするように構成される第2のトラバーサルユニットをさらに備える、請求項1に記載の計算ユニット。
【請求項5】
前記第1のトラバーサルユニットはテンソル演算トラバーサルユニットであり、前記第2のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、前記データアレイは複数の要素を含むテンソルに対応する、請求項4に記載の計算ユニット。
【請求項6】
前記計算ユニットは非線形ユニットを含み、前記計算の第1の部分は前記乗算演算に基づいて1つまたは複数の出力活性化を生成することを含み、前記計算の第2の部分は前記非線形ユニットによって非線形関数を前記1つまたは複数の出力活性化に適用することを含む、請求項1に記載の計算ユニット。
【請求項7】
前記計算ユニットによって実行される前記1つまたは複数の計算は、前記出力活性化を前記第1のメモリバンクにシフトするようシフトレジスタを用いることを含む、請求項6に記載の計算ユニット。
【請求項8】
前記計算ユニットの外側に延びるリングバスの一部をさらに備え、前記リングバスは、前記第1のメモリバンクと他の近接する計算ユニットのメモリバンクとの間および前記第2のメモリバンクと他の近接する計算ユニットのメモリバンクとの間にデータ経路を与え
る、請求項1に記載の計算ユニット。
【請求項9】
前記第2のメモリバンクは、部分和または1つもしくは複数のプーリング層入力のうちの少なくとも1つを格納するように構成されている、請求項1に記載の計算ユニット。
【請求項10】
テンソル計算を加速するための、コンピュータにより実施される方法であって、
第1のデータ幅を有する第1のメモリバンクが第1のトラバーサルユニットから制御信号を受け取ったことに応答して、前記第1のメモリバンクによって第1の入力活性化を送ることを備え、前記第1のメモリバンクは、計算ユニット内に配置され、前記第1の入力活性化は、前記計算ユニットの少なくとも1つのセルによってアクセス可能なデータバスによって与えられ、前記方法はさらに、
前記少なくとも1つのセルによって、前記第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクから1つまたは複数のパラメータを受け取ることを備え、前記少なくとも1つのセルは少なくとも1つの積和(「MAC」)演算子を含み、前記方法はさらに、
前記MAC演算子によって、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行することを備え、前記1つまたは複数の計算は、部分的に、前記データバスからアクセスされる少なくとも前記第1の入力活性化と前記第2のメモリバンクから受け取られる少なくとも1つのパラメータとの乗算演算を含む、テンソル計算を加速するための、コンピュータにより実施される方法。
【請求項11】
前記1つまたは複数の計算は、前記計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、前記ループネストの構造は、前記第1のトラバーサルユニットが前記データアレイの1つまたは複数の次元をトラバースする態様を示す、請求項10に記載のコンピュータにより実施される方法。
【請求項12】
前記第1のトラバーサルユニットによって、前記データアレイの1つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、請求項11に記載のコンピュータにより実施される方法。
【請求項13】
前記第1のトラバーサルユニットはテンソル演算トラバーサルユニットであり、前記第2のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、前記データアレイは複数の要素を含むテンソルに対応する、請求項10に記載のコンピュータにより実施される方法。
【請求項14】
前記乗算演算に基づいて少なくとも1つの出力活性化を生成することによって前記1つまたは複数の計算の第1の部分を実行することをさらに備える、請求項10に記載のコンピュータにより実施される方法。
【請求項15】
前記1つまたは複数の出力活性化に非線形関数を適用することによって前記1つまたは複数の計算の第2の部分を実行することをさらに備える、請求項14に記載のコンピュータにより実施される方法。
【請求項16】
1つまたは複数のプロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体であって、前記命令は、そのように実行されると、前記1つまたは複数のプロセッサに動作を実行させ、前記動作は、
第1のデータ幅を有する第1のメモリバンクが第1のトラバーサルユニットから制御信号を受け取ったことに応答して、前記第1のメモリバンクによって第1の入力活性化を送ることを含み、前記第1のメモリバンクは、計算ユニット内に配置され、前記第1の入力活性化は、前記計算ユニットの少なくとも1つのセルによってアクセス可能なデータバス
によって与えられ、前記動作はさらに、
前記少なくとも1つのセルによって、前記第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクから1つまたは複数のパラメータを受け取ることを含み、前記少なくとも1つのセルは少なくとも1つの積和(「MAC」)演算子を含み、前記動作はさらに、
前記MAC演算子によって、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行することを含み、前記1つまたは複数の計算は、部分的に、前記データバスからアクセスされる少なくとも前記第1の入力活性化と前記第2のメモリバンクから受け取られる少なくとも1つのパラメータとの乗算演算を含む、非一時的コンピュータ可読記憶媒体。
【請求項17】
前記1つまたは複数の計算は、前記計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、前記ループネストの構造は、前記第1のトラバーサルユニットが前記データアレイの1つまたは複数の次元をトラバースする態様を示す、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項18】
前記第1のトラバーサルユニットによって、前記データアレイの1つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、請求項17に記載の非一時的コンピュータ可読記憶媒体。
【請求項19】
前記乗算演算に基づいて少なくとも1つの出力活性化を生成することによって前記1つまたは複数の計算の第1の部分を実行することをさらに備える、請求項16に記載の非一時的コンピュータ可読記憶媒体。
【請求項20】
前記1つまたは複数の出力活性化に非線形関数を適用することによって前記1つまたは複数の計算の第2の部分を実行することをさらに備える、請求項19に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【0001】
背景
本明細書は一般に、命令帯域幅および命令メモリの低減を可能にするディープニューラルネットワーク(「DNN」)層の計算のためのニューラルネット計算タイルに関する。
【発明の概要】
【課題を解決するための手段】
【0002】
概要
一般に、この明細書に記載される主題の1つの革新的な局面は、テンソル計算を加速するための計算ユニットにおいて実施され得る。計算ユニットは、第1のデータ幅を有し、入力活性化または出力活性化のうちの少なくとも1つを格納するための第1のメモリバンクと、第1のデータ幅よりも大きい第2のデータ幅を有し、計算を実行する際に用いられる1つまたは複数のパラメータを格納するための第2のメモリバンクとを備える。計算ユニットはさらに、第2のメモリバンクからパラメータを受け取って計算を実行する少なくとも1つの積和(「MAC」)演算子を含む少なくとも1つのセルを備えてもよい。計算ユニットはさらに、少なくとも第1のメモリバンクとデータ通信する第1のトラバーサルユニットを備え、第1のトラバーサルユニットは、第1のメモリバンクに制御信号を与えて、MAC演算子によってアクセス可能なデータバスに入力活性化を与えるように構成される。計算ユニットは、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行し、1つまたは複数の計算は、MAC演算子によって実行され、部分的に、データバスから受け取られる入力活性化と第2のメモリバンクから受け取られるパラメータとの乗算演算を含む。
【0003】
一般に、この明細書に記載される主題の別の革新的な局面は、テンソル計算を加速するための、コンピュータにより実施される方法において実施され得る。コンピュータにより実施される方法は、第1のデータ幅を有する第1のメモリバンクが第1のトラバーサルユニットから制御信号を受信したことに応答して、第1のメモリバンクによって第1の入力活性化を送ることを備え、第1のメモリバンクは、計算ユニット内に配置され、第1の入力活性化は、計算ユニットの少なくとも1つのセルによってアクセス可能なデータバスによって与えられる。方法はさらに、少なくとも1つのセルによって、第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクから1つまたは複数のパラメータを受け取ることを備え、少なくとも1つのセルは少なくとも1つの積和(「MAC」)演算子を含む。方法はさらに、MAC演算子によって、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行することを備え、1つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第1の入力活性化と第2のメモリバンクから受け取られる少なくとも1つのパラメータとの乗算演算を含む。
【0004】
この明細書に記載される主題の別の革新的な局面は、非一時的コンピュータ可読記憶媒体において実施され得る。1つまたは複数のプロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体であって、命令は、そのように実行されると、1つまたは複数のプロセッサに動作を実行させ、この動作は、第1のデータ幅を有する第1のメモリバンクが第1のトラバーサルユニットから制御信号を受け取ったことに応答して、第1のメモリバンクによって第1の入力活性化を送ることを含み、第1のメモリバンクは、計算ユニット内に配置され、第1の入力活性化は、計算ユニットの少なくとも1つのセルによってアクセス可能なデータバスによって与えられる。実行される動作はさらに、少なくとも1つのセルによって、第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクから1つまたは複数のパラメータを受け取ることを含んでもよく、少なくとも
1つのセルは少なくとも1つの積和(「MAC」)演算子を含む。実行される動作はさらに、MAC演算子によって、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行することを含んでもよく、1つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第1の入力活性化と第2のメモリバンクから受け取られる少なくとも1つのパラメータとの乗算演算を含む。
【0005】
この明細書において記載される主題は、以下の利点の1つ以上を実現するように特定の実施の形態において実現することができる。レジスタを用いてメモリアドレス値を追跡することは、プログラムが、深くネスト化されたループを1つの命令で反復することを可能にする。単一の計算タイルにおいて幅狭メモリユニットおよび幅広メモリユニットからアクセス可能なテンソルは、レジスタから検索されるメモリアドレス値に基づいてトラバースされる。メモリアドレス値はテンソルの要素に対応する。テンソル計算は、深いループネストの実行に基づいて個々の計算タイルで生ずる。計算は複数のタイルにわたって分散できる。計算効率は、いくつかの計算タイルにわたって多層ニューラルネットワークのテンソル計算を分散することに基づいて向上および加速される。テンソルをトラバースし、テンソル計算を少ない命令数で実行できる。
【0006】
この明細書において記載される主題は、他の利点を実現するように特定の実施の形態において実現することもできる。例えば、アドレス指定の柔軟性が多次元アレイを任意の順序でトラバースすることを可能にする、幅が狭い低帯域幅メモリを、高帯域幅の幅広メモリと結合するメモリ階層を採用することによって、非常に異なる次元のDNN層に対してMAC演算子の高い利用率を達成することができ、計算における局所性を最大限に活用することができる。
【0007】
この局面および他の局面の他の実現例は、計算機記憶装置上でエンコードされる、方法のアクションを実行するように構成される、対応のシステム、装置およびコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、システムにインストールされ、動作でシステムにアクションを実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組合せによってそのように構成することができる。1つ以上のコンピュータプログラムは、データ処理装置によって実行されたとき、装置にアクションを実行させる命令を有することによって、そのように構成することができる。
【0008】
本明細書に記載の主題は、画像認識および/または分類方法/システムにも関する。システムは、開示された技術、およびハードウェア計算ユニットまたは計算タイルを有する記載されたハードウェア計算システムを使用して実装することができる。計算ユニットは、複数のニューラルネットワーク層を有するニューラルネットワークを用いて推論を計算するためのテンソル計算を処理する。
【0009】
この明細書に記載される主題の1つ以上の実現例の詳細は、添付の図面および以下の記載において述べられる。主題の他の潜在的な特徴、局面および利点は、記載、図面および特許請求の範囲から明らかになる。
【図面の簡単な説明】
【0010】
【
図2】例示的なニューラルネットワーク計算タイルを示す。
【
図3】例示的なテンソルトラバーサルユニット(TTU)構造を示す。
【
図4】1つまたは複数の積和(MAC)演算子に入力活性化を与える幅狭メモリユニットを含む例示的アーキテクチャを示す。
【
図5】
図2および
図4の幅狭メモリユニットに出力活性化を与える出力バスを含む例示的なアーキテクチャを示す。
【
図6】
図2のニューラルネットワーク計算タイルを用いてテンソル計算を実行するためのプロセスの例示的なフローチャートである。
【発明を実施するための形態】
【0011】
さまざまな図面における同様の参照番号および指定は同様の要素を示す。
詳細な説明
本明細書に記載の主題は、ニューラルネットワーク層の機械学習推論作業負荷を加速するように構成された複数の計算ユニットを含むハードウェア計算システムに関する。ハードウェア計算システムの各計算ユニットは自己完結型であり、多層ニューラルネットワークの所与の層によって必要とされる計算を独立して実行することができる。
【0012】
複数の層を有するニューラルネットワークを用いて推論を計算することができる。例えば、入力が与えられると、ニューラルネットワークはその入力に対する推論を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を通って入力を処理することによって、この推論を計算する。特に、ニューラルネットワークの各層は、それぞれの重みのセットを有する。各層は入力を受け取り、その層に対する重みのセットに従って入力を処理して出力を生成する。
【0013】
したがって、受け取った入力から推論を計算するために、ニューラルネットワークは入力を受け取り、推論を生成するために各ニューラルネットワーク層を通してそれを処理し、1つのニューラルネットワーク層からの出力が次のニューラルネットワーク層への入力として与えられる。ニューラルネットワーク層へのデータ入力、例えば、ニューラルネットワークへの入力、またはシーケンス内におけるその層の下の層の、あるニューラルネットワーク層への出力は、その層への活性化入力と呼ぶことができる。
【0014】
いくつかの実現例では、ニューラルネットワークの層はシーケンスで配置される。他の実現例では、層は有向グラフで配置される。つまり、任意の特定の層が複数の入力、複数の出力、またはそれらの両方を受け取ることができる。ニューラルネットワークの層は、ある層の出力を前の層への入力として送り返すことができるように構成することもできる。
【0015】
本明細書に記載のハードウェア計算システムは、テンソル計算を複数の計算タイルにわたって分散させることによってニューラルネットワーク層の計算を実行することができる。ニューラルネットワーク層内で実行される計算プロセスは、入力活性化を含む入力テンソルと重みを含むパラメータテンソルとの乗算を含み得る。計算は、1つまたは複数のサイクルで入力活性化を重みと乗算すること、および多くのサイクルにわたって積の累積を実行することを含む。
【0016】
テンソルは多次元幾何学的オブジェクトであり、例示的な多次元幾何学的オブジェクトは行列およびデータアレイを含む。一般に、ソフトウェアアルゴリズムは、N次元テンソルをトラバースするために、ネスト化されたループを処理することによって、テンソル計算を実行するよう、計算タイルによって実行される。1つの例示的な計算プロセスでは、各ループは、N次元テンソルの特定の次元をトラバースすることを担当し得る。所与のテンソル構成体について、計算タイルは、特定のテンソルに関連する複数の内積計算を実行するためにそのテンソルの要素へのアクセスを必要とし得る。幅狭メモリ構造によって与えられる入力活性化が、幅広メモリ構造によって与えられるパラメータまたは重みで乗算されると、計算が行われる。テンソルはメモリに格納されるので、テンソルインデックスのセットはメモリアドレスのセットへの変換を必要とし得る。一般に、計算タイルのテンソルトラバーサルユニットは、テンソルに関連する各次元のインデックスと、インデックス要素がトラバースされて計算が実行される順序とを与える制御操作を実行する。乗算結
果が出力バスに書き込まれてメモリに格納されると、テンソル計算は終了する。
【0017】
図1は、ディープニューラルネットワーク(DNN)に関連するテンソル計算を加速するための例示的な計算システム100のブロック図を示す。システム100は、一般に、コントローラ102、ホストインターフェース108、入出力(I/O)リンク110、第1のタイルセット112および第2のタイルセット114を含む複数のタイル、分類器部分116、ならびにバスマップ118において識別されるデータバス(明確にするために示されているがシステム100には含まれていない)を含む。コントローラ102は一般に、データメモリ104、命令メモリ106、およびコンピュータ可読記憶媒体にエンコードされた1つまたは複数の命令を実行するように構成された少なくとも1つのプロセッサを含む。命令メモリ106は、コントローラ102の1つまたは複数のプロセッサによって実行可能な1つまたは複数の機械可読命令を格納することができる。データメモリ104は、システム100内で発生する計算に関連する様々なデータを格納し、その後それらのデータにアクセスするための、様々なデータ記憶媒体のうちのいずれでもよい。
【0018】
コントローラ102は、命令メモリ106に格納されている命令を含む、システム100内のテンソル計算に関係する1つまたは複数の命令を実行するように構成されている。いくつかの実現例では、データメモリ104および命令メモリ106は揮発性メモリユニット(単数または複数)である。他のいくつかの実現例では、データメモリ104および命令メモリ106は不揮発性メモリユニット(単数または複数)である。データメモリ104および命令メモリ106はまた、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、もしくはテープ装置、フラッシュメモリもしくは他の類似の固体メモリ装置、またはストレージエリアネットワークもしくは他の構成の装置を含む装置のアレイなど、別の形態のコンピュータ可読媒体であってもよい。様々な実現例では、コントローラ102は、コアマネージャ102として参照されるかまたはそのように呼ばれ得る。
【0019】
図示のように、ホストインターフェース108は、I/Oリンク110、コントローラ102、および分類器部分116に結合されている。ホストインターフェース108は、I/Oリンク110から命令およびデータパラメータを受け取り、命令およびパラメータをコントローラ102に与える。一般に、命令は命令バス124(後述)を介してシステム100内の1つまたは複数のデバイスに与えることができ、パラメータはリングバス128(後述)を介してシステム100内の1つまたは複数のデバイスに与えることができる。いくつかの実現例では、命令は初期時にホストインターフェース118からコントローラ102によって受け取られ、後のコントローラ102による実行のために命令メモリ106に格納される。
【0020】
分類器部分116は、同様に、コントローラ102および第2のタイルセット114のタイル7に結合されている。いくつかの実現例では、分類器部分116はシステム100内の別個のタイルとして実装される。代替の実現例では、分類器部分116は、コントローラ102のサブ回路またはサブデバイスとしてコントローラ102内に配置されるかまたは位置する。分類器部分116は一般に、全結合層の出力として受け取られる累積された活性化前値に対して1つまたは複数の関数を実行するように構成される。全結合層は、タイルセット112および114内のタイルにわたって分割されてもよい。したがって、各タイルは、タイルのメモリユニットに格納され得る活性化前値(すなわち線形出力)のサブセットを生成するように構成される。分類結果バス120は、分類器部分116からコントローラ102へのデータ経路を与える。関数後値(すなわち結果)を含むデータは、分類結果バス120を介して分類器部分116からコントローラ102に与えられる。
【0021】
バスマップ118は、第1のタイルセット112および第2のタイルセット114のタ
イル間に1つまたは複数の相互接続されたデータ通信経路を与えるデータバスを示す。バスマップ118は、
図1に示すように、分類結果バス120、CSR/マスターバス122、命令バス124、メッシュバス126、およびリングバス128を識別するための使用符号の説明を与える。一般に、タイルはシステム100のアクセラレータアーキテクチャ内のコアコンポーネントであり、システム内で発生するテンソル計算の焦点である。各タイルは個々の計算ユニットであり、複数のタイルはシステム内の他のタイルと対話して多層ニューラルネットワークの1つまたは複数の層にわたる計算(例えばテンソル計算)を加速することができる。例えば、計算は複数のタイルにわたって分散されることができる。計算効率は、いくつかの計算タイルにわたって多層ニューラルネットワークのテンソル計算を分散することに基づいて向上および加速させることができる。タイルセット112、114内のタイルは所与の命令に関連するテンソル計算の実行を共有することができるが、個々の計算ユニットは、タイルセット112、114内の他の対応するタイルに対して独立してテンソル計算のサブセットを実行するように構成される自己完結型計算コンポーネントである。
【0022】
制御および状態レジスタ(CSR)バス122は、プログラム構成を設定し、1つまたは複数のタイルに関連する状態レジスタを読み出す1つまたは複数の命令をコントローラ102が送ることを可能にする単一マスター複数スレーブバスである。CSRバス122は、1つのマスターバスセグメントと複数のスレーブバスセグメントとを有する単一のデイジーチェーン構成で接続することができる。
図1に示すように、CSRバス122は、タイルセット112、114のタイルおよびコントローラ102をリング状でホストインターフェース110に接続するバスデータ経路を介して結合する通信を与える。いくつかの実現例では、ホストインターフェース110は、CSRバスリングの単一のマスターであり、CSRバスアドレス空間全体は、ホストインターフェース110内のメモリ空間にメモリマップされる。
【0023】
CSRバス122は、例えば、コントローラ102が命令メモリ106から命令をフェッチすることを開始することを可能にするようにコントローラ102内のメモリバッファポインタをプログラミングすること、1つまたは複数の計算の間静的なままである様々なタイル設定(例:多項式近似計算のための係数表)を更新/プログラミングすること、および/または分類器部分116に対してファームウェアをロード/再ロードすることを含む1つ以上の動作を実行するためにホストインターフェース110によって使用され得る。一例では、ファームウェアの再ロードは、線形出力(すなわち、活性化前値)に適用されるべき新しい関数を含み得る。したがって、CSRバス122へのアクセスを有するすべてのスレーブは、そのスレーブに結び付けられてそれを識別する別個のノード識別子(ノードID)を有することになる。ノードIDは命令アドレスの一部であり、CSRパケットがスレーブにアドレス指定されているかどうかを判断するためにCSRスレーブ(すなわち、コントローラ102、タイル112、114および分類器116)によって使用、検査、または他の方法で調べられる。
【0024】
いくつかの実現例では、1つまたは複数の命令をホストインターフェース102によってコントローラ102を介して送ることができる。命令は、例えば、最初の7ビットが、命令を受け取り実行することになっている命令アドレス/宛先を示すヘッダ情報を含む、32ビット幅であり得る。ヘッダの最初の7ビットは、特定のノードIDを表すデータパラメータを含み得る。したがって、CSRバスリング上のスレーブ(例えば各タイル)は、命令のヘッダを検査して、マスター(ホストインターフェース110)による要求がヘッダを検査するタイルにアドレス指定されているかどうかを判断することができる。宛先が検査タイルであることをヘッダのノードIDが示さない場合、検査タイルは、入力CSR命令パケットを、次のタイルによる検査のために、次のタイルに接続されるCSRバス入力にコピーする。
【0025】
命令バス124は、コントローラ102から始まり、CSRバス122と同様に、タイルセット112、114内のタイルをリング状にコントローラ102に接続し戻すバスデータ経路を介して結合する通信を与える。一実現例では、コントローラ102は、命令バス124を介して1つまたは複数の命令をブロードキャストする。コントローラ102によってブロードキャストされる命令は、CSRバス122を介して与えられる命令とは異なり得る。しかしながら、バス124を介して受け取られる命令をタイルが受け取りおよび/または消費もしくは実行する態様は、CSRバス122を介して受け取られる命令を実行するためのプロセスと同様であり得る。
【0026】
一例では、命令のヘッダ(すなわち、ビットマップ)は、受信タイルに対して、その受信タイルが、その命令に関連するビットマップに基づいて特定の命令を消費する必要があることを示す。ビットマップは、ビットに関して定義された特定の幅を有し得る。命令は通常、命令のパラメータに基づいて1つのタイルから次のタイルへ転送される。一実現例では、命令バス124の幅は、命令のサイズ/幅よりも小さくなるように構成され得る。したがって、そのような構成では、命令の送信は数サイクルにわたって行われ、命令バス124のバスストップは、そのタイルに関連する適切なターゲット命令バッファにそのタイルで受け取られた命令を置くためのデコーダを有する。
【0027】
以下でさらに説明されるように、タイルセット112、114内のタイルは一般に、2つの広いカテゴリの命令をサポートするように構成される。2つの広いカテゴリは命令タイプとも呼ばれる。命令タイプは、テンソル演算(TensorOp)命令およびダイレクトメモリアクセス(DMAOp)命令を含む。いくつかの実現例では、DMAOp命令は、同時であることを許される1つまたは複数の特殊化を有する。1つまたは複数の特殊化は、DMAOp命令サブタイプまたはオペコードと呼ばれることがある。場合によっては、すべての固有のおよび/または有効なDMAOp命令タイプ/サブタイプタプルは、特定のタイル内に別々の命令バッファを有することになる。
【0028】
タイル112、114の特定のタイルにおいて、命令バス124に関連するバスストップは、ヘッダビットマップを調べて命令タイプ/サブタイプを判断する。命令は、タイルによって受け取られ、続いて、タイルによる命令の実行の前に、タイルの命令バッファに書き込まれてもよい。命令が書き込まれるタイルの命令バッファは、命令のタイプおよびサブタイプインジケータ/フィールドによって判断され得る。命令バッファは、1つまたは複数の関連する命令の消費を優先させる先入れ先出し(FIFO)制御方式を含み得る。したがって、このFIFO制御方式の下では、同じタイプ/サブタイプの命令は、命令が命令バスに到着した順序で常に実行されることになる。
【0029】
タイル内の異なる命令バッファは、TensorOp命令バッファおよびDMAOp命令バッファである。上記のように、命令タイプはTensorOp命令とDMAOp命令とを含む。DMAOp命令に関して、命令サブタイプ(「書き込み先」バッファ位置を示す)には以下が含まれる:1)メッシュインバウンド命令バッファ;2)メッシュアウトバウンド命令バッファ;3)幅狭‐幅広DMA命令バッファ;4)幅広‐幅狭DMA命令バッファ;および5)リングバスDMA命令バッファ。これらのバッファ位置は、
図2を参照して以下により詳細に説明される。本明細書を通して幅広指定および幅狭指定が使用されており、一般に、1つまたは複数のメモリユニットのおおよその幅のサイズ(ビット/バイト)を指す。本明細書で用いられるとき、「幅狭」は、各々が16ビット未満のサイズまたは幅を有する1つまたは複数のメモリユニットを指し得、「幅広」は、各々が64ビット未満のサイズまたは幅を有する1つまたは複数のメモリユニットを指し得る。
【0030】
メッシュバス126は、CSRバス122、命令バス124、およびリングバス128
(後述)とは異なるデータ通信経路を与える。
図1に示すように、メッシュバス126は、XおよびY次元の両方において各タイルをその対応する近隣タイルに結合または接続する通信経路を与える。様々な実現例では、メッシュバス126を用いて、近接するタイルにおける1つまたは複数の幅狭メモリユニット間で入力活性化量を移送することができる。示されるように、メッシュバス126は、入力活性化データを近接していないタイルに直接転送することを可能にしない。
【0031】
様々な実現例において、メッシュバス126およびメッシュバス126を介して接続される様々なタイルは以下の構成を有してもよい。メッシュの4つのコーナータイルには、2つのアウトバウンドポートおよび2つのインバウンドポートがある。メッシュの4つのエッジタイルには、3つのインバウンドポートおよび3つのアウトバウンドポートがある。すべての非エッジ、非コーナータイルには、4つのインバウンドポートおよび4つのアウトバウンドポートがある。一般に、N×Nタイルレイアウトの例では、エッジタイルはわずか3つの近隣タイルを有するタイルであり、コーナータイルは2つの近隣タイルを有するタイルである。メッシュバス126を介したデータフロー方法論に関して、一般に、特定のタイルに関してメッシュバス126を介して到着するすべての入力活性化は、そのタイルの1つまたは複数の幅狭メモリユニットにコミットされなければならない。さらに、4つより少ないインバウンドポートを有するタイル構成の場合、DMAOp命令は、存在しない入力ポート上でデータを待つ代わりに、タイルの幅狭メモリ内の位置にゼロ値を書き込んでもよい。同様に、4つよりも少ないアウトバウンドポートを有するタイル構成の場合、DMAOp命令は、存在しないポートに対する転送に関連する幅狭メモリ読出およびポート書込を実行しない。
【0032】
いくつかの実現例では、特定の入力活性化が書き込まれる、または読み出されることになる幅狭メモリユニットの位置またはアドレスは、メッシュバス126を介して与えられるインバウンド/アウトバウンドDMAOpに基づいてテンソルトラバーサルユニット(以下、「TTU」)によって生成されることになる。インバウンドDMAOpおよびアウトバウンドDMAOpは同時に実行されてもよく、必要な同期はコントローラ102によって管理される同期フラグ制御方式によって管理されることになる。TTUは、
図2および
図3を参照して以下でさらに詳細に説明される。
【0033】
リングバス128は、コントローラ102から始まり、CSRバス122および命令バス124と同様に、タイル112、114をリング状にコントローラ102に接続し戻すバスデータ経路を介して結合する通信を与える。様々な実現例では、リングバス128は、一般に、すべてのタイル112、114内のすべての幅広メモリユニット(
図2を参照して以下により詳細に説明される)を接続または結合する。したがって、リングバス128のペイロード幅は、タイルセット112、114の各タイル内に配置された幅広メモリユニットの幅に対応する。上述のように、リングバス128も、リングバス128を介して通信される命令またはパラメータを含むペイロードデータを消費する必要があるタイルを示すビットマップヘッダを含む。
【0034】
リングバス128を介して特定のタイルで受け取られるデータ(すなわちペイロード)に関しては、情報の受信に応答して、各タイルは、受信タイルに固有のビットマップヘッダに示される位置データをゼロに(すなわちクリア)してから、そのデータを別のタイルに転送する。したがって、ヘッダビットマップが、ペイロードを受け取ることになっている特定のタイルを示す残りのビットセットデータを有さないとき、別のタイルへのペイロードの転送は停止することになる。ペイロードデータは、一般に、深くネスト化されたループの実行に基づいて実行されるテンソル計算中に1つまたは複数のタイルによって用いられる活性化および重みを指す。
【0035】
いくつかの実現例では、コントローラ102は、リングバス128の一部であると説明され得る。一例では、特定のタイル内で実行されるDMAOp命令について、コントローラ102を用いて、リングバスストップからデータ/ペイロードをポップし、そのペイロードをリング内の次のタイル内のリングバスストップに転送してもよい。コントローラ102はさらに、ビットマップヘッダ内の命令によって必要とされる場合には、ペイロードデータをタイルの1つまたは複数の幅広メモリユニットにコミットさせることができる。データを書き込む必要がある1つまたは複数の幅広メモリユニットのアドレスは、特定のタイル内でDMAOp命令によって生成されてもよい。
【0036】
様々な実現例では、タイルセット112、114の各タイルは、ペイロードデータのプロデューサまたはペイロードデータのコンシューマのいずれかであることができる。タイルがペイロードデータのプロデューサである場合、タイルは、それの幅広メモリユニットのうちの1つまたは複数からデータを読み出し、そのデータを1つまたは複数の他のタイルによる消費のためにリングバス128を介してマルチキャストする。タイルがペイロードデータのコンシューマである場合、タイルはデータを受け取り、そのタイル内の1つまたは複数の幅広メモリユニットに書き込み、そのペイロードデータを1つまたは複数の他のタイルによる消費のために転送する。リングバス128を介したペイロードデータの移動に関しては、通常、任意の所与の時間においてリングバス128上にはデータのプロデューサ/マスターは1つだけである。すべてのタイルにおけるDMAOp命令実行順序(例えば、FIFO制御方式)は、所与の時間にリングバス128上にデータのプロデューサ/マスターが1つだけ存在することを保証するであろう。
【0037】
いくつかの実現例では、コントローラ102は、同期フラグ制御アーキテクチャを用いて、所与の時間にリングバス128上にペイロードデータのプロデューサ/マスターが1つだけ存在することを保証する。一例では、タイルによるリング出力への書込ごとに、対応する同期フラグカウントの増分がトリガされることになる。コントローラ102は、ペイロードデータを調べて、ペイロードを含むデータチャンクまたはセグメントの数を判断することができる。次にコントローラ102は、タイルによる実行を監視して、他のタイルがマスターモードで実行する前に、予想された数のデータセグメントがそのタイルによって転送および/または消費されることを保証する。
【0038】
リングバス128上に重複領域を持たない、リングバス128を介して接続されるローカルマルチキャストグループがある場合、リングバス128上には所与の時間にデータのプロデューサ/マスターが1つだけであることを保証することに例外が生じる。例えば、タイル0(マスター)は、タイル0~タイル3のグループ化におけるあるタイルにマルチキャスト(すなわち、データを生成)し、タイル4(マスター)は、タイル4~タイル7のグループ化におけるあるタイルに対して同じことを行い得る。このデュアルマスターマルチキャスト方法の重要な要件は、パケットの重複が発生し、1つまたは複数のデータ計算エラーを引き起こす可能性があるため、異なるマルチキャストグループが互いのデータパケットを参照できないようにすることである。
【0039】
図1に示すように、コントローラ102は、タイルセット112、114内のタイルをI/O110に結合または接続する通信データ経路を提供し、いくつかのコア機能を含む。コントローラ102のコア機能は、一般に、1つまたは複数のI/O入力活性化をタイルセット112、114内のタイルに供給すること、I/O110から受け取られる1つまたは複数の入力活性化およびパラメータをタイルに供給すること、I/O110から受け取られる1つまたは複数の命令をタイルに供給すること、I/O出力活性化をホストインターフェース108に送ること、ならびにCSRバス122およびリングバス128に対してリングストップとして機能することを含む。以下により詳細に説明するように、第1のタイルセット112および第2のタイルセット114は各々、内側ループおよび外側
ループからなる深いループネストに基づいて実行される1つまたは複数のテンソル計算を実行するために用いられる複数のタイルを含む。
【0040】
システム100は一般に次のように動作する。ホストインターフェース108は、所与の計算に対して発生するダイレクトメモリアクセス動作(DMAOp)を定義する1つまたは複数の命令をコントローラ102に与える。コントローラ102に供給される命令に関連する記述子は、多次元データアレイ(テンソル)に関連する大規模内積計算を容易にするためにコントローラによって必要とされる情報を含むことになる。一般に、コントローラ102は、ニューラルネットワークの所与の層に対してテンソル計算を実行するために、ホストインターフェース108から、入力活性化、タイル命令、およびモデルパラメータ(すなわち、重み)を受け取る。次に、コントローラ102は、命令によって定義されるデータフロー方式で命令をタイル112、114にマルチキャストさせることができる。上述のように、命令を消費するタイルは、次いで、命令ヘッダ内のビットマップデータに基づいて別のタイルへの新たな/後続の命令のブロードキャストを開始することができる。
【0041】
データフローに関して、入力活性化およびパラメータは、リングバス128を介してタイルセット112、114のタイルに送られる。タイル112、114の各々は、その特定のタイルに割り当てられる、出力活性化のサブセットを計算するのに必要な入力活性化のサブセットを格納することになる。タイルに対するDMAOp命令は入力活性化を幅広メモリから幅狭メモリへ移動させる。タイル内の計算は、必要な入力活性化、パラメータ/重み、および計算命令(TTU操作、メモリアドレスなど)がタイルで利用可能になったときに開始される。タイル内で生じる計算は、タイル内のMAC演算子(後述)が命令セットによって定義されたすべての内積演算を完了し、活性化前関数が乗算演算の結果(すなわち出力活性化)に適用されると、終了する。
【0042】
1つまたは複数のテンソル計算の結果は、計算を実行するタイルの幅狭メモリユニットに計算層の出力活性化を書き込むことを含む。あるテンソル計算では、メッシュバス126を介して近隣のタイルへの出力エッジ活性化の転送があることになる。近隣のタイルへの出力エッジ活性化の転送は、計算が複数の層にわたる場合に後続の層のために出力活性化を計算するために必要とされる。すべての層に対する計算が完了すると、DMAOpは、リングバス128を介して最終的な活性化を分類器タイル116に移動させる。次に、コントローラ102は、分類器タイル116から最終活性化を読み出し、DMAOpを実行して最終活性化をホストインターフェース108に移動させる。いくつかの実現例では、分類器部分116は、NNの出力層(すなわち最後の層)の計算を実行する。他の実現例では、NNの出力層は、分類器層、回帰層、または一般にニューラルネットワークに関連する別の層タイプのうちの1つである。
【0043】
図2は、例示的なニューラルネットワーク(NN)計算タイル200を示す。一般に、例示的なタイル200は、
図1を参照して上述した第1のタイルセット112および第2のタイルセット114内の任意のタイルに対応し得る。様々な実現例では、計算タイル200はまた、計算ユニット200として参照されるか、またはそう呼ばれることがある。各計算タイル200は、タイルセット112、114内の他の対応するタイルに対して独立して命令を実行するように構成された自己完結型計算ユニットである。上で簡単に説明したように、各計算タイル200は2つのタイプの命令、TensorOp命令およびDMAOp命令を実行する。一般に、各命令タイプは深いループネストに関連する計算操作を含み、したがって各命令タイプは一般に、すべてのループ反復の完了を確実にするために、複数の時間エポックにわたって実行されることになる。
【0044】
以下により詳細に論じられるように、異なる命令タイプは、計算タイル200内で管理
される同期フラグ制御を介してデータ上で同期する計算タイル200内の独立した制御ユニットによって実行される。同期フラグ制御は、計算タイル200内における異なる命令タイプの実行間の同時性を管理する。各命令タイプに関連する各計算操作は厳密な発行順序(すなわち先入れ先出し)で実行される。2つの命令タイプ、TensorOPおよびDMAOpに関し、これらの異なる命令タイプ間に順序付け保証はなく、各タイプは計算タイル200によって別々の制御スレッドとして扱われる。
【0045】
データフロー構成に関して、計算タイル200は一般に、計算タイル200に出入りするデータフローのための通信経路を各々が与えるデータ経路202およびデータ経路205を含む。上述のように、システム100は、リング構成でレイアウトされた3つの異なるデータバス構造、すなわちCSRバス122、命令バス124、およびリングバス128を含む。
図2を参照して、データ経路205は命令バス124に対応し、データ経路202は一般にCSRバス122およびリングバス128のうちの1つに対応する。示されるように、データ経路202は、計算タイル200を出るデータのための出力経路を与えるリング出力203と、計算タイル200に入るデータのための入力経路を与えるリング入力204とを含む。
【0046】
計算タイル200は、TensorOpテンソルトラバーサルユニット(TTU)226を含むTensorOp制御206と、DMAOpTTU228を含むDMAOp制御208とをさらに含む。TensorOp制御206は、一般に、TensorOpTTUレジスタ232への書込およびTensorOpTTUレジスタ232からの読出を管理し、TensorOpTTU226による実行のためのトラバース操作を管理する。同様に、DMAOp制御208は一般に、DMAOpTTUレジスタ234への書込およびDMAOpTTUレジスタ234からの読出を管理し、DMAOpTTU228による実行のためのトラバース操作を管理する。TTUレジスタ232は、TensorOp制御206による命令の実行でTensorOpTTU226によって実行されるべき操作を含む1つまたは複数の命令を格納するための命令バッファを含む。同様に、TTUレジスタ234は、DMAOp制御208による命令の実行でTTU228によって実行されるべき操作を含む1つまたは複数の命令を格納するための命令バッファを含む。
【0047】
以下でさらに説明されるように、TTU226および/または228は、計算タイル200によって用いられて、一般に幅狭メモリ210および幅広メモリ212に常駐する1つまたは複数のテンソルのアレイ要素をトラバースする。いくつかの実現例では、TTU226は、TensorOp制御206によって用いられて、深いループネストの実行に基づいて多次元テンソルの次元をトラバースするためのテンソル演算を与える。
【0048】
いくつかの実現例では、計算タイル200による実行のためのある命令は、データ経路205(すなわち命令バス124の一部)を介してタイルに到着する。計算タイル200はヘッダビットマップを調べて命令タイプ(TensorOpまたはDMAOp)および命令サブタイプ(読出動作または書込動作)を判断する。計算タイル200によって受け取られた命令は、続いて、命令タイプに応じて特定の命令バッファに書き込まれる。一般に、命令は、計算タイル200のコンポーネントによる命令の実行の前に受け取られ格納される(すなわち、バッファに書き込まれる)。
図2に示すように、命令バッファ(すなわち、TensorOpTTUレジスタ232およびDMAOpTTUレジスタ234)は各々、1つまたは複数の関連する命令の消費(実行)を優先する先入れ先出し(FIFO)制御方式を含むことができる。
【0049】
簡単に上述したように、テンソルは多次元幾何学的オブジェクトであり、例示的な多次元幾何学的オブジェクトは行列およびデータアレイを含む。深くネスト化されたループを含むアルゴリズムを計算タイル200によって実行して、1つ以上のネスト化されたルー
プを反復してN次元テンソルをトラバースすることによって、テンソル計算を実行してもよい。1つの例示的な計算プロセスでは、ループネストの各ループは、N次元テンソルの特定の次元をトラバースすることを担当し得る。本明細書に記載されるように、TensorOp制御206は、一般に、特定のテンソル構成体の次元要素をトラバースし、およびそれにアクセスして深いネスト化されたループによって定義される計算を完成させるシーケンスを駆動する1つまたは複数のテンソル演算を管理する。
【0050】
計算タイル200は、幅狭メモリ210および幅広メモリ212をさらに含む。狭幅および広幅の指定は、一般に、幅狭メモリ210および幅広メモリ212のメモリユニットの幅のサイズ(ビット/バイト)を指す。いくつかの実現例では、幅狭メモリ210は、各々16ビット未満のサイズまたは幅を有するメモリユニットを含み、幅広メモリ212は、各々32ビット未満のサイズまたは幅を有するメモリユニットを含む。一般に、計算タイル200はデータ経路205を介して入力活性化を受け取り、DMA制御208は入力活性化を幅狭メモリ210に書き込むよう動作を実行する。同様に、計算タイル200はデータ経路202を介してパラメータ(重み)を受け取り、DMA制御208はパラメータを幅広メモリ212に書き込むよう動作を実行する。いくつかの実現例では、幅狭メモリ210は、各メモリサイクルに対して、どの制御装置(例えば、TensorOp制御206またはDMAOp制御208)が幅狭メモリ210の共有メモリユニットにアクセスすることを許可されるかを判断するために共有メモリシステムで通常用いられるメモリアービタを含み得る。
【0051】
計算タイル200はさらに、入力活性化バス216と、各々がMAC演算子215および合計レジスタ220を含む複数のセルを含むMACアレイ214とを含む。一般に、MACアレイ214は、複数のセルにわたってMAC演算子215および合計レジスタ220を用いて、内積計算に関係する算術演算を含むテンソル計算を実行する。入力活性化バス216は、入力活性化が、幅狭メモリ210によって、MACアレイ214の各MAC演算子215によるそれぞれのアクセスに対して1つずつ与えられる、データ経路を与える。したがって、入力活性化の1つずつのブロードキャストに基づいて、特定のセルの単一のMAC演算子215が各々入力活性化を受け取ることになる。MACアレイ214のMAC演算子によって実行される算術演算は、一般に、幅狭メモリ210によって与えられる入力活性化を幅広メモリ212からアクセスされるパラメータと乗算して単一の出力活性化値を生成することを含む。
【0052】
算術演算中に、部分和を累積し、対応する、例えば合計レジスタ220に格納するか、または幅広メモリ212に書き込み、MACアレイ214の特定のセルによって再アクセスして、後続の乗算演算を完了してもよい。テンソル計算は、第1の部分と第2の部分とを有するものとして説明することができる。第1の部分は、例えば入力活性化とパラメータとの乗算を完了して出力活性化を生成することによって乗算演算が出力活性化を生成すると完了する。第2の部分は、出力活性化への非線形関数の適用を含み、第2の部分は、関数の適用後に出力活性化が幅狭メモリ210に書き込まれると完了する。
【0053】
計算タイル200はさらに、出力活性化バス218、出力活性化パイプライン224を含む非線形ユニット(NLU)222、NLU制御238、および計算タイル200内のコンポーネントのコア属性を示す参照マップ230を含む。明確にするために参照マップ230が示されているが、計算タイル200には含まれていない。コア属性には、特定のコンポーネントが、ユニット、記憶装置、演算子、制御装置、またはデータ経路であるかどうかが含まれる。一般に、テンソル計算の第1の部分が完了すると、出力活性化がMACアレイ214から出力活性化バス218を介してNLU222に与えられる。NLU222に到着した後、活性化パイプライン224を介して受け取られる、活性化関数を特定するデータが出力活性化に適用され、次いで、出力活性化は幅狭メモリ210に書き込ま
れる。いくつかの実現例では、出力活性化バス218は、少なくとも1つのパイプライン化されたシフトレジスタ236を含み、テンソル計算の第2の部分を完了することは、活性化バス218のシフトレジスタ236を用いて出力活性化を幅狭メモリ210に向けてシフトすることを含む。
【0054】
例えば、単一の計算タイル200についての、2つの多次元データアレイの内積計算に関して、MACアレイ214は、ロバストな単一命令複数データ(SIMD)機能を与える。SIMDは、一般に、すべての並列ユニット(複数のMAC演算子215)が(深いループネストに基づいて)同じ命令を共有するが、各MAC演算子215は異なるデータ要素上で命令を実行することを意味する。1つの基本的な例では、配列[1,2,3,4]および[5,6,7,8]を要素ごとに加算して1つのサイクルで配列[6,8,10,12]を取得するには、通常、各要素で演算を実行するために4つの算術演算ユニットが必要となる。SIMDを用いることによって、4つのユニットは同じ命令(例えば、「加算」)を共有し、計算を並列して実行することができる。命令が共有されるので、命令帯域幅および命令メモリに対する要件が低減され、それにより効率が向上する。したがって、システム100および計算タイル200は、テンソル計算において従来の方法よりも向上した加速および並列処理を与える。
【0055】
一例では、そして以下でより詳細に説明されるように、単一の命令が、複数のMACアレイ214による消費のために、コントローラ102によって複数の計算タイル200(
図1のタイルセット112、114を参照)に与えられ得る。一般に、ニューラルネットワーク層は複数の出力ニューロンを含むことができ、出力ニューロンは、出力ニューロンのサブセットに関連するテンソル計算がタイルセット112、114の特定のタイルに割り当てられることができるように、分割されることができる。次いで、タイルセット112、114の各タイルは、所与の層について、異なるニューロンのグループ上で、関連するテンソル計算を実行することができる。したがって、計算タイル200は、少なくとも2つの形態の並列処理を与えることができる:1)1つの形態は、タイルセット112、114の複数のタイルの間で(出力ニューロンのサブセットに対応する)出力活性化を分割することを含み;2)他の形態は、タイルセット112、114のタイル間の分割に基づく出力ニューロンの複数のサブセットの(単一の命令による)同時計算を含む。
【0056】
図3は、各々が8の深さを有する、追跡すべき4つのテンソルを含む例示的なテンソルトラバーサルユニット(TTU)構造300を示す。TTU300は一般に、カウンタテンソル302、ストライドテンソル304、初期テンソル306、および制限テンソル308を含む。TTU300はさらに、加算器バンク310およびテンソルアドレスインデックス312を含む。上述のように、テンソルは多次元幾何学的オブジェクトであり、テンソルの要素にアクセスするためには、各次元のインデックスが与えられなければならない。テンソルは幅狭メモリ210および幅広メモリ212に格納されるので、テンソルインデックスのセットをメモリアドレスのセットに変換しなければならない。いくつかの実現例では、インデックスのメモリアドレスへの変換は、メモリアドレスをインデックスの線形結合にし、テンソルアドレスインデックス312を介してアドレスを反映させることによって行われる。
【0057】
制御スレッドごとにTTUがあり、計算タイル200においては命令タイプごとに制御スレッド(TensorOPおよびDMAOp)がある。したがって、上述のように、計算タイル200には2組のTTUがある:1)TensorOpTTU226;および2)DMAOpTTU228。様々な実現例において、TensorOp制御206は、特定のテンソル演算の開始時にTTU300にTensorOpTTUカウンタ302、制限308、ストライド値304をロードさせ、命令がリタイアされる前にレジスタ値を変更しない。2つのTTUの各々は、計算タイル200において以下のメモリアドレスポー
トのためにアドレスを生成する必要があることになる:1)幅広メモリ212アドレスポート、および2)4つのアドレスポートとして提示される4つの独立した調停されたバンクを有する幅狭メモリ210。
【0058】
上述のように、いくつかの実現例では、幅狭メモリ210は、各メモリサイクルに対して、どの制御装置(例えば、TensorOp制御206またはDMAOp制御208)が幅狭メモリ210の共有メモリ資源にアクセスすることを許可されるかを判断するために共有メモリシステムで通常用いられるメモリアービタを含み得る。一例では、異なる命令タイプ(TensorOpおよびDMAOp)は、調停が必要な、メモリアクセスを要求する独立した制御スレッドである。特定の制御スレッドがテンソル要素をメモリにコミットすると、その制御スレッドはメモリにコミットされたテンソルレファレンスのカウンタ302を増分する。
【0059】
一例では、TensorOp制御206がテンソルの特定の要素にアクセスするための命令を実行すると、TTU300はテンソルの特定の要素のアドレスを判断することができ、制御206はストレージ、例えば幅狭メモリ210にアクセスして、特定の要素の活性化値を表すデータを読み出し得る。いくつかの実現例では、プログラムはネスト化されたループを含むことができ、制御206は、ネスト化されたループに関連する現在のインデックス変数値に従って、ネスト化されたループ内で二次元アレイ変数の要素にアクセスするよう、命令を実行することができる。
【0060】
TTU300は、所与のテンソルについて最大X数のTTU行に対して同時にトラバーサル状態を保持してもよい。TTU300に同時に常駐する各テンソルは、専用のハードウェアテンソル制御記述子を占有する。ハードウェア制御記述子は、行位置ごとにX数のTTUカウンタ302、ストライド304、および行次元ごとに最大X数のTTUカウンタを有するテンソルをサポートする制限レジスタ308からなることができる。いくつかの実現例では、行数および行あたりのカウンタ数は異なり得る。
【0061】
所与の位置レジスタについて、最終メモリアドレスは、位置レジスタをともに加算することを含む加算演算から計算される。ベースアドレスはカウンタ302に組み込まれる。同じメモリ内に常駐するテンソルレファレンスのために、1つ以上の加算器が共有される。一実現例では、サイクル内の任意の所与のポート上には単一のロード/ストアしか存在できないため、同じ幅狭メモリまたは幅広メモリ内に存在する複数のテンソルレファレンスがそれらのカウンタを任意の所与のサイクルで増分されないこと確実にすることがループネスト制御の機能となる。オフセット値の判断を含むメモリアクセスアドレス値を計算するためのレジスタの使用は、2016年2月3日に出願された「マトリックス処理装置(Matrix Processing Apparatus)」と題する特許出願連続番号第15/014,265
号により詳細に記載されており、その全体をここに明示的に引用により援用する。
【0062】
例えば、ソフトウェアアルゴリズムがN次元テンソルを処理するとき、各ループがN次元テンソルの各次元をトラバースする役割を果たす、ネスト化されたループが用いられてもよい。多次元テンソルは、行列または多次元行列であり得る。N次元テンソルの各次元は1つまたは複数の要素を含むことができ、各要素はそれぞれのデータ値を格納することができる。例えば、テンソルはプログラム内の変数であり得、変数は三次元を有し得る。第1の次元は300個の要素の長さを有してもよく、第2の次元は1000個の要素の長さを有してもよく、第3の次元は20個の要素の長さを有してもよい。
【0063】
ネスト化されたループ内でテンソルをトラバースすることは、要素の対応するデータ値をロードまたは格納するために要素のメモリアドレス値の計算を必要とし得る。たとえば、forループはネスト化されたループであり、3つのループインデックス変数で追跡さ
れる3つのループをネスト化して3次元テンソルをトラバースすることができる。場合によっては、プロセッサは、内側ループのループ境界を外側ループインデックス変数で設定するなど、ループ境界条件を実行する必要があり得る。例えば、ネストされたループの最も内側のループを出るかどうかを判断する際に、プログラムは、最も内側のループのループインデックス変数の現在値と、ネストされたループの最も外側のループのループインデックス変数の現在値とを比較してもよい。
【0064】
一般に、計算タイルの処理ユニットがテンソルの特定の要素にアクセスするための命令を実行すると、テンソルトラバーサルユニットはテンソルの特定の要素のアドレスを判断し、処理ユニットが記憶媒体(メモリ)にアクセスして特定の要素の値を表すデータを読み出せるようにする。例えば、プログラムはネスト化されたループを含むことができ、処理ユニットは、命令を実行して、ネスト化されたループに関連する現在のインデックス変数値に従って、ネスト化されたループ内において二次元アレイ変数の要素にアクセスすることができる。ネスト化されたループに関連する現在のインデックス変数値に基づいて、テンソルトラバーサルユニットは、二次元アレイ変数の第1の要素からのオフセットを表すオフセット値を判断し得る。処理ユニットは、次いで、オフセット値を用いてメモリから二次元アレイ変数の特定の要素にアクセスする。
【0065】
以下は、特殊化されたTTU300をインスタンス化するために用いられてもよいテンプレートパラメータを与える。1)X数のTTU行;2)行ごとのX数のTTUカウンタ;3)X数のTTU加算器ユニット;4)TTU行ごとに、共有される加算器参照を示す;および5)カウンタごとにXカウンタサイズ[TTU][行][深さ]を示す。すべてのTTUレジスタはアーキテクチャ上可視である。計算のためにアクセスされる必要がある特定のテンソル要素のアドレス(すなわちテンソルアドレス312)は、カウンタの加算の結果である。増分信号が制御スレッドからTTUの行に発行されると、TTU300は単一のサイクル動作を実行し、最も内側の次元をその次元のストライド304によって増分し、そしてすべての深さを通してロールオーバーを伝播する。
【0066】
一般に、TTU300は、1つまたは複数のテンソルに関連する状態を判断する。状態は、ループ境界値、現在のループインデックス変数値、メモリアドレス値を計算するための次元乗数、および/または分岐ループ境界を処理するためのプログラムカウンタ値を含むことができる。TTU300は、1つまたは複数のテンソル状態要素と算術論理ユニットとを含むことができる。テンソル状態要素の各々は、記憶要素、例えばレジスタまたは他の任意の好適な記憶回路であり得る。いくつかの実現例では、テンソル状態要素は、特許出願連続番号第15/014,265号にさらに詳細に記載されているように、物理的または論理的に異なるグループに構成されてもよい。
【0067】
図4は、活性化404を入力バス216を介して1つまたは複数の積和(MAC)演算子にブロードキャストする幅狭メモリ210を含む例示的なアーキテクチャを示す。シフトレジスタ404は、MACセル410内の1つまたは複数のMAC演算子215による受け取りのために活性化404が一度に1つずつ入力バス216に送出されるシフト機能を与える。一般に、MAC演算子215を含むMACセル410は、部分和を計算する計算セルとして定義することができ、いくつかの実現例では、部分和データを出力バス218に書き込むように構成されている。示されるように、セル410は、1つまたは複数のMAC演算子からなってもよい。一実現例では、MACセル410内のMAC演算子215の数は、セルの発行幅と呼ばれる。一例として、二重発行セルは、(幅狭メモリ210からの)2つの活性化値と(幅広メモリ212からの)2つのパラメータとの乗算を計算し2つ乗数の結果と現在の部分和との間で加算を実行できる2つのMAC演算子を有するセルを指す。
【0068】
上述のように、入力バス216は、線形ユニット(すなわち、MACアレイ214)のMAC演算子215に入力活性化を与えるブロードキャストバスである。いくつかの実現例では、同じ入力がすべてのMAC演算子215の間で共有される。入力バス216の幅は、所与のMACアレイ214についてブロードキャスト入力を対応する数のセルに供給するのに十分に広くなければならない。入力バス216の構造を説明するために以下の例を考察する。線形ユニット内のセルの数が4に等しく、活性化幅が8ビットに等しいとき、入力バス216は、サイクルごとに最大4つの入力活性化を与えるように構成することができる。この例では、MACアレイ214内のすべてのセルは、ブロードキャストされる4つの活性化のうちの1つのみにアクセスするであろう。
【0069】
計算タイル200によって受け取られる命令のTensorOpフィールド設定に基づいて、MACアレイ214のセルは、同じ入力活性化を用いて計算を実行する必要があり得る。これは、MACアレイ214のセル内のZout分割と呼ばれてもよい。同様に、セル内のZin分割は、MACアレイ214のセルが計算を実行するために異なる活性化を必要とするときに生じる。前者の場合、単一の入力活性化は4回複製され、幅狭メモリ210から読み出された4つの活性化が4サイクルにわたってブロードキャストされる。後者の場合、幅狭メモリ210の読出がサイクルごとに必要とされる。前述の例では、TensorOp制御206は、コントローラ102から受け取られる命令の実行に基づいてこのブロードキャスト方法をオーケストレーションする。
【0070】
図5は、
図2および
図4の幅狭メモリユニット210に出力活性化を与えるための出力バス218を含む例示的なアーキテクチャを示す。一般に、計算タイル200内のMACアレイ214の各MACセル215は、異なる出力活性化を計算する。しかしながら、出力特徴アレイに関して、出力特徴深さが計算タイル200内のMACセル215の数より少ない場合、セルは1つまたは複数のセルグループを形成するようにグループ化されてもよい。セルグループ内のすべてのMACセル215は、同じ出力を(すなわち、出力特徴マップについて)計算するが、各セルは、Zin次元のサブセットに対応する、出力のサブセットを計算するにすぎない。その結果、MACセル215の出力は、ここでは、最終的な線形出力ではなく、部分和である。いくつかの実現例では、NLU222は、NLU制御238によってNLU222に与えられる制御信号に基づいてこれらの部分和を最終線形出力に集約する。
【0071】
上述のように、出力バス218はパイプライン化されたシフトレジスタである。様々な実現例では、テンソル計算の第1の部分が終了し、TensorOp制御206が(命令を実行することによって)部分和を書き出す必要があることを示すと、出力バス218に与えられる部分和の並列ロードがあることになる。並列ロードの数は、計算タイル200内のMACセルの数に対応することになる。TensorOp制御206は、次いで、部分和量をシフトアウトさせ、非線形パイプラインを介して送らせる。いくつかの実現例では、タイル内のすべてのMACセルが実際に計算を実行するために利用されるわけではない状況があり得る。このような状況では、出力バスにシフトされるすべての部分和が有効になるわけではないことになる。この例では、TensorOp制御206は、MACアレイ214に制御信号を与えて、シフトアウトされるべき有効セルの数を示してもよい。出力バス218にロードされる並列ロード量は依然として計算タイル内のMACセルの数に対応するが、有効値のみがシフトアウトされて幅狭メモリ210にコミットされることになる。
【0072】
図6は、
図2のニューラルネットワーク計算タイルを200用いてテンソル計算を実行するためのプロセス600の例示的なフローチャートである。プロセス600はブロック602で始まり、計算タイル200の幅狭メモリ210は入力活性化データバス216に活性化を1つずつ送る(すなわちブロードキャストする)。活性化値は、幅狭メモリ21
0に格納される。幅狭メモリ210は、入力量にアクセスするための特定のメモリ位置へのアドレス指定を許可するスタティックランダムアクセスメモリ(SRAM)バンクの集まりであり得る。幅狭メモリ210から読み出された活性化は、入力活性化バス216を介して、複数のMAC演算子215および合計レジスタ220を含むMACアレイ214(すなわち、線形ユニット)の線形セルにブロードキャストされる。プロセス600のブロック604で、計算タイル200のMAC演算子215は各々2つの入力を受け取り、1つの入力(活性化)は入力活性化バス216から受け取られ;別の入力(パラメータ)は幅広メモリ212から受け取られる。したがって、活性化は、各MAC演算子215の入力のうちの1つを供給し、MACアレイ214のセル内の各MAC演算子215は幅広メモリ212からそれらの第2の乗数入力を得る。
【0073】
プロセス600のブロック606において、計算タイル200のMACアレイ214は、メモリからアクセスされるデータアレイ構造の要素に基づいて内積計算を含むテンソル計算を実行する。幅広メモリ212は、線形ユニットの幅(32ビット)に等しいビット単位の幅を有する。したがって、線形ユニット(LU)は、ベクトルメモリ(すなわち、幅広メモリ212)からデータを受け取るSIMDベクトル算術論理ユニット(ALU)ユニットである。いくつかの実現例では、MAC演算子215は、幅広メモリ212からアキュムレータ入力(部分和)も取得し得る。いくつかの実現例では、2つの異なるオペランド(パラメータおよび部分和)に関する読出および/または書込について、幅広メモリ212ポートに対して時分割がある。一般に、領域を最適化するために、幅広メモリ212は限られた数のポートを有し得る。その結果、幅広メモリ212からオペランド(例えば、パラメータ)を読み出し、同時に幅広メモリ212にオペランド(例えば、部分和)を書き込む必要がある場合、特定のオペランドに関連するパイプラインが機能停止し得る。
【0074】
ブロック608で、計算タイル200の計算セル(MAC演算子215および合計レジスタ220を有する)が、MAC/計算セルによって実行される乗算演算に基づいて少なくとも1つの出力活性化を生成する。MACセル動作の結果は、(部分和算術演算中に)幅広メモリに書き戻される部分和、または出力バス218に送られる出力活性化のいずれかを含む。ブロック610で、計算タイル200のNLU222は、出力活性化に非線形活性化関数を適用し、次いで活性化を幅狭メモリ210に書き込む。いくつかの実現例では、出力バス218はシフトレジスタであり、MAC演算子215からの結果/出力活性化の並列ロードを累積することができるが、非線形関数の適用および同じタイルの幅狭メモリ210への書き込み動作のために、それらを一度に1つずつシフトアウトする。
【0075】
本明細書において記載される主題および機能的動作の実施形態は、本明細書に開示される構造およびそれらの構造的等価物を含む、デジタル電子回路系において、有形で実施されるコンピュータソフトウェアもしくはファームウェアにおいて、コンピュータハードウェアにおいて、またはそれらの1つ以上の組合せにおいて実現され得る。本明細書に記載される主題の実施形態は、1つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するために有形の非一時的なプログラム担体上でエンコードされたコンピュータプログラム命令の1つ以上のモジュールとして実現され得る。代替的に、または加えて、プログラム命令は、データ処理装置による実行に対して好適な受信側装置への送信のために情報をエンコードするよう生成される、たとえばマシンにより生成された電気信号、光信号、または電磁気信号などの、人為的に生成された伝播される信号上でエンコードすることができる。コンピュータ記憶媒体は、コンピュータ可読記憶装置、コンピュータ可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの1つ以上の組合せであり得る。
【0076】
本明細書に記載されるプロセスおよび論理フローは、入力データ上で動作し出力を生成
することにより機能を実行するよう1つ以上のプログラマブルコンピュータが1つ以上のコンピュータプログラムを実行することによって実行され得る。プロセスおよび論理フローは、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)といった特殊目的論理回路、またはGPGPU(汎用グラフィック処理装置)によっても実行され得、装置もそれらにより実現され得る。
【0077】
コンピュータプログラムの実行に好適であるプロセッサは、例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはその両方または任意の種類の中央処理ユニットに基づき得る。一般に、中央処理ユニットは、リードオンリメモリもしくはランダムアクセスメモリまたはその両方から命令およびデータを受取る。コンピュータの必須の要素は、命令を実行するための中央処理ユニットと、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための1つ以上の大容量記憶装置を含むか、当該1つ以上の大容量記憶装置からデータを受取るかもしくは当該1つ以上の大容量記憶装置にデータを転送するよう動作可能に結合されるか、またはその両方を行う。しかしながら、コンピュータはそのような装置を有する必要はない。
【0078】
コンピュータプログラム命令およびデータを格納するのに好適であるコンピュータ可読媒体は、例として、たとえばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイスを含むすべての形態の不揮発性メモリ、媒体およびメモリデバイス;たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補足され得るか、または特殊目的論理回路に組み込まれ得る。
【0079】
本明細書は多くの特定の実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴であり得る記載として解釈されるべきである。別個の実施形態の文脈で本明細書において記載されるある特徴は、単一の実施形態において組合せでも実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組合わせでも実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載され、最初はそのように請求されていさえする場合もあるが、請求される組合せからの1つ以上の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、部分的組合わせまたは部分的組合わせの変形例に向けられ得る。
【0080】
同様に、動作が図においては特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきではなく、または、すべての示された動作が実行される必要があると理解されるべきではない。ある状況においては、マルチタスキングおよび並列処理が有利であり得る。さらに、上述の実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきではなく、記載されるプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に統合され得るかまたは複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【0081】
その他の実現例は、以下の例にまとめられる。
例1:テンソル計算を加速するための計算ユニットであって、第1のデータ幅を有し、入力活性化または出力活性化のうちの少なくとも1つを格納するための第1のメモリバンクと、第1のデータ幅よりも大きい第2のデータ幅を有し、計算を実行する際に用いられ
る1つまたは複数のパラメータを格納するための第2のメモリバンクと、第2のメモリバンクからパラメータを受け取り計算を実行する少なくとも1つの積和(「MAC」)演算子を含む少なくとも1つのセルと、少なくとも第1のメモリバンクとデータ通信する第1のトラバーサルユニットとを備え、第1のトラバーサルユニットは、第1のメモリバンクに制御信号を与えて、MAC演算子によってアクセス可能なデータバスに入力活性化を与えるように構成され、計算ユニットは、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行し、1つまたは複数の計算は、MAC演算子によって実行され、部分的に、データバスから受け取られる入力活性化と第2のメモリバンクから受け取られるパラメータとの乗算演算を含む、計算ユニット。
【0082】
例2:計算ユニットは、複数のループを含むループネストを実行することによって、計算のうちの1つまたは複数を実行し、ループネストの構造は、データアレイの1つまたは複数の次元をトラバースするよう第1のトラバーサルユニットによって用いられるそれぞれのループを含む、例1に記載の計算ユニット。
【0083】
例3:1つまたは複数の計算は、第1のトラバーサルユニットによって与えられるテンソル演算に部分的に基づいて実行され、テンソル演算は、データアレイの1つまたは複数の要素にアクセスするためのループネスト構造を含む、例2に記載の計算ユニット。
【0084】
例4:計算ユニットの外部にあるソースから受け取られる命令に基づいて、第1のメモリバンクの少なくとも1つのメモリ位置および第2のメモリバンクの少なくとも1つのメモリ位置にアクセスするように構成される第2のトラバーサルユニットをさらに備える、例1~例3の1つに記載の計算ユニット。
【0085】
例5:第1のトラバーサルユニットはテンソル演算トラバーサルユニットであり、第2のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、データアレイは複数の要素を含むテンソルに対応する、例4に記載の計算ユニット。
【0086】
例6:計算ユニットは非線形ユニットを含み、計算の第1の部分は乗算演算に基づいて1つまたは複数の出力活性化を生成することを含み、計算の第2の部分は非線形ユニットによって非線形関数を1つまたは複数の出力活性化に適用することを含む、例1~例5の1つに記載の計算ユニット。
【0087】
例7:計算ユニットによって実行される1つまたは複数の計算は、出力活性化を第1のメモリバンクにシフトするようシフトレジスタを用いることを含む、例6に記載の計算ユニット。
【0088】
例8:計算ユニットの外側に延びるリングバスの一部をさらに備え、リングバスは、第1のメモリバンクと他の近接する計算ユニットのメモリバンクとの間および第2のメモリバンクと他の近接する計算ユニットのメモリバンクとの間にデータ経路を与える、例1~例8の1つに記載の計算ユニット。
【0089】
例9:第2のメモリバンクは、部分和または1つもしくは複数のプーリング層入力のうちの少なくとも1つを格納するように構成されている、例1~例8の1つに記載の計算ユニット。
【0090】
例10:テンソル計算を加速するための、コンピュータにより実施される方法であって、第1のデータ幅を有する第1のメモリバンクが第1のトラバーサルユニットから制御信号を受け取ったことに応答して、第1のメモリバンクによって第1の入力活性化を送ることを備え、第1のメモリバンクは、計算ユニット内に配置され、第1の入力活性化は、計
算ユニットの少なくとも1つのセルによってアクセス可能なデータバスによって与えられ、方法はさらに、少なくとも1つのセルによって、第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクから1つまたは複数のパラメータを受け取ることを備え、少なくとも1つのセルは少なくとも1つの積和(「MAC」)演算子を含み、方法はさらに、MAC演算子によって、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行することを備え、1つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第1の入力活性化と第2のメモリバンクから受け取られる少なくとも1つのパラメータとの乗算演算を含む。
【0091】
例11:1つまたは複数の計算は、計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、ループネストの構造は、データアレイの1つまたは複数の次元をトラバースするよう第1のトラバーサルユニットによって用いられるそれぞれのループを含む、例10に記載のコンピュータにより実施される方法。
【0092】
例12:第1のトラバーサルユニットによって、データアレイの1つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、例11に記載のコンピュータにより実施される方法。
【0093】
例13:第1のトラバーサルユニットはテンソル演算トラバーサルユニットであり、第2のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、データアレイは複数の要素を含むテンソルに対応する、例10~例12の1つに記載のコンピュータにより実施される方法。
【0094】
例14:乗算演算に基づいて少なくとも1つの出力活性化を生成することによって1つまたは複数の計算の第1の部分を実行することをさらに備える、例10~例13の1つに記載のコンピュータにより実施される方法。
【0095】
例15:1つまたは複数の出力活性化に非線形関数を適用することによって1つまたは複数の計算の第2の部分を実行することをさらに備える、例14に記載のコンピュータにより実施される方法。
【0096】
例16:1つまたは複数のプロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体であって、命令は、そのように実行されると、1つまたは複数のプロセッサに動作を実行させ、動作は、第1のデータ幅を有する第1のメモリバンクが第1のトラバーサルユニットから制御信号を受け取ったことに応答して、第1のメモリバンクによって第1の入力活性化を送ることを含み、第1のメモリバンクは、計算ユニット内に配置され、第1の入力活性化は、計算ユニットの少なくとも1つのセルによってアクセス可能なデータバスによって与えられ、動作はさらに、少なくとも1つのセルによって、第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクから1つまたは複数のパラメータを受け取ることを含み、少なくとも1つのセルは少なくとも1つの積和(「MAC」)演算子を含み、動作はさらに、MAC演算子によって、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行することを含み、1つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第1の入力活性化と第2のメモリバンクから受け取られる少なくとも1つのパラメータとの乗算演算を含む。
【0097】
例17:1つまたは複数の計算は、計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、ループネストの構造は、データアレイの1つまたは複数の次元をトラバースするよう第1のトラバーサルユニットによって用いられるそれぞれのループを含む、例16に記載の非一時的コンピュータ可読記憶媒体。
【0098】
例18:第1のトラバーサルユニットによって、データアレイの1つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、例17に記載の非一時的コンピュータ可読記憶媒体。
【0099】
例19:乗算演算に基づいて少なくとも1つの出力活性化を生成することによって1つまたは複数の計算の第1の部分を実行することをさらに備える、例16~例18の1つに記載の非一時的コンピュータ可読記憶媒体。
【0100】
例20:1つまたは複数の出力活性化に非線形関数を適用することによって1つまたは複数の計算の第2の部分を実行することをさらに備える、例19に記載の非一時的コンピュータ可読記憶媒体。
【0101】
主題の特定の実施形態が記載された。他の実施形態は以下の請求の範囲内にある。たとえば、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順または連続する順であることを必ずしも必要としない。ある実現例においては、マルチタスキングおよび並列処理が有利であり得る。
【手続補正書】
【提出日】2024-04-05
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
複数の計算タイルを含むシステムであって、前記複数の計算タイルの各計算タイルは、
第1のデータ幅を有する第1のメモリバンクと、
前記第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクと、
第1のレジスタを含む第1の計算ユニットとを備え、前記第1の計算ユニットは、
第1の命令タイプに従う命令を前記第1のレジスタに格納し、
前記第1の命令タイプに従う前記命令を実行するよう構成され、前記システムはさらに、
第2のレジスタを含む第2の計算ユニットを備え、前記第2の計算ユニットは、
第2の命令タイプに従う命令を前記第2のレジスタに格納し、
前記第2の命令タイプに従う前記命令を実行するよう構成される、システム。
【請求項2】
前記第1のメモリバンクは、前記第1の計算ユニットおよび前記第2の計算ユニットのいずれが前記第1のメモリバンクのメモリ資源にアクセスできるかを判断するよう構成されるメモリアービタを含む、請求項1に記載のシステム。
【請求項3】
前記第1のレジスタおよび前記第2のレジスタの各々は、それぞれ前記第1のレジスタおよび前記第2のレジスタに格納される命令の実行を優先する先入れ先出し制御方式を含む、請求項1または2に記載のシステム。
【請求項4】
前記第1の計算ユニットは、入力活性化パラメータを前記第1のメモリバンクに書き込むよう構成され、
前記第2の計算ユニットは、重みパラメータを前記第2のメモリバンクに書き込むよう構成される、請求項1~3のいずれか1項に記載のシステム。
【請求項5】
算術演算ユニットをさらに備え、前記算術演算ユニットは、算術演算セルのアレイを含む、請求項1~4のいずれか1項に記載のシステム。
【請求項6】
前記算術演算セルのアレイの各算術演算セルは、積和演算を実行するよう構成される、請求項1~5のいずれか1項に記載のシステム。
【請求項7】
前記第1の計算ユニットは、テンソル演算の開始において複数のテンソルトラバーサルユニットからデータパラメータをロードするよう構成される、請求項1~6のいずれか1項に記載のシステム。
【請求項8】
前記データパラメータは、カウンタ値、制限値、およびストライド値を含む、請求項7に記載のシステム。
【請求項9】
計算タイルを動作させるための方法であって、前記計算タイルは、第1のデータ幅を有する第1のメモリバンクと、前記第1のデータ幅よりも大きい第2のデータ幅を有する第2のメモリバンクと、第1のレジスタを含む第1の計算ユニットと、第2のレジスタを含む第2の計算ユニットとを備え、前記方法は、
第1の命令タイプに従う命令を前記第1のレジスタに格納することと、
前記第1の命令タイプに従う前記命令を実行することと、
第2の命令タイプに従う命令を前記第2のレジスタに格納することと、
前記第2の命令タイプに従う前記命令を実行することとを含む、方法。
【請求項10】
前記第1のメモリバンクはメモリアービタを含み、前記方法は、前記メモリアービタが、前記第1の計算ユニットおよび前記第2の計算ユニットのいずれが前記第1のメモリバンクのメモリ資源にアクセスできるかを判断することを含む、請求項9に記載の方法。
【請求項11】
前記第1のレジスタおよび前記第2のレジスタの各々は、それぞれ前記第1のレジスタおよび前記第2のレジスタに格納される命令の実行を優先する先入れ先出し制御方式を含む、請求項9または10に記載の方法。
【請求項12】
入力活性化パラメータを前記第1のメモリバンクに書き込むことと、
重みパラメータを前記第2のメモリバンクに書き込むこととを含む、請求項9~11のいずれか1項に記載の方法。
【請求項13】
前記計算タイルは算術演算ユニットを含み、前記算術演算ユニットは、算術演算セルのアレイを含む、請求項9~12のいずれか1項に記載の方法。
【請求項14】
前記算術演算セルのアレイの少なくとも1つの算術演算セルが積和演算を実行することを含む、請求項13に記載の方法。
【請求項15】
前記第1の計算ユニットがテンソル演算の開始において複数のテンソルトラバーサルユニットからデータパラメータをロードすることを含む、請求項9に記載の方法。
【請求項16】
前記データパラメータは、カウンタ値、制限値、およびストライド値を含む、請求項15に記載の方法。
【外国語明細書】