(57)【要約】  シストリックアレイの処理素子（ＰＥ）は、同じ重みを使用して、入力データセットの２つ以上の連続するデータ要素に対して並列にニューラルネットワーク演算を実行し得る。よって、出力データセットに対応する２つ以上の出力データ要素が並列に生成され得る。入力データセットのサイズ及び入力データ型に基づいて、シストリックアレイは単一のデータ要素又は複数のデータ要素を並列に処理し得る。【選択図】図１
2021508895.tif 000002
【特許請求の範囲】
【請求項１】
第１のインターフェースを介して２つの連続するＸｉｎ要素を同時に受信し、前記２つの連続するＸｉｎ要素が、第１のＸｉｎ要素と第２のＸｉｎ要素とを含み、
第２のインターフェースを介して２つのＹｉｎ要素を同時に受信し、前記２つのＹｉｎ要素が、第１のＹｉｎ要素と第２のＹｉｎ要素とを含み、
第１の中間結果を生成するために前記第１のＸｉｎ要素及び重み値に対して、また第２の中間結果を生成するために前記第２のＸｉｎ要素及び前記重み値に対して同時に第１の算術演算を実行し、
第１のＹｏｕｔ要素を生成するために前記第１の中間結果及び前記第１のＹｉｎ要素に対して、また第２のＹｏｕｔ要素を生成するために前記第２の中間結果及び前記第２のＹｉｎ要素に対して同時に第２の算術演算を実行する
ように構成された、ニューラルネットワーク演算のための処理素子（ＰＥ）
を備える、装置。
【請求項２】
前記第１の算術演算が乗算演算を含み、前記第１の中間結果が第１の乗算器を使用して生成され、前記第２の中間結果が第２の乗算器を使用して生成される、請求項１に記載の装置。
【請求項３】
前記第２の算術演算が加算演算を含み、前記第１のＹｏｕｔ要素が第１の加算器を使用して生成され、前記第２のＹｏｕｔ要素が第２の加算器を使用して生成される、請求項２に記載の装置。
【請求項４】
前記第１の算術演算が乗算演算を含み、前記第２の算術演算が加算演算を含み、前記第１の算術演算及び前記第２の算術演算が、融合積和演算器を使用して単一のステップで実行される、請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記ＰＥが、行及び列に構成された二次元アレイの複数のＰＥのうちの１つであり、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされる、請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記第１のインターフェースが前記アレイの行に関連し、前記ＰＥにおける前記第１のＸｉｎ要素及び第２のＸｉｎ要素が、前記行に関連する入力データセットに対応する、請求項５に記載の装置。
【請求項７】
前記第２のインターフェースが前記アレイの列に関連し、前記ＰＥにおける前記第１のＹｏｕｔ要素及び前記第２のＹｏｕｔ要素が、前記アレイの最後の行における前記列に関連する出力データセットに対応する、請求項５に記載の装置。
【請求項８】
前記アレイに接続された計算コントローラをさらに備え、前記計算コントローラが、前記入力データセットの入力データ型及びサイズに基づいて前記アレイの動作モードを有効にするように構成される、請求項７に記載の装置。
【請求項９】
前記重み値が、前記第１のインターフェース又は前記第２のインターフェースを使用して前記ＰＥにロードされる、請求項１から８のいずれか一項に記載の装置。
【請求項１０】
状態バッファをさらに備え、各行の第１のＰＥが前記状態バッファに通信可能に接続され、前記状態バッファが前記アレイの各行における前記それぞれの入力データセットを格納するように構成される、請求項１から９のいずれか一項に記載の装置。
【請求項１１】
前記アレイの各行における前記それぞれの入力データセットが、ホストデバイスからホストインターフェースを介して前記状態バッファによって受信される、請求項１０に記載の装置。
【請求項１２】
出力バッファをさらに備え、各列の最後のＰＥが前記出力バッファに通信可能に接続され、前記出力バッファが、前記最後の行の各列に対応する前記第１のＹｏｕｔ要素及び前記第２のＹｏｕｔ要素を格納するように構成される、請求項１から１１のいずれか一項に記載の装置。
【請求項１３】
処理素子（ＰＥ）の二次元アレイ内のＰＥによって、第１のＸｉｎ要素及び第２のＸｉｎ要素を同時に受信するステップであって、前記アレイの前記ＰＥが行及び列に構成され、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、前記第１のＸｉｎ要素及び前記第２のＸｉｎ要素が、所与の行における入力データセット内の連続する要素である、ステップと、
前記ＰＥによって、所与の列における第１のＹｉｎ要素及び第２のＹｉｎ要素を同時に受信するステップと、
前記ＰＥによって、第１の乗算結果を生成するために前記第１のＸｉｎ要素に対して重み値を、また第２の乗算結果を生成するために前記第２のＸｉｎ要素に対して前記重み値を同時に乗算する乗算演算を実行するステップと、
前記ＰＥによって、第１のＹｏｕｔ要素を生成するために前記第１の乗算結果に対して前記第１のＹｉｎ要素を、また第２のＹｏｕｔ要素を生成するために前記第２の乗算結果に対して前記第２のＹｉｎ要素を同時に加算する加算演算を実行するステップであって、前記アレイの最後の行の前記第１のＹｏｕｔ要素及び前記第２のＹｏｕｔ要素が、前記所与の列における出力データセットに対応する、ステップと
を含む、方法。
【請求項１４】
前記第１のＸｉｎ要素及び前記第２のＸｉｎ要素を受信する、前記ステップの前に、前記所与のＰＥにおける前記重み値を受信するステップと、
前記重み値をレジスタに格納するステップと
をさらに含む、請求項１３に記載の方法。
【請求項１５】
前記ＰＥが第１のＰＥであり、前記所与の行が第１の行であり、前記所与の列が第１の列であり、前記方法が、
前記第１のＸｉｎ要素及び前記第２のＸｉｎ要素を、前記アレイの第２の列かつ前記第１の行にある第２のＰＥに同時に提供するステップ
をさらに含む、請求項１３又は１４に記載の方法。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]人工ニューラルネットワークは、生物学的ニューラルネットワークに基づくアーキテクチャを備えたコンピューティングシステムである。人工ニューラルネットワークは、特定のコンピューティングタスクをどのように実行するかについて学習するように訓練データを用いて訓練され得る。
【０００２】
[0002]ニューラルネットワークは、一組の処理素子を備え得る。各処理素子は、入力データの一部を処理して出力を生成でき、最終決定は、一組の処理素子の出力の組み合わせに基づいて生成され得る。処理の一部として、各処理素子は、例えば浮動小数点数の乗算及び加算などの一式の算術演算を実行し得る。ニューラルネットワークは、同時算術演算を実行できる処理素子のアレイを含む、シストリックアレイなどの回路及びデータパスによって実装され得る。シストリックアレイの使用率及び処理速度は、シストリックアレイがニューラルネットワーク層の入力及び出力にどのようにマッピングされるかに依存し得る。
【０００３】
[0003]図面を参照しながら、本開示による様々な実施形態を説明する。
【図面の簡単な説明】
【０００４】
【図１】シストリックアレイの例示的な実装形態を示す図である。
【図２】データを処理するために本明細書に開示される技法を使用し得る例示的な分類デバイスを示す図である。
【図３】本明細書に開示される技法を使用し得る予測モデルの一例を示す図である。
【図４Ａ】畳み込み層の操作を示す図である。
【図４Ｂ】畳み込み層の操作を示す図である。
【図５Ａ】一組のフィルタを使用する、一組の画像に対する畳み込み層演算の一例を示す図である。
【図５Ｂ】Ｃ組の入力データ及びＭ組のフィルタによる畳み込み層演算の別の例を示す図である。
【図６】本開示の技術のいくつかの実施形態によるニューラルネットワーク演算のための装置を示す図である。
【図７】本開示の技術のいくつかの実施形態による計算エンジンの内部構造を示す図である。
【図８】本開示の技術のいくつかの実施形態による処理素子（ＰＥ）のブロック図である。
【図９Ａ】本開示の技術の特定の実施形態による、シストリックアレイを通るサイクルごとの計算を示す図である。
【図９Ｂ】本開示の技術の特定の実施形態による、シストリックアレイを通るサイクルごとの計算を示す図である。
【図９Ｃ】本開示の技術の特定の実施形態による、シストリックアレイを通るサイクルごとの計算を示す図である。
【図９Ｄ】本開示の技術の特定の実施形態による、シストリックアレイを通るサイクルごとの計算を示す図である。
【図１０】本開示の技術の特定の実施形態による、シストリックアレイの効率的な利用のためにＰＥによって実行される方法を示す図である。
【図１１】本開示の特定の態様による計算デバイスの一例を示す図である。
【発明を実施するための形態】
【０００５】
[0016]以下の説明では、様々な実施形態を説明する。説明の目的で、実施形態が十分に理解されるようにするために、特定の構成及び詳細が示される。ただし、当業者には明らかなはずであるが、実施形態は特定の詳細なしで実施され得る。さらに、説明されている実施形態を不明瞭にすることを避けるために、周知の特徴は省略又は簡略化される場合がある。
【０００６】
[0017]本開示の技術の実施形態は、ニューラルネットワーク演算のためにシストリックアレイを効率的に利用するためのシステム及び方法を提供し得る。シストリックアレイは、ディープニューラルネットワークの作業量を増やすために使用され得る。シストリックアレイは、二次元グリッドに通常構成される複数の処理素子（ＰＥ）を備え得る。特定の実施形態によれば、シストリックアレイにおける各ＰＥは、ＰＥの全計算能力を利用するために、入力データセットからの複数の入力データ要素を同時に処理することができる。加えて、いくつかの実施形態は、各出力データセットに対応する２つ以上の出力データ要素を同時に提供し得、これにより、シストリックアレイの性能を改善することができる。
【０００７】
[0018]ニューラルネットワークは、脳内のニューロンの広大なネットワークと同様に、相互接続された複数のニューロン又はＰＥを備え得る。ＰＥは、例えば、入力層、いくつかの中間層（隠れ層としても知られる）、及び出力層を含む層に分割され得る。入力層の各ＰＥは、入力データセットの要素を受信し、その要素を、出力への要素の影響度を示す重み（フィルタとも呼ばれる）を用いてスケーリングし得る。中間層のＰＥは、入力層の各ＰＥから受信したスケーリングされた要素を組み合わせて、一組の中間出力を計算し得る。例えば、中間層の各ＰＥは、要素と重みとの積の和を計算し、その和に活性化関数を適用して中間出力を生成し得る。１つの中間層の各ＰＥからの中間出力は、次の中間層の中間出力を決定するための、投票の影響を示す重みに関連する活性化された投票（又は無投票）と見なされ得る。出力層は、最後の中間層からのスケーリングされた中間出力の和を生成し、スケーリングされた中間出力の和が閾値を超えるか否かに基づいて２値出力（例えば、「はい」又は「いいえ」）を生成し得る。層どうしのスケーリングされた要素を組み合わせることに起因して、上位層（例えば、出力層、出力層の直前の中間層など）のサイズは、通常、下位層（例えば、入力層、入力層の直後の中間層など）のサイズよりも小さい。
【０００８】
[0019]畳み込みニューラルネットワーク（ＣＮＮ）は、一般に、フィードフォワード人工ニューラルネットワークである。ディープフィードフォワードニューラルネットワークは、複数の隠れ層を備えることができ、ある層からの出力は、次の層への入力として使用され得る。よって、一般に、情報は前方に送られる。ＣＮＮ人工ニューラルネットワークは、視覚画像の解析にうまく適用されている。ＣＮＮは、元の画像を層ごとに元の画素値から最終分類スコアに変換するように構成され得る。畳み込みニューラルネットワーク（ＣＮＮ）は、いくつかの畳み込み層とサブサンプリング層とを備えることができ、場合によりその後に１つ又は複数の全結合層が続く。
【０００９】
[0020]入力画像の幅及び高さにわたって（例えば、スライディングウィンドウを使用して）各フィルタを畳み込むことができ、それぞれのドット積が、フィルタのエントリと所与の位置における入力画素との間で計算され得る。フィルタが入力画像の幅及び高さにわたってスライドされると、すべての空間位置でそのフィルタの応答を提供し得る二次元特徴マップ（例えば、活性化マップ）が生成され得る。次に、各特徴マップは、通常、隣接する領域にわたって平均又は最大プーリングでサブサンプリングされ得る。実装形態に基づいて、サブサンプリング層の前又は後に、追加のバイアス及びシグモイド非線形性が各特徴マップに適用され得る。活性化マップが深さ次元に沿って積み重ねられて、出力特徴マップが作成され得る。プーリング層は、空間次元、例えば幅及び高さに沿ったダウンサンプリング操作に使用され得る。全結合層は、最終的な分類スコアを提供するために使用され得る。
【００１０】
[0021]入力データ（例えば、画像の画素）及び重みは、ホストサーバから受信され得る。各ＰＥは、入力データ及び重みに対する加算及び乗算を含む同時算術演算を実行可能であり得る。次に、ＰＥは、さらなる処理、例えば、正規化及び活性化のために、入力データ及び重みをシストリックアレイの他の要素に渡し得る。図１は、ネットワーク状に接続されたＰＥのアレイを含み得るシストリックアレイの一例を示している。
【００１１】
[0022]図１は、４×４シストリックアレイ１００を示している。例えば、シストリックアレイ１００は、各行に４つのＰＥを含み、各列に４つのＰＥを含み得る。シストリックアレイ１００は、各行及び各列に任意の数のＰＥを含み得ることを理解されたい。さらに、各ＰＥは、行入力バス１０２と、列入力バス１０４と、列出力バス１０６と、行出力バス１０８とを備え得る。ＰＥは、行入力バス１０２を介して同じ行の左のＰＥから（又は外部回路から）入力を受信し得る。ＰＥはまた、列入力バス１０４を介して同じ列の上のＰＥから（又は外部回路から）入力を受信し得る。ＰＥは、入力に基づいて算術演算を実行し、算術演算の結果を、列出力バス１０６を介して同じ列の下のＰＥ（又は外部回路）に送信し得る。ＰＥはまた、行入力バス１０２を介して受信された入力を、行出力バス１０８を介して同じ行の右のＰＥに転送し得る。
【００１２】
[0023]シストリックアレイ１００は、ニューラルネットワークの処理素子における乗算及び加算を含む算術演算を実行するように構成され得る。例えば、各ＰＥは、乗算器及び加算器などの演算ユニットを備え得る。図１の例では、ＰＥの各行は、１組の入力データを処理するように構成され得、ＰＥの各列は、所与の列の各ＰＥが受信した複数組の入力データに基づいて１組の出力データを生成し得る。一実装形態では、ＰＥの列１１２（左端の列）は、４組の入力データを受信し、入力データの各組が、１行のＰＥによって処理され得る。列１１２内の各ＰＥは、行入力バス１０２を介して受信した対応する入力データセットから、入力値及び関連する重み値を取得し、入力値に重み値を乗じて、スケーリングされた入力を生成し得る。任意の列（列１１２を含む）内のＰＥによって生成されたスケーリングされた入力は、各ＰＥの加算器によって累積され得る。例えば、（列１１２の）ＰＥ１１２ａは、（第１の入力データセットから）第１のスケーリングされた入力を生成し、第１のスケーリングされた入力を部分和として列出力バス１０６を介してＰＥ１１２ｂに送信し得る。ＰＥ１１２ｂはまた、（第２の入力データセットから）第２のスケーリングされた入力を生成し、第２のスケーリングされた入力を部分和に加え得る。次に、第１のスケーリングされた入力及び第２のスケーリングされた入力と共に累積された更新された部分和は、列出力バス１０６を介してＰＥ１１２ｃに送信される。部分和は、更新され、列１１２にわたって伝播され、ＰＥ１１２ｄは、４つの入力データセットからスケーリングされた入力の和を生成し得る。さらに、列１１２内の各ＰＥはまた、入力データセットを他のＰＥ列（例えば、列１１４）に伝播させることもでき、これにより、列１１２からの異なる組の重みで入力データセットをスケーリングすることができる。ＰＥの各列は、算術演算（乗算及び加算）を実行して、他の処理素子の出力要素を並列に生成し得る。図１の例では、シストリックアレイ１００は、シストリックアレイ１００の４つの列に対応する４つのＰＥにおける出力要素を並列に生成し得る。
【００１３】
[0024]シストリックアレイ１００は、並列算術演算を可能にすることによりニューラルネットワーク処理をスピードアップすることができるが、シストリックアレイの利用率は、入力データのサイズ（例えば、ビット数）及び処理素子の算術ユニットの処理能力に基づいて変化し得る。一般に、シストリックアレイの処理素子は、サポートされている最高精度の入力データ型で動作するように設計され得る。例として、処理素子は、特定の精度を実現するために１６ビットの固定小数点又は浮動小数点の入力データ型の計算をサポートし得る。ただし、場合によっては、より低い又は低精度のデータ型を使用して、同様の精度又はさらに優れた精度が実現され得る。場合によっては、同じ精度を実現するのに１６ビットの計算を使用する代わりに、８ビットの計算で十分な場合もある。例えば、一部の実装形態をでは、１６ビットの処理素子を使用して８ビットの計算を実行するときに、最上位８ビットが無視され得る。ただし、このような場合、一例として、ＰＥの演算処理能力の半分が利用できず、シストリックアレイの利用率が５０％以下になり得る。場合によっては、ニューラルネットワークの特定の用途（例えば、画像認識）は８ビットのデータ型で性能が向上し、他の特定の用途（例えば、製品の広告やマーケティング）は１６ビットのデータ型で性能が向上することがある。そのような場合、１６ビットデータ型に加えて、より小さなデータ型（例えば、４ビット、８ビット）もサポートできるように、１６ビットデータ型のハードウェアを設計することが望ましい場合がある。よって、ＰＥによってサポートされるビット数よりも少ないビット数を使用する計算のためのシストリックアレイの効率的な利用法が必要とされている。
【００１４】
[0025]本開示の技術の実施形態は、シストリックアレイの効率的な利用のためのシステム及び方法を提供し得る。特定の実施形態では、シストリックアレイの各ＰＥは、入力データセットの入力データ型及びサイズに基づいて、単一の計算又は複数の計算を同時に実行し得る。例えば、入力データセットのサイズがシストリックアレイのサイズ（例えば、８ビット又は１６ビットのＰＥ）よりも相対的に大きい場合、シストリックアレイは、入力データ型（例えば、４ビット、８ビット、１６ビットなど）に基づいて、シストリックアレイを効率的に利用するために複数の計算を並列に実行し得る。このような場合、ＰＥの全計算能力を利用するために、入力データセットからの複数の入力データ要素がＰＥに同時に供給され得る。例えば、２つの８ビット、又は４つの４ビット入力データ要素が、１６ビットの計算能力を持つＰＥに供給され得る。所与のＰＥによって、そのＰＥへのすべての入力に対して同じ重みが使用され得る。重みは、シストリックアレイのすべてのＰＥに順次又は並列にロードされ得る。各ＰＥは、同じ列の次に下位のＰＥに２つ以上の結果を伝播させ得る。各ＰＥはまた、受信した入力データ要素を同じ行内の右側にある別のＰＥに伝播させ得る。よって、シストリックアレイの各ＰＥによって複数の計算を並列に実行することにより、入力データセットを処理する時間を短縮できる。加えて、実施形態は、各出力データセットに対応する２つ以上の出力データ要素を同時に提供し得、これにより、シストリックアレイの性能を改善し得る。いくつかの実施形態は、より大きな入力データセットについてシストリックアレイに重みをロードすることを均すことができるため、より大きな入力データセットについての性能を大幅に改善し得る。
【００１５】
[0026]図２は、データを処理するために本明細書に開示される技法を使用し得る例示的な分類デバイス２００を示している。分類デバイス２００は、例えば、ソフトウェアアプリケーション２０２及び予測モデル２０４を操作して、入力データセットに含まれる情報を予測し、予測に基づいて所定の機能を実行する計算デバイスであり得る。例えば、分類デバイス２００は、画像から特定のオブジェクト（例えば、テキスト、人物など）を識別するために提供される画像認識サービスの一部であり得る。いくつかの実施形態では、入力データセットは、入力特徴マップ要素を含む入力特徴マップと同様であり得る。画像認識サービスは例示のための例として提供されたに過ぎず、本明細書で開示される技法は、例えばテキストベースのデータ処理（例えば、検索クエリの処理）、音声データ処理などを含む他のデータ処理用途に使用され得ることを理解されたい。
【００１６】
[0027]画像認識サービスは、マルチテナントコンピューティングサービスシステムで提供され得る。マルチテナントコンピューティングサービスシステムは、一般に、データをホストし、複数のクライアント又は組織によって仮想マシンインスタンスやベアメタルインスタンス（例えば、サーバハードウェアで直接実行されるオペレーティングシステム）などのインスタンスを実行するために使用され得る複数のサーバを含み得る。大抵の場合、マルチテナントコンピューティングサービスシステムのベアメタル又は仮想マシンインスタンスなどのインスタンスは、クライアントがそれらを必要とするときにクライアントに割り当てられ、それらが不要になるとリソースが他のクライアントに再割り当てされ得るように廃止され得る。本開示では、「テナント」、「クライアント」、及び「顧客」という用語は交換可能に使用され得るが、これらの用語は必ずしも特定のビジネス契約の存在を意味するものではない。「インスタンス」という用語は、例えば、サーバハードウェア上で直接、又は仮想マシンとして実行されるインスタンスを指し得る。異なるタイプのインスタンスは、一般に、異なるハードウェア機能及び／又はハードウェアの構成（例えば、異なる量の使用可能なメモリ及び／又は処理ハードウェア）に対応する。図２の例では、マルチテナントコンピューティングサービスシステムは、クライアントが画像認識サービスを必要とするときに画像認識サービスを提供し、不要になると、画像認識サービスをサポートするリソース（例えば、ソフトウェアアプリケーション２０２へのアクセス、及びソフトウェアアプリケーション２０２を処理するための基礎となるハードウェアリソース）が他のクライアントに再割り当てされ得るように廃止され得る。
【００１７】
[0028]場合によっては、ソフトウェアアプリケーション２０２は、ユーザから画像の画素データを受信し得る。画像は、画素の配列を含み得る。ソフトウェアアプリケーション２０２は、画素データに対して解析を実行し、画像に描かれた１つ又は複数のオブジェクトを予測し得る。解析は、例えば、画素データを一組の所定の特徴データと比較することを含み得る。所定の特徴データは、視覚的画像特徴、非視覚的画像特徴、又は視覚的画像特徴と非視覚的画像特徴との組み合わせに関連するデータを含み得る。以下でより詳細に説明するように、ソフトウェアアプリケーション２０２は、予測を行うために、予測モデル２０４を使用して、画像の画素データに基づいて一組のスコアを計算し得る。次に、ソフトウェアアプリケーション２０２は、スコアに基づいて画像の内容に関する他の情報を判定し得る。例えば、スコアに基づいて、ソフトウェアアプリケーション２０２は、画像が特定のオブジェクト（例えば、人、車、木など）であることを判定し得る。
【００１８】
[0029]予測モデル２０４は、人工ニューラルネットワークの形態であり得る。人工ニューラルネットワークは、複数の処理素子を備えることができ、各処理素子は、入力画素データの一部を処理するように、又は他の処理素子からの中間出力をさらに処理するように構成される。図３を参照しながら、例示的な予測モデルの例を説明する。
【００１９】
[0030]図３は、本明細書に開示される技法を使用し得る予測モデルの一例を示している。図３の例では、予測モデル２０４は、ディープニューラルネットワーク（ＤＮＮ）、畳み込みニューラルネットワーク（ＣＮＮ）、又は任意の適切なニューラルネットワークなどの多層ニューラルネットワーク３００であり得る。予測モデル２０４は、入力層３０２と、中間層３０４及び３０６を含む一組の中間層と、出力層（図３には示さず）とを備え得る。各層は、それぞれの一組の処理素子を備え得る。
【００２０】
[0031]層３０２は、ＰＥ３０２ａ、３０２ｂ、３０２ｃ、…、３０２ｎを備え得る。層３０２は、入力データセット、例えば、画像の異なる部分を表す画素データを処理し得る。場合によっては、層３０２の各ＰＥは、画像内の所定の画素に対応する画素値（例えば、ｘ０、ｘ１、ｘ２、…、ｘｎ）を受信するように割り当てられてもよく、受信した画素値と共に１つ又は複数の重みを層３０４に送信してもよい。予測モデル２０４がＤＮＮである場合、層３０２の各ＰＥは、行列Ｗ１に基づいて定義された１組の重みを割り当てられ得る。層３０２の各ＰＥは、受信した画素値及び割り当てられた重みを層３０４の各ＰＥに送信し得る。予測モデル２０４がＣＮＮである場合、層３０２のＰＥの複数のグループが、一組の重みを共有することができ、各グループは、その一組の重み及びＰＥのグループが受信した画素値を層３０４の単一のＰＥに送信し得る。
【００２１】
[0032]層３０４は、層３０２からのスケーリングされた出力を処理して、一組の中間出力を生成することができる。いくつかの例では、層３０４のＰＥ３０４ａは、層３０２内のＰＥのグループに接続され得、層３０４のＰＥ３０４ｂは、層３０２内のＰＥのグループに接続され得る。一例として、ＰＥ３０４ｂは、次式に基づいて、層３０２から受信したスケーリングされた出力の和を生成し得る。
【００２２】
【数１】
2021508895.tif 000003
【００２３】
[0034]上式で、ｓｕｍ３０４ｂは、ＰＥ３０４ｂによって生成された和を表す。Ｗ１ｉ×ｘｉは、層３０２のＰＥによる、関連する重み（例えば、Ｗ１０）による特定の画素値（例えば、ｘ０）のスケーリングを表し得る。予測モデル２０４がＤＮＮである場合、層３０４の各ＰＥは、層３０２の各ＰＥからの画素値のスケーリングに基づいて和を生成し、その後、スケーリングされた画素値の和を取ることにより和（例えば、ｓｕｍ３０４ｂ）を生成し得る。この和はまた、いくつかの要素（例えば、画素値）を含む入力ベクトルと重みベクトル（例えば、Ｗ１）との間のドット積を表し得る。
【００２４】
[0035]一方、予測モデル２０４がＣＮＮである場合、層３０４の各ＰＥは、層３０２のＰＥのグループからの画素値のスケーリングに基づいて和を生成し得る。この和は、画素値のグループと重み値を含むフィルタとの間の畳み込み結果を表し得る。
【００２５】
[0036]図４Ａ及び図４Ｂは、畳み込み層３０４の操作を示している。
【００２６】
[0037]図４Ａでは、フィルタ４０２は、重みの二次元配列を含み得る。フィルタ４０２内の重みは、入力画像４０４から検出されるべき特定の特徴における画素の空間分布を表し得る。入力画像４０４は、Ｈ個の画素の高さ及びＷ個の画素の幅を含み得る。フィルタ４０２は、Ｒ行の高さ及びＳ列の幅を有することができ、一般に、入力画像４０４より小さい。フィルタ４０２内の各重みは、同じＲ行Ｓ列の画素値の長方形ブロック内の画素にマッピングされ得る。いくつかの実装形態では、入力画像４０４の画素データは、入力特徴マップの入力特徴マップ要素と呼ばれる場合があり、画素が特定の特徴（複数可）に対応する同じフィルタ（又は同じ複数組のフィルタ）によって処理されることを示し得る。出力特徴マップは、フィルタ４０２と入力特徴マップとの間の畳み込み出力を表し得る。
【００２７】
[0038]図３を参照して説明したように、層３０４のＰＥ（例えば、ＰＥ３０４ｂ）は、入力層３０２のＰＥのグループから、入力画像４０４からの第１の長方形の画素ブロックに対応する画素値のグループ４０８ａを受信し得る。画素値のグループ４０８ａは、第１の入力データセットとして提示され得る。ＰＥ３０４ｂは、式１に従って、フィルタ４０２の各重みとグループ４０８ａ内の対応する各画素との間の乗算結果の和に基づいて、畳み込み出力４１０ａを生成し得る。例えば、ＰＥ３０４ｂは、フィルタ４０２によって表される行列とグループ４０８ａによって表される行列との間でドット積を生成し得る。
【００２８】
[0039]図４Ｂに示すように、層３０４の別のＰＥ（例えば、ＰＥ３０４ａ）もまた、入力層３０２のＰＥの別のグループから、入力画像４０４からの第２の長方形の画素ブロックに対応する画素値のグループ４０８ｂを受信し得る。画素値のグループ４０８ｂは、第２の入力データセットとして提示され得る。ＰＥ３０４ａは、式１に従って、フィルタ４０２の各重みとグループ４０８ｂ内の対応する各画素との間の乗算結果の和に基づいて、畳み込み出力４１０ｂを生成し得る。ＰＥ３０４ａは、フィルタ４０２の行列とグループ４０８ｂによって表される行列との間でドット積を生成し得る。いくつかの実施形態では、図４Ａ及び図４Ｂの各畳み込み出力（例えば、畳み込み出力４１０ａ、畳み込み出力４１０ｂなど）は、層３０４のＰＥの出力に対応し得る。畳み込み出力は、入力画像４０４内の画素データを含む入力特徴マップをフィルタ４０２によって処理した結果を示す出力特徴マップに対応し得る。畳み込み出力４１０ａ及び畳み込み出力４１０ｂのそれぞれは、それぞれの出力データ要素を含む出力データセットの形態であり得る。
【００２９】
[0040]図４Ｂに示されるように、畳み込み演算は、グループ４０８ｂの第２の長方形ブロックが入力画像４０４のグループ４０８ａの第１の長方形ブロックと重なるか、そうでなければ隣接するように、スライディングウィンドウで構成され得る。例えば、図４Ｂの例では、「Ｄ」は、グループ４０８ｂに対応する画素のブロックがグループ４０８ａに対応する画素のブロックから距離Ｄ（画素単位）に配置され得るように、また次の画素のブロックもグループ４０８ｂから同じ距離Ｄに配置され得るように、畳み込み演算ごとのスライディングウィンドウのストライドの距離（画素単位）を示し得る。層３０４の他のＰＥもまた、他の長方形ブロックに対応する画素のグループを受信し、他の中間出力を生成し得る。畳み込み出力は、Ｅ行の高さ及びＦ列の幅を有する畳み込み出力配列４０６の一部であり得る。畳み込み出力の配列４０６は、入力画像より小さい高さ及び狭い幅を有し得る。畳み込み出力の長方形ブロックは、さらにグループ化され得、畳み込み演算は、別の組の畳み込み出力を生成するために畳み込み出力のグループと別の組のフィルタ重みとの間の層３０６で実行され得る。いくつかの実装形態では、畳み込み演算は、複数の画像と複数のフィルタとの間で実行され得る。このことを、図５Ａを参照してさらに説明する。
【００３０】
[0041]図５Ａは、一組の画像と一組のフィルタとの間の畳み込み層操作の一例を示している。
【００３１】
[0042]いくつかの実装形態では、畳み込み演算は、複数の画像と複数のフィルタとの間で実行され得る。図５Ａに示すように、一組のＣ個のフィルタ５０２が一組のＣ個の画像５０４に適用され得る。畳み込み演算は、一組のフィルタ５０２の各フィルタと、画像５０４の対応する画像上の画素のブロックとの間で実行され得る。フィルタと画像との各対についての畳み込み結果が加算されて、次のように畳み込み出力を生成し得る。
【００３２】
【数２】
2021508895.tif 000004
【００３３】
[0044]上式で、畳み込み演算は、一組のＣ個の画像（又は画素配列）を含む。ＸｃｅＤ＋ｒ，ｆＤ＋ｓは、一組のＣ個の画像５０４内のインデックスｃの画像における画素の値を指し、ｅＤ＋ｒは、水平画素座標であり、ｆＤ＋ｓは、垂直画素座標であり得る。Ｄは、スライディングウィンドウのストライド距離であり、一方、ｅ及びｆは、特定のスライディングウィンドウにも対応し得る畳み込み出力配列５０６における出力の位置に対応する。さらに、ｒ及びｓは、スライディングウィンドウ内の特定の位置に対応し得る。（ｒ，ｓ）の位置にあるインデックスｃの画像の画素はまた、同じ（ｒ，ｓ）の位置にある同じインデックスｃの対応するフィルタ内の重みＷｃｒ，ｓにも対応する。式２は、畳み込み出力Ｏｅ，ｆを計算するために、スライディングウィンドウ内の各画素（（ｅ，ｆ）で示される）が対応する重みＷｃｒ，ｓを乗算され得ることを示す。一組の画像５０４内の画像のそれぞれについて、各スライディングウィンドウ内の乗算による積の部分和が計算され得る。次に、一組の画像５０４のすべての画像について部分和の和が計算され得る。
【００３４】
[0045]さらに、いくつかの例では、複数組のフィルタが、一組の画像に畳み込み演算を実行するために使用されて、一組の畳み込み出力配列を生成でき、各畳み込み出力配列が一組のフィルタに対応し得る。例えば、複数組のフィルタは、一組の画像５０４から検出されるべき複数の特徴に対応でき（例えば、ある一組のフィルタがオブジェクトの第１の部分に対応し、別の一組のフィルタが、オブジェクトの第２の部分に対応するなど）、各畳み込み出力配列は、一組の画像５０４からの各特徴の検出結果に対応し得る。例えば、Ｍ組のフィルタが一組のＣ個の画像に適用されて、Ｍ個の畳み込み出力配列を生成する場合、式２は次のように更新され得る。
【００３５】
【数３】
2021508895.tif 000005
【００３６】
[0047]上式で、畳み込み出力Ｏｅ，ｆｍ及び重みＷｃ，ｍｒ，ｓは、Ｍ組のフィルタのうちの１組に対応するインデックスｍを有する。
【００３７】
[0048]図５Ｂは、Ｍ組のフィルタ（Ｍ＝２）で畳み込まれるＣ組の入力データ（Ｃ＝３）の一例を示している。入力データの各組は、画素配列のエントリに対応する。Ｍ組のフィルタのそれぞれは、Ｃ組の入力画素配列に対応する１組のＣ個のフィルタを含む。畳み込み演算は、Ｍ組の出力データセットを生成し、各出力データセットは、畳み込み出力配列に対応し得る。各畳み込み出力配列は、（Ｍ組のうちの）１組のフィルタを入力画素配列により畳み込むことに対応し得る。例えば、Ｏ０，００は、画素のグループ５１０とフィルタ配列５１６との間のドット積、画素のグループ５１２とフィルタ配列５１８との間のドット積、及び画素のグループ５１４とフィルタ配列５２０との間のドット積の和によって生成され得る。
【００３８】
[0049]図３を再び参照すると、層３０４の１つのＰＥは、１つの畳み込み出力配列のうちの畳み込み出力を（例えば、一度に１つ）生成するように構成され得、層３０４のＰＥのＭ組は、畳み込み出力配列のＭ組に対応し得る。層３０４のＰＥはまた、活性化関数を用いて各畳み込み出力を処理して、活性化出力を生成し得る。活性化関数は、畳み込み出力を、（実際の生物学的ニューロンの発火に類似して）分類器の決定に影響を与えるために畳み込み出力を中間層３０６に転送するか否かの決定に変換し得る。活性化関数の例は、次式に従って定義された正規化線形ユニット（ＲｅＬｕ）であり得る。
【００３９】
[0050]ＲｅＬｕ（ｙ）＝ｍａｘ（０，ｙ）（式４）
【００４０】
[0051]層３０４のＰＥ（例えば、ＰＥ３０４ｂ）は、ＲｅＬｕ関数により和を処理して、次式に基づいて第１の中間出力を生成し得る。
【００４１】
[0052]ｆｉｒｓｔ＿ｉｎｔｅｒｍｅｄｉａｔｅ＿ｏｕｔｐｕｔ２１０ａ＝ＲｅＬｕ（Ｓｕｍ２１０ａ）（式５）
【００４２】
[0053]予測モデル２０４がＣＮＮである場合、予測モデル２０４は、第１の中間出力のサイズを削減するためにプーリング層（図３には示さず）を含み得る。例えば、プーリング層は、ダウンサンプリング操作を実行し、（ＲｅＬｕ関数に基づいて生成された）中間出力のグループのうちの最大中間出力を（グループ内の残りの中間出力を破棄しながら）層３０６に転送し得る。
【００４３】
[0054]層３０６は、例えば、異なる組のフィルタに基づいて追加の畳み込み演算を実行することによって、層３０４からのスケーリングされた中間出力をさらに処理し得る。層３０６の各ＰＥからの出力は、他のより上位の中間層、又は出力層（図３には示さず）に転送され得る。出力層は、例えば、特定の画像特徴が画像に含まれる確率、及び／又は画像が特定のオブジェクト（例えば、人、車、木など）を含む確率を表す出力ベクトルを形成し得る。例えば、出力ベクトルは、オブジェクトの一部に関連する参照ベクトル、又はオブジェクトに関連する参照ベクトルと比較され得る。画像が特定のオブジェクトの画像であるか否かに関する決定は、比較結果に基づいて判定され得る。
【００４４】
[0055]場合によっては、シストリックアレイが効率的に使用されないことがある。例えば、シストリックアレイのＰＥは１６ビットの入力データをサポートできる場合もあるが、シストリックアレイの用途によっては８ビットの計算だけしかＰＥで実行できない場合もある。このような場合、シストリックアレイの半分が使用されないことがある。本開示の技術のいくつかの実施形態は、入力データセットからの複数のデータ要素を並列に処理することにより、シストリックアレイの利用を改善し得る。例えば、１６ビットのＰＥは、同じ重み値を使用して、同じ入力データセットからの第１の８ビットデータ要素及び第２の８ビットデータ要素に対して２つの８ビットの計算を同時に実行できる。よって、一度に８ビットの計算のみを実行する場合と比較して、半分の時間で出力データセットを生成することにより、シストリックアレイの性能が最適化され得る。
【００４５】
[0056]図６は、本開示の技術のいくつかの実施形態によるニューラルネットワーク演算のための装置６００を示している。装置６００は、コンピュータシステム、例えばホストサーバの一部であってもよい。例えば、ホストサーバは、画像認識サービス、テキストベースのデータ処理（例えば、検索クエリの処理）、音声データ処理などのデータ処理用途のためのマルチテナントコンピューティングサービスを提供し得る。装置６００は、図２を参照して説明したような、予測モデル２０４を用いた計算のための計算及びメモリリソースを提供し得る。いくつかの実施形態では、ホストデバイスは、ソフトウェアアプリケーション２０２を操作し、装置６００と通信して、予測モデル２０４を用いた計算に基づいて予測を行うことができる。例えば、ホストデバイスは、予測モデル２０４を使用して、画像、テキスト、音声などの入力データセットに含まれる情報を識別することによって予測を行うことができる。
【００４６】
[0057]装置６００は、メモリ６１４、ホストインターフェース６１６、及びダイレクトメモリアクセス（ＤＭＡ）コントローラ６１８にインターコネクト６２０を介して接続されたニューラルネットワークプロセッサ６０２を備え得る。ニューラルネットワークプロセッサ６０２は、計算エンジン６０４と、計算コントローラ６０６と、状態バッファ６０８と、出力バッファ６１０と、活性化エンジン６１２とを備え得る。より詳細に論じるように、ニューラルネットワークプロセッサ６０２は、予測モデル２０４による計算をサポートするための計算リソースを提供し得る。ニューラルネットワークプロセッサ６０２は、システムオンチップ（ＳｏＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、又は任意の適切な回路として実装され得る。
【００４７】
[0058]メモリ６１４は、ホストデバイスから受信した命令、入力データセット（例えば、画像の画素データ）、及び重み（例えば、特定の視覚的及び／又は非視覚的特徴に対応する重み）を格納するように構成され得る。メモリ６１４はまた、ニューラルネットワークプロセッサ６０２の出力（例えば、出力データセットの形態の入力画像に関する１つ又は複数の画像認識決定）を格納するように構成され得る。メモリ６１４は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレートＤＲＡＭ（ＤＤＲ  ＤＲＡＭ）、ストレージクラスメモリ（ＳＣＭ）、フラッシュメモリなどの任意の適切なメモリを含み得る。
【００４８】
[0059]ホストインターフェース６１６は、ホストデバイスとニューラルネットワークプロセッサ６０２との間の通信を可能にするように構成され得る。例えば、ホストインターフェース６１６は、ホストデバイスとニューラルネットワークプロセッサ６０２との間で、格納されたデータのメモリアドレス（例えば、入力データセット、重み、計算結果など）を含むメモリ記述子を送信するように構成され得る。ホストインターフェース６１６は、例えば、ペリフェラルコンポーネントインターコネクトエクスプレス（ＰＣＩｅ）インターフェース、又はホストデバイスと通信するための任意の適切なインターフェースを含み得る。ホストデバイスは、ホストプロセッサとホストメモリとを備え得る。
【００４９】
[0060]ＤＭＡコントローラ６１８は、ニューラルネットワークプロセッサ６０２とホストデバイスとの間でデータを転送するためにＤＭＡ操作を実行するように構成され得る。例えば、上述のように、ホストデバイスは、命令、入力データセット、及び重みをメモリ６１４に格納し得る。ホストデバイスは、格納された命令、データ、及び重みのためのメモリアドレスをニューラルネットワークプロセッサ６０２に（例えば、メモリ記述子の形で）提供し得る。次に、ニューラルネットワークプロセッサ６０２は、ホストデバイスによって提供されたメモリアドレスに基づいて、格納された命令、データ、及び重みを取得し得る。ニューラルネットワークプロセッサ６０２はまた、計算の結果（例えば、１つ又は複数の画像認識決定）をメモリ６１４に格納し、格納された結果のメモリアドレスをホストデバイスに提供し得る。
【００５０】
[0061]計算コントローラ６０６は、ニューラルネットワーク演算を実行するためにニューラルネットワークプロセッサ６０２の様々なコンポーネントに制御を提供するように構成され得る。計算コントローラ６０６は、計算エンジン６０４に重みをロードするスケジューリングを実行し得る。重みは、状態バッファ６０８に格納され得る。一実施形態では、計算コントローラ６０６は、それぞれの行データバスを使用して、シストリックアレイ内のすべてのＰＥにおける重みのロードを順次スケジュールすることができる。例えば、１つのＰＥに１つの重みがサイクルごとにロードされ得る。別の実施形態では、計算コントローラ６０６は、所与の行の各ＰＥについてそれぞれの列データバスを使用して、行ごとに並列にシストリックアレイにおける重みのロードをスケジュールし得る。例えば、各行における重みは、サイクルごとに並列にロードされ得る。いくつかの実装形態では、計算コントローラ６０６は、ホストデバイスから受信した命令に基づいて、入力データセットのデータ型を判定し得る。例えば、命令は状態バッファ６０８に格納され得る。命令は、オペコードの形態であり得る。データ型は、入力データ要素のサイズ及び型、例えば４ビット、８ビット、１６ビット、符号付き、符号なし、又は浮動小数点を示し得る。
【００５１】
[0062]いくつかの実施形態では、計算コントローラ６０６は、入力データセットのデータ型及びサイズに基づいて、計算エンジン６０４の動作モードを判定し得る。例えば、入力データセットがシストリックアレイのサイズ（例えば、１６×１６）よりもはるかに大きい（例えば、２０００個のデータ要素）場合、計算コントローラ６０６は、計算エンジン６０４の動作モードを最適化モードに切り替えることができる。最適化モードは、計算エンジン６０４が各入力データセットに対して複数の計算を並列に実行することを可能にし得る。例えば、各ＰＥは、４ビットデータ型の場合は４つの４ビットの計算を並列に実行でき、８ビットデータ型の場合は２つの８ビットの計算を並列に実行できる。ＰＥによって同時に処理され得る入力データ要素の数は、本開示の技術の範囲から逸脱することなくＰＥのサイズに基づいて変化し得ることが理解されよう。例えば、３２ビットのＰＥの場合、最適化モードは、計算エンジン６０４が４つの８ビットの計算、８つの４のビット計算、２つの１６ビットの計算などを実行できるようにし得る。他のいくつかの例では、入力データセットがシストリックアレイのサイズ（例えば、１６×１６）より小さいか、同等（例えば、２００個のデータ要素）である場合、計算エンジン６０４の動作モードを最適化モードに切り替えることは、重みをシストリックアレイにロードしても、より小さいデータセットでは均されない場合があるため、あまり効果的ではない。
【００５２】
[0063]状態バッファ６０８は、計算エンジン６０４での計算に使用されるデータをキャッシュするように構成され得る。状態バッファ６０８にキャッシュされたデータは、例えば、メモリ６１４から取得された入力データセット及び重み、並びに計算エンジン６０４での計算の中間出力を含み得る。キャッシュすることにより、（例えば、メモリ６１４、ＤＭＡコントローラ６１８、インターコネクト６２０などにおけるレイテンシによって引き起こされる）メモリアクセスボトルネックが計算エンジン６０４の性能に及ぼす影響を低減することができる。状態バッファ６０８は、オンチップメモリデバイスであり得、スタティックランダムアクセスメモリ（ＳＲＡＭ）又は任意の適切なメモリを含み得る。
【００５３】
[0064]出力バッファ６１０は、計算エンジン６０４によって生成された出力データセットを格納するための一組のレジスタを備え得る。出力バッファ６１０はまた、例えば、格納された出力のサイズを削減するためのプーリング操作などの追加の処理を可能にし得る。いくつかの実装形態では、計算エンジン６０４は、特定のニューラルネットワーク層の計算を実行するように動作することができ、出力バッファ６１０は、そのニューラルネットワーク層の出力を処理し、処理された出力データセットを状態バッファ６０８において格納することができる（活性化エンジン６１２による処理の有無を問わない）。いくつかの実施形態では、出力バッファ６１０は、図５Ａを参照して説明したように、畳み込み出力配列５０６を生成するために、異なる組のフィルタ（例えば、Ｍ個）及び入力データセット（例えば、Ｃ個）に対して生成された部分和を累積する加算器を含み得る。状態バッファ６０８に格納された畳み込み出力配列５０６の最終出力値は、状態バッファ６０８に格納するために計算コントローラ６０６によって取得され得る。
【００５４】
[0065]活性化エンジン６１２は、出力バッファ６１０の出力に対して１つ又は複数の活性化関数（例えば、ＲｅＬｕ関数）を適用するように構成され得る。例えば、活性化エンジン６１２は、活性化関数を入力に適用した結果を表す候補出力のうちの１つに入力をマッピングすることができる１つ又は複数のルックアップテーブル（例えば、マルチプレクサ回路の形態で）を含み得る。いくつかの例では、活性化エンジン６１２はまた、活性化関数が適用されない場合に出力バッファ６１０からの出力が状態バッファ６０８に直接格納されることを可能にするバイパス経路も備え得る。
【００５５】
[0066]計算エンジン６０４は、ニューラルネットワーク演算を実行するように構成され得る。いくつかの実施形態では、計算エンジン６０４は、ニューラルネットワーク演算に含まれる１つ又は複数の算術演算を実行するように構成された１組のＰＥを備え得る。各ＰＥは、入力データセット及び関連する重みを使用して、行列の乗算及び行列の畳み込みを実行し得る。重み及び入力データセットは、１つ又は複数のインターフェースを使用して状態バッファ６０８から取得され得る。計算エンジン６０４の例示的な構造を、図７を参照して説明する。
【００５６】
[0067]図７は、本開示の技術のいくつかの実施形態による計算エンジン６０４の内部構造を示している。いくつかの実装形態では、計算エンジン６０４は、複数の行及び列に構成されたＰＥの二次元アレイを備えることができ、行は第１の次元を表し、列は第２の次元を表すことができる。本明細書で使用される場合、「行」と「列」とは交換可能であり、二次元アレイの異なる次元を表すために使用される。
【００５７】
[0068]アレイの各行は「ｘ」個のＰＥを含むことができ、アレイの各列は「ｙ」個のＰＥを含むことができる。例えば、「ｘ」及び「ｙ」は、１６、３２、６４、１２８、又は任意の適切な正の整数であり得る。いくつかの実施形態では、アレイの左端の列のＰＥ００、ＰＥ１０、ＰＥ２０、…、ＰＥｘ０は、一組の外部行バス７００を介して状態バッファ６０８に接続され得る。各行内の隣接するＰＥ（例えば、ＰＥ００、ＰＥ０１、ＰＥ０２、…、ＰＥ０ｙ）は、内部行バス７０６を介して互いに接続され得る。さらに、各列内の隣接するＰＥは、内部列バス７０８を介して互いに接続され得る。最上行のＰＥ００、ＰＥ０１、ＰＥ０２、…、ＰＥ０ｙは、一組の外部入力列バス７０２を介して状態バッファ６０８に接続され得る。場合によっては、外部入力列バス７０２は、計算コントローラ６０６によってゼロにされて、計算エンジン６０４における計算をリセットすることができる。加えて、最下行のＰＥｘ０、ＰＥｘ１、ＰＥｘ２、…、ＰＥｘｙは、一組の外部列バス７０４を介して出力バッファ６１０に接続され得る。
【００５８】
[0069]外部行バス７００及び外部入力列バス７０２はまた、計算エンジン６０４に重みを順次又は並列にロードするために使用され得る。一実施形態では、重みは、外部入力列バス７０２を介して、シストリックアレイの各行に対して順次ロードされ得る。例えば、重みは、状態バッファ６０８から、外部入力列バス７０２を介して左端の列のＰＥ００、ＰＥ１０、ＰＥ２０、…、ＰＥｘ０にロードされ得る。重みは、内部列バス７０８を介して、行ごとに右列の隣接するＰＥにさらにシフトされ得る。別の実施形態では、重みは、外部入力列バス７０２を介してシストリックアレイの各行に対して並列にロードされ得る。例えば、重みは、状態バッファ６０８から、外部入力列バス７０２を介して最上行のＰＥ００、ＰＥ０１、ＰＥ０２、…、ＰＥ０ｙにロードされ得る。重みは、内部行バス７０６を介して、列ごとに下行の隣接するＰＥにさらにシフトされ得る。
【００５９】
[0070]特定の実施形態では、同じ入力データセットの２つ以上のデータ要素が、それぞれのインターフェースを使用して各行に供給され得る。図７に示すように、第１の入力データセット「ｉｎｄａｔａｓｅｔ０」からの２つのデータ要素は、ＰＥ００に同時に供給され得、第２の入力データセット「ｉｎｄａｔａｓｅｔ１」からは、ＰＥ１０に供給され得、第３の入力データセット「ｉｎｄａｔａｓｅｔ２」からは、ＰＥ２０に供給され得、第ｘの入力データセット「ｉｎｄａｔａｓｅｔｘ」からは、ＰＥｘ０に供給され得る。図５Ｂを再び参照すると、一例では、ｉｎｄａｔａｓｅｔ０は、画素のグループ５１０に対応するデータ要素を含み得、ｉｎｄａｔａｓｅｔ１は、画素のグループ５１２に対応するデータ要素を含み得、ｉｎｄａｔａｓｅｔ２は、画素のグループ５１４に対応するデータ要素を含み得る。
【００６０】
[0071]最後の行の各ＰＥは、所与の列において、上の行のＰＥからの結果を累積し得る。図７に示すように、ＰＥｘ０は、第１の出力データセット「ｏｕｔｄａｔａｓｅｔ０」に対応する１つ又は複数の出力データ要素を生成し得、ＰＥｘ１は、第２の出力データセット「ｏｕｔｄａｔａｓｅｔ１」に対応する１つ又は複数の出力データ要素を生成し得、ＰＥｘ２は、第３の出力データセット「ｏｕｔｄａｔａｓｅｔ２」に対応する１つ又は複数の出力データ要素を生成し得、ＰＥｘｙは、第ｙの出力データセット「ｏｕｔｄａｔａｓｅｔｙ」に対応する１つ又は複数の出力データ要素を生成し得る。
【００６１】
[0072]図８は、本開示の技術のいくつかの実施形態によるＰＥ８００の例示的なブロック図を示している。ＰＥ８００は、図７に示すように、計算エンジン６０４のＰＥのいずれであり得る。ＰＥ８００は、第１の入力レジスタ８０２と、第２のパイプラインレジスタ８０４と、重みレジスタ８０６と、第１の乗算器８０８と、第１の加算器８１０と、第２の乗算器８１２と、第２の加算器８１４とを備え得る。いくつかの実装形態では、第１の加算器８１０及び第２の加算器８１４のそれぞれが、８ビット加算器であり得、第１の乗算器８０８及び第２の乗算器８１２のそれぞれが、８ビット乗算器であり得る。ＰＥ８００は、任意の適切な回路を使用して実装され得る。
【００６２】
[0073]ＰＥ８００は、第１の行入力データＸＩＮ１を受信する第１の入力ポートと、第２の行入力データＸＩＮ２を受信する第２の入力ポートとを備え得る。いくつかの実施形態によれば、第１の行入力データＸＩＮ１及び第２の行入力データＸＩＮ２は、入力データセットからの連続する要素であり得る。ＰＥ８００は、ＰＥ８００の所与の列において、第１のＹｉｎ要素を受信する第３の入力ポートと、第２のＹｉｎ要素を受信する第４の入力ポートとを備え得る。
【００６３】
[0074]第１の入力レジスタ８０２は、第１の行入力データＸＩＮ１をバッファして第１の乗算器８０８に提供するように構成され得る。第１の入力レジスタ８０２はまた、バッファされた第１の行入力データＸＩＮ１を、第１の行出力データＸＯＵＴ１として、ＰＥ８００の右側の隣接するＰＥに提供することができる。第２の入力レジスタ８０４は、第２の行入力データＸＩＮ２をバッファして、第２の乗算器８１２に提供するように構成され得る。第２の入力レジスタ８０４はまた、バッファされた第２の行入力データＸＩＮ２を、第２の行出力データＸＯＵＴ２として、ＰＥ８００の右側の隣接するＰＥに提供することができる。いくつかの実装形態では、第１の行入力データＸＩＮ１及び第２の行入力データＸＩＮ２は、それぞれ８ビットを含み得る。
【００６４】
[0075]いくつかの実施形態では、ＰＥ８００は、第１のインターフェースを介して第１の行入力データＸＩＮ１及び第２の行入力データＸＩＮ２を同時に受信することができ、第２のインターフェースを介して第１の列入力データＹＩＮ１及び第２の列入力データＹＩＮ２を同時に受信することができる。異なる実施形態では、「同時（ｃｏｎｃｕｒｒｅｎｔ）」という用語は、同時に（ｓｉｍｕｌｔａｎｅｏｕｓｌｙ）（同じ時間に（ａｔ  ｔｈｅ  ｓａｍｅ  ｔｉｍｅ））、並列に（ｉｎ  ｐａｒａｌｌｅｌ）、又は特定の期間内に発生することを意味し得る。重みＷｘ，ｙは、第１のインターフェース又は第２のインターフェースを介してＰＥ８００にロードされ得る。いくつかの実装形態では、第１の行入力データＸＩＮ１、第２の行入力データＸＩＮ２、及び重みＷｘ，ｙは、行入力データバス８１６の一部であり得る。例えば、行入力データバス８１６は、８ビットの第１の行入力データＸＩＮ１、８ビットの第２の行入力データＸＩＮ２、８ビットの重みＷｘ，ｙ、及び制御ビット（例えば、データ型、オペコードなど）を含み得るバス幅の広いバスであり得る。行入力データバス８１６は、スプリッタ（図示せず）を使用して、第１の行入力データＸＩＮ１、第２の行入力データＸＩＮ２、重みＷｘ，ｙ、及び制御ビットに分割され得る。いくつかの実装形態では、行入力データバス８１６は、図１を参照して説明したように、行入力バス１０２と同様であり得る。いくつかの実施形態では、第１の行出力データＸＯＵＴ１及び第２の行出力データＸＯＵＴ２は、行出力データバス８２０の一部であり得る。実装形態に基づいて、行出力データバス８２０はまた、Ｗｘ，ｙ及び制御ビットも含み得る。例えば、ＰＥ８００の行出力データバス８２０は、ＰＥ８００の右側の隣接するＰＥの行入力データバス８１６であり得る。
【００６５】
[0076]重みレジスタ８０６は、ＰＥ８００における重み値Ｗｘ，ｙをキャッシュするように構成され得る。いくつかの実施形態では、重み値Ｗｘ，ｙは、８ビットを含み得る。重み値Ｗｘ，ｙは、単一の８ビット重みレジスタ８０６又は２つの８ビット重みレジスタ８０６にキャッシュされ得る。例えば、第１の８ビット重みレジスタ８０６の値は、第１の乗算器８０８に供給され得、第２の８ビット重みレジスタ８０６の値は、第２の乗算器８１２に供給され得る。よって、いくつかの実施形態によれば、両方の算術計算を実行するために各ＰＥに単一の重み値を使用することにより、アレイの記憶域全体を削減することができる。
【００６６】
[0077]第１の乗算器８０８は、Ｗｘ，ｙ値と第１の行入力データＸＩＮ１との間の乗算演算を実行して、第１の中間結果を生成するように構成され、第１の中間結果は第１の加算器８１０に供給され得る。第１の加算器８１０はまた、第１の列入力データＹＩＮ１を受信し、第１の列入力データＹＩＮ１と第１の中間結果との間の加算演算を実行して、第１の列出力データＹＯＵＴ１によって表される部分和を生成するように構成され得る。いくつかの実装形態では、第１の乗算器８０８は、８ビットのＷｘ，ｙ値を８ビットの第１の行入力データＸＩＮ１に乗算して、１６ビットの乗算結果を生成し得る。第１の加算器８１０は、第１の乗算器８０８からの１６ビットの乗算結果を１６ビットの第１の列入力データＹＩＮ１に加算して、第１の列出力データＹＯＵＴ１によって共に表される１６ビットの部分和及び任意のオーバーフロービット（複数可）を生成し得る。
【００６７】
[0078]第２の乗算器８１２は、Ｗｘ，ｙ値と第２の行入力データＸＩＮ２との間の乗算演算を実行して、第２の中間結果を生成するように構成され、第２の中間結果は第２の加算器８１４に供給され得る。第２の加算器８１４はまた、第２の列入力データＹＩＮ２を受信し、第２の列入力データＹＩＮ２と第２の中間結果との間の加算演算を実行して、第２の列出力データＹＯＵＴ２によって表される部分和を生成するように構成され得る。いくつかの実装形態では、第２の乗算器８１２は、８ビットのＷｘ，ｙ値を８ビットの第２の行入力データＸＩＮ２に乗算して、１６ビットの乗算結果を生成し得る。第２の加算器８１４は、第２の乗算器８１２からの１６ビットの乗算結果を１６ビットの第２の列入力データＹＩＮ２に加算して、一緒に第２の列出力データＹＯＵＴ２によって表される１６ビットの部分和及び任意のオーバーフロービット（複数可）を生成し得る。
【００６８】
[0079]特定の実施形態では、第１の乗算器８０８及び第２の乗算器８１２は、それぞれの乗算演算を同時に実行して、第１の中間結果及び第２の中間結果を同時に又は特定の期間内に生成し得る。例えば、第１の乗算器８０８及び第２の乗算器８１２は、期間「ｔ１」内にそれぞれの乗算演算を並列に実行し得る。同様に、第１の加算器８１０及び第２の加算器８１４は、それぞれの加算演算を同時に実行して、第１の列出力データＹＯＵＴ１及び第２の列出力データＹＯＵＴ２を同時に又は特定の期間内に生成し得る。例えば、第１の加算器８１０及び第２の加算器８１４は、期間「ｔ２」内にそれぞれの加算演算を並列に実行し得る。期間「ｔ１」及び「ｔ２」は、同じ値又は異なる値を含み得る。
【００６９】
[0080]ＰＥ８００は、第２のインターフェースを介して第１の列入力データＹＩＮ１及び第２の列入力データＹＩＮ２を同時に受信し得る。例えば、いくつかの実装形態では、第１の列入力データＹＩＮ１及び第２の列入力データＹＩＮ２は、列入力データバス８１８の一部であり得る。列入力データバス８１８は、外部入力データバス、又は同じ列のＰＥ８００のすぐ上の隣接するＰＥからの列出力データバスであり得る。同じ列のすぐ上にある隣接するＰＥからの列出力データバスは、第１の部分和及び第２の部分和を含み得る。第１の部分和は、その列内かつその前のＰＥまでのＰＥのそれぞれの第１の乗算器によって生成されたすべての乗算結果の和を表し得る。第２の部分和は、その列内かつその前のＰＥまでのＰＥのそれぞれの第２の乗算器によって生成されたすべての乗算結果の和を表し得る。列入力データバス８１８は、他の関連ビットを含み得ることが理解されるであろうが、簡単のためにここでは論じない。例えば、列入力データバス８１８はまた、１つ又は複数のオーバーフロービット、オペコードなどを含み得る。いくつかの実施形態では、列入力データバス８１８は、重みレジスタ８０６にＷｘ，ｙ値をロードするために使用され得る。よって、特定の実施形態は、それぞれの列入力データバス８１８を使用して、シストリックアレイの所与の行内のすべてのＰＥについてＷｘ，ｙ値を並列にロードすることを可能にし得る。列入力データバス８１８は、スプリッタ（図示せず）を使用して第１の列入力データＹＩＮ１と第２の列入力データＹＩＮ２とに分割され得る。いくつかの実装形態では、第１の列入力データＹＩＮ１及び第２の列入力データＹＩＮ２はバッファされ得、それぞれのバッファされた出力が、第１の加算器８１０及び第２の加算器８１４に提供され得る。
【００７０】
[0081]いくつかの実装形態では、第１の列出力データＹＯＵＴ１及び第２の列出力データＹＯＵＴ２は、列出力データバス８２２の一部であり得る。列出力データバス８２２は、外部出力データバス、又は同じ列のＰＥ８００のすぐ下の別の隣接するＰＥへの列入力データバスであり得る。例えば、列出力データバス８２２は、第１の列入力データＹＩＮ１、第２の列入力データＹＩＮ２、及び他の関連ビット（例えば、オーバーフロー、オペコードなど）を含むことができ、これらは、簡単のためにここでは論じない。
【００７１】
[0082]いくつかの実施形態では、浮動小数点データ型の場合、第１の中間結果及び第２の中間結果は、第１の加算器８１０及び第２の加算器８１４にそれぞれ供給される前に、特定のビット数に丸められ得る。さらに、第１の加算器８１０及び第２の加算器８１４によって生成された部分和に対して追加の丸めが実行され得る。特定の他の実施形態では、異なるステップで乗算演算及び加算演算を実行する代わりに、融合積和演算器又は融合乗累算演算器を使用して、単一回の丸めを伴う単一ステップの積和演算を実行するために、乗算及び加算演算が融合又は統合され得る。よって、浮動小数点算術演算の速度及び精度は、融合積和演算器を使用して改善され得る。例えば、図８に示すように、第１の乗算及び加算演算を実行するために、第１の乗算器８０８及び第１の加算器８１０の代わりに第１の融合積和演算器（ＦＭＡ）８２４が使用され得る。同様に、第２の乗算及び加算演算を実行するために、第２の乗算器８１２及び第２の加算器８１４の代わりに第２のＦＭＡ８２６が使用され得る。第１のＦＭＡ８２４及び第２のＦＭＡ８２６は、それらのそれぞれの単一ステップの積和演算を単一回の丸めで実行し得る。
【００７２】
[0083]いくつかの実施形態では、第１の乗算器８０８及び第２の乗算器８１２の代わりに、第１及び第２の乗算演算を実行可能であり得る単一の乗算器が使用され得る。例えば、２つの８ビット乗算器又は４つの４ビット乗算器の代わりに、単一の１６ビット乗算器を使用して、２つ又は４つの乗算結果を同時に生成し得る。同様に、いくつかの実装形態では、第１の加算器８１０及び第２の加算器８１４の代わりに、第１及び第２の加算演算を実行可能であり得る単一の加算器が使用され得る。例えば、２つの８ビット加算器又は４つの４ビット加算器の代わりに、単一の１６ビット加算器を使用して、２つ又は４つの和を同時に生成できる。よって、入力データセットの複数のデータ要素を同じＰＥによって同時に処理することにより、シストリックアレイの計算能力を十分に活用できる。
【００７３】
[0084]図９Ａ、図９Ｂ、図９Ｃ、及び図９Ｄは、本開示の技術の特定の実施形態による、シストリックアレイを通るサイクルごとの計算を示している。
【００７４】
[0085]図９Ａに示すように、例示的なシストリックアレイ９００は、３×３のＰＥを備え得る。シストリックアレイ９００は、図７を参照して説明したように、計算エンジン６０４の一部であり得る。シストリックアレイ９００内の各ＰＥは、図８を参照して説明したように、ＰＥ８００と同様であり得る。簡単のために、ここでは、シストリックアレイ９００のすべてのＰＥに重みがロードされていると仮定され得る。重みは、順次、並列に、又はそれらの組み合わせを使用してロードされ得る。本開示の技術の範囲内で、重みをロードする他の方法も可能であることに留意されたい。
【００７５】
[0086]アレイ９００の各行は、異なる入力データセットを処理するように構成され得る。例えば、ＰＥ００、ＰＥ０１、及びＰＥ０２を含む第１の行は、ｉｎｄａｔａｓｅｔ０を処理するように構成され得る。ＰＥ１０、ＰＥ１１、及びＰＥ１２を含む第２の行は、ｉｎｄａｔａｓｅｔ１を処理するように構成され得る。ＰＥ２０、ＰＥ２１、及びＰＥ２２を含む第３の行は、ｉｎｄａｔａｓｅｔ２を処理するように構成され得る。いくつかの実施形態では、ｉｎｄａｔａｓｅｔ０、ｉｎｄａｔａｓｅｔ１、及びｉｎｄａｔａｓｅｔ２は、図５Ａを参照して論じたように（例えば、Ｃは３に等しい）、３つのチャネル（例えば、赤色、緑色、及び青色）に対応し得る。ｉｎｄａｔａｓｅｔ０、ｉｎｄａｔａｓｅｔ１、及びｉｎｄａｔａｓｅｔ２は、ホストデバイスからホストインターフェース６１６を介して受信され、状態バッファ６０８に格納されている場合がある。図５Ｂを再び参照すると、ｉｎｄａｔａｓｅｔ０は、画素のグループ５１０に対応し得、ｉｎｄａｔａｓｅｔ１は、画素のグループ５１２に対応し得、ｉｎｄａｔａｓｅｔ２は、画素のグループ５１４に対応し得る。例えば、ｉｎｄａｔａｓｅｔ０はデータ要素［Ｘ００，０、Ｘ００，１、Ｘ００，２、Ｘ０１，０、Ｘ０１，１、Ｘ０１，２、Ｘ０２，０、Ｘ０２，１、Ｘ０２，２］を含み得、ｉｎｄａｔａｓｅｔ１はデータ要素［Ｘ１０，０、Ｘ１０，１、Ｘ１０，２、Ｘ１１，０、Ｘ１１，１、Ｘ１１，２、Ｘ１２，０、Ｘ１２，１、Ｘ１２，２］を含み得、ｉｎｄａｔａｓｅｔ２はデータ要素［Ｘ２０，０、Ｘ２０，１、Ｘ２０，２、Ｘ２１，０、Ｘ２１，１、Ｘ２１，２、Ｘ２２，０、Ｘ２２，１、Ｘ２２，２］を含み得る。
【００７６】
[0087]一実施形態によれば、２つの連続する外部入力要素が、第１のインターフェース（例えば、行入力データバス８１６）を使用して、サイクルごとに同時にＰＥ００に供給され得る。例えば、図９Ａに示すように、第１のサイクルにおいて、ｉｎｄａｔａｓｅｔ０からの第１の入力要素Ｘ００，０及び第２の入力要素Ｘ００，１は、ＰＥ００に供給され得る。場合によっては、図８を参照して説明したように、第１の入力要素Ｘ００，０はＸＩＮ１と同様であり、第２の入力要素Ｘ００，１はＸＩＮ２と同様であり得る。
【００７７】
[0088]図９Ｂに示すように、第１のサイクルでは、ＰＥ００は、２つの連続する外部入力要素に対して同時に第１の算術演算を実行し得る。算術演算を同時に実行するとは、２つの異なる回路を使用して２つの算術演算を同時に又は並列に実行することを意味し得る。例えば、一実施形態では、ＰＥ００は、第１の乗算器８０８を使用してＸ００，０とＷ０，００，０との乗算を実行して、第１の中間結果（Ｘ００，０×Ｗ０，００，０）を生成し得、第２の乗算器８１２を使用してＸ００，１とＷ０，００，０との乗算を実行して、第２の中間結果（Ｘ００，１×Ｗ０，００，０）を生成し得る。第１の加算器８１０は、第１の中間結果（Ｘ００，０×Ｗ０，００，０）をＹＩＮ１と加算して、ＹＯＵＴ１を生成し得る。第２の加算器８１４は、第２の中間結果（Ｘ００，１×Ｗ０，００，０）をＹＩＮ２と加算して、ＹＯＵＴ２を生成し得る。ＹＩＮ１及びＹＩＮ２は、第２のインターフェース（例えば、列入力データバス８１８）を使用してＰＥ００によって受信され得る。ＰＥ００はアレイ９００の最上行に対応するため、ＹＩＮ１及びＹＩＮ２はゼロであり得る。よって、ＰＥ００は、部分和（Ｘ００，０×Ｗ０，００，０）をＹＯＵＴ１として、また（Ｘ００，１×Ｗ０，００，０）をＹＯＵＴ２としてＰＥ１０に提供し得る。ＰＥ００はまた、Ｘ００，０及びＸ００，１をＸＯＵＴ１及びＸＯＵＴ２としてＰＥ０１に提供し得る。
【００７８】
[0089]第２のサイクルでは、次の２つの連続する外部入力要素、例えば、Ｘ００，２及びＸ０１，０が同時にＰＥ００に供給され得る。加えて、Ｘ００，０及びＸ００，１は、それぞれＸＩＮ１及びＸＩＮ２としてＰＥ０１に供給され得る。さらに、（Ｘ００，０×Ｗ０，００，０）をＹＩＮ１として供給し得、（Ｘ００，１×Ｗ０，００，０）をＹＩＮ２としてＰＥ１０に供給し得る。第２のサイクルでは、Ｘ１０，０及びＸ１０，１はまた、それぞれＸＩＮ１とＸＩＮ２としてＰＥ１０に同時に供給され得る。ＰＥ００、ＰＥ１０、及びＰＥ０１は、図９Ｃに示すように、算術計算を並列に実行し得る。
【００７９】
[0090]図９Ｃに示すように、次のサイクルでは、次の２つの連続する外部入力要素、例えば、Ｘ０１，１及びＸ０１，２が同時にＰＥ００に供給され得る。加えて、Ｘ１０，２及びＸ１１，０がＰＥ１０に供給され得、Ｘ２０，０及びＸ２０，１が同時にＰＥ２０に供給され得る。ＰＥ００は、部分和（Ｘ００，２×Ｗ０，００，０）をＹＯＵＴ１として、また（Ｘ０１，０×Ｗ０，００，０）をＹＯＵＴ２としてＰＥ１０に提供し得る。ＰＥ００はまた、Ｘ００，２及びＸ０１，０をＸＯＵＴ１及びＸＯＵＴ２としてＰＥ０１に提供し得る。ＰＥ０１は、部分和（Ｘ００，０×Ｗ０，００，１）をＹＯＵＴ１として、また（Ｘ００，１×Ｗ０，００，１）をＹＯＵＴ２としてＰＥ１１に提供し得る。ＰＥ０１はまた、Ｘ００，０及びＸ００，１をＸＯＵＴ１及びＸＯＵＴ２としてＰＥ０２に提供し得る。
【００８０】
[0091]第２のサイクルでは、ＰＥ１０は、第１の乗算器８０８を使用してＸ１０，０にＷ１，００，０を乗じて第１の中間結果（Ｘ１０，０×Ｗ１，００，０）を生成し、第２の乗算器８１２を使用してＸ１０，１にＷ１，００，０を乗じて第２の中間結果（Ｘ１０，１×Ｗ１，００，０）を生成し得る。ＰＥ１０は、第１の加算器８１０を使用して、第１の中間結果（Ｘ１０，０×Ｗ１，００，０）に、ＰＥ００によって提供された部分和（Ｘ００，０×Ｗ０，００，０）をさらに加算して、部分和（（Ｘ００，０×Ｗ０，００，０）＋（Ｘ１０，０×Ｗ１，００，０））を生成し得る。ＰＥ２０はまた、第２の加算器８１４を使用して、第２の中間結果（Ｘ１０，１×Ｗ１，００，０）に、ＰＥ００によって提供された部分和（Ｘ００，１×Ｗ０，００，０）を加算して、部分和（（Ｘ００，１×Ｗ０，００，０）＋（Ｘ１０，１×Ｗ１，００，０））を生成し得る。ＰＥ１０によって生成された部分和は、ＹＯＵＴ１及びＹＯＵＴ２としてＰＥ２０に提供され得る。
【００８１】
[0092]図９Ｄに示すように、次のサイクルでは、次の２つの連続する外部入力要素、例えば、Ｘ０２，０及びＸ０２，１が同時にＰＥ００に供給され得る。加えて、Ｘ１１，１及びＸ１１，２がＰＥ１０に供給され得、Ｘ２０，２及びＸ２１，０が同時にＰＥ２０に供給され得る。ＰＥ００は、部分和（Ｘ０，４×Ｗ０，０）をＹＯＵＴ１として、また（Ｘ０，５×Ｗ０，０）をＹＯＵＴ２としてＰＥ１０に提供し得る。ＰＥ００はまた、Ｘ０１，１及びＸ０１，２をそれぞれＸＯＵＴ１及びＸＯＵＴ２としてＰＥ０１に提供し得る。ＰＥ０１は、部分和（Ｘ００，２×Ｗ０，００，１）をＹＯＵＴ１として、また（Ｘ０１，０×Ｗ０，００，１）をＹＯＵＴ２としてＰＥ１１に提供し得る。ＰＥ０１はまた、Ｘ００，２及びＸ０１，０をＸＯＵＴ１及びＸＯＵＴ２としてＰＥ０２に提供し得る。ＰＥ０２は、部分和（Ｘ０，０×Ｗ０，２）をＹＯＵＴ１として、また（Ｘ０，１×Ｗ０，２）をＹＯＵＴ２としてＰＥ１２に提供し得る。
【００８２】
[0093]並列して、ＰＥ１０は、第１の乗算器８０８を使用してＸ１０，２にＷ１，００，０を乗じて第１の中間結果（Ｘ１０，２×Ｗ１，００，０）を生成し、第２の乗算器８１２を使用してＸ１１，０にＷ１，００，０を乗じて第２の中間結果（Ｘ１１，０×Ｗ１，００，０）を生成し得る。ＰＥ１０は、第１の加算器８１０を使用して、第１の中間結果（Ｘ１，２×Ｗ１，０）に、ＰＥ００によって提供された部分和（Ｘ００，２×Ｗ０，００，０）をさらに加算して、部分和（（Ｘ００，２×Ｗ０，００，０）＋（Ｘ１０，２×Ｗ１，００，０））を生成し得る。ＰＥ１０はまた、第２の加算器８１４を使用して、第２の中間結果（Ｘ１１，０×Ｗ１，００，０）に、ＰＥ００によって提供された部分和（Ｘ０１，０×Ｗ０，００，０）を加算して、部分和（（Ｘ０１，０×Ｗ０，００，０）＋（Ｘ１１，０×Ｗ１，００，０））を生成し得る。ＰＥ１０によって生成された部分和は、ＹＯＵＴ１及びＹＯＵＴ２としてＰＥ２０に提供され得る。
【００８３】
[0094]並列して、ＰＥ１１は、第１の乗算器８０８を使用してＸ１０，０にＷ１，００，１を乗じて第１の中間結果（Ｘ１０，０×Ｗ１，００，１）を生成し、第２の乗算器８１２を使用してＸ１０，１にＷ１，００，１を乗じて第２の中間結果（Ｘ１０，１×Ｗ１，００，１）を生成し得る。ＰＥ１１は、第１の加算器８１０を使用して、第１の中間結果（Ｘ１０，０×Ｗ１，００，１）に、ＰＥ０１によって提供された部分和（Ｘ００，０×Ｗ０，００，１）をさらに加算して、部分和（（Ｘ００，０×Ｗ０，００，１）＋（Ｘ１０，０×Ｗ１，００，１））を生成し得る。ＰＥ１１はまた、第２の加算器８１４を使用して、第２の中間結果（Ｘ１０，１×Ｗ１，００，１）に、ＰＥ０１によって提供された部分和（Ｘ００，１×Ｗ０，００，１）を加算して、部分和（（Ｘ００，１×Ｗ０，００，１）＋（Ｘ１０，１×Ｗ１，００，１））を生成し得る。ＰＥ１１によって生成された部分和は、ＹＯＵＴ１及びＹＯＵＴ２としてＰＥ２１に提供され得る。
【００８４】
[0095]並列して、ＰＥ２０は、第１の乗算器８０８を使用してＸ２０，０にＷ２，００，０を乗じて第１の中間結果（Ｘ２０，０×Ｗ２，００，０）を生成し、第２の乗算器８１２を使用してＸ２０，１にＷ２，００，０を乗じて第２の中間結果（Ｘ２０，１×Ｗ２，００，０）を生成し得る。ＰＥ２０は、第１の加算器８１０を使用して、第１の中間結果（Ｘ２０，０×Ｗ２，００，０）に、ＰＥ１０によって提供された部分和（（Ｘ００，０×Ｗ０，００，０）＋（Ｘ１０，０×Ｗ１，００，０））をさらに加算して、部分和（（（Ｘ００，０×Ｗ０，００，０）＋（Ｘ１０，０×Ｗ１，００，０））＋（Ｘ２０，０×Ｗ２，００，０））を生成し得る。ＰＥ２０はまた、第２の加算器８１４を使用して、第２の中間結果（Ｘ２０，１×Ｗ２，００，０）に、ＰＥ１０によって提供された部分和（（Ｘ００，１×Ｗ０，００，０）＋（Ｘ１０，１×Ｗ１，００，０））を加算して、部分和（（（Ｘ００，１×Ｗ０，００，０）＋（Ｘ１０，１×Ｗ１，００，０））＋Ｘ２０，１×Ｗ２，００，０））を生成し得る。ＰＥ２０によって生成された部分和は、出力バッファ６１０に提供され得る。各入力データセットの残りのデータ要素が水平に伝播されるとき、出力バッファ６１０は、すべての列の部分和を累積し続け得る。特定の数のサイクルの後、アレイ９００の列のそれぞれが、２つの出力データ要素に対応する２つの部分和を同時に提供し得る。
【００８５】
[0096]図９Ａから図９Ｄは、第１の乗算器８０８及び第１の加算器８１０を使用して部分和ＹＯＵＴ１を生成し、第２の乗算器８１２及び第２の加算器８１４を使用して部分和ＹＯＵＴ２を生成することについて説明したが、異なる実施形態では、第１のＦＭＡ８２４を第１の乗算器８０８及び第１の加算器８１０の代わりに使用して、部分和ＹＯＵＴ１を生成し得、第２のＦＭＡ８２６を第２の乗算器８１２及び第２の加算器８１４の代わりに使用して、部分和ＹＯＵＴ２を生成し得ることに留意されたい。
【００８６】
[0097]ｉｎｄａｔａｓｅｔ０の最後のデータ要素（例えば、Ｘ０２，２）がＰＥ００を伝播し終えると、別の一組の入力データセット（例えば、ストライド「Ｄ」でシフトされている）が次の一組の重みによりスケーリングされるためにＰＥ００に供給され得る。出力バッファ６１０に格納された出力データ要素は、計算コントローラ６０６によって状態バッファ６０８に提供されて、それぞれの列の第１のＹｉｎ要素及び第２のＹｉｎ要素として使用され得る。よって、特定の実施形態は、列ごとの出力データセットに対応する２つ以上の出力データ要素を提供することにより、シストリックアレイの性能を改善し得る。
【００８７】
[0098]図１０は、本開示の技術の特定の実施形態による、シストリックアレイの効率的な利用のためにＰＥによって実行される方法１０００を示している。例えば、方法１０００は、図８を参照して論じたように、ＰＥ８００によって実行され得る。
【００８８】
[0099]ステップ１００２において、処理素子（ＰＥ）の二次元アレイ内のＰＥは、第１のＸｉｎ要素及び第２のＸｉｎ要素を同時に受信し得る。アレイのＰＥは行及び列に構成され得る。アレイの各行は、それぞれの入力データセットにマッピングされ得、各列は、それぞれの出力データセットにマッピングされ得る。第１のＸｉｎ要素及び第２のＸｉｎ要素は、所与の行における入力データセット内の連続する要素であり得る。図７を再び参照すると、アレイは計算エンジン６０４であり得、ＰＥはＰＥ００であり得る。ＰＥ００は、Ｘｉｎ１要素とＸｉｎ２要素とを含む入力データセットｉｎｄａｔａｓｅｔ０を受信し得る。例えば、図９Ａに示すように、Ｘｉｎ１はＸ０，０であり得、Ｘｉｎ２はＸ０，１であり得る。ＰＥ００は、Ｘｉｎ１要素及びＸｉｎ２要素を受信する前に重みレジスタ８０６にキャッシュされた重みＷ０，０を有し得る。図６を参照して論じたように、計算エンジン６０４は、入力データセットのサイズ、計算エンジン６０４内のＰＥの数、ＰＥのサイズ、及びデータ型に基づいて、計算コントローラ６０６によって最適化モードで動作するように構成されていてもよい。
【００８９】
[0100]ステップ１００４において、ＰＥは、所与の列における第１のＹｉｎ要素及び第２のＹｉｎ要素を同時に受信し得る。いくつかの実施形態では、ＰＥ００がアレイの最上行に属するため、第１のＹｉｎ要素及び第２のＹｉｎ要素の値は、計算コントローラ６０６によって提供され得る。例えば、最上位のアレイにおける第１のＹｉｎ要素及び第２のＹｉｎ要素は、異なる組の重みを使用した以前の計算からの第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素の格納された値を含み得る。
【００９０】
[0101]ステップ１００６において、ＰＥは、第１の乗算結果を生成するために第１のＸｉｎ要素に対して重み値を、また第２の乗算結果を生成するために第２のＸｉｎ要素に対して重み値を同時に乗算する乗算演算を実行し得る。図８を再び参照すると、一実施形態では、ＰＥ００は、第１の乗算結果（例えば、Ｘ００，０×Ｗ０，００，０）及び第２の乗算結果（例えば、Ｘ００，１×Ｗ０，００，０）を生成するために第１の乗算器８０８及び第２の乗算器８１２を使用して乗算演算を同時に実行し得る。
【００９１】
[0102]ステップ１００８において、ＰＥは、第１のＹｏｕｔ要素を生成するために第１の乗算結果に対して第１のＹｉｎ要素を、また第２のＹｏｕｔ要素を生成するために第２の乗算結果に対して第２のＹｉｎ要素を同時に加算する加算演算を実行し得る。図８を再び参照すると、ＰＥ００は、第１のＹｏｕｔ要素（例えば、Ｘ００，０×Ｗ０，００，０）及び第２のＹｏｕｔ要素（例えば、Ｘ００，１×Ｗ０，００，０）を生成するために第１の加算器８１０及び第２の加算器８１４を使用して同時に加算演算を実行し得る。第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素は、第１のＹｉｎ要素及び第２のＹｉｎ要素としてＰＥ１０に提供され得る。
【００９２】
[0103]別の実施形態では、ステップ１００６及び１００８は、融合積和演算を使用することによって単一のステップで実行され得る。例えば、図８を参照して説明したように、第１のＦＭＡ８２４を第１の乗算器８０８及び第１の加算器８１０の代わりに使用して、第１のＹｏｕｔ要素を生成し得、第２のＦＭＡ８２６を第２の乗算器８１２及び第２の加算器８１４の代わりに使用して、第２のＹｏｕｔ要素を生成し得る。よって、特定の実施形態では、第１のＦＭＡ８２４及び第２のＦＭＡ８２６を同時に使用して、２つの連続するＸｉｎ要素に対してそれぞれのＹｉｎ要素により積和演算を実行すると、別個の乗算器及び加算器を使用する場合と比較して、より速くかつ正確な結果を提供できる。第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素は、第１のＹｉｎ要素及び第２のＹｉｎ要素としてＰＥ１０に提供され得る。
【００９３】
[0104]上述のように、アレイの最後の行からの部分和は、所与の列における出力データセットに対応する２つの出力データ要素に対応し得る。例えば、図７を再び参照すると、各列における出力データセットは、出力バッファ６１０に格納され得る。計算エンジン６０６は、出力バッファ６１０から状態バッファ６０８に出力データセットを第１のＹｉｎ要素及び第２のＹｉｎ要素として使用されるべく次の計算の波のためにＰＥ００に提供し得る。よって、複数のＸｉｎ要素を並列に処理して、出力データセットに対応する複数の出力データ要素を生成することにより、シストリックアレイの性能を改善し得る。
【００９４】
[0105]図１１は、計算デバイス１１００の一例を示している。計算デバイス１１００の機能及び／又はいくつかのコンポーネントは、本開示の他の場所で開示される他の実施形態と共に限定されることなく使用され得る。計算デバイス１１００は、タスクの処理を容易にするために計算を実行し得る。例示的な例として、計算デバイス１１００は、マルチテナントコンピューティングサービスシステムにおけるサーバの一部であり得る。計算デバイス１１００の様々なハードウェア及びソフトウェアリソース（例えば、画像認識サービスの提供に関連するハードウェア及びソフトウェアリソース）は、要求に応じてクライアントに割り当てられ得る。
【００９５】
[0106]一例では、計算デバイス１１００は、処理ロジック１１０２と、バスインターフェース１１０４と、メモリ１１０６と、ネットワークインターフェース１１０８とを備え得る。これらのコンポーネントは、ハードウェアモジュール、ソフトウェアモジュール、又はハードウェアとソフトウェアとの組み合わせであり得る。特定の例では、コンポーネントは、本開示の範囲から逸脱することなく、モジュール又はエンジンと交換可能に使用され得る。計算デバイス１１００は、ここでは図示されていない追加のコンポーネントを備え得る。いくつかの実装形態では、計算デバイス１１００は、より少ないコンポーネントを備え得る。いくつかの実装形態では、コンポーネントのうちの１つ又は複数が１つのモジュールに組み合わされ得る。コンポーネントのうちの１つ又は複数は、通信チャネル１１１０を介して互いに通信し得る。通信チャネル１１１０は、１つ又は複数のバス、メッシュ、マトリクス、ファブリック、これらの通信チャネルの組み合わせ、又はいくつかの他の適切な通信チャネルを含み得る。
【００９６】
[0107]処理ロジック１１０２は、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、システムオンチップ（ＳｏＣ）、ネットワーク処理ユニット（ＮＰＵ）、命令を実行するように構成されたプロセッサ、又は論理演算及び浮動小数点演算を実行するように構成された任意の他の回路を含み得る１つ又は複数の集積回路を含み得る。処理ロジック１１０２に含まれ得るプロセッサの例としては、ＡＲＭ（登録商標）、ＭＩＰＳ（登録商標）、ＡＭＤ（登録商標）、インテル（登録商標）、クアルコム（登録商標）などによって開発されたプロセッサを挙げることができる。特定の実装形態では、プロセッサは、複数の処理コアを備えることができ、各処理コアは、他の処理コアとは独立に命令を実行するように構成され得る。さらに、特定の実装形態では、各プロセッサ又は処理コアは、複数の処理スレッド間の論理的な分離を維持しながら、同じプロセッサ又は処理コア上で命令を実行する複数の処理スレッドを実装し得る。プロセッサ又は処理コアで実行されるそのような処理スレッドは、別個の論理プロセッサ又は処理コアとしてソフトウェアに公開される場合がある。いくつかの実装形態では、複数のプロセッサ、処理コア、又は同じコア上で実行される処理スレッドが、例えばバス、レベル１（Ｌ１）キャッシュ及び／又はレベル２（Ｌ２）キャッシュなどの特定のリソースを共有し得る。処理ロジック１１０２によって実行される命令は、例えばコンピュータプログラムの形態で、コンピュータ可読記憶媒体に格納され得る。コンピュータ可読記憶媒体は、非一時的コンピュータ可読記憶媒体であり得る。場合によっては、コンピュータ可読媒体は、メモリ１１０６の一部であり得る。処理ロジック１１０２はまた、例えば、ニューラルネットワークプロセッサ６０２などを含む人工ニューラルネットワーク演算を実行するためのハードウェア回路を含み得る。
【００９７】
[0108]処理ロジック１１０２へのアクセスは、クライアントによって要求されたパーソナルアシスタントサービスを提供するためにクライアントに許可され得る。例えば、計算デバイス１１００は、画像認識ソフトウェアアプリケーションを実行することができる仮想マシンをホストすることができる。画像認識ソフトウェアアプリケーションは、実行時に、処理ロジック１１０２にアクセスして、例えば、画像に含まれるオブジェクトを予測することができる。別の例として、処理ロジック１１０２へのアクセスはまた、ベアメタルインスタンスの一部として許可され得、この場合、クライアントデバイス（例えば、リモートコンピュータ、スマートフォンなど）上で実行されている画像認識ソフトウェアアプリケーションが画像の認識を実行するための処理ロジック１１０２に直接アクセスできる。
【００９８】
[0109]メモリ１１０６は、揮発性若しくは不揮発性、又は揮発性及び不揮発性の両方のタイプのメモリを含み得る。メモリ１１０６は、例えば、ランダムアクセスメモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、電気的に消去可能なプログラマブル読み取り専用メモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、及び／又は他のいくつかの適切な記憶媒体を含み得る。場合によっては、メモリ１１０６の一部又はすべてが計算デバイス１１００の内部にあってもよく、他の場合には、メモリの一部又はすべてが計算デバイス１１００の外部にあってもよい。メモリ１１０６は、処理ロジック１１０２によって実行されたときに、計算デバイス１１００にネットワーク機能を提供する命令を実行するための実行環境を提供する実行可能な命令を含むオペレーティングシステムを格納し得る。メモリ１１０６はまた、例えば、人工ニューラルネットワーク演算を実行するためのソフトウェアアプリケーションを格納し得る。例えば、メモリ１１０６は、上記の式１〜１９の計算に関連するソフトウェアルーチンを格納し得る。処理ロジック１１０２がＦＰＧＡの形態である場合、メモリ１１０６は、処理ロジック１１０２の様々な論理回路コンポーネントを表すネットリストデータを格納し得る。
【００９９】
[0110]バスインターフェース１１０４は、外部通信媒体を介して、コンピューティングシステム内のホストデバイス及び／又は他のコンポーネントなどの外部エンティティとの通信を可能にし得る。バスインターフェース１１０４は、ケーブル、ソケット、ポート、又は外部通信媒体への他の接続に接続するための物理インターフェースを含み得る。バスインターフェース１１０４は、着信及び発信トランザクションを管理するためのハードウェア及び／又はソフトウェアをさらに含み得る。バスインターフェース１１０４は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）ベースのプロトコル、不揮発性メモリエクスプレス（ＮＶＭｅ）、アドバンストホストコントローラインターフェース（ＡＨＣＩ）、スモールコンピュータシステムインターフェース（ＳＣＳＩ）、シリアルアタッチトＳＣＳＩ（ＳＡＳ）、シリアルＡＴアタッチメント（ＳＡＴＡ）、パラレルＡＴＡ（ＰＡＴＡ）、他のいくつかの標準バスプロトコル、又は独自のバスプロトコルなどのローカルバスプロトコルを実装し得る。バスインターフェース１１０４は、とりわけ、コネクタ、電力管理、及びエラー処理を含む、これらのバスプロトコルのいずれかの物理層を含み得る。いくつかの実装形態では、計算デバイス１１００は、複数の外部エンティティと通信するための複数のバスインターフェースモジュールを備え得る。これらの複数のバスインターフェースモジュールは、同じローカルバスプロトコル、異なるローカルバスプロトコル、又は同じバスプロトコルと異なるバスプロトコルとの組み合わせを実装し得る。
【０１００】
[0111]ネットワークインターフェース１１０８は、ネットワークと通信するためのハードウェア及び／又はソフトウェアを含み得る。このネットワークインターフェース１１０８は、例えば、ネットワークへの有線接続のための物理コネクタ若しくは物理ポート、及び／又はネットワークへの無線通信のためのアンテナを含み得る。ネットワークインターフェース１１０８は、ネットワークプロトコルスタックを実装するように構成されたハードウェア及び／又はソフトウェアをさらに含み得る。ネットワークインターフェース１１０８は、例えば、とりわけ、ＴＣＰ／ＩＰ、インフィニバンド、ＲｏＣＥ、米国電気電子学会（ＩＥＥＥ）８０２．１１無線プロトコル、ユーザデータグラムプロトコル（ＵＤＰ）、非同期転送モード（ＡＴＭ）、トークンリング、フレームリレー、ハイレベルデータリンク制御（ＨＤＬＣ）、ファイバ分散データインターフェース（ＦＤＤＩ）、及び／又はポイントツーポイントプロトコル（ＰＰＰ）などのネットワークプロトコルを使用してネットワークと通信し得る。いくつかの実装形態では、計算デバイス１１００は、異なるネットワークと通信するようにそれぞれ構成された複数のネットワークインターフェースモジュールを備え得る。例えば、これらの実装形態では、計算デバイス１１００は、有線イーサネットネットワーク、無線８０２．１１ネットワーク、セルラネットワーク、インフィニバンドネットワークなどと通信するためのネットワークインターフェースモジュールを備え得る。いくつかの実施形態では、計算デバイス１１００は、ネットワークインターフェース１１０８を介してサーバから忘却ゲート係数、入力係数、出力係数などを生成するための上述の重みベクトルなどの一組のパラメータを受信し得る。
【０１０１】
[0112]上記の計算デバイス１１００の様々なコンポーネント及びモジュールは、個別のコンポーネントとして、システムオンチップ（ＳｏＣ）として、ＡＳＩＣとして、ＮＰＵとして、ＦＰＧＡとして、又はそれらの任意の組み合わせとして実装され得る。いくつかの実施形態では、ＳｏＣ又は他のコンポーネントは、別のコンピューティングシステムに通信可能に接続されて、トラフィック監視、トラフィックシェーピング、コンピューティングなどの様々なサービスを提供し得る。本技術のいくつかの実施形態では、ＳｏＣ又は他のコンポーネントは、本明細書で開示される複数のサブシステムを含み得る。
【０１０２】
[0113]本明細書で説明されるモジュールは、ソフトウェアモジュール、ハードウェアモジュール、又はそれらの適切な組み合わせであり得る。モジュールがソフトウェアモジュールである場合、モジュールは、非一時的コンピュータ可読媒体上で具現化され、本明細書で説明されるコンピュータシステムのいずれかのプロセッサによって処理され得る。説明されたプロセス及びアーキテクチャは、ユーザ対話の前に、リアルタイム又は非同期モードのいずれかで実行され得ることに留意されたい。モジュールは、図１１に示唆されるように構成され得る、及び／又は本明細書に記載される機能は、別個のモジュールとして存在する１つ若しくは複数のモジュールによって提供され得る、及び／又は本明細書に記載されるモジュール機能は、複数のモジュールにわたって広がり得る。
【０１０３】
[0114]したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で解釈されるべきである。しかしながら、特許請求の範囲に記載されている本開示のより広い趣旨及び範囲から逸脱することなく、様々な修正及び変更を行うことができることは明らかである。いくつかの例示的な実施形態は、以下の付記項によって説明される。
付記項１．
行及び列に構成された処理素子（ＰＥ）を備える二次元アレイであって、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、各入力データセットがそれぞれのＸｉｎ要素を含み、各ＰＥが、
所与のＰＥにおける重み値をキャッシュするメモリと、
所与の行における入力データセットの第１のＸｉｎ要素を受信する第１の入力ポートと、
所与の行における入力データセットの第２のＸｉｎ要素を受信する第２の入力ポートであって、第２のＸｉｎ要素が第１のＸｉｎ要素に連続する、第２の入力ポートと、
所与の列における第１のＹｉｎ要素を受信する第３の入力ポートと、
所与の列における第２のＹｉｎ要素を受信する第４の入力ポートと、
第１の乗算結果を生成するために第１のＸｉｎ要素に重み値を乗算するように構成された第１の乗算器と、
第１のＹｏｕｔ要素を生成するために第１の乗算結果に第１のＹｉｎ要素を加算するように構成された第１の加算器と、
第１の乗算器と同時に、第２の乗算結果を生成するために第２のＸｉｎ要素に重み値を乗算するように構成された第２の乗算器と、
第１の加算器と同時に、第２のＹｏｕｔ要素を生成するために第２の乗算結果に第２のＹｉｎ要素を加算するように構成された第２の加算器と、
を備え、
アレイの最後の行の第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素が、所与の列における出力データセットに対応する、二次元アレイ
を備える、ニューラルネットワーク演算のための回路。
付記項２．
第１のＸｉｎ要素及び第２のＸｉｎ要素が、入力特徴マップの第１の特徴マップ要素及び第２の特徴マップ要素にそれぞれ対応する、付記項１に記載の回路。
付記項３．
第１の入力ポート及び第２の入力ポートが、行入力データバスに接続される、付記項１又は２に記載の回路。
付記項４．
第３の入力ポート及び第４の入力ポートが、列入力データバスに接続される、付記項１から３のいずれか一項に記載の回路。
付記項５．
第１のインターフェースを介して２つの連続するＸｉｎ要素を同時に受信し、２つの連続するＸｉｎ要素が、第１のＸｉｎ要素と第２のＸｉｎ要素とを含み、
第２のインターフェースを介して２つのＹｉｎ要素を同時に受信し、２つのＹｉｎ要素が、第１のＹｉｎ要素と第２のＹｉｎ要素とを含み、
第１の中間結果を生成するために第１のＸｉｎ要素及び重み値に対して、また第２の中間結果を生成するために第２のＸｉｎ要素及び重み値に対して同時に第１の算術演算を実行し、
第１のＹｏｕｔ要素を生成するために第１の中間結果及び第１のＹｉｎ要素に対して、また第２のＹｏｕｔ要素を生成するために第２の中間結果及び第２のＹｉｎ要素に対して同時に第２の算術演算を実行する
ように構成された、ニューラルネットワーク演算のための処理素子（ＰＥ）
を備える、装置。
付記項６．
第１の算術演算が乗算演算を含み、第１の中間結果が第１の乗算器を使用して生成され、第２の中間結果が第２の乗算器を使用して生成される、付記項５に記載の装置。
付記項７．
第２の算術演算が加算演算を含み、第１のＹｏｕｔ要素が第１の加算器を使用して生成され、第２のＹｏｕｔ要素が第２の加算器を使用して生成される、付記項６に記載の装置。
付記項８．
第１の算術演算が乗算演算を含み、第２の算術演算が加算演算を含み、第１の算術演算及び第２の算術演算が、融合積和演算器を使用して単一のステップで実行される、付記項５から７のいずれか一項に記載の装置。
付記項９．
ＰＥが、行及び列に構成された二次元アレイの複数のＰＥのうちの１つであり、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされる、付記項５から８のいずれか一項に記載の装置。
付記項１０．
第１のインターフェースがアレイの行に関連し、ＰＥにおける第１のＸｉｎ要素及び第２のＸｉｎ要素が、行に関連する入力データセットに対応する、付記項９に記載の装置。
付記項１１．
第２のインターフェースがアレイの列に関連し、ＰＥにおける第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素が、アレイの最後の行における列に関連する出力データセットに対応する、付記項９に記載の装置。
付記項１２．
アレイに接続された計算コントローラをさらに備え、計算コントローラが、入力データセットの入力データ型及びサイズに基づいてアレイの動作モードを有効にするように構成される、付記項１０に記載の装置。
付記項１３．
重み値が、第１のインターフェース又は第２のインターフェースを使用してＰＥにロードされる、付記項５から１２のいずれか一項に記載の装置。
付記項１４．
状態バッファをさらに備え、各行の第１のＰＥが状態バッファに通信可能に接続され、状態バッファがアレイの各行におけるそれぞれの入力データセットを格納するように構成される、付記項９から１３のいずれか一項に記載の装置。
付記項１５．
アレイの各行におけるそれぞれの入力データセットが、ホストデバイスからホストインターフェースを介して状態バッファによって受信される、付記項１４に記載の装置。
付記項１６．
出力バッファをさらに備え、各列の最後のＰＥが出力バッファに通信可能に接続され、出力バッファが、最後の行の各列に対応する第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素を格納するように構成される、付記項９から１５のいずれか一項に記載の装置。
付記項１７．
処理素子（ＰＥ）の二次元アレイ内のＰＥによって、第１のＸｉｎ要素及び第２のＸｉｎ要素を同時に受信するステップであって、アレイのＰＥが行及び列に構成され、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、第１のＸｉｎ要素及び第２のＸｉｎ要素が、所与の行における入力データセット内の連続する要素である、ステップと、
ＰＥによって、所与の列における第１のＹｉｎ要素及び第２のＹｉｎ要素を同時に受信するステップと、
ＰＥによって、第１の乗算結果を生成するために第１のＸｉｎ要素に対して重み値を、また第２の乗算結果を生成するために第２のＸｉｎ要素に対して重み値を同時に乗算する乗算演算を実行するステップと、
ＰＥによって、第１のＹｏｕｔ要素を生成するために第１の乗算結果に対して第１のＹｉｎ要素を、また第２のＹｏｕｔ要素を生成するために第２の乗算結果に対して第２のＹｉｎ要素を同時に加算する加算演算を実行するステップであって、アレイの最後の行の第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素が、所与の列における出力データセットに対応する、ステップと
を含む、方法。
付記項１８．
第１のＸｉｎ要素及び第２のＸｉｎ要素を受信するステップの前に、所与のＰＥにおける重み値を受信するステップと、
重み値をレジスタに格納するステップと
をさらに含む、付記項１７に記載の方法。
付記項１９．
ＰＥが第１のＰＥであり、所与の行が第１の行であり、所与の列が第１の列であり、本方法が、
第１のＸｉｎ要素及び第２のＸｉｎ要素を、アレイの第２の列かつ第１の行にある第２のＰＥに同時に提供するステップ
をさらに含む、付記項１７又は１８に記載の方法。
付記項２０．
ＰＥが第１のＰＥであり、所与の行が第１の行であり、本方法が、
第１のＹｏｕｔ要素及び第２のＹｏｕｔ要素を、第１のＸｉｎ要素及び第２のＸｉｎ要素として、アレイの第１の列かつ第２の行にある第２のＰＥに同時に提供するステップ
をさらに含む、付記項１７から１９のいずれか一項に記載の方法。
【０１０４】
[0115]他の変形形態も本開示の趣旨の範囲内である。よって、本開示の技術は、様々な修正及び代替構造を受け入れる余地があるが、その特定の例示的な実施形態が図面に示され、上で詳述されている。しかしながら、開示された１つ又は複数の特定の形式に本開示を限定する意図はなく、反対に、添付の特許請求の範囲で定義されているように、本開示の趣旨及び範囲に含まれるすべての修正、代替構造、及び均等物を包含することが意図されていることを理解されたい。
【０１０５】
[0116]本開示の実施形態を説明する文脈において（特に、以下の特許請求の範囲の文脈において）用語「ａ」及び「ａｎ」及び「ｔｈｅ」及び同様の指示対象の使用は、本明細書に別段の指示のない限り、又は文脈上明らかに矛盾しない限り、単数及び複数の両方を包含すると解釈されるべきである。「備える（ｃｏｍｐｒｉｓｉｎｇ）」、「有する（ｈａｖｉｎｇ）」、「含む（ｉｎｃｌｕｄｉｎｇ）」、及び「含む（ｃｏｎｔａｉｎｉｎｇ）」という用語は、特に断りのない限り、オープンエンドの用語（すなわち、「含むがこれに限定されない（ｉｎｃｌｕｄｉｎｇ，ｂｕｔ  ｎｏｔ  ｌｉｍｉｔｅｄ  ｔｏ）」を意味する）として解釈されるべきである。「接続される（ｃｏｎｎｅｃｔｅｄ）」という用語は、たとえ何かが介在したとしても、部分的又は完全に含まれる、取り付けられる、又は一緒に結合されると解釈されるべきである。本明細書での値の範囲の記載は、本明細書で別段の指示のない限り、範囲内の各個別の値を個別に参照する簡略的な方法として機能することのみを意図し、各個別の値は、あたかも本明細書で個別に列挙されているかのように本明細書に組み込まれる。本明細書に記載されるすべての方法は、本明細書で別段の指示のない限り、又は文脈上明らかに矛盾しない限り、任意の適切な順序で実行され得る。本明細書で提供されるありとあらゆる例又は例示的な言葉（例えば、「など」）の使用は、本開示の実施形態をよりよく明らかにすることを意図しているに過ぎず、別段の要請のない限り、本開示の範囲を限定するものではない。本明細書中の言葉は、特許請求の範囲において請求されていない要素を本開示の実施に不可欠であると示すものと解釈されるべきではない。
【０１０６】
[0117]「Ｘ、Ｙ、又はＺのうちの少なくとも１つ」という語句などの離接語は、特に別段の指定のない限り、一般的に使用される文脈内で、理解され、項目、用語などが  Ｘ、Ｙ、若しくはＺ、又はそれらの任意の組み合わせ（例えば、Ｘ、Ｙ、及び／又はＺ）のいずれかであることを示すと理解されることが意図されている。よって、そのような離接語は、特定の実施形態がＸの少なくとも１つ、Ｙの少なくとも１つ、又はＺの少なくとも１つのそれぞれが存在することを必要とすることを一般に意図しておらず、意味するものでもない。
【０１０７】
[0118]発明者が知る本開示を実施するための最良の形態を含む、本開示の様々な実施形態が本明細書で説明されている。これらの実施形態の変形形態は、上述の説明を読めば、当業者には明らかになり得る。本発明者らは、当業者がそのような変形形態を適切に使用することを期待し、本発明者は、本明細書に具体的に記載された以外の仕方で本開示が実施されることを意図している。したがって、本開示は、適用法によって許可されるように、本明細書に添付された特許請求の範囲に記載された主題のすべての修正及び均等物を含む。さらに、上記の要素の、そのすべての可能な変形形態における任意の組み合わせは、本明細書で別段の指示のない限り、又は文脈上明らかに矛盾しない限り、本開示によって包含される。
【図１】
2021508895.tif 000006
【図２】
2021508895.tif 000007
【図３】
2021508895.tif 000008
【図４Ａ】
2021508895.tif 000009
【図４Ｂ】
2021508895.tif 000010
【図５Ａ】
2021508895.tif 000011
【図５Ｂ】
2021508895.tif 000012
【図６】
2021508895.tif 000013
【図７】
2021508895.tif 000014
【図８】
2021508895.tif 000015
【図９Ａ】
2021508895.tif 000016
【図９Ｂ】
2021508895.tif 000017
【図９Ｃ】
2021508895.tif 000018
【図９Ｄ】
2021508895.tif 000019
【図１０】
2021508895.tif 000020
【図１１】
2021508895.tif 000021
【手続補正書】
【提出日】令和2年9月29日(2020.9.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
行および列に構成された処理素子（ＰＥ）を備える二次元アレイであって、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、各入力データセットがそれぞれのＸ-ｉｎ要素を含み、各ＰＥが、
所与のＰＥにおける重み値をキャッシュするメモリと、
所与の行における入力データセットの第１のＸ-ｉｎ要素を受信する第１の入力ポートと、
前記所与の行における前記入力データセットの第２のＸ-ｉｎ要素を受信する第２の入力ポートであって、前記第２のＸ-ｉｎ要素が前記第１のＸ-ｉｎ要素に連続する、第２の入力ポートと、
所与の列における第１のＹ-ｉｎ要素を受信する第３の入力ポートと、
前記所与の列における第２のＹ-ｉｎ要素を受信する第４の入力ポートと、
第１の乗算結果を生成するために前記第１のＸ-ｉｎ要素に前記重み値を乗算するように構成された第１の乗算器と、
第１のＹ-ｏｕｔ要素を生成するために前記第１の乗算結果に前記第１のＹ-ｉｎ要素を加算するように構成された第１の加算器と、
前記第１の乗算器と同時に、第２の乗算結果を生成するために前記第２のＸ-ｉｎ要素に前記重み値を乗算するように構成された第２の乗算器と、
前記第１の加算器と同時に、第２のＹ-ｏｕｔ要素を生成するために前記第２の乗算結果に前記第２のＹ-ｉｎ要素を加算するように構成された第２の加算器と、
を備え、
前記二次元アレイの最後の行の前記第１のＹ-ｏｕｔ要素および前記第２のＹ-ｏｕｔ要素が、前記所与の列における出力データセットに対応する、二次元アレイ
を備える、ニューラルネットワーク演算のための回路。
【請求項２】
前記第１のＸ-ｉｎ要素および前記第２のＸ-ｉｎ要素が、入力特徴マップの第１の特徴マップ要素および第２の特徴マップ要素にそれぞれ対応する、請求項１に記載の回路。
【請求項３】
前記第１の入力ポートおよび前記第２の入力ポートが、行入力データバスに接続される、請求項１に記載の回路。
【請求項４】
前記第３の入力ポートおよび前記第４の入力ポートが、列入力データバスに接続される、請求項１に記載の回路。
【請求項５】
第１のインターフェースを介して、第１のＸ-ｉｎ要素と第２のＸ-ｉｎ要素とを含む２つの連続するＸ-ｉｎ要素を同時に受信し、
第２のインターフェースを介して、第１のＹ-ｉｎ要素と第２のＹ-ｉｎ要素とを含む２つのＹ-ｉｎ要素を同時に受信し、
第１の中間結果を生成するために前記第１のＸ-ｉｎ要素および重み値に対して、かつ第２の中間結果を生成するために前記第２のＸ-ｉｎ要素および前記重み値に対して同時に第１の算術演算を実行し、
第１のＹ-ｏｕｔ要素を生成するために前記第１の中間結果および前記第１のＹ-ｉｎ要素に対して、かつ第２のＹ-ｏｕｔ要素を生成するために前記第２の中間結果および前記第２のＹ-ｉｎ要素に対して同時に第２の算術演算を実行する
ように構成された、ニューラルネットワーク演算のための処理素子（ＰＥ）
を備え、
前記ＰＥは、アレイ内の複数のＰＥのうちの１つであり、前記アレイの最後の行の前記第１のＹ-ｏｕｔ要素および前記第２のＹ-ｏｕｔ要素は、前記アレイの所与の列に関連する出力データセットに対応する、
装置。
【請求項６】
前記第１の算術演算が乗算演算を含み、前記第１の中間結果が第１の乗算器を使用して生成され、前記第２の中間結果が第２の乗算器を使用して生成される、請求項５に記載の装置。
【請求項７】
前記第２の算術演算が加算演算を含み、前記第１のＹ-ｏｕｔ要素が第１の加算器を使用して生成され、前記第２のＹ-ｏｕｔ要素が第２の加算器を使用して生成される、請求項６に記載の装置。
【請求項８】
前記第１の算術演算が乗算演算を含み、前記第２の算術演算が加算演算を含み、前記第１の算術演算および前記第２の算術演算が、融合積和演算器を使用して単一のステップで実行される、請求項５に記載の装置。
【請求項９】
前記アレイが、二次元であり、行および列に構成され、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされる、請求項５に記載の装置。
【請求項１０】
前記第１のインターフェースが前記アレイの行に関連し、前記ＰＥにおける前記第１のＸ-ｉｎ要素および前記第２のＸ-ｉｎ要素が、前記行に関連する入力データセットに対応する、請求項９に記載の装置。
【請求項１１】
前記第２のインターフェースが前記アレイの列に関連する、請求項９に記載の装置。
【請求項１２】
前記アレイに接続された計算コントローラをさらに備え、前記計算コントローラが、前記入力データセットの入力データ型およびサイズに基づいて前記アレイの動作モードを有効にするように構成される、請求項１０に記載の装置。
【請求項１３】
前記重み値が、前記第１のインターフェースまたは前記第２のインターフェースを使用して前記ＰＥにロードされる、請求項５に記載の装置。
【請求項１４】
状態バッファをさらに備え、各行の第１のＰＥが前記状態バッファに通信可能に接続され、前記状態バッファが前記アレイの各行における前記それぞれの入力データセットを格納するように構成される、請求項９に記載の装置。
【請求項１５】
前記アレイの各行における前記それぞれの入力データセットが、ホストデバイスから、ホストインターフェースを介して、前記状態バッファによって受信される、請求項１４に記載の装置。
【請求項１６】
出力バッファをさらに備え、各列の最後のＰＥが前記出力バッファに通信可能に接続され、前記出力バッファが、前記最後の行の各列に対応する前記第１のＹ-ｏｕｔ要素および前記第２のＹ-ｏｕｔ要素を格納するように構成される、請求項９に記載の装置。
【請求項１７】
処理素子（ＰＥ）の二次元アレイ内のＰＥによって、第１のＸ-ｉｎ要素および第２のＸ-ｉｎ要素を同時に受信するステップであって、前記二次元アレイが行および列に構成され、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、前記第１のＸ-ｉｎ要素および前記第２のＸ-ｉｎ要素が、所与の行における入力データセット内の連続する要素である、ステップと、
前記ＰＥによって、所与の列における第１のＹ-ｉｎ要素および第２のＹ-ｉｎ要素を同時に受信するステップと、
前記ＰＥによって、第１の乗算結果を生成するために前記第１のＸ-ｉｎ要素に対して重み値を、かつ第２の乗算結果を生成するために前記第２のＸ-ｉｎ要素に対して前記重み値を同時に乗算する乗算演算を実行するステップと、
前記ＰＥによって、第１のＹ-ｏｕｔ要素を生成するために前記第１の乗算結果に対して前記第１のＹ-ｉｎ要素を、かつ第２のＹ-ｏｕｔ要素を生成するために前記第２の乗算結果に対して前記第２のＹ-ｉｎ要素を同時に加算する加算演算を実行するステップであって、前記二次元アレイの最後の行の前記第１のＹ-ｏｕｔ要素および前記第２のＹ-ｏｕｔ要素が、前記所与の列における出力データセットに対応する、ステップと
を含む、方法。
【請求項１８】
前記第１のＸ-ｉｎ要素および前記第２のＸ-ｉｎ要素を受信するステップの前に、前記ＰＥにおける前記重み値を受信するステップと、
前記重み値をレジスタに格納するステップと
をさらに含む、請求項１７に記載の方法。
【請求項１９】
前記ＰＥが第１のＰＥであり、前記所与の行が第１の行であり、前記所与の列が第１の列であり、
前記第１のＸ-ｉｎ要素および前記第２のＸ-ｉｎ要素を、前記二次元アレイの第２の列かつ前記第１の行にある第２のＰＥに同時に提供するステップ
をさらに含む、請求項１７に記載の方法。
【請求項２０】
前記ＰＥが第１のＰＥであり、前記所与の行が第１の行であり、
前記第１のＹ-ｏｕｔ要素および前記第２のＹ-ｏｕｔ要素を、前記第１のＸ-ｉｎ要素および前記第２のＸ-ｉｎ要素として、前記二次元アレイの第１の列かつ第２の行にある第２のＰＥに同時に提供するステップ
をさらに含む、請求項１７に記載の方法。
【国際調査報告】
2021508895.tif 000022
2021508895.tif 000023
2021508895.tif 000024