(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-08-29
(45)【発行日】2024-09-06
(54)【発明の名称】チップ上に常駐するパラメータを用いたニューラルネットワークアクセラレータ
(51)【国際特許分類】
G06F 17/16 20060101AFI20240830BHJP
G06N 3/063 20230101ALI20240830BHJP
【FI】
G06F17/16 M
G06N3/063
G06F17/16 B
【外国語出願】
(21)【出願番号】P 2022176493
(22)【出願日】2022-11-02
(62)【分割の表示】P 2019568100の分割
【原出願日】2018-08-09
【審査請求日】2022-12-01
(32)【優先日】2017-08-11
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】テマム,オリビエ
(72)【発明者】
【氏名】カイタン,ハーシット
(72)【発明者】
【氏名】ナラヤナスワミ,ラビ
(72)【発明者】
【氏名】ウ,ドン・ヒョク
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2001-117900(JP,A)
【文献】米国特許出願公開第2016/0358069(US,A1)
【文献】特表2019-537793(JP,A)
【文献】米国特許第09710265(US,B1)
【文献】Yunji Chen, et al,DianNao family: energy-efficient hardware accelerators for machine learning,Communications of the ACM,ACM,2016年10月28日,Volume 59, Issue 11,105-112,[令和5年8月25日検索],インターネット <URL:https://dl.acm.org/doi/10.1145/2996864>
【文献】安藤 洸太,BRein Memory:バイナリ・インメモリ再構成型深層ニューラルネットワークアクセラレータ,映像情報メディア学会技術報告 Vol.41 No.25 ITE Technical Report,日本,(一社)映像情報メディア学会 The Institute of Image Information and Television Engineers,2017年07月24日,第41巻 No.25,101-106
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06N 3/063
(57)【特許請求の範囲】
【請求項1】
テンソル計算を加速するためのアクセラレータであって、
計算ユニットを含み、前記計算ユニットは、
メモリバンクを備え、前記メモリバンクは、
十分な量の機械学習パラメータを前記計算ユニット上に格納し、所与の機械学習モデルについて、特定レベルよりも下の遅延および特定レベルよりも上のスループットを可能にするように構成され、
前記計算ユニットはさらに、前記メモリバンクから格納された前記機械学習パラメータを受け取って1つまたは複数の算術演算を実行する少なくとも1つの演算子を含む複数のセルを備え、
前記複数のセルの各々は、単一の命令により、異なるデータを処理するアレイとして構成され、
前記1つまたは複数の算術演算は、データアレイの少なくとも1つの要素に関連付けられ、前記1つまたは複数の算術演算は、前記少なくとも1つの演算子によって実行され、部分的に、
入力活性化値と前記メモリバンクから受け取る前記機械学習パラメータの1つとの乗算演算を含み、
前記入力活性化値は、ニューラルネットワークにおける、前記乗算演算を含む層の直前の層の活性化関数により出力された活性化値であり、
前記メモリバンク、前記
入力活性化値を提供するように構成された別のメモリバンクと通信するテンソルトラバーサルユニット、および前記少なくとも1つの演算子は、同じダイ上に位置する、アクセラレータ。
【請求項2】
前記メモリバンクは、100,000個よりも多くのパラメータを格納するように構成される、請求項1に記載のアクセラレータ。
【請求項3】
前記メモリバンクは、1,000,000個よりも多くのパラメータを格納するように構成される、請求項1に記載のアクセラレータ。
【請求項4】
前記メモリバンクは、100,000,000個よりも多くのパラメータを格納するように構成される、請求項1~3のいずれかに記載のアクセラレータ。
【請求項5】
前記メモリバンクは、SRAMを含む、請求項1~4のいずれかに記載のアクセラレータ。
【請求項6】
前記少なくとも1つの演算子がアクセス可能なデータバスをさらに備える、請求項1~5のいずれかに記載のアクセラレータ。
【請求項7】
前記テンソルトラバーサルユニットは、前記別のメモリバンクに制御信号を与えて、前記少なくとも1つの演算子がアクセス可能な前記データバスに
前記入力活性化値が与えられるように構成される、請求項6に記載のアクセラレータ。
【請求項8】
前記別のメモリバンクは、前記少なくとも1つの演算子の各々が
前記入力活性化値を受け取るように、前記データバスに
前記入力活性化値を1つずつブロードキャストするように構成される、請求項7に記載のアクセラレータ。
【発明の詳細な説明】
【背景技術】
【0001】
関連出願の相互参照
本願は、2017年8月11日に出願された「Neural Network Accelerator with Parameters Resident on Chip(チップ上に常駐するパラメータを用いたニューラルネットワークアクセラレータ)」の米国特許出願第62/544,171号の出願日の利益を米国特許法第119条(e)の下で主張するものであり、そのすべての記載内容を引用により本明細書に援用する。
【0002】
背景
本明細書は一般に、ディープニューラルネットワーク(「DNN」)層の計算のためのニューラルネットワーク(NN)計算タイルに関する。
【発明の概要】
【0003】
概要
一般に、この明細書に記載される主題の1つの革新的な局面は、ニューラルネットワークのパラメータをアクセラレータ上に格納することにおいて実施され得る。ニューラルネットワークは、そのワーキングセット、すなわち、全計算に必要なストレージの総量が実際に限られているという点で、通常の計算作業負荷とは異なる。大体、このワーキングセットは、通常、数十万~数十億というパラメータの数に対応している。このストレージ量は、既存のハードウェアストレージ技術と整合性がある。
【0004】
これらの事実にもかかわらず、現在のアクセラレータは、パラメータが通過するパラメータ用ローカルストレージを含んでいる。例えば、パラメータが永続してチップ上に常駐することはない。むしろ、パラメータは、新たな推論ごとに外部メモリから流れる。
【0005】
したがって、外部メモリの帯域幅は、すべてのニューラルネットワーク(NN)アクセラレータの鍵となる制限である。この明細書において記載される実施の形態は、パラメータ用の一時的なローカルストレージをパラメータ用のオンチップストレージに置き換える。すなわち、実施の形態は、NNのすべてのパラメータをアクセラレータ内に常駐させたままにして、外部メモリから流さないようにする。
【0006】
パラメータをチップ上に格納することの利点として、NNアクセラレータの性能限界を克服できることと、性能限界が克服されるので、積和(「MAC」)演算子の数の増加を劇的に容易にすることと、外部メモリアクセスはローカルメモリアクセスよりも、通常、少なくとも一桁以上多くのエネルギーを必要とするので、低出力のニューラルネットワークアクセラレータを提供することとが含まれる。
【0007】
特定の実施の形態では、アクセラレータは、計算ユニットを備える。計算ユニットは、入力活性化または出力活性化を格納するための第1メモリバンクと、計算を実行する際に用いられるニューラルネットワークパラメータを格納するための第2メモリバンクとを備え、第2メモリバンクは、十分な量のニューラルネットワークパラメータを計算ユニット上に格納し、所与のNNモデルおよびアーキテクチャについて、特定レベルよりも下の遅延および特定レベルよりも上のスループットを可能にするように構成され、計算ユニットは、さらに、第2のメモリバンクからパラメータを受け取って計算を実行する少なくとも1つのMAC演算子を含む少なくとも1つのセルと、少なくとも第1のメモリバンクとデータ通信する第1のトラバーサルユニットとを備え、第1のトラバーサルユニットは、第
1のメモリバンクに制御信号を与えて、MAC演算子によってアクセス可能なデータバスに入力活性化を与えるように構成される。アクセラレータは、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行し、1つまたは複数の計算は、MAC演算子によって実行され、部分的に、データバスから受け取られる入力活性化と第2のメモリバンクから受け取られるパラメータとの乗算演算を含む。パラメータ用ストレージがすべてのニューラルネットワークパラメータを保持するのに十分である場合、アクセラレータの性能は、メモリ帯域幅によって決められない。その場合、サイクル毎にパラメータとともにすべてのMACを供給することが可能である。
【0008】
この明細書に記載される主題の別の革新的な局面は、テンソル計算を加速するための、コンピュータにより実現される方法で実施され得る。コンピュータにより実現される方法は、第1メモリバンクが制御信号を受け取ったことに応答して、第1メモリバンクによって第1の入力活性化を送るステップを含み、第1の入力活性化は、データバスによって送られ、方法は、さらに、少なくとも1つのMAC演算子によって、計算を実行する際に用いられるニューラルネットワークパラメータを格納するための第2メモリバンクから1つまたは複数のパラメータを受け取るステップを含み、第2メモリバンクは、十分な量のニューラルネットワークパラメータを計算ユニット上に格納し、所与のNNモデルおよびアーキテクチャについて、特定の閾値よりも下の遅延および特定の閾値よりも上のスループットを可能にし、方法は、さらに、MAC演算子によって、データアレイの少なくとも1つの要素に関連する1つまたは複数の計算を実行するステップを含み、1つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第1の入力活性化と第2メモリバンクから受け取られる少なくとも1つのパラメータとの乗算演算を含む。
【0009】
この明細書に記載される主題の別の革新的な局面は、計算を加速するための方法において実施され得る。この方法は、実行前に、ニューラルネットワーク重みパラメータをニューラルネットワークアクセラレータにロードするステップと、実行時に、実質的にアクセラレータ外部のニューラルネットワーク重みパラメータにアクセスしないで、アクセラレータへの入力を処理するステップとを含む。方法は、ニューラルネットワーク重みパラメータの数が多すぎて1つのアクセラレータダイ上に収まらない場合、ニューラルネットワーク重みパラメータを複数の密に繋がれたアクセラレータダイにロードするステップと、密に繋がれたアクセラレータダイ外部のニューラルネットワーク重みパラメータに実質的にアクセスしないで、アクセラレータダイへの入力を処理するステップとをさらに含み得る。
【0010】
この明細書において記載される主題は、以下の利点の1つ以上を実現するように特定の実施の形態において実現することができる。レジスタを用いてメモリアドレス値を追跡することは、プログラムが、深くネスト化されたループを1つの命令で反復することを可能にする。単一の計算タイルにおいて幅狭メモリユニットおよび幅広メモリユニットからアクセス可能なテンソルは、レジスタから検索されるメモリアドレス値に基づいてトラバースされる。メモリアドレス値はテンソルの要素に対応する。テンソル計算は、深いループネストの実行に基づいて個々の計算タイルで生ずる。計算は複数のタイルにわたって分散できる。計算効率は、いくつかの計算タイルにわたって多層ニューラルネットワークのテンソル計算を分散することに基づいて向上および加速される。テンソルをトラバースし、テンソル計算を少ない命令数で実行できる。
【0011】
この明細書において記載される実施の形態は、ニューラルネットワーク(NN:Neural Network)アクセラレータの動作および設計に影響を与える。実施の形態は、ニューラルネットワークアクセラレータ設計の顕著な限定の1つである、低い遅延と高いスループットとの組合せに取り組む。パラメータをチップ上に常駐させることによって、高いスループットならびに特定のNNモデルおよびアーキテクチャを考慮して、遅延
が劇的に低減される。アクセラレータは、高いメモリ帯域幅を必要とせず、エネルギーは下がる。
【0012】
この明細書において記載されるようにタイル配置することにより、コンパイル方式局所参照性を提供する。例えば、全結合モデルをSRAMの隣に置くことによって、キャッシュモデルと比べて内部帯域幅が大きくなる。この明細書において記載される実施の形態は、畳み込みニューラルネットワークアクセラレータよりも高速で動作する。特定の実施の形態は、さらに多くの演算子を有する。演算子を供給するために、アクセラレータは、より多くの内部帯域幅が必要である。これに対処するためには、アーキテクチャがメモリを分散させて、パラメータをアクセラレータ上に集める必要がある。
【0013】
この明細書において記載される主題は、他の利点を実現するように特定の実施の形態において実現することもできる。例えば、幅が狭い低帯域幅メモリを、高帯域幅の幅広メモリと結合するメモリ階層を採用することによって、非常に異なる次元のDNN層および局所参照性に対してMAC演算子の高い利用率を達成することができる。幅が狭い低帯域幅メモリによって、多次元アレイを任意の順番でトラバースするためのアドレス指定が柔軟にできるようになる。
【0014】
この局面および他の局面の他の実現例は、計算機記憶装置上でエンコードされる、方法のアクションを実行するように構成される、対応のシステム、装置およびコンピュータプログラムを含む。1つまたは複数のコンピュータのシステムは、システムにインストールされ、動作でシステムにアクションを実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組合せによってそのように構成することができる。1つまたは複数のコンピュータプログラムは、データ処理装置によって実行されたとき、装置にアクションを実行させる命令を有することによって、そのように構成することができる。
【0015】
この明細書に記載される主題の1つまたは複数の実現例の詳細は、添付の図面および以下の記載において述べられる。主題の他の潜在的な特徴、局面および利点は、記載、図面および特許請求の範囲から明らかになる。
【図面の簡単な説明】
【0016】
【
図2】例示的なニューラルネットワーク計算タイルを示す。
【
図3】例示的なテンソルトラバーサルユニット(TTU)構造を示す。
【
図4】1つまたは複数の積和(MAC)演算子に入力活性化を与える幅狭メモリユニットを含む例示的アーキテクチャを示す。
【
図5】
図2および
図4の幅狭メモリユニットに出力活性化を与える出力バスを含む例示的なアーキテクチャを示す。
【
図6】
図2のニューラルネットワーク計算タイルを用いてテンソル計算を実行するためのプロセスの例示的なフローチャートである。
【
図8】ニューラルネットワーク計算タイルの別の実施の形態である。
【
図9】ニューラルネットワーク重みパラメータをニューラルネットワークアクセラレータにロードすることによって計算を加速させるためのプロセスの例示的なフローチャートである。
【発明を実施するための形態】
【0017】
さまざまな図面における同様の参照番号および指定は同様の要素を示す。
詳細な説明
この明細書において記載される主題は、計算を加速するための方法に関する。この方法
は、実行前に、ニューラルネットワーク重みパラメータをニューラルネットワークアクセラレータにロードするステップと、実行時に、実質的にアクセラレータ外部のニューラルネットワーク重みパラメータにアクセスしないで、アクセラレータへの入力を処理するステップとを含む。方法は、ニューラルネットワーク重みパラメータの数が多すぎて1つのアクセラレータダイ上に収まらない場合、ニューラルネットワーク重みパラメータを複数の密に繋がれたアクセラレータダイにロードするステップと、密に繋がれたアクセラレータダイ外部のニューラルネットワーク重みパラメータに実質的にアクセスしないで、アクセラレータダイへの入力を処理するステップとをさらに含み得る。
【0018】
また、本明細書に記載の主題は、ニューラルネットワーク層の機械学習推論作業負荷を加速するように構成された複数の計算ユニットを含むハードウェア計算システムに関する。ハードウェア計算システムの各計算ユニットは自己完結型であり、多層ニューラルネットワークの所与の層によって必要とされる計算を独立して実行することができる。この明細書は、全体的に、所与のNNモデルおよびアーキテクチャについて、特定レベルよりも下の遅延および特定レベルよりも上のスループットを可能にするための、チップ上に常駐するパラメータを用いたディープニューラルネットワーク(「DNN:Deep Neural Network」)層の計算のためのニューラルネットワーク(NN)計算タイルに関する。
【0019】
複数の層を有するニューラルネットワークを用いて推論を計算することができる。例えば、入力が与えられると、ニューラルネットワークはその入力に対する推論を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を通して入力を処理することによって、この推論を計算する。特に、ニューラルネットワークの各層は、それぞれの重みのセットを有する。各層は入力を受け取り、その層に対する重みのセットに従って入力を処理して出力を生成する。
【0020】
したがって、受け取った入力から推論を計算するために、ニューラルネットワークは入力を受け取り、推論を生成するために各ニューラルネットワーク層を通してそれを処理し、1つのニューラルネットワーク層からの出力が次のニューラルネットワーク層への入力として与えられる。ニューラルネットワーク層に関するデータ入力または出力、例えば、ニューラルネットワークへの入力、またはシーケンス内におけるその層の下の層の出力は、その層の活性化と呼ぶことができる。
【0021】
いくつかの実現例では、ニューラルネットワークの層はシーケンスで配置される。他の実現例では、層は有向グラフで配置される。つまり、任意の特定の層が複数の入力、複数の出力、またはそれらの両方を受け取ることができる。ニューラルネットワークの層は、ある層の出力を前の層への入力として送り返すことができるように構成することもできる。
【0022】
本明細書に記載のハードウェア計算システムは、テンソル計算を複数の計算タイルにわたって分散させることによってニューラルネットワーク層の計算を実行することができる。ニューラルネットワーク層内で実行される計算プロセスは、入力活性化を含む入力テンソルと重みを含むパラメータテンソルとの乗算を含み得る。計算は、1つまたは複数のサイクルで入力活性化を重みと乗算すること、および多くのサイクルにわたって積の累積を実行することを含む。
【0023】
テンソルは多次元幾何学的オブジェクトであり、例示的な多次元幾何学的オブジェクトは行列およびデータアレイを含む。一般に、処理は、N次元テンソルをトラバースするために、ネスト化されたループを処理することによって、テンソル計算を実行するよう、計算タイルによって実行される。1つの例示的な計算プロセスでは、各ループは、N次元テ
ンソルの特定の次元をトラバースすることを担当し得る。所与のテンソル構成体について、計算タイルは、特定のテンソルに関連する複数の内積計算を実行するためにそのテンソルの要素へのアクセスを必要とし得る。幅狭メモリ構造によって与えられる入力活性化が、幅広メモリ構造によって与えられるパラメータまたは重みで乗算されると、計算が行われる。テンソルはメモリに格納されるので、テンソルインデックスのセットはメモリアドレスのセットへの変換を必要とし得る。一般に、計算タイルのテンソルトラバーサルユニットは、テンソルに関連する各次元のインデックスと、インデックス要素がトラバースされて計算が実行される順序とを与える制御操作を実行する。乗算結果が出力バスに書き込まれてメモリに格納されると、テンソル計算は終了する。
【0024】
図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内で発生する計算に関連する様々なデータを格納し、その後それらのデータにアクセスするための、様々なデータ記憶媒体のうちのいずれでもよい。
【0025】
コントローラ102は、命令メモリ106に格納されている命令を含む、システム100内のテンソル計算に関係する1つまたは複数の命令を実行するように構成されている。いくつかの実現例では、データメモリ104および命令メモリ106は揮発性メモリユニット(単数または複数)である。他のいくつかの実現例では、データメモリ104および命令メモリ106は不揮発性メモリユニット(単数または複数)である。データメモリ104および命令メモリ106はまた、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、もしくはテープ装置、フラッシュメモリもしくは他の類似の固体メモリ装置、またはストレージエリアネットワークもしくは他の構成の装置を含む装置のアレイなど、別の形態のコンピュータ可読媒体であってもよい。様々な実現例では、コントローラ102は、コアマネージャ102として参照されるかまたはそのように呼ばれ得る。
【0026】
図示のように、ホストインターフェース108は、I/Oリンク110、コントローラ102、および分類器部分116に結合されている。ホストインターフェース108は、I/Oリンク110から命令およびデータパラメータを受け取り、命令およびパラメータをコントローラ102に与える。一般に、命令は命令バス124(後述)を介してシステム100内の1つまたは複数のデバイスに与えることができ、パラメータはリングバス128(後述)を介してシステム100内の1つまたは複数のデバイスに与えることができる。いくつかの実現例では、命令は初期時にホストインターフェース118からコントローラ102によって受け取られ、後のコントローラ102による実行のために命令メモリ106に格納される。
【0027】
分類器部分116は、同様に、コントローラ102および第2のタイルセット114のタイル7に結合されている。いくつかの実現例では、分類器部分116はシステム100内の別個のタイルとして実装される。代替の実現例では、分類器部分116は、コントローラ102のサブ回路またはサブデバイスとしてコントローラ102内に配置されるかまたは位置する。分類器部分116は一般に、全結合層の出力として受け取られる累積され
た活性化前値に対して1つまたは複数の関数を実行するように構成される。全結合層は、タイルセット112および114内のタイルにわたって分割されてもよい。したがって、各タイルは、タイルのメモリユニットに格納され得る活性化前値(すなわち線形出力)のサブセットを生成するように構成される。分類結果バス120は、分類器部分116からコントローラ102へのデータ経路を与える。関数後値(すなわち結果)を含むデータは、分類結果バス120を介して分類器部分116からコントローラ102に与えられる。
【0028】
バスマップ118は、第1のタイルセット112および第2のタイルセット114のタイル間に1つまたは複数の相互接続されたデータ通信経路を与えるデータバスを示す。バスマップ118は、
図1に示すように、分類結果バス120、CSR/マスターバス122、命令バス124、メッシュバス126、およびリングバス128を識別するための使用符号の説明を与える。一般に、タイルはシステム100のアクセラレータアーキテクチャ内のコアコンポーネントであり、システム内で発生するテンソル計算の焦点である。各タイルは、システム内の他のタイルと相関関係にある個々の計算ユニットであり、多層ニューラルネットワークの1つまたは複数の層にわたる計算を加速することができる。タイルセット112、114内のタイルは所与の命令に関連するテンソル計算の実行を共有することができるが、個々の計算ユニットは、タイルセット112、114内の他の対応するタイルに対して独立してテンソル計算のサブセットを実行するように構成される自己完結型計算コンポーネントである。
【0029】
CSRバス122は、プログラム構成を設定し、1つまたは複数のタイルに関連する状態レジスタを読み出す1つまたは複数の命令をコントローラ102が送ることを可能にする単一マスター複数スレーブバスである。CSRバス122は、1つのマスターバスセグメントと複数のスレーブバスセグメントとを有する単一のデイジーチェーン構成で接続することができる。
図1に示すように、CSRバス122は、タイルセット112、114のタイルおよびコントローラ102をリング状でホストインターフェース110に接続するバスデータ経路を介して結合する通信を与える。いくつかの実現例では、ホストインターフェース110は、CSRバスリングの単一のマスターであり、CSRバスアドレス空間全体は、ホストインターフェース110内のメモリ空間にメモリマップされる。
【0030】
CSRバス122は、例えば、コントローラ102が命令メモリ106から命令をフェッチすることを開始することを可能にするようにコントローラ102内のメモリバッファポインタをプログラミングすること、1つまたは複数の計算の間静的なままである様々なタイル設定(例:多項式近似計算のための係数表)を更新/プログラミングすること、および/または分類器部分116に対してファームウェアをロード/再ロードすることを含む1つまたは複数の動作を実行するためにホストインターフェース110によって使用され得る。一例では、ファームウェアの再ロードは、線形出力(すなわち、活性化前値)に適用されるべき新しい関数を含み得る。したがって、CSRバス122へのアクセスを有するすべてのスレーブは、そのスレーブに結び付けられてそれを識別する別個のノード識別子(ノードID)を有することになる。ノードIDは命令アドレスの一部であり、CSRパケットがスレーブにアドレス指定されているかどうかを判断するためにCSRスレーブ(すなわち、コントローラ102、タイル112、114および分類器116)によって使用、検査、または他の方法で調べられる。
【0031】
いくつかの実現例では、1つまたは複数の命令をホストインターフェース102によってコントローラ102を介して送ることができる。命令は、例えば、最初の7ビットが、命令を受け取り実行することになっている命令アドレス/宛先を示すヘッダ情報を含む、32ビット幅であり得る。ヘッダの最初の7ビットは、特定のノードIDを表すデータパラメータを含み得る。したがって、CSRバスリング上のスレーブ(例えば各タイル)は、命令のヘッダを検査して、マスター(ホストインターフェース110)による要求がヘ
ッダを検査するタイルにアドレス指定されているかどうかを判断することができる。宛先が検査タイルであることをヘッダのノードIDが示さない場合、検査タイルは、入力CSR命令パケットを、次のタイルによる検査のために、次のタイルに接続されるCSRバス入力にコピーする。
【0032】
命令バス124は、コントローラ102から始まり、CSRバス122と同様に、タイルセット112、114内のタイルをリング状にコントローラ102に接続し戻すバスデータ経路を介して結合する通信を与える。一実現例では、コントローラ102は、命令バス124を介して1つまたは複数の命令をブロードキャストする。コントローラ102によってブロードキャストされる命令は、CSRバス122を介して与えられる命令とは異なり得る。しかしながら、バス124を介して受け取られる命令をタイルが受け取りおよび/または消費もしくは実行する態様は、CSRバス122を介して受け取られる命令を実行するためのプロセスと同様であり得る。
【0033】
一例では、命令のヘッダ(すなわち、ビットマップ)は、受信タイルに対して、その受信タイルが、その命令に関連するビットマップに基づいて特定の命令を消費する必要があることを示す。ビットマップは、ビットに関して定義された特定の幅を有し得る。命令は通常、命令のパラメータに基づいて1つのタイルから次のタイルへ転送される。一実現例では、命令バス124の幅は、命令のサイズ/幅よりも小さくなるように構成され得る。したがって、そのような構成では、命令の送信は数サイクルにわたって行われ、命令バス124のバスストップは、そのタイルに関連する適切なターゲット命令バッファにそのタイルで受け取られた命令を置くためのデコーダを有する。
【0034】
以下でさらに説明されるように、タイルセット112、114内のタイルは一般に、2つの広いカテゴリの命令をサポートするように構成される。2つの広いカテゴリは命令タイプとも呼ばれる。命令タイプは、テンソル演算(TensorOp)命令およびダイレクトメモリアクセス(DMAOp)命令を含む。いくつかの実現例では、DMAOp命令は、同時であることを許される1つまたは複数の特殊化を有する。1つまたは複数の特殊化は、DMAOp命令サブタイプまたはオペコードと呼ばれることがある。場合によっては、すべての固有のおよび/または有効なDMAOp命令タイプ/サブタイプタプルは、特定のタイル内に別々の命令バッファを有することになる。
【0035】
タイル112、114の特定のタイルにおいて、命令バス124に関連するバスストップは、ヘッダビットマップを調べて命令タイプ/サブタイプを判断する。命令は、タイルによって受け取られ、続いて、タイルによる命令の実行の前に、タイルの命令バッファに書き込まれてもよい。命令が書き込まれるタイルの命令バッファは、命令のタイプおよびサブタイプインジケータ/フィールドによって判断され得る。命令バッファは、1つまたは複数の関連する命令の消費を優先させる先入れ先出し(FIFO)制御方式を含み得る。したがって、このFIFO制御方式の下では、同じタイプ/サブタイプの命令は、命令が命令バスに到着した順序で常に実行されることになる。
【0036】
タイル内の異なる命令バッファは、TensorOp命令バッファおよびDMAOp命令バッファである。上記のように、命令タイプはTensorOp命令とDMAOp命令とを含む。DMAOp命令に関して、命令サブタイプ(「書き込み先」バッファ位置を示す)には以下が含まれる:1)メッシュインバウンド命令バッファ;2)メッシュアウトバウンド命令バッファ;3)幅狭‐幅広DMA命令バッファ;4)幅広‐幅狭DMA命令バッファ;および5)リングバスDMA命令バッファ。これらのバッファ位置は、
図2を参照して以下により詳細に説明される。本明細書を通して幅広指定および幅狭指定が使用されており、一般に、1つまたは複数のメモリユニットのおおよその幅のサイズ(ビット/バイト)を指す。本明細書で用いられるとき、「幅狭」は、各々が16ビット未満のサ
イズまたは幅を有する1つまたは複数のメモリユニットを指し得、「幅広」は、各々が16ビットと64ビットとの間のサイズまたは幅を有する1つまたは複数のメモリユニットを指し得る。
【0037】
メッシュバス126は、CSRバス122、命令バス124、およびリングバス128(後述)とは異なるデータ通信経路を与える。
図1に示すように、メッシュバス126は、XおよびY次元の両方において各タイルをその対応する近隣タイルに結合または接続する通信経路を与える。様々な実現例では、メッシュバス126を用いて、近接するタイルにおける1つまたは複数の幅狭メモリユニット間で入力活性化量を移送することができる。示されるように、メッシュバス126は、入力活性化データを近接していないタイルに直接転送することを可能にしない。
【0038】
様々な実現例において、メッシュバス126およびメッシュバス126を介して接続される様々なタイルは以下の構成を有してもよい。メッシュの4つのコーナータイルには、2つのアウトバウンドポートおよび2つのインバウンドポートがある。メッシュの4つのエッジタイルには、3つのインバウンドポートおよび3つのアウトバウンドポートがある。すべての非エッジ、非コーナータイルには、4つのインバウンドポートおよび4つのアウトバウンドポートがある。一般に、N×Nタイルレイアウトの例では、エッジタイルはわずか3つの近隣タイルを有するタイルであり、コーナータイルは2つの近隣タイルを有するタイルである。メッシュバス126を介したデータフロー方法論に関して、一般に、特定のタイルに関してメッシュバス126を介して到着するすべての入力活性化は、そのタイルの1つまたは複数の幅狭メモリユニットにコミットされなければならない。さらに、4つより少ないインバウンドポートを有するタイル構成の場合、DMAOp命令は、存在しない入力ポート上でデータを待つ代わりに、タイルの幅狭メモリ内の位置にゼロ値を書き込んでもよい。同様に、4つよりも少ないアウトバウンドポートを有するタイル構成の場合、DMAOp命令は、存在しないポートに対する転送に関連する幅狭メモリ読出およびポート書込を実行しない。
【0039】
いくつかの実現例では、特定の入力活性化が書き込まれる、または読み出されることになる幅狭メモリユニット(複数可)の位置またはアドレスは、メッシュバス126を介して与えられるインバウンド/アウトバウンドDMAOpに基づいてテンソルトラバーサルユニット(以下、「TTU」)によって生成されることになる。インバウンドDMAOpおよびアウトバウンドDMAOpは同時に実行されてもよく、必要な同期はコントローラ102によって管理される同期フラグ制御方式によって管理されることになる。TTUは、
図2および
図3を参照して以下でさらに詳細に説明される。
【0040】
リングバス128は、コントローラ102から始まり、CSRバス122および命令バス124と同様に、タイル112、114をリング状にコントローラ102に接続し戻すバスデータ経路を介して結合する通信を与える。様々な実現例では、リングバス128は、一般に、すべてのタイル112、114内のすべての幅広メモリユニット(
図2を参照して以下により詳細に説明される)を接続または結合する。したがって、リングバス128のペイロード幅は、タイルセット112、114の各タイル内に配置された幅広メモリユニットの幅に対応する。上述のように、リングバス128も、リングバス128を介して通信される命令またはパラメータを含むペイロードデータを消費する必要があるタイルを示すビットマップヘッダを含む。
【0041】
リングバス128を介して特定のタイルで受け取られるデータ(すなわちペイロード)に関しては、情報の受信に応答して、各タイルは、受信タイルに固有のビットマップヘッダに示される位置データをゼロに(すなわちクリア)してから、そのデータを別のタイルに転送する。したがって、ヘッダビットマップが、ペイロードを受け取ることになってい
る特定のタイルを示す残りのビットセットデータを有さないとき、別のタイルへのペイロードの転送は停止することになる。ペイロードデータは、一般に、深くネスト化されたループの実行に基づいて実行されるテンソル計算中に1つまたは複数のタイルによって用いられる活性化および重みを指す。
【0042】
いくつかの実現例では、コントローラ102は、リングバス128の一部であると説明され得る。一例では、特定のタイル内で実行されるDMAOp命令について、コントローラ102を用いて、リングバスストップからデータ/ペイロードをポップし、そのペイロードをリング内の次のタイル内のリングバスストップに転送してもよい。コントローラ102はさらに、ビットマップヘッダ内の命令によって必要とされる場合には、ペイロードデータをタイルの1つまたは複数の幅広メモリユニットにコミットさせることができる。データを書き込む必要がある1つまたは複数の幅広メモリユニットのアドレスは、特定のタイル内でDMAOp命令によって生成されてもよい。
【0043】
様々な実現例では、タイルセット112、114の各タイルは、ペイロードデータのプロデューサまたはペイロードデータのコンシューマのいずれかであることができる。タイルがペイロードデータのプロデューサである場合、タイルは、それの幅広メモリユニットのうちの1つまたは複数からデータを読み出し、そのデータを1つまたは複数の他のタイルによる消費のためにリングバス128を介してマルチキャストする。タイルがペイロードデータのコンシューマである場合、タイルはデータを受け取り、そのタイル内の1つまたは複数の幅広メモリユニットに書き込み、そのペイロードデータを1つまたは複数の他のタイルによる消費のために転送する。リングバス128を介したペイロードデータの移動に関しては、通常、任意の所与の時間においてリングバス128上にはデータのプロデューサ/マスターは1つだけである。すべてのタイルにおけるDMAOp命令実行順序(例えば、FIFO制御方式)は、所与の時間にリングバス128上にデータのプロデューサ/マスターが1つだけ存在することを保証するであろう。
【0044】
いくつかの実現例では、コントローラ102は、同期フラグ制御アーキテクチャを用いて、所与の時間にリングバス128上にペイロードデータのプロデューサ/マスターが1つだけ存在することを保証する。一例では、タイルによるリング出力への書込ごとに、対応する同期フラグカウントの増分がトリガされることになる。コントローラ102は、ペイロードデータを調べて、ペイロードを含むデータチャンクまたはセグメントの数を判断することができる。次にコントローラ102は、タイルによる実行を監視して、他のタイルがマスターモードで実行する前に、予想された数のデータセグメントがそのタイルによって転送および/または消費されることを保証する。
【0045】
リングバス128上に重複領域を持たない、リングバス128を介して接続されるローカルマルチキャストグループがある場合、リングバス128上には所与の時間にデータのプロデューサ/マスターが1つだけであることを保証することに例外が生じる。例えば、タイル0(マスター)は、タイル0~タイル3のグループ化におけるあるタイルにマルチキャスト(すなわち、データを生成)し、タイル4(マスター)は、タイル4~タイル7のグループ化におけるあるタイルに対して同じことを行い得る。このデュアルマスターマルチキャスト方法の重要な要件は、パケットの重複が発生し、1つまたは複数のデータ計算エラーを引き起こす可能性があるため、異なるマルチキャストグループが互いのデータパケットを参照できないようにすることである。
【0046】
図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つまたは複数のテンソル計算を実行するために用いられる複数のタイルを含む。
【0047】
システム100は一般に次のように動作する。ホストインターフェース108は、所与の計算に対して発生するダイレクトメモリアクセス動作(DMAOp)を定義する1つまたは複数の命令をコントローラ102に与える。コントローラ102に供給される命令に関連する記述子は、多次元データアレイ(テンソル)に関連する大規模内積計算を容易にするためにコントローラによって必要とされる情報を含むことになる。一般に、コントローラ102は、ニューラルネットワークの所与の層に対してテンソル計算を実行するために、ホストインターフェース108から、入力活性化、タイル命令、およびモデルパラメータ(すなわち、重み)を受け取る。次に、コントローラ102は、命令によって定義されるデータフロー方式で命令(複数可)をタイル112、114にマルチキャストさせることができる。上述のように、命令を消費するタイルは、次いで、命令ヘッダ内のビットマップデータに基づいて別のタイルへの新たな/後続の命令のブロードキャストを開始することができる。
【0048】
データフローに関して、入力活性化およびパラメータは、リングバス128を介してタイルセット112、114のタイルに送られる。タイル112、114の各々は、その特定のタイルに割り当てられる、出力活性化のサブセットを計算するのに必要な入力活性化のサブセットを格納することになる。タイルに対するDMAOp命令は入力活性化を幅広メモリから幅狭メモリへ移動させる。タイル内の計算は、必要な入力活性化、パラメータ/重み、および計算命令(TTU操作、メモリアドレスなど)がタイルで利用可能になったときに開始される。タイル内で生じる計算は、タイル内のMAC演算子(後述)が命令セットによって定義されたすべての内積演算を完了し、活性化前関数が乗算演算の結果(すなわち出力活性化)に適用されると、終了する。
【0049】
1つまたは複数のテンソル計算の結果は、計算を実行するタイルの幅狭メモリユニット(複数可)に計算層の出力活性化を書き込むことを含む。あるテンソル計算では、メッシュバス126を介して近隣のタイルへの出力エッジ活性化の転送があることになる。近隣のタイルへの出力エッジ活性化の転送は、計算が複数の層にわたる場合に後続の層のために出力活性化を計算するために必要とされる。すべての層に対する計算が完了すると、DMAOpは、リングバス128を介して最終的な活性化を分類器タイル116に移動させる。次に、コントローラ102は、分類器タイル116から最終活性化を読み出し、DMAOpを実行して最終活性化をホストインターフェース108に移動させる。いくつかの実現例では、分類器部分116は、NNの出力層(すなわち最後の層)の計算を実行する。他の実現例では、NNの出力層は、分類器層、回帰層、または一般にニューラルネットワークに関連する別の層タイプのうちの1つである。
【0050】
図2は、例示的なニューラルネットワーク(NN)計算タイル200を示す。一般に、例示的なタイル200は、
図1を参照して上述した第1のタイルセット112および第2のタイルセット114内の任意のタイルに対応し得る。様々な実現例では、計算タイル200はまた、計算ユニット200として参照されるか、またはそう呼ばれることがある。各計算タイル200は、タイルセット112、114内の他の対応するタイルに対して独立して命令を実行するように構成された自己完結型計算ユニットである。上で簡単に説明したように、各計算タイル200は2つのタイプの命令、TensorOp命令およびD
MAOp命令を実行する。一般に、各命令タイプは深いループネストに関連する計算操作を含み、したがって各命令タイプは一般に、すべてのループ反復の完了を確実にするために、複数の時間エポックにわたって実行されることになる。
【0051】
以下により詳細に論じられるように、異なる命令タイプは、計算タイル200内で管理される同期フラグ制御を介してデータ上で同期する計算タイル200内の独立した制御ユニットによって実行される。同期フラグ制御は、計算タイル200内における異なる命令タイプの実行間の同時性を管理する。各命令タイプに関連する各計算操作は厳密な発行順序(すなわち先入れ先出し)で実行される。2つの命令タイプ、TensorOPおよびDMAOpに関して、これらの異なる命令タイプ間に順序付けの保証はなく、各タイプは計算タイル200によって別々の制御スレッドとして扱われる。
【0052】
データフロー構成に関して、計算タイル200は一般に、計算タイル200に出入りするデータフローのための通信経路を各々が与えるデータ経路202およびデータ経路205を含む。上述のように、システム100は、リング構成でレイアウトされた3つの異なるデータバス構造、すなわちCSRバス122、命令バス124、およびリングバス128を含む。
図2を参照して、データ経路205は命令バス124に対応し、データ経路202は一般にCSRバス122およびリングバス128のうちの1つに対応する。示されるように、データ経路202は、計算タイル200を出るデータのための出力経路を与えるリング出力203と、計算タイル200に入るデータのための入力経路を与えるリング入力204とを含む。
【0053】
計算タイル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による命令の実行でTTU208によって実行されるべき操作を含む1つまたは複数の命令を格納するための命令バッファを含む。以下でさらに説明されるように、TTUは、計算タイル200によって用いられて、一般に幅狭メモリ210および幅広メモリ212に常駐する1つまたは複数のテンソルのアレイ要素をトラバースする。
【0054】
いくつかの実現例では、計算タイル200による実行のためのある命令は、データ経路205(すなわち命令バス124の一部)を介してタイルに到着する。計算タイル200はヘッダビットマップを調べて命令タイプ(TensorOpまたはDMAOp)および命令サブタイプ(読出動作または書込動作)を判断する。計算タイル200によって受け取られた命令は、続いて、命令タイプに応じて特定の命令バッファに書き込まれる。一般に、命令は、計算タイル200のコンポーネントによる命令の実行の前に受け取られ格納される(すなわち、バッファに書き込まれる)。
図2に示すように、命令バッファ(すなわち、TensorOpTTUレジスタ232およびDMAOpTTUレジスタ234)は各々、1つまたは複数の関連する命令の消費(実行)を優先する先入れ先出し(FIFO)制御方式を含むことができる。
【0055】
簡単に上述したように、テンソルは多次元幾何学的オブジェクトであり、例示的な多次
元幾何学的オブジェクトは行列およびデータアレイを含む。深くネスト化されたループを含むアルゴリズムを計算タイル200によって実行して、1つまたは複数のネスト化されたループを反復してN次元テンソルをトラバースすることによって、テンソル計算を実行してもよい。1つの例示的な計算プロセスでは、ループネストの各ループは、N次元テンソルの特定の次元をトラバースすることを担当し得る。本明細書に記載されるように、TensorOp制御206は、一般に、特定のテンソル構成体の次元要素をトラバースし、およびそれにアクセスして深いネスト化されたループによって定義される計算を完成させるシーケンスを駆動する1つまたは複数のテンソル演算を管理する。
【0056】
計算タイル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の共有メモリユニットにアクセスすることを許可されるかを判断するために共有メモリシステムで通常用いられるメモリアービタを含み得る。
【0057】
計算タイル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からアクセスされるパラメータと乗算して単一の出力活性化値を生成することを含む。
【0058】
算術演算中に、部分和を累積し、対応する、例えば合計レジスタ220に格納するか、または幅広メモリ212に書き込み、MACアレイ214の特定のセルによって再アクセスして、後続の乗算演算を完了してもよい。テンソル計算は、第1の部分と第2の部分とを有するものとして説明することができる。第1の部分は、例えば入力活性化とパラメータとの乗算を完了して出力活性化を生成することによって乗算演算が出力活性化を生成すると完了する。第2の部分は、出力活性化への非線形関数の適用を含み、第2の部分は、関数の適用後に出力活性化が幅狭メモリ210に書き込まれると完了する。
【0059】
計算タイル200はさらに、出力活性化バス218、出力活性化パイプライン224を含む非線形ユニット(NLU)222、NLU制御238、および計算タイル200内のコンポーネントのコア属性を示す参照マップ230を含む。明確にするために参照マップ230が示されているが、計算タイル200には含まれていない。コア属性には、特定のコンポーネントが、ユニット、記憶装置、演算子、制御装置、またはデータ経路であるかどうかが含まれる。一般に、テンソル計算の第1の部分が完了すると、出力活性化がMACアレイ214から出力活性化バス218を介してNLU222に与えられる。NLU2
22に到着した後、活性化パイプライン224を介して受け取られる、活性化関数を特定するデータが出力活性化に適用され、次いで、出力活性化は幅狭メモリ210に書き込まれる。いくつかの実現例では、出力活性化バス218は、少なくとも1つのパイプライン化されたシフトレジスタ236を含み、テンソル計算の第2の部分を完了することは、活性化バス218のシフトレジスタ236を用いて出力活性化を幅狭メモリ210に向けてシフトすることを含む。
【0060】
例えば、単一の計算タイル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は、テンソル計算において従来の方法よりも向上した加速および並列処理を与える。
【0061】
一例では、そして以下でより詳細に説明されるように、単一の命令が、複数のMACアレイ214による消費のために、コントローラ102によって複数の計算タイル200(
図1のタイルセット112、114を参照)に与えられ得る。一般に、ニューラルネットワーク層は複数の出力ニューロンを含むことができ、出力ニューロンは、出力ニューロンのサブセットに関連するテンソル計算がタイルセット112、114の特定のタイルに割り当てられることができるように、分割されることができる。次いで、タイルセット112、114の各タイルは、所与の層について、異なるニューロンのグループ上で、関連するテンソル計算を実行することができる。したがって、計算タイル200は、少なくとも2つの形態の並列処理を与えることができる:1)1つの形態は、タイルセット112、114の複数のタイルの間で(出力ニューロンのサブセットに対応する)出力活性化を分割することを含み;2)もう1つの形態は、タイルセット112、114のタイル間の分割に基づく出力ニューロンの複数のサブセットの(単一の命令を用いた)同時計算を含む。
【0062】
図3は、各々が8の深さを有する、追跡すべき4つのテンソルを含む例示的なテンソルトラバーサルユニット(TTU)構造300を示す。TTU300は一般に、カウンタテンソル302、ストライドテンソル304、初期テンソル306、および制限テンソル308を含む。TTU300はさらに、加算器バンク310およびテンソルアドレスインデックス312を含む。上述のように、テンソルは多次元幾何学的オブジェクトであり、テンソルの要素にアクセスするためには、各次元のインデックスが与えられなければならない。テンソルは幅狭メモリ210および幅広メモリ212に格納されるので、テンソルインデックスのセットをメモリアドレスのセットに変換しなければならない。いくつかの実現例では、インデックスのメモリアドレスへの変換は、メモリアドレスをインデックスの線形結合にし、テンソルアドレスインデックス312を介してアドレスを反映させることによって行われる。
【0063】
制御スレッドごとに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。
【0064】
上述のように、いくつかの実現例では、幅狭メモリ210は、各メモリサイクルに対して、どの制御装置(例えば、TensorOp制御206またはDMAOp制御208)が幅狭メモリ210の共有メモリ資源にアクセスすることを許可されるかを判断するために共有メモリシステムで通常用いられるメモリアービタを含み得る。一例では、異なる命令タイプ(TensorOpおよびDMAOp)は、調停が必要な、メモリアクセスを要求する独立した制御スレッドである。特定の制御スレッドがテンソル要素をメモリにコミットすると、その制御スレッドはメモリにコミットされたテンソルレファレンスのカウンタ302を増分する。
【0065】
一例では、TensorOp制御206がテンソルの特定の要素にアクセスするための命令を実行すると、TTU300はテンソルの特定の要素のアドレスを判断することができ、制御206はストレージ、例えば幅狭メモリ210にアクセスして、特定の要素の活性化値を表すデータを読み出し得る。いくつかの実現例では、プログラムはネスト化されたループを含むことができ、制御206は、ネスト化されたループに関連する現在のインデックス変数値に従って、ネスト化されたループ内で二次元アレイ変数の要素にアクセスするよう、命令を実行することができる。
【0066】
TTU300は、所与のテンソル(複数可)について最大X数のTTU行に対して同時にトラバーサル状態を保持してもよい。TTU300に同時に常駐する各テンソルは、専用のハードウェアテンソル制御記述子を占有する。ハードウェア制御記述子は、行位置ごとにX数のTTUカウンタ302、ストライド304、および行次元ごとに最大X数のTTUカウンタを有するテンソルをサポートする制限レジスタ308からなることができる。いくつかの実現例では、行数および行あたりのカウンタ数は異なり得る。
【0067】
所与の位置レジスタについて、最終メモリアドレスは、位置レジスタをともに加算することを含む加算演算から計算される。ベースアドレスはカウンタ302に組み込まれる。同じメモリ内に常駐するテンソルレファレンスのために、1つまたは複数の加算器が共有される。一実現例では、サイクル内の任意の所与のポート上には単一のロード/ストアしか存在できないため、同じ幅狭メモリまたは幅広メモリ内に存在する複数のテンソルレファレンスがそれらのカウンタを任意の所与のサイクルで増分されないこと確実にすることがループネスト制御の機能となる。オフセット値の判断を含むメモリアクセスアドレス値を計算するためのレジスタの使用は、2016年2月3日に出願された「マトリックス処理装置(Matrix Processing Apparatus)」と題する特許出願連続番号第15/014,265号により詳細に記載されており、その全体をここに明示的に引用により援用する。
【0068】
以下は、特殊化されたTTU300をインスタンス化するために用いられてもよいテンプレートパラメータを与える。1)X数のTTU行;2)行ごとのX数のTTUカウンタ;3)X数のTTU加算器ユニット;4)TTU行ごとに、共有される加算器参照を示す;および5)カウンタごとにXカウンタサイズ[TTU][行][深さ]を示す。すべてのTTUレジスタはアーキテクチャ上可視である。計算のためにアクセスされる必要がある特定のテンソル要素のアドレス(すなわちテンソルアドレス312)は、カウンタの加算の結果である。増分信号が制御スレッドからTTUの行に発行されると、TTU300は単一のサイクル動作を実行し、最も内側の次元をその次元のストライド304によって
増分し、そしてすべての深さを通してロールオーバーを伝播する。
【0069】
一般に、TTU300は、1つまたは複数のテンソルに関連する状態を判断する。状態は、ループ境界値、現在のループインデックス変数値、メモリアドレス値を計算するための次元乗数、および/または分岐ループ境界を処理するためのプログラムカウンタ値を含むことができる。TTU300は、1つまたは複数のテンソル状態要素と算術論理ユニットとを含むことができる。テンソル状態要素の各々は、記憶要素、例えばレジスタまたは他の任意の好適な記憶回路であり得る。いくつかの実現例では、テンソル状態要素は、物理的または論理的に異なるグループに構成されてもよい。
【0070】
図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演算子を有するセルを指す。
【0071】
上述のように、入力バス216は、線形ユニット(すなわち、MACアレイ214)のMAC演算子215に入力活性化を与えるブロードキャストバスである。いくつかの実現例では、同じ入力がすべてのMAC演算子215の間で共有される。入力バス216の幅は、所与のMACアレイ214についてブロードキャスト入力を対応する数のセルに供給するのに十分に広くなければならない。入力バス216の構造を説明するために以下の例を考察する。線形ユニット内のセルの数が4に等しく、活性化幅が8ビットに等しいとき、入力バス216は、サイクルごとに最大4つの入力活性化を与えるように構成することができる。この例では、MACアレイ214内のすべてのセルは、ブロードキャストされる4つの活性化のうちの1つのみにアクセスするであろう。
【0072】
計算タイル200によって受け取られる命令のTensorOpフィールド設定に基づいて、MACアレイ214のセルは、同じ入力活性化を用いて計算を実行する必要があり得る。これは、MACアレイ214のセル内のZout分割と呼ばれてもよい。同様に、セル内のZin分割は、MACアレイ214のセルが計算を実行するために異なる活性化を必要とするときに生じる。前者の場合、単一の入力活性化は4回複製され、幅狭メモリ210から読み出された4つの活性化が4サイクルにわたってブロードキャストされる。後者の場合、幅狭メモリ210の読出がサイクルごとに必要とされる。前述の例では、TensorOp制御206は、コントローラ102から受け取られる命令の実行に基づいてこのブロードキャスト方法をオーケストレーションする。
【0073】
図5は、
図2および
図4の幅狭メモリユニット210に出力活性化を与えるための出力バス218を含む例示的なアーキテクチャを示す。一般に、計算タイル200内のMACアレイ214の各MACセル215は、異なる出力活性化を計算する。しかしながら、出力特徴アレイに関して、出力特徴深さが計算タイル200内のMACセル215の数より少ない場合、セルは1つまたは複数のセルグループを形成するようにグループ化されてもよい。セルグループ内のすべてのMACセル215は、同じ出力を(すなわち、出力特徴マップについて)計算するが、各セルは、Zin次元のサブセットに対応する、出力のサ
ブセットを計算するにすぎない。その結果、MACセル215の出力は、ここでは、最終的な線形出力ではなく、部分和である。いくつかの実現例では、NLU222は、NLU制御238によってNLU222に与えられる制御信号に基づいてこれらの部分和を最終線形出力に集約する。
【0074】
上述のように、出力バス218はパイプライン化されたシフトレジスタである。様々な実現例では、テンソル計算の第1の部分が終了し、TensorOp制御206が(命令を実行することによって)部分和を書き出す必要があることを示すと、出力バス218に与えられる部分和の並列ロードがあることになる。並列ロードの数は、計算タイル200内のMACセルの数に対応することになる。TensorOp制御206は、次いで、部分和量をシフトアウトさせ、非線形パイプラインを介して送らせる。いくつかの実現例では、タイル内のすべてのMACセルが実際に計算を実行するために利用されるわけではない状況があり得る。このような状況では、出力バスにシフトされるすべての部分和が有効になるわけではないことになる。この例では、TensorOp制御206は、MACアレイ214に制御信号を与えて、シフトアウトされるべき有効セルの数を示してもよい。出力バス218にロードされる並列ロード量は依然として計算タイル内のMACセルの数に対応するが、有効値のみがシフトアウトされて幅狭メモリ210にコミットされることになる。
【0075】
図6は、
図2の計算タイル200など、ニューラルネットワーク(NN)計算タイルを用いてテンソル計算を実行するためのプロセス600の例示的なフローチャートである。プロセス600はブロック602で始まり、所与のNNモデルおよびアーキテクチャについて、特定レベルよりも下の遅延および特定レベルよりも上のスループットを可能にするために、十分なパラメータをチップ上の第2メモリにロードする。スループットとは、大量の要求/推論が存在する中で実現される最大限のパフォーマンスである。遅延とは、1つの要求を計算するのにかかる最低限の時間である。プロセス600は、ブロック604に続き、計算タイル200の幅狭メモリ210は入力活性化データバス216に活性化を1つずつ送る(すなわちブロードキャストする)。活性化値は、幅狭メモリ210に格納される。幅狭メモリ210は、入力量にアクセスするための特定のメモリ位置へのアドレス指定を許可するスタティックランダムアクセスメモリ(SRAM)バンクの集まりであり得る。メモリ210から読み出された活性化は、入力活性化バス216を介して、複数のMAC演算子215および合計レジスタ220を含むMACアレイ214(すなわち、線形ユニット)の線形セルにブロードキャストされる。プロセス600のブロック606において、計算タイル200のMAC演算子215は各々2つの入力を受け取り、1つの入力(活性化)は入力活性化バス216から受け取られ;別の入力(パラメータ)は幅広メモリ212から受け取られる。したがって、活性化は、各MAC演算子215の入力のうちの1つを供給し、MACアレイ214のセル内の各MAC演算子215は幅広メモリ212からそれらの第2の乗数入力を得る。
【0076】
プロセス600のブロック608において、計算タイル200のMACアレイ214は、メモリからアクセスされるデータアレイ構造の要素に基づいて内積計算を含むテンソル計算を実行する。幅広メモリ212は、線形ユニットの幅(例えば、32ビット)に等しいビット単位の幅を有し得る。したがって、線形ユニット(LU)は、ベクトルメモリ(すなわち、幅広メモリ212)からデータを受け取るSIMDベクトル算術論理ユニット(ALU)ユニットである。いくつかの実現例では、MAC演算子215は、幅広メモリ212からアキュムレータ入力(部分和)も取得し得る。いくつかの実現例では、2つの異なるオペランド(パラメータおよび部分和)に関する読出および/または書込について、幅広メモリ212ポートに対して時分割がある。一般に、領域を最適化するために、幅広メモリ212は限られた数のポートを有し得る。その結果、幅広メモリ212からオペランド(例えば、パラメータ)を読み出し、同時に幅広メモリ212にオペランド(例え
ば、部分和)を書き込む必要がある場合、特定のオペランドに関連するパイプラインが機能停止し得る。
【0077】
ブロック610において、計算タイル200の計算セル(MAC演算子215および合計レジスタ220を有する)が、MAC/計算セルによって実行される乗算演算に基づいて少なくとも1つの出力活性化を生成する。MACセル演算の結果は、(部分和算術演算中に)メモリに書き戻される部分和、または出力バス218に送られる出力活性化のいずれかを含む。計算タイル200のNLU222は、出力活性化に非線形活性化関数を適用し、活性化を幅狭メモリ210に書き込み得る。いくつかの実現例では、出力バス218はシフトレジスタであり、MAC演算子215からの結果/出力活性化の並列ロードを累積し、非線形関数の適用および同じタイルの幅狭メモリ210への書き込み動作のために、それらを一度に1つずつシフトアウトすることができる。
【0078】
この明細書において記載される実施の形態は、以下の2方面からの見解を利用する。1)ほとんどの既存のNN(Neural Network)アクセラレータのボトルネックは、NN重み(パラメータとしても知られる)をロードするために必要なメモリ帯域幅である。2)生成モデルにおけるパラメータの数が大きくても、すなわち、ほとんどのモデルが数MB~数百MBであるのに対して、数KB~数GBであっても、これらの数字は、例えばタイル間で分散させたメモリを用いた、オンチップメモリを含むハードウェアで実現できる範囲内である。
【0079】
大容量メモリ、例えば、キャッシュまたはスクラッチパッドをダイ上に追加してすべてのパラメータを含むだけでは、十分でない。メモリ帯域幅による制限を克服することの目的は、アーキテクチャの性能をスケールアウトすることである。それは、演算子、通常、MACの数を増やすことを意味する。しかし、高い性能を実現するために、パラメータとともにこれらの演算子をサイクル毎に供給できるようにならなければならない。また、「性能」をスループットとしてだけでなく遅延としても理解することが重要である。これは、多くのユーザと向い合うアプリケーションについて言えることである。
【0080】
別の言い方をすると、NN(Neural Network)アクセラレータでは、1つの層にパラメータを一度にロードすることは、非常にコストがかかる。パラメータをチップ上に予めロードすることができれば、ロードする必要があるのは、ランタイム時の活性化だけで済む。つまり、実施の形態は、大規模なオンチップメモリを備える。
【0081】
この明細書において記載される実施の形態は、ニューラルネットワーク(NN:Neural Network)アクセラレータの動作および設計に影響を与える。実施の形態は、ニューラルネットワークアクセラレータ設計の顕著な限定の1つである、低い遅延と高いスループットとの組合せに取り組む。NNアクセラレータがニューラルネットワーク全体を表していることを想定する。入力は、なんらかのデータ、例えば、小さい画像または音声である。NNアクセラレータは、層を1つずつ実行する。性能およびエネルギーにおいてコストがかかるのは、層のパラメータを1つずつロードすることである。NNアクセラレータは、ある層のパラメータをロードし、計算を行い、層の出力を保持し、その後、次の層のパラメータをロードする。このプロセスにおいてメモリ帯域幅のほとんどが消費されてしまう箇所である。
【0082】
パラメータをチップ上に常駐させることによって、高いスループットならびに特定のNNモデルおよびアーキテクチャを考慮して、遅延が劇的に低減される。アクセラレータは、数バイト音声をロードするだけでよく、その後、アクセラレータは、非常に高速になり得る。アクセラレータは、高いメモリ帯域幅を必要とせず、エネルギーは下がる。
【0083】
メモリがメモリからCPUにロードされるノイマンモデルは、一般的なアーキテクチャである。メモリがダイの一端に常駐し、計算演算子がダイの他端に常駐するこのような従来のノイマンモデルのようなアーキテクチャは、実用的ではなく、不可能でない場合は、大量の演算子を用いる場合、メモリ(またはメモリバンク)から演算子にデータを転送するための膨大な数の配線を意味する。その代わりに、本発明の実施の形態は、NN計算のメモリ局所参照性という特性を有効利用して、(
図2および
図8に示すような)タイル間でメモリを分散させたタイル構成にアーキテクチャを構成する。
【0084】
NNは、大規模であるが、巨大ではないため、1つまたは数個のNNのすべてのパラメータを1つのチップ上に効果的に収めるところまで近づくことができる。NNアクセラレータは、自己完結型アーキテクチャに移行しつつある。タイルアーキテクチャの場合、メモリをチップ内でパーティション分割できる。1つの大容量SRAMをチップの片隅に有する代わりに、実施の形態は、タイル毎にしかるべきSRAMを割り当てて、オンチップ帯域幅問題も回避する。特定の実施の形態では、各タイルの幅広メモリは、パラメータを含んでおり、(幅広メモリと幅が概ね同様の)幅広リングは、幅広メモリを高い帯域幅で供給する。この明細書において記載される実施の形態は、アーキテクチャの変形例を考える。NN層の特性によっては、実施の形態は、少なくとも以下の2つのNNアーキテクチャを有し得る。
【0085】
大部分が全結合層から構成されるニューラルネットワークでは、層間でパラメータを再利用することはあまりない。全結合層に含まれるニューロンは、前の層に含まれるすべての活性化への全結合を有する。パラメータが再利用されない全結合ニューラルネットワークを考える(バッチ処理がない場合、例えば、リアルタイムアプリケーションを考える)。すべてのパラメータが幅広メモリ内に含まれていない場合、リングバスを介して外部メモリからパラメータをフェッチしなければならない。その場合、設計全体の性能が外部メモリ帯域幅によって限定されてしまう。すべてのパラメータが幅広メモリに常駐する場合、外部メモリへアクセスする必要がなく、サイクル毎にすべての演算子をパラメータとともに供給することができ、パフォーマンスを最大限に活用できる。パラメータをフェッチするためだけに外部メモリを利用する代わりに、この明細書において記載される実施の形態は、パラメータを幅広メモリ内に常駐させたままにする。
【0086】
例として、全結合層において50Mのパラメータ(または、説明を分かりやすくするために、50MB)を用いるモデルを考える。1GHzで動作する16384個のMACを用いるアクセラレータを考える。モデルへの入力は、16KBであると考える。すべての値は、現在のアプリケーションにとって妥当な値である。最大性能は、50×10^6/(16384×10^9)=3.05×10^-6秒でモデルを実行することに相当する。これは、(50×10^6+16,384)/(3.05×10^-6)=16.40TB/sのメモリ帯域幅に相当する。比較するポイントとして、通常のDRAMチップが概ね10GB/sあたりである一方、最先端の高帯域幅メモリ(HBM)は、256GB/sあたりである。
【0087】
畳み込みニューラルネットワークは、1つのタイルから別のタイルへパラメータを渡す。パラメータがニューロン(活性化としても知られる)間で再利用される、大部分が畳み込み層から構成されるニューラルネットワークでは、メモリ帯域幅要件は、あまり高くないが、一般に、通常の外部メモリよりは高い。リング帯域幅は、パラメータをタイルにロードするのに十分であり得るが、当該リングと同じ幅の大容量オンダイメモリに接続される。言い換えると、推論ごとに、タイルがモデルのすべてのパラメータにアクセスする/当該パラメータをロードする必要がある。これは、どのモデルにも当てはまる。ニューラルネットワークにおける全結合層について唯一異なるのは、各パラメータが1つの推論時に1度しか使われないことである。畳み込み層に関しては、パラメータは、層内で複数回
使用される。
【0088】
例として、畳み込み層に50M個のパラメータを含むモデルを考える。これらの層のうちいくつかは非常に小さく、他は大きい可能性があるため、パラメータの再利用にばらつきがある。モデル間の妥当な平均は、パラメータ当たり、最大100回の再利用である。よって、上記と同じ理論を用いると、帯域幅要件は、16.40TB/s/100~164GB/sまで下がる。しかし、費用対効果が大きいDRAMの帯域幅要件は、依然高いままである。しかしながら、上記アーキテクチャでは、同じ幅の大容量メモリに接続された164×8=1312ビットの幅広リングが、適正速度でタイルを供給できる。
【0089】
メモリが全結合モデルの層のすべてのパラメータを含むのに十分である第1の実施の形態を考える。1つ層上ですべてのタイルが同時に動作する場合、パラメータをタイル間で分散させる必要がある。実施の形態は、タイル間で各層の出力ニューロン/活性化を分割する。実行時、各タイルは、層のサブセットを処理し、対応する部分和を計算して隣に渡す。すなわち、部分和はリングの周りを回り、すべてを回った後、タイルが最終和を生成する。
【0090】
第2の実施の形態は、タイルが同じパラメータを同時に利用するため、すべてのタイルの(現在使用されている)パラメータの同じサブセットを予めロードする/キャッシュすることを含む。実行時、部分的な活性化和でないパラメータ(サブセット)がリングの周りを回る。
【0091】
タイルの数は、スケールファクタである。この明細書において記載される実施の形態を用いることによってメモリ要件を増やさないで遅延およびスループットを改善させることにより、堅牢なスケーリングを実現できる。しかしながら、計算能力を上げるためにタイルをまとめて処理すると、メモリ要件および必要な活性化の数が増えてしまう。メモリ帯域幅を従来のメモリオプションよりも増やすことなくバッチ処理型スケーリングを行うことは難しい。バッチ処理は、リアルタイムアプリケーションが伴うことが多く、遅延要件およびスループット要件が関係する。
【0092】
注目に値するのは、パラメータをキャッシュに持っておくことは、パラメータをタイル配置の一部として幅広メモリに持っておくこととは異なるこということである。この明細書において記載されるようにタイルを配置することにより、コンパイル方式局所参照性が与えられる。例えば、全結合モデルをSRAMの隣に置くことによって、キャッシュモデルと比べて内部帯域幅が大きくなる。
【0093】
この明細書において記載される実施の形態は、従来のニューラルネットワークアクセラレータよりも高速で動作する。特定の実施の形態は、さらに多くの演算子を有しており、演算子を供給するために、アクセラレータは、より多くの内部帯域幅が必要である。これに対処するためには、アーキテクチャがメモリを分散させて、パラメータをアクセラレータ上に集める必要がある。
【0094】
現在最も大きなチップは、約650平方ミリメートルである。したがって、チップ上にSRAMを搭載できる量には制限がある。実施の形態は、所与の空間的制約において、3D積層を利用することを含む、高密度メモリを利用することを含む。
【0095】
この明細書において記載される実施の形態は、推論(訓練後)モードおよび訓練モードに当てはまる。
【0096】
付加的な考慮として、別の階層レベルがある。メモリ階層があり、通常、レジスタファ
イル階層もある。パラメータがレジスタにロードされてレジスタが再利用され、メモリ帯域幅を拡張することができる。レジスタファイルおよびメモリにメモリ帯域幅がある。つまり、さらなるコスト削減、すなわち、メモリからレジスタファイルまで、そしてレジスタファイルから計算までの配線を減らすことができる。この明細書において記載される実施の形態では、レジスタファイルに関連する配線コストを低減することができる。SRAMからパラメータを直接消費してアドレス指定が行われる。つまり、メモリは、ALUを直接供給する。
【0097】
図7は、ディープニューラルネットワーク(DNN)に関連するテンソル計算を加速するための計算システム700の別の実施の形態のブロック図を示す。システム700は、一般に、コントローラ/アンコア(UNCORE)702、メモリインターフェース708、ならびに第1のタイルセット112および第2のタイルセット714を含む複数のタイルを含む。コントローラ702は一般に、データメモリ704、命令メモリ706、およびコンピュータ可読記憶媒体にエンコードされた1つまたは複数の命令を実行するように構成された少なくとも1つのプロセッサを含む。命令メモリ706は、コントローラ702の1つまたは複数のプロセッサによって実行可能な1つまたは複数の機械可読命令を格納することができる。データメモリ704は、システム700内で発生する計算に関連する様々なデータを格納し、その後それらのデータにアクセスするための、様々なデータ記憶媒体のうちのいずれでもよい。
【0098】
コントローラ702は、命令メモリ706に格納されている命令を含む、システム700内のテンソル計算に関係する1つまたは複数の命令を実行するように構成されている。いくつかの実現例では、データメモリ704および命令メモリ706は揮発性メモリユニット(単数または複数)である。他のいくつかの実現例では、データメモリ704および命令メモリ706は不揮発性メモリユニット(単数または複数)である。データメモリ704および命令メモリ706はまた、フロッピー(登録商標)ディスク装置、ハードディスク装置、光ディスク装置、もしくはテープ装置、フラッシュメモリもしくは他の類似の固体メモリ装置、またはストレージエリアネットワークもしくは他の構成の装置を含む装置のアレイなど、別の形態のコンピュータ可読媒体であってもよい。様々な実現例では、コントローラ702は、コアマネージャ702として参照されるかまたはそのように呼ばれ得る。
【0099】
メモリインターフェース708は、I/Oリンクから命令およびデータパラメータを受け取り、命令およびパラメータをコントローラ702に与える。一般に、命令は命令バス(コントローラとタイルとの間の命令バスは図示せず)を介してシステム100内の1つまたは複数のデバイスに与えることができ、パラメータはリングバス728を介してシステム700内の1つまたは複数のデバイスに与えることができる。いくつかの実現例では、命令は初期時にホストインターフェース708からコントローラ702によって受け取られ、後のコントローラ702による実行のために命令メモリ706に格納される。
【0100】
リングバス728は、コントローラ702から始まり、タイル712、714をリング状にコントローラ702に接続し戻すバスデータ経路を介して結合する通信を与える。様々な実現例では、リングバス728は、一般に、すべてのタイル712、714内のすべての幅広メモリユニットを接続または結合する。したがって、リングバス728のペイロード幅は、タイルセット712、714の各タイル内に配置された幅広メモリユニットの幅に対応する。上述のように、リングバス728も、リングバス728を介して通信される命令またはパラメータを含むペイロードデータを消費する必要があるタイルを示すビットマップヘッダを含む。
【0101】
リングバス728を介して特定のタイルで受け取られるデータ(すなわちペイロード)
に関しては、情報の受信に応答して、各タイルは、受信タイルに固有のビットマップヘッダに示される位置データをゼロに(すなわちクリア)してから、そのデータを別のタイルに転送する。したがって、ヘッダビットマップが、ペイロードを受け取ることになっている特定のタイルを示す残りのビットセットデータを有さないとき、別のタイルへのペイロードの転送は停止することになる。ペイロードデータは、一般に、深くネスト化されたループの実行に基づいて実行されるテンソル計算中に1つまたは複数のタイルによって用いられる活性化および重みを指す。
【0102】
いくつかの実現例では、コントローラ702は、リングバス728の一部であると説明され得る。一例では、特定のタイル内で実行されるDMAOp命令について、コントローラ702を用いて、リングバスストップからデータ/ペイロードをポップし、そのペイロードをリング内の次のタイル内のリングバスストップに転送してもよい。コントローラ702はさらに、ビットマップヘッダ内の命令によって必要とされる場合には、ペイロードデータをタイルの1つまたは複数の幅広メモリユニットにコミットさせることができる。データを書き込む必要がある1つまたは複数の幅広メモリユニットのアドレスは、特定のタイル内でDMAOp命令によって生成されてもよい。
【0103】
様々な実現例では、タイルセット712、714の各タイルは、ペイロードデータのプロデューサまたはペイロードデータのコンシューマのいずれかであることができる。タイルがペイロードデータのプロデューサである場合、タイルは、それの幅広メモリユニットのうちの1つまたは複数からデータを読み出し、そのデータを1つまたは複数の他のタイルによる消費のためにリングバス728を介してマルチキャストする。タイルがペイロードデータのコンシューマである場合、タイルはデータを受け取り、そのタイル内の1つまたは複数の幅広メモリユニットに書き込み、そのペイロードデータを1つまたは複数の他のタイルによる消費のために転送する。リングバス728を介したペイロードデータの移動に関しては、通常、任意の所与の時間においてリングバス728上にはデータのプロデューサ/マスターは1つだけである。すべてのタイルにおけるDMAOp命令実行順序(例えば、FIFO制御方式)は、所与の時間にリングバス728上にデータのプロデューサ/マスターが1つだけ存在することを保証するであろう。
【0104】
いくつかの実現例では、コントローラ702は、同期フラグ制御アーキテクチャを用いて、所与の時間にリングバス728上にペイロードデータのプロデューサ/マスターが1つだけ存在することを保証する。一例では、タイルによるリング出力への書込ごとに、対応する同期フラグカウントの増分がトリガされることになる。コントローラ702は、ペイロードデータを調べて、ペイロードを含むデータチャンクまたはセグメントの数を判断することができる。次にコントローラ702は、タイルによる実行を監視して、他のタイルがマスターモードで実行する前に、予想された数のデータセグメントがそのタイルによって転送および/または消費されることを保証する。
【0105】
リングバス728上に重複領域を持たない、リングバス728を介して接続されるローカルマルチキャストグループがある場合、リングバス728上には所与の時間にデータのプロデューサ/マスターが1つだけであることを保証することに例外が生じる。このデュアルマスターマルチキャスト方法の重要な要件は、パケットの重複が発生し、1つまたは複数のデータ計算エラーを引き起こす可能性があるため、異なるマルチキャストグループが互いのデータパケットを参照できないようにすることである。
【0106】
図1とは対照的に、
図7のタイルは、それ自体が矩形パターンを形成している一方、リングバスによってジグザグにまたは蛇行して接続されている。例示の実施の形態では、アクセラレータは、それぞれ8個および16個のタイルから構成される。別の実施の形態では、アクセラレータは、さらに多くのタイルを含み得る。
【0107】
図8は、
図2の計算タイルを簡略化した図である。
図9は、
図2の計算タイル200など、ニューラルネットワーク(NN)計算タイルを用いてテンソル計算を実行するためのプロセス900の例示的なフローチャートである。プロセス900は、ブロック902で始まり、例えば、実行前に、NN重みパラメータをNNアクセラレータにロードする。プロセス900は、ブロック904に続き、実質的にアクセラレータ外部のニューラルネットワーク重みパラメータにアクセスしないで、アクセラレータへの入力を処理する。ブロック906において、プロセスは、アクセラレータへの入力を処理することに基づいて、少なくとも1つの出力活性化を生成する。
【0108】
本明細書において記載される主題および機能的動作の実施形態は、本明細書に開示される構造およびそれらの構造的等価物を含む、デジタル電子回路系において、有形で実施されるコンピュータソフトウェアもしくはファームウェアにおいて、コンピュータハードウェアにおいて、またはそれらの1つまたは複数の組合せにおいて実現され得る。本明細書に記載される主題の実施形態は、1つまたは複数のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するために有形の非一時的なプログラム担体上でエンコードされたコンピュータプログラム命令の1つまたは複数のモジュールとして実現され得る。代替的に、または加えて、プログラム命令は、データ処理装置による実行に対して好適な受信側装置への送信のために情報をエンコードするよう生成される、たとえばマシンにより生成された電気信号、光信号、または電磁気信号などの、人為的に生成された伝播される信号上でエンコードすることができる。コンピュータ記憶媒体は、コンピュータ可読記憶装置、コンピュータ可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの1つまたは複数の組合せであり得る。
【0109】
本明細書に記載されるプロセスおよび論理フローは、入力データ上で動作し出力を生成することにより機能を実行するよう1つまたは複数のプログラマブルコンピュータが1つまたは複数のコンピュータプログラムを実行することによって実行され得る。プロセスおよび論理フローは、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)といった特殊目的論理回路、またはGPGPU(汎用グラフィック処理装置)によっても実行され得、装置もそれらにより実現され得る。
【0110】
コンピュータプログラムの実行に好適であるプロセッサは、例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはその両方または任意の種類の中央処理ユニットに基づき得る。一般に、中央処理ユニットは、リードオンリメモリもしくはランダムアクセスメモリまたはその両方から命令およびデータを受取る。コンピュータの必須の要素は、命令を実行するための中央処理ユニットと、命令およびデータを格納するための1つまたは複数のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための1つまたは複数の大容量記憶装置を含むか、当該1つまたは複数の大容量記憶装置からデータを受取るかもしくは当該1つまたは複数の大容量記憶装置にデータを転送するよう動作可能に結合されるか、またはその両方を行う。しかしながら、コンピュータはそのような装置を有する必要はない。
【0111】
コンピュータプログラム命令およびデータを格納するのに好適であるコンピュータ可読媒体は、例として、たとえばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイスを含むすべての形態の不揮発性メモリ、媒体およびメモリデバイス;たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補足され得るか、または特殊目的論理回路に組み込まれ得る。
【0112】
本明細書は多くの特定の実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴であり得る記載として解釈されるべきである。別個の実施形態の文脈で本明細書において記載されるある特徴は、単一の実施形態において組合せでも実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組合わせでも実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載され、最初はそのように請求されていさえする場合もあるが、請求される組合せからの1つまたは複数の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、部分的組合わせまたは部分的組合わせの変形例に向けられ得る。
【0113】
同様に、動作が図においては特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきではなく、または、すべての示された動作が実行される必要があると理解されるべきではない。ある状況においては、マルチタスキングおよび並列処理が有利であり得る。さらに、上述の実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきではなく、記載されるプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に統合され得るかまたは複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【0114】
主題の特定の実施形態を説明した。他の実施形態は以下の請求の範囲内にある。たとえば、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順または連続する順であることを必ずしも必要としない。ある実現例においては、マルチタスキングおよび並列処理が有利であり得る。