【文献】
Sung Bum Pan and Rae-Hong Park,Unified Systolic Arrays for Computation of the DCT/DST/DHT,IEEE TRANSACTIONS ON CIRCUITS AND SYSTEMS FOR VIDEO TECHNOLOGY,1997年 4月,VOL.7, NO.2,p.413-419
(58)【調査した分野】(Int.Cl.,DB名)
行および列に構成された処理素子(PE)を備える二次元アレイであって、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、各入力データセットがそれぞれのX-in要素を含み、各PEが、
所与のPEにおける重み値をキャッシュするメモリと、
所与の行における入力データセットの第1のX-in要素を受信する第1の入力ポートと、
前記所与の行における前記入力データセットの第2のX-in要素を受信する第2の入力ポートであって、前記第2のX-in要素が前記第1のX-in要素に連続する、第2の入力ポートと、
所与の列における第1のY-in要素を受信する第3の入力ポートと、
前記所与の列における第2のY-in要素を受信する第4の入力ポートと、
第1の乗算結果を生成するために前記第1のX-in要素に前記重み値を乗算するように構成された第1の乗算器と、
第1のY-out要素を生成するために前記第1の乗算結果に前記第1のY-in要素を加算するように構成された第1の加算器と、
前記第1の乗算器と同時に、第2の乗算結果を生成するために前記第2のX-in要素に前記重み値を乗算するように構成された第2の乗算器と、
前記第1の加算器と同時に、第2のY-out要素を生成するために前記第2の乗算結果に前記第2のY-in要素を加算するように構成された第2の加算器と、
を備え、
前記二次元アレイの最後の行の前記第1のY-out要素および前記第2のY-out要素が、前記所与の列における出力データセットに対応する、二次元アレイ
を備える、ニューラルネットワーク演算のための回路。
前記第1のX-in要素および前記第2のX-in要素が、入力特徴マップの第1の特徴マップ要素および第2の特徴マップ要素にそれぞれ対応する、請求項1に記載の回路。
前記第1の算術演算が乗算演算を含み、前記第1の中間結果が第1の乗算器を使用して生成され、前記第2の中間結果が第2の乗算器を使用して生成される、請求項5に記載の装置。
前記第2の算術演算が加算演算を含み、前記第1のY-out要素が第1の加算器を使用して生成され、前記第2のY-out要素が第2の加算器を使用して生成される、請求項6に記載の装置。
前記第1の算術演算が乗算演算を含み、前記第2の算術演算が加算演算を含み、前記第1の算術演算および前記第2の算術演算が、融合積和演算器を使用して単一のステップで実行される、請求項5に記載の装置。
前記アレイが、二次元であり、行および列に構成され、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされる、請求項5に記載の装置。
前記第1のインターフェースが前記アレイの行に関連し、前記PEにおける前記第1のX-in要素および前記第2のX-in要素が、前記行に関連する入力データセットに対応する、請求項9に記載の装置。
前記アレイに接続された計算コントローラをさらに備え、前記計算コントローラが、前記入力データセットの入力データ型およびサイズに基づいて前記アレイの動作モードを有効にするように構成される、請求項10に記載の装置。
状態バッファをさらに備え、各行の第1のPEが前記状態バッファに通信可能に接続され、前記状態バッファが前記アレイの各行における前記それぞれの入力データセットを格納するように構成される、請求項9に記載の装置。
前記アレイの各行における前記それぞれの入力データセットが、ホストデバイスから、ホストインターフェースを介して、前記状態バッファによって受信される、請求項14に記載の装置。
出力バッファをさらに備え、各列の最後のPEが前記出力バッファに通信可能に接続され、前記出力バッファが、前記最後の行の各列に対応する前記第1のY-out要素および前記第2のY-out要素を格納するように構成される、請求項9に記載の装置。
処理素子(PE)の二次元アレイ内のPEによって、第1のX-in要素および第2のX-in要素を同時に受信するステップであって、前記二次元アレイが行および列に構成され、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、前記第1のX-in要素および前記第2のX-in要素が、所与の行における入力データセット内の連続する要素である、ステップと、
前記PEによって、所与の列における第1のY-in要素および第2のY-in要素を同時に受信するステップと、
前記PEによって、第1の乗算結果を生成するために前記第1のX-in要素に対して重み値を、かつ第2の乗算結果を生成するために前記第2のX-in要素に対して前記重み値を同時に乗算する乗算演算を実行するステップと、
前記PEによって、第1のY-out要素を生成するために前記第1の乗算結果に対して前記第1のY-in要素を、かつ第2のY-out要素を生成するために前記第2の乗算結果に対して前記第2のY-in要素を同時に加算する加算演算を実行するステップであって、前記二次元アレイの最後の行の前記第1のY-out要素および前記第2のY-out要素が、前記所与の列における出力データセットに対応する、ステップと
を含む、方法。
【発明を実施するための形態】
【0005】
[0016]以下の説明では、様々な実施形態を説明する。説明の目的で、実施形態が十分に理解されるようにするために、特定の構成及び詳細が示される。ただし、当業者には明らかなはずであるが、実施形態は特定の詳細なしで実施され得る。さらに、説明されている実施形態を不明瞭にすることを避けるために、周知の特徴は省略又は簡略化される場合がある。
【0006】
[0017]本開示の技術の実施形態は、ニューラルネットワーク演算のためにシストリックアレイを効率的に利用するためのシステム及び方法を提供し得る。シストリックアレイは、ディープニューラルネットワークの作業量を増やすために使用され得る。シストリックアレイは、二次元グリッドに通常構成される複数の処理素子(PE)を備え得る。特定の実施形態によれば、シストリックアレイにおける各PEは、PEの全計算能力を利用するために、入力データセットからの複数の入力データ要素を同時に処理することができる。加えて、いくつかの実施形態は、各出力データセットに対応する2つ以上の出力データ要素を同時に提供し得、これにより、シストリックアレイの性能を改善することができる。
【0007】
[0018]ニューラルネットワークは、脳内のニューロンの広大なネットワークと同様に、相互接続された複数のニューロン又はPEを備え得る。PEは、例えば、入力層、いくつかの中間層(隠れ層としても知られる)、及び出力層を含む層に分割され得る。入力層の各PEは、入力データセットの要素を受信し、その要素を、出力への要素の影響度を示す重み(フィルタとも呼ばれる)を用いてスケーリングし得る。中間層のPEは、入力層の各PEから受信したスケーリングされた要素を組み合わせて、一組の中間出力を計算し得る。例えば、中間層の各PEは、要素と重みとの積の和を計算し、その和に活性化関数を適用して中間出力を生成し得る。1つの中間層の各PEからの中間出力は、次の中間層の中間出力を決定するための、投票の影響を示す重みに関連する活性化された投票(又は無投票)と見なされ得る。出力層は、最後の中間層からのスケーリングされた中間出力の和を生成し、スケーリングされた中間出力の和が閾値を超えるか否かに基づいて2値出力(例えば、「はい」又は「いいえ」)を生成し得る。層どうしのスケーリングされた要素を組み合わせることに起因して、上位層(例えば、出力層、出力層の直前の中間層など)のサイズは、通常、下位層(例えば、入力層、入力層の直後の中間層など)のサイズよりも小さい。
【0008】
[0019]畳み込みニューラルネットワーク(CNN)は、一般に、フィードフォワード人工ニューラルネットワークである。ディープフィードフォワードニューラルネットワークは、複数の隠れ層を備えることができ、ある層からの出力は、次の層への入力として使用され得る。よって、一般に、情報は前方に送られる。CNN人工ニューラルネットワークは、視覚画像の解析にうまく適用されている。CNNは、元の画像を層ごとに元の画素値から最終分類スコアに変換するように構成され得る。畳み込みニューラルネットワーク(CNN)は、いくつかの畳み込み層とサブサンプリング層とを備えることができ、場合によりその後に1つ又は複数の全結合層が続く。
【0009】
[0020]入力画像の幅及び高さにわたって(例えば、スライディングウィンドウを使用して)各フィルタを畳み込むことができ、それぞれのドット積が、フィルタのエントリと所与の位置における入力画素との間で計算され得る。フィルタが入力画像の幅及び高さにわたってスライドされると、すべての空間位置でそのフィルタの応答を提供し得る二次元特徴マップ(例えば、活性化マップ)が生成され得る。次に、各特徴マップは、通常、隣接する領域にわたって平均又は最大プーリングでサブサンプリングされ得る。実装形態に基づいて、サブサンプリング層の前又は後に、追加のバイアス及びシグモイド非線形性が各特徴マップに適用され得る。活性化マップが深さ次元に沿って積み重ねられて、出力特徴マップが作成され得る。プーリング層は、空間次元、例えば幅及び高さに沿ったダウンサンプリング操作に使用され得る。全結合層は、最終的な分類スコアを提供するために使用され得る。
【0010】
[0021]入力データ(例えば、画像の画素)及び重みは、ホストサーバから受信され得る。各PEは、入力データ及び重みに対する加算及び乗算を含む同時算術演算を実行可能であり得る。次に、PEは、さらなる処理、例えば、正規化及び活性化のために、入力データ及び重みをシストリックアレイの他の要素に渡し得る。
図1は、ネットワーク状に接続されたPEのアレイを含み得るシストリックアレイの一例を示している。
【0011】
[0022]
図1は、4×4シストリックアレイ100を示している。例えば、シストリックアレイ100は、各行に4つのPEを含み、各列に4つのPEを含み得る。シストリックアレイ100は、各行及び各列に任意の数のPEを含み得ることを理解されたい。さらに、各PEは、行入力バス102と、列入力バス104と、列出力バス106と、行出力バス108とを備え得る。PEは、行入力バス102を介して同じ行の左のPEから(又は外部回路から)入力を受信し得る。PEはまた、列入力バス104を介して同じ列の上のPEから(又は外部回路から)入力を受信し得る。PEは、入力に基づいて算術演算を実行し、算術演算の結果を、列出力バス106を介して同じ列の下のPE(又は外部回路)に送信し得る。PEはまた、行入力バス102を介して受信された入力を、行出力バス108を介して同じ行の右のPEに転送し得る。
【0012】
[0023]シストリックアレイ100は、ニューラルネットワークの処理素子における乗算及び加算を含む算術演算を実行するように構成され得る。例えば、各PEは、乗算器及び加算器などの演算ユニットを備え得る。
図1の例では、PEの各行は、1組の入力データを処理するように構成され得、PEの各列は、所与の列の各PEが受信した複数組の入力データに基づいて1組の出力データを生成し得る。一実装形態では、PEの列112(左端の列)は、4組の入力データを受信し、入力データの各組が、1行のPEによって処理され得る。列112内の各PEは、行入力バス102を介して受信した対応する入力データセットから、入力値及び関連する重み値を取得し、入力値に重み値を乗じて、スケーリングされた入力を生成し得る。任意の列(列112を含む)内のPEによって生成されたスケーリングされた入力は、各PEの加算器によって累積され得る。例えば、(列112の)PE112aは、(第1の入力データセットから)第1のスケーリングされた入力を生成し、第1のスケーリングされた入力を部分和として列出力バス106を介してPE112bに送信し得る。PE112bはまた、(第2の入力データセットから)第2のスケーリングされた入力を生成し、第2のスケーリングされた入力を部分和に加え得る。次に、第1のスケーリングされた入力及び第2のスケーリングされた入力と共に累積された更新された部分和は、列出力バス106を介してPE112cに送信される。部分和は、更新され、列112にわたって伝播され、PE112dは、4つの入力データセットからスケーリングされた入力の和を生成し得る。さらに、列112内の各PEはまた、入力データセットを他のPE列(例えば、列114)に伝播させることもでき、これにより、列112からの異なる組の重みで入力データセットをスケーリングすることができる。PEの各列は、算術演算(乗算及び加算)を実行して、他の処理素子の出力要素を並列に生成し得る。
図1の例では、シストリックアレイ100は、シストリックアレイ100の4つの列に対応する4つのPEにおける出力要素を並列に生成し得る。
【0013】
[0024]シストリックアレイ100は、並列算術演算を可能にすることによりニューラルネットワーク処理をスピードアップすることができるが、シストリックアレイの利用率は、入力データのサイズ(例えば、ビット数)及び処理素子の算術ユニットの処理能力に基づいて変化し得る。一般に、シストリックアレイの処理素子は、サポートされている最高精度の入力データ型で動作するように設計され得る。例として、処理素子は、特定の精度を実現するために16ビットの固定小数点又は浮動小数点の入力データ型の計算をサポートし得る。ただし、場合によっては、より低い又は低精度のデータ型を使用して、同様の精度又はさらに優れた精度が実現され得る。場合によっては、同じ精度を実現するのに16ビットの計算を使用する代わりに、8ビットの計算で十分な場合もある。例えば、一部の実装形態をでは、16ビットの処理素子を使用して8ビットの計算を実行するときに、最上位8ビットが無視され得る。ただし、このような場合、一例として、PEの演算処理能力の半分が利用できず、シストリックアレイの利用率が50%以下になり得る。場合によっては、ニューラルネットワークの特定の用途(例えば、画像認識)は8ビットのデータ型で性能が向上し、他の特定の用途(例えば、製品の広告やマーケティング)は16ビットのデータ型で性能が向上することがある。そのような場合、16ビットデータ型に加えて、より小さなデータ型(例えば、4ビット、8ビット)もサポートできるように、16ビットデータ型のハードウェアを設計することが望ましい場合がある。よって、PEによってサポートされるビット数よりも少ないビット数を使用する計算のためのシストリックアレイの効率的な利用法が必要とされている。
【0014】
[0025]本開示の技術の実施形態は、シストリックアレイの効率的な利用のためのシステム及び方法を提供し得る。特定の実施形態では、シストリックアレイの各PEは、入力データセットの入力データ型及びサイズに基づいて、単一の計算又は複数の計算を同時に実行し得る。例えば、入力データセットのサイズがシストリックアレイのサイズ(例えば、8ビット又は16ビットのPE)よりも相対的に大きい場合、シストリックアレイは、入力データ型(例えば、4ビット、8ビット、16ビットなど)に基づいて、シストリックアレイを効率的に利用するために複数の計算を並列に実行し得る。このような場合、PEの全計算能力を利用するために、入力データセットからの複数の入力データ要素がPEに同時に供給され得る。例えば、2つの8ビット、又は4つの4ビット入力データ要素が、16ビットの計算能力を持つPEに供給され得る。所与のPEによって、そのPEへのすべての入力に対して同じ重みが使用され得る。重みは、シストリックアレイのすべてのPEに順次又は並列にロードされ得る。各PEは、同じ列の次に下位のPEに2つ以上の結果を伝播させ得る。各PEはまた、受信した入力データ要素を同じ行内の右側にある別のPEに伝播させ得る。よって、シストリックアレイの各PEによって複数の計算を並列に実行することにより、入力データセットを処理する時間を短縮できる。加えて、実施形態は、各出力データセットに対応する2つ以上の出力データ要素を同時に提供し得、これにより、シストリックアレイの性能を改善し得る。いくつかの実施形態は、より大きな入力データセットについてシストリックアレイに重みをロードすることを均すことができるため、より大きな入力データセットについての性能を大幅に改善し得る。
【0015】
[0026]
図2は、データを処理するために本明細書に開示される技法を使用し得る例示的な分類デバイス200を示している。分類デバイス200は、例えば、ソフトウェアアプリケーション202及び予測モデル204を操作して、入力データセットに含まれる情報を予測し、予測に基づいて所定の機能を実行する計算デバイスであり得る。例えば、分類デバイス200は、画像から特定のオブジェクト(例えば、テキスト、人物など)を識別するために提供される画像認識サービスの一部であり得る。いくつかの実施形態では、入力データセットは、入力特徴マップ要素を含む入力特徴マップと同様であり得る。画像認識サービスは例示のための例として提供されたに過ぎず、本明細書で開示される技法は、例えばテキストベースのデータ処理(例えば、検索クエリの処理)、音声データ処理などを含む他のデータ処理用途に使用され得ることを理解されたい。
【0016】
[0027]画像認識サービスは、マルチテナントコンピューティングサービスシステムで提供され得る。マルチテナントコンピューティングサービスシステムは、一般に、データをホストし、複数のクライアント又は組織によって仮想マシンインスタンスやベアメタルインスタンス(例えば、サーバハードウェアで直接実行されるオペレーティングシステム)などのインスタンスを実行するために使用され得る複数のサーバを含み得る。大抵の場合、マルチテナントコンピューティングサービスシステムのベアメタル又は仮想マシンインスタンスなどのインスタンスは、クライアントがそれらを必要とするときにクライアントに割り当てられ、それらが不要になるとリソースが他のクライアントに再割り当てされ得るように廃止され得る。本開示では、「テナント」、「クライアント」、及び「顧客」という用語は交換可能に使用され得るが、これらの用語は必ずしも特定のビジネス契約の存在を意味するものではない。「インスタンス」という用語は、例えば、サーバハードウェア上で直接、又は仮想マシンとして実行されるインスタンスを指し得る。異なるタイプのインスタンスは、一般に、異なるハードウェア機能及び/又はハードウェアの構成(例えば、異なる量の使用可能なメモリ及び/又は処理ハードウェア)に対応する。
図2の例では、マルチテナントコンピューティングサービスシステムは、クライアントが画像認識サービスを必要とするときに画像認識サービスを提供し、不要になると、画像認識サービスをサポートするリソース(例えば、ソフトウェアアプリケーション202へのアクセス、及びソフトウェアアプリケーション202を処理するための基礎となるハードウェアリソース)が他のクライアントに再割り当てされ得るように廃止され得る。
【0017】
[0028]場合によっては、ソフトウェアアプリケーション202は、ユーザから画像の画素データを受信し得る。画像は、画素の配列を含み得る。ソフトウェアアプリケーション202は、画素データに対して解析を実行し、画像に描かれた1つ又は複数のオブジェクトを予測し得る。解析は、例えば、画素データを一組の所定の特徴データと比較することを含み得る。所定の特徴データは、視覚的画像特徴、非視覚的画像特徴、又は視覚的画像特徴と非視覚的画像特徴との組み合わせに関連するデータを含み得る。以下でより詳細に説明するように、ソフトウェアアプリケーション202は、予測を行うために、予測モデル204を使用して、画像の画素データに基づいて一組のスコアを計算し得る。次に、ソフトウェアアプリケーション202は、スコアに基づいて画像の内容に関する他の情報を判定し得る。例えば、スコアに基づいて、ソフトウェアアプリケーション202は、画像が特定のオブジェクト(例えば、人、車、木など)であることを判定し得る。
【0018】
[0029]予測モデル204は、人工ニューラルネットワークの形態であり得る。人工ニューラルネットワークは、複数の処理素子を備えることができ、各処理素子は、入力画素データの一部を処理するように、又は他の処理素子からの中間出力をさらに処理するように構成される。
図3を参照しながら、例示的な予測モデルの例を説明する。
【0019】
[0030]
図3は、本明細書に開示される技法を使用し得る予測モデルの一例を示している。
図3の例では、予測モデル204は、ディープニューラルネットワーク(DNN)、畳み込みニューラルネットワーク(CNN)、又は任意の適切なニューラルネットワークなどの多層ニューラルネットワーク300であり得る。予測モデル204は、入力層302と、中間層304及び306を含む一組の中間層と、出力層(
図3には示さず)とを備え得る。各層は、それぞれの一組の処理素子を備え得る。
【0020】
[0031]層302は、PE302a、302b、302c、…、302nを備え得る。層302は、入力データセット、例えば、画像の異なる部分を表す画素データを処理し得る。場合によっては、層302の各PEは、画像内の所定の画素に対応する画素値(例えば、x
0、x
1、x
2、…、x
n)を受信するように割り当てられてもよく、受信した画素値と共に1つ又は複数の重みを層304に送信してもよい。予測モデル204がDNNである場合、層302の各PEは、行列W1に基づいて定義された1組の重みを割り当てられ得る。層302の各PEは、受信した画素値及び割り当てられた重みを層304の各PEに送信し得る。予測モデル204がCNNである場合、層302のPEの複数のグループが、一組の重みを共有することができ、各グループは、その一組の重み及びPEのグループが受信した画素値を層304の単一のPEに送信し得る。
【0021】
[0032]層304は、層302からのスケーリングされた出力を処理して、一組の中間出力を生成することができる。いくつかの例では、層304のPE304aは、層302内のPEのグループに接続され得、層304のPE304bは、層302内のPEのグループに接続され得る。一例として、PE304bは、次式に基づいて、層302から受信したスケーリングされた出力の和を生成し得る。
【0023】
[0034]上式で、sum
304bは、PE304bによって生成された和を表す。W1
i×x
iは、層302のPEによる、関連する重み(例えば、W1
0)による特定の画素値(例えば、x
0)のスケーリングを表し得る。予測モデル204がDNNである場合、層304の各PEは、層302の各PEからの画素値のスケーリングに基づいて和を生成し、その後、スケーリングされた画素値の和を取ることにより和(例えば、sum
304b)を生成し得る。この和はまた、いくつかの要素(例えば、画素値)を含む入力ベクトルと重みベクトル(例えば、W1)との間のドット積を表し得る。
【0024】
[0035]一方、予測モデル204がCNNである場合、層304の各PEは、層302のPEのグループからの画素値のスケーリングに基づいて和を生成し得る。この和は、画素値のグループと重み値を含むフィルタとの間の畳み込み結果を表し得る。
【0025】
[0036]
図4A及び
図4Bは、畳み込み層304の操作を示している。
【0026】
[0037]
図4Aでは、フィルタ402は、重みの二次元配列を含み得る。フィルタ402内の重みは、入力画像404から検出されるべき特定の特徴における画素の空間分布を表し得る。入力画像404は、H個の画素の高さ及びW個の画素の幅を含み得る。フィルタ402は、R行の高さ及びS列の幅を有することができ、一般に、入力画像404より小さい。フィルタ402内の各重みは、同じR行S列の画素値の長方形ブロック内の画素にマッピングされ得る。いくつかの実装形態では、入力画像404の画素データは、入力特徴マップの入力特徴マップ要素と呼ばれる場合があり、画素が特定の特徴(複数可)に対応する同じフィルタ(又は同じ複数組のフィルタ)によって処理されることを示し得る。出力特徴マップは、フィルタ402と入力特徴マップとの間の畳み込み出力を表し得る。
【0027】
[0038]
図3を参照して説明したように、層304のPE(例えば、PE304b)は、入力層302のPEのグループから、入力画像404からの第1の長方形の画素ブロックに対応する画素値のグループ408aを受信し得る。画素値のグループ408aは、第1の入力データセットとして提示され得る。PE304bは、式1に従って、フィルタ402の各重みとグループ408a内の対応する各画素との間の乗算結果の和に基づいて、畳み込み出力410aを生成し得る。例えば、PE304bは、フィルタ402によって表される行列とグループ408aによって表される行列との間でドット積を生成し得る。
【0028】
[0039]
図4Bに示すように、層304の別のPE(例えば、PE304a)もまた、入力層302のPEの別のグループから、入力画像404からの第2の長方形の画素ブロックに対応する画素値のグループ408bを受信し得る。画素値のグループ408bは、第2の入力データセットとして提示され得る。PE304aは、式1に従って、フィルタ402の各重みとグループ408b内の対応する各画素との間の乗算結果の和に基づいて、畳み込み出力410bを生成し得る。PE304aは、フィルタ402の行列とグループ408bによって表される行列との間でドット積を生成し得る。いくつかの実施形態では、
図4A及び
図4Bの各畳み込み出力(例えば、畳み込み出力410a、畳み込み出力410bなど)は、層304のPEの出力に対応し得る。畳み込み出力は、入力画像404内の画素データを含む入力特徴マップをフィルタ402によって処理した結果を示す出力特徴マップに対応し得る。畳み込み出力410a及び畳み込み出力410bのそれぞれは、それぞれの出力データ要素を含む出力データセットの形態であり得る。
【0029】
[0040]
図4Bに示されるように、畳み込み演算は、グループ408bの第2の長方形ブロックが入力画像404のグループ408aの第1の長方形ブロックと重なるか、そうでなければ隣接するように、スライディングウィンドウで構成され得る。例えば、
図4Bの例では、「D」は、グループ408bに対応する画素のブロックがグループ408aに対応する画素のブロックから距離D(画素単位)に配置され得るように、また次の画素のブロックもグループ408bから同じ距離Dに配置され得るように、畳み込み演算ごとのスライディングウィンドウのストライドの距離(画素単位)を示し得る。層304の他のPEもまた、他の長方形ブロックに対応する画素のグループを受信し、他の中間出力を生成し得る。畳み込み出力は、E行の高さ及びF列の幅を有する畳み込み出力配列406の一部であり得る。畳み込み出力の配列406は、入力画像より小さい高さ及び狭い幅を有し得る。畳み込み出力の長方形ブロックは、さらにグループ化され得、畳み込み演算は、別の組の畳み込み出力を生成するために畳み込み出力のグループと別の組のフィルタ重みとの間の層306で実行され得る。いくつかの実装形態では、畳み込み演算は、複数の画像と複数のフィルタとの間で実行され得る。このことを、
図5Aを参照してさらに説明する。
【0030】
[0041]
図5Aは、一組の画像と一組のフィルタとの間の畳み込み層操作の一例を示している。
【0031】
[0042]いくつかの実装形態では、畳み込み演算は、複数の画像と複数のフィルタとの間で実行され得る。
図5Aに示すように、一組のC個のフィルタ502が一組のC個の画像504に適用され得る。畳み込み演算は、一組のフィルタ502の各フィルタと、画像504の対応する画像上の画素のブロックとの間で実行され得る。フィルタと画像との各対についての畳み込み結果が加算されて、次のように畳み込み出力を生成し得る。
【0033】
[0044]上式で、畳み込み演算は、一組のC個の画像(又は画素配列)を含む。X
ceD+r,fD+sは、一組のC個の画像504内のインデックスcの画像における画素の値を指し、eD+rは、水平画素座標であり、fD+sは、垂直画素座標であり得る。Dは、スライディングウィンドウのストライド距離であり、一方、e及びfは、特定のスライディングウィンドウにも対応し得る畳み込み出力配列506における出力の位置に対応する。さらに、r及びsは、スライディングウィンドウ内の特定の位置に対応し得る。(r,s)の位置にあるインデックスcの画像の画素はまた、同じ(r,s)の位置にある同じインデックスcの対応するフィルタ内の重みW
cr,sにも対応する。式2は、畳み込み出力O
e,fを計算するために、スライディングウィンドウ内の各画素((e,f)で示される)が対応する重みW
cr,sを乗算され得ることを示す。一組の画像504内の画像のそれぞれについて、各スライディングウィンドウ内の乗算による積の部分和が計算され得る。次に、一組の画像504のすべての画像について部分和の和が計算され得る。
【0034】
[0045]さらに、いくつかの例では、複数組のフィルタが、一組の画像に畳み込み演算を実行するために使用されて、一組の畳み込み出力配列を生成でき、各畳み込み出力配列が一組のフィルタに対応し得る。例えば、複数組のフィルタは、一組の画像504から検出されるべき複数の特徴に対応でき(例えば、ある一組のフィルタがオブジェクトの第1の部分に対応し、別の一組のフィルタが、オブジェクトの第2の部分に対応するなど)、各畳み込み出力配列は、一組の画像504からの各特徴の検出結果に対応し得る。例えば、M組のフィルタが一組のC個の画像に適用されて、M個の畳み込み出力配列を生成する場合、式2は次のように更新され得る。
【0036】
[0047]上式で、畳み込み出力O
e,fm及び重みW
c,mr,sは、M組のフィルタのうちの1組に対応するインデックスmを有する。
【0037】
[0048]
図5Bは、M組のフィルタ(M=2)で畳み込まれるC組の入力データ(C=3)の一例を示している。入力データの各組は、画素配列のエントリに対応する。M組のフィルタのそれぞれは、C組の入力画素配列に対応する1組のC個のフィルタを含む。畳み込み演算は、M組の出力データセットを生成し、各出力データセットは、畳み込み出力配列に対応し得る。各畳み込み出力配列は、(M組のうちの)1組のフィルタを入力画素配列により畳み込むことに対応し得る。例えば、O
0,00は、画素のグループ510とフィルタ配列516との間のドット積、画素のグループ512とフィルタ配列518との間のドット積、及び画素のグループ514とフィルタ配列520との間のドット積の和によって生成され得る。
【0038】
[0049]
図3を再び参照すると、層304の1つのPEは、1つの畳み込み出力配列のうちの畳み込み出力を(例えば、一度に1つ)生成するように構成され得、層304のPEのM組は、畳み込み出力配列のM組に対応し得る。層304のPEはまた、活性化関数を用いて各畳み込み出力を処理して、活性化出力を生成し得る。活性化関数は、畳み込み出力を、(実際の生物学的ニューロンの発火に類似して)分類器の決定に影響を与えるために畳み込み出力を中間層306に転送するか否かの決定に変換し得る。活性化関数の例は、次式に従って定義された正規化線形ユニット(ReLu)であり得る。
【0039】
[0050]ReLu(y)=max(0,y)(式4)
【0040】
[0051]層304のPE(例えば、PE304b)は、ReLu関数により和を処理して、次式に基づいて第1の中間出力を生成し得る。
【0041】
[0052]first_intermediate_output
210a=ReLu(Sum
210a)(式5)
【0042】
[0053]予測モデル204がCNNである場合、予測モデル204は、第1の中間出力のサイズを削減するためにプーリング層(
図3には示さず)を含み得る。例えば、プーリング層は、ダウンサンプリング操作を実行し、(ReLu関数に基づいて生成された)中間出力のグループのうちの最大中間出力を(グループ内の残りの中間出力を破棄しながら)層306に転送し得る。
【0043】
[0054]層306は、例えば、異なる組のフィルタに基づいて追加の畳み込み演算を実行することによって、層304からのスケーリングされた中間出力をさらに処理し得る。層306の各PEからの出力は、他のより上位の中間層、又は出力層(
図3には示さず)に転送され得る。出力層は、例えば、特定の画像特徴が画像に含まれる確率、及び/又は画像が特定のオブジェクト(例えば、人、車、木など)を含む確率を表す出力ベクトルを形成し得る。例えば、出力ベクトルは、オブジェクトの一部に関連する参照ベクトル、又はオブジェクトに関連する参照ベクトルと比較され得る。画像が特定のオブジェクトの画像であるか否かに関する決定は、比較結果に基づいて判定され得る。
【0044】
[0055]場合によっては、シストリックアレイが効率的に使用されないことがある。例えば、シストリックアレイのPEは16ビットの入力データをサポートできる場合もあるが、シストリックアレイの用途によっては8ビットの計算だけしかPEで実行できない場合もある。このような場合、シストリックアレイの半分が使用されないことがある。本開示の技術のいくつかの実施形態は、入力データセットからの複数のデータ要素を並列に処理することにより、シストリックアレイの利用を改善し得る。例えば、16ビットのPEは、同じ重み値を使用して、同じ入力データセットからの第1の8ビットデータ要素及び第2の8ビットデータ要素に対して2つの8ビットの計算を同時に実行できる。よって、一度に8ビットの計算のみを実行する場合と比較して、半分の時間で出力データセットを生成することにより、シストリックアレイの性能が最適化され得る。
【0045】
[0056]
図6は、本開示の技術のいくつかの実施形態によるニューラルネットワーク演算のための装置600を示している。装置600は、コンピュータシステム、例えばホストサーバの一部であってもよい。例えば、ホストサーバは、画像認識サービス、テキストベースのデータ処理(例えば、検索クエリの処理)、音声データ処理などのデータ処理用途のためのマルチテナントコンピューティングサービスを提供し得る。装置600は、
図2を参照して説明したような、予測モデル204を用いた計算のための計算及びメモリリソースを提供し得る。いくつかの実施形態では、ホストデバイスは、ソフトウェアアプリケーション202を操作し、装置600と通信して、予測モデル204を用いた計算に基づいて予測を行うことができる。例えば、ホストデバイスは、予測モデル204を使用して、画像、テキスト、音声などの入力データセットに含まれる情報を識別することによって予測を行うことができる。
【0046】
[0057]装置600は、メモリ614、ホストインターフェース616、及びダイレクトメモリアクセス(DMA)コントローラ618にインターコネクト620を介して接続されたニューラルネットワークプロセッサ602を備え得る。ニューラルネットワークプロセッサ602は、計算エンジン604と、計算コントローラ606と、状態バッファ608と、出力バッファ610と、活性化エンジン612とを備え得る。より詳細に論じるように、ニューラルネットワークプロセッサ602は、予測モデル204による計算をサポートするための計算リソースを提供し得る。ニューラルネットワークプロセッサ602は、システムオンチップ(SoC)、フィールドプログラマブルゲートアレイ(FPGA)、又は任意の適切な回路として実装され得る。
【0047】
[0058]メモリ614は、ホストデバイスから受信した命令、入力データセット(例えば、画像の画素データ)、及び重み(例えば、特定の視覚的及び/又は非視覚的特徴に対応する重み)を格納するように構成され得る。メモリ614はまた、ニューラルネットワークプロセッサ602の出力(例えば、出力データセットの形態の入力画像に関する1つ又は複数の画像認識決定)を格納するように構成され得る。メモリ614は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、シンクロナスDRAM(SDRAM)、ダブルデータレートDRAM(DDR DRAM)、ストレージクラスメモリ(SCM)、フラッシュメモリなどの任意の適切なメモリを含み得る。
【0048】
[0059]ホストインターフェース616は、ホストデバイスとニューラルネットワークプロセッサ602との間の通信を可能にするように構成され得る。例えば、ホストインターフェース616は、ホストデバイスとニューラルネットワークプロセッサ602との間で、格納されたデータのメモリアドレス(例えば、入力データセット、重み、計算結果など)を含むメモリ記述子を送信するように構成され得る。ホストインターフェース616は、例えば、ペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)インターフェース、又はホストデバイスと通信するための任意の適切なインターフェースを含み得る。ホストデバイスは、ホストプロセッサとホストメモリとを備え得る。
【0049】
[0060]DMAコントローラ618は、ニューラルネットワークプロセッサ602とホストデバイスとの間でデータを転送するためにDMA操作を実行するように構成され得る。例えば、上述のように、ホストデバイスは、命令、入力データセット、及び重みをメモリ614に格納し得る。ホストデバイスは、格納された命令、データ、及び重みのためのメモリアドレスをニューラルネットワークプロセッサ602に(例えば、メモリ記述子の形で)提供し得る。次に、ニューラルネットワークプロセッサ602は、ホストデバイスによって提供されたメモリアドレスに基づいて、格納された命令、データ、及び重みを取得し得る。ニューラルネットワークプロセッサ602はまた、計算の結果(例えば、1つ又は複数の画像認識決定)をメモリ614に格納し、格納された結果のメモリアドレスをホストデバイスに提供し得る。
【0050】
[0061]計算コントローラ606は、ニューラルネットワーク演算を実行するためにニューラルネットワークプロセッサ602の様々なコンポーネントに制御を提供するように構成され得る。計算コントローラ606は、計算エンジン604に重みをロードするスケジューリングを実行し得る。重みは、状態バッファ608に格納され得る。一実施形態では、計算コントローラ606は、それぞれの行データバスを使用して、シストリックアレイ内のすべてのPEにおける重みのロードを順次スケジュールすることができる。例えば、1つのPEに1つの重みがサイクルごとにロードされ得る。別の実施形態では、計算コントローラ606は、所与の行の各PEについてそれぞれの列データバスを使用して、行ごとに並列にシストリックアレイにおける重みのロードをスケジュールし得る。例えば、各行における重みは、サイクルごとに並列にロードされ得る。いくつかの実装形態では、計算コントローラ606は、ホストデバイスから受信した命令に基づいて、入力データセットのデータ型を判定し得る。例えば、命令は状態バッファ608に格納され得る。命令は、オペコードの形態であり得る。データ型は、入力データ要素のサイズ及び型、例えば4ビット、8ビット、16ビット、符号付き、符号なし、又は浮動小数点を示し得る。
【0051】
[0062]いくつかの実施形態では、計算コントローラ606は、入力データセットのデータ型及びサイズに基づいて、計算エンジン604の動作モードを判定し得る。例えば、入力データセットがシストリックアレイのサイズ(例えば、16×16)よりもはるかに大きい(例えば、2000個のデータ要素)場合、計算コントローラ606は、計算エンジン604の動作モードを最適化モードに切り替えることができる。最適化モードは、計算エンジン604が各入力データセットに対して複数の計算を並列に実行することを可能にし得る。例えば、各PEは、4ビットデータ型の場合は4つの4ビットの計算を並列に実行でき、8ビットデータ型の場合は2つの8ビットの計算を並列に実行できる。PEによって同時に処理され得る入力データ要素の数は、本開示の技術の範囲から逸脱することなくPEのサイズに基づいて変化し得ることが理解されよう。例えば、32ビットのPEの場合、最適化モードは、計算エンジン604が4つの8ビットの計算、8つの4のビット計算、2つの16ビットの計算などを実行できるようにし得る。他のいくつかの例では、入力データセットがシストリックアレイのサイズ(例えば、16×16)より小さいか、同等(例えば、200個のデータ要素)である場合、計算エンジン604の動作モードを最適化モードに切り替えることは、重みをシストリックアレイにロードしても、より小さいデータセットでは均されない場合があるため、あまり効果的ではない。
【0052】
[0063]状態バッファ608は、計算エンジン604での計算に使用されるデータをキャッシュするように構成され得る。状態バッファ608にキャッシュされたデータは、例えば、メモリ614から取得された入力データセット及び重み、並びに計算エンジン604での計算の中間出力を含み得る。キャッシュすることにより、(例えば、メモリ614、DMAコントローラ618、インターコネクト620などにおけるレイテンシによって引き起こされる)メモリアクセスボトルネックが計算エンジン604の性能に及ぼす影響を低減することができる。状態バッファ608は、オンチップメモリデバイスであり得、スタティックランダムアクセスメモリ(SRAM)又は任意の適切なメモリを含み得る。
【0053】
[0064]出力バッファ610は、計算エンジン604によって生成された出力データセットを格納するための一組のレジスタを備え得る。出力バッファ610はまた、例えば、格納された出力のサイズを削減するためのプーリング操作などの追加の処理を可能にし得る。いくつかの実装形態では、計算エンジン604は、特定のニューラルネットワーク層の計算を実行するように動作することができ、出力バッファ610は、そのニューラルネットワーク層の出力を処理し、処理された出力データセットを状態バッファ608において格納することができる(活性化エンジン612による処理の有無を問わない)。いくつかの実施形態では、出力バッファ610は、
図5Aを参照して説明したように、畳み込み出力配列506を生成するために、異なる組のフィルタ(例えば、M個)及び入力データセット(例えば、C個)に対して生成された部分和を累積する加算器を含み得る。状態バッファ608に格納された畳み込み出力配列506の最終出力値は、状態バッファ608に格納するために計算コントローラ606によって取得され得る。
【0054】
[0065]活性化エンジン612は、出力バッファ610の出力に対して1つ又は複数の活性化関数(例えば、ReLu関数)を適用するように構成され得る。例えば、活性化エンジン612は、活性化関数を入力に適用した結果を表す候補出力のうちの1つに入力をマッピングすることができる1つ又は複数のルックアップテーブル(例えば、マルチプレクサ回路の形態で)を含み得る。いくつかの例では、活性化エンジン612はまた、活性化関数が適用されない場合に出力バッファ610からの出力が状態バッファ608に直接格納されることを可能にするバイパス経路も備え得る。
【0055】
[0066]計算エンジン604は、ニューラルネットワーク演算を実行するように構成され得る。いくつかの実施形態では、計算エンジン604は、ニューラルネットワーク演算に含まれる1つ又は複数の算術演算を実行するように構成された1組のPEを備え得る。各PEは、入力データセット及び関連する重みを使用して、行列の乗算及び行列の畳み込みを実行し得る。重み及び入力データセットは、1つ又は複数のインターフェースを使用して状態バッファ608から取得され得る。計算エンジン604の例示的な構造を、
図7を参照して説明する。
【0056】
[0067]
図7は、本開示の技術のいくつかの実施形態による計算エンジン604の内部構造を示している。いくつかの実装形態では、計算エンジン604は、複数の行及び列に構成されたPEの二次元アレイを備えることができ、行は第1の次元を表し、列は第2の次元を表すことができる。本明細書で使用される場合、「行」と「列」とは交換可能であり、二次元アレイの異なる次元を表すために使用される。
【0057】
[0068]アレイの各行は「x」個のPEを含むことができ、アレイの各列は「y」個のPEを含むことができる。例えば、「x」及び「y」は、16、32、64、128、又は任意の適切な正の整数であり得る。いくつかの実施形態では、アレイの左端の列のPE00、PE10、PE20、…、PEx0は、一組の外部行バス700を介して状態バッファ608に接続され得る。各行内の隣接するPE(例えば、PE00、PE01、PE02、…、PE0y)は、内部行バス706を介して互いに接続され得る。さらに、各列内の隣接するPEは、内部列バス708を介して互いに接続され得る。最上行のPE00、PE01、PE02、…、PE0yは、一組の外部入力列バス702を介して状態バッファ608に接続され得る。場合によっては、外部入力列バス702は、計算コントローラ606によってゼロにされて、計算エンジン604における計算をリセットすることができる。加えて、最下行のPEx0、PEx1、PEx2、…、PExyは、一組の外部列バス704を介して出力バッファ610に接続され得る。
【0058】
[0069]外部行バス700及び外部入力列バス702はまた、計算エンジン604に重みを順次又は並列にロードするために使用され得る。一実施形態では、重みは、外部入力列バス702を介して、シストリックアレイの各行に対して順次ロードされ得る。例えば、重みは、状態バッファ608から、外部入力列バス702を介して左端の列のPE00、PE10、PE20、…、PEx0にロードされ得る。重みは、内部列バス708を介して、行ごとに右列の隣接するPEにさらにシフトされ得る。別の実施形態では、重みは、外部入力列バス702を介してシストリックアレイの各行に対して並列にロードされ得る。例えば、重みは、状態バッファ608から、外部入力列バス702を介して最上行のPE00、PE01、PE02、…、PE0yにロードされ得る。重みは、内部行バス706を介して、列ごとに下行の隣接するPEにさらにシフトされ得る。
【0059】
[0070]特定の実施形態では、同じ入力データセットの2つ以上のデータ要素が、それぞれのインターフェースを使用して各行に供給され得る。
図7に示すように、第1の入力データセット「indataset0」からの2つのデータ要素は、PE00に同時に供給され得、第2の入力データセット「indataset1」からは、PE10に供給され得、第3の入力データセット「indataset2」からは、PE20に供給され得、第xの入力データセット「indatasetx」からは、PEx0に供給され得る。
図5Bを再び参照すると、一例では、indataset0は、画素のグループ510に対応するデータ要素を含み得、indataset1は、画素のグループ512に対応するデータ要素を含み得、indataset2は、画素のグループ514に対応するデータ要素を含み得る。
【0060】
[0071]最後の行の各PEは、所与の列において、上の行のPEからの結果を累積し得る。
図7に示すように、PEx0は、第1の出力データセット「outdataset0」に対応する1つ又は複数の出力データ要素を生成し得、PEx1は、第2の出力データセット「outdataset1」に対応する1つ又は複数の出力データ要素を生成し得、PEx2は、第3の出力データセット「outdataset2」に対応する1つ又は複数の出力データ要素を生成し得、PExyは、第yの出力データセット「outdatasety」に対応する1つ又は複数の出力データ要素を生成し得る。
【0061】
[0072]
図8は、本開示の技術のいくつかの実施形態によるPE800の例示的なブロック図を示している。PE800は、
図7に示すように、計算エンジン604のPEのいずれであり得る。PE800は、第1の入力レジスタ802と、第2のパイプラインレジスタ804と、重みレジスタ806と、第1の乗算器808と、第1の加算器810と、第2の乗算器812と、第2の加算器814とを備え得る。いくつかの実装形態では、第1の加算器810及び第2の加算器814のそれぞれが、8ビット加算器であり得、第1の乗算器808及び第2の乗算器812のそれぞれが、8ビット乗算器であり得る。PE800は、任意の適切な回路を使用して実装され得る。
【0062】
[0073]PE800は、第1の行入力データX
IN1を受信する第1の入力ポートと、第2の行入力データX
IN2を受信する第2の入力ポートとを備え得る。いくつかの実施形態によれば、第1の行入力データX
IN1及び第2の行入力データX
IN2は、入力データセットからの連続する要素であり得る。PE800は、PE800の所与の列において、第1のYin要素を受信する第3の入力ポートと、第2のYin要素を受信する第4の入力ポートとを備え得る。
【0063】
[0074]第1の入力レジスタ802は、第1の行入力データX
IN1をバッファして第1の乗算器808に提供するように構成され得る。第1の入力レジスタ802はまた、バッファされた第1の行入力データX
IN1を、第1の行出力データX
OUT1として、PE800の右側の隣接するPEに提供することができる。第2の入力レジスタ804は、第2の行入力データX
IN2をバッファして、第2の乗算器812に提供するように構成され得る。第2の入力レジスタ804はまた、バッファされた第2の行入力データX
IN2を、第2の行出力データX
OUT2として、PE800の右側の隣接するPEに提供することができる。いくつかの実装形態では、第1の行入力データX
IN1及び第2の行入力データX
IN2は、それぞれ8ビットを含み得る。
【0064】
[0075]いくつかの実施形態では、PE800は、第1のインターフェースを介して第1の行入力データX
IN1及び第2の行入力データX
IN2を同時に受信することができ、第2のインターフェースを介して第1の列入力データY
IN1及び第2の列入力データY
IN2を同時に受信することができる。異なる実施形態では、「同時(concurrent)」という用語は、同時に(simultaneously)(同じ時間に(at the same time))、並列に(in parallel)、又は特定の期間内に発生することを意味し得る。重みWx,yは、第1のインターフェース又は第2のインターフェースを介してPE800にロードされ得る。いくつかの実装形態では、第1の行入力データX
IN1、第2の行入力データX
IN2、及び重みWx,yは、行入力データバス816の一部であり得る。例えば、行入力データバス816は、8ビットの第1の行入力データX
IN1、8ビットの第2の行入力データX
IN2、8ビットの重みWx,y、及び制御ビット(例えば、データ型、オペコードなど)を含み得るバス幅の広いバスであり得る。行入力データバス816は、スプリッタ(図示せず)を使用して、第1の行入力データX
IN1、第2の行入力データX
IN2、重みWx,y、及び制御ビットに分割され得る。いくつかの実装形態では、行入力データバス816は、
図1を参照して説明したように、行入力バス102と同様であり得る。いくつかの実施形態では、第1の行出力データX
OUT1及び第2の行出力データX
OUT2は、行出力データバス820の一部であり得る。実装形態に基づいて、行出力データバス820はまた、Wx,y及び制御ビットも含み得る。例えば、PE800の行出力データバス820は、PE800の右側の隣接するPEの行入力データバス816であり得る。
【0065】
[0076]重みレジスタ806は、PE800における重み値Wx,yをキャッシュするように構成され得る。いくつかの実施形態では、重み値Wx,yは、8ビットを含み得る。重み値Wx,yは、単一の8ビット重みレジスタ806又は2つの8ビット重みレジスタ806にキャッシュされ得る。例えば、第1の8ビット重みレジスタ806の値は、第1の乗算器808に供給され得、第2の8ビット重みレジスタ806の値は、第2の乗算器812に供給され得る。よって、いくつかの実施形態によれば、両方の算術計算を実行するために各PEに単一の重み値を使用することにより、アレイの記憶域全体を削減することができる。
【0066】
[0077]第1の乗算器808は、Wx,y値と第1の行入力データX
IN1との間の乗算演算を実行して、第1の中間結果を生成するように構成され、第1の中間結果は第1の加算器810に供給され得る。第1の加算器810はまた、第1の列入力データY
IN1を受信し、第1の列入力データY
IN1と第1の中間結果との間の加算演算を実行して、第1の列出力データY
OUT1によって表される部分和を生成するように構成され得る。いくつかの実装形態では、第1の乗算器808は、8ビットのWx,y値を8ビットの第1の行入力データX
IN1に乗算して、16ビットの乗算結果を生成し得る。第1の加算器810は、第1の乗算器808からの16ビットの乗算結果を16ビットの第1の列入力データY
IN1に加算して、第1の列出力データY
OUT1によって共に表される16ビットの部分和及び任意のオーバーフロービット(複数可)を生成し得る。
【0067】
[0078]第2の乗算器812は、Wx,y値と第2の行入力データX
IN2との間の乗算演算を実行して、第2の中間結果を生成するように構成され、第2の中間結果は第2の加算器814に供給され得る。第2の加算器814はまた、第2の列入力データY
IN2を受信し、第2の列入力データY
IN2と第2の中間結果との間の加算演算を実行して、第2の列出力データY
OUT2によって表される部分和を生成するように構成され得る。いくつかの実装形態では、第2の乗算器812は、8ビットのWx,y値を8ビットの第2の行入力データX
IN2に乗算して、16ビットの乗算結果を生成し得る。第2の加算器814は、第2の乗算器812からの16ビットの乗算結果を16ビットの第2の列入力データY
IN2に加算して、一緒に第2の列出力データY
OUT2によって表される16ビットの部分和及び任意のオーバーフロービット(複数可)を生成し得る。
【0068】
[0079]特定の実施形態では、第1の乗算器808及び第2の乗算器812は、それぞれの乗算演算を同時に実行して、第1の中間結果及び第2の中間結果を同時に又は特定の期間内に生成し得る。例えば、第1の乗算器808及び第2の乗算器812は、期間「t1」内にそれぞれの乗算演算を並列に実行し得る。同様に、第1の加算器810及び第2の加算器814は、それぞれの加算演算を同時に実行して、第1の列出力データY
OUT1及び第2の列出力データY
OUT2を同時に又は特定の期間内に生成し得る。例えば、第1の加算器810及び第2の加算器814は、期間「t2」内にそれぞれの加算演算を並列に実行し得る。期間「t1」及び「t2」は、同じ値又は異なる値を含み得る。
【0069】
[0080]PE800は、第2のインターフェースを介して第1の列入力データY
IN1及び第2の列入力データY
IN2を同時に受信し得る。例えば、いくつかの実装形態では、第1の列入力データY
IN1及び第2の列入力データY
IN2は、列入力データバス818の一部であり得る。列入力データバス818は、外部入力データバス、又は同じ列のPE800のすぐ上の隣接するPEからの列出力データバスであり得る。同じ列のすぐ上にある隣接するPEからの列出力データバスは、第1の部分和及び第2の部分和を含み得る。第1の部分和は、その列内かつその前のPEまでのPEのそれぞれの第1の乗算器によって生成されたすべての乗算結果の和を表し得る。第2の部分和は、その列内かつその前のPEまでのPEのそれぞれの第2の乗算器によって生成されたすべての乗算結果の和を表し得る。列入力データバス818は、他の関連ビットを含み得ることが理解されるであろうが、簡単のためにここでは論じない。例えば、列入力データバス818はまた、1つ又は複数のオーバーフロービット、オペコードなどを含み得る。いくつかの実施形態では、列入力データバス818は、重みレジスタ806にWx,y値をロードするために使用され得る。よって、特定の実施形態は、それぞれの列入力データバス818を使用して、シストリックアレイの所与の行内のすべてのPEについてWx,y値を並列にロードすることを可能にし得る。列入力データバス818は、スプリッタ(図示せず)を使用して第1の列入力データY
IN1と第2の列入力データY
IN2とに分割され得る。いくつかの実装形態では、第1の列入力データY
IN1及び第2の列入力データY
IN2はバッファされ得、それぞれのバッファされた出力が、第1の加算器810及び第2の加算器814に提供され得る。
【0070】
[0081]いくつかの実装形態では、第1の列出力データY
OUT1及び第2の列出力データY
OUT2は、列出力データバス822の一部であり得る。列出力データバス822は、外部出力データバス、又は同じ列のPE800のすぐ下の別の隣接するPEへの列入力データバスであり得る。例えば、列出力データバス822は、第1の列入力データY
IN1、第2の列入力データY
IN2、及び他の関連ビット(例えば、オーバーフロー、オペコードなど)を含むことができ、これらは、簡単のためにここでは論じない。
【0071】
[0082]いくつかの実施形態では、浮動小数点データ型の場合、第1の中間結果及び第2の中間結果は、第1の加算器810及び第2の加算器814にそれぞれ供給される前に、特定のビット数に丸められ得る。さらに、第1の加算器810及び第2の加算器814によって生成された部分和に対して追加の丸めが実行され得る。特定の他の実施形態では、異なるステップで乗算演算及び加算演算を実行する代わりに、融合積和演算器又は融合乗累算演算器を使用して、単一回の丸めを伴う単一ステップの積和演算を実行するために、乗算及び加算演算が融合又は統合され得る。よって、浮動小数点算術演算の速度及び精度は、融合積和演算器を使用して改善され得る。例えば、
図8に示すように、第1の乗算及び加算演算を実行するために、第1の乗算器808及び第1の加算器810の代わりに第1の融合積和演算器(FMA)824が使用され得る。同様に、第2の乗算及び加算演算を実行するために、第2の乗算器812及び第2の加算器814の代わりに第2のFMA826が使用され得る。第1のFMA824及び第2のFMA826は、それらのそれぞれの単一ステップの積和演算を単一回の丸めで実行し得る。
【0072】
[0083]いくつかの実施形態では、第1の乗算器808及び第2の乗算器812の代わりに、第1及び第2の乗算演算を実行可能であり得る単一の乗算器が使用され得る。例えば、2つの8ビット乗算器又は4つの4ビット乗算器の代わりに、単一の16ビット乗算器を使用して、2つ又は4つの乗算結果を同時に生成し得る。同様に、いくつかの実装形態では、第1の加算器810及び第2の加算器814の代わりに、第1及び第2の加算演算を実行可能であり得る単一の加算器が使用され得る。例えば、2つの8ビット加算器又は4つの4ビット加算器の代わりに、単一の16ビット加算器を使用して、2つ又は4つの和を同時に生成できる。よって、入力データセットの複数のデータ要素を同じPEによって同時に処理することにより、シストリックアレイの計算能力を十分に活用できる。
【0073】
[0084]
図9A、
図9B、
図9C、及び
図9Dは、本開示の技術の特定の実施形態による、シストリックアレイを通るサイクルごとの計算を示している。
【0074】
[0085]
図9Aに示すように、例示的なシストリックアレイ900は、3×3のPEを備え得る。シストリックアレイ900は、
図7を参照して説明したように、計算エンジン604の一部であり得る。シストリックアレイ900内の各PEは、
図8を参照して説明したように、PE800と同様であり得る。簡単のために、ここでは、シストリックアレイ900のすべてのPEに重みがロードされていると仮定され得る。重みは、順次、並列に、又はそれらの組み合わせを使用してロードされ得る。本開示の技術の範囲内で、重みをロードする他の方法も可能であることに留意されたい。
【0075】
[0086]アレイ900の各行は、異なる入力データセットを処理するように構成され得る。例えば、PE00、PE01、及びPE02を含む第1の行は、indataset0を処理するように構成され得る。PE10、PE11、及びPE12を含む第2の行は、indataset1を処理するように構成され得る。PE20、PE21、及びPE22を含む第3の行は、indataset2を処理するように構成され得る。いくつかの実施形態では、indataset0、indataset1、及びindataset2は、
図5Aを参照して論じたように(例えば、Cは3に等しい)、3つのチャネル(例えば、赤色、緑色、及び青色)に対応し得る。indataset0、indataset1、及びindataset2は、ホストデバイスからホストインターフェース616を介して受信され、状態バッファ608に格納されている場合がある。
図5Bを再び参照すると、indataset0は、画素のグループ510に対応し得、indataset1は、画素のグループ512に対応し得、indataset2は、画素のグループ514に対応し得る。例えば、indataset0はデータ要素[X
00,0、X
00,1、X
00,2、X
01,0、X
01,1、X
01,2、X
02,0、X
02,1、X
02,2]を含み得、indataset1はデータ要素[X
10,0、X
10,1、X
10,2、X
11,0、X
11,1、X
11,2、X
12,0、X
12,1、X
12,2]を含み得、indataset2はデータ要素[X
20,0、X
20,1、X
20,2、X
21,0、X
21,1、X
21,2、X
22,0、X
22,1、X
22,2]を含み得る。
【0076】
[0087]一実施形態によれば、2つの連続する外部入力要素が、第1のインターフェース(例えば、行入力データバス816)を使用して、サイクルごとに同時にPE00に供給され得る。例えば、
図9Aに示すように、第1のサイクルにおいて、indataset0からの第1の入力要素X
00,0及び第2の入力要素X
00,1は、PE00に供給され得る。場合によっては、
図8を参照して説明したように、第1の入力要素X
00,0はX
IN1と同様であり、第2の入力要素X
00,1はX
IN2と同様であり得る。
【0077】
[0088]
図9Bに示すように、第1のサイクルでは、PE00は、2つの連続する外部入力要素に対して同時に第1の算術演算を実行し得る。算術演算を同時に実行するとは、2つの異なる回路を使用して2つの算術演算を同時に又は並列に実行することを意味し得る。例えば、一実施形態では、PE00は、第1の乗算器808を使用してX
00,0とW
0,00,0との乗算を実行して、第1の中間結果(X
00,0×W
0,00,0)を生成し得、第2の乗算器812を使用してX
00,1とW
0,00,0との乗算を実行して、第2の中間結果(X
00,1×W
0,00,0)を生成し得る。第1の加算器810は、第1の中間結果(X
00,0×W
0,00,0)をY
IN1と加算して、Y
OUT1を生成し得る。第2の加算器814は、第2の中間結果(X
00,1×W
0,00,0)をY
IN2と加算して、Y
OUT2を生成し得る。Y
IN1及びY
IN2は、第2のインターフェース(例えば、列入力データバス818)を使用してPE00によって受信され得る。PE00はアレイ900の最上行に対応するため、Y
IN1及びY
IN2はゼロであり得る。よって、PE00は、部分和(X
00,0×W
0,00,0)をY
OUT1として、また(X
00,1×W
0,00,0)をY
OUT2としてPE10に提供し得る。PE00はまた、X
00,0及びX
00,1をX
OUT1及びX
OUT2としてPE01に提供し得る。
【0078】
[0089]第2のサイクルでは、次の2つの連続する外部入力要素、例えば、X
00,2及びX
01,0が同時にPE00に供給され得る。加えて、X
00,0及びX
00,1は、それぞれX
IN1及びX
IN2としてPE01に供給され得る。さらに、(X
00,0×W
0,00,0)をY
IN1として供給し得、(X
00,1×W
0,00,0)をY
IN2としてPE10に供給し得る。第2のサイクルでは、X
10,0及びX
10,1はまた、それぞれX
IN1とX
IN2としてPE10に同時に供給され得る。PE00、PE10、及びPE01は、
図9Cに示すように、算術計算を並列に実行し得る。
【0079】
[0090]
図9Cに示すように、次のサイクルでは、次の2つの連続する外部入力要素、例えば、X
01,1及びX
01,2が同時にPE00に供給され得る。加えて、X
10,2及びX
11,0がPE10に供給され得、X
20,0及びX
20,1が同時にPE20に供給され得る。PE00は、部分和(X
00,2×W
0,00,0)をY
OUT1として、また(X
01,0×W
0,00,0)をY
OUT2としてPE10に提供し得る。PE00はまた、X
00,2及びX
01,0をX
OUT1及びX
OUT2としてPE01に提供し得る。PE01は、部分和(X
00,0×W
0,00,1)をY
OUT1として、また(X
00,1×W
0,00,1)をY
OUT2としてPE11に提供し得る。PE01はまた、X
00,0及びX
00,1をX
OUT1及びX
OUT2としてPE02に提供し得る。
【0080】
[0091]第2のサイクルでは、PE10は、第1の乗算器808を使用してX
10,0にW
1,00,0を乗じて第1の中間結果(X
10,0×W
1,00,0)を生成し、第2の乗算器812を使用してX
10,1にW
1,00,0を乗じて第2の中間結果(X
10,1×W
1,00,0)を生成し得る。PE10は、第1の加算器810を使用して、第1の中間結果(X
10,0×W
1,00,0)に、PE00によって提供された部分和(X
00,0×W
0,00,0)をさらに加算して、部分和((X
00,0×W
0,00,0)+(X
10,0×W
1,00,0))を生成し得る。PE20はまた、第2の加算器814を使用して、第2の中間結果(X
10,1×W
1,00,0)に、PE00によって提供された部分和(X
00,1×W
0,00,0)を加算して、部分和((X
00,1×W
0,00,0)+(X
10,1×W
1,00,0))を生成し得る。PE10によって生成された部分和は、Y
OUT1及びY
OUT2としてPE20に提供され得る。
【0081】
[0092]
図9Dに示すように、次のサイクルでは、次の2つの連続する外部入力要素、例えば、X
02,0及びX
02,1が同時にPE00に供給され得る。加えて、X
11,1及びX
11,2がPE10に供給され得、X
20,2及びX
21,0が同時にPE20に供給され得る。PE00は、部分和(X
0,4×W
0,0)をY
OUT1として、また(X
0,5×W
0,0)をY
OUT2としてPE10に提供し得る。PE00はまた、X
01,1及びX
01,2をそれぞれX
OUT1及びX
OUT2としてPE01に提供し得る。PE01は、部分和(X
00,2×W
0,00,1)をY
OUT1として、また(X
01,0×W
0,00,1)をY
OUT2としてPE11に提供し得る。PE01はまた、X
00,2及びX
01,0をX
OUT1及びX
OUT2としてPE02に提供し得る。PE02は、部分和(X
0,0×W
0,2)をY
OUT1として、また(X
0,1×W
0,2)をY
OUT2としてPE12に提供し得る。
【0082】
[0093]並列して、PE10は、第1の乗算器808を使用してX
10,2にW
1,00,0を乗じて第1の中間結果(X
10,2×W
1,00,0)を生成し、第2の乗算器812を使用してX
11,0にW
1,00,0を乗じて第2の中間結果(X
11,0×W
1,00,0)を生成し得る。PE10は、第1の加算器810を使用して、第1の中間結果(X
1,2×W
1,0)に、PE00によって提供された部分和(X
00,2×W
0,00,0)をさらに加算して、部分和((X
00,2×W
0,00,0)+(X
10,2×W
1,00,0))を生成し得る。PE10はまた、第2の加算器814を使用して、第2の中間結果(X
11,0×W
1,00,0)に、PE00によって提供された部分和(X
01,0×W
0,00,0)を加算して、部分和((X
01,0×W
0,00,0)+(X
11,0×W
1,00,0))を生成し得る。PE10によって生成された部分和は、Y
OUT1及びY
OUT2としてPE20に提供され得る。
【0083】
[0094]並列して、PE11は、第1の乗算器808を使用してX
10,0にW
1,00,1を乗じて第1の中間結果(X
10,0×W
1,00,1)を生成し、第2の乗算器812を使用してX
10,1にW
1,00,1を乗じて第2の中間結果(X
10,1×W
1,00,1)を生成し得る。PE11は、第1の加算器810を使用して、第1の中間結果(X
10,0×W
1,00,1)に、PE01によって提供された部分和(X
00,0×W
0,00,1)をさらに加算して、部分和((X
00,0×W
0,00,1)+(X
10,0×W
1,00,1))を生成し得る。PE11はまた、第2の加算器814を使用して、第2の中間結果(X
10,1×W
1,00,1)に、PE01によって提供された部分和(X
00,1×W
0,00,1)を加算して、部分和((X
00,1×W
0,00,1)+(X
10,1×W
1,00,1))を生成し得る。PE11によって生成された部分和は、Y
OUT1及びY
OUT2としてPE21に提供され得る。
【0084】
[0095]並列して、PE20は、第1の乗算器808を使用してX
20,0にW
2,00,0を乗じて第1の中間結果(X
20,0×W
2,00,0)を生成し、第2の乗算器812を使用してX
20,1にW
2,00,0を乗じて第2の中間結果(X
20,1×W
2,00,0)を生成し得る。PE20は、第1の加算器810を使用して、第1の中間結果(X
20,0×W
2,00,0)に、PE10によって提供された部分和((X
00,0×W
0,00,0)+(X
10,0×W
1,00,0))をさらに加算して、部分和(((X
00,0×W
0,00,0)+(X
10,0×W
1,00,0))+(X
20,0×W
2,00,0))を生成し得る。PE20はまた、第2の加算器814を使用して、第2の中間結果(X
20,1×W
2,00,0)に、PE10によって提供された部分和((X
00,1×W
0,00,0)+(X
10,1×W
1,00,0))を加算して、部分和(((X
00,1×W
0,00,0)+(X
10,1×W
1,00,0))+X
20,1×W
2,00,0))を生成し得る。PE20によって生成された部分和は、出力バッファ610に提供され得る。各入力データセットの残りのデータ要素が水平に伝播されるとき、出力バッファ610は、すべての列の部分和を累積し続け得る。特定の数のサイクルの後、アレイ900の列のそれぞれが、2つの出力データ要素に対応する2つの部分和を同時に提供し得る。
【0085】
[0096]
図9Aから
図9Dは、第1の乗算器808及び第1の加算器810を使用して部分和Y
OUT1を生成し、第2の乗算器812及び第2の加算器814を使用して部分和Y
OUT2を生成することについて説明したが、異なる実施形態では、第1のFMA824を第1の乗算器808及び第1の加算器810の代わりに使用して、部分和Y
OUT1を生成し得、第2のFMA826を第2の乗算器812及び第2の加算器814の代わりに使用して、部分和Y
OUT2を生成し得ることに留意されたい。
【0086】
[0097]indataset0の最後のデータ要素(例えば、X
02,2)がPE00を伝播し終えると、別の一組の入力データセット(例えば、ストライド「D」でシフトされている)が次の一組の重みによりスケーリングされるためにPE00に供給され得る。出力バッファ610に格納された出力データ要素は、計算コントローラ606によって状態バッファ608に提供されて、それぞれの列の第1のYin要素及び第2のYin要素として使用され得る。よって、特定の実施形態は、列ごとの出力データセットに対応する2つ以上の出力データ要素を提供することにより、シストリックアレイの性能を改善し得る。
【0087】
[0098]
図10は、本開示の技術の特定の実施形態による、シストリックアレイの効率的な利用のためにPEによって実行される方法1000を示している。例えば、方法1000は、
図8を参照して論じたように、PE800によって実行され得る。
【0088】
[0099]ステップ1002において、処理素子(PE)の二次元アレイ内のPEは、第1のXin要素及び第2のXin要素を同時に受信し得る。アレイのPEは行及び列に構成され得る。アレイの各行は、それぞれの入力データセットにマッピングされ得、各列は、それぞれの出力データセットにマッピングされ得る。第1のXin要素及び第2のXin要素は、所与の行における入力データセット内の連続する要素であり得る。
図7を再び参照すると、アレイは計算エンジン604であり得、PEはPE00であり得る。PE00は、Xin1要素とXin2要素とを含む入力データセットindataset0を受信し得る。例えば、
図9Aに示すように、Xin1はX
0,0であり得、Xin2はX
0,1であり得る。PE00は、Xin1要素及びXin2要素を受信する前に重みレジスタ806にキャッシュされた重みW
0,0を有し得る。
図6を参照して論じたように、計算エンジン604は、入力データセットのサイズ、計算エンジン604内のPEの数、PEのサイズ、及びデータ型に基づいて、計算コントローラ606によって最適化モードで動作するように構成されていてもよい。
【0089】
[0100]ステップ1004において、PEは、所与の列における第1のYin要素及び第2のYin要素を同時に受信し得る。いくつかの実施形態では、PE00がアレイの最上行に属するため、第1のYin要素及び第2のYin要素の値は、計算コントローラ606によって提供され得る。例えば、最上位のアレイにおける第1のYin要素及び第2のYin要素は、異なる組の重みを使用した以前の計算からの第1のYout要素及び第2のYout要素の格納された値を含み得る。
【0090】
[0101]ステップ1006において、PEは、第1の乗算結果を生成するために第1のXin要素に対して重み値を、また第2の乗算結果を生成するために第2のXin要素に対して重み値を同時に乗算する乗算演算を実行し得る。
図8を再び参照すると、一実施形態では、PE00は、第1の乗算結果(例えば、X
00,0×W
0,00,0)及び第2の乗算結果(例えば、X
00,1×W
0,00,0)を生成するために第1の乗算器808及び第2の乗算器812を使用して乗算演算を同時に実行し得る。
【0091】
[0102]ステップ1008において、PEは、第1のYout要素を生成するために第1の乗算結果に対して第1のYin要素を、また第2のYout要素を生成するために第2の乗算結果に対して第2のYin要素を同時に加算する加算演算を実行し得る。
図8を再び参照すると、PE00は、第1のYout要素(例えば、X
00,0×W
0,00,0)及び第2のYout要素(例えば、X
00,1×W
0,00,0)を生成するために第1の加算器810及び第2の加算器814を使用して同時に加算演算を実行し得る。第1のYout要素及び第2のYout要素は、第1のYin要素及び第2のYin要素としてPE10に提供され得る。
【0092】
[0103]別の実施形態では、ステップ1006及び1008は、融合積和演算を使用することによって単一のステップで実行され得る。例えば、
図8を参照して説明したように、第1のFMA824を第1の乗算器808及び第1の加算器810の代わりに使用して、第1のYout要素を生成し得、第2のFMA826を第2の乗算器812及び第2の加算器814の代わりに使用して、第2のYout要素を生成し得る。よって、特定の実施形態では、第1のFMA824及び第2のFMA826を同時に使用して、2つの連続するXin要素に対してそれぞれのYin要素により積和演算を実行すると、別個の乗算器及び加算器を使用する場合と比較して、より速くかつ正確な結果を提供できる。第1のYout要素及び第2のYout要素は、第1のYin要素及び第2のYin要素としてPE10に提供され得る。
【0093】
[0104]上述のように、アレイの最後の行からの部分和は、所与の列における出力データセットに対応する2つの出力データ要素に対応し得る。例えば、
図7を再び参照すると、各列における出力データセットは、出力バッファ610に格納され得る。計算エンジン606は、出力バッファ610から状態バッファ608に出力データセットを第1のYin要素及び第2のYin要素として使用されるべく次の計算の波のためにPE00に提供し得る。よって、複数のXin要素を並列に処理して、出力データセットに対応する複数の出力データ要素を生成することにより、シストリックアレイの性能を改善し得る。
【0094】
[0105]
図11は、計算デバイス1100の一例を示している。計算デバイス1100の機能及び/又はいくつかのコンポーネントは、本開示の他の場所で開示される他の実施形態と共に限定されることなく使用され得る。計算デバイス1100は、タスクの処理を容易にするために計算を実行し得る。例示的な例として、計算デバイス1100は、マルチテナントコンピューティングサービスシステムにおけるサーバの一部であり得る。計算デバイス1100の様々なハードウェア及びソフトウェアリソース(例えば、画像認識サービスの提供に関連するハードウェア及びソフトウェアリソース)は、要求に応じてクライアントに割り当てられ得る。
【0095】
[0106]一例では、計算デバイス1100は、処理ロジック1102と、バスインターフェース1104と、メモリ1106と、ネットワークインターフェース1108とを備え得る。これらのコンポーネントは、ハードウェアモジュール、ソフトウェアモジュール、又はハードウェアとソフトウェアとの組み合わせであり得る。特定の例では、コンポーネントは、本開示の範囲から逸脱することなく、モジュール又はエンジンと交換可能に使用され得る。計算デバイス1100は、ここでは図示されていない追加のコンポーネントを備え得る。いくつかの実装形態では、計算デバイス1100は、より少ないコンポーネントを備え得る。いくつかの実装形態では、コンポーネントのうちの1つ又は複数が1つのモジュールに組み合わされ得る。コンポーネントのうちの1つ又は複数は、通信チャネル1110を介して互いに通信し得る。通信チャネル1110は、1つ又は複数のバス、メッシュ、マトリクス、ファブリック、これらの通信チャネルの組み合わせ、又はいくつかの他の適切な通信チャネルを含み得る。
【0096】
[0107]処理ロジック1102は、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、システムオンチップ(SoC)、ネットワーク処理ユニット(NPU)、命令を実行するように構成されたプロセッサ、又は論理演算及び浮動小数点演算を実行するように構成された任意の他の回路を含み得る1つ又は複数の集積回路を含み得る。処理ロジック1102に含まれ得るプロセッサの例としては、ARM(登録商標)、MIPS(登録商標)、AMD(登録商標)、インテル(登録商標)、クアルコム(登録商標)などによって開発されたプロセッサを挙げることができる。特定の実装形態では、プロセッサは、複数の処理コアを備えることができ、各処理コアは、他の処理コアとは独立に命令を実行するように構成され得る。さらに、特定の実装形態では、各プロセッサ又は処理コアは、複数の処理スレッド間の論理的な分離を維持しながら、同じプロセッサ又は処理コア上で命令を実行する複数の処理スレッドを実装し得る。プロセッサ又は処理コアで実行されるそのような処理スレッドは、別個の論理プロセッサ又は処理コアとしてソフトウェアに公開される場合がある。いくつかの実装形態では、複数のプロセッサ、処理コア、又は同じコア上で実行される処理スレッドが、例えばバス、レベル1(L1)キャッシュ及び/又はレベル2(L2)キャッシュなどの特定のリソースを共有し得る。処理ロジック1102によって実行される命令は、例えばコンピュータプログラムの形態で、コンピュータ可読記憶媒体に格納され得る。コンピュータ可読記憶媒体は、非一時的コンピュータ可読記憶媒体であり得る。場合によっては、コンピュータ可読媒体は、メモリ1106の一部であり得る。処理ロジック1102はまた、例えば、ニューラルネットワークプロセッサ602などを含む人工ニューラルネットワーク演算を実行するためのハードウェア回路を含み得る。
【0097】
[0108]処理ロジック1102へのアクセスは、クライアントによって要求されたパーソナルアシスタントサービスを提供するためにクライアントに許可され得る。例えば、計算デバイス1100は、画像認識ソフトウェアアプリケーションを実行することができる仮想マシンをホストすることができる。画像認識ソフトウェアアプリケーションは、実行時に、処理ロジック1102にアクセスして、例えば、画像に含まれるオブジェクトを予測することができる。別の例として、処理ロジック1102へのアクセスはまた、ベアメタルインスタンスの一部として許可され得、この場合、クライアントデバイス(例えば、リモートコンピュータ、スマートフォンなど)上で実行されている画像認識ソフトウェアアプリケーションが画像の認識を実行するための処理ロジック1102に直接アクセスできる。
【0098】
[0109]メモリ1106は、揮発性若しくは不揮発性、又は揮発性及び不揮発性の両方のタイプのメモリを含み得る。メモリ1106は、例えば、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、電気的に消去可能なプログラマブル読み取り専用メモリ(EEPROM)、フラッシュメモリ、及び/又は他のいくつかの適切な記憶媒体を含み得る。場合によっては、メモリ1106の一部又はすべてが計算デバイス1100の内部にあってもよく、他の場合には、メモリの一部又はすべてが計算デバイス1100の外部にあってもよい。メモリ1106は、処理ロジック1102によって実行されたときに、計算デバイス1100にネットワーク機能を提供する命令を実行するための実行環境を提供する実行可能な命令を含むオペレーティングシステムを格納し得る。メモリ1106はまた、例えば、人工ニューラルネットワーク演算を実行するためのソフトウェアアプリケーションを格納し得る。例えば、メモリ1106は、上記の式1〜19の計算に関連するソフトウェアルーチンを格納し得る。処理ロジック1102がFPGAの形態である場合、メモリ1106は、処理ロジック1102の様々な論理回路コンポーネントを表すネットリストデータを格納し得る。
【0099】
[0110]バスインターフェース1104は、外部通信媒体を介して、コンピューティングシステム内のホストデバイス及び/又は他のコンポーネントなどの外部エンティティとの通信を可能にし得る。バスインターフェース1104は、ケーブル、ソケット、ポート、又は外部通信媒体への他の接続に接続するための物理インターフェースを含み得る。バスインターフェース1104は、着信及び発信トランザクションを管理するためのハードウェア及び/又はソフトウェアをさらに含み得る。バスインターフェース1104は、ペリフェラルコンポーネントインターコネクト(PCI)ベースのプロトコル、不揮発性メモリエクスプレス(NVMe)、アドバンストホストコントローラインターフェース(AHCI)、スモールコンピュータシステムインターフェース(SCSI)、シリアルアタッチトSCSI(SAS)、シリアルATアタッチメント(SATA)、パラレルATA(PATA)、他のいくつかの標準バスプロトコル、又は独自のバスプロトコルなどのローカルバスプロトコルを実装し得る。バスインターフェース1104は、とりわけ、コネクタ、電力管理、及びエラー処理を含む、これらのバスプロトコルのいずれかの物理層を含み得る。いくつかの実装形態では、計算デバイス1100は、複数の外部エンティティと通信するための複数のバスインターフェースモジュールを備え得る。これらの複数のバスインターフェースモジュールは、同じローカルバスプロトコル、異なるローカルバスプロトコル、又は同じバスプロトコルと異なるバスプロトコルとの組み合わせを実装し得る。
【0100】
[0111]ネットワークインターフェース1108は、ネットワークと通信するためのハードウェア及び/又はソフトウェアを含み得る。このネットワークインターフェース1108は、例えば、ネットワークへの有線接続のための物理コネクタ若しくは物理ポート、及び/又はネットワークへの無線通信のためのアンテナを含み得る。ネットワークインターフェース1108は、ネットワークプロトコルスタックを実装するように構成されたハードウェア及び/又はソフトウェアをさらに含み得る。ネットワークインターフェース1108は、例えば、とりわけ、TCP/IP、インフィニバンド、RoCE、米国電気電子学会(IEEE)802.11無線プロトコル、ユーザデータグラムプロトコル(UDP)、非同期転送モード(ATM)、トークンリング、フレームリレー、ハイレベルデータリンク制御(HDLC)、ファイバ分散データインターフェース(FDDI)、及び/又はポイントツーポイントプロトコル(PPP)などのネットワークプロトコルを使用してネットワークと通信し得る。いくつかの実装形態では、計算デバイス1100は、異なるネットワークと通信するようにそれぞれ構成された複数のネットワークインターフェースモジュールを備え得る。例えば、これらの実装形態では、計算デバイス1100は、有線イーサネットネットワーク、無線802.11ネットワーク、セルラネットワーク、インフィニバンドネットワークなどと通信するためのネットワークインターフェースモジュールを備え得る。いくつかの実施形態では、計算デバイス1100は、ネットワークインターフェース1108を介してサーバから忘却ゲート係数、入力係数、出力係数などを生成するための上述の重みベクトルなどの一組のパラメータを受信し得る。
【0101】
[0112]上記の計算デバイス1100の様々なコンポーネント及びモジュールは、個別のコンポーネントとして、システムオンチップ(SoC)として、ASICとして、NPUとして、FPGAとして、又はそれらの任意の組み合わせとして実装され得る。いくつかの実施形態では、SoC又は他のコンポーネントは、別のコンピューティングシステムに通信可能に接続されて、トラフィック監視、トラフィックシェーピング、コンピューティングなどの様々なサービスを提供し得る。本技術のいくつかの実施形態では、SoC又は他のコンポーネントは、本明細書で開示される複数のサブシステムを含み得る。
【0102】
[0113]本明細書で説明されるモジュールは、ソフトウェアモジュール、ハードウェアモジュール、又はそれらの適切な組み合わせであり得る。モジュールがソフトウェアモジュールである場合、モジュールは、非一時的コンピュータ可読媒体上で具現化され、本明細書で説明されるコンピュータシステムのいずれかのプロセッサによって処理され得る。説明されたプロセス及びアーキテクチャは、ユーザ対話の前に、リアルタイム又は非同期モードのいずれかで実行され得ることに留意されたい。モジュールは、
図11に示唆されるように構成され得る、及び/又は本明細書に記載される機能は、別個のモジュールとして存在する1つ若しくは複数のモジュールによって提供され得る、及び/又は本明細書に記載されるモジュール機能は、複数のモジュールにわたって広がり得る。
【0103】
[0114]したがって、本明細書及び図面は、限定的な意味ではなく例示的な意味で解釈されるべきである。しかしながら、特許請求の範囲に記載されている本開示のより広い趣旨及び範囲から逸脱することなく、様々な修正及び変更を行うことができることは明らかである。いくつかの例示的な実施形態は、以下の付記項によって説明される。
付記項1.
行及び列に構成された処理素子(PE)を備える二次元アレイであって、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、各入力データセットがそれぞれのXin要素を含み、各PEが、
所与のPEにおける重み値をキャッシュするメモリと、
所与の行における入力データセットの第1のXin要素を受信する第1の入力ポートと、
所与の行における入力データセットの第2のXin要素を受信する第2の入力ポートであって、第2のXin要素が第1のXin要素に連続する、第2の入力ポートと、
所与の列における第1のYin要素を受信する第3の入力ポートと、
所与の列における第2のYin要素を受信する第4の入力ポートと、
第1の乗算結果を生成するために第1のXin要素に重み値を乗算するように構成された第1の乗算器と、
第1のYout要素を生成するために第1の乗算結果に第1のYin要素を加算するように構成された第1の加算器と、
第1の乗算器と同時に、第2の乗算結果を生成するために第2のXin要素に重み値を乗算するように構成された第2の乗算器と、
第1の加算器と同時に、第2のYout要素を生成するために第2の乗算結果に第2のYin要素を加算するように構成された第2の加算器と、
を備え、
アレイの最後の行の第1のYout要素及び第2のYout要素が、所与の列における出力データセットに対応する、二次元アレイ
を備える、ニューラルネットワーク演算のための回路。
付記項2.
第1のXin要素及び第2のXin要素が、入力特徴マップの第1の特徴マップ要素及び第2の特徴マップ要素にそれぞれ対応する、付記項1に記載の回路。
付記項3.
第1の入力ポート及び第2の入力ポートが、行入力データバスに接続される、付記項1又は2に記載の回路。
付記項4.
第3の入力ポート及び第4の入力ポートが、列入力データバスに接続される、付記項1から3のいずれか一項に記載の回路。
付記項5.
第1のインターフェースを介して2つの連続するXin要素を同時に受信し、2つの連続するXin要素が、第1のXin要素と第2のXin要素とを含み、
第2のインターフェースを介して2つのYin要素を同時に受信し、2つのYin要素が、第1のYin要素と第2のYin要素とを含み、
第1の中間結果を生成するために第1のXin要素及び重み値に対して、また第2の中間結果を生成するために第2のXin要素及び重み値に対して同時に第1の算術演算を実行し、
第1のYout要素を生成するために第1の中間結果及び第1のYin要素に対して、また第2のYout要素を生成するために第2の中間結果及び第2のYin要素に対して同時に第2の算術演算を実行する
ように構成された、ニューラルネットワーク演算のための処理素子(PE)
を備える、装置。
付記項6.
第1の算術演算が乗算演算を含み、第1の中間結果が第1の乗算器を使用して生成され、第2の中間結果が第2の乗算器を使用して生成される、付記項5に記載の装置。
付記項7.
第2の算術演算が加算演算を含み、第1のYout要素が第1の加算器を使用して生成され、第2のYout要素が第2の加算器を使用して生成される、付記項6に記載の装置。
付記項8.
第1の算術演算が乗算演算を含み、第2の算術演算が加算演算を含み、第1の算術演算及び第2の算術演算が、融合積和演算器を使用して単一のステップで実行される、付記項5から7のいずれか一項に記載の装置。
付記項9.
PEが、行及び列に構成された二次元アレイの複数のPEのうちの1つであり、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされる、付記項5から8のいずれか一項に記載の装置。
付記項10.
第1のインターフェースがアレイの行に関連し、PEにおける第1のXin要素及び第2のXin要素が、行に関連する入力データセットに対応する、付記項9に記載の装置。
付記項11.
第2のインターフェースがアレイの列に関連し、PEにおける第1のYout要素及び第2のYout要素が、アレイの最後の行における列に関連する出力データセットに対応する、付記項9に記載の装置。
付記項12.
アレイに接続された計算コントローラをさらに備え、計算コントローラが、入力データセットの入力データ型及びサイズに基づいてアレイの動作モードを有効にするように構成される、付記項10に記載の装置。
付記項13.
重み値が、第1のインターフェース又は第2のインターフェースを使用してPEにロードされる、付記項5から12のいずれか一項に記載の装置。
付記項14.
状態バッファをさらに備え、各行の第1のPEが状態バッファに通信可能に接続され、状態バッファがアレイの各行におけるそれぞれの入力データセットを格納するように構成される、付記項9から13のいずれか一項に記載の装置。
付記項15.
アレイの各行におけるそれぞれの入力データセットが、ホストデバイスからホストインターフェースを介して状態バッファによって受信される、付記項14に記載の装置。
付記項16.
出力バッファをさらに備え、各列の最後のPEが出力バッファに通信可能に接続され、出力バッファが、最後の行の各列に対応する第1のYout要素及び第2のYout要素を格納するように構成される、付記項9から15のいずれか一項に記載の装置。
付記項17.
処理素子(PE)の二次元アレイ内のPEによって、第1のXin要素及び第2のXin要素を同時に受信するステップであって、アレイのPEが行及び列に構成され、各行がそれぞれの入力データセットにマッピングされ、各列がそれぞれの出力データセットにマッピングされ、第1のXin要素及び第2のXin要素が、所与の行における入力データセット内の連続する要素である、ステップと、
PEによって、所与の列における第1のYin要素及び第2のYin要素を同時に受信するステップと、
PEによって、第1の乗算結果を生成するために第1のXin要素に対して重み値を、また第2の乗算結果を生成するために第2のXin要素に対して重み値を同時に乗算する乗算演算を実行するステップと、
PEによって、第1のYout要素を生成するために第1の乗算結果に対して第1のYin要素を、また第2のYout要素を生成するために第2の乗算結果に対して第2のYin要素を同時に加算する加算演算を実行するステップであって、アレイの最後の行の第1のYout要素及び第2のYout要素が、所与の列における出力データセットに対応する、ステップと
を含む、方法。
付記項18.
第1のXin要素及び第2のXin要素を受信するステップの前に、所与のPEにおける重み値を受信するステップと、
重み値をレジスタに格納するステップと
をさらに含む、付記項17に記載の方法。
付記項19.
PEが第1のPEであり、所与の行が第1の行であり、所与の列が第1の列であり、本方法が、
第1のXin要素及び第2のXin要素を、アレイの第2の列かつ第1の行にある第2のPEに同時に提供するステップ
をさらに含む、付記項17又は18に記載の方法。
付記項20.
PEが第1のPEであり、所与の行が第1の行であり、本方法が、
第1のYout要素及び第2のYout要素を、第1のXin要素及び第2のXin要素として、アレイの第1の列かつ第2の行にある第2のPEに同時に提供するステップ
をさらに含む、付記項17から19のいずれか一項に記載の方法。
【0104】
[0115]他の変形形態も本開示の趣旨の範囲内である。よって、本開示の技術は、様々な修正及び代替構造を受け入れる余地があるが、その特定の例示的な実施形態が図面に示され、上で詳述されている。しかしながら、開示された1つ又は複数の特定の形式に本開示を限定する意図はなく、反対に、添付の特許請求の範囲で定義されているように、本開示の趣旨及び範囲に含まれるすべての修正、代替構造、及び均等物を包含することが意図されていることを理解されたい。
【0105】
[0116]本開示の実施形態を説明する文脈において(特に、以下の特許請求の範囲の文脈において)用語「a」及び「an」及び「the」及び同様の指示対象の使用は、本明細書に別段の指示のない限り、又は文脈上明らかに矛盾しない限り、単数及び複数の両方を包含すると解釈されるべきである。「備える(comprising)」、「有する(having)」、「含む(including)」、及び「含む(containing)」という用語は、特に断りのない限り、オープンエンドの用語(すなわち、「含むがこれに限定されない(including,but not limited to)」を意味する)として解釈されるべきである。「接続される(connected)」という用語は、たとえ何かが介在したとしても、部分的又は完全に含まれる、取り付けられる、又は一緒に結合されると解釈されるべきである。本明細書での値の範囲の記載は、本明細書で別段の指示のない限り、範囲内の各個別の値を個別に参照する簡略的な方法として機能することのみを意図し、各個別の値は、あたかも本明細書で個別に列挙されているかのように本明細書に組み込まれる。本明細書に記載されるすべての方法は、本明細書で別段の指示のない限り、又は文脈上明らかに矛盾しない限り、任意の適切な順序で実行され得る。本明細書で提供されるありとあらゆる例又は例示的な言葉(例えば、「など」)の使用は、本開示の実施形態をよりよく明らかにすることを意図しているに過ぎず、別段の要請のない限り、本開示の範囲を限定するものではない。本明細書中の言葉は、特許請求の範囲において請求されていない要素を本開示の実施に不可欠であると示すものと解釈されるべきではない。
【0106】
[0117]「X、Y、又はZのうちの少なくとも1つ」という語句などの離接語は、特に別段の指定のない限り、一般的に使用される文脈内で、理解され、項目、用語などが X、Y、若しくはZ、又はそれらの任意の組み合わせ(例えば、X、Y、及び/又はZ)のいずれかであることを示すと理解されることが意図されている。よって、そのような離接語は、特定の実施形態がXの少なくとも1つ、Yの少なくとも1つ、又はZの少なくとも1つのそれぞれが存在することを必要とすることを一般に意図しておらず、意味するものでもない。
【0107】
[0118]発明者が知る本開示を実施するための最良の形態を含む、本開示の様々な実施形態が本明細書で説明されている。これらの実施形態の変形形態は、上述の説明を読めば、当業者には明らかになり得る。本発明者らは、当業者がそのような変形形態を適切に使用することを期待し、本発明者は、本明細書に具体的に記載された以外の仕方で本開示が実施されることを意図している。したがって、本開示は、適用法によって許可されるように、本明細書に添付された特許請求の範囲に記載された主題のすべての修正及び均等物を含む。さらに、上記の要素の、そのすべての可能な変形形態における任意の組み合わせは、本明細書で別段の指示のない限り、又は文脈上明らかに矛盾しない限り、本開示によって包含される。