(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-05-08
(45)【発行日】2024-05-16
(54)【発明の名称】ニューラルネットワーク命令セットアーキテクチャ
(51)【国際特許分類】
G06F 17/16 20060101AFI20240509BHJP
G06N 3/063 20230101ALI20240509BHJP
【FI】
G06F17/16 Z
G06N3/063
【外国語出願】
(21)【出願番号】P 2022163303
(22)【出願日】2022-10-11
(62)【分割の表示】P 2021123193の分割
【原出願日】2017-08-29
【審査請求日】2022-10-17
(32)【優先日】2016-10-27
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2017-03-10
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】502208397
【氏名又は名称】グーグル エルエルシー
【氏名又は名称原語表記】Google LLC
【住所又は居所原語表記】1600 Amphitheatre Parkway 94043 Mountain View, CA U.S.A.
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】ナラヤナスワミ,ラビ
(72)【発明者】
【氏名】ウ,ドン・ヒョク
(72)【発明者】
【氏名】テマム,オリビエ
(72)【発明者】
【氏名】カイタン,ハーシット
【審査官】漆原 孝治
(56)【参考文献】
【文献】特開平10-124473(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06N 3/063
(57)【特許請求の範囲】
【請求項1】
複数のニューラルネットワーク層を有するニューラルネットワークのためのテンソル計算を促進するための方法であって、
複数のデータ値を
含む単一の命令を取得することと、
前記複数のデータ値の中から、前記単一の命令において、前記複数のニューラルネットワーク層のうちのあるニューラルネットワーク層の層タイプを特定するOPコードを識別することと、
前記ニューラルネットワーク層のための出力を生成することとを含
み、
前記出力は、
前記テンソル計算の結果であり、
前記あるニューラルネットワーク層への入力と、前記OPコードによって特定される前記層タイプとに基づいて、生成される、方法。
【請求項2】
出力を生成することは、
前記テンソル計算の第1の部分を前記単一の命令に基づいて実行することと、
前記テンソル計算の前記第1の部分を実行することに応答して、前記OPコードによって特定される層タイプを有する前記ニューラルネットワーク層を通じて入力のセットを処理することと、
前記ニューラルネットワーク層を通じて処理される入力の前記セットに基づいて前記出力を生成することとを含む、請求項1に記載の方法。
【請求項3】
入力の前記セットは、複数の要素を含む多次元入力テンソルから導出され、
前記複数の要素の各々は、入力の前記セットにおけるそれぞれの入力に対応する、請求項2に記載の方法。
【請求項4】
前記ニューラルネットワーク層の前記層タイプが、畳み込みニューラルネットワーク層に対応する畳み込み層タイプであると、前記OPコードに基づいて決定することと、
前記テンソル計算が、前記畳み込みニューラルネットワーク層において実行されるべき畳み込みオペレーションのためであると、前記OPコードに基づいて決定することとを含む、請求項2に記載の方法。
【請求項5】
前記テンソル計算を実行することは、
前記単一の命令に基づいて、多次元入力テンソルの第1の次元において第1の複数の要素をトラバースすることを含む、請求項2に記載の方法。
【請求項6】
前記多次元入力テンソルは、アクティベーションテンソルであり、前記方法はさらに、
前記単一の命令に基づいて、前記アクティベーションテンソルの複数のアクティベーションを、前記単一の命令を受信する計算ユニットの第1のメモリにプレロードすることを含む、請求項5に記載の方法。
【請求項7】
前記第1の次元において前記第1の複数の要素をトラバースすることは、
前記単一の命令に基づいて、前記第1のメモリの複数のアドレス位置にアクセスすることを含み、
前記複数のアドレス位置の各アドレス位置は、前記アクティベーションテンソルの前記第1の次元に沿った前記アクティベーションテンソルのそれぞれの要素に対応する、請求項6に記載の方法。
【請求項8】
前記計算ユニットは、前記単一の命令に基づいて、前記多次元入力テンソルをトラバースするために必要とされる計算の総数のサブセットのみを実行するように命令される、請求項6に記載の方法。
【請求項9】
前記テンソル計算を実行することは、
前記単一の命令に基づいて、多次元入力テンソルのx次元において第1の複数の要素をトラバースすることと、
前記単一の命令に基づいて、前記多次元入力テンソルのy次元において第2の複数の要素をトラバースすることと、
前記単一の命令に基づいて、前記多次元入力テンソルのz次元において第3の複数の要素をトラバースすることとを含む、請求項2に記載の方法。
【請求項10】
前記単一の命令は、各々がオペレーションタイプをテンソルオペレーションであるとして示す複数のOPコードを含む、請求項2に記載の方法。
【請求項11】
前記単一の命令は、各々がオペレーションタイプをダイレクトメモリアクセス(DMA)オペレーションであるとして示す複数のOPコードを含む、請求項2に記載の方法。
【請求項12】
複数のニューラルネットワーク層を有するニューラルネットワークのためのテンソル計算を促進するためのシステムであって、
プロセッサと、
オペレーションの実行を引き起こすよう前記プロセッサによって実行可能な命令を格納するための一時的でない記憶媒体とを含み、
前記オペレーションは、
複数のデータ値を
含む単一の命令を取得することと、
前記複数のデータ値の中から、前記単一の命令において、前記複数のニューラルネットワーク層のうちのあるニューラルネットワーク層の層タイプを特定するOPコードを識別することと、
前記ニューラルネットワーク層のための出力を生成することとを含
み、
前記出力は、
前記テンソル計算の結果であり、
前記あるニューラルネットワーク層への入力と、前記OPコードによって特定される前記層タイプとに基づいて、生成される、システム。
【請求項13】
出力を生成することは、
前記テンソル計算の第1の部分を前記単一の命令に基づいて実行することと、
前記テンソル計算の前記第1の部分を実行することに応答して、前記OPコードによって特定される層タイプを有する前記ニューラルネットワーク層を通じて入力のセットを処理することと、
前記ニューラルネットワーク層を通じて処理される入力の前記セットに基づいて前記出力を生成することとを含む、請求項12に記載のシステム。
【請求項14】
入力の前記セットは、複数の要素を含む多次元入力テンソルから導出され、
前記複数の要素の各々は、入力の前記セットにおけるそれぞれの入力に対応する、請求項13に記載のシステム。
【請求項15】
前記オペレーションはさらに、
前記ニューラルネットワーク層の前記層タイプが、畳み込みニューラルネットワーク層に対応する畳み込み層タイプであると、前記OPコードに基づいて決定することと、
前記テンソル計算が、前記畳み込みニューラルネットワーク層において実行されるべき畳み込みオペレーションのためであると、前記OPコードに基づいて決定することとを含む、請求項13に記載のシステム。
【請求項16】
前記テンソル計算を実行することは、
前記単一の命令に基づいて、多次元入力テンソルの第1の次元において第1の複数の要素をトラバースすることを含む、請求項13に記載のシステム。
【請求項17】
前記多次元入力テンソルは、アクティベーションテンソルであり、前記オペレーションはさらに、
前記単一の命令に基づいて、前記アクティベーションテンソルの複数のアクティベーションを、前記単一の命令を受信する計算ユニットの第1のメモリにプレロードすることを含む、請求項16に記載のシステム。
【請求項18】
前記第1の次元において前記第1の複数の要素をトラバースすることは、
前記単一の命令に基づいて、前記第1のメモリの複数のアドレス位置にアクセスすることを含み、
前記複数のアドレス位置の各アドレス位置は、前記アクティベーションテンソルの前記第1の次元に沿った前記アクティベーションテンソルのそれぞれの要素に対応する、請求項17に記載のシステム。
【請求項19】
前記計算ユニットは、前記単一の命令に基づいて、前記多次元入力テンソルをトラバースするために必要とされる計算の総数のサブセットのみを実行するように命令される、請求項17に記載のシステム。
【請求項20】
前記テンソル計算を実行することは、
前記単一の命令に基づいて、多次元入力テンソルのx次元において第1の複数の要素をトラバースすることと、
前記単一の命令に基づいて、前記多次元入力テンソルのy次元において第2の複数の要素をトラバースすることと、
前記単一の命令に基づいて、前記多次元入力テンソルのz次元において第3の複数の要素をトラバースすることとを含む、請求項13に記載のシステム。
【請求項21】
前記単一の命令は、各々がオペレーションタイプをテンソルオペレーションであるとして示す第1の複数のOPコードを含み、
前記単一の命令は、各々がオペレーションタイプをダイレクトメモリアクセス(DMA)オペレーションであるとして示す第2の複数のOPコードを含む、請求項13に記載のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
背景
この明細書は、ディープニューラルネットワーク(DNN: Deep Neural Network)の計算のための命令セットに関する。
【背景技術】
【0002】
ニューラルネットワークは、受け取った入力についてたとえば分類といった出力を生成するためにモデルの1つ以上の層を使用する機械学習モデルである。いくつかのニューラルネットワークは、出力層に加えて1つ以上の隠れ層を含んでいる。各隠れ層の出力は、ネットワークにおける次の層への入力として使用される。すなわち、ネットワークの次の隠れ層または出力層への入力として使用される。ネットワークの各層は、パラメータのそれぞれのセットの現在値に従って、受け取った入力から出力を生成する。
【0003】
いくつかのニューラルネットワークは、1つ以上の畳み込みニューラルネットワーク層を含んでいる。各畳み込みニューラルネットワーク層は、カーネルの関連付けられるセットを有する。各カーネルは、ユーザによって作成されるニューラルネットワークモデルによって確立される値を含む。いくつかの実現例では、カーネルは特定の画像輪郭、形状または色を識別する。カーネルは、重み入力のマトリクス構造として表わされ得る。各畳み込み層はさらに、アクティベーション入力のセットを処理し得る。アクティベーション入力のセットもマトリクス構造として表わされ得る。
【発明の概要】
【課題を解決するための手段】
【0004】
概要
この明細書に記載される主題の革新的な1つの局面は、コンピュータによって実施される方法において具現化され得る。当該方法は、処理ユニットが、テンソル計算を実行するためのパラメータを特定する命令を受け取ることを含む。当該方法は、前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することを含み得、前記ループネストの構造は、前記命令の前記パラメータのうちの1つ以上に基づいて定義される。これらおよび他の実現例は各々、随意に以下の特徴のうち1つ以上を含み得る。たとえば、前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分であり得る。前記命令によって特定される前記パラメータは、前記ニューラルネットワーク層のタイプを特定するパラメータを含み得、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義され得る。これにより、複数のループを含むループネストを実行することは、ネスト化ループの構造によって特定される順序でテンソルのエレメントに対してトラバーサルを実行することを指し得、前記構造はたとえば、ループネスティングの深さと、スタートおよびエンドインデックスと、ストライド(stride)と、各ループの方向とによってそれぞれ特定される。
【0005】
いくつかの実現例では、前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である。いくつかの実現例では、前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも1つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される。いくつかの実現例では、前記命令は、前記処理ユニットをテンソルの次元の少なくとも1つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも1つの
インデックスの部分である。いくつかの実現例では、前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも1つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む。
【0006】
いくつかの実現例では、前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット(TTU)に少なくとも1つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記TTUに発行させることを含む。いくつかの実現例では、上記方法は、前記処理ユニットが前記TTUに少なくとも1つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用される参照されたアレイエレメントのためのアドレスを前記TTUのアレイレファレンスに生成させることをさらに含む。いくつかの実現例では、命令は、前記TTUに関連付けられるアレイレファレンスのためのアドレスを生成するよう、第2のTTUカウンタと合計される第1のTTUカウンタを示す。
【0007】
いくつかの実現例では、前記テンソル計算を実行することは、前記処理ユニットが、前記テンソル計算の実行に関連付けられる1つ以上のオペランドを管理する第1の同期プロシージャを実行することを含み、オペランドを管理することは、同期フラグ条件に基づいて1つ以上のループネストをストールすることを含む。いくつかの実現例では、前記テンソル計算を実行することは、前記処理ユニットが、前記ループネストの特徴に関連付けられるカウンタをインクリメントすることを管理する第2の同期プロシージャを実行することを含む。
【0008】
この明細書に記載される主題の別の革新的な局面は、電子システムにおいて具現化され得る。当該電子システムは、前記電子システムに配置されるとともに1つ以上の処理デバイスを含む処理ユニットと、命令を格納するための1つ以上のマシン読取可能なストレージデバイスとを含み、前記命令は、動作を実行するように前記1つ以上の処理デバイスによって実行可能であり、前記動作は、テンソル計算を実行するためのデータ値を特定する命令を前記処理ユニットが受け取ることと、前記命令を受け取ることに応答して、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの1つ以上に基づいて定義される。
【0009】
この明細書に記載される主題のさらに別の革新的な局面は、処理ユニットによって実行可能な命令を含む一時的でないコンピュータ読取可能記憶媒体において具現化され得、前記命令は、その実行の際には、前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含む動作を前記処理ユニットに実行させ、前記ループネストの構造は、前記命令の前記データ値のうちの1つ以上に基づいて定義される。
【0010】
この局面および他の局面の他の実現例は、対応するシステム、装置、および、上記方法のアクションを実行するように構成されコンピュータストレージデバイス上でエンコードされるコンピュータプログラムを含む。1つ以上のコンピュータのシステムは、システムにインストールされ、オペレーションにおいてシステムにアクションを実行させるソフトウェア、ファームウェア、ハードウェアまたはそれらの組み合わせによってそのように構成され得る。1つ以上のコンピュータプログラムは、データ処理装置によって実行されると当該装置にアクションを実行させる命令を有することによって、そのように構成され得る。
【0011】
この明細書に記載される主題は、以下の利点のうちの1つ以上を実現するように特定の実施形態において実現され得る。処理ユニットは、1つの命令で、ディープネスト化ループを繰り返すようプログラムを開始し得る。処理ユニットは、テンソル計算を実行するためのデータ値でエンコードされる受け取られた命令を実行し得る。処理ユニットの計算バンド幅は、1つ以上の計算を実行するためにテンソルをトラバースする際に、プロセッサが実行する必要がある命令の数を低減することにより増加される。所与のニューラルネットワーク層についてのテンソル計算を実行するための命令は、エンコードされ得、例示的なハードウェアコンピューティングシステムの1つ以上のコンピューティングシステムの間で分散され得る。さまざまな計算システムへのエンコードされた命令の分散は、単一のシステム内での計算バンド幅の増加を可能にする。単一のシステムが所与のテンソルに必要とされる合計の計算のサブセットのみを担うので、計算システムにおける命令量が低減される。
【0012】
この明細書に記載される主題の1つ以上の実現例の詳細を添付の図面および以下の説明で述べる。当該主題の他の潜在的な特徴、局面および利点は、記載、図面および添付の請求の範囲から明白になるであろう。
【図面の簡単な説明】
【0013】
【
図2】例示的なテンソルトラバーサルユニットを示す図である。
【
図3】OPコードと、
図1の例示的な計算システムによって少なくとも部分的に実行される対応するオペレーションとを含む例示的なテーブルを示す図である。
【
図4A】例示的なアクティベーションテンソル、例示的な重みテンソルおよび例示的な出力テンソルを示す図である。
【
図4B】
図1の例示的な計算システムの処理ユニットによって実行され得る例示的なループネストを示す図である。
【
図5】コンピュータによって実施される方法により、テンソル計算を実行するための処理の例を示すフロー図である。
【発明を実施するための形態】
【0014】
さまざまな図面における同様の参照番号および指示は、同様の要素を示す。
詳細な説明
この明細書に記載される主題は、ワークロードを実行する処理ユニットが、計算を実行している間に高いパフォーマンスを達成し得るように機械学習推論ワークロードを促進する、コンピュータによって実施される処理または方法に関する。この明細書に記載される処理および方法は、タイルのセットとして構成されるハードウェアコンピューティングシステム内で実行され得る。タイルの各々は、独立(self-contained)しており、ニューラルネットワーク層によって必要とされる計算の少なくとも部分を独立して実行し得る。
【0015】
ニューラルネットワーク内で実行される計算処理は、1つ以上のサイクルでパラメータ/重みテンソルで入力テンソルを乗算し、多くのサイクルに亘って積の累算を実行することからなり得る。入力重み乗算は、入力テンソルまたはマトリックスの行と乗算された各重みエレメントの積和として記述され得る。ディープニューラルネットワーク(DNN)は、互いにフィードを行う複数の層を含む。所与の層のためのテンソル計算を含む推論ワークロードは、この明細書に記載される方法によって促進される。この明細書に記載される主題はさらに、開示される技術を使用する画像認識および/または分類方法/システムと、ニューラルネットワーク命令セットアーキテクチャを使用するハードウェアとに関し得る。
【0016】
一般に、ソフトウェアアルゴリズムがN次元のテンソルを処理することによりテンソル
計算を実行する場合、各ループがN次元のテンソルの各次元をトラバースすることを担うネスト化ループが使用され得る。多次元テンソルはマトリックスまたは多次元マトリックスであり得る。N次元のテンソルの各次元は、1つ以上のエレメントを含み得、各エレメントはそれぞれのデータ値を格納し得る。たとえば、テンソルはプログラムにおいて変数であり得、当該変数は3次元を有し得る。第1の次元は、300個のエレメントの長さを有し得、第2の次元は、1000個のエレメントの長さを有し得、第3の次元は、20個のエレメントの長さを有し得る。
【0017】
ネスト化ループにおいてテンソルをトラバースすることは、エレメントの対応するデータ値をロードまたは格納するよう、エレメントのメモリアドレス値の計算を必要とする。たとえば、forループがネスト化ループであり、3つのループインデックス変数によってトラッキングされる3つのループが3次元のテンソルを通じてトラバースするようネスト化され得る。いくつかの場合において、プロセッサは、外側ループインデックス変数に対する内側ループのループ境界をセットするといった、ループ境界条件を実行する必要があり得る。たとえば、ネスト化ループの最も内側のループから出るべきか否かを決定する際に、プログラムは、最も内側のループのループインデックス変数の現在値を、ネスト化ループの最も外側のループのループインデックス変数の現在値と比較し得る。
【0018】
3次元のテンソルをトラバースすることに関連付けられる計算タスクは、分岐命令および整数演算命令といった有意な数の命令を必要とし得る。各ループ境界が小さくかつループの数が大きい場合、メモリアドレス計算およびテンソル次元トラバーサルのための計算は、全体的な実行時間の有意な部分を占め得、全体の性能を非常に低下させ得る。以下により詳細に記載されるように、テンソル計算を実行するためのデータ値でエンコードされた命令を受け取る処理ユニットによって実行可能な方法は、1つ以上の計算を実行するためにテンソルをトラバースする際にプロセッサが実行する必要がある命令の数を低減することによって、処理ユニットの計算バンド幅(computation bandwidth)を増加し得る。
いくつかの実現例では、計算バンド幅はたとえば、テンソル上で実行され得るオペレーションの最大レート、または、テンソル上で実行され得るオペレーションの数を指す。
【0019】
所与の層についてテンソル計算を実行するための命令は、エンコードされ、例示的なハードウェアコンピューティングシステム内において1つ以上のコンピューティングシステム(以下では計算タイルとして記載される)の間で分散され得る。さまざまな計算タイルへのエンコードされた命令の分散によって、単一のタイル内での計算バンド幅の増加が可能になる。さらに複数の計算タイルの間で計算を分散することによって、テンソルをトラバースする際に計算タイルの処理ユニットによって消費される命令の数が、(現在のシステムと比較して)低減される。そのため、命令を消費することはたとえば、計算タイルの処理ユニットによって1つ以上の命令を実行することを指す。単一のタイルは所与のテンソルに必要とされる合計の計算のサブセットのみを担うので、計算タイルにおける命令量が低減され得る。
【0020】
ニューラルネットワーク推論ワークロードのための内積およびマトリックス乗算を含むニューラルネットワークテンソル計算を促進するためのハードウェアコンピューティングシステムに関する付加的な詳細および説明は、2016年10月27日に出願された、「ニューラルネットワーク計算タイル(Neural Network Compute Tile)」という名称を有
する米国特許出願番号第15/335,769号に記載されている。米国特許出願番号第15/335,769号の開示は全文、明確に本願明細書において参照により援用される。
【0021】
図1は、ニューラルネットワーク層のための計算を実行するよう1つ以上のテンソルをトラバースするための例示的なコンピューティングシステム100のブロック図を示す。
示されるように、コンピューティングシステム100は、処理ユニット102と、記憶媒体104と、テンソルトラバーサルユニット(TTU: tensor traversal unit)106と、乗累算(MAC:multiply accumulate)オペレータ108と、アクティベーション
ユニット110とを含む。単一のTTUが示されているが、システム100は、所与のニューラルネットワーク層についてテンソル計算を処理するために1つ以上の計算タイルが使用される場合に、テンソルトラバーサルオペレーションと、メモリアクセスオペレーションとを処理するよう、2つ以上のTTU106を含み得る。同様に、単一のMACが示されているが、システム100は複数のMACオペレータ108を含み得る。
【0022】
処理ユニット102は、記憶媒体104に格納された命令またはプログラムコード、または、別のストレージデバイスに格納された他の命令/コードを含む、コンピューティングシステム100内での実行のための命令を処理するように構成される。処理ユニット102は1つ以上のプロセッサを含み得る。記憶媒体104は、アクティベーションを格納するための第1のバンク112と、重みを格納するための第2のバンク114とを含む1つ以上のメモリバンクまたはユニットを含み得る。いくつかの実現例では、記憶媒体104は1つまたは複数の揮発性メモリユニットである。他のいくつかの実現例では、記憶媒体104は、たとえばリードオンリメモリ(ROM: read-only memory)および/また
は電気的消去可能プログラマブルリードオンリメモリ(EEPROM: electrically erasable programmable read-only memory)のような1つまたは複数の不揮発性メモリユニットである。記憶媒体104はさらに、フロッピー(登録商標)ディスクデバイス、ハードディスクデバイス、光ディスクデバイス、またはテープデバイス、フラッシュメモリもしくは他の同様のソリッドステートメモリデバイス、またはストレージエリアネットワークもしくは他の構成におけるデバイスを含むデバイスのアレイといった、コンピュータ読取可能媒体の別の形態にあり得る。
【0023】
命令セット103は、処理ユニット102によって実行されると、たとえば、第1のバンク112のメモリアドレス位置にアクティベーションを格納することと、第2のバンク114のメモリアドレス位置に重みを格納することとを含む1つ以上のタスクを処理ユニット102に実行させる。さらに、命令103はさらに、第1のバンク112および第2のバンク114からの格納されたデータにアクセスすることと、当該アクセスされたデータをMACオペレータ108に提供することとを処理ユニット102に行わせ得る。以下により詳細に記載されるように、MACオペレータ108は、部分和を生成するか、または、アクティベーションユニット110に提供される出力アクティベーションを生成するかのいずれかを行うよう、アクティベーションを重みと乗算することを含み得る乗算オペレーションを実行し得る。
【0024】
一般に、コンピューティングシステム100は、出力116を生成するために命令セット103内に含まれる1つ以上の命令を処理する。命令セット103は、テンソルオペレーション(tensorop)命令またはダイレクトメモリアクセスオペレーション(DMAop: direct memory access operation)命令の少なくとも1つを含み得る。コン
ピューティングシステム100は、複数の線形代数計算を含むテンソル計算を実行するために、少なくとも1つのtensoropおよび少なくとも1つのDMAop命令を実行するように構成され得る。
【0025】
いくつかの実現例では、テンソル計算を実行することは、テンソルの特定の次元のエレメントに対応するメモリアドレス位置にアクセスするようDMAop命令を実行することを含んでおり、少なくとも1つのメモリアドレス位置はテンソルのエレメントについてのデータ値を格納する。テンソル計算は、テンソルの特定の次元に沿ってエレメントをトラバースするようtensoropを実行することをさらに含み得る。いくつかの実現例では、テンソル計算を実行することは、ニューラルネットワーク層のための出力値を作り出
すために、アクティベーションテンソルのエレメントについてのデータ値をパラメータまたは重みテンソルのエレメントについてのデータ値と乗算することに対応する。
【0026】
示されるように、TTU106は命令バッファ124を含み得る。単一の命令バッファ124が示されているが、計算システム100は、複数の命令バッファ124を含んでもよい。さらに、システム100は複数のTTU106を含み得、各TTU106は1つ以上の命令バッファ124を含み得る。いくつかの実現例では、システム100内の異なる命令バッファ124は、tensorop命令バッファおよびDMAop命令バッファを含み得る。以下により詳細に記載されるように、システム100によって受け取られるとともに処理ユニット102によって実行される命令は、tensorop命令およびDMAop命令のうちの1つを含み得る。いくつかの実現例では、受け取られた命令は、処理ユニット102による実行に先立って命令バッファ124に格納される。
【0027】
図4を参照して以下により詳細に論じられるように、アクティベーションは、入力テンソルのエレメントに対応するそれぞれのメモリアドレス位置にて、第1のバンク112へあらかじめロードされ得る。同様に、重みは、重みテンソルのエレメントに対応するそれぞれのメモリアドレス位置にて、第2のバンク114へあらかじめロードされ得る。いくつかの実現例では、命令、アクティベーションおよび重みは、ニューラルネットワークハードウェアコンピューティングシステムに関連付けられる外部またはより高いレベルの制御デバイスからシステム100に提供される。
【0028】
一般に、処理ユニット102がテンソルの特定のエレメントにアクセスするための1つ以上の命令を実行すると、テンソルトラバーサルユニット106は、特定のエレメントの値を表わすデータを読み出すよう処理ユニット102が記憶媒体104にアクセスし得るように、当該エレメントのメモリアドレスを決定する。たとえば、記憶媒体104に格納された命令は、処理ユニット102によって実行され得るネスト化ループプログラムのためのプログラムコードを含み得る。
【0029】
ネスト化ループプログラムは、命令セット103によって提供されるデータ値に基づいて決定されるある範囲の値を有し得る複数の変数を含み得る。処理ユニット102は、少なくとも2つの多次元アレイのそれぞれのエレメントに対応するメモリアドレス位置へTTU106をアクセスさせるよう、ネスト化ループプログラムのためのプログラムコードを実行し得る。たとえば、複数の変数は、複数の内側および外側ループを含む例示的なディープループネストをインスタンス化するためのデータ値を含み得る。いくつかの実現例では、複数の変数およびデータ値によって、TTU106は、
図4Bを参照して以下に記載されるループネスト(たとえばディープループネスト402)のようなディープループネストをインスタンス化し得る。
【0030】
ネスト化ループに関連付けられる現在のインデックス変数値に基づいて、TTU106は、多次元アレイ変数の第1のエレメントからのオフセットを表わすオフセット値を決定し得る。次いで、処理ユニット102は、オフセット値を使用して記憶媒体から2次元アレイ変数の特定のエレメントにアクセスし得る。
【0031】
テンソルトラバーサルユニット106は、1つ以上のテンソルに関連付けられるステータスを決定するように構成される。ステータスは、ループ境界値、現在のループインデックス変数値、メモリアドレス値を計算するための次元乗算器、および/または、分岐ループ境界を扱うためのプログラムカウンタ値を含み得る。テンソルトラバーサルユニット106は、テンソルステータスエレメント122および算術論理演算ユニットを含んでいる。テンソルステータスエレメント122の各々は、たとえばレジスタまたは任意の他の好適なストレージ回路といったストレージエレメントであり得る。いくつかの実現例では、
テンソルステータスエレメント122は、物理的または論理的に、異なるグループへと配され得る。
【0032】
いくつかの実現例では、テンソルステータスエレメント122のあるグループが、物理的または論理的に多次元アレイへと配され得る。たとえば、テンソルステータスエレメント122の各グループは、物理的にまたは論理的に2次元アレイへと配され得る。算術論理演算ユニットは、算術および論理演算を実行するように構成される1つ以上の算術論理演算ユニット(ALU: arithmetic logic unit)を含む。たとえば、算術論理演算ユニットは、足し算、引き算、乗算、除算、論理AND、論理OR、または、任意の他の好適な算術および論理演算を実行するように構成されるデジタル回路を含み得る。
【0033】
図2は、テンソルトラバーサルユニットのテンソルステータスエレメント200の例示的なセットを示す。テンソルステータスエレメント200は、テンソルトラバーサルユニット106のテンソルステータスエレメント122に対応し得る。テンソルトラバーサルユニット200は、テンソルインデックスエレメント202のグループと、テンソル境界エレメント204のグループと、次元乗算器エレメント206のグループとを含む。テンソルインデックスエレメント202は、M個の行およびN個の列を有する2Dアレイとして物理的または論理的に配され得、MおよびNは1以上の整数である。いくつかの実現例では、テンソルインデックスエレメント202の各行は、テンソルについてのテンソルインデックス情報を表わし得る。たとえば、プログラムが2つのアレイ変数V1およびV2を定義する場合、テンソルトラバーサルユニットは、アレイ変数V1およびV2についてテンソルインデックス情報をそれぞれトラッキングするよう、行202aおよび202bを割り当て得る。いくつかの実現例では、テンソルインデックスエレメント202の各列は、テンソルに関連付けられるネスト化ループインデックス変数値についてのテンソルインデックス情報を表わし得る。たとえば、プログラムが変数V1へアクセスするための3つのループを有するネスト化ループを定義する場合であって、ネスト化ループの各ループがネスト化ループインデックス変数i、jおよびkによってインデキシングされる場合、テンソルトラバーサルユニットは、ネスト化ループインデックス変数i、jおよびkをそれぞれトラッキングするよう、テンソルインデックスエレメントX
1,1、X
1,2およびX
1,3を割り当て得る。
【0034】
テンソル境界エレメント204は、テンソルインデックスエレメント202と同じ次元を有する2Dアレイとして物理的または論理的に配され得、テンソル境界エレメント204の各エレメントはテンソルインデックスエレメント202における対応するエレメントを有する。いくつかの実現例では、テンソル境界エレメント204の行の各々は、テンソルについてのテンソル境界情報を表し得る。たとえば、プログラムが2つのアレイ変数V1およびV2を定義する場合、テンソルトラバーサルユニットは、それぞれアレイ変数V1およびV2についてテンソル境界情報をトラッキングするよう、行204aおよび204bを割り当て得る。
【0035】
次元乗算器エレメント206は、テンソルインデックスエレメント202と同じ次元を有する2Dアレイとして物理的または論理的に配され得、次元乗算器エレメント206の各エレメントは、テンソルインデックスエレメント202における対応するエレメントを有する。いくつかの実現例では、次元乗算器エレメント206の各行は、テンソルについての次元乗算器情報を表わし得る。たとえば、プログラムが2つのアレイ変数V1およびV2を定義する場合、テンソルトラバーサルユニットは、アレイ変数V1およびV2についての次元乗算器情報をそれぞれトラッキングするよう、行206aおよび206bを割り当て得る。
【0036】
いくつかの実現例では、次元乗算器に対してテンソルインデックス値を乗算する乗算器
を使用するのではなく、代替的な実施形態は、乗算器ファンクションの代わりに加算器ファンクションを利用するTTU106を含み得る。これらの実施形態では、処理ユニット102は、(たとえば特定のループの開始値、終了値およびステップ値についての)既に乗算された数をTTU106に提供するようプログラムコードを実行し得る。
【0037】
ディープニューラルネットワーク(DNN)は、互いへフィードを行う複数の層を含む。いくつかの実現例では、例示的なニューラルネットワークは、畳み込み層(たとえばデプスワイズ(depth-wise))、削減層(reduction layer)、全結合(FC: fully connected)層、分類器層、エレメントワイズ乗算層(element-wise multiply layer)、または、プーリング層(たとえば平均および最大)の層タイプのうちの1つ以上を含み得る。いくつかの実現例では、小さな(たとえば1または2)の入出力深さを有する計算は、全結合層または畳み込み層のような既存の層の特性であり得る浅いカーネル特性を有する層に関連付けられる。一般に、第1の層(たとえば畳み込み層)についてシステム100内で発生するテンソル計算は、第1の層と異なる第2の層(たとえばプーリング層)についての入力アクティベーションとしてその後提供される出力アクティベーションを作り出し得る。
【0038】
いくつかの実現例では、2以上の計算システム100は、計算タイルのセットとして構成され得る。これらの実現例では、各計算タイルは、所与の層について推論ワークロードを処理するのに必要な計算の部分を独立して実行する。その後、これらの計算の出力は、所与の層について後続の計算を実行するために当該出力を必要とする別のタイルに移動される。さらに、ニューラルネットワーク層は、システム設計者によって望まれる態様で分割され得、各パーティションは、計算の部分が特定の層パーティションに対応するようにタイルにマッピングされ得る。
【0039】
図1を再び参照して、いくつかの実現例では、システム100は、システム100によって実行される複数のオペレーションをエンコードする少なくとも1つの命令を命令103を介して受け取り、所与のニューラルネットワーク層について必要とされるテンソル計算の少なくとも部分を実行する。命令およびエンコードされたオペレーションは、層のタイプ、アクティベーションテンソルの構造、および重みテンソルの構造を特定し得る。さらに、エンコードされたオペレーションは、当該層タイプのニューラルネットワークによって少なくとも部分的に定義されるループネスト構造を作成するよう、処理ユニット102にプログラムコードを実行させ得る。エンコードされたオペレーションに関して、命令セット103は、テンソルオペレーション(tensorop)命令またはダイレクトメモリアクセスオペレーション(DMAop)命令の少なくとも1つを含み得る。命令セット103はさらに、同期オペレーション(syncing operations)、バリアオペレーション(barrier operations)、フェンシングオペレーション(fencing operations)(以下に記載)といったさまざまな種々のオペレーションをエンコードする1つ以上の他の命令を含み得る。
【0040】
図3は、OPコードと、システム100によって少なくとも部分的に実行される対応するオペレーションとを含むテーブル300を示す。テーブル300は、オペレーション302、オペレーション304およびオペレーション308を含んでいる。テーブル300に示されるように、システム100はたとえば、命令セット103によって提供される単一の命令によってエンコードされる複数のオペレーションを実行し得る。一般に、命令セット103は、システム100内において特定の計算シーケンスについて発生するオペレーションのタイプを定義するようOPコードを使用する標準化された構造を含み得る。一意のOPコードは、特定のオペレーションタイプに対応し得る。いくつかの実現例では、1つ以上の命令、入力アクティベーションおよび重みの形態にあるエンコードされたオペレーションが、ニューラルネットワークハードウェアコンピューティングシステムに関連
付けられる外部入出力(I/O)デバイスまたはよりハイレベルなコントローラデバイスからシステム100に提供される。1つ以上のデータバスは、例示的なI/Oデバイスからのまたはハードウェアコンピューティングシステムの複数の計算タイル(たとえば複数のシステム100)の間の命令、アクティベーションおよび重みを通過させるように使用され得る。
【0041】
テーブル300に示されるように、オペレーション302は、対応するOPコードを有する1つ以上のtensoropを含み得るエンコードされたテンソルオペレーションである。いくつかの実現例では、単一の命令または命令セットは、特定のtensoropを示すOPコードの形態のエンコーディングを定義する複数のサブ命令を含み得る。たとえば、サブ命令は、特定のニューラルネットワーク層に対応する計算についてのtensoropをタイルに実行させるよう、1つ以上の計算タイルに分散され得る。たとえば、tensoropサブ命令は、畳み込み層、FC層、プーリング層、削減層、またはエレメントワイズ乗算層といった上述した層のうちの少なくとも1つについてのOPコードを含み得る。tensoropサブ命令は、計算タイル/システム100内に発生するすべてのテンソル計算がtensoropサブ命令からの必要とされるエンコーディングを有するように構成され得る。
【0042】
一般に、システム100内で発生するテンソル計算は、命令セット103から受け取られる命令によって特定される必要とされるエンコーディングを有することになる。複数のシステム100が計算タイルのセットとして配される場合、tensoropサブ命令およびエンコーディングは、異なる計算タイルが異なる命令を実行することを可能にし得る。いくつかの実現例では、異なるサブ命令は、ニューラルネットワーク層のあるパーティションについてのテンソル計算に対応し得る。tensoropエンコーディングはさらに、TTU106が、所望のTTUテンソルオペレーションを示すメインTTUループネストフィールドを介して処理ユニット102にループインデックスを発行することを可能にする。tensoropエンコーディングはさらに、アドレスを計算するためにどのカウンタがともに加算されるかを示すTTUループマスクに基づいて、TTU106が特定のアレイ/テンソルエレメントについてメモリアドレスを生成することを可能にする。tensoropエンコーディングはさらに、入力アクティベーションテンソル、重みテンソルおよび出力アクティベーションテンソルをトラバースするために、処理ユニット102によって実行可能な複数のTTUループネスト命令を提供し得る。
【0043】
いくつかの実現例では、2以上の計算システム100が計算タイルのセットとして構成される場合、各計算タイルは命令を独立して実行する独立した(self-contained)ユニットであり得る。一般に、計算タイルは、tensoropおよびDMAopという2つのタイプのオペレーションを定義する命令を実行する。いくつかの実現例では、異なるオペレーションは、同期フラグを通じてデータ上で同期する、計算システム100内の独立制御ユニットによって実行され得る。しかしながら、制御ユニットは独立しているが、維持される必要のある依存関係が存在し得る。たとえば、tensoropは、たとえば記憶媒体104のメモリ位置においてループネストによって必要とされるデータを有さなければ、ループネストにおけるループを実行してはならない。必要とされるデータは、DMAopまたは別のオペレーションによって記憶媒体104に配置され得る。
【0044】
一般に、システム100内のデータ同期は、同期フラグオペレーションを通じて発生する。いくつかの実現例では、システム100は、バーチャル書き込みポートごとに同期フラグエントリを含むレジスタファイルを有する。たとえば、tensoropは、部分和であり得る2つ以上のテンソルレファレンス(第2のバンク114に書き込まれる)と、アクティベーション(第1のバンク112に書き込まれる)とを有し得る。この実現例では、各部分和およびアクティベーションについての同期フラグレジスタが存在し得る。さ
らに所与の命令セットの実行中に、処理ユニット102は、特定の同期フラグレジスタについてインクリメントをトリガするテンソルレファレンスの次元を選択し得る。さらに、処理ユニット102は、選択同期フラグレジスタに対する必要なカウントについて待機するループネストの深さを選択し得る。これは、データの依存関係が侵されないことを保証する。さらに、選択された同期フラグレジスタに対する必要な同期フラグカウントがまだ到達されていなければ、1つ以上のスレッドがストールすることになる。
【0045】
たとえば、tensoropエンコーディングは、1つ以上の同期フラグ条件に基づいてループネストのストールを可能にし得る。いくつかの実現例では、TTU106は、1)所定の同期フラグ条件が満たされていない(たとえば同期フラグカウントがしきい値カウント以下である)という条件、または、2)命令パイプラインの特定のステージに検出されたハザードが存在するという条件によってストールされ得る。さらに、tensoropエンコーディングは、所望のビット幅の特定のデータ値(たとえばアクティベーションまたは重み)を受け取るようにMACオペレータ108を構成することを可能にし、かつ、アクティベーションユニット110によって実行される所望のファンクションの選択を可能にする。
【0046】
tensoropエンコーディングによって定義される同期フラグ条件は、同期ウォッチャオペレーション(sync watcher operation)および同期プロデューサオペレーション(sync producer operation)のうちの少なくとも1つをシステム100の処理ユニット
102に実行させ得る。処理ユニット102によるtensoropの実行中において、同期ウォッチャオペレーションは、どのループ反復を同期すべきかと、ループが反復することを許可される前に必要とされる同期フラグカウントと、次の反復のために予期される同期フラグカウントをどれぐらいインクリメントするべきかとを処理ユニット102に示すように使用され得る。
【0047】
テーブル300に示されるように、エンコードされたダイレクトメモリアクセスオペレーション命令は1つ以上のDMAopを含み得る。命令セット103によって特定されるDMAオペレーションによって、システム100による特定のtensoropの実行を達成するために、必要に応じて処理ユニット102がデータを移動する。いくつかの実現例では、等しくない幅の2つのメモリリソース(たとえばワイドメモリユニットおよびナローメモリユニット)間でデータが移動される場合、データの転送サイズは、よりワイドなリソースの倍数でなければならない。たとえば、ワイドメモリ(W-mem)にデータを移動させる/ワイドメモリ(W-mem)からデータを移動させるDMAopが与えられた場合、転送のサイズはワイドメモリ幅の倍数でなければならない。同様に、ナローメモリ(N-mem)にデータを移動させる/ナローメモリ(N-mem)からデータを移動させるDMAopの場合、データの転送のサイズはナローメモリ幅の倍数でなければならない。
【0048】
メモリユニットの属性を説明するために明細書の全体にわたって使用されるワイドおよびナローの指定は、一般に1つ以上のメモリユニットの幅(ビット/バイト)のおよそのサイズを指す。いくつかの実現例では、第1のバンク112のメモリ幅および第2のバンク114のメモリ幅は、たとえば16ビットといった特定数のビットによって定義されない。一般に、システム100の各インスタンス化においては2つの異なるタイプのメモリが存在し、ナロー/ワイドは、メモリの特徴を示すように用いられる、絶対的ではない相対的な用語である。いくつかの例示的な実現例では、第1のバンク112は1つ以上のナローメモリユニットを含み、第2のバンク114は1つ以上のワイドメモリユニットを含む。
【0049】
上述したように、システム100によって受け取られ処理ユニット102によって実行
される命令は、tensorop命令およびDMAop命令を含み得る。受け取られた命令は、処理ユニット102による実行に先立って命令バッファ124に格納され得る。テーブル300に示されるように、オペレーション304は、1)インバウンド命令バッファと、2)アウトバウンド命令バッファと、3)ナローワイドDMA命令バッファと、4)ワイドナローDMA命令バッファと、5)リングバスDMA命令バッファとを含む(たとえば「書き込み」バッファ位置を示す)命令サブタイプを含み得るDMAオペレーションである。
【0050】
ここでテーブル300を参照して、処理ユニット102によるオペレーションにおけるDMAopの実行によって、システム100は、命令セット103から(例示的なデータバスを介して)入力アクティベーションおよび他のデータを受け取り、第1のバンク112にアクティベーションを格納する。以下により詳細に記載されるように、入力アクティベーションは、第1のバンク112において、アクティベーションテンソルのそれぞれのエレメントに対応するメモリアドレス位置に格納される。処理ユニット102によるDMAop.outオペレーションの実行により、システム100は、第1のバンク112からデータ(たとえば出力アクティベーション)を読み出し、例示的なデータバスにデータを書き込み、システム100からデータを出力する。処理ユニット102は、第1のバンク112(ナローメモリ)から第2のバンク114(ワイドメモリ)にデータを移動させるためにDMAop.N-Wオペレーションを実行し得る。同様に、処理ユニット102は、第2のバンク114(ワイドメモリ)から第1のバンク112(ナローメモリ)にデータを移動させるためにDMAop.WNオペレーションを実行し得る。
【0051】
処理ユニット102は、命令セット103から(例示的なデータバスを介して)データを抽出した後、第2のバンク114へデータ(たとえば重み/パラメータ)を書き込むようDMAop.Rバスオペレーションを実行し得る。DMAop.Rバスオペレーションの実行によって、処理ユニット102はさらに、第2のバンク114のメモリアドレス位置に格納されたデータ(たとえば重み)を読み出し/当該データにアクセスし、当該データがシステム100から出力され得るように例示的なデータバスにデータを書き込み得る。いくつかの実現例では、例示的なデータバスは、リング構造において複数の計算システム100を接続するリングバスである。リングにおいて複数のシステム100を接続することに加えて、リングバスはさらに、複数のシステム100を外部のI/Oデバイスまたはよりハイレベルの制御デバイスに接続し得る。計算タイルを接続するためのデータバスオプションを含む、ニューラルネットワークテンソル計算を促進するためのハードウェアコンピューティングシステムに関する付加的な詳細および記載がさらに、2016年10月27日に出願された「ニューラルネットワーク計算タイル(Neural Network Compute Tile)」という名称を有する米国特許出願番号第15/335,769号に記載されてい
る。
【0052】
いくつかの実現例では、計算タイルの所与のセットについては、計算タイルのセットのうちの少なくとも1つの計算タイルが分類器タイルであり得る。分類器タイルは、ニューラルネットワークの特定の層について発生したテンソル計算に関連付けられるデータ値にファンクションを適用するように構成され得る。たとえば、FC層はタイルに亘って分割され得るので、各タイルは、出力のサブセットを作り出し、第2のバンク114に出力を格納する。一般に、DMAopは、第2のメモリ114のメモリアドレス位置からのリニア出力を、第1の計算タイルからデータリングバスを通じて第2のタイル(たとえば分類器タイル)に移動するよう使用され得る。その後、分類器タイルは、各リニア出力に少なくとも1つのファンクション(たとえばsoftmaxファンクション)を適用し、より高いレベル制御デバイスまたは外部I/Oデバイスにポストファンクション結果を提供する。
【0053】
テーブル300を再び参照して、いくつかの実現例では、DMAop.infeedおよびDMAop.outfeedが、外部コントローラデバイスおよびシステム100の両方に関連付けられるオペレーションに対応する。一般に、DMAop.infeedオペレーションは、外部コントローラにおいて開始し、DMAop.infeedオペレーションによって、コントローラが例示的なデータバス(たとえばリングバス)に入力アクティベーションおよび重みの両方を提供する。データバスは、マルチタイル配置におけるどの計算タイルがアクティベーションおよび重みを消費するべきであるか示すデータストリーム(たとえばビットマップ)をマルチキャストするように構成され得る。したがって、特定の受取タイルの処理ユニット102は、外部コントローラから計算タイル(システム100)のメモリバンクにアクティベーションおよび重み/パラメータを移動するよう、DMAop.infeedオペレーションの部分を実行し得る。同様に、いくつかの実現例では、処理ユニット102は、計算タイルにおけるメモリバンク112および114から分類器タイルに、ならびに、分類器タイルから外部コントローラに、例示的な推論ワークロードの結果(出力)を移動させるようDMAop.outfeedオペレーションの部分を実行し得る。さらに、外部コントローラは、例示的な外部I/Oデバイスに推論ワークロード結果を移動させるようDMAop.outfeedオペレーションの部分を実行し得る。
【0054】
オペレーション306は、他のオペレーションがシステム100によって実行されている間、新しい命令の発行を管理するよう処理ユニット102によって実行され得るtilefenceopおよびscalarfenceopオペレーションである。処理ユニット102によるtilefenceop命令の実行によって、システム100は、システム100のそれぞれの命令バッファにおける全てのペンディング命令がリタイアされるまで、任意の新しい命令がシステム100に発行されることをブロックまたは防止する。さらに、scalarfenceop命令は、ペンディング命令が処理ユニット102によって実行されている間に新しい命令の発行を排除するようtilefenceop命令と共働する。たとえばtilefenceop命令によって、処理ユニット102は、tilefenceopに関連付けられる同期フラグカウントメトリックを監視し得る。処理ユニット102は、しきい値tilefenceopカウントメトリックが到達されるまで、新しい命令の発行を防止するようscalarfenceop命令を実行し得る。
【0055】
図4Aは、例示的な入力アクティベーションテンソル404、例示的な重みテンソル406および例示的な出力テンソル408を示す。
図4Bは、内積計算またはマトリックス乗算に関係のあるテンソル計算を実行するよう、処理ユニット102によって実行され得る例示的なディープループネスト402を示す。
図4Aでは、計算は、出力テンソル408の形態で出力/結果を生成するよう、1つ以上の計算サイクルでのアクティベーションテンソル404とパラメータ/重みテンソル406との乗算を含み得る。
【0056】
各テンソル404,406,408は、x、yおよびz次元平面に亘って行列フォーマットで配される複数のデータエレメントを含み得る。アクティベーションは、アクティベーションテンソル404のエレメントに対応する第1のバンク112のそれぞれのメモリアドレス位置から読み出され得る。同様に、重みは、重みテンソルのエレメントに対応するそれぞれのメモリアドレス位置において第2のバンク114から読み出され得る。いくつかの実現例では、処理ユニット102は、ネスト化ループプログラムについて記憶媒体104のあるメモリユニット(たとえばROM/EEPROMメモリユニット)に格納されたプログラムコードを実行し得、これにより、TTU106が、アクティベーションテンソル404および重みテンソル406のそれぞれのエレメントに対応するメモリアドレス位置へアクセスする。処理ユニット102は、部分的にループネストプログラムを実行することにより、1つ以上のテンソル計算を実行し得、これにより所与の次元についてテンソルエレメントをトラバースする複数のループをインスタンス化する。
【0057】
TTU106がアクティベーションテンソル404および重みテンソル406をトラバースすると、テンソル404におけるx次元データエレメントからの単一のアクティベーションを含む乗算オペレーションが個々に、たとえば特定の重みテンソル406のkx次元における重みの行(複数のデータエレメント)と乗算される。これらの乗算オペレーションは、出力テンソル408のzo次元における第1のx行に対応する出力の行を作り出し得る。一般に、MACオペレータ108は、内積計算に関係のある算術オペレーションを含むテンソル計算を実行し得る。入力アクティベーションは、単一のMACオペレータ108によるそれぞれのアクセスについて第1のバンク112から一つずつ提供される。MACオペレータ108は、出力テンソル408のそれぞれのデータエレメントに対応する単一の出力アクティベーション値を作り出すよう、入力アクティベーションを第2のバンク114からアクセスされる重みと乗算する。
【0058】
図4Bでは、例示的なディープループネスト402が示されており、最も内側のループ(zo)におけるMACオペレーションを含んでいる。アクティベーションテンソル404に対応する入力次元は[x,y,zi]として示され、重みテンソル406に対応するフィルタ次元は[x,y,zi,zo]として示され、出力テンソル408に対応する出力次元は[x,y,zo]として示される。したがって、ディープループネスト402は、テンソル404,406のさまざまな次元に亘る計算に基づいて出力[x][y][zo]によって示される出力テンソル408を特定する。一般に、ディープループネスト402は、N次元のテンソルをトラバースするためにネスト化ループを処理することによりテンソル計算を実行するよう、システム100によって実行され得るソフトウェアアルゴリズムを提供する。1つの例示的な計算処理において、各ループは、対応するN次元のテンソルの特定の次元をトラバースすることを担い得る。したがって、ディープループネスト402は、複数の計算タイル内で同時に実行され得る1つ以上のテンソル計算の表現を提供する。
【0059】
代替的な実現例では、出力テンソル408の変動を作り出すディープループネスト402の他の順序が存在する場合がある。システム100は、任意の順序でアクティベーションテンソル404および重みテンソル406をトラバースすることを可能にするデータ値の範囲を含むディープループネスト402をインスタンス化するための命令を受け取り得る。1つ以上のループが、システム100において、空間的に展開され得る。いくつかの実現例では、xxおよびyyループネストは1つ以上の計算タイルに亘って展開され得、これにより、異なる計算タイルが、異なる層パーティションに関連付けられる推論ワークロードを処理することを可能にする。例示的なディープループネスト402において、サイクルごとに読み出されるアクティベーションと、zi*kx*kyサイクルごとに読み出される部分和とが存在し得る。
【0060】
ループネストの構造(たとえば内側および外側ループの#)は、命令セット103を介してシステム100に提供される命令のデータ値の1つ以上に基づいて定義され得る。畳み込み層内で発生する例示的な計算は、所与の層について推論ワークロードを計算するためにオペレーションをエンコードする命令の実行を記述する基礎として使用され得る。畳み込み層計算は、三次元(3D)テンソルの二次元(2D)空間畳み込みを含み得る。畳み込み層のための計算は、3Dアクティベーションテンソル404と少なくとも1つの3Dフィルタ(重みテンソル406)との間で2D空間畳み込みを実行することを含み得る。
【0061】
この計算については、深さ次元に沿った内積の和が存在する。3D入力に対して1つの3Dフィルタ406を畳み込むことによって、2D空間面が生成される。示されるように、3D入力テンソル404が畳み込まれる必要のある複数の3Dフィルタが存在し得る。
計算の結果、3Dテンソル出力408が得られる。畳み込み層についての計算が記載されるが、他のニューラルネットワーク層についての計算オペレーションをエンコードする1つ以上の命令が、さらにこの明細書に記載される教示に基づいて生成され得る。
【0062】
一般に、単一の計算タイルが複数のMACオペレータ108を含む場合、オペレータは、各々が単一のアクティベーション入力を共有してそれぞれの計算を実行することにより、集合的にシングルインストラクションマルチプルデータ(SIMD: single instruction multiple data)機能を提供する。SIMDは一般に、(ディープループネストに基
づいて)すべてのパラレルユニット(単一のシステム100における複数のMACオペレータ108)が同じ命令を共有することを意味するが、各MACオペレータ108は、テンソル404および406の異なるデータエレメントに対して命令を実行する。1つの基本的な例において、1サイクルにおいてアレイ[6,8,10,12]を得るためにエレメントワイズにアレイ[1,2,3,4]および[5,6,7,8]を加算することは典型的に、4つの算術ユニットが各エレメントに対してオペレーションを実行することを必要とする。SIMDを使用することによって、上記4つのユニットは、同じ命令(たとえば、「加算(add)」)を共有し、パラレルで計算を実行し得る。tensoropをル
ープネストの形態でエンコードする単一の命令は、多次元テンソルのあるデータエレメントに関連付けられる推論ワークロードを計算するよう、1つ以上のシステム100に提供され得る。したがって、システム100は、先行する方法に対して、テンソル計算におけるアクセラレーションおよびパラレル性の向上を提供する。
【0063】
システム100のアクセラレ-タファンクションは少なくとも2つのタイプのパラレル性に対応する。第1のタイプのパラレル性は、ディープネストループ402の最も内側ループの空間的展開を通じて公開(expose)される。システム100はSIMD機能を含んでいるので、ディープループネスト402の最も内側のループ境界は、リニアユニット(たとえば複数のMACのセル)におけるMACオペレータ108の数に固定され得る。パラレル性の第2の局面は、各々がディープループネスト402を実行するが異なる部分上に存在する複数の計算タイルが、特定のニューラルネットワーク層についてテンソル計算を行う構成を有することにより、公開される。アクセラレ-タデバイスにおける構成可能な数のタイルと、各タイル内における構成可能な数のMACオペレータとが存在し得る。
【0064】
いくつかの実現例では、プログラマまたはデベロッパは、たとえばアクティベーション入力バンド幅を低減し、かつ、部分和読出バンド幅を増加するために、特定のループネストを詳述または構築することを選択し得る。これは、代替的な態様でディープループネスト402を記述または構築することによりなされ得る。テンソル計算を促進するためのこの明細書に記載されるディープループネストは、非常にフレキシブルであり、特定の問題セットを適合するように所望のように構成され得る。この明細書に記載されるニューラルネットワークおよび計算タイル(システム100)は、8つのディープループネスト計算構造までをサポートし得るので、最も良好に局所性(locality)を活用し、かつ、全体的なバンド幅要件を低減するよう、デベロッパが望むように入力および出力はタイル化され得る。
【0065】
図5は、命令によってエンコードされた1つ以上のオペレーションを実行するためにコンピューティングシステム100を使用することによりテンソル計算を実行する例示的な処理500を示すフロー図である。ブロック502において、処理ユニット102は、システム100においてテンソル計算を実行するためのデータ値を特定する命令を受け取る。ブロック504において、当該命令を受け取ることに応答して、処理ユニット102は、複数のループを含むループネストを実行することによりテンソル計算を実行する。上で論じたように、処理ユニット102は、ネスト化ループプログラムについてのプログラムコードを実行するよう、(命令セット103に関連付けられる命令とは異なる)命令にア
クセスし得る。その後、処理ユニット102は、TTU106が、アクティベーションテンソル404および重みテンソル406のそれぞれのエレメントに対応するメモリアドレス位置にアクセスするようプログラムコードを実行し得る。
【0066】
ブロック506において、ループネストが層タイプに基づく定義された構造を有する実現例の場合、命令セット103は、当該層のための層タイプおよびループネスト構造を示す特定のデータ値(たとえば1つ以上のOPコード)を含み得る。たとえば、
図3のオペレーション302によって示されるように、命令セット103は、畳み込み層およびFC層についてのテンソル計算のためのtensoropに対応する1つ以上のOPコード(たとえばOPコード0)を含み得る。したがって、命令セット103によって提供されるtensorop命令に関連付けられるデータ値を使用して、処理ユニット102は、命令のデータ値に基づいてループネスト構造を定義し得る。ループネスト構造がひとたび定義されると、処理ユニット102は、部分的にループネストプログラムを実行することにより、1つ以上のテンソル計算を実行し、これによりアクティベーションテンソル404および重みテンソル406の所与の次元についてテンソルエレメントをトラバースするループをインスタンス化する。
【0067】
ブロック508において、処理ユニット102によって、個々の出力アクティベーション116が出力テンソル408のそれぞれのデータエレメントに書き込まれる。さらに、ブロック508において、処理ユニット102は、その後のテンソル計算のために1つ以上の他の計算タイルにテンソル計算の結果が書き込まれるよう、DMAop.outfeedオペレーションを実行し得る。代替的には、DMAop.outfeedオペレーションは、第1の計算タイルにおけるメモリバンク112,114から分類器タイル(たとえば第2の計算タイル)に、ならびに、分類器タイルから外部コントローラおよび外部I/Oデバイスに、推論ワークロードの結果(出力)を移動し得る。
【0068】
この明細書に記載される主題の実施形態および機能的なオペレーションは、デジタル電子回路、有形的に具現化されたコンピュータソフトウェアもしくはファームウェア、この明細書において開示される構造およびそれらの構造的等価物を含むコンピュータハードウェア、または、それらの1つ以上の組み合わせにおいて実現され得る。この明細書に記載される主題の実施形態は、1つ以上のコンピュータプログラムとして実現され得る。すなわち、データ処理装置による実行またはデータ処理装置のオペレーションを制御するための実行のために有形的で一時的でないプログラムキャリア上でエンコードされるコンピュータプログラム命令の1つ以上のモジュールとして実現され得る。代替的または付加的には、プログラム命令は、たとえば、マシンにより生成された電気信号、光学信号または電磁信号といった人為的に生成された伝播信号上でエンコードされ得る。当該人為的に生成された伝播信号は、データ処理装置による実行のために好適なレシーバ装置への送信のために情報をエンコードするように生成される。コンピュータ記憶媒体は、マシン読取可能なストレージデバイス、マシン読取可能なストレージ基板、ランダムもしくはシリアルアクセスメモリデバイス、または、それらの1つ以上の組み合わせであり得る。
【0069】
コンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーション、モジュール、ソフトウェアモジュール、スクリプトまたはコードと称され得るかまたは記載され得る)は、コンパイルもしくは解釈された言語または宣言言語もしくは手続言語を含む任意の形態のプログラミング言語で記述され得、スタンドアロンプログラム、または、モジュール、コンポーネント、サブルーチン、もしくは、コンピューティング環境での使用に好適な他のユニットを含む任意の形態でデプロイされ得る。コンピュータプログラムは、ファイルシステムにおけるファイルに対応し得るが、対応する必要はない。プログラムは、たとえば、マークアップ言語文書に格納される1つ以上のスクリプト、当該プログラムに専用の単一のファイルに格納される1つ以上のスクリプト、または、たとえば
コードの1つ以上のモジュール、サブプログラムもしくは部分を格納するファイルのような複数の協調されたファイルに格納される1つ以上のスクリプトといった、他のプログラムまたはデータを保持するファイルの部分に格納され得る。コンピュータプログラムは、1つのコンピュータ上で実行されるようデプロイされ得るか、または、1つの場所に位置するか、もしくは、複数の場所に亘って分散されて通信ネットワークによって相互接続される複数のコンピュータ上で実行されるようデプロイされ得る。
【0070】
この明細書に記載される処理および論理フローは、1つ以上のプログラム可能なコンピュータが、入力データに対して動作し出力を生成することによってファンクションを実行するように1つ以上のコンピュータプログラムを実行することによって実行され得る。処理および論理のフローは、たとえばFPGA(フィールドプログラマブルゲートアレイ)、ASIC(特定用途向け集積回路)、GPGPU(汎用グラフィックスプロセッシングユニット)または、他のいくつかのタイプのプロセッサといった専用論理回路によって実行され得、また、装置も、当該専用論理回路として実現され得る。
【0071】
コンピュータプログラムの実行に好適なコンピュータは、例として、汎用もしくは専用マイクロプロセッサ、その両方、または、任意の他の種類の中央演算処理装置に基づき得る。一般に、中央演算処理装置は、リードオンリメモリ、ランダムアクセスメモリ、またはその両方から命令およびデータを受け取る。コンピュータの必須の要素は、命令を実施または実行するための中央演算処理装置と、命令およびデータを格納するための1つ以上のメモリデバイスとである。一般に、コンピュータはさらに、たとえば磁気ディスク、光磁気ディスクまたは光ディスクといったデータを格納するための1つ以上のマスストレージデバイスを含むか、または、当該1つ以上のマスストレージデバイスからデータを受け取るか、1つ以上のマスストレージデバイスへデータを転送するか、もしくは、その両方を行うために動作可能に結合される。しかしながら、コンピュータはそのようなデバイスを有する必要はない。さらに、コンピュータは、たとえば、携帯電話、携帯情報端末(PDA)、モバイルオーディオもしくはビデオプレーヤー、ゲーム機、全地球測位システム(GPS)レシーバ、または、たとえばユニバーサルシリアルバス(USB)フラッシュドライブのようなポータブルストレージデバイスといった別のデバイスに埋め込まれ得る。
【0072】
コンピュータプログラム命令およびデータを格納するために好適なコンピュータ読取可能媒体は、例として、たとえばEPROM、EEPROMおよびフラッシュメモリデバイスといった半導体メモリデバイスと、たとえば内部ハードディスクまたはリムーバブルディスクといった磁気ディスクと、光磁気ディスクと、CDROMおよびDVD-ROMディスクとを含む不揮発性メモリ、媒体およびメモリデバイスのすべての形態を含む。プロセッサおよびメモリは、専用論理回路によって補助され得るか、または、専用論理回路に統合され得る。
【0073】
本明細書に記載の主題の実施形態は、バックエンドコンポーネントをたとえばデータサーバとして含むコンピューティングシステムにおいて実現され得るか、または、ミドルウェアコンポーネントをたとえばアプリケーションサーバとして含むコンピューティングシステムにおいて実現され得るか、または、たとえば、ユーザが本明細書に記載の主題の実現例とインタラクションする際に使用可能なグラフィックユーザインターフェイスもしくはウェブブラウザを有するクライアントコンピュータといったフロントエンドコンポーネントを含むコンピューティングシステムにおいて実現され得るか、または、そのような1つ以上のバックエンド、ミドルウェア、もしくはフロントエンドコンポーネントの任意の組合せを含むコンピューティングシステムにおいて実現され得る。システムのコンポーネントは、たとえば通信ネットワークといった任意の形態または媒体のデジタルデータ通信によって相互に接続され得る。通信ネットワークの例として、ローカルエリアネットワー
ク(「LAN」)と、たとえばインターネットのようなワイドエリアネットワーク(「WAN」)とが挙げられる。
【0074】
コンピューティングシステムはクライアントおよびサーバを含み得る。クライアントおよびサーバは一般に互いにリモートであり、典型的に通信ネットワークを介してインタラクションする。クライアントとサーバとの関係は、それぞれのコンピュータ上で実行されて互いにクライアント-サーバ関係を有するコンピュータプログラムによって生じる。
【0075】
さらに別の実現例が以下の例において要約される。
例1:コンピュータによって実施される方法であって、処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、前記命令を受け取ることに応答して、前記処理ユニットが、複数のループを含むループネストを実行することによって、前記テンソル計算を実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの1つ以上に基づいて定義される、コンピュータによって実施される方法。
【0076】
例2:前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、例1に記載の方法。
【0077】
例3:前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも1つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、例2に記載の方法。
【0078】
例4:前記命令は、前記処理ユニットをテンソルの次元の少なくとも1つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも1つのインデックスの部分である、例2または3に記載の方法。
【0079】
例5:前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも1つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、例2または3に記載の方法。
【0080】
例6:前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット(TTU)に少なくとも1つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記TTUに発行させることを含む、例5に記載の方法。
【0081】
例7:前記処理ユニットが前記TTUに少なくとも1つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用される参照されたアレイエレメントのためのアドレスを前記TTUのアレイレファレンスに生成させることをさらに含む、例5に記載の方法。
【0082】
例8:前記命令は、前記TTUに関連付けられるアレイレファレンスのためのアドレスを生成するよう、第2のTTUカウンタと合計される第1のTTUカウンタを示す、例7に記載の方法。
【0083】
例9:前記テンソル計算を実行することは、前記処理ユニットが、前記テンソル計算の実行に関連付けられる1つ以上のオペランドを管理する第1の同期プロシージャを実行す
ることを含み、オペランドを管理することは、同期フラグ条件に基づいて1つ以上のループネストをストールすることを含む、例1~8のいずれか1項に記載の方法。
【0084】
例10:前記テンソル計算を実行することは、前記処理ユニットが、前記ループネストの特徴に関連付けられるカウンタをインクリメントすることを管理する第2の同期プロシージャを実行することを含む、例9に記載の方法。
【0085】
例11:電子システムであって、前記電子システムに配置され1つ以上の処理デバイスを含む処理ユニットと、命令を格納するための1つ以上のマシン読取可能なストレージデバイスとを含み、前記命令は、動作を実行するように前記1つ以上の処理デバイスによって実行可能であり、前記動作は、テンソル計算を実行するためのデータ値を特定する命令を前記処理ユニットが受け取ることと、前記命令を受け取ることに応答して、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含み、前記ループネストの構造は、前記命令の前記データ値のうちの1つ以上に基づいて定義される、電子システム。
【0086】
例12:前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、例11に記載の電子システム。
【0087】
例13:前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも1つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、例12に記載の電子システム。
【0088】
例14:前記命令は、前記処理ユニットをテンソルの次元の少なくとも1つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも1つのインデックスの部分である、例12または13に記載の電子システム。
【0089】
例15:前記命令は、前記処理ユニットに記憶媒体におけるアレイの少なくとも1つのメモリアドレスにアクセスさせ、前記アレイの前記メモリアドレスは、前記テンソル計算の実行中に前記処理ユニットによって読み出される変数を含む、例12または13に記載の電子システム。
【0090】
例16:前記テンソル計算を実行することは、前記処理ユニットが、テンソルトラバーサルユニット(TTU)に少なくとも1つの制御信号を提供して、前記テンソル計算の実行中に前記ループネストを実行する際に使用されるループインデックスを前記TTUに発行させることを含む、例15に記載の電子システム。
【0091】
例17:処理ユニットによって実行可能な命令を含む一時的でないコンピュータ読取可能記憶媒体であって、前記命令は、その実行の際には、前記処理ユニットが、テンソル計算を実行するためのデータ値を特定する命令を受け取ることと、前記命令を受け取ることに応答して、複数のループを含むループネストを実行することによって、前記テンソル計算を前記処理ユニットが実行することとを含む動作を前記処理ユニットに実行させ、前記ループネストの構造は、前記命令の前記データ値のうちの1つ以上に基づいて定義される、一時的でないコンピュータ読取可能記憶媒体。
【0092】
例18.前記テンソル計算は、ニューラルネットワーク層の計算の少なくとも一部分である、例17に記載の一時的でないコンピュータ読取可能記憶媒体。
【0093】
例19:前記命令によって特定される前記データ値は、前記ニューラルネットワーク層のタイプを特定する少なくとも1つの値を含んでおり、前記ループネストの前記構造は、前記ニューラルネットワーク層の前記タイプによって少なくとも部分的に定義される、例18に記載の一時的でないコンピュータ読取可能記憶媒体。
【0094】
例20:前記命令は、前記処理ユニットをテンソルの次元の少なくとも1つのエレメントにアクセスさせ、前記エレメントは、前記テンソル計算の実行中に前記ループネストを実行する際に使用される少なくとも1つのインデックスの部分である、例18に記載の一時的でないコンピュータ読取可能記憶媒体。
【0095】
この明細書は、多くの特定の実現例の詳細を含んでいるが、これらは、如何なる発明の範囲に対する限定として解釈されるべきでなく、または、特許請求され得るものの限定として解釈されるべきでなく、むしろ特定の発明の特定の実施形態に特有であり得る特徴の記載として解釈されるべきである。また、別個の実施形態のコンテキストでこの明細書に記載されるある特徴は、単一の実施形態における組み合わせで実現され得る。反対に、単一の実施形態のコンテキストで記載されるさまざまな特徴も、別々にまたは任意の好適なサブコンビネーションで、複数の実施形態において実現され得る。さらに、特徴はある組み合わせで作用するように上で記載され得、また最初はそのように特許請求され得るが、ある特許請求された組み合わせからの1つ以上の特徴が、ある場合において当該組み合わせから削除され得、当該特許請求された組み合わせは、サブコンビネーションまたはサブコンビネーションの変形例に向けられ得る。
【0096】
同様に、オペレーションは特定の順序で図面において示されているが、これは、望ましい結果を達成するために、そのようなオペレーションが、示された特定の順序もしくはシーケンシャルな順序で実行されること、または、すべての示されたオペレーションが実行されることを必要とすると理解されるべきでない。ある状況では、マルチタスクおよびパラレルプロセッシングが有利であり得る。さらに、上で記載された実施形態におけるさまざまなシステムモジュールおよびコンポーネントの分離は、すべての実施形態においてそのような分離を必要とすると理解されるべきでなく、記載されたプログラムコンポーネントおよびシステムが、一般に単一のソフトウェアプロダクトにおいてともに統合され得るか、または、複数のソフトウェアプロダクトへパッケージ化され得ると理解されるべきである。
【0097】
主題の特定の実施形態が記載された。他の実施形態は添付の請求の範囲内である。たとえば、請求項において記載されるアクションは、異なる順序で実行され得、それでも望ましい結果を達成し得る。一例として、添付の図面に示す処理は、所望の結果を達成するために、示されている特定の順序、またはシーケンシャルな順序を必ずしも必要としない。ある実現例では、マルチタスクおよびパラレルプロセッシングが有利であり得る。