(57)【要約】  コンピュータによって実施される方法は、処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることを含む。上記方法は、命令を受け取ることに応答して、処理ユニットが、複数のループを含むループネストを実行することによって、テンソル計算を実行することを含み得、ループネストの構造は、命令のデータ値のうちの１つ以上に基づいて定義される。テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分であり得る。命令によって特定されるデータ値は、ニューラルネットワーク層のタイプを特定する値を含み得、ループネストの構造は、ニューラルネットワーク層のタイプによって少なくとも部分的に定義され得る。
2019533868.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実施される方法であって、
処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、
前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、コンピュータによって実施される方法。
【請求項２】
前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、請求項１に記載の方法。
【請求項３】
前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、請求項２に記載の方法。
【請求項４】
前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、請求項２に記載の方法。
【請求項５】
前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも１つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、請求項２に記載の方法。
【請求項６】
前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット（ＴＴＵ）に少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記ＴＴＵに発行させることを含む、請求項５に記載の方法。
【請求項７】
前記処理ユニットが前記ＴＴＵに少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用される参照されたアレイエレメントのためのアドレスを前記ＴＴＵのアレイレファレンスに生成させることをさらに含む、請求項５に記載の方法。
【請求項８】
前記命令は、前記ＴＴＵに関連付けられるアレイレファレンスのためのアドレスを生成するよう、第２のＴＴＵカウンタと合計される第１のＴＴＵカウンタを示す、請求項７に記載の方法。
【請求項９】
前記テンソル計算を実行することは、前記処理ユニットが、前記テンソル計算の実行に関連付けられる１つ以上のオペランドを管理する第１の同期プロシージャを実行することを含み、オペランドを管理することは、同期フラグ条件に基づいて１つ以上のループネストをストールすることを含む、請求項１に記載の方法。
【請求項１０】
前記テンソル計算を実行することは、前記処理ユニットが、前記ループネストの特徴に関連付けられるカウンタをインクリメントすることを管理する第２の同期プロシージャを実行することを含む、請求項９に記載の方法。
【請求項１１】
電子システムであって、
前記電子システムに配置されるとともに１つ以上の処理デバイスを含む処理ユニットと、
命令を格納するための１つ以上のマシン読取可能なストレージデバイスとを含み、前記命令は、動作を実行するように前記１つ以上の処理デバイスによって実行可能であり、前記動作は、
前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、
前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、電子システム。
【請求項１２】
前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、請求項１１に記載の電子システム。
【請求項１３】
前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、請求項１２に記載の電子システム。
【請求項１４】
前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、請求項１２に記載の電子システム。
【請求項１５】
前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも１つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、請求項１２に記載の電子システム。
【請求項１６】
前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット（ＴＴＵ）に少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記ＴＴＵに発行させることを含む、請求項１５に記載の電子システム。
【請求項１７】
処理ユニットによって実行可能な命令を含む一時的でないコンピュータ読取可能記憶媒体であって、前記命令は、その実行の際には、
前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、
前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含む動作を前記処理ユニットに実行させ、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、一時的でないコンピュータ読取可能記憶媒体。
【請求項１８】
前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、請求項１７に記載の一時的でないコンピュータ読取可能記憶媒体。
【請求項１９】
前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、請求項１８に記載の一時的でないコンピュータ読取可能記憶媒体。
【請求項２０】
前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、請求項１８に記載の一時的でないコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
この明細書は、ディープニューラルネットワーク（ＤＮＮ： Deep Neural Network）の計算のための命令セットに関する。
【背景技術】
【０００２】
ニューラルネットワークは、受け取った入力についてたとえば分類といった出力を生成するためにモデルの１つ以上の層を使用する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて１つ以上の隠れ層を含んでいる。各隠れ層の出力は、ネットワークにおける次の層への入力として使用される。すなわち、ネットワークの次の隠れ層または出力層への入力として使用される。ネットワークの各層は、パラメータのそれぞれのセットの現在値に従って、受け取った入力から出力を生成する。
【０００３】
いくつかのニューラルネットワークは、１つ以上の畳み込みニューラルネットワーク層を含んでいる。各畳み込みニューラルネットワーク層は、カーネルの関連付けられるセットを有する。各カーネルは、ユーザによって作成されるニューラルネットワークモデルによって確立される値を含む。いくつかの実現例では、カーネルは特定の画像輪郭、形状または色を識別する。カーネルは、重み入力のマトリクス構造として表わされ得る。各畳み込み層はさらに、アクティベーション入力のセットを処理し得る。アクティベーション入力のセットもマトリクス構造として表わされ得る。
【発明の概要】
【課題を解決するための手段】
【０００４】
概要
この明細書に記載される主題の革新的な１つの局面は、コンピュータによって実施される方法において具現化され得る。当該方法は、処理ユニットが、テンソル計算を実行するためのパラメータを特定する命令を受け取ることを含む。当該方法は、前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することを含み得、前記ループネストの構造は、前記命令の前記パラメータのうちの１つ以上に基づいて定義される。これらおよび他の実現例は各々、随意に以下の特徴のうち１つ以上を含み得る。たとえば、前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分であり得る。前記命令によって特定される前記パラメータは、前記ニューラルネットワーク層のタイプを特定するパラメータを含み得、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義され得る。これにより、複数のループを含むループネストを実行することは、ネスト化ループの構造によって特定される順序でテンソルのエレメントに対してトラバーサルを実行することを指し得、前記構造はたとえば、ループネスティングの深さと、スタートおよびエンドインデックスと、ストライド（stride）と、各ループの方向とによってそれぞれ特定される。
【０００５】
いくつかの実現例では、前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である。いくつかの実現例では、前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される。いくつかの実現例では、前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である。いくつかの実現例では、前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも１つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む。
【０００６】
いくつかの実現例では、前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット（ＴＴＵ）に少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記ＴＴＵに発行させることを含む。いくつかの実現例では、上記方法は、前記処理ユニットが前記ＴＴＵに少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用される参照されたアレイエレメントのためのアドレスを前記ＴＴＵのアレイレファレンスに生成させることをさらに含む。いくつかの実現例では、命令は、前記ＴＴＵに関連付けられるアレイレファレンスのためのアドレスを生成するよう、第２のＴＴＵカウンタと合計される第１のＴＴＵカウンタを示す。
【０００７】
いくつかの実現例では、前記テンソル計算を実行することは、前記処理ユニットが、前記テンソル計算の実行に関連付けられる１つ以上のオペランドを管理する第１の同期プロシージャを実行することを含み、オペランドを管理することは、同期フラグ条件に基づいて１つ以上のループネストをストールすることを含む。いくつかの実現例では、前記テンソル計算を実行することは、前記処理ユニットが、前記ループネストの特徴に関連付けられるカウンタをインクリメントすることを管理する第２の同期プロシージャを実行することを含む。
【０００８】
この明細書に記載される主題の別の革新的な局面は、電子システムにおいて具現化され得る。当該電子システムは、前記電子システムに配置されるとともに１つ以上の処理デバイスを含む処理ユニットと、命令を格納するための１つ以上のマシン読取可能なストレージデバイスとを含み、前記命令は、動作を実行するように前記１つ以上の処理デバイスによって実行可能であり、前記動作は、テンソル計算を実行するためのデータ値を特定する命令を前記処理ユニットが受け取ることと、前記命令を受け取ることに応答して、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される。
【０００９】
この明細書に記載される主題のさらに別の革新的な局面は、処理ユニットによって実行可能な命令を含む一時的でないコンピュータ読取可能記憶媒体において具現化され得、前記命令は、その実行の際には、前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含む動作を前記処理ユニットに実行させ、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される。
【００１０】
この局面および他の局面の他の実現例は、対応するシステム、装置、および、上記方法のアクションを実行するように構成されコンピュータストレージデバイス上でエンコードされるコンピュータプログラムを含む。１つ以上のコンピュータのシステムは、システムにインストールされ、オペレーションにおいてシステムにアクションを実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせによってそのように構成され得る。１つ以上のコンピュータプログラムは、データ処理装置によって実行されると当該装置にアクションを実行させる命令を有することによって、そのように構成され得る。
【００１１】
この明細書に記載される主題は、以下の利点のうちの１つ以上を実現するように特定の実施形態において実現され得る。処理ユニットは、１つの命令で、ディープネスト化ループを繰り返すようプログラムを開始し得る。処理ユニットは、テンソル計算を実行するためのデータ値でエンコードされる受け取られた命令を実行し得る。処理ユニットの計算バンド幅は、１つ以上の計算を実行するためにテンソルをトラバースする際に、プロセッサが実行する必要がある命令の数を低減することにより増加される。所与のニューラルネットワーク層についてのテンソル計算を実行するための命令は、エンコードされ得、例示的なハードウェアコンピューティングシステムの１つ以上のコンピューティングシステムの間で分散され得る。さまざまな計算システムへのエンコードされた命令の分散は、単一のシステム内での計算バンド幅の増加を可能にする。単一のシステムが所与のテンソルに必要とされる合計の計算のサブセットのみを担うので、計算システムにおける命令量が低減される。
【００１２】
この明細書に記載される主題の１つ以上の実現例の詳細を添付の図面および以下の説明で述べる。当該主題の他の潜在的な特徴、局面および利点は、記載、図面および添付の請求の範囲から明白になるであろう。
【図面の簡単な説明】
【００１３】
【図１】例示的な計算システムのブロック図である。
【図２】例示的なテンソルトラバーサルユニットを示す図である。
【図３】ＯＰコードと、図１の例示的な計算システムによって少なくとも部分的に実行される対応するオペレーションとを含む例示的なテーブルを示す図である。
【図４Ａ】例示的なアクティベーションテンソル、例示的な重みテンソルおよび例示的な出力テンソルを示す図である。
【図４Ｂ】図１の例示的な計算システムの処理ユニットによって実行され得る例示的なループネストを示す図である。
【図５】コンピュータによって実施される方法により、テンソル計算を実行するための処理の例を示すフロー図である。
【発明を実施するための形態】
【００１４】
さまざまな図面における同様の参照番号および指示は、同様の要素を示す。
詳細な説明
この明細書に記載される主題は、ワークロードを実行する処理ユニットが、計算を実行している間に高いパフォーマンスを達成し得るように機械学習推論ワークロードを促進する、コンピュータによって実施される処理または方法に関する。この明細書に記載される処理および方法は、タイルのセットとして構成されるハードウェアコンピューティングシステム内で実行され得る。タイルの各々は、独立（self-contained）しており、ニューラルネットワーク層によって必要とされる計算の少なくとも部分を独立して実行し得る。
【００１５】
ニューラルネットワーク内で実行される計算処理は、１つ以上のサイクルでパラメータ／重みテンソルで入力テンソルを乗算し、多くのサイクルに亘って積の累算を実行することからなり得る。入力重み乗算は、入力テンソルまたはマトリックスの行と乗算された各重みエレメントの積和として記述され得る。ディープニューラルネットワーク（ＤＮＮ）は、互いにフィードを行う複数の層を含む。所与の層のためのテンソル計算を含む推論ワークロードは、この明細書に記載される方法によって促進される。この明細書に記載される主題はさらに、開示される技術を使用する画像認識および／または分類方法／システムと、ニューラルネットワーク命令セットアーキテクチャを使用するハードウェアとに関し得る。
【００１６】
一般に、ソフトウェアアルゴリズムがＮ次元のテンソルを処理することによりテンソル計算を実行する場合、各ループがＮ次元のテンソルの各次元をトラバースすることを担うネスト化ループが使用され得る。多次元テンソルはマトリックスまたは多次元マトリックスであり得る。Ｎ次元のテンソルの各次元は、１つ以上のエレメントを含み得、各エレメントはそれぞれのデータ値を格納し得る。たとえば、テンソルはプログラムにおいて変数であり得、当該変数は３次元を有し得る。第１の次元は、３００個のエレメントの長さを有し得、第２の次元は、１０００個のエレメントの長さを有し得、第３の次元は、２０個のエレメントの長さを有し得る。
【００１７】
ネスト化ループにおいてテンソルをトラバースすることは、エレメントの対応するデータ値をロードまたは格納するよう、エレメントのメモリアドレス値の計算を必要とする。たとえば、ｆｏｒループがネスト化ループであり、３つのループインデックス変数によってトラッキングされる３つのループが３次元のテンソルを通じてトラバースするようネスト化され得る。いくつかの場合において、プロセッサは、外側ループインデックス変数に対する内側ループのループ境界をセットするといった、ループ境界条件を実行する必要があり得る。たとえば、ネスト化ループの最も内側のループから出るべきか否かを決定する際に、プログラムは、最も内側のループのループインデックス変数の現在値を、ネスト化ループの最も外側のループのループインデックス変数の現在値と比較し得る。
【００１８】
３次元のテンソルをトラバースすることに関連付けられる計算タスクは、分岐命令および整数演算命令といった有意な数の命令を必要とし得る。各ループ境界が小さくかつループの数が大きい場合、メモリアドレス計算およびテンソル次元トラバーサルのための計算は、全体的な実行時間の有意な部分を占め得、全体の性能を非常に低下させ得る。以下により詳細に記載されるように、テンソル計算を実行するためのデータ値でエンコードされた命令を受け取る処理ユニットによって実行可能な方法は、１つ以上の計算を実行するためにテンソルをトラバースする際にプロセッサが実行する必要がある命令の数を低減することによって、処理ユニットの計算バンド幅（computation bandwidth）を増加し得る。いくつかの実現例では、計算バンド幅はたとえば、テンソル上で実行され得るオペレーションの最大レート、または、テンソル上で実行され得るオペレーションの数を指す。
【００１９】
所与の層についてテンソル計算を実行するための命令は、エンコードされ、例示的なハードウェアコンピューティングシステム内において１つ以上のコンピューティングシステム（以下では計算タイルとして記載される）の間で分散され得る。さまざまな計算タイルへのエンコードされた命令の分散によって、単一のタイル内での計算バンド幅の増加が可能になる。さらに複数の計算タイルの間で計算を分散することによって、テンソルをトラバースする際に計算タイルの処理ユニットによって消費される命令の数が、（現在のシステムと比較して）低減される。そのため、命令を消費することはたとえば、計算タイルの処理ユニットによって１つ以上の命令を実行することを指す。単一のタイルは所与のテンソルに必要とされる合計の計算のサブセットのみを担うので、計算タイルにおける命令量が低減され得る。
【００２０】
ニューラルネットワーク推論ワークロードのための内積およびマトリックス乗算を含むニューラルネットワークテンソル計算を促進するためのハードウェアコンピューティングシステムに関する付加的な詳細および説明は、２０１６年１０月２７日に出願された、「ニューラルネットワーク計算タイル（Neural Network Compute Tile）」という名称を有する米国特許出願番号第１５／３３５，７６９号に記載されている。米国特許出願番号第１５／３３５，７６９号の開示は全文、明確に本願明細書において参照により援用される。
【００２１】
図１は、ニューラルネットワーク層のための計算を実行するよう１つ以上のテンソルをトラバースするための例示的なコンピューティングシステム１００のブロック図を示す。示されるように、コンピューティングシステム１００は、処理ユニット１０２と、記憶媒体１０４と、テンソルトラバーサルユニット（ＴＴＵ： tensor traversal unit）１０６と、乗累算（ＭＡＣ：multiply accumulate）オペレータ１０８と、アクティベーションユニット１１０とを含む。単一のＴＴＵが示されているが、システム１００は、所与のニューラルネットワーク層についてテンソル計算を処理するために１つ以上の計算タイルが使用される場合に、テンソルトラバーサルオペレーションと、メモリアクセスオペレーションとを処理するよう、２つ以上のＴＴＵ１０６を含み得る。同様に、単一のＭＡＣが示されているが、システム１００は複数のＭＡＣオペレータ１０８を含み得る。
【００２２】
処理ユニット１０２は、記憶媒体１０４に格納された命令またはプログラムコード、または、別のストレージデバイスに格納された他の命令／コードを含む、コンピューティングシステム１００内での実行のための命令を処理するように構成される。処理ユニット１０２は１つ以上のプロセッサを含み得る。記憶媒体１０４は、アクティベーションを格納するための第１のバンク１１２と、重みを格納するための第２のバンク１１４とを含む１つ以上のメモリバンクまたはユニットを含み得る。いくつかの実現例では、記憶媒体１０４は１つまたは複数の揮発性メモリユニットである。他のいくつかの実現例では、記憶媒体１０４は、たとえばリードオンリメモリ（ＲＯＭ： read-only memory）および／または電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ： electrically erasable programmable read-only memory）のような１つまたは複数の不揮発性メモリユニットである。記憶媒体１０４はさらに、フロッピー（登録商標）ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の同様のソリッドステートメモリデバイス、またはストレージエリアネットワークもしくは他の構成におけるデバイスを含むデバイスのアレイといった、コンピュータ読取可能媒体の別の形態にあり得る。
【００２３】
命令セット１０３は、処理ユニット１０２によって実行されると、たとえば、第１のバンク１１２のメモリアドレス位置にアクティベーションを格納することと、第２のバンク１１４のメモリアドレス位置に重みを格納することとを含む１つ以上のタスクを処理ユニット１０２に実行させる。さらに、命令１０３はさらに、第１のバンク１１２および第２のバンク１１４からの格納されたデータにアクセスすることと、当該アクセスされたデータをＭＡＣオペレータ１０８に提供することとを処理ユニット１０２に行わせ得る。以下により詳細に記載されるように、ＭＡＣオペレータ１０８は、部分和を生成するか、または、アクティベーションユニット１１０に提供される出力アクティベーションを生成するかのいずれかを行うよう、アクティベーションを重みと乗算することを含み得る乗算オペレーションを実行し得る。
【００２４】
一般に、コンピューティングシステム１００は、出力１１６を生成するために命令セット１０３内に含まれる１つ以上の命令を処理する。命令セット１０３は、テンソルオペレーション（ｔｅｎｓｏｒｏｐ）命令またはダイレクトメモリアクセスオペレーション（ＤＭＡｏｐ： direct memory access operation）命令の少なくとも１つを含み得る。コンピューティングシステム１００は、複数の線形代数計算を含むテンソル計算を実行するために、少なくとも１つのｔｅｎｓｏｒｏｐおよび少なくとも１つのＤＭＡｏｐ命令を実行するように構成され得る。
【００２５】
いくつかの実現例では、テンソル計算を実行することは、テンソルの特定の次元のエレメントに対応するメモリアドレス位置にアクセスするようＤＭＡｏｐ命令を実行することを含んでおり、少なくとも１つのメモリアドレス位置はテンソルのエレメントについてのデータ値を格納する。テンソル計算は、テンソルの特定の次元に沿ってエレメントをトラバースするようｔｅｎｓｏｒｏｐを実行することをさらに含み得る。いくつかの実現例では、テンソル計算を実行することは、ニューラルネットワーク層のための出力値を作り出すために、アクティベーションテンソルのエレメントについてのデータ値をパラメータまたは重みテンソルのエレメントについてのデータ値と乗算することに対応する。
【００２６】
示されるように、ＴＴＵ１０６は命令バッファ１２４を含み得る。単一の命令バッファ１２４が示されているが、計算システム１００は、複数の命令バッファ１２４を含んでもよい。さらに、システム１００は複数のＴＴＵ１０６を含み得、各ＴＴＵ１０６は１つ以上の命令バッファ１２４を含み得る。いくつかの実現例では、システム１００内の異なる命令バッファ１２４は、ｔｅｎｓｏｒｏｐ命令バッファおよびＤＭＡｏｐ命令バッファを含み得る。以下により詳細に記載されるように、システム１００によって受け取られるとともに処理ユニット１０２によって実行される命令は、ｔｅｎｓｏｒｏｐ命令およびＤＭＡｏｐ命令のうちの１つを含み得る。いくつかの実現例では、受け取られた命令は、処理ユニット１０２による実行に先立って命令バッファ１２４に格納される。
【００２７】
図４を参照して以下により詳細に論じられるように、アクティベーションは、入力テンソルのエレメントに対応するそれぞれのメモリアドレス位置にて、第１のバンク１１２へあらかじめロードされ得る。同様に、重みは、重みテンソルのエレメントに対応するそれぞれのメモリアドレス位置にて、第２のバンク１１４へあらかじめロードされ得る。いくつかの実現例では、命令、アクティベーションおよび重みは、ニューラルネットワークハードウェアコンピューティングシステムに関連付けられる外部またはより高いレベルの制御デバイスからシステム１００に提供される。
【００２８】
一般に、処理ユニット１０２がテンソルの特定のエレメントにアクセスするための１つ以上の命令を実行すると、テンソルトラバーサルユニット１０６は、特定のエレメントの値を表わすデータを読み出すよう処理ユニット１０２が記憶媒体１０４にアクセスし得るように、当該エレメントのメモリアドレスを決定する。たとえば、記憶媒体１０４に格納された命令は、処理ユニット１０２によって実行され得るネスト化ループプログラムのためのプログラムコードを含み得る。
【００２９】
ネスト化ループプログラムは、命令セット１０３によって提供されるデータ値に基づいて決定されるある範囲の値を有し得る複数の変数を含み得る。処理ユニット１０２は、少なくとも２つの多次元アレイのそれぞれのエレメントに対応するメモリアドレス位置へＴＴＵ１０６をアクセスさせるよう、ネスト化ループプログラムのためのプログラムコードを実行し得る。たとえば、複数の変数は、複数の内側および外側ループを含む例示的なディープループネストをインスタンス化するためのデータ値を含み得る。いくつかの実現例では、複数の変数およびデータ値によって、ＴＴＵ１０６は、図４Ｂを参照して以下に記載されるループネスト（たとえばディープループネスト４０２）のようなディープループネストをインスタンス化し得る。
【００３０】
ネスト化ループに関連付けられる現在のインデックス変数値に基づいて、ＴＴＵ１０６は、多次元アレイ変数の第１のエレメントからのオフセットを表わすオフセット値を決定し得る。次いで、処理ユニット１０２は、オフセット値を使用して記憶媒体から２次元アレイ変数の特定のエレメントにアクセスし得る。
【００３１】
テンソルトラバーサルユニット１０６は、１つ以上のテンソルに関連付けられるステータスを決定するように構成される。ステータスは、ループ境界値、現在のループインデックス変数値、メモリアドレス値を計算するための次元乗算器、および／または、分岐ループ境界を扱うためのプログラムカウンタ値を含み得る。テンソルトラバーサルユニット１０６は、テンソルステータスエレメント１２２および算術論理演算ユニットを含んでいる。テンソルステータスエレメント１２２の各々は、たとえばレジスタまたは任意の他の好適なストレージ回路といったストレージエレメントであり得る。いくつかの実現例では、テンソルステータスエレメント１２２は、物理的または論理的に、異なるグループへと配され得る。
【００３２】
いくつかの実現例では、テンソルステータスエレメント１２２のあるグループが、物理的または論理的に多次元アレイへと配され得る。たとえば、テンソルステータスエレメント１２２の各グループは、物理的にまたは論理的に２次元アレイへと配され得る。算術論理演算ユニットは、算術および論理演算を実行するように構成される１つ以上の算術論理演算ユニット（ＡＬＵ： arithmetic logic unit）を含む。たとえば、算術論理演算ユニットは、足し算、引き算、乗算、除算、論理ＡＮＤ、論理ＯＲ、または、任意の他の好適な算術および論理演算を実行するように構成されるデジタル回路を含み得る。
【００３３】
図２は、テンソルトラバーサルユニットのテンソルステータスエレメント２００の例示的なセットを示す。テンソルステータスエレメント２００は、テンソルトラバーサルユニット１０６のテンソルステータスエレメント１２２に対応し得る。テンソルトラバーサルユニット２００は、テンソルインデックスエレメント２０２のグループと、テンソル境界エレメント２０４のグループと、次元乗算器エレメント２０６のグループとを含む。テンソルインデックスエレメント２０２は、Ｍ個の行およびＮ個の列を有する２Ｄアレイとして物理的または論理的に配され得、ＭおよびＮは１以上の整数である。いくつかの実現例では、テンソルインデックスエレメント２０２の各行は、テンソルについてのテンソルインデックス情報を表わし得る。たとえば、プログラムが２つのアレイ変数Ｖ１およびＶ２を定義する場合、テンソルトラバーサルユニットは、アレイ変数Ｖ１およびＶ２についてテンソルインデックス情報をそれぞれトラッキングするよう、行２０２ａおよび２０２ｂを割り当て得る。いくつかの実現例では、テンソルインデックスエレメント２０２の各列は、テンソルに関連付けられるネスト化ループインデックス変数値についてのテンソルインデックス情報を表わし得る。たとえば、プログラムが変数Ｖ１へアクセスするための３つのループを有するネスト化ループを定義する場合であって、ネスト化ループの各ループがネスト化ループインデックス変数ｉ、ｊおよびｋによってインデキシングされる場合、テンソルトラバーサルユニットは、ネスト化ループインデックス変数ｉ、ｊおよびｋをそれぞれトラッキングするよう、テンソルインデックスエレメントＸ１，１、Ｘ１，２およびＸ１，３を割り当て得る。
【００３４】
テンソル境界エレメント２０４は、テンソルインデックスエレメント２０２と同じ次元を有する２Ｄアレイとして物理的または論理的に配され得、テンソル境界エレメント２０４の各エレメントはテンソルインデックスエレメント２０２における対応するエレメントを有する。いくつかの実現例では、テンソル境界エレメント２０４の行の各々は、テンソルについてのテンソル境界情報を表し得る。たとえば、プログラムが２つのアレイ変数Ｖ１およびＶ２を定義する場合、テンソルトラバーサルユニットは、それぞれアレイ変数Ｖ１およびＶ２についてテンソル境界情報をトラッキングするよう、行２０４ａおよび２０４ｂを割り当て得る。
【００３５】
次元乗算器エレメント２０６は、テンソルインデックスエレメント２０２と同じ次元を有する２Ｄアレイとして物理的または論理的に配され得、次元乗算器エレメント２０６の各エレメントは、テンソルインデックスエレメント２０２における対応するエレメントを有する。いくつかの実現例では、次元乗算器エレメント２０６の各行は、テンソルについての次元乗算器情報を表わし得る。たとえば、プログラムが２つのアレイ変数Ｖ１およびＶ２を定義する場合、テンソルトラバーサルユニットは、アレイ変数Ｖ１およびＶ２についての次元乗算器情報をそれぞれトラッキングするよう、行２０６ａおよび２０６ｂを割り当て得る。
【００３６】
いくつかの実現例では、次元乗算器に対してテンソルインデックス値を乗算する乗算器を使用するのではなく、代替的な実施形態は、乗算器ファンクションの代わりに加算器ファンクションを利用するＴＴＵ１０６を含み得る。これらの実施形態では、処理ユニット１０２は、（たとえば特定のループの開始値、終了値およびステップ値についての）既に乗算された数をＴＴＵ１０６に提供するようプログラムコードを実行し得る。
【００３７】
ディープニューラルネットワーク（ＤＮＮ）は、互いへフィードを行う複数の層を含む。いくつかの実現例では、例示的なニューラルネットワークは、畳み込み層（たとえばデプスワイズ(depth-wise)）、削減層（reduction layer）、全結合（ＦＣ： fully connected）層、分類器層、エレメントワイズ乗算層（element-wise multiply layer）、または、プーリング層（たとえば平均および最大）の層タイプのうちの１つ以上を含み得る。いくつかの実現例では、小さな（たとえば１または２）の入出力深さを有する計算は、全結合層または畳み込み層のような既存の層の特性であり得る浅いカーネル特性を有する層に関連付けられる。一般に、第１の層（たとえば畳み込み層）についてシステム１００内で発生するテンソル計算は、第１の層と異なる第２の層（たとえばプーリング層）についての入力アクティベーションとしてその後提供される出力アクティベーションを作り出し得る。
【００３８】
いくつかの実現例では、２以上の計算システム１００は、計算タイルのセットとして構成され得る。これらの実現例では、各計算タイルは、所与の層について推論ワークロードを処理するのに必要な計算の部分を独立して実行する。その後、これらの計算の出力は、所与の層について後続の計算を実行するために当該出力を必要とする別のタイルに移動される。さらに、ニューラルネットワーク層は、システム設計者によって望まれる態様で分割され得、各パーティションは、計算の部分が特定の層パーティションに対応するようにタイルにマッピングされ得る。
【００３９】
図１を再び参照して、いくつかの実現例では、システム１００は、システム１００によって実行される複数のオペレーションをエンコードする少なくとも１つの命令を命令１０３を介して受け取り、所与のニューラルネットワーク層について必要とされるテンソル計算の少なくとも部分を実行する。命令およびエンコードされたオペレーションは、層のタイプ、アクティベーションテンソルの構造、および重みテンソルの構造を特定し得る。さらに、エンコードされたオペレーションは、当該層タイプのニューラルネットワークによって少なくとも部分的に定義されるループネスト構造を作成するよう、処理ユニット１０２にプログラムコードを実行させ得る。エンコードされたオペレーションに関して、命令セット１０３は、テンソルオペレーション（ｔｅｎｓｏｒｏｐ）命令またはダイレクトメモリアクセスオペレーション（ＤＭＡｏｐ）命令の少なくとも１つを含み得る。命令セット１０３はさらに、同期オペレーション（syncing operations）、バリアオペレーション（barrier operations）、フェンシングオペレーション（fencing operations）（以下に記載）といったさまざまな種々のオペレーションをエンコードする１つ以上の他の命令を含み得る。
【００４０】
図３は、ＯＰコードと、システム１００によって少なくとも部分的に実行される対応するオペレーションとを含むテーブル３００を示す。テーブル３００は、オペレーション３０２、オペレーション３０４およびオペレーション３０８を含んでいる。テーブル３００に示されるように、システム１００はたとえば、命令セット１０３によって提供される単一の命令によってエンコードされる複数のオペレーションを実行し得る。一般に、命令セット１０３は、システム１００内において特定の計算シーケンスについて発生するオペレーションのタイプを定義するようＯＰコードを使用する標準化された構造を含み得る。一意のＯＰコードは、特定のオペレーションタイプに対応し得る。いくつかの実現例では、１つ以上の命令、入力アクティベーションおよび重みの形態にあるエンコードされたオペレーションが、ニューラルネットワークハードウェアコンピューティングシステムに関連付けられる外部入出力（Ｉ／Ｏ）デバイスまたはよりハイレベルなコントローラデバイスからシステム１００に提供される。１つ以上のデータバスは、例示的なＩ／Ｏデバイスからのまたはハードウェアコンピューティングシステムの複数の計算タイル（たとえば複数のシステム１００）の間の命令、アクティベーションおよび重みを通過させるように使用され得る。
【００４１】
テーブル３００に示されるように、オペレーション３０２は、対応するＯＰコードを有する１つ以上のｔｅｎｓｏｒｏｐを含み得るエンコードされたテンソルオペレーションである。いくつかの実現例では、単一の命令または命令セットは、特定のｔｅｎｓｏｒｏｐを示すＯＰコードの形態のエンコーディングを定義する複数のサブ命令を含み得る。たとえば、サブ命令は、特定のニューラルネットワーク層に対応する計算についてのｔｅｎｓｏｒｏｐをタイルに実行させるよう、１つ以上の計算タイルに分散され得る。たとえば、ｔｅｎｓｏｒｏｐサブ命令は、畳み込み層、ＦＣ層、プーリング層、削減層、またはエレメントワイズ乗算層といった上述した層のうちの少なくとも１つについてのＯＰコードを含み得る。ｔｅｎｓｏｒｏｐサブ命令は、計算タイル／システム１００内に発生するすべてのテンソル計算がｔｅｎｓｏｒｏｐサブ命令からの必要とされるエンコーディングを有するように構成され得る。
【００４２】
一般に、システム１００内で発生するテンソル計算は、命令セット１０３から受け取られる命令によって特定される必要とされるエンコーディングを有することになる。複数のシステム１００が計算タイルのセットとして配される場合、ｔｅｎｓｏｒｏｐサブ命令およびエンコーディングは、異なる計算タイルが異なる命令を実行することを可能にし得る。いくつかの実現例では、異なるサブ命令は、ニューラルネットワーク層のあるパーティションについてのテンソル計算に対応し得る。ｔｅｎｓｏｒｏｐエンコーディングはさらに、ＴＴＵ１０６が、所望のＴＴＵテンソルオペレーションを示すメインＴＴＵループネストフィールドを介して処理ユニット１０２にループインデックスを発行することを可能にする。ｔｅｎｓｏｒｏｐエンコーディングはさらに、アドレスを計算するためにどのカウンタがともに加算されるかを示すＴＴＵループマスクに基づいて、ＴＴＵ１０６が特定のアレイ／テンソルエレメントについてメモリアドレスを生成することを可能にする。ｔｅｎｓｏｒｏｐエンコーディングはさらに、入力アクティベーションテンソル、重みテンソルおよび出力アクティベーションテンソルをトラバースするために、処理ユニット１０２によって実行可能な複数のＴＴＵループネスト命令を提供し得る。
【００４３】
いくつかの実現例では、２以上の計算システム１００が計算タイルのセットとして構成される場合、各計算タイルは命令を独立して実行する独立した（self-contained）ユニットであり得る。一般に、計算タイルは、ｔｅｎｓｏｒｏｐおよびＤＭＡｏｐという２つのタイプのオペレーションを定義する命令を実行する。いくつかの実現例では、異なるオペレーションは、同期フラグを通じてデータ上で同期する、計算システム１００内の独立制御ユニットによって実行され得る。しかしながら、制御ユニットは独立しているが、維持される必要のある依存関係が存在し得る。たとえば、ｔｅｎｓｏｒｏｐは、たとえば記憶媒体１０４のメモリ位置においてループネストによって必要とされるデータを有さなければ、ループネストにおけるループを実行してはならない。必要とされるデータは、ＤＭＡｏｐまたは別のオペレーションによって記憶媒体１０４に配置され得る。
【００４４】
一般に、システム１００内のデータ同期は、同期フラグオペレーションを通じて発生する。いくつかの実現例では、システム１００は、バーチャル書き込みポートごとに同期フラグエントリを含むレジスタファイルを有する。たとえば、ｔｅｎｓｏｒｏｐは、部分和であり得る２つ以上のテンソルレファレンス（第２のバンク１１４に書き込まれる）と、アクティベーション（第１のバンク１１２に書き込まれる）とを有し得る。この実現例では、各部分和およびアクティベーションについての同期フラグレジスタが存在し得る。さらに所与の命令セットの実行中に、処理ユニット１０２は、特定の同期フラグレジスタについてインクリメントをトリガするテンソルレファレンスの次元を選択し得る。さらに、処理ユニット１０２は、選択同期フラグレジスタに対する必要なカウントについて待機するループネストの深さを選択し得る。これは、データの依存関係が侵されないことを保証する。さらに、選択された同期フラグレジスタに対する必要な同期フラグカウントがまだ到達されていなければ、１つ以上のスレッドがストールすることになる。
【００４５】
たとえば、ｔｅｎｓｏｒｏｐエンコーディングは、１つ以上の同期フラグ条件に基づいてループネストのストールを可能にし得る。いくつかの実現例では、ＴＴＵ１０６は、１）所定の同期フラグ条件が満たされていない（たとえば同期フラグカウントがしきい値カウント以下である）という条件、または、２）命令パイプラインの特定のステージに検出されたハザードが存在するという条件によってストールされ得る。さらに、ｔｅｎｓｏｒｏｐエンコーディングは、所望のビット幅の特定のデータ値（たとえばアクティベーションまたは重み）を受け取るようにＭＡＣオペレータ１０８を構成することを可能にし、かつ、アクティベーションユニット１１０によって実行される所望のファンクションの選択を可能にする。
【００４６】
ｔｅｎｓｏｒｏｐエンコーディングによって定義される同期フラグ条件は、同期ウォッチャオペレーション（sync watcher operation）および同期プロデューサオペレーション（sync producer operation）のうちの少なくとも１つをシステム１００の処理ユニット１０２に実行させ得る。処理ユニット１０２によるｔｅｎｓｏｒｏｐの実行中において、同期ウォッチャオペレーションは、どのループ反復を同期すべきかと、ループが反復することを許可される前に必要とされる同期フラグカウントと、次の反復のために予期される同期フラグカウントをどれぐらいインクリメントするべきかとを処理ユニット１０２に示すように使用され得る。
【００４７】
テーブル３００に示されるように、エンコードされたダイレクトメモリアクセスオペレーション命令は１つ以上のＤＭＡｏｐを含み得る。命令セット１０３によって特定されるＤＭＡオペレーションによって、システム１００による特定のｔｅｎｓｏｒｏｐの実行を達成するために、必要に応じて処理ユニット１０２がデータを移動する。いくつかの実現例では、等しくない幅の２つのメモリリソース（たとえばワイドメモリユニットおよびナローメモリユニット）間でデータが移動される場合、データの転送サイズは、よりワイドなリソースの倍数でなければならない。たとえば、ワイドメモリ（Ｗ−ｍｅｍ）にデータを移動させる／ワイドメモリ（Ｗ−ｍｅｍ）からデータを移動させるＤＭＡｏｐが与えられた場合、転送のサイズはワイドメモリ幅の倍数でなければならない。同様に、ナローメモリ（Ｎ−ｍｅｍ）にデータを移動させる／ナローメモリ（Ｎ−ｍｅｍ）からデータを移動させるＤＭＡｏｐの場合、データの転送のサイズはナローメモリ幅の倍数でなければならない。
【００４８】
メモリユニットの属性を説明するために明細書の全体にわたって使用されるワイドおよびナローの指定は、一般に１つ以上のメモリユニットの幅（ビット／バイト）のおよそのサイズを指す。いくつかの実現例では、第１のバンク１１２のメモリ幅および第２のバンク１１４のメモリ幅は、たとえば１６ビットといった特定数のビットによって定義されない。一般に、システム１００の各インスタンス化においては２つの異なるタイプのメモリが存在し、ナロー／ワイドは、メモリの特徴を示すように用いられる、絶対的ではない相対的な用語である。いくつかの例示的な実現例では、第１のバンク１１２は１つ以上のナローメモリユニットを含み、第２のバンク１１４は１つ以上のワイドメモリユニットを含む。
【００４９】
上述したように、システム１００によって受け取られ処理ユニット１０２によって実行される命令は、ｔｅｎｓｏｒｏｐ命令およびＤＭＡｏｐ命令を含み得る。受け取られた命令は、処理ユニット１０２による実行に先立って命令バッファ１２４に格納され得る。テーブル３００に示されるように、オペレーション３０４は、１）インバウンド命令バッファと、２）アウトバウンド命令バッファと、３）ナローワイドＤＭＡ命令バッファと、４）ワイドナローＤＭＡ命令バッファと、５）リングバスＤＭＡ命令バッファとを含む（たとえば「書き込み」バッファ位置を示す）命令サブタイプを含み得るＤＭＡオペレーションである。
【００５０】
ここでテーブル３００を参照して、処理ユニット１０２によるオペレーションにおけるＤＭＡｏｐの実行によって、システム１００は、命令セット１０３から（例示的なデータバスを介して）入力アクティベーションおよび他のデータを受け取り、第１のバンク１１２にアクティベーションを格納する。以下により詳細に記載されるように、入力アクティベーションは、第１のバンク１１２において、アクティベーションテンソルのそれぞれのエレメントに対応するメモリアドレス位置に格納される。処理ユニット１０２によるＤＭＡｏｐ．ｏｕｔオペレーションの実行により、システム１００は、第１のバンク１１２からデータ（たとえば出力アクティベーション）を読み出し、例示的なデータバスにデータを書き込み、システム１００からデータを出力する。処理ユニット１０２は、第１のバンク１１２（ナローメモリ）から第２のバンク１１４（ワイドメモリ）にデータを移動させるためにＤＭＡｏｐ．Ｎ−Ｗオペレーションを実行し得る。同様に、処理ユニット１０２は、第２のバンク１１４（ワイドメモリ）から第１のバンク１１２（ナローメモリ）にデータを移動させるためにＤＭＡｏｐ．ＷＮオペレーションを実行し得る。
【００５１】
処理ユニット１０２は、命令セット１０３から（例示的なデータバスを介して）データを抽出した後、第２のバンク１１４へデータ（たとえば重み／パラメータ）を書き込むようＤＭＡｏｐ．Ｒバスオペレーションを実行し得る。ＤＭＡｏｐ．Ｒバスオペレーションの実行によって、処理ユニット１０２はさらに、第２のバンク１１４のメモリアドレス位置に格納されたデータ（たとえば重み）を読み出し／当該データにアクセスし、当該データがシステム１００から出力され得るように例示的なデータバスにデータを書き込み得る。いくつかの実現例では、例示的なデータバスは、リング構造において複数の計算システム１００を接続するリングバスである。リングにおいて複数のシステム１００を接続することに加えて、リングバスはさらに、複数のシステム１００を外部のＩ／Ｏデバイスまたはよりハイレベルの制御デバイスに接続し得る。計算タイルを接続するためのデータバスオプションを含む、ニューラルネットワークテンソル計算を促進するためのハードウェアコンピューティングシステムに関する付加的な詳細および記載がさらに、２０１６年１０月２７日に出願された「ニューラルネットワーク計算タイル（Neural Network Compute Tile）」という名称を有する米国特許出願番号第１５／３３５，７６９号に記載されている。
【００５２】
いくつかの実現例では、計算タイルの所与のセットについては、計算タイルのセットのうちの少なくとも１つの計算タイルが分類器タイルであり得る。分類器タイルは、ニューラルネットワークの特定の層について発生したテンソル計算に関連付けられるデータ値にファンクションを適用するように構成され得る。たとえば、ＦＣ層はタイルに亘って分割され得るので、各タイルは、出力のサブセットを作り出し、第２のバンク１１４に出力を格納する。一般に、ＤＭＡｏｐは、第２のメモリ１１４のメモリアドレス位置からのリニア出力を、第１の計算タイルからデータリングバスを通じて第２のタイル（たとえば分類器タイル）に移動するよう使用され得る。その後、分類器タイルは、各リニア出力に少なくとも１つのファンクション（たとえばｓｏｆｔｍａｘファンクション）を適用し、より高いレベル制御デバイスまたは外部Ｉ／Ｏデバイスにポストファンクション結果を提供する。
【００５３】
テーブル３００を再び参照して、いくつかの実現例では、ＤＭＡｏｐ．ｉｎｆｅｅｄおよびＤＭＡｏｐ．ｏｕｔｆｅｅｄが、外部コントローラデバイスおよびシステム１００の両方に関連付けられるオペレーションに対応する。一般に、ＤＭＡｏｐ．ｉｎｆｅｅｄオペレーションは、外部コントローラにおいて開始し、ＤＭＡｏｐ．ｉｎｆｅｅｄオペレーションによって、コントローラが例示的なデータバス（たとえばリングバス）に入力アクティベーションおよび重みの両方を提供する。データバスは、マルチタイル配置におけるどの計算タイルがアクティベーションおよび重みを消費するべきであるか示すデータストリーム（たとえばビットマップ）をマルチキャストするように構成され得る。したがって、特定の受取タイルの処理ユニット１０２は、外部コントローラから計算タイル（システム１００）のメモリバンクにアクティベーションおよび重み／パラメータを移動するよう、ＤＭＡｏｐ．ｉｎｆｅｅｄオペレーションの部分を実行し得る。同様に、いくつかの実現例では、処理ユニット１０２は、計算タイルにおけるメモリバンク１１２および１１４から分類器タイルに、ならびに、分類器タイルから外部コントローラに、例示的な推論ワークロードの結果（出力）を移動させるようＤＭＡｏｐ．ｏｕｔｆｅｅｄオペレーションの部分を実行し得る。さらに、外部コントローラは、例示的な外部Ｉ／Ｏデバイスに推論ワークロード結果を移動させるようＤＭＡｏｐ．ｏｕｔｆｅｅｄオペレーションの部分を実行し得る。
【００５４】
オペレーション３０６は、他のオペレーションがシステム１００によって実行されている間、新しい命令の発行を管理するよう処理ユニット１０２によって実行され得るｔｉｌｅｆｅｎｃｅｏｐおよびｓｃａｌａｒｆｅｎｃｅｏｐオペレーションである。処理ユニット１０２によるｔｉｌｅｆｅｎｃｅｏｐ命令の実行によって、システム１００は、システム１００のそれぞれの命令バッファにおける全てのペンディング命令がリタイアされるまで、任意の新しい命令がシステム１００に発行されることをブロックまたは防止する。さらに、ｓｃａｌａｒｆｅｎｃｅｏｐ命令は、ペンディング命令が処理ユニット１０２によって実行されている間に新しい命令の発行を排除するようｔｉｌｅｆｅｎｃｅｏｐ命令と共働する。たとえばｔｉｌｅｆｅｎｃｅｏｐ命令によって、処理ユニット１０２は、ｔｉｌｅｆｅｎｃｅｏｐに関連付けられる同期フラグカウントメトリックを監視し得る。処理ユニット１０２は、しきい値ｔｉｌｅｆｅｎｃｅｏｐカウントメトリックが到達されるまで、新しい命令の発行を防止するようｓｃａｌａｒｆｅｎｃｅｏｐ命令を実行し得る。
【００５５】
図４Ａは、例示的な入力アクティベーションテンソル４０４、例示的な重みテンソル４０６および例示的な出力テンソル４０８を示す。図４Ｂは、内積計算またはマトリックス乗算に関係のあるテンソル計算を実行するよう、処理ユニット１０２によって実行され得る例示的なディープループネスト４０２を示す。図４Ａでは、計算は、出力テンソル４０８の形態で出力／結果を生成するよう、１つ以上の計算サイクルでのアクティベーションテンソル４０４とパラメータ／重みテンソル４０６との乗算を含み得る。
【００５６】
各テンソル４０４，４０６，４０８は、ｘ、ｙおよびｚ次元平面に亘って行列フォーマットで配される複数のデータエレメントを含み得る。アクティベーションは、アクティベーションテンソル４０４のエレメントに対応する第１のバンク１１２のそれぞれのメモリアドレス位置から読み出され得る。同様に、重みは、重みテンソルのエレメントに対応するそれぞれのメモリアドレス位置において第２のバンク１１４から読み出され得る。いくつかの実現例では、処理ユニット１０２は、ネスト化ループプログラムについて記憶媒体１０４のあるメモリユニット（たとえばＲＯＭ／ＥＥＰＲＯＭメモリユニット）に格納されたプログラムコードを実行し得、これにより、ＴＴＵ１０６が、アクティベーションテンソル４０４および重みテンソル４０６のそれぞれのエレメントに対応するメモリアドレス位置へアクセスする。処理ユニット１０２は、部分的にループネストプログラムを実行することにより、１つ以上のテンソル計算を実行し得、これにより所与の次元についてテンソルエレメントをトラバースする複数のループをインスタンス化する。
【００５７】
ＴＴＵ１０６がアクティベーションテンソル４０４および重みテンソル４０６をトラバースすると、テンソル４０４におけるｘ次元データエレメントからの単一のアクティベーションを含む乗算オペレーションが個々に、たとえば特定の重みテンソル４０６のｋｘ次元における重みの行（複数のデータエレメント）と乗算される。これらの乗算オペレーションは、出力テンソル４０８のｚｏ次元における第１のｘ行に対応する出力の行を作り出し得る。一般に、ＭＡＣオペレータ１０８は、内積計算に関係のある算術オペレーションを含むテンソル計算を実行し得る。入力アクティベーションは、単一のＭＡＣオペレータ１０８によるそれぞれのアクセスについて第１のバンク１１２から一つずつ提供される。ＭＡＣオペレータ１０８は、出力テンソル４０８のそれぞれのデータエレメントに対応する単一の出力アクティベーション値を作り出すよう、入力アクティベーションを第２のバンク１１４からアクセスされる重みと乗算する。
【００５８】
図４Ｂでは、例示的なディープループネスト４０２が示されており、最も内側のループ（ｚｏ）におけるＭＡＣオペレーションを含んでいる。アクティベーションテンソル４０４に対応する入力次元は［ｘ，ｙ，ｚｉ］として示され、重みテンソル４０６に対応するフィルタ次元は［ｘ，ｙ，ｚｉ，ｚｏ］として示され、出力テンソル４０８に対応する出力次元は［ｘ，ｙ，ｚｏ］として示される。したがって、ディープループネスト４０２は、テンソル４０４，４０６のさまざまな次元に亘る計算に基づいて出力［ｘ］［ｙ］［ｚｏ］によって示される出力テンソル４０８を特定する。一般に、ディープループネスト４０２は、Ｎ次元のテンソルをトラバースするためにネスト化ループを処理することによりテンソル計算を実行するよう、システム１００によって実行され得るソフトウェアアルゴリズムを提供する。１つの例示的な計算処理において、各ループは、対応するＮ次元のテンソルの特定の次元をトラバースすることを担い得る。したがって、ディープループネスト４０２は、複数の計算タイル内で同時に実行され得る１つ以上のテンソル計算の表現を提供する。
【００５９】
代替的な実現例では、出力テンソル４０８の変動を作り出すディープループネスト４０２の他の順序が存在する場合がある。システム１００は、任意の順序でアクティベーションテンソル４０４および重みテンソル４０６をトラバースすることを可能にするデータ値の範囲を含むディープループネスト４０２をインスタンス化するための命令を受け取り得る。１つ以上のループが、システム１００において、空間的に展開され得る。いくつかの実現例では、ｘｘおよびｙｙループネストは１つ以上の計算タイルに亘って展開され得、これにより、異なる計算タイルが、異なる層パーティションに関連付けられる推論ワークロードを処理することを可能にする。例示的なディープループネスト４０２において、サイクルごとに読み出されるアクティベーションと、ｚｉ＊ｋｘ＊ｋｙサイクルごとに読み出される部分和とが存在し得る。
【００６０】
ループネストの構造（たとえば内側および外側ループの＃）は、命令セット１０３を介してシステム１００に提供される命令のデータ値の１つ以上に基づいて定義され得る。畳み込み層内で発生する例示的な計算は、所与の層について推論ワークロードを計算するためにオペレーションをエンコードする命令の実行を記述する基礎として使用され得る。畳み込み層計算は、三次元（３Ｄ）テンソルの二次元（２Ｄ）空間畳み込みを含み得る。畳み込み層のための計算は、３Ｄアクティベーションテンソル４０４と少なくとも１つの３Ｄフィルタ（重みテンソル４０６）との間で２Ｄ空間畳み込みを実行することを含み得る。
【００６１】
この計算については、深さ次元に沿った内積の和が存在する。３Ｄ入力に対して１つの３Ｄフィルタ４０６を畳み込むことによって、２Ｄ空間面が生成される。示されるように、３Ｄ入力テンソル４０４が畳み込まれる必要のある複数の３Ｄフィルタが存在し得る。計算の結果、３Ｄテンソル出力４０８が得られる。畳み込み層についての計算が記載されるが、他のニューラルネットワーク層についての計算オペレーションをエンコードする１つ以上の命令が、さらにこの明細書に記載される教示に基づいて生成され得る。
【００６２】
一般に、単一の計算タイルが複数のＭＡＣオペレータ１０８を含む場合、オペレータは、各々が単一のアクティベーション入力を共有してそれぞれの計算を実行することにより、集合的にシングルインストラクションマルチプルデータ（ＳＩＭＤ： single instruction multiple data）機能を提供する。ＳＩＭＤは一般に、（ディープループネストに基づいて）すべてのパラレルユニット（単一のシステム１００における複数のＭＡＣオペレータ１０８）が同じ命令を共有することを意味するが、各ＭＡＣオペレータ１０８は、テンソル４０４および４０６の異なるデータエレメントに対して命令を実行する。１つの基本的な例において、１サイクルにおいてアレイ［６，８，１０，１２］を得るためにエレメントワイズにアレイ［１，２，３，４］および［５，６，７，８］を加算することは典型的に、４つの算術ユニットが各エレメントに対してオペレーションを実行することを必要とする。ＳＩＭＤを使用することによって、上記４つのユニットは、同じ命令（たとえば、「加算（add）」）を共有し、パラレルで計算を実行し得る。ｔｅｎｓｏｒｏｐをループネストの形態でエンコードする単一の命令は、多次元テンソルのあるデータエレメントに関連付けられる推論ワークロードを計算するよう、１つ以上のシステム１００に提供され得る。したがって、システム１００は、先行する方法に対して、テンソル計算におけるアクセラレーションおよびパラレル性の向上を提供する。
【００６３】
システム１００のアクセラレ−タファンクションは少なくとも２つのタイプのパラレル性に対応する。第１のタイプのパラレル性は、ディープネストループ４０２の最も内側ループの空間的展開を通じて公開（expose）される。システム１００はＳＩＭＤ機能を含んでいるので、ディープループネスト４０２の最も内側のループ境界は、リニアユニット（たとえば複数のＭＡＣのセル）におけるＭＡＣオペレータ１０８の数に固定され得る。パラレル性の第２の局面は、各々がディープループネスト４０２を実行するが異なる部分上に存在する複数の計算タイルが、特定のニューラルネットワーク層についてテンソル計算を行う構成を有することにより、公開される。アクセラレ−タデバイスにおける構成可能な数のタイルと、各タイル内における構成可能な数のＭＡＣオペレータとが存在し得る。
【００６４】
いくつかの実現例では、プログラマまたはデベロッパは、たとえばアクティベーション入力バンド幅を低減し、かつ、部分和読出バンド幅を増加するために、特定のループネストを詳述または構築することを選択し得る。これは、代替的な態様でディープループネスト４０２を記述または構築することによりなされ得る。テンソル計算を促進するためのこの明細書に記載されるディープループネストは、非常にフレキシブルであり、特定の問題セットを適合するように所望のように構成され得る。この明細書に記載されるニューラルネットワークおよび計算タイル（システム１００）は、８つのディープループネスト計算構造までをサポートし得るので、最も良好に局所性（locality）を活用し、かつ、全体的なバンド幅要件を低減するよう、デベロッパが望むように入力および出力はタイル化され得る。
【００６５】
図５は、命令によってエンコードされた１つ以上のオペレーションを実行するためにコンピューティングシステム１００を使用することによりテンソル計算を実行する例示的な処理５００を示すフロー図である。ブロック５０２において、処理ユニット１０２は、システム１００においてテンソル計算を実行するためのデータ値を特定する命令を受け取る。ブロック５０４において、当該命令を受け取ることに応答して、処理ユニット１０２は、複数のループを含むループネストを実行することによりテンソル計算を実行する。上で論じたように、処理ユニット１０２は、ネスト化ループプログラムについてのプログラムコードを実行するよう、（命令セット１０３に関連付けられる命令とは異なる）命令にアクセスし得る。その後、処理ユニット１０２は、ＴＴＵ１０６が、アクティベーションテンソル４０４および重みテンソル４０６のそれぞれのエレメントに対応するメモリアドレス位置にアクセスするようプログラムコードを実行し得る。
【００６６】
ブロック５０６において、ループネストが層タイプに基づく定義された構造を有する実現例の場合、命令セット１０３は、当該層のための層タイプおよびループネスト構造を示す特定のデータ値（たとえば１つ以上のＯＰコード）を含み得る。たとえば、図３のオペレーション３０２によって示されるように、命令セット１０３は、畳み込み層およびＦＣ層についてのテンソル計算のためのｔｅｎｓｏｒｏｐに対応する１つ以上のＯＰコード（たとえばＯＰコード０）を含み得る。したがって、命令セット１０３によって提供されるｔｅｎｓｏｒｏｐ命令に関連付けられるデータ値を使用して、処理ユニット１０２は、命令のデータ値に基づいてループネスト構造を定義し得る。ループネスト構造がひとたび定義されると、処理ユニット１０２は、部分的にループネストプログラムを実行することにより、１つ以上のテンソル計算を実行し、これによりアクティベーションテンソル４０４および重みテンソル４０６の所与の次元についてテンソルエレメントをトラバースするループをインスタンス化する。
【００６７】
ブロック５０８において、処理ユニット１０２によって、個々の出力アクティベーション１１６が出力テンソル４０８のそれぞれのデータエレメントに書き込まれる。さらに、ブロック５０８において、処理ユニット１０２は、その後のテンソル計算のために１つ以上の他の計算タイルにテンソル計算の結果が書き込まれるよう、ＤＭＡｏｐ．ｏｕｔｆｅｅｄオペレーションを実行し得る。代替的には、ＤＭＡｏｐ．ｏｕｔｆｅｅｄオペレーションは、第１の計算タイルにおけるメモリバンク１１２，１１４から分類器タイル（たとえば第２の計算タイル）に、ならびに、分類器タイルから外部コントローラおよび外部Ｉ／Ｏデバイスに、推論ワークロードの結果（出力）を移動し得る。
【００６８】
この明細書に記載される主題の実施形態および機能的なオペレーションは、デジタル電子回路、有形的に具現化されたコンピュータソフトウェアもしくはファームウェア、この明細書において開示される構造およびそれらの構造的等価物を含むコンピュータハードウェア、または、それらの１つ以上の組み合わせにおいて実現され得る。この明細書に記載される主題の実施形態は、１つ以上のコンピュータプログラムとして実現され得る。すなわち、データ処理装置による実行またはデータ処理装置のオペレーションを制御するための実行のために有形的で一時的でないプログラムキャリア上でエンコードされるコンピュータプログラム命令の１つ以上のモジュールとして実現され得る。代替的または付加的には、プログラム命令は、たとえば、マシンにより生成された電気信号、光学信号または電磁信号といった人為的に生成された伝播信号上でエンコードされ得る。当該人為的に生成された伝播信号は、データ処理装置による実行のために好適なレシーバ装置への送信のために情報をエンコードするように生成される。コンピュータ記憶媒体は、マシン読取可能なストレージデバイス、マシン読取可能なストレージ基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの１つ以上の組み合わせであり得る。
【００６９】
コンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプトまたはコードと称され得るかまたは記載され得る）は、コンパイルもしくは解釈された言語または宣言言語もしくは手続言語を含む任意の形態のプログラミング言語で記述され得、スタンドアロンプログラム、または、モジュール、コンポーネント、サブルーチン、もしくは、コンピューティング環境での使用に好適な他のユニットを含む任意の形態でデプロイされ得る。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、対応する必要はない。プログラムは、たとえば、マークアップ言語文書に格納される１つ以上のスクリプト、当該プログラムに専用の単一のファイルに格納される１つ以上のスクリプト、または、たとえばコードの１つ以上のモジュール、サブプログラムもしくは部分を格納するファイルのような複数の協調されたファイルに格納される１つ以上のスクリプトといった、他のプログラムまたはデータを保持するファイルの部分に格納され得る。コンピュータプログラムは、１つのコンピュータ上で実行されるようデプロイされ得るか、または、１つの場所に位置するか、もしくは、複数の場所に亘って分散されて通信ネットワークによって相互接続される複数のコンピュータ上で実行されるようデプロイされ得る。
【００７０】
この明細書に記載される処理および論理フローは、１つ以上のプログラム可能なコンピュータが、入力データに対して動作し出力を生成することによってファンクションを実行するように１つ以上のコンピュータプログラムを実行することによって実行され得る。処理および論理のフローは、たとえばＦＰＧＡ（フィールドプログラマブルゲートアレイ）、ＡＳＩＣ（特定用途向け集積回路）、ＧＰＧＰＵ（汎用グラフィックスプロセッシングユニット）または、他のいくつかのタイプのプロセッサといった専用論理回路によって実行され得、また、装置も、当該専用論理回路として実現され得る。
【００７１】
コンピュータプログラムの実行に好適なコンピュータは、例として、汎用もしくは専用マイクロプロセッサ、その両方、または、任意の他の種類の中央演算処理装置に基づき得る。一般に、中央演算処理装置は、リードオンリメモリ、ランダムアクセスメモリ、またはその両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実施または実行するための中央演算処理装置と、命令およびデータを格納するための１つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといったデータを格納するための１つ以上のマスストレージデバイスを含むか、または、当該１つ以上のマスストレージデバイスからデータを受け取るか、１つ以上のマスストレージデバイスへデータを転送するか、もしくは、その両方を行うために動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要はない。さらに、コンピュータは、たとえば、携帯電話、携帯情報端末（ＰＤＡ）、モバイルオーディオもしくはビデオプレーヤー、ゲーム機、全地球測位システム（ＧＰＳ）レシーバ、または、たとえばユニバーサルシリアルバス（ＵＳＢ）フラッシュドライブのようなポータブルストレージデバイスといった別のデバイスに埋め込まれ得る。
【００７２】
コンピュータプログラム命令およびデータを格納するために好適なコンピュータ読取可能媒体は、例として、たとえばＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリデバイスといった半導体メモリデバイスと、たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスクと、光磁気ディスクと、ＣＤＲＯＭおよびＤＶＤ−ＲＯＭディスクとを含む不揮発性メモリ、媒体およびメモリデバイスのすべての形態を含む。プロセッサおよびメモリは、専用論理回路によって補助され得るか、または、専用論理回路に統合され得る。
【００７３】
本明細書に記載の主題の実施形態は、バックエンドコンポーネントをたとえばデータサーバとして含むコンピューティングシステムにおいて実現され得るか、または、ミドルウェアコンポーネントをたとえばアプリケーションサーバとして含むコンピューティングシステムにおいて実現され得るか、または、たとえば、ユーザが本明細書に記載の主題の実現例とインタラクションする際に使用可能なグラフィックユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータといったフロントエンドコンポーネントを含むコンピューティングシステムにおいて実現され得るか、または、そのような１つ以上のバックエンド、ミドルウェア、もしくはフロントエンドコンポーネントの任意の組合せを含むコンピューティングシステムにおいて実現され得る。システムのコンポーネントは、たとえば通信ネットワークといった任意の形態または媒体のデジタルデータ通信によって相互に接続され得る。通信ネットワークの例として、ローカルエリアネットワーク（「ＬＡＮ」）と、たとえばインターネットのようなワイドエリアネットワーク（「ＷＡＮ」）とが挙げられる。
【００７４】
コンピューティングシステムはクライアントおよびサーバを含み得る。クライアントおよびサーバは一般に互いにリモートであり、典型的に通信ネットワークを介してインタラクションする。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されて互いにクライアント−サーバ関係を有するコンピュータプログラムによって生じる。
【００７５】
さらに別の実現例が以下の例において要約される。
例１：コンピュータによって実施される方法であって、処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、コンピュータによって実施される方法。
【００７６】
例２：前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、例１に記載の方法。
【００７７】
例３：前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、例２に記載の方法。
【００７８】
例４：前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、例２または３に記載の方法。
【００７９】
例５：前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも１つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、例２または３に記載の方法。
【００８０】
例６：前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット（ＴＴＵ）に少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記ＴＴＵに発行させることを含む、例５に記載の方法。
【００８１】
例７：前記処理ユニットが前記ＴＴＵに少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用される参照されたアレイエレメントのためのアドレスを前記ＴＴＵのアレイレファレンスに生成させることをさらに含む、例５に記載の方法。
【００８２】
例８：前記命令は、前記ＴＴＵに関連付けられるアレイレファレンスのためのアドレスを生成するよう、第２のＴＴＵカウンタと合計される第１のＴＴＵカウンタを示す、例７に記載の方法。
【００８３】
例９：前記テンソル計算を実行することは、前記処理ユニットが、前記テンソル計算の実行に関連付けられる１つ以上のオペランドを管理する第１の同期プロシージャを実行することを含み、オペランドを管理することは、同期フラグ条件に基づいて１つ以上のループネストをストールすることを含む、例１〜８のいずれか１項に記載の方法。
【００８４】
例１０：前記テンソル計算を実行することは、前記処理ユニットが、前記ループネストの特徴に関連付けられるカウンタをインクリメントすることを管理する第２の同期プロシージャを実行することを含む、例９に記載の方法。
【００８５】
例１１：電子システムであって、前記電子システムに配置され１つ以上の処理デバイスを含む処理ユニットと、命令を格納するための１つ以上のマシン読取可能なストレージデバイスとを含み、前記命令は、動作を実行するように前記１つ以上の処理デバイスによって実行可能であり、前記動作は、テンソル計算を実行するためのデータ値を特定する命令を前記処理ユニットが受け取ることと、前記命令を受け取ることに応答して、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、電子システム。
【００８６】
例１２：前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、例１１に記載の電子システム。
【００８７】
例１３：前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、例１２に記載の電子システム。
【００８８】
例１４：前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、例１２または１３に記載の電子システム。
【００８９】
例１５：前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも１つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、例１２または１３に記載の電子システム。
【００９０】
例１６：前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット（ＴＴＵ）に少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記ＴＴＵに発行させることを含む、例１５に記載の電子システム。
【００９１】
例１７：処理ユニットによって実行可能な命令を含む一時的でないコンピュータ読取可能記憶媒体であって、前記命令は、その実行の際には、前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、前記命令を受け取ることに応答して、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含む動作を前記処理ユニットに実行させ、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、一時的でないコンピュータ読取可能記憶媒体。
【００９２】
例１８．前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、例１７に記載の一時的でないコンピュータ読取可能記憶媒体。
【００９３】
例１９：前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、例１８に記載の一時的でないコンピュータ読取可能記憶媒体。
【００９４】
例２０：前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、例１８に記載の一時的でないコンピュータ読取可能記憶媒体。
【００９５】
この明細書は、多くの特定の実現例の詳細を含んでいるが、これらは、如何なる発明の範囲に対する限定として解釈されるべきでなく、または、特許請求され得るものの限定として解釈されるべきでなく、むしろ特定の発明の特定の実施形態に特有であり得る特徴の記載として解釈されるべきである。また、別個の実施形態のコンテキストでこの明細書に記載されるある特徴は、単一の実施形態における組み合わせで実現され得る。反対に、単一の実施形態のコンテキストで記載されるさまざまな特徴も、別々にまたは任意の好適なサブコンビネーションで、複数の実施形態において実現され得る。さらに、特徴はある組み合わせで作用するように上で記載され得、また最初はそのように特許請求され得るが、ある特許請求された組み合わせからの１つ以上の特徴が、ある場合において当該組み合わせから削除され得、当該特許請求された組み合わせは、サブコンビネーションまたはサブコンビネーションの変形例に向けられ得る。
【００９６】
同様に、オペレーションは特定の順序で図面において示されているが、これは、望ましい結果を達成するために、そのようなオペレーションが、示された特定の順序もしくはシーケンシャルな順序で実行されること、または、すべての示されたオペレーションが実行されることを必要とすると理解されるべきでない。ある状況では、マルチタスクおよびパラレルプロセッシングが有利であり得る。さらに、上で記載された実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきでなく、記載されたプログラムコンポーネントおよびシステムが、一般に単一のソフトウェアプロダクトにおいてともに統合され得るか、または、複数のソフトウェアプロダクトへパッケージ化され得ると理解されるべきである。
【００９７】
主題の特定の実施形態が記載された。他の実施形態は添付の請求の範囲内である。たとえば、請求項において記載されるアクションは、異なる順序で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図面に示す処理は、所望の結果を達成するために、示されている特定の順序、またはシーケンシャルな順序を必ずしも必要としない。ある実現例では、マルチタスクおよびパラレルプロセッシングが有利であり得る。
【図１】
2019533868.tif 000003
【図２】
2019533868.tif 000004
【図３】
2019533868.tif 000005
【図４Ａ】
2019533868.tif 000006
【図４Ｂ】
2019533868.tif 000007
【図５】
2019533868.tif 000008
【手続補正書】
【提出日】令和1年7月17日(2019.7.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータによって実施される方法であって、
処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、
前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、コンピュータによって実施される方法。
【請求項２】
前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、請求項１に記載の方法。
【請求項３】
前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、請求項２に記載の方法。
【請求項４】
前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、請求項２または３に記載の方法。
【請求項５】
前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも１つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、請求項２または３に記載の方法。
【請求項６】
前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット（ＴＴＵ）に少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記ＴＴＵに発行させることを含む、請求項５に記載の方法。
【請求項７】
前記処理ユニットが前記ＴＴＵに少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用される参照されたアレイエレメントのためのアドレスを前記ＴＴＵのアレイレファレンスに生成させることをさらに含む、請求項６に記載の方法。
【請求項８】
前記命令は、前記ＴＴＵに関連付けられるアレイレファレンスのためのアドレスを生成するよう、第２のＴＴＵカウンタと合計される第１のＴＴＵカウンタを示す、請求項７に記載の方法。
【請求項９】
前記テンソル計算を実行することは、前記処理ユニットが、前記テンソル計算の実行に関連付けられる１つ以上のオペランドを管理する第１の同期プロシージャを実行することを含み、オペランドを管理することは、同期フラグ条件に基づいて１つ以上のループネストをストールすることを含む、請求項１〜８のいずれか１項に記載の方法。
【請求項１０】
前記テンソル計算を実行することは、前記処理ユニットが、前記ループネストの特徴に関連付けられるカウンタをインクリメントすることを管理する第２の同期プロシージャを実行することを含む、請求項９に記載の方法。
【請求項１１】
電子システムであって、
前記電子システムに配置されるとともに１つ以上の処理デバイスを含む処理ユニットと、
命令を格納するための１つ以上のマシン読取可能なストレージデバイスとを含み、前記命令は、動作を実行するように前記１つ以上の処理デバイスによって実行可能であり、前記動作は、
前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、
前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、電子システム。
【請求項１２】
前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、請求項１１に記載の電子システム。
【請求項１３】
前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、請求項１２に記載の電子システム。
【請求項１４】
前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、請求項１２または１３に記載の電子システム。
【請求項１５】
前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも１つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、請求項１２または１３に記載の電子システム。
【請求項１６】
前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット（ＴＴＵ）に少なくとも１つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記ＴＴＵに発行させることを含む、請求項１５に記載の電子システム。
【請求項１７】
処理ユニットによって実行可能な命令を含むコンピュータ読取可能プログラムであって、前記命令は、その実行の際には、
前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、
前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含む動作を前記処理ユニットに実行させ、前記ループネストの構造は、前記命令の前記データ値のうちの１つ以上に基づいて定義される、コンピュータ読取可能プログラム。
【請求項１８】
前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、請求項１７に記載のコンピュータ読取可能プログラム。
【請求項１９】
前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも１つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、請求項１８に記載のコンピュータ読取可能プログラム。
【請求項２０】
前記命令は、前記処理ユニットをテンソルの次元の少なくとも１つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも１つのインデックスの部分である、請求項１８に記載のコンピュータ読取可能プログラム。
【国際調査報告】
2019533868.tif 000009
2019533868.tif 000010