(57)【要約】  ハードウェア・ニューラル・ネットワーク・プロセッサが提供される。ニューラル・コアは、重みメモリ、活性化メモリ、ベクトル・マトリクス乗算器、およびベクトル・プロセッサを含む。ベクトル・マトリクス乗算器は、重みメモリから重みマトリクスを受信し、活性化メモリから活性化ベクトルを受信し、重みマトリクスと活性化ベクトルとのベクトル・マトリクス乗算を計算するように適合される。ベクトル・プロセッサは、１つまたは複数のベクトル・ソースから１つまたは複数の入力ベクトルを受信し、１つまたは複数の入力ベクトルに対して１つまたは複数のベクトル関数を実行して出力ベクトルを生じるように適合される。いくつかの実施形態では、プログラマブル・コントローラは、ニューラル・コアを構成し、動作させるように適合される。
2021527864.tif 000002
【特許請求の範囲】
【請求項１】
重みメモリと、
活性化メモリと、
前記重みメモリから重みマトリクスを受信し、前記活性化メモリから活性化ベクトルを受信し、前記重みマトリクスと前記活性化ベクトルとのベクトル・マトリクス乗算を計算するように適合されたベクトル・マトリクス乗算器と、
１つまたは複数のベクトル・ソースから１つまたは複数の入力ベクトルを受信し、前記１つまたは複数の入力ベクトルに対して１つまたは複数のベクトル関数を実行して出力ベクトルを生じるように適合されたベクトル・プロセッサと、
を備える、ニューラル・コア。
【請求項２】
前記ニューラル・コアを構成し、動作させるように適合されたプログラマブル・コントローラをさらに備える、請求項１に記載のニューラル・コア。
【請求項３】
複数のベクトル・ソースと、
複数のベクトル・ターゲットと、
前記ベクトル・プロセッサに動作可能に連結されたプログラマブル・コントローラであって、
前記複数のソースの１つまたは複数を前記ベクトル・プロセッサにマッピングし、
前記ベクトル・プロセッサを前記複数のベクトル・ターゲットの１つまたは複数にマッピングし、
前記複数のソースの前記１つまたは複数からの入力に対してベクトル関数を実行し、前記複数のベクトル・ターゲットの前記１つまたは複数に結果を提供するように、前記ベクトル・プロセッサに命令するように適合された前記プログラマブル・コントローラと、
をさらに備える、請求項１に記載のニューラル・コア。
【請求項４】
前記ベクトル・プロセッサに動作可能に連結され、前記ベクトル・プロセッサからの結果に活性化関数を適用するように適合された活性化ユニットをさらに備える、請求項１に記載のニューラル・コア。
【請求項５】
前記ベクトル・ソースが、部分合計メモリ、ネットワーク、ベクトル・マトリクス乗算器、レジスタ、またはパラメータ・メモリを含む、請求項３に記載のニューラル・コア。
【請求項６】
前記ベクトル・ターゲットが、活性化メモリ、部分合計メモリ、レジスタ、またはネットワークを含む、請求項３に記載のニューラル・コア。
【請求項７】
前記ベクトル・プロセッサが、１つまたは複数の定数を前記結果に適用するように適合された、請求項３に記載のニューラル・コア。
【請求項８】
部分合計を累計するように構成された、請求項３に記載のニューラル・コア。
【請求項９】
前記コントローラが、前記重みメモリから重みマトリクスを読み出し、前記活性化メモリから活性化ベクトルを読み出し、前記重みマトリクスと前記活性化ベクトルとのベクトル・マトリクス乗算を計算するように、前記ベクトル・マトリクス乗算器に命令するようにさらに適合された、請求項３に記載のニューラル・コア。
【請求項１０】
前記活性化関数が構成可能である、請求項４に記載のニューラル・コア。
【請求項１１】
プログラマブル・コントローラが、前記活性化関数を計算し、前記活性化メモリに結果を提供するように、前記活性化ユニットに命令するようにさらに適合された、請求項１０に記載のニューラル・コア。
【請求項１２】
前記重みマトリクスが、ニューラル・ネットワーク重みマトリクスのサブアレイであり、
前記活性化ベクトルが、ニューラル・ネットワーク活性化ベクトルのサブアレイである、請求項９に記載のニューラル・コア。
【請求項１３】
前記重みマトリクスと前記活性化ベクトルとの前記ベクトル・マトリクス乗算が、累計のために提供され、前記累計が、前記ニューラル・ネットワーク重みマトリクスと前記ニューラル・ネットワーク活性化ベクトルとのベクトル・マトリクス乗算を生じる、請求項１２に記載のニューラル・コア。
【請求項１４】
入力、パラメータ、および出力を有するニューラル・ネットワーク関数を計算するように構成された、請求項１に記載のニューラル・コア。
【請求項１５】
前記重みマトリクスまたは前記活性化ベクトルあるいはその両方が、構成可能なサイズを有する、請求項１４に記載のニューラル・コア。
【請求項１６】
ニューラル・ネットワーク入力、パラメータ、または出力、あるいはそれらの組み合わせが、構成可能なサイズを有する、請求項１４に記載のニューラル・コア。
【請求項１７】
前記ニューラル・ネットワーク関数が構成可能である、請求項１４に記載のニューラル・コア。
【請求項１８】
ネットワークによって相互接続された複数の追加ニューラル・コアと併せて、ニューラル・ネットワーク関数を計算するように構成された、請求項１に記載のニューラル・コア。
【請求項１９】
ニューラル・ネットワーク関数の一部を計算するように構成された、請求項１に記載のニューラル・コア。
【請求項２０】
前記ニューラル・ネットワーク関数の前記一部が構成可能である、請求項１９に記載のニューラル・コア。
【請求項２１】
重みマトリクスを重みメモリから受信することと、
活性化ベクトルを活性化メモリから受信することと、
前記重みマトリクスと前記活性化ベクトルとのベクトル・マトリクス乗算を計算することと、
前記ベクトル・マトリクス乗算に対して１つまたは複数のベクトル関数を実行して、出力ベクトルを生じることと、
活性化関数を前記出力ベクトルに適用して、結果を決定することと、
前記結果を前記活性化メモリに提供することと、
を含む、方法。
【請求項２２】
前記重みマトリクスが、ニューラル・ネットワーク重みマトリクスのサブアレイであり、前記活性化ベクトルがニューラル・ネットワーク活性化ベクトルのサブアレイであり、前記方法が、
前記結果を追加結果と累計して、前記ニューラル・ネットワーク重みマトリクスと前記ニューラル・ネットワーク活性化ベクトルとのベクトル・マトリクス乗算を生じることをさらに含む、請求項２１に記載の方法。
【請求項２３】
プログラマブル・コントローラによって、複数のベクトル・ソースの１つまたは複数をベクトル・プロセッサにマッピングすることと、
前記プログラマブル・コントローラによって、前記ベクトル・プロセッサを複数のベクトル・ターゲットの１つまたは複数にマッピングすることと、
前記プログラマブル・コントローラによって、前記複数のソースの前記１つまたは複数からの入力に対してベクトル関数を実行し、前記複数のベクトル・ターゲットの前記１つまたは複数に結果を提供するように、前記ベクトル・プロセッサに命令することと、
を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の実施形態は、ハードウェア・ニューラル・ネットワーク・プロセッサに関し、より具体的には、実行時再構成可能なニューラル・ネットワーク・プロセッサ・コアに関する。
【発明の概要】
【０００２】
本開示の実施形態によれば、ニューラル・コアが提供される。ニューラル・コアは、重みメモリ、活性化（activation）メモリ、ベクトル・マトリクス乗算器、およびベクトル・プロセッサを含む。ベクトル・マトリクス乗算器は、重みメモリから重みマトリクスを受信し、活性化メモリから活性化ベクトルを受信し、重みマトリクスと活性化ベクトルとのベクトル・マトリクス乗算を計算するように適合される。ベクトル・プロセッサは、１つまたは複数のベクトル・ソースから１つまたは複数の入力ベクトルを受信し、１つまたは複数の入力ベクトルに対して１つまたは複数のベクトル関数を実行して出力ベクトルを生じるように適合される。いくつかの実施形態では、プログラマブル・コントローラは、ニューラル・コアを構成し、動作させるように適合される。
【０００３】
本発明の実施形態は、ここで単なる例として添付図面を参照して説明される。
【図面の簡単な説明】
【０００４】
【図１】本開示の実施形態による、ニューラル・コアを示す。
【図２】本開示の実施形態による、推論処理ユニットによって実行される論理動作を示す。
【図３】本開示の実施形態によるニューラル・コアおよび関連ネットワークを示す。
【図４Ａ】本開示の実施形態による例示的な空間内側ループおよびフィルタ内側ループのためのコア・タイミング図である。
【図４Ｂ】本開示の実施形態による例示的な空間内側ループおよびフィルタ内側ループのためのコア・タイミング図である。
【図５】本開示の実施形態による、ベクトル・ユニットの詳細図である。
【図６】本開示の実施形態による、ニューラル・コアを構成するための方法を示す。
【図７】本開示の実施形態による、ニューラル・コアを構成するための方法を示す。
【図８】本開示の実施形態による、コンピューティング・ノードを示す。
【発明を実施するための形態】
【０００５】
人工ニューロンは、出力がその入力の線形結合の非線形関数である数学関数である。２つのニューロンは、１つの出力がもう１つへの入力である場合に接続される。重みは、１つのニューロンの出力と別のニューロンの入力との間の接続の強度を符号化するスカラ値である。
【０００６】
ニューロンは、その入力の重み付け合計に非線形活性化関数を適用することによって、活性化と呼ばれるその出力を計算する。重み付け合計は、各入力を対応する重みと乗算すること、および積を累計することによって計算される中間結果である。部分合計は、入力のサブセットの重み付け合計である。全ての入力の重み付け合計は、１つまたは複数の部分合計を累計することによって段階的に計算され得る。
【０００７】
ニューラル・ネットワークは、１つまたは複数のニューロンの集合である。ニューラル・ネットワークは、しばしば、層と呼ばれるニューロンのグループに分割される。層は、全てが同一層から入力を受信し、全てが同一層に出力を送信し、典型的には類似関数を実行する、１つまたは複数のニューロンの集合である。入力層は、ニューラル・ネットワーク外のソースからの入力を受信する層である。出力層は、ニューラル・ネットワーク外のターゲットに出力を送信する層である。他の層は全て、中間処理層である。多層ニューラル・ネットワークは、１つよりも多くの層を有するニューラル・ネットワークである。深層ニューラル・ネットワークは、多数の層を有する多層ニューラル・ネットワークである。
【０００８】
テンソルは、数値の多次元アレイである。テンソル・ブロックは、テンソル内の成分の連続したサブアレイである。
【０００９】
各ニューラル・ネットワーク層は、パラメータ・テンソルＶ、重みテンソルＷ、入力データ・テンソルＸ、出力データ・テンソルＹ、および中間データ・テンソルＺに関連付けられている。パラメータ・テンソルは、層においてニューロン活性化関数σを制御するパラメータの全てを含む。重みテンソルは、入力を層に接続する重みの全てを含む。入力データ・テンソルは、層が入力として消費するデータの全てを含む。出力データ・テンソルは、層が出力として計算するデータの全てを含む。中間データ・テンソルは、部分合計などの、層が中間計算として生成する任意のデータを含む。
【００１０】
層についてのデータ・テンソル（入力、出力、および中間）は、３次元であってもよく、その場合、最初の２つの次元は、空間的位置を符号化すると解釈されてもよく、第３の次元は、異なる特徴を符号化すると解釈されてもよい。例えば、データ・テンソルが、カラー画像を表すとき、最初の２つの次元は、画像内の垂直および水平座標を符号化し、第３の次元は、各位置における色を符号化する。入力データ・テンソルＸのあらゆる成分が、個々の重みによってあらゆるニューロンに接続され得る。したがって、重みテンソルＷは、概して６つの次元を有し、入力データ・テンソルの３つの次元（入力行ａ、入力列ｂ、入力特徴ｃ）を出力データ・テンソルの３つの次元（出力行ｉ、出力列ｊ、出力特徴ｋ）と連結する。中間データ・テンソルＺは、出力データ・テンソルＹと同一の形状を有する。パラメータ・テンソルＶは、活性化関数σのパラメータにインデックス付与する追加の次元ｏで３つの出力データ・テンソル次元を連結する。
【００１１】
層の出力データ・テンソルＹの成分は、式１におけるように計算され得る。その場合、ニューロン活性化関数σは、活性化関数パラメータＶ［ｉ，ｊ，ｋ，：］のベクトルによって構成され、重み付け合計Ｚ［ｉ，ｊ，ｋ］は、式２におけるように計算され得る。
Ｙ［ｉ，ｊ，ｋ］＝σ（Ｖ［ｉ，ｊ，ｋ，：］；Ｚ［ｉ，ｊ，ｋ］）
式１
【００１２】
【数１】
2021527864.tif 000003
【００１３】
表記を単純にするために、式２における重み付け合計は、出力と呼ばれてもよく、それは、線形活性化関数Ｙ［ｉ，ｊ，ｋ］＝σ（Ｚ［ｉ，ｊ，ｋ］）＝Ｚ［ｉ，ｊ，ｋ］を用いることと等価であり、異なる活性化関数が使用されるときに、一般性を失うことなく同一のステートメントを適用すると理解される。
【００１４】
様々な実施形態において、上述のような出力データ・テンソルの計算は、より小さな問題に分解される。各問題は、そのとき１つもしくは複数のニューラル・コア上で、または従来のマルチコア・システムの１つもしくは複数のコア上で並列に解決され得る。
【００１５】
ここで図１を参照すると、本開示の実施形態によるニューラル・コアが示されている。ニューラル・コア１００は、出力テンソルの１つのブロックを計算するタイリング可能な計算上のユニットである。ニューラル・コア１００は、Ｍ個の入力およびＮ個の出力を有する。様々な実施形態では、Ｍ＝Ｎである。出力テンソル・ブロックを計算するために、ニューラル・コアは、Ｍ×１個の入力テンソル・ブロック１０１をＭ×Ｎ個の重みテンソル・ブロック１０２と乗算し、積を１×Ｎ個の中間テンソル・ブロック１０３に記憶されている重み付け合計内に累計する。Ｏ×Ｎ個のパラメータ・テンソル・ブロックは、中間テンソル・ブロック１０３に適用されて１×Ｎ個の出力テンソル・ブロック１０５を生成するＮ個のニューロン活性化関数のそれぞれを指定する、Ｏ個のパラメータを含む。
【００１６】
複数のニューラル・コアは、ニューラル・コア・アレイにおいてタイリングされ得る。いくつかの実施形態では、アレイは２次元である。
【００１７】
ニューラル・ネットワーク・モデルは、ニューラル・ネットワークによって実行される計算全体をまとめて指定する定数のセットであり、あらゆるニューロンについての重みおよび活性化関数パラメータだけでなく、ニューロン間の接続のグラフも含む。訓練は、所望の関数を実行するためにニューラル・ネットワーク・モデルを修正するプロセスである。推論は、ニューラル・ネットワーク・モデルを修正することなく、ニューラル・ネットワークを入力に適用して出力を生成するプロセスである。
【００１８】
推論処理ユニットは、ニューラル・ネットワーク推論を実行するプロセッサのカテゴリである。ニューラル推論チップは、推論処理ユニットの特定の物理的インスタンスである。
【００１９】
高レベルでの、推論処理ユニットによって実行される論理動作が、図２に示されている。２０１において、入力活性化（Ｘ）が、コアに分散される。２０２において、層命令がコアに分散される。２０３において、層重み（Ｗ）またはパラメータあるいはその両方が、コアに分散される。２０４において、マトリクス重み（Ｗ）が読み出される。２０５において、活性化ベクトル（Ｘ）が読み出される。２０６において、ベクトル・マトリクス乗算（Ｚ＝ＸＴＷ）が計算される。２０７において、部分合計ベクトル（Ｚｓｒｃ）が、読み出され、または選択され、あるいはその両方が行われる。２０８において、ベクトル・ベクトル関数Ｚｔｇｔ＝ｆ（Ｚｓｒｃ）が計算される。２０９において、部分合計ベクトル（Ｚｔｇｔ）が、書き込まれ、または更新され、あるいはその両方が行われる。２１０において、活性化関数（Ｙ＝ｆ（Ｚ））が計算される。２１１において、活性化ベクトル（Ｙ→Ｘ）が書き込まれる。２１２において、層活性化（Ｘ）が、コアにわたって再分散される。２１３において、出力活性化（Ｘ）が、コアから収集される。
【００２０】
図示するように、ステップ２０１〜２１３は、全ての入力フレームにわたって繰り返される。ステップ２０２〜２１２は、ニューラル・ネットワークの全ての層にわたって繰り返される。ステップ２０４〜２１１は、全ての層出力にわたって繰り返される。ステップ２０４〜２０９は、全ての層入力にわたって繰り返される。
【００２１】
ここで図３を参照すると、例示的ニューラル・コアおよび関連ネットワークが、本開示の実施形態に従って示されている。コア３０１は、図１を参照して説明されるように具現化されてもよく、ネットワーク３０２〜３０４によって追加コアと相互接続される。この実施形態では、ネットワーク３０２は、重みまたは命令あるいはその両方を分散することを担当し、ネットワーク３０３は、部分合計を分散することを担当し、ネットワーク３０４は、活性化を分散することを担当する。しかしながら、本開示の様々な実施形態は、これらのネットワークを結合してもよく、または複数の追加ネットワークにそれらをさらに分離してもよいと理解されたい。
【００２２】
図３を参照すると、入力活性化（Ｘ）は、ステップ２０１において、コア外から活性化メモリ３０５への活性化ネットワーク３０４を介して、コア３０１に分散される。層命令は、ステップ２０２において、コア外から命令メモリ３０６への重み／命令ネットワーク３０２を介して、コア３０１に分散される。層重み（Ｗ）またはパラメータあるいはその両方は、ステップ２０３において、コア外から重みメモリ３０７またはパラメータ・メモリ３０８あるいはその両方への重み／命令ネットワーク３０２を介して、コア３０１に分散される。
【００２３】
重みマトリクス（Ｗ）は、ステップ２０４において、重みメモリ３０７からベクトル・マトリクス乗算（ＶＭＭ）ユニット３０９によって読み出される。活性化ベクトル（Ｖ）は、ステップ２０５において、活性化メモリ３０５からベクトル・マトリクス乗算（ＶＭＭ）ユニット３０９によって読み出される。ベクトル・マトリクス乗算（ＶＭＭ）ユニット３０９は、次いで、ステップ２０６においてベクトル・マトリクス乗算Ｚ＝ＸＴＷを計算し、結果をベクトル・ベクトル・ユニット３１０に提供する。ステップ２０７において、ベクトル・ベクトル・ユニット３１０は、部分合計メモリ３１１から追加部分合計を読み出し、コア外から部分合計ネットワーク３０３を介して追加部分合計を受信する。ステップ２０８において、ベクトル・ベクトル演算は、これらのソース部分合計からベクトル・ベクトル・ユニット３１０によって計算される。例えば、様々な部分合計が、同様に合計され得る。ステップ２０９において、結果となるターゲット部分合計が、部分合計メモリ３１１に書き込まれ、部分合計ネットワーク３０３を介してコア外に送信され、またはベクトル・ベクトル・ユニット３１０によるさらなる処理のためにフィードバックされ、あるいはそれらの組み合わせが行われる。
【００２４】
部分合計は、ベクトル・ベクトル・ユニット３１０から生じ、所与の層の入力についての全ての計算が完了した後、ステップ２１０における出力活性化の計算のために活性化ユニット３１２に提供される。ステップ２１１において、活性化ベクトル（Ｙ）は、活性化メモリ３０５に書き込まれる。ステップ２１２において、層活性化（活性化メモリに書き込まれた結果を含む）が、活性化ネットワーク３０４を介して活性化メモリ３０５からコアにわたって再分散される。受信後、それらは、各受信コアへのローカル活性化メモリに書き込まれる。所与のフレームについての処理完了後、出力活性化は、活性化メモリ３０５から読み出され、ネットワーク３０４を介してコア外に送信される。
【００２５】
図４Ａ〜図４Ｂを参照すると、例示的空間内側ループおよびフィルタ内側ループについてのコア・タイミング図が、提供されている。４０１において、活性化メモリが、活性化Ｘと共に予めロードされる。４０２において、マイクロコード命令がロードされる。４０３において、重みテンソルＷがロードされる。４０４〜４０５において、活性化ブロックおよび重みブロックが読み出される。４０６において、部分合計ブロックが計算される。４０７〜４０９において、部分合計ブロックが、通信され、記憶され、または累計され、あるいはそれらの組み合わせが行われる。４１０において、活性化関数が計算される。４１１において、活性化が活性化メモリに書き戻される。これらのタイミング図内のステップが、図２を参照して説明されるステップに対応すると理解されたい。空間内側ループを示す図４Ａにおいて、活性化ブロックＸ０．．．Ｘ３は、各重みブロックＷ０．．．Ｗ１についてロードされ、部分合計ブロックＺ００．．．Ｚ０３、Ｚ１０．．．Ｚ１３の計算を可能にする。フィルタ内側ループを示す図４Ｂにおいて、重みブロックＷ０．．．Ｗ３は、各活性化ブロックＸ０．．．Ｘ１についてロードされ、部分合計ブロックＺ００．．．Ｚ３０、Ｚ０１．．．Ｚ３１の計算を可能にする。
【００２６】
したがって、動作中、コア制御マイクロエンジン（例えば、３１３）は、コアのデータ移動および計算を編成する。マイクロエンジンは、読み出し活性化メモリ・アドレス動作を発行して、入力活性化ブロックをベクトル・マトリクス乗算ユニット内にロードする。マイクロエンジンは、読み出し重みメモリ・アドレス動作を発行して、重みブロックをベクトル・マトリクス乗算ユニット内にロードする。ベクトル・マトリクス乗算ユニット計算アレイが部分合計ブロックを計算するように、マイクロエンジンは、計算動作をベクトル・マトリクス乗算ユニットに発行する。
【００２７】
マイクロエンジンは、部分合計データを部分合計ソースから読み出すこと、部分合計演算ユニットを用いて計算すること、または部分合計データを部分合計ターゲットに書き込むことのうちの１つまたは複数を行うために、部分合計読み出し／書き込みメモリ・アドレス動作、ベクトル計算動作、または部分合計通信動作のうちの１つまたは複数を発行する。部分合計データを部分合計ターゲットに書き込むことは、部分合計ネットワーク・インターフェースを介してコアの外部と通信すること、または部分合計データを活性化演算ユニットに送信することを含み得る。
【００２８】
活性化演算ユニットが出力活性化ブロックを計算するように、マイクロエンジンは、活性化計算動作を発行する。マイクロエンジンは、書き込み活性化メモリ・アドレスを発行し、出力活性化ブロックが、活性化メモリ・インターフェースを介して活性化メモリに書き込まれる。
【００２９】
これに応じて、多様なソース、ターゲット、アドレス・タイプ、計算タイプ、および制御コンポーネントが、所与のコアに対して定義される。
【００３０】
ベクトル・ベクトル・ユニット３１０のためのソースは、ベクトル・マトリクス乗算（ＶＭＭ）ユニット３０９、活性化メモリ３０５、パラメータ・メモリ３０８からの定数、部分合計メモリ３１１、先行サイクルからの部分合計結果（ＴＧＴ部分合計）、および部分合計ネットワーク３０３を含む。
【００３１】
ベクトル・ベクトル・ユニット３１０のためのターゲットは、部分合計メモリ３１１、後続サイクルについての部分合計結果（ＳＲＣ部分合計）、活性化ユニット３１２、および部分合計ネットワーク３０３を含む。
【００３２】
これに応じて、所与の命令は、活性化メモリ３０５から読み出しもしくは書き込みしてもよく、重みメモリ３０７から読み出してもよく、または部分合計メモリ３１１から読み出しもしくは書き込みしてもよい。コアによって実行される計算動作は、ＶＭＭユニット３０９によるベクトル・マトリクス乗算、ベクトル・ユニット３１０によるベクトル（部分合計）動作、活性化ユニット３１２による活性化関数を含む。
【００３３】
制御動作は、プログラム・カウンタ、およびループ・カウンタまたはシーケンス・カウンタあるいはその両方を含む。
【００３４】
したがって、ステップ２０４〜２１１は、以下のように動作にマッピングされ得る。ステップ２０４、２０５、２０７、２０９、２１１において、メモリ動作は、重みメモリ内のアドレスから重みを読み出すため、パラメータ・メモリ内のアドレスからパラメータを読み出すため、活性化メモリ内のアドレスから活性化を読み出すため、ならびに部分合計メモリ内のアドレスに部分合計を読み出し／書き込むために発行される。ステップ２０６、２０８、２１０において、計算動作は、ベクトル・マトリクス乗算、ベクトル・ベクトル動作、および活性化関数を実行するために発行される。ステップ２０７、２０９において、通信動作は、ベクトル・ベクトル・オペランドを選択するため、部分合計ネットワーク上でメッセージをルーティングするため、および部分合計ターゲットを選択するために発行される。層出力にわたるループ（ステップ２０４〜２１１における）および層入力にわたるループ（ステップ２０４〜２０９における）は、プログラム・カウンタ、ループ・カウンタ、およびシーケンス・カウンタを指定する制御動作によって制御される。
【００３５】
図５を参照すると、本開示の実施形態によるベクトル・ユニット・スライスの詳細図が提供されている。ベクトル・ユニットは、ベクトルの成分全てに対して並列で動作するために多数のベクトル・ユニット・スライスを有し、したがって、単にスライスがここに示されている。いくつかの実施形態では、ベクトル・ユニットの全てのスライスが、それらのそれぞれのベクトル成分に対して同時に同じ動作を並列で実行する。ソース５０１は、上述したソースに対応する。特に、重みメモリ３０７は、読み出しアドレスＷ＿ＲＤにおいてアクセスされ、活性化メモリ３０５は、ベクトル・マトリクス乗算に入力を提供するために読み出しアドレスａｃｔ＿ＲＤにおいてアクセスされ、その結果は、今度はベクトル・ベクトル・ユニットへのソースとしての役割をする。パラメータ・メモリ３０８は、ベクトル・ベクトル・ユニットにパラメータを提供するために、読み出しアドレスＮＲＮ＿ＲＤにおいてアクセスされる。部分合計メモリ３１１は、ベクトル・ベクトル・ユニットのための部分合計オペランドを取り出すために、読み出しアドレスＰ０＿ＲＤおよびＰ１＿ＲＤにおいてアクセスされる。ネットワーク・オン・チップ３０３は、ベクトル・ベクトル・ユニットに部分合計入力を提供するために使用される。図示されるように、入力は、４方位、北、南、東、および西から受信される。しかしながら、任意のコアからの入力受信を可能にするために、多様なネットワーク構成が本開示に従って用いられ得ると理解されたい。
【００３６】
動作５０２は、計算ＯＰ（ＣＯＭＰＵＴＥ＿ＯＰ）およびバイパスＯＰ（ＢＹＰＡＳＳ＿ＯＰ）を含む。計算ＯＰは、ソース５０１を計算関数ユニット５０３、５０４（ＡおよびＢ）にマッピングし、計算関数ユニットによって実行される計算を指定する。バイパスＯＰ（ＢＹＰＡＳＳ＿ＯＰ）は、ソース５０１をバイパス関数ユニット５０５、５０６（ＣおよびＤ）にマッピングする。計算またはバイパスの結果が、中間ソース５０７を構成する。
【００３７】
中間ソース５０７に対する動作５０８は、出力ターゲットＯＰ（ＯＵＴ＿ＴＧＴ＿ＯＰ）および活性化出力ターゲットＯＰ（ＡＣＴ＿ＴＧＴ＿ＯＰ）を含む。出力ターゲットＯＰは、中間ソース５０７を出力ターゲット５０９にマッピングする。活性化出力ターゲットＯＰは、中間ソース５０７を活性化出力ターゲット５１０にマッピングし、活性化関数ユニットによって実行される計算を指定する。
【００３８】
活性化関数の結果が、書き込みアドレスａｃｔ＿ＷＲにおいて活性化メモリ３０５に書き込まれる。部分合計は、書き込みアドレスＰ０＿ＷＲおよびＰ１＿ＷＲにおいて部分合計メモリ３１１に書き込まれる。ネットワーク出力は、ネットワーク３０３を介して送信される。図示されるように、出力は、４方位、北、南、東、および西に送信される。しかしながら、任意のコアに出力を送信することを可能にするために、多様なネットワーク構成が本開示に従って用いられ得ると理解されたい。
【００３９】
所与のコアが、複数の関数ユニットを含み得ると理解されたい。したがって、図５は、説明を簡略化するために、ベクトル・ベクトル・ユニットの１スライスを示す。
【００４０】
表１を参照すると、例示的な部分合計データ動作フォーマットが、提供されている。表１において、バイパスＯＰは、ＢＹＰＡＳＳ＿Ｃ＿ＯＰおよびＢＹＰＡＳＳ＿Ｄ＿ＯＰを含み、上述した別個のバイパス５０５、５０６に対応する。ターゲット出力ＯＰは、ＯＵＴ＿ＴＧＴ＿ＯＰ、ＣＯＮＤ＿ＴＧＴ＿ＯＰ、およびＡＣＴ＿ＴＧＴ＿ＯＰを含む。計算動作は、ＡＣＴ＿ＴＧＴ＿ＯＰの後に続く。
【００４１】
【表１】
2021527864.tif 000004
【００４２】
表２は、上述の実施形態におけるソースを列挙する。
【００４３】
【表２】
2021527864.tif 000005
【００４４】
表３は、上述の実施形態における中間ソースを列挙する。
【００４５】
【表３】
2021527864.tif 000006
【００４６】
表４は、上述の実施形態における出力ターゲットを列挙する。
【００４７】
【表４】
2021527864.tif 000007
【００４８】
表５は、上述の実施形態における活性化ターゲットを列挙する。
【００４９】
【表５】
2021527864.tif 000008
【００５０】
表６は、上述の実施形態におけるベクトル計算動作を列挙する。
【００５１】
【表６】
2021527864.tif 000009
【００５２】
表７を参照すると、本開示の様々な実施形態による、ニューラル・コアの様々な再構成可能な要素の要約が、提供されている。
【００５３】
【表７】
2021527864.tif 000010
【００５４】
図６を参照すると、本開示の実施形態によるニューラル・コアを動作させる方法が示されている。６０１において、重みマトリクスが重みメモリから受信される。６０２において、活性化ベクトルが、活性化メモリから受信される。６０３において、重みマトリクスと活性化ベクトルとのベクトル・マトリクス乗算が計算される。６０４において、１つまたは複数のベクトル関数が、ベクトル・マトリクス乗算に対して実行されて、出力ベクトルを生じる。６０５において、活性化関数が、出力ベクトルに適用されて結果を決定する。６０６において、結果が活性化メモリに提供される。
【００５５】
図７を参照すると、本開示の実施形態によるニューラル・コアを構成する方法が示されている。７０１において、プログラマブル・コントローラが、複数のベクトル・ソースの１つまたは複数をベクトル・プロセッサにマッピングする。７０２において、プログラマブル・コントローラが、ベクトル・プロセッサを複数のベクトル・ターゲットの１つまたは複数にマッピングする。７０３において、プログラマブル・コントローラが、複数のソースの１つまたは複数からの入力に対してベクトル関数を実行し、複数のベクトル・ターゲットの１つまたは複数に結果を提供するように、ベクトル・プロセッサに命令する。
【００５６】
したがって、本開示は、実行時再構成可能なニューラル・ネットワーク・プロセッサ・コアを提供する。そのようなコアは、プログラマブル・コントローラを介して再構成可能である。いくつかの実施形態では、再構成が、パイプラインにおける計算と同時に実行される。
【００５７】
ここで図８を参照すると、コンピューティング・ノードの例の概略が示されている。コンピューティング・ノード１０は、適当なコンピューティング・ノードの単なる一例であり、本明細書で説明される実施形態の使用または機能性の範囲に関するいかなる限定も示唆するように意図されない。それにかかわらず、コンピューティング・ノード１０は、実施されること、または上記で述べる機能性のいずれかを実行すること、あるいはその両方が可能である。
【００５８】
コンピューティング・ノード１０には、コンピュータ・システム／サーバ１２が存在し、コンピュータ・システム／サーバ１２は、多数の他の汎用または専用コンピューティング・システム環境または構成を用いて動作可能である。コンピュータ・システム／サーバ１２を用いた使用に適当であり得る周知のコンピューティング・システム、環境、または構成、あるいはそれらの組み合わせの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、手持ち式またはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサベース・システム、セット・トップ・ボックス、プログラマブル家電、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記システムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などを含むが、これらに限定されない。
【００５９】
コンピュータ・システム／サーバ１２は、コンピュータ・システムによって実行されている、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的状況において説明され得る。概して、プログラム・モジュールは、特定のタスクを実行し、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造などを含み得る。コンピュータ・システム／サーバ１２は、通信ネットワークを通してリンクされたリモート処理デバイスによってタスクが実行される、分散型クラウド・コンピューティング環境において実施され得る。分散型クラウド・コンピューティング環境では、プログラム・モジュールが、メモリ記憶デバイスを含むローカルおよびリモート両方のコンピュータ・システム記憶媒体に位置し得る。
【００６０】
図８に示されるように、コンピューティング・ノード１０内のコンピュータ・システム／サーバ１２は、汎用コンピューティング・デバイスの形態で示される。コンピュータ・システム／サーバ１２のコンポーネントは、１つまたは複数のプロセッサまたは処理ユニット１６、システム・メモリ２８、およびシステム・メモリ２８を含む様々なシステム・コンポーネントをプロセッサ１６に連結するバス１８を含み得るが、これらに限定されない。
【００６１】
バス１８は、メモリ・バスまたはメモリ・コントローラ、周辺バス、高速グラフィック・ポート、および多様なバス・アーキテクチャのいずれかを使用するプロセッサまたはローカル・バスを含む、複数種類のバス構造のいずれかの１つまたは複数を表す。限定ではなく例として、そのようなアーキテクチャは、インダストリ・スタンダード・アーキテクチャ（ＩＳＡ：Industry  Standard  Architecture）・バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ：Micro  Channel  Architecture）・バス、拡張ＩＳＡ（ＥＩＳＡ：Enhanced  ISA）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ：Video  Electronics  Standards  Association）・ローカル・バス、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ：Peripheral  Component  Interconnect）・バス、ペリフェラル・コンポーネント・インターコネクト・エクスプレス（ＰＣＩｅ：Peripheral  Component  Interconnect  Express）、およびアドバンスド・マイクロコントローラ・バス・アーキテクチャ（ＡＭＢＡ：Advanced  Microcontroller  Bus  Architecture）を含む。
【００６２】
コンピュータ・システム／サーバ１２は、典型的には多様なコンピュータ・システム可読媒体を含む。このような媒体は、コンピュータ・システム／サーバ１２によってアクセス可能な任意の利用可能な媒体であってもよく、それは、揮発性媒体および不揮発性媒体の両方、リムーバブル媒体および非リムーバブル媒体の両方を含む。
【００６３】
システム・メモリ２８は、コンピュータ・システム可読媒体を、ランダム・アクセス・メモリ（ＲＡＭ）３０またはキャッシュ・メモリ３２あるいはその両方などの揮発性メモリの形態で含み得る。コンピュータ・システム／サーバ１２は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピュータ・システム記憶媒体をさらに含み得る。単なる例として、記憶システム３４は、非リムーバブル不揮発性磁気媒体（図示せず、かつ典型的には「ハード・ドライブ」と呼ばれる）から読み出し、かつ書き込むために提供され得る。図示されないが、リムーバブル、不揮発性磁気ディスク（例えば、「フロッピー・ディスク」）からの読み出しおよび書き込みのための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、または他の光学媒体などのリムーバブル、不揮発性光ディスクからの読み出しまたは書き込みのための光学ディスク・ドライブが、提供され得る。このような場合、それぞれが、１つまたは複数のデータ媒体インターフェースによってバス１８に接続され得る。以下でさらに示され、説明されるように、メモリ２８は、本開示の実施形態の機能を実行するように構成されたプログラム・モジュールのセット（例えば、少なくとも１つ）を有する少なくとも１つのプログラム製品を含み得る。
【００６４】
プログラム・モジュール４２のセット（少なくとも１つ）を有するプログラム／ユーティリティ４０は、限定ではなく例として、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データと同様に、メモリ２８に記憶され得る。オペレーティング・システム、１つもしくは複数のアプリケーション・プログラム、他のプログラム・モジュール、およびプログラム・データのそれぞれ、またはそれらの何らかの組み合わせは、ネットワーキング環境の実施を含み得る。プログラム・モジュール４２は、概して、本明細書に説明される実施形態の機能または方法論あるいはその両方を実行する。
【００６５】
コンピュータ・システム／サーバ１２は、また、キーボード、ポインティング・デバイス、ディスプレイ２４などの１つもしくは複数の外部デバイス１４、ユーザがコンピュータ・システム／サーバ１２と対話することを可能にする１つもしくは複数のデバイス、またはコンピュータ・システム／サーバ１２が１つもしくは複数の他のコンピューティング・デバイスと通信することを可能にする任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはそれらの組み合わせと通信し得る。このような通信は、入力／出力（Ｉ／Ｏ）インターフェース２２を介して発生し得る。さらに、コンピュータ・システム／サーバ１２は、ネットワーク・アダプタ２０を介して、ローカル・エリア・ネットワーク（ＬＡＮ）、汎用ワイド・エリア・ネットワーク（ＷＡＮ）、または公衆ネットワーク（例えば、インターネット）、あるいはそれらの組み合わせなどの１つまたは複数のネットワークと通信し得る。図示されるように、ネットワーク・アダプタ２０は、バス１８を介してコンピュータ・システム／サーバ１２の他のコンポーネントと通信する。図示されないが、他のハードウェア・コンポーネントまたはソフトウェア・コンポーネント、あるいはその両方が、コンピュータ・システム／サーバ１２と併せて使用され得ると理解されるべきである。例は、マイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ記憶システムなどを含むが、これらに限定されない。
【００６６】
様々な実施形態において、１つまたは複数の推論処理ユニット（図示せず）は、バス１８に連結される。そのような実施形態では、ＩＰＵは、バス１８を介してメモリ２８からデータを受信し、またはメモリ２８にデータを書き込み得る。同様に、ＩＰＵは、本明細書で説明されるように、バス１８を介して他のコンポーネントと対話し得る。
【００６７】
本開示は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせとして具現化され得る。コンピュータ・プログラム製品は、プロセッサに本開示の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（または複数の媒体）を含み得る。
【００６８】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持し、記憶し得る有形デバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカードまたはその上に記録された命令を有する溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、本来、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、または電線を通って送信される電気信号などの、一過性信号であると解釈されるべきではない。
【００６９】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
【００７０】
本開示の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）、またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを通してユーザのコンピュータに接続されてもよい。あるいは、接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを通して）外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、本開示の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【００７１】
本開示の態様は、本開示の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書に説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【００７２】
コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施する手段を作成するように、これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブル・データ処理装置のプロセッサに提供されてもよい。コンピュータ可読記憶媒体に記憶される命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作の態様を実施する命令を含む製品を含むように、これらのコンピュータ可読プログラム命令は、また、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定のやり方で機能するように指示し得る、コンピュータ可読記憶媒体に記憶されてもよい。
【００７３】
コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施するように、コンピュータ可読プログラム命令は、また、コンピュータ実施されたプロセスを作り出すために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるコンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされてもよい。
【００７４】
図面内のフローチャートおよびブロック図は、本開示の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施のアーキテクチャ、機能性、および動作を例示する。この点に関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替的な実施において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される２つのブロックが、実際には、実質的に同時に実行されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェア・ベース・システムによって実施され得ることにも留意されたい。
【００７５】
本開示の様々な実施形態の説明は、例示の目的で提示されているが、網羅的であること、または開示される実施形態に限定することを意図したものではない。多くの修正および変形が、説明された実施形態の範囲および思想から逸脱することなく当業者には明らかであろう。本明細書で使用される専門用語は、実施形態の原理、実用的な適用、もしくは市場で見出される技術に対する技術的改善を最もよく説明するため、または本明細書に開示される実施形態を他の当業者が理解可能にするために、選択された。
【図１】
2021527864.tif 000011
【図２】
2021527864.tif 000012
【図３】
2021527864.tif 000013
【図４Ａ】
2021527864.tif 000014
【図４Ｂ】
2021527864.tif 000015
【図５】
2021527864.tif 000016
【図６】
2021527864.tif 000017
【図７】
2021527864.tif 000018
【図８】
2021527864.tif 000019
【国際調査報告】
2021527864.tif 000020
2021527864.tif 000021