(57)【要約】  入力活性化を格納するための第１のメモリバンクと、計算を実行する際に用いられるパラメータを格納するための第２のメモリバンクとを備える、計算ユニットが開示される。計算ユニットは、第２のメモリバンクからパラメータを受け取って計算を実行する少なくとも１つの積和（「ＭＡＣ」）演算子を含む少なくとも１つのセルを含む。計算ユニットはさらに、第１のメモリバンクに制御信号を与えて、ＭＡＣ演算子によってアクセス可能なデータバスに入力活性化を与えさせる第１のトラバーサルユニットを含む。計算ユニットは、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行し、１つまたは複数の計算は、ＭＡＣ演算子によって実行され、部分的に、データバスから受け取られる入力活性化と第２のメモリバンクから受け取られるパラメータとの乗算演算を含む。
2019537793.tif 000002
【特許請求の範囲】
【請求項１】
テンソル計算を加速するための計算ユニットであって、
第１のデータ幅を有し、入力活性化または出力活性化のうちの少なくとも１つを格納するための第１のメモリバンクと、
前記第１のデータ幅よりも大きい第２のデータ幅を有し、計算を実行する際に用いられる１つまたは複数のパラメータを格納するための第２のメモリバンクと、
前記第２のメモリバンクからパラメータを受け取り計算を実行する少なくとも１つの積和（「ＭＡＣ」）演算子を含む少なくとも１つのセルと、
少なくとも前記第１のメモリバンクとデータ通信する第１のトラバーサルユニットとを備え、前記第１のトラバーサルユニットは、前記第１のメモリバンクに制御信号を与えて、前記ＭＡＣ演算子によってアクセス可能なデータバスに入力活性化を与えるように構成され、
前記計算ユニットは、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行し、前記１つまたは複数の計算は、前記ＭＡＣ演算子によって実行され、部分的に、前記データバスから受け取られる前記入力活性化と前記第２のメモリバンクから受け取られるパラメータとの乗算演算を含む、計算ユニット。
【請求項２】
前記計算ユニットは、複数のループを含むループネストを実行することによって、前記計算のうちの１つまたは複数を実行し、前記ループネストの構造は、前記データアレイの１つまたは複数の次元をトラバースするよう前記第１のトラバーサルユニットによって用いられるそれぞれのループを含む、請求項１に記載の計算ユニット。
【請求項３】
前記１つまたは複数の計算は、前記第１のトラバーサルユニットによって与えられるテンソル演算に部分的に基づいて実行され、前記テンソル演算は、前記データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含む、請求項２に記載の計算ユニット。
【請求項４】
前記計算ユニットの外部にあるソースから受け取られる命令に基づいて、前記第１のメモリバンクの少なくとも１つのメモリ位置および前記第２のメモリバンクの少なくとも１つのメモリ位置にアクセスするように構成される第２のトラバーサルユニットをさらに備える、請求項１に記載の計算ユニット。
【請求項５】
前記第１のトラバーサルユニットはテンソル演算トラバーサルユニットであり、前記第２のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、前記データアレイは複数の要素を含むテンソルに対応する、請求項４に記載の計算ユニット。
【請求項６】
前記計算ユニットは非線形ユニットを含み、前記計算の第１の部分は前記乗算演算に基づいて１つまたは複数の出力活性化を生成することを含み、前記計算の第２の部分は前記非線形ユニットによって非線形関数を前記１つまたは複数の出力活性化に適用することを含む、請求項１に記載の計算ユニット。
【請求項７】
前記計算ユニットによって実行される前記１つまたは複数の計算は、前記出力活性化を前記第１のメモリバンクにシフトするようシフトレジスタを用いることを含む、請求項６に記載の計算ユニット。
【請求項８】
前記計算ユニットの外側に延びるリングバスの一部をさらに備え、前記リングバスは、前記第１のメモリバンクと他の近接する計算ユニットのメモリバンクとの間および前記第２のメモリバンクと他の近接する計算ユニットのメモリバンクとの間にデータ経路を与える、請求項１に記載の計算ユニット。
【請求項９】
前記第２のメモリバンクは、部分和または１つもしくは複数のプーリング層入力のうちの少なくとも１つを格納するように構成されている、請求項１に記載の計算ユニット。
【請求項１０】
テンソル計算を加速するための、コンピュータにより実施される方法であって、
第１のデータ幅を有する第１のメモリバンクが第１のトラバーサルユニットから制御信号を受け取ったことに応答して、前記第１のメモリバンクによって第１の入力活性化を送ることを備え、前記第１のメモリバンクは、計算ユニット内に配置され、前記第１の入力活性化は、前記計算ユニットの少なくとも１つのセルによってアクセス可能なデータバスによって与えられ、前記方法はさらに、
前記少なくとも１つのセルによって、前記第１のデータ幅よりも大きい第２のデータ幅を有する第２のメモリバンクから１つまたは複数のパラメータを受け取ることを備え、前記少なくとも１つのセルは少なくとも１つの積和（「ＭＡＣ」）演算子を含み、前記方法はさらに、
前記ＭＡＣ演算子によって、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行することを備え、前記１つまたは複数の計算は、部分的に、前記データバスからアクセスされる少なくとも前記第１の入力活性化と前記第２のメモリバンクから受け取られる少なくとも１つのパラメータとの乗算演算を含む、テンソル計算を加速するための、コンピュータにより実施される方法。
【請求項１１】
前記１つまたは複数の計算は、前記計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、前記ループネストの構造は、前記第１のトラバーサルユニットが前記データアレイの１つまたは複数の次元をトラバースする態様を示す、請求項１０に記載のコンピュータにより実施される方法。
【請求項１２】
前記第１のトラバーサルユニットによって、前記データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、請求項１１に記載のコンピュータにより実施される方法。
【請求項１３】
前記第１のトラバーサルユニットはテンソル演算トラバーサルユニットであり、前記第２のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、前記データアレイは複数の要素を含むテンソルに対応する、請求項１０に記載のコンピュータにより実施される方法。
【請求項１４】
前記乗算演算に基づいて少なくとも１つの出力活性化を生成することによって前記１つまたは複数の計算の第１の部分を実行することをさらに備える、請求項１０に記載のコンピュータにより実施される方法。
【請求項１５】
前記１つまたは複数の出力活性化に非線形関数を適用することによって前記１つまたは複数の計算の第２の部分を実行することをさらに備える、請求項１４に記載のコンピュータにより実施される方法。
【請求項１６】
１つまたは複数のプロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体であって、前記命令は、そのように実行されると、前記１つまたは複数のプロセッサに動作を実行させ、前記動作は、
第１のデータ幅を有する第１のメモリバンクが第１のトラバーサルユニットから制御信号を受け取ったことに応答して、前記第１のメモリバンクによって第１の入力活性化を送ることを含み、前記第１のメモリバンクは、計算ユニット内に配置され、前記第１の入力活性化は、前記計算ユニットの少なくとも１つのセルによってアクセス可能なデータバスによって与えられ、前記動作はさらに、
前記少なくとも１つのセルによって、前記第１のデータ幅よりも大きい第２のデータ幅を有する第２のメモリバンクから１つまたは複数のパラメータを受け取ることを含み、前記少なくとも１つのセルは少なくとも１つの積和（「ＭＡＣ」）演算子を含み、前記動作はさらに、
前記ＭＡＣ演算子によって、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行することを含み、前記１つまたは複数の計算は、部分的に、前記データバスからアクセスされる少なくとも前記第１の入力活性化と前記第２のメモリバンクから受け取られる少なくとも１つのパラメータとの乗算演算を含む、非一時的コンピュータ可読記憶媒体。
【請求項１７】
前記１つまたは複数の計算は、前記計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、前記ループネストの構造は、前記第１のトラバーサルユニットが前記データアレイの１つまたは複数の次元をトラバースする態様を示す、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項１８】
前記第１のトラバーサルユニットによって、前記データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、請求項１７に記載の非一時的コンピュータ可読記憶媒体。
【請求項１９】
前記乗算演算に基づいて少なくとも１つの出力活性化を生成することによって前記１つまたは複数の計算の第１の部分を実行することをさらに備える、請求項１６に記載の非一時的コンピュータ可読記憶媒体。
【請求項２０】
前記１つまたは複数の出力活性化に非線形関数を適用することによって前記１つまたは複数の計算の第２の部分を実行することをさらに備える、請求項１９に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
【背景技術】
【０００２】
背景
本明細書は一般に、命令帯域幅および命令メモリの低減を可能にするディープニューラルネットワーク（「ＤＮＮ」）層の計算のためのニューラルネット計算タイルに関する。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
【課題を解決するための手段】
【０００４】
概要
一般に、この明細書に記載される主題の１つの革新的な局面は、テンソル計算を加速するための計算ユニットにおいて実施され得る。計算ユニットは、第１のデータ幅を有し、入力活性化または出力活性化のうちの少なくとも１つを格納するための第１のメモリバンクと、第１のデータ幅よりも大きい第２のデータ幅を有し、計算を実行する際に用いられる１つまたは複数のパラメータを格納するための第２のメモリバンクとを備える。計算ユニットはさらに、第２のメモリバンクからパラメータを受け取って計算を実行する少なくとも１つの積和（「ＭＡＣ」）演算子を含む少なくとも１つのセルを備えてもよい。計算ユニットはさらに、少なくとも第１のメモリバンクとデータ通信する第１のトラバーサルユニットを備え、第１のトラバーサルユニットは、第１のメモリバンクに制御信号を与えて、ＭＡＣ演算子によってアクセス可能なデータバスに入力活性化を与えるように構成される。計算ユニットは、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行し、１つまたは複数の計算は、ＭＡＣ演算子によって実行され、部分的に、データバスから受け取られる入力活性化と第２のメモリバンクから受け取られるパラメータとの乗算演算を含む。
【０００５】
一般に、この明細書に記載される主題の別の革新的な局面は、テンソル計算を加速するための、コンピュータにより実施される方法において実施され得る。コンピュータにより実施される方法は、第１のデータ幅を有する第１のメモリバンクが第１のトラバーサルユニットから制御信号を受信したことに応答して、第１のメモリバンクによって第１の入力活性化を送ることを備え、第１のメモリバンクは、計算ユニット内に配置され、第１の入力活性化は、計算ユニットの少なくとも１つのセルによってアクセス可能なデータバスによって与えられる。方法はさらに、少なくとも１つのセルによって、第１のデータ幅よりも大きい第２のデータ幅を有する第２のメモリバンクから１つまたは複数のパラメータを受け取ることを備え、少なくとも１つのセルは少なくとも１つの積和（「ＭＡＣ」）演算子を含む。方法はさらに、ＭＡＣ演算子によって、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行することを備え、１つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第１の入力活性化と第２のメモリバンクから受け取られる少なくとも１つのパラメータとの乗算演算を含む。
【０００６】
この明細書に記載される主題の別の革新的な局面は、非一時的コンピュータ可読記憶媒体において実施され得る。１つまたは複数のプロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体であって、命令は、そのように実行されると、１つまたは複数のプロセッサに動作を実行させ、この動作は、第１のデータ幅を有する第１のメモリバンクが第１のトラバーサルユニットから制御信号を受け取ったことに応答して、第１のメモリバンクによって第１の入力活性化を送ることを含み、第１のメモリバンクは、計算ユニット内に配置され、第１の入力活性化は、計算ユニットの少なくとも１つのセルによってアクセス可能なデータバスによって与えられる。実行される動作はさらに、少なくとも１つのセルによって、第１のデータ幅よりも大きい第２のデータ幅を有する第２のメモリバンクから１つまたは複数のパラメータを受け取ることを含んでもよく、少なくとも１つのセルは少なくとも１つの積和（「ＭＡＣ」）演算子を含む。実行される動作はさらに、ＭＡＣ演算子によって、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行することを含んでもよく、１つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第１の入力活性化と第２のメモリバンクから受け取られる少なくとも１つのパラメータとの乗算演算を含む。
【０００７】
この明細書において記載される主題は、以下の利点の１つ以上を実現するように特定の実施の形態において実現することができる。レジスタを用いてメモリアドレス値を追跡することは、プログラムが、深くネスト化されたループを１つの命令で反復することを可能にする。単一の計算タイルにおいて幅狭メモリユニットおよび幅広メモリユニットからアクセス可能なテンソルは、レジスタから検索されるメモリアドレス値に基づいてトラバースされる。メモリアドレス値はテンソルの要素に対応する。テンソル計算は、深いループネストの実行に基づいて個々の計算タイルで生ずる。計算は複数のタイルにわたって分散できる。計算効率は、いくつかの計算タイルにわたって多層ニューラルネットワークのテンソル計算を分散することに基づいて向上および加速される。テンソルをトラバースし、テンソル計算を少ない命令数で実行できる。
【０００８】
この明細書において記載される主題は、他の利点を実現するように特定の実施の形態において実現することもできる。例えば、アドレス指定の柔軟性が多次元アレイを任意の順序でトラバースすることを可能にする、幅が狭い低帯域幅メモリを、高帯域幅の幅広メモリと結合するメモリ階層を採用することによって、非常に異なる次元のＤＮＮ層に対してＭＡＣ演算子の高い利用率を達成することができ、計算における局所性を最大限に活用することができる。
【０００９】
この局面および他の局面の他の実現例は、計算機記憶装置上でエンコードされる、方法のアクションを実行するように構成される、対応のシステム、装置およびコンピュータプログラムを含む。１つ以上のコンピュータのシステムは、システムにインストールされ、動作でシステムにアクションを実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組合せによってそのように構成することができる。１つ以上のコンピュータプログラムは、データ処理装置によって実行されたとき、装置にアクションを実行させる命令を有することによって、そのように構成することができる。
【００１０】
本明細書に記載の主題は、画像認識および／または分類方法／システムにも関する。システムは、開示された技術、およびハードウェア計算ユニットまたは計算タイルを有する記載されたハードウェア計算システムを使用して実装することができる。計算ユニットは、複数のニューラルネットワーク層を有するニューラルネットワークを用いて推論を計算するためのテンソル計算を処理する。
【００１１】
この明細書に記載される主題の１つ以上の実現例の詳細は、添付の図面および以下の記載において述べられる。主題の他の潜在的な特徴、局面および利点は、記載、図面および特許請求の範囲から明らかになる。
【図面の簡単な説明】
【００１２】
【図１】例示の計算システムのブロック図である。
【図２】例示的なニューラルネットワーク計算タイルを示す。
【図３】例示的なテンソルトラバーサルユニット（ＴＴＵ）構造を示す。
【図４】１つまたは複数の積和（ＭＡＣ）演算子に入力活性化を与える幅狭メモリユニットを含む例示的アーキテクチャを示す。
【図５】図２および図４の幅狭メモリユニットに出力活性化を与える出力バスを含む例示的なアーキテクチャを示す。
【図６】図２のニューラルネットワーク計算タイルを用いてテンソル計算を実行するためのプロセスの例示的なフローチャートである。
【発明を実施するための形態】
【００１３】
さまざまな図面における同様の参照番号および指定は同様の要素を示す。
詳細な説明
本明細書に記載の主題は、ニューラルネットワーク層の機械学習推論作業負荷を加速するように構成された複数の計算ユニットを含むハードウェア計算システムに関する。ハードウェア計算システムの各計算ユニットは自己完結型であり、多層ニューラルネットワークの所与の層によって必要とされる計算を独立して実行することができる。
【００１４】
複数の層を有するニューラルネットワークを用いて推論を計算することができる。例えば、入力が与えられると、ニューラルネットワークはその入力に対する推論を計算することができる。ニューラルネットワークは、ニューラルネットワークの各層を通って入力を処理することによって、この推論を計算する。特に、ニューラルネットワークの各層は、それぞれの重みのセットを有する。各層は入力を受け取り、その層に対する重みのセットに従って入力を処理して出力を生成する。
【００１５】
したがって、受け取った入力から推論を計算するために、ニューラルネットワークは入力を受け取り、推論を生成するために各ニューラルネットワーク層を通してそれを処理し、１つのニューラルネットワーク層からの出力が次のニューラルネットワーク層への入力として与えられる。ニューラルネットワーク層へのデータ入力、例えば、ニューラルネットワークへの入力、またはシーケンス内におけるその層の下の層の、あるニューラルネットワーク層への出力は、その層への活性化入力と呼ぶことができる。
【００１６】
いくつかの実現例では、ニューラルネットワークの層はシーケンスで配置される。他の実現例では、層は有向グラフで配置される。つまり、任意の特定の層が複数の入力、複数の出力、またはそれらの両方を受け取ることができる。ニューラルネットワークの層は、ある層の出力を前の層への入力として送り返すことができるように構成することもできる。
【００１７】
本明細書に記載のハードウェア計算システムは、テンソル計算を複数の計算タイルにわたって分散させることによってニューラルネットワーク層の計算を実行することができる。ニューラルネットワーク層内で実行される計算プロセスは、入力活性化を含む入力テンソルと重みを含むパラメータテンソルとの乗算を含み得る。計算は、１つまたは複数のサイクルで入力活性化を重みと乗算すること、および多くのサイクルにわたって積の累積を実行することを含む。
【００１８】
テンソルは多次元幾何学的オブジェクトであり、例示的な多次元幾何学的オブジェクトは行列およびデータアレイを含む。一般に、ソフトウェアアルゴリズムは、Ｎ次元テンソルをトラバースするために、ネスト化されたループを処理することによって、テンソル計算を実行するよう、計算タイルによって実行される。１つの例示的な計算プロセスでは、各ループは、Ｎ次元テンソルの特定の次元をトラバースすることを担当し得る。所与のテンソル構成体について、計算タイルは、特定のテンソルに関連する複数の内積計算を実行するためにそのテンソルの要素へのアクセスを必要とし得る。幅狭メモリ構造によって与えられる入力活性化が、幅広メモリ構造によって与えられるパラメータまたは重みで乗算されると、計算が行われる。テンソルはメモリに格納されるので、テンソルインデックスのセットはメモリアドレスのセットへの変換を必要とし得る。一般に、計算タイルのテンソルトラバーサルユニットは、テンソルに関連する各次元のインデックスと、インデックス要素がトラバースされて計算が実行される順序とを与える制御操作を実行する。乗算結果が出力バスに書き込まれてメモリに格納されると、テンソル計算は終了する。
【００１９】
図１は、ディープニューラルネットワーク（ＤＮＮ）に関連するテンソル計算を加速するための例示的な計算システム１００のブロック図を示す。システム１００は、一般に、コントローラ１０２、ホストインターフェース１０８、入出力（Ｉ／Ｏ）リンク１１０、第１のタイルセット１１２および第２のタイルセット１１４を含む複数のタイル、分類器部分１１６、ならびにバスマップ１１８において識別されるデータバス（明確にするために示されているがシステム１００には含まれていない）を含む。コントローラ１０２は一般に、データメモリ１０４、命令メモリ１０６、およびコンピュータ可読記憶媒体にエンコードされた１つまたは複数の命令を実行するように構成された少なくとも１つのプロセッサを含む。命令メモリ１０６は、コントローラ１０２の１つまたは複数のプロセッサによって実行可能な１つまたは複数の機械可読命令を格納することができる。データメモリ１０４は、システム１００内で発生する計算に関連する様々なデータを格納し、その後それらのデータにアクセスするための、様々なデータ記憶媒体のうちのいずれでもよい。
【００２０】
コントローラ１０２は、命令メモリ１０６に格納されている命令を含む、システム１００内のテンソル計算に関係する１つまたは複数の命令を実行するように構成されている。いくつかの実現例では、データメモリ１０４および命令メモリ１０６は揮発性メモリユニット（単数または複数）である。他のいくつかの実現例では、データメモリ１０４および命令メモリ１０６は不揮発性メモリユニット（単数または複数）である。データメモリ１０４および命令メモリ１０６はまた、フロッピー（登録商標）ディスク装置、ハードディスク装置、光ディスク装置、もしくはテープ装置、フラッシュメモリもしくは他の類似の固体メモリ装置、またはストレージエリアネットワークもしくは他の構成の装置を含む装置のアレイなど、別の形態のコンピュータ可読媒体であってもよい。様々な実現例では、コントローラ１０２は、コアマネージャ１０２として参照されるかまたはそのように呼ばれ得る。
【００２１】
図示のように、ホストインターフェース１０８は、Ｉ／Ｏリンク１１０、コントローラ１０２、および分類器部分１１６に結合されている。ホストインターフェース１０８は、Ｉ／Ｏリンク１１０から命令およびデータパラメータを受け取り、命令およびパラメータをコントローラ１０２に与える。一般に、命令は命令バス１２４（後述）を介してシステム１００内の１つまたは複数のデバイスに与えることができ、パラメータはリングバス１２８（後述）を介してシステム１００内の１つまたは複数のデバイスに与えることができる。いくつかの実現例では、命令は初期時にホストインターフェース１１８からコントローラ１０２によって受け取られ、後のコントローラ１０２による実行のために命令メモリ１０６に格納される。
【００２２】
分類器部分１１６は、同様に、コントローラ１０２および第２のタイルセット１１４のタイル７に結合されている。いくつかの実現例では、分類器部分１１６はシステム１００内の別個のタイルとして実装される。代替の実現例では、分類器部分１１６は、コントローラ１０２のサブ回路またはサブデバイスとしてコントローラ１０２内に配置されるかまたは位置する。分類器部分１１６は一般に、全結合層の出力として受け取られる累積された活性化前値に対して１つまたは複数の関数を実行するように構成される。全結合層は、タイルセット１１２および１１４内のタイルにわたって分割されてもよい。したがって、各タイルは、タイルのメモリユニットに格納され得る活性化前値（すなわち線形出力）のサブセットを生成するように構成される。分類結果バス１２０は、分類器部分１１６からコントローラ１０２へのデータ経路を与える。関数後値（すなわち結果）を含むデータは、分類結果バス１２０を介して分類器部分１１６からコントローラ１０２に与えられる。
【００２３】
バスマップ１１８は、第１のタイルセット１１２および第２のタイルセット１１４のタイル間に１つまたは複数の相互接続されたデータ通信経路を与えるデータバスを示す。バスマップ１１８は、図１に示すように、分類結果バス１２０、ＣＳＲ／マスターバス１２２、命令バス１２４、メッシュバス１２６、およびリングバス１２８を識別するための使用符号の説明を与える。一般に、タイルはシステム１００のアクセラレータアーキテクチャ内のコアコンポーネントであり、システム内で発生するテンソル計算の焦点である。各タイルは個々の計算ユニットであり、複数のタイルはシステム内の他のタイルと対話して多層ニューラルネットワークの１つまたは複数の層にわたる計算（例えばテンソル計算）を加速することができる。例えば、計算は複数のタイルにわたって分散されることができる。計算効率は、いくつかの計算タイルにわたって多層ニューラルネットワークのテンソル計算を分散することに基づいて向上および加速させることができる。タイルセット１１２、１１４内のタイルは所与の命令に関連するテンソル計算の実行を共有することができるが、個々の計算ユニットは、タイルセット１１２、１１４内の他の対応するタイルに対して独立してテンソル計算のサブセットを実行するように構成される自己完結型計算コンポーネントである。
【００２４】
制御および状態レジスタ（ＣＳＲ）バス１２２は、プログラム構成を設定し、１つまたは複数のタイルに関連する状態レジスタを読み出す１つまたは複数の命令をコントローラ１０２が送ることを可能にする単一マスター複数スレーブバスである。ＣＳＲバス１２２は、１つのマスターバスセグメントと複数のスレーブバスセグメントとを有する単一のデイジーチェーン構成で接続することができる。図１に示すように、ＣＳＲバス１２２は、タイルセット１１２、１１４のタイルおよびコントローラ１０２をリング状でホストインターフェース１１０に接続するバスデータ経路を介して結合する通信を与える。いくつかの実現例では、ホストインターフェース１１０は、ＣＳＲバスリングの単一のマスターであり、ＣＳＲバスアドレス空間全体は、ホストインターフェース１１０内のメモリ空間にメモリマップされる。
【００２５】
ＣＳＲバス１２２は、例えば、コントローラ１０２が命令メモリ１０６から命令をフェッチすることを開始することを可能にするようにコントローラ１０２内のメモリバッファポインタをプログラミングすること、１つまたは複数の計算の間静的なままである様々なタイル設定（例：多項式近似計算のための係数表）を更新／プログラミングすること、および／または分類器部分１１６に対してファームウェアをロード／再ロードすることを含む１つ以上の動作を実行するためにホストインターフェース１１０によって使用され得る。一例では、ファームウェアの再ロードは、線形出力（すなわち、活性化前値）に適用されるべき新しい関数を含み得る。したがって、ＣＳＲバス１２２へのアクセスを有するすべてのスレーブは、そのスレーブに結び付けられてそれを識別する別個のノード識別子（ノードＩＤ）を有することになる。ノードＩＤは命令アドレスの一部であり、ＣＳＲパケットがスレーブにアドレス指定されているかどうかを判断するためにＣＳＲスレーブ（すなわち、コントローラ１０２、タイル１１２、１１４および分類器１１６）によって使用、検査、または他の方法で調べられる。
【００２６】
いくつかの実現例では、１つまたは複数の命令をホストインターフェース１０２によってコントローラ１０２を介して送ることができる。命令は、例えば、最初の７ビットが、命令を受け取り実行することになっている命令アドレス／宛先を示すヘッダ情報を含む、３２ビット幅であり得る。ヘッダの最初の７ビットは、特定のノードＩＤを表すデータパラメータを含み得る。したがって、ＣＳＲバスリング上のスレーブ（例えば各タイル）は、命令のヘッダを検査して、マスター（ホストインターフェース１１０）による要求がヘッダを検査するタイルにアドレス指定されているかどうかを判断することができる。宛先が検査タイルであることをヘッダのノードＩＤが示さない場合、検査タイルは、入力ＣＳＲ命令パケットを、次のタイルによる検査のために、次のタイルに接続されるＣＳＲバス入力にコピーする。
【００２７】
命令バス１２４は、コントローラ１０２から始まり、ＣＳＲバス１２２と同様に、タイルセット１１２、１１４内のタイルをリング状にコントローラ１０２に接続し戻すバスデータ経路を介して結合する通信を与える。一実現例では、コントローラ１０２は、命令バス１２４を介して１つまたは複数の命令をブロードキャストする。コントローラ１０２によってブロードキャストされる命令は、ＣＳＲバス１２２を介して与えられる命令とは異なり得る。しかしながら、バス１２４を介して受け取られる命令をタイルが受け取りおよび／または消費もしくは実行する態様は、ＣＳＲバス１２２を介して受け取られる命令を実行するためのプロセスと同様であり得る。
【００２８】
一例では、命令のヘッダ（すなわち、ビットマップ）は、受信タイルに対して、その受信タイルが、その命令に関連するビットマップに基づいて特定の命令を消費する必要があることを示す。ビットマップは、ビットに関して定義された特定の幅を有し得る。命令は通常、命令のパラメータに基づいて１つのタイルから次のタイルへ転送される。一実現例では、命令バス１２４の幅は、命令のサイズ／幅よりも小さくなるように構成され得る。したがって、そのような構成では、命令の送信は数サイクルにわたって行われ、命令バス１２４のバスストップは、そのタイルに関連する適切なターゲット命令バッファにそのタイルで受け取られた命令を置くためのデコーダを有する。
【００２９】
以下でさらに説明されるように、タイルセット１１２、１１４内のタイルは一般に、２つの広いカテゴリの命令をサポートするように構成される。２つの広いカテゴリは命令タイプとも呼ばれる。命令タイプは、テンソル演算（ＴｅｎｓｏｒＯｐ）命令およびダイレクトメモリアクセス（ＤＭＡＯｐ）命令を含む。いくつかの実現例では、ＤＭＡＯｐ命令は、同時であることを許される１つまたは複数の特殊化を有する。１つまたは複数の特殊化は、ＤＭＡＯｐ命令サブタイプまたはオペコードと呼ばれることがある。場合によっては、すべての固有のおよび／または有効なＤＭＡＯｐ命令タイプ／サブタイプタプルは、特定のタイル内に別々の命令バッファを有することになる。
【００３０】
タイル１１２、１１４の特定のタイルにおいて、命令バス１２４に関連するバスストップは、ヘッダビットマップを調べて命令タイプ／サブタイプを判断する。命令は、タイルによって受け取られ、続いて、タイルによる命令の実行の前に、タイルの命令バッファに書き込まれてもよい。命令が書き込まれるタイルの命令バッファは、命令のタイプおよびサブタイプインジケータ／フィールドによって判断され得る。命令バッファは、１つまたは複数の関連する命令の消費を優先させる先入れ先出し（ＦＩＦＯ）制御方式を含み得る。したがって、このＦＩＦＯ制御方式の下では、同じタイプ／サブタイプの命令は、命令が命令バスに到着した順序で常に実行されることになる。
【００３１】
タイル内の異なる命令バッファは、ＴｅｎｓｏｒＯｐ命令バッファおよびＤＭＡＯｐ命令バッファである。上記のように、命令タイプはＴｅｎｓｏｒＯｐ命令とＤＭＡＯｐ命令とを含む。ＤＭＡＯｐ命令に関して、命令サブタイプ（「書き込み先」バッファ位置を示す）には以下が含まれる：１）メッシュインバウンド命令バッファ；２）メッシュアウトバウンド命令バッファ；３）幅狭‐幅広ＤＭＡ命令バッファ；４）幅広‐幅狭ＤＭＡ命令バッファ；および５）リングバスＤＭＡ命令バッファ。これらのバッファ位置は、図２を参照して以下により詳細に説明される。本明細書を通して幅広指定および幅狭指定が使用されており、一般に、１つまたは複数のメモリユニットのおおよその幅のサイズ（ビット／バイト）を指す。本明細書で用いられるとき、「幅狭」は、各々が１６ビット未満のサイズまたは幅を有する１つまたは複数のメモリユニットを指し得、「幅広」は、各々が６４ビット未満のサイズまたは幅を有する１つまたは複数のメモリユニットを指し得る。
【００３２】
メッシュバス１２６は、ＣＳＲバス１２２、命令バス１２４、およびリングバス１２８（後述）とは異なるデータ通信経路を与える。図１に示すように、メッシュバス１２６は、ＸおよびＹ次元の両方において各タイルをその対応する近隣タイルに結合または接続する通信経路を与える。様々な実現例では、メッシュバス１２６を用いて、近接するタイルにおける１つまたは複数の幅狭メモリユニット間で入力活性化量を移送することができる。示されるように、メッシュバス１２６は、入力活性化データを近接していないタイルに直接転送することを可能にしない。
【００３３】
様々な実現例において、メッシュバス１２６およびメッシュバス１２６を介して接続される様々なタイルは以下の構成を有してもよい。メッシュの４つのコーナータイルには、２つのアウトバウンドポートおよび２つのインバウンドポートがある。メッシュの４つのエッジタイルには、３つのインバウンドポートおよび３つのアウトバウンドポートがある。すべての非エッジ、非コーナータイルには、４つのインバウンドポートおよび４つのアウトバウンドポートがある。一般に、Ｎ×Ｎタイルレイアウトの例では、エッジタイルはわずか３つの近隣タイルを有するタイルであり、コーナータイルは２つの近隣タイルを有するタイルである。メッシュバス１２６を介したデータフロー方法論に関して、一般に、特定のタイルに関してメッシュバス１２６を介して到着するすべての入力活性化は、そのタイルの１つまたは複数の幅狭メモリユニットにコミットされなければならない。さらに、４つより少ないインバウンドポートを有するタイル構成の場合、ＤＭＡＯｐ命令は、存在しない入力ポート上でデータを待つ代わりに、タイルの幅狭メモリ内の位置にゼロ値を書き込んでもよい。同様に、４つよりも少ないアウトバウンドポートを有するタイル構成の場合、ＤＭＡＯｐ命令は、存在しないポートに対する転送に関連する幅狭メモリ読出およびポート書込を実行しない。
【００３４】
いくつかの実現例では、特定の入力活性化が書き込まれる、または読み出されることになる幅狭メモリユニットの位置またはアドレスは、メッシュバス１２６を介して与えられるインバウンド／アウトバウンドＤＭＡＯｐに基づいてテンソルトラバーサルユニット（以下、「ＴＴＵ」）によって生成されることになる。インバウンドＤＭＡＯｐおよびアウトバウンドＤＭＡＯｐは同時に実行されてもよく、必要な同期はコントローラ１０２によって管理される同期フラグ制御方式によって管理されることになる。ＴＴＵは、図２および図３を参照して以下でさらに詳細に説明される。
【００３５】
リングバス１２８は、コントローラ１０２から始まり、ＣＳＲバス１２２および命令バス１２４と同様に、タイル１１２、１１４をリング状にコントローラ１０２に接続し戻すバスデータ経路を介して結合する通信を与える。様々な実現例では、リングバス１２８は、一般に、すべてのタイル１１２、１１４内のすべての幅広メモリユニット（図２を参照して以下により詳細に説明される）を接続または結合する。したがって、リングバス１２８のペイロード幅は、タイルセット１１２、１１４の各タイル内に配置された幅広メモリユニットの幅に対応する。上述のように、リングバス１２８も、リングバス１２８を介して通信される命令またはパラメータを含むペイロードデータを消費する必要があるタイルを示すビットマップヘッダを含む。
【００３６】
リングバス１２８を介して特定のタイルで受け取られるデータ（すなわちペイロード）に関しては、情報の受信に応答して、各タイルは、受信タイルに固有のビットマップヘッダに示される位置データをゼロに（すなわちクリア）してから、そのデータを別のタイルに転送する。したがって、ヘッダビットマップが、ペイロードを受け取ることになっている特定のタイルを示す残りのビットセットデータを有さないとき、別のタイルへのペイロードの転送は停止することになる。ペイロードデータは、一般に、深くネスト化されたループの実行に基づいて実行されるテンソル計算中に１つまたは複数のタイルによって用いられる活性化および重みを指す。
【００３７】
いくつかの実現例では、コントローラ１０２は、リングバス１２８の一部であると説明され得る。一例では、特定のタイル内で実行されるＤＭＡＯｐ命令について、コントローラ１０２を用いて、リングバスストップからデータ／ペイロードをポップし、そのペイロードをリング内の次のタイル内のリングバスストップに転送してもよい。コントローラ１０２はさらに、ビットマップヘッダ内の命令によって必要とされる場合には、ペイロードデータをタイルの１つまたは複数の幅広メモリユニットにコミットさせることができる。データを書き込む必要がある１つまたは複数の幅広メモリユニットのアドレスは、特定のタイル内でＤＭＡＯｐ命令によって生成されてもよい。
【００３８】
様々な実現例では、タイルセット１１２、１１４の各タイルは、ペイロードデータのプロデューサまたはペイロードデータのコンシューマのいずれかであることができる。タイルがペイロードデータのプロデューサである場合、タイルは、それの幅広メモリユニットのうちの１つまたは複数からデータを読み出し、そのデータを１つまたは複数の他のタイルによる消費のためにリングバス１２８を介してマルチキャストする。タイルがペイロードデータのコンシューマである場合、タイルはデータを受け取り、そのタイル内の１つまたは複数の幅広メモリユニットに書き込み、そのペイロードデータを１つまたは複数の他のタイルによる消費のために転送する。リングバス１２８を介したペイロードデータの移動に関しては、通常、任意の所与の時間においてリングバス１２８上にはデータのプロデューサ／マスターは１つだけである。すべてのタイルにおけるＤＭＡＯｐ命令実行順序（例えば、ＦＩＦＯ制御方式）は、所与の時間にリングバス１２８上にデータのプロデューサ／マスターが１つだけ存在することを保証するであろう。
【００３９】
いくつかの実現例では、コントローラ１０２は、同期フラグ制御アーキテクチャを用いて、所与の時間にリングバス１２８上にペイロードデータのプロデューサ／マスターが１つだけ存在することを保証する。一例では、タイルによるリング出力への書込ごとに、対応する同期フラグカウントの増分がトリガされることになる。コントローラ１０２は、ペイロードデータを調べて、ペイロードを含むデータチャンクまたはセグメントの数を判断することができる。次にコントローラ１０２は、タイルによる実行を監視して、他のタイルがマスターモードで実行する前に、予想された数のデータセグメントがそのタイルによって転送および／または消費されることを保証する。
【００４０】
リングバス１２８上に重複領域を持たない、リングバス１２８を介して接続されるローカルマルチキャストグループがある場合、リングバス１２８上には所与の時間にデータのプロデューサ／マスターが１つだけであることを保証することに例外が生じる。例えば、タイル０（マスター）は、タイル０〜タイル３のグループ化におけるあるタイルにマルチキャスト（すなわち、データを生成）し、タイル４（マスター）は、タイル４〜タイル７のグループ化におけるあるタイルに対して同じことを行い得る。このデュアルマスターマルチキャスト方法の重要な要件は、パケットの重複が発生し、１つまたは複数のデータ計算エラーを引き起こす可能性があるため、異なるマルチキャストグループが互いのデータパケットを参照できないようにすることである。
【００４１】
図１に示すように、コントローラ１０２は、タイルセット１１２、１１４内のタイルをＩ／Ｏ１１０に結合または接続する通信データ経路を提供し、いくつかのコア機能を含む。コントローラ１０２のコア機能は、一般に、１つまたは複数のＩ／Ｏ入力活性化をタイルセット１１２、１１４内のタイルに供給すること、Ｉ／Ｏ１１０から受け取られる１つまたは複数の入力活性化およびパラメータをタイルに供給すること、Ｉ／Ｏ１１０から受け取られる１つまたは複数の命令をタイルに供給すること、Ｉ／Ｏ出力活性化をホストインターフェース１０８に送ること、ならびにＣＳＲバス１２２およびリングバス１２８に対してリングストップとして機能することを含む。以下により詳細に説明するように、第１のタイルセット１１２および第２のタイルセット１１４は各々、内側ループおよび外側ループからなる深いループネストに基づいて実行される１つまたは複数のテンソル計算を実行するために用いられる複数のタイルを含む。
【００４２】
システム１００は一般に次のように動作する。ホストインターフェース１０８は、所与の計算に対して発生するダイレクトメモリアクセス動作（ＤＭＡＯｐ）を定義する１つまたは複数の命令をコントローラ１０２に与える。コントローラ１０２に供給される命令に関連する記述子は、多次元データアレイ（テンソル）に関連する大規模内積計算を容易にするためにコントローラによって必要とされる情報を含むことになる。一般に、コントローラ１０２は、ニューラルネットワークの所与の層に対してテンソル計算を実行するために、ホストインターフェース１０８から、入力活性化、タイル命令、およびモデルパラメータ（すなわち、重み）を受け取る。次に、コントローラ１０２は、命令によって定義されるデータフロー方式で命令をタイル１１２、１１４にマルチキャストさせることができる。上述のように、命令を消費するタイルは、次いで、命令ヘッダ内のビットマップデータに基づいて別のタイルへの新たな／後続の命令のブロードキャストを開始することができる。
【００４３】
データフローに関して、入力活性化およびパラメータは、リングバス１２８を介してタイルセット１１２、１１４のタイルに送られる。タイル１１２、１１４の各々は、その特定のタイルに割り当てられる、出力活性化のサブセットを計算するのに必要な入力活性化のサブセットを格納することになる。タイルに対するＤＭＡＯｐ命令は入力活性化を幅広メモリから幅狭メモリへ移動させる。タイル内の計算は、必要な入力活性化、パラメータ／重み、および計算命令（ＴＴＵ操作、メモリアドレスなど）がタイルで利用可能になったときに開始される。タイル内で生じる計算は、タイル内のＭＡＣ演算子（後述）が命令セットによって定義されたすべての内積演算を完了し、活性化前関数が乗算演算の結果（すなわち出力活性化）に適用されると、終了する。
【００４４】
１つまたは複数のテンソル計算の結果は、計算を実行するタイルの幅狭メモリユニットに計算層の出力活性化を書き込むことを含む。あるテンソル計算では、メッシュバス１２６を介して近隣のタイルへの出力エッジ活性化の転送があることになる。近隣のタイルへの出力エッジ活性化の転送は、計算が複数の層にわたる場合に後続の層のために出力活性化を計算するために必要とされる。すべての層に対する計算が完了すると、ＤＭＡＯｐは、リングバス１２８を介して最終的な活性化を分類器タイル１１６に移動させる。次に、コントローラ１０２は、分類器タイル１１６から最終活性化を読み出し、ＤＭＡＯｐを実行して最終活性化をホストインターフェース１０８に移動させる。いくつかの実現例では、分類器部分１１６は、ＮＮの出力層（すなわち最後の層）の計算を実行する。他の実現例では、ＮＮの出力層は、分類器層、回帰層、または一般にニューラルネットワークに関連する別の層タイプのうちの１つである。
【００４５】
図２は、例示的なニューラルネットワーク（ＮＮ）計算タイル２００を示す。一般に、例示的なタイル２００は、図１を参照して上述した第１のタイルセット１１２および第２のタイルセット１１４内の任意のタイルに対応し得る。様々な実現例では、計算タイル２００はまた、計算ユニット２００として参照されるか、またはそう呼ばれることがある。各計算タイル２００は、タイルセット１１２、１１４内の他の対応するタイルに対して独立して命令を実行するように構成された自己完結型計算ユニットである。上で簡単に説明したように、各計算タイル２００は２つのタイプの命令、ＴｅｎｓｏｒＯｐ命令およびＤＭＡＯｐ命令を実行する。一般に、各命令タイプは深いループネストに関連する計算操作を含み、したがって各命令タイプは一般に、すべてのループ反復の完了を確実にするために、複数の時間エポックにわたって実行されることになる。
【００４６】
以下により詳細に論じられるように、異なる命令タイプは、計算タイル２００内で管理される同期フラグ制御を介してデータ上で同期する計算タイル２００内の独立した制御ユニットによって実行される。同期フラグ制御は、計算タイル２００内における異なる命令タイプの実行間の同時性を管理する。各命令タイプに関連する各計算操作は厳密な発行順序（すなわち先入れ先出し）で実行される。２つの命令タイプ、ＴｅｎｓｏｒＯＰおよびＤＭＡＯｐに関し、これらの異なる命令タイプ間に順序付け保証はなく、各タイプは計算タイル２００によって別々の制御スレッドとして扱われる。
【００４７】
データフロー構成に関して、計算タイル２００は一般に、計算タイル２００に出入りするデータフローのための通信経路を各々が与えるデータ経路２０２およびデータ経路２０５を含む。上述のように、システム１００は、リング構成でレイアウトされた３つの異なるデータバス構造、すなわちＣＳＲバス１２２、命令バス１２４、およびリングバス１２８を含む。図２を参照して、データ経路２０５は命令バス１２４に対応し、データ経路２０２は一般にＣＳＲバス１２２およびリングバス１２８のうちの１つに対応する。示されるように、データ経路２０２は、計算タイル２００を出るデータのための出力経路を与えるリング出力２０３と、計算タイル２００に入るデータのための入力経路を与えるリング入力２０４とを含む。
【００４８】
計算タイル２００は、ＴｅｎｓｏｒＯｐテンソルトラバーサルユニット（ＴＴＵ）２２６を含むＴｅｎｓｏｒＯｐ制御２０６と、ＤＭＡＯｐＴＴＵ２２８を含むＤＭＡＯｐ制御２０８とをさらに含む。ＴｅｎｓｏｒＯｐ制御２０６は、一般に、ＴｅｎｓｏｒＯｐＴＴＵレジスタ２３２への書込およびＴｅｎｓｏｒＯｐＴＴＵレジスタ２３２からの読出を管理し、ＴｅｎｓｏｒＯｐＴＴＵ２２６による実行のためのトラバース操作を管理する。同様に、ＤＭＡＯｐ制御２０８は一般に、ＤＭＡＯｐＴＴＵレジスタ２３４への書込およびＤＭＡＯｐＴＴＵレジスタ２３４からの読出を管理し、ＤＭＡＯｐＴＴＵ２２８による実行のためのトラバース操作を管理する。ＴＴＵレジスタ２３２は、ＴｅｎｓｏｒＯｐ制御２０６による命令の実行でＴｅｎｓｏｒＯｐＴＴＵ２２６によって実行されるべき操作を含む１つまたは複数の命令を格納するための命令バッファを含む。同様に、ＴＴＵレジスタ２３４は、ＤＭＡＯｐ制御２０８による命令の実行でＴＴＵ２２８によって実行されるべき操作を含む１つまたは複数の命令を格納するための命令バッファを含む。
【００４９】
以下でさらに説明されるように、ＴＴＵ２２６および／または２２８は、計算タイル２００によって用いられて、一般に幅狭メモリ２１０および幅広メモリ２１２に常駐する１つまたは複数のテンソルのアレイ要素をトラバースする。いくつかの実現例では、ＴＴＵ２２６は、ＴｅｎｓｏｒＯｐ制御２０６によって用いられて、深いループネストの実行に基づいて多次元テンソルの次元をトラバースするためのテンソル演算を与える。
【００５０】
いくつかの実現例では、計算タイル２００による実行のためのある命令は、データ経路２０５（すなわち命令バス１２４の一部）を介してタイルに到着する。計算タイル２００はヘッダビットマップを調べて命令タイプ（ＴｅｎｓｏｒＯｐまたはＤＭＡＯｐ）および命令サブタイプ（読出動作または書込動作）を判断する。計算タイル２００によって受け取られた命令は、続いて、命令タイプに応じて特定の命令バッファに書き込まれる。一般に、命令は、計算タイル２００のコンポーネントによる命令の実行の前に受け取られ格納される（すなわち、バッファに書き込まれる）。図２に示すように、命令バッファ（すなわち、ＴｅｎｓｏｒＯｐＴＴＵレジスタ２３２およびＤＭＡＯｐＴＴＵレジスタ２３４）は各々、１つまたは複数の関連する命令の消費（実行）を優先する先入れ先出し（ＦＩＦＯ）制御方式を含むことができる。
【００５１】
簡単に上述したように、テンソルは多次元幾何学的オブジェクトであり、例示的な多次元幾何学的オブジェクトは行列およびデータアレイを含む。深くネスト化されたループを含むアルゴリズムを計算タイル２００によって実行して、１つ以上のネスト化されたループを反復してＮ次元テンソルをトラバースすることによって、テンソル計算を実行してもよい。１つの例示的な計算プロセスでは、ループネストの各ループは、Ｎ次元テンソルの特定の次元をトラバースすることを担当し得る。本明細書に記載されるように、ＴｅｎｓｏｒＯｐ制御２０６は、一般に、特定のテンソル構成体の次元要素をトラバースし、およびそれにアクセスして深いネスト化されたループによって定義される計算を完成させるシーケンスを駆動する１つまたは複数のテンソル演算を管理する。
【００５２】
計算タイル２００は、幅狭メモリ２１０および幅広メモリ２１２をさらに含む。狭幅および広幅の指定は、一般に、幅狭メモリ２１０および幅広メモリ２１２のメモリユニットの幅のサイズ（ビット／バイト）を指す。いくつかの実現例では、幅狭メモリ２１０は、各々１６ビット未満のサイズまたは幅を有するメモリユニットを含み、幅広メモリ２１２は、各々３２ビット未満のサイズまたは幅を有するメモリユニットを含む。一般に、計算タイル２００はデータ経路２０５を介して入力活性化を受け取り、ＤＭＡ制御２０８は入力活性化を幅狭メモリ２１０に書き込むよう動作を実行する。同様に、計算タイル２００はデータ経路２０２を介してパラメータ（重み）を受け取り、ＤＭＡ制御２０８はパラメータを幅広メモリ２１２に書き込むよう動作を実行する。いくつかの実現例では、幅狭メモリ２１０は、各メモリサイクルに対して、どの制御装置（例えば、ＴｅｎｓｏｒＯｐ制御２０６またはＤＭＡＯｐ制御２０８）が幅狭メモリ２１０の共有メモリユニットにアクセスすることを許可されるかを判断するために共有メモリシステムで通常用いられるメモリアービタを含み得る。
【００５３】
計算タイル２００はさらに、入力活性化バス２１６と、各々がＭＡＣ演算子２１５および合計レジスタ２２０を含む複数のセルを含むＭＡＣアレイ２１４とを含む。一般に、ＭＡＣアレイ２１４は、複数のセルにわたってＭＡＣ演算子２１５および合計レジスタ２２０を用いて、内積計算に関係する算術演算を含むテンソル計算を実行する。入力活性化バス２１６は、入力活性化が、幅狭メモリ２１０によって、ＭＡＣアレイ２１４の各ＭＡＣ演算子２１５によるそれぞれのアクセスに対して１つずつ与えられる、データ経路を与える。したがって、入力活性化の１つずつのブロードキャストに基づいて、特定のセルの単一のＭＡＣ演算子２１５が各々入力活性化を受け取ることになる。ＭＡＣアレイ２１４のＭＡＣ演算子によって実行される算術演算は、一般に、幅狭メモリ２１０によって与えられる入力活性化を幅広メモリ２１２からアクセスされるパラメータと乗算して単一の出力活性化値を生成することを含む。
【００５４】
算術演算中に、部分和を累積し、対応する、例えば合計レジスタ２２０に格納するか、または幅広メモリ２１２に書き込み、ＭＡＣアレイ２１４の特定のセルによって再アクセスして、後続の乗算演算を完了してもよい。テンソル計算は、第１の部分と第２の部分とを有するものとして説明することができる。第１の部分は、例えば入力活性化とパラメータとの乗算を完了して出力活性化を生成することによって乗算演算が出力活性化を生成すると完了する。第２の部分は、出力活性化への非線形関数の適用を含み、第２の部分は、関数の適用後に出力活性化が幅狭メモリ２１０に書き込まれると完了する。
【００５５】
計算タイル２００はさらに、出力活性化バス２１８、出力活性化パイプライン２２４を含む非線形ユニット（ＮＬＵ）２２２、ＮＬＵ制御２３８、および計算タイル２００内のコンポーネントのコア属性を示す参照マップ２３０を含む。明確にするために参照マップ２３０が示されているが、計算タイル２００には含まれていない。コア属性には、特定のコンポーネントが、ユニット、記憶装置、演算子、制御装置、またはデータ経路であるかどうかが含まれる。一般に、テンソル計算の第１の部分が完了すると、出力活性化がＭＡＣアレイ２１４から出力活性化バス２１８を介してＮＬＵ２２２に与えられる。ＮＬＵ２２２に到着した後、活性化パイプライン２２４を介して受け取られる、活性化関数を特定するデータが出力活性化に適用され、次いで、出力活性化は幅狭メモリ２１０に書き込まれる。いくつかの実現例では、出力活性化バス２１８は、少なくとも１つのパイプライン化されたシフトレジスタ２３６を含み、テンソル計算の第２の部分を完了することは、活性化バス２１８のシフトレジスタ２３６を用いて出力活性化を幅狭メモリ２１０に向けてシフトすることを含む。
【００５６】
例えば、単一の計算タイル２００についての、２つの多次元データアレイの内積計算に関して、ＭＡＣアレイ２１４は、ロバストな単一命令複数データ（ＳＩＭＤ）機能を与える。ＳＩＭＤは、一般に、すべての並列ユニット（複数のＭＡＣ演算子２１５）が（深いループネストに基づいて）同じ命令を共有するが、各ＭＡＣ演算子２１５は異なるデータ要素上で命令を実行することを意味する。１つの基本的な例では、配列［１，２，３，４］および［５，６，７，８］を要素ごとに加算して１つのサイクルで配列［６，８，１０，１２］を取得するには、通常、各要素で演算を実行するために４つの算術演算ユニットが必要となる。ＳＩＭＤを用いることによって、４つのユニットは同じ命令（例えば、「加算」）を共有し、計算を並列して実行することができる。命令が共有されるので、命令帯域幅および命令メモリに対する要件が低減され、それにより効率が向上する。したがって、システム１００および計算タイル２００は、テンソル計算において従来の方法よりも向上した加速および並列処理を与える。
【００５７】
一例では、そして以下でより詳細に説明されるように、単一の命令が、複数のＭＡＣアレイ２１４による消費のために、コントローラ１０２によって複数の計算タイル２００（図１のタイルセット１１２、１１４を参照）に与えられ得る。一般に、ニューラルネットワーク層は複数の出力ニューロンを含むことができ、出力ニューロンは、出力ニューロンのサブセットに関連するテンソル計算がタイルセット１１２、１１４の特定のタイルに割り当てられることができるように、分割されることができる。次いで、タイルセット１１２、１１４の各タイルは、所与の層について、異なるニューロンのグループ上で、関連するテンソル計算を実行することができる。したがって、計算タイル２００は、少なくとも２つの形態の並列処理を与えることができる：１）１つの形態は、タイルセット１１２、１１４の複数のタイルの間で（出力ニューロンのサブセットに対応する）出力活性化を分割することを含み；２）他の形態は、タイルセット１１２、１１４のタイル間の分割に基づく出力ニューロンの複数のサブセットの（単一の命令による）同時計算を含む。
【００５８】
図３は、各々が８の深さを有する、追跡すべき４つのテンソルを含む例示的なテンソルトラバーサルユニット（ＴＴＵ）構造３００を示す。ＴＴＵ３００は一般に、カウンタテンソル３０２、ストライドテンソル３０４、初期テンソル３０６、および制限テンソル３０８を含む。ＴＴＵ３００はさらに、加算器バンク３１０およびテンソルアドレスインデックス３１２を含む。上述のように、テンソルは多次元幾何学的オブジェクトであり、テンソルの要素にアクセスするためには、各次元のインデックスが与えられなければならない。テンソルは幅狭メモリ２１０および幅広メモリ２１２に格納されるので、テンソルインデックスのセットをメモリアドレスのセットに変換しなければならない。いくつかの実現例では、インデックスのメモリアドレスへの変換は、メモリアドレスをインデックスの線形結合にし、テンソルアドレスインデックス３１２を介してアドレスを反映させることによって行われる。
【００５９】
制御スレッドごとにＴＴＵがあり、計算タイル２００においては命令タイプごとに制御スレッド（ＴｅｎｓｏｒＯＰおよびＤＭＡＯｐ）がある。したがって、上述のように、計算タイル２００には２組のＴＴＵがある：１）ＴｅｎｓｏｒＯｐＴＴＵ２２６；および２）ＤＭＡＯｐＴＴＵ２２８。様々な実現例において、ＴｅｎｓｏｒＯｐ制御２０６は、特定のテンソル演算の開始時にＴＴＵ３００にＴｅｎｓｏｒＯｐＴＴＵカウンタ３０２、制限３０８、ストライド値３０４をロードさせ、命令がリタイアされる前にレジスタ値を変更しない。２つのＴＴＵの各々は、計算タイル２００において以下のメモリアドレスポートのためにアドレスを生成する必要があることになる：１）幅広メモリ２１２アドレスポート、および２）４つのアドレスポートとして提示される４つの独立した調停されたバンクを有する幅狭メモリ２１０。
【００６０】
上述のように、いくつかの実現例では、幅狭メモリ２１０は、各メモリサイクルに対して、どの制御装置（例えば、ＴｅｎｓｏｒＯｐ制御２０６またはＤＭＡＯｐ制御２０８）が幅狭メモリ２１０の共有メモリ資源にアクセスすることを許可されるかを判断するために共有メモリシステムで通常用いられるメモリアービタを含み得る。一例では、異なる命令タイプ（ＴｅｎｓｏｒＯｐおよびＤＭＡＯｐ）は、調停が必要な、メモリアクセスを要求する独立した制御スレッドである。特定の制御スレッドがテンソル要素をメモリにコミットすると、その制御スレッドはメモリにコミットされたテンソルレファレンスのカウンタ３０２を増分する。
【００６１】
一例では、ＴｅｎｓｏｒＯｐ制御２０６がテンソルの特定の要素にアクセスするための命令を実行すると、ＴＴＵ３００はテンソルの特定の要素のアドレスを判断することができ、制御２０６はストレージ、例えば幅狭メモリ２１０にアクセスして、特定の要素の活性化値を表すデータを読み出し得る。いくつかの実現例では、プログラムはネスト化されたループを含むことができ、制御２０６は、ネスト化されたループに関連する現在のインデックス変数値に従って、ネスト化されたループ内で二次元アレイ変数の要素にアクセスするよう、命令を実行することができる。
【００６２】
ＴＴＵ３００は、所与のテンソルについて最大Ｘ数のＴＴＵ行に対して同時にトラバーサル状態を保持してもよい。ＴＴＵ３００に同時に常駐する各テンソルは、専用のハードウェアテンソル制御記述子を占有する。ハードウェア制御記述子は、行位置ごとにＸ数のＴＴＵカウンタ３０２、ストライド３０４、および行次元ごとに最大Ｘ数のＴＴＵカウンタを有するテンソルをサポートする制限レジスタ３０８からなることができる。いくつかの実現例では、行数および行あたりのカウンタ数は異なり得る。
【００６３】
所与の位置レジスタについて、最終メモリアドレスは、位置レジスタをともに加算することを含む加算演算から計算される。ベースアドレスはカウンタ３０２に組み込まれる。同じメモリ内に常駐するテンソルレファレンスのために、１つ以上の加算器が共有される。一実現例では、サイクル内の任意の所与のポート上には単一のロード／ストアしか存在できないため、同じ幅狭メモリまたは幅広メモリ内に存在する複数のテンソルレファレンスがそれらのカウンタを任意の所与のサイクルで増分されないこと確実にすることがループネスト制御の機能となる。オフセット値の判断を含むメモリアクセスアドレス値を計算するためのレジスタの使用は、２０１６年２月３日に出願された「マトリックス処理装置（Matrix Processing Apparatus）」と題する特許出願連続番号第１５／０１４，２６５号により詳細に記載されており、その全体をここに明示的に引用により援用する。
【００６４】
例えば、ソフトウェアアルゴリズムがＮ次元テンソルを処理するとき、各ループがＮ次元テンソルの各次元をトラバースする役割を果たす、ネスト化されたループが用いられてもよい。多次元テンソルは、行列または多次元行列であり得る。Ｎ次元テンソルの各次元は１つまたは複数の要素を含むことができ、各要素はそれぞれのデータ値を格納することができる。例えば、テンソルはプログラム内の変数であり得、変数は三次元を有し得る。第１の次元は３００個の要素の長さを有してもよく、第２の次元は１０００個の要素の長さを有してもよく、第３の次元は２０個の要素の長さを有してもよい。
【００６５】
ネスト化されたループ内でテンソルをトラバースすることは、要素の対応するデータ値をロードまたは格納するために要素のメモリアドレス値の計算を必要とし得る。たとえば、ｆｏｒループはネスト化されたループであり、３つのループインデックス変数で追跡される３つのループをネスト化して３次元テンソルをトラバースすることができる。場合によっては、プロセッサは、内側ループのループ境界を外側ループインデックス変数で設定するなど、ループ境界条件を実行する必要があり得る。例えば、ネストされたループの最も内側のループを出るかどうかを判断する際に、プログラムは、最も内側のループのループインデックス変数の現在値と、ネストされたループの最も外側のループのループインデックス変数の現在値とを比較してもよい。
【００６６】
一般に、計算タイルの処理ユニットがテンソルの特定の要素にアクセスするための命令を実行すると、テンソルトラバーサルユニットはテンソルの特定の要素のアドレスを判断し、処理ユニットが記憶媒体（メモリ）にアクセスして特定の要素の値を表すデータを読み出せるようにする。例えば、プログラムはネスト化されたループを含むことができ、処理ユニットは、命令を実行して、ネスト化されたループに関連する現在のインデックス変数値に従って、ネスト化されたループ内において二次元アレイ変数の要素にアクセスすることができる。ネスト化されたループに関連する現在のインデックス変数値に基づいて、テンソルトラバーサルユニットは、二次元アレイ変数の第１の要素からのオフセットを表すオフセット値を判断し得る。処理ユニットは、次いで、オフセット値を用いてメモリから二次元アレイ変数の特定の要素にアクセスする。
【００６７】
以下は、特殊化されたＴＴＵ３００をインスタンス化するために用いられてもよいテンプレートパラメータを与える。１）Ｘ数のＴＴＵ行；２）行ごとのＸ数のＴＴＵカウンタ；３）Ｘ数のＴＴＵ加算器ユニット；４）ＴＴＵ行ごとに、共有される加算器参照を示す；および５）カウンタごとにＸカウンタサイズ［ＴＴＵ］［行］［深さ］を示す。すべてのＴＴＵレジスタはアーキテクチャ上可視である。計算のためにアクセスされる必要がある特定のテンソル要素のアドレス（すなわちテンソルアドレス３１２）は、カウンタの加算の結果である。増分信号が制御スレッドからＴＴＵの行に発行されると、ＴＴＵ３００は単一のサイクル動作を実行し、最も内側の次元をその次元のストライド３０４によって増分し、そしてすべての深さを通してロールオーバーを伝播する。
【００６８】
一般に、ＴＴＵ３００は、１つまたは複数のテンソルに関連する状態を判断する。状態は、ループ境界値、現在のループインデックス変数値、メモリアドレス値を計算するための次元乗数、および／または分岐ループ境界を処理するためのプログラムカウンタ値を含むことができる。ＴＴＵ３００は、１つまたは複数のテンソル状態要素と算術論理ユニットとを含むことができる。テンソル状態要素の各々は、記憶要素、例えばレジスタまたは他の任意の好適な記憶回路であり得る。いくつかの実現例では、テンソル状態要素は、特許出願連続番号第１５／０１４，２６５号にさらに詳細に記載されているように、物理的または論理的に異なるグループに構成されてもよい。
【００６９】
図４は、活性化４０４を入力バス２１６を介して１つまたは複数の積和（ＭＡＣ）演算子にブロードキャストする幅狭メモリ２１０を含む例示的なアーキテクチャを示す。シフトレジスタ４０４は、ＭＡＣセル４１０内の１つまたは複数のＭＡＣ演算子２１５による受け取りのために活性化４０４が一度に１つずつ入力バス２１６に送出されるシフト機能を与える。一般に、ＭＡＣ演算子２１５を含むＭＡＣセル４１０は、部分和を計算する計算セルとして定義することができ、いくつかの実現例では、部分和データを出力バス２１８に書き込むように構成されている。示されるように、セル４１０は、１つまたは複数のＭＡＣ演算子からなってもよい。一実現例では、ＭＡＣセル４１０内のＭＡＣ演算子２１５の数は、セルの発行幅と呼ばれる。一例として、二重発行セルは、（幅狭メモリ２１０からの）２つの活性化値と（幅広メモリ２１２からの）２つのパラメータとの乗算を計算し２つ乗数の結果と現在の部分和との間で加算を実行できる２つのＭＡＣ演算子を有するセルを指す。
【００７０】
上述のように、入力バス２１６は、線形ユニット（すなわち、ＭＡＣアレイ２１４）のＭＡＣ演算子２１５に入力活性化を与えるブロードキャストバスである。いくつかの実現例では、同じ入力がすべてのＭＡＣ演算子２１５の間で共有される。入力バス２１６の幅は、所与のＭＡＣアレイ２１４についてブロードキャスト入力を対応する数のセルに供給するのに十分に広くなければならない。入力バス２１６の構造を説明するために以下の例を考察する。線形ユニット内のセルの数が４に等しく、活性化幅が８ビットに等しいとき、入力バス２１６は、サイクルごとに最大４つの入力活性化を与えるように構成することができる。この例では、ＭＡＣアレイ２１４内のすべてのセルは、ブロードキャストされる４つの活性化のうちの１つのみにアクセスするであろう。
【００７１】
計算タイル２００によって受け取られる命令のＴｅｎｓｏｒＯｐフィールド設定に基づいて、ＭＡＣアレイ２１４のセルは、同じ入力活性化を用いて計算を実行する必要があり得る。これは、ＭＡＣアレイ２１４のセル内のＺｏｕｔ分割と呼ばれてもよい。同様に、セル内のＺｉｎ分割は、ＭＡＣアレイ２１４のセルが計算を実行するために異なる活性化を必要とするときに生じる。前者の場合、単一の入力活性化は４回複製され、幅狭メモリ２１０から読み出された４つの活性化が４サイクルにわたってブロードキャストされる。後者の場合、幅狭メモリ２１０の読出がサイクルごとに必要とされる。前述の例では、ＴｅｎｓｏｒＯｐ制御２０６は、コントローラ１０２から受け取られる命令の実行に基づいてこのブロードキャスト方法をオーケストレーションする。
【００７２】
図５は、図２および図４の幅狭メモリユニット２１０に出力活性化を与えるための出力バス２１８を含む例示的なアーキテクチャを示す。一般に、計算タイル２００内のＭＡＣアレイ２１４の各ＭＡＣセル２１５は、異なる出力活性化を計算する。しかしながら、出力特徴アレイに関して、出力特徴深さが計算タイル２００内のＭＡＣセル２１５の数より少ない場合、セルは１つまたは複数のセルグループを形成するようにグループ化されてもよい。セルグループ内のすべてのＭＡＣセル２１５は、同じ出力を（すなわち、出力特徴マップについて）計算するが、各セルは、Ｚｉｎ次元のサブセットに対応する、出力のサブセットを計算するにすぎない。その結果、ＭＡＣセル２１５の出力は、ここでは、最終的な線形出力ではなく、部分和である。いくつかの実現例では、ＮＬＵ２２２は、ＮＬＵ制御２３８によってＮＬＵ２２２に与えられる制御信号に基づいてこれらの部分和を最終線形出力に集約する。
【００７３】
上述のように、出力バス２１８はパイプライン化されたシフトレジスタである。様々な実現例では、テンソル計算の第１の部分が終了し、ＴｅｎｓｏｒＯｐ制御２０６が（命令を実行することによって）部分和を書き出す必要があることを示すと、出力バス２１８に与えられる部分和の並列ロードがあることになる。並列ロードの数は、計算タイル２００内のＭＡＣセルの数に対応することになる。ＴｅｎｓｏｒＯｐ制御２０６は、次いで、部分和量をシフトアウトさせ、非線形パイプラインを介して送らせる。いくつかの実現例では、タイル内のすべてのＭＡＣセルが実際に計算を実行するために利用されるわけではない状況があり得る。このような状況では、出力バスにシフトされるすべての部分和が有効になるわけではないことになる。この例では、ＴｅｎｓｏｒＯｐ制御２０６は、ＭＡＣアレイ２１４に制御信号を与えて、シフトアウトされるべき有効セルの数を示してもよい。出力バス２１８にロードされる並列ロード量は依然として計算タイル内のＭＡＣセルの数に対応するが、有効値のみがシフトアウトされて幅狭メモリ２１０にコミットされることになる。
【００７４】
図６は、図２のニューラルネットワーク計算タイルを２００用いてテンソル計算を実行するためのプロセス６００の例示的なフローチャートである。プロセス６００はブロック６０２で始まり、計算タイル２００の幅狭メモリ２１０は入力活性化データバス２１６に活性化を１つずつ送る（すなわちブロードキャストする）。活性化値は、幅狭メモリ２１０に格納される。幅狭メモリ２１０は、入力量にアクセスするための特定のメモリ位置へのアドレス指定を許可するスタティックランダムアクセスメモリ（ＳＲＡＭ）バンクの集まりであり得る。幅狭メモリ２１０から読み出された活性化は、入力活性化バス２１６を介して、複数のＭＡＣ演算子２１５および合計レジスタ２２０を含むＭＡＣアレイ２１４（すなわち、線形ユニット）の線形セルにブロードキャストされる。プロセス６００のブロック６０４で、計算タイル２００のＭＡＣ演算子２１５は各々２つの入力を受け取り、１つの入力（活性化）は入力活性化バス２１６から受け取られ；別の入力（パラメータ）は幅広メモリ２１２から受け取られる。したがって、活性化は、各ＭＡＣ演算子２１５の入力のうちの１つを供給し、ＭＡＣアレイ２１４のセル内の各ＭＡＣ演算子２１５は幅広メモリ２１２からそれらの第２の乗数入力を得る。
【００７５】
プロセス６００のブロック６０６において、計算タイル２００のＭＡＣアレイ２１４は、メモリからアクセスされるデータアレイ構造の要素に基づいて内積計算を含むテンソル計算を実行する。幅広メモリ２１２は、線形ユニットの幅（３２ビット）に等しいビット単位の幅を有する。したがって、線形ユニット（ＬＵ）は、ベクトルメモリ（すなわち、幅広メモリ２１２）からデータを受け取るＳＩＭＤベクトル算術論理ユニット（ＡＬＵ）ユニットである。いくつかの実現例では、ＭＡＣ演算子２１５は、幅広メモリ２１２からアキュムレータ入力（部分和）も取得し得る。いくつかの実現例では、２つの異なるオペランド（パラメータおよび部分和）に関する読出および／または書込について、幅広メモリ２１２ポートに対して時分割がある。一般に、領域を最適化するために、幅広メモリ２１２は限られた数のポートを有し得る。その結果、幅広メモリ２１２からオペランド（例えば、パラメータ）を読み出し、同時に幅広メモリ２１２にオペランド（例えば、部分和）を書き込む必要がある場合、特定のオペランドに関連するパイプラインが機能停止し得る。
【００７６】
ブロック６０８で、計算タイル２００の計算セル（ＭＡＣ演算子２１５および合計レジスタ２２０を有する）が、ＭＡＣ／計算セルによって実行される乗算演算に基づいて少なくとも１つの出力活性化を生成する。ＭＡＣセル動作の結果は、（部分和算術演算中に）幅広メモリに書き戻される部分和、または出力バス２１８に送られる出力活性化のいずれかを含む。ブロック６１０で、計算タイル２００のＮＬＵ２２２は、出力活性化に非線形活性化関数を適用し、次いで活性化を幅狭メモリ２１０に書き込む。いくつかの実現例では、出力バス２１８はシフトレジスタであり、ＭＡＣ演算子２１５からの結果／出力活性化の並列ロードを累積することができるが、非線形関数の適用および同じタイルの幅狭メモリ２１０への書き込み動作のために、それらを一度に１つずつシフトアウトする。
【００７７】
本明細書において記載される主題および機能的動作の実施形態は、本明細書に開示される構造およびそれらの構造的等価物を含む、デジタル電子回路系において、有形で実施されるコンピュータソフトウェアもしくはファームウェアにおいて、コンピュータハードウェアにおいて、またはそれらの１つ以上の組合せにおいて実現され得る。本明細書に記載される主題の実施形態は、１つ以上のコンピュータプログラムとして、すなわち、データ処理装置による実行のために、または、データ処理装置の動作を制御するために有形の非一時的なプログラム担体上でエンコードされたコンピュータプログラム命令の１つ以上のモジュールとして実現され得る。代替的に、または加えて、プログラム命令は、データ処理装置による実行に対して好適な受信側装置への送信のために情報をエンコードするよう生成される、たとえばマシンにより生成された電気信号、光信号、または電磁気信号などの、人為的に生成された伝播される信号上でエンコードすることができる。コンピュータ記憶媒体は、コンピュータ可読記憶装置、コンピュータ可読記憶基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの１つ以上の組合せであり得る。
【００７８】
本明細書に記載されるプロセスおよび論理フローは、入力データ上で動作し出力を生成することにより機能を実行するよう１つ以上のプログラマブルコンピュータが１つ以上のコンピュータプログラムを実行することによって実行され得る。プロセスおよび論理フローは、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）といった特殊目的論理回路、またはＧＰＧＰＵ（汎用グラフィック処理装置）によっても実行され得、装置もそれらにより実現され得る。
【００７９】
コンピュータプログラムの実行に好適であるプロセッサは、例として、汎用マイクロプロセッサもしくは特殊目的マイクロプロセッサもしくはその両方または任意の種類の中央処理ユニットに基づき得る。一般に、中央処理ユニットは、リードオンリメモリもしくはランダムアクセスメモリまたはその両方から命令およびデータを受取る。コンピュータの必須の要素は、命令を実行するための中央処理ユニットと、命令およびデータを格納するための１つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといった、データを格納するための１つ以上の大容量記憶装置を含むか、当該１つ以上の大容量記憶装置からデータを受取るかもしくは当該１つ以上の大容量記憶装置にデータを転送するよう動作可能に結合されるか、またはその両方を行う。しかしながら、コンピュータはそのような装置を有する必要はない。
【００８０】
コンピュータプログラム命令およびデータを格納するのに好適であるコンピュータ可読媒体は、例として、たとえばＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリデバイスといった半導体メモリデバイスを含むすべての形態の不揮発性メモリ、媒体およびメモリデバイス；たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスクを含む。プロセッサおよびメモリは、特殊目的論理回路によって補足され得るか、または特殊目的論理回路に組み込まれ得る。
【００８１】
本明細書は多くの特定の実現例の詳細を含んでいるが、これらは如何なる発明の範囲または請求され得るものの範囲に対する限定としても解釈されるべきではなく、特定の発明の特定の実施形態に特有の特徴であり得る記載として解釈されるべきである。別個の実施形態の文脈で本明細書において記載されるある特徴は、単一の実施形態において組合せでも実現され得る。反対に、単一の実施形態の文脈において記載されるさまざまな特徴は、複数の実施形態において別々に、または任意の好適な部分的組合わせでも実現され得る。さらに、特徴は、ある組合せにおいて作用すると上で記載され、最初はそのように請求されていさえする場合もあるが、請求される組合せからの１つ以上の特徴はいくつかの場合には当該組合せから削除され得、請求される組合せは、部分的組合わせまたは部分的組合わせの変形例に向けられ得る。
【００８２】
同様に、動作が図においては特定の順に示されているが、そのような動作は、望ましい結果を達成するために、示された当該特定の順もしくは連続した順で実行される必要があると理解されるべきではなく、または、すべての示された動作が実行される必要があると理解されるべきではない。ある状況においては、マルチタスキングおよび並列処理が有利であり得る。さらに、上述の実施形態における様々なシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきではなく、記載されるプログラムコンポーネントおよびシステムは一般に単一のソフトウェア製品に統合され得るかまたは複数のソフトウェア製品にパッケージ化され得ることが理解されるべきである。
【００８３】
その他の実現例は、以下の例にまとめられる。
例１：テンソル計算を加速するための計算ユニットであって、第１のデータ幅を有し、入力活性化または出力活性化のうちの少なくとも１つを格納するための第１のメモリバンクと、第１のデータ幅よりも大きい第２のデータ幅を有し、計算を実行する際に用いられる１つまたは複数のパラメータを格納するための第２のメモリバンクと、第２のメモリバンクからパラメータを受け取り計算を実行する少なくとも１つの積和（「ＭＡＣ」）演算子を含む少なくとも１つのセルと、少なくとも第１のメモリバンクとデータ通信する第１のトラバーサルユニットとを備え、第１のトラバーサルユニットは、第１のメモリバンクに制御信号を与えて、ＭＡＣ演算子によってアクセス可能なデータバスに入力活性化を与えるように構成され、計算ユニットは、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行し、１つまたは複数の計算は、ＭＡＣ演算子によって実行され、部分的に、データバスから受け取られる入力活性化と第２のメモリバンクから受け取られるパラメータとの乗算演算を含む、計算ユニット。
【００８４】
例２：計算ユニットは、複数のループを含むループネストを実行することによって、計算のうちの１つまたは複数を実行し、ループネストの構造は、データアレイの１つまたは複数の次元をトラバースするよう第１のトラバーサルユニットによって用いられるそれぞれのループを含む、例１に記載の計算ユニット。
【００８５】
例３：１つまたは複数の計算は、第１のトラバーサルユニットによって与えられるテンソル演算に部分的に基づいて実行され、テンソル演算は、データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含む、例２に記載の計算ユニット。
【００８６】
例４：計算ユニットの外部にあるソースから受け取られる命令に基づいて、第１のメモリバンクの少なくとも１つのメモリ位置および第２のメモリバンクの少なくとも１つのメモリ位置にアクセスするように構成される第２のトラバーサルユニットをさらに備える、例１〜例３の１つに記載の計算ユニット。
【００８７】
例５：第１のトラバーサルユニットはテンソル演算トラバーサルユニットであり、第２のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、データアレイは複数の要素を含むテンソルに対応する、例４に記載の計算ユニット。
【００８８】
例６：計算ユニットは非線形ユニットを含み、計算の第１の部分は乗算演算に基づいて１つまたは複数の出力活性化を生成することを含み、計算の第２の部分は非線形ユニットによって非線形関数を１つまたは複数の出力活性化に適用することを含む、例１〜例５の１つに記載の計算ユニット。
【００８９】
例７：計算ユニットによって実行される１つまたは複数の計算は、出力活性化を第１のメモリバンクにシフトするようシフトレジスタを用いることを含む、例６に記載の計算ユニット。
【００９０】
例８：計算ユニットの外側に延びるリングバスの一部をさらに備え、リングバスは、第１のメモリバンクと他の近接する計算ユニットのメモリバンクとの間および第２のメモリバンクと他の近接する計算ユニットのメモリバンクとの間にデータ経路を与える、例１〜例８の１つに記載の計算ユニット。
【００９１】
例９：第２のメモリバンクは、部分和または１つもしくは複数のプーリング層入力のうちの少なくとも１つを格納するように構成されている、例１〜例８の１つに記載の計算ユニット。
【００９２】
例１０：テンソル計算を加速するための、コンピュータにより実施される方法であって、第１のデータ幅を有する第１のメモリバンクが第１のトラバーサルユニットから制御信号を受け取ったことに応答して、第１のメモリバンクによって第１の入力活性化を送ることを備え、第１のメモリバンクは、計算ユニット内に配置され、第１の入力活性化は、計算ユニットの少なくとも１つのセルによってアクセス可能なデータバスによって与えられ、方法はさらに、少なくとも１つのセルによって、第１のデータ幅よりも大きい第２のデータ幅を有する第２のメモリバンクから１つまたは複数のパラメータを受け取ることを備え、少なくとも１つのセルは少なくとも１つの積和（「ＭＡＣ」）演算子を含み、方法はさらに、ＭＡＣ演算子によって、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行することを備え、１つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第１の入力活性化と第２のメモリバンクから受け取られる少なくとも１つのパラメータとの乗算演算を含む。
【００９３】
例１１：１つまたは複数の計算は、計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、ループネストの構造は、データアレイの１つまたは複数の次元をトラバースするよう第１のトラバーサルユニットによって用いられるそれぞれのループを含む、例１０に記載のコンピュータにより実施される方法。
【００９４】
例１２：第１のトラバーサルユニットによって、データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、例１１に記載のコンピュータにより実施される方法。
【００９５】
例１３：第１のトラバーサルユニットはテンソル演算トラバーサルユニットであり、第２のトラバーサルユニットはダイレクトメモリアクセストラバーサルユニットであり、データアレイは複数の要素を含むテンソルに対応する、例１０〜例１２の１つに記載のコンピュータにより実施される方法。
【００９６】
例１４：乗算演算に基づいて少なくとも１つの出力活性化を生成することによって１つまたは複数の計算の第１の部分を実行することをさらに備える、例１０〜例１３の１つに記載のコンピュータにより実施される方法。
【００９７】
例１５：１つまたは複数の出力活性化に非線形関数を適用することによって１つまたは複数の計算の第２の部分を実行することをさらに備える、例１４に記載のコンピュータにより実施される方法。
【００９８】
例１６：１つまたは複数のプロセッサによって実行可能な命令を含む非一時的コンピュータ可読記憶媒体であって、命令は、そのように実行されると、１つまたは複数のプロセッサに動作を実行させ、動作は、第１のデータ幅を有する第１のメモリバンクが第１のトラバーサルユニットから制御信号を受け取ったことに応答して、第１のメモリバンクによって第１の入力活性化を送ることを含み、第１のメモリバンクは、計算ユニット内に配置され、第１の入力活性化は、計算ユニットの少なくとも１つのセルによってアクセス可能なデータバスによって与えられ、動作はさらに、少なくとも１つのセルによって、第１のデータ幅よりも大きい第２のデータ幅を有する第２のメモリバンクから１つまたは複数のパラメータを受け取ることを含み、少なくとも１つのセルは少なくとも１つの積和（「ＭＡＣ」）演算子を含み、動作はさらに、ＭＡＣ演算子によって、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行することを含み、１つまたは複数の計算は、部分的に、データバスからアクセスされる少なくとも第１の入力活性化と第２のメモリバンクから受け取られる少なくとも１つのパラメータとの乗算演算を含む。
【００９９】
例１７：１つまたは複数の計算は、計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、ループネストの構造は、データアレイの１つまたは複数の次元をトラバースするよう第１のトラバーサルユニットによって用いられるそれぞれのループを含む、例１６に記載の非一時的コンピュータ可読記憶媒体。
【０１００】
例１８：第１のトラバーサルユニットによって、データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、例１７に記載の非一時的コンピュータ可読記憶媒体。
【０１０１】
例１９：乗算演算に基づいて少なくとも１つの出力活性化を生成することによって１つまたは複数の計算の第１の部分を実行することをさらに備える、例１６〜例１８の１つに記載の非一時的コンピュータ可読記憶媒体。
【０１０２】
例２０：１つまたは複数の出力活性化に非線形関数を適用することによって１つまたは複数の計算の第２の部分を実行することをさらに備える、例１９に記載の非一時的コンピュータ可読記憶媒体。
【０１０３】
主題の特定の実施形態が記載された。他の実施形態は以下の請求の範囲内にある。たとえば、請求項において記載されるアクションは、異なる順で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図において示されるプロセスは、望ましい結果を達成するために、示された特定の順または連続する順であることを必ずしも必要としない。ある実現例においては、マルチタスキングおよび並列処理が有利であり得る。
【図１】
2019537793.tif 000003
【図２】
2019537793.tif 000004
【図３】
2019537793.tif 000005
【図４】
2019537793.tif 000006
【図５】
2019537793.tif 000007
【図６】
2019537793.tif 000008
【手続補正書】
【提出日】令和1年9月30日(2019.9.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ニューラルネットワークのテンソル計算を加速するための計算ユニット（２００）であって、
第１のデータ幅を有し、入力活性化または出力活性化のうちの少なくとも１つを格納するための第１のメモリバンク（２１０）と、
前記第１のデータ幅よりも大きい第２のデータ幅を有し、計算を実行する際に用いられる１つまたは複数のパラメータを格納するための第２のメモリバンク（２１２）と、
前記計算ユニットの外部にあるソースから受け取られる命令に基づいて、前記第１のメモリバンクの少なくとも１つのメモリ位置にアクセスして少なくとも１つの入力活性化または少なくとも１つの出力活性化を得、
前記第２のメモリバンクに前記パラメータを書き込むための制御信号を与え、
前記受け取られた命令に基づいて、前記第２のメモリバンクの少なくとも１つのメモリ位置にアクセスして前記１つまたは複数のパラメータを得るように構成されるダイレクトメモリアクセストラバーサルユニットと、
前記第２のメモリバンクからパラメータを受け取り計算を実行する少なくとも１つの積和（ＭＡＣ）演算子（２１５）を含む少なくとも１つのセルと、
少なくとも前記第１のメモリバンクとデータ通信するテンソルトラバーサルユニット（２２６）とを備え、前記テンソルトラバーサルユニットは、前記第１のメモリバンクに制御信号を与えて、前記ＭＡＣ演算子によってアクセス可能なデータバス（２１６）に入力活性化を与えるように構成され、
前記計算ユニットは、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行し、前記１つまたは複数の計算は、前記ＭＡＣ演算子によって実行され、部分的に、前記データバスから受け取られる前記入力活性化と前記第２のメモリバンクから受け取られるパラメータとの乗算演算を含む、計算ユニット。
【請求項２】
前記計算ユニットは、複数のループを含むループネストを実行することによって、前記計算のうちの１つまたは複数を実行し、前記ループネストの構造は、前記データアレイの１つまたは複数の次元をトラバースするよう前記テンソルトラバーサルユニットによって用いられるそれぞれのループを含む、請求項１に記載の計算ユニット。
【請求項３】
前記１つまたは複数の計算は、前記テンソルトラバーサルユニットによって与えられるテンソル演算に部分的に基づいて実行され、前記テンソル演算は、前記データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含む、請求項２に記載の計算ユニット。
【請求項４】
前記計算ユニットは非線形ユニットを含み、前記計算の第１の部分は前記乗算演算に基づいて１つまたは複数の出力活性化を生成することを含み、前記計算の第２の部分は前記非線形ユニットによって非線形関数を前記１つまたは複数の出力活性化に適用することを含む、請求項１〜３のいずれか１項に記載の計算ユニット。
【請求項５】
前記計算ユニットによって実行される前記１つまたは複数の計算は、前記出力活性化を前記第１のメモリバンクにシフトするようシフトレジスタを用いることを含む、請求項４に記載の計算ユニット。
【請求項６】
前記計算ユニットの外側に延びるリングバスの一部をさらに備え、前記リングバスは、前記第１のメモリバンクと他の近接する計算ユニットのメモリバンクとの間および前記第２のメモリバンクと他の近接する計算ユニットのメモリバンクとの間にデータ経路を与える、請求項１〜５のいずれか１項に記載の計算ユニット。
【請求項７】
前記第２のメモリバンクは、部分和または１つもしくは複数のプーリング層入力のうちの少なくとも１つを格納するように構成されている、請求項１〜６のいずれか１項に記載の計算ユニット。
【請求項８】
ニューラルネットワークのテンソル計算を加速するための、コンピュータにより実施される方法であって、
前記計算ユニットの外部にあるソースから受け取られる命令に基づいて、ダイレクトメモリアクセストラバーサルユニットによって、第１のメモリバンクの少なくとも１つのメモリ位置にアクセスして少なくとも１つの入力活性化または少なくとも１つの出力活性化を得ることと、
第２のメモリバンクにパラメータを書き込むための制御信号を与えることと、
前記受け取られた命令に基づいて、前記第２のメモリバンクの少なくとも１つのメモリ位置にアクセスして前記１つまたは複数のパラメータを得ることと、
第１のデータ幅を有する前記第１のメモリバンクがテンソルトラバーサルユニットから制御信号を受け取ったことに応答して、前記第１のメモリバンクによって第１の入力活性化を送ることを備え、前記第１のメモリバンクは、計算ユニット内に配置され、前記第１の入力活性化は、前記計算ユニットの少なくとも１つのセルによってアクセス可能なデータバスによって与えられ、前記方法はさらに、
前記少なくとも１つのセルによって、前記第１のデータ幅よりも大きい第２のデータ幅を有する第２のメモリバンクから１つまたは複数のパラメータを受け取ることを備え、前記少なくとも１つのセルは少なくとも１つの積和（ＭＡＣ）演算子を含み、前記方法はさらに、
前記ＭＡＣ演算子によって、データアレイの少なくとも１つの要素に関連する１つまたは複数の計算を実行することを備え、前記１つまたは複数の計算は、部分的に、前記データバスからアクセスされる少なくとも前記第１の入力活性化と前記第２のメモリバンクから受け取られる少なくとも１つのパラメータとの乗算演算を含む、ニューラルネットワークのテンソル計算を加速するための、コンピュータにより実施される方法。
【請求項９】
前記１つまたは複数の計算は、前記計算ユニットが複数のループを含むループネストを実行することに部分的に基づいて実行され、前記ループネストの構造は、前記データアレイの１つまたは複数の次元をトラバースするよう前記テンソルトラバーサルユニットによって用いられるそれぞれのループを含む、請求項８に記載のコンピュータにより実施される方法。
【請求項１０】
前記テンソルトラバーサルユニットによって、前記データアレイの１つまたは複数の要素にアクセスするためのループネスト構造を含むテンソル演算を与えることをさらに備える、請求項９に記載のコンピュータにより実施される方法。
【請求項１１】
前記乗算演算に基づいて少なくとも１つの出力活性化を生成することによって前記１つまたは複数の計算の第１の部分を実行することをさらに備える、請求項８〜１０のいずれか１項に記載のコンピュータにより実施される方法。
【請求項１２】
前記１つまたは複数の出力活性化に非線形関数を適用することによって前記１つまたは複数の計算の第２の部分を実行することをさらに備える、請求項１１に記載のコンピュータにより実施される方法。
【請求項１３】
コンピュータによって実行されるプログラムであって、前記プログラムは、前記コンピュータに請求項８〜１２のいずれか１項に記載の方法を実行させる、プログラム。
【国際調査報告】
2019537793.tif 000009
2019537793.tif 000010
2019537793.tif 000011