(57)【要約】【課題】本発明の目的は、ニューラルネットワーク計算などを効率的に遂行するためのシステム及び方法の提供にある。【解決手段】スクラッチメモリは複数の設定可能な（ｃｏｎｆｉｇｕｒａｂｌｅ）ノードを含む、通信ファブリックを介し複数の設定可能なプロセシング素子に連結される。スクラッチメモリは、データワードの複数のストリームを外に伝送する。各々のデータワードは制御部分及びデータ部分を有し、前者によりノード又はプロセシング素子の設定のための設定ワードであるか、被演算子又は結果を伝達するデータワードであるか、を識別する。各々のプロセシング素子は、現在設定により演算を遂行し、通信ファブリックに結果を返還する。通信ファブリックは結果をスクラッチメモリに伝達する。【選択図】図１
2019109892.tif 000002
【特許請求の範囲】
【請求項１】
計算のためのシステムであって、
複数のプロセシング素子回路と、
複数のノード（ｎｏｄｅ）回路を包含する通信ファブリック（ｆａｂｒｉｃ）と、
スクラッチメモリと、を包含し、
前記スクラッチメモリは、前記通信ファブリックを介して前記プロセシング素子回路と連結され、
一つ以上の前記プロセシング素子回路は、設定値を格納するように構成された設定レジスタ（ｒｅｇｉｓｔｅｒ）を包含し、
一つ以上の前記プロセシング素子回路は、
２個の入力から２個の各々のデータワードを受信し、前記２個のデータワードの各々は、制御部分及びデータ部分を有し、
前記２個のデータワードのうち、一つがデータワードをプロセシング素子設定（ｃｏｎｆｉｇｕｒａｔｉｏｎ）ワードとして識別する制御部分を有する場合、前記設定レジスタに前記プロセシング素子設定ワードの前記データ部分を前記設定値として格納し、
前記２個のデータワードが、全てプロセシング素子設定ワードではない場合、前記設定値に基づき前記２個のデータワードに対する演算を遂行するように構成された、ことを特徴とするシステム。
【請求項２】
前記演算を遂行することは、
前記設定値がエレメントワイズの乗算を指定（ｓｐｅｃｉｆｙ）する場合、前記２個のデータワードのうちの第１データワードの前記データ部分に、前記２個のデータワードのうちの第２データワードの前記データ部分を乗算することを包含する、ことを特徴とする請求項１に記載のシステム。
【請求項３】
前記演算を遂行することは、
前記設定値がエレメントワイズの加算を指定する場合、前記２個のデータワードのうちの第１データワードの前記データ部分に、前記２個のデータワードのうちの第２データワードの前記データ部分を加算することを包含する、ことを特徴とする請求項１に記載のシステム。
【請求項４】
前記演算を遂行することは、
前記設定値が乗算及び累積を指定する場合、
前記２個のデータワードのうちの第１データワードの前記データ部分に前記２個のデータワードのうちの第２データワードの前記データ部分を乗算して積を形成することと、
前記積を累積器（ａｃｃｕｍｕｌａｔｏｒ）の累積値に加算することを包含する、ことを特徴とする請求項１に記載のシステム。
【請求項５】
前記プロセシング素子回路のうちの一つは、５０００個以下のゲート（ｇａｔｅ）を包含する、ことを特徴とする請求項１に記載のシステム。
【請求項６】
前記ノード回路のうちの一つは、２０００個以下のゲートを包含する、ことを特徴とする請求項１に記載のシステム。
【請求項７】
計算のためのシステムであって、
複数のプロセシング素子回路と、
複数のノード（ｎｏｄｅ）回路を包含する通信ファブリック（ｆａｂｒｉｃ）と、
スクラッチメモリと、を包含し、
前記スクラッチメモリは、前記通信ファブリックを介して前記プロセシング素子回路と連結され、
一つ以上の前記ノード回路は複数のノードリンク回路を包含し、
前記複数のノード回路のうち、第１ノード回路の前記複数のノードリンク回路のうち、第１ノードリンク回路は複数の入力及び一つの出力を有し、
前記第１ノードリンク回路は、
データレジスタと、
設定値を格納するように構成された設定レジスタと、を包含し、
前記第１ノードリンク回路は、前記入力において各々が制御部分及びデータ部分を有する複数の各々のデータワードを受信し、
前記データワードのうちの一つが、データワードをノードリンク設定ワードとして識別する制御部分を有する場合、前記設定レジスタに前記ノードリンク設定ワードの前記データ部分を前記設定値として格納し、
前記データワードが、全てノードリンク設定ワードではない場合、
前記設定値に基づき、
前記入力のうち、一つから前記データレジスタにデータワードを伝送し、及び／又は、
前記入力のうち、一つから前記出力にデータワードを伝送し、及び／又は、
前記データレジスタから前記出力にデータワードを伝送するように構成された、ことを特徴とするシステム。
【請求項８】
一つ以上の前記ノード回路は、
実質的に直交する方向において、前記ノード回路の内側に向かう４個の入力と、
実質的に直交する方向において、前記ノード回路の外側に向かう４個の出力と、を有する、ことを特徴とする請求項７に記載のシステム。
【請求項９】
一つ以上の前記ノード回路のうち、一つのノード回路は４個のノードリンク回路を包含し、前記４個のノードリンク回路の各々は、
前記ノード回路の前記４個の入力に各々連結される４個の入力と、
前記ノード回路の前記４個の出力のうち、各々の一つに連結される一つの出力と、を有する、ことを特徴とする請求項８に記載のシステム。
【請求項１０】
前記プロセシング素子回路のうちの一つは、５０００個以下のゲートを包含する、ことを特徴とする請求項７に記載のシステム。
【請求項１１】
前記ノード回路のうちの一つは、２０００個以下のゲートを包含する、ことを特徴とする請求項７に記載のシステム。
【請求項１２】
前記スクラッチメモリは、
メモリバンク（ｂａｎｋ）と、
メモリコントローラと、を包含し、
前記メモリコントローラは複数の行キャッシュ（ｃａｃｈｅ）を包含し、
一つ以上の前記行キャッシュは、前記データワードと同一のビット幅を有し、前記メモリコントローラは、前記メモリバンクから前記行キャッシュにデータを伝達し、前記行キャッシュから前記メモリバンクにデータを伝達するように構成され、
一つ以上の前記行キャッシュは、
前記データワードのシーケンス（ｓｅｑｕｅｎｃｅ）を外にストリーム（ｓｔｒｅａｍ）し、
前記データワードのシーケンスを内にストリームするように構成された、ことを特徴とする請求項７に記載のシステム。
【請求項１３】
前記行キャッシュのうちの一つは、二重バッファである、ことを特徴とする請求項１２に記載のシステム。
【請求項１４】
各々の前記データワードのうち、前記制御部分は４ビットの幅を有し、
各々の前記データワードのうち、前記データ部分は１６ビットの幅を有する、ことを特徴とする請求項１２に記載のシステム。
【請求項１５】
計算方法であって、
プロセシングモジュールを設定するステップを包含し、前記プロセシングモジュールは、
複数のプロセシング素子回路と、
各々が複数の入力及び一つの出力を有する、複数のノードリンク回路を包含する通信ファブリック（ｆａｂｒｉｃ）と、
スクラッチメモリと、を包含し、
前記設定するステップは、
前記スクラッチメモリが、複数のノードリンク設定ワードを伝送するステップと、ここで、
前記複数のノードリンク設定ワードの各々は、前記複数のノードリンク回路のうち、一つのノードリンク回路に送られ、
前記複数のノードリンク回路のうち、第１ノードリンク回路が前記第１ノードリンク回路に送られるデータワードを受信するステップと、ここで、
前記第１ノードリンク回路は、前記複数のプロセシング素子回路のうち、第１プロセシング素子回路の一つの入力に連結される一つの出力を有し、
前記第１ノードリンク回路が、前記第１ノードリンク回路の第１入力において受信されたデータワードを、前記第１ノードリンク回路の前記出力に伝達するように、前記第１ノードリンク回路が前記第１ノードリンク回路の構成を設定するステップと、
前記第１ノードリンク回路のうち、前記第１入力によりプロセシング素子設定ワードを受信するステップと、
前記第１ノードリンク回路の前記出力により、前記プロセシング素子設定ワードを前記第１プロセシング素子回路に伝送するステップと、
前記第１プロセシング素子回路が、前記第１プロセシング素子回路の設定レジスタ（ｒｅｇｉｓｔｅｒ）に前記プロセシング素子設定ワードのデータ部分を格納するステップと、を包含する、ことを特徴とする方法。
【請求項１６】
複数の積を計算するステップをさらに包含し、前記計算するステップは、
前記スクラッチメモリが、第１の複数のノードリンク回路を介して延伸する第１経路を通して、被演算子の第１シーケンス（ｓｅｑｕｅｎｃｅ）を前記第１プロセシング素子回路に伝送するステップと、
前記スクラッチメモリが、第２の複数のノードリンク回路を介して延伸する第２経路を通して、被演算子の第２シーケンスを前記第１プロセシング素子回路に伝送するステップと、
前記第１プロセシング素子が、ペアごとの（ｐａｉｒｗｉｓｅ）積のシーケンスを計算するステップと、を包含し、各々のペアごとの積は、
被演算子の前記第１シーケンスの一つの被演算子と、
被演算子の前記第２シーケンスの対応する一つの被演算子の積である、ことを特徴とする請求項１５に記載の方法。
【請求項１７】
密集性表現（ｄｅｎｓｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）から希薄性表現（ｓｐａｒｓｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）に第１ベクトルを変換するステップをさらに包含し、前記第１ベクトルは、ノンゼロ値を有する第１エレメントを包含し、前記第１エレメントの直後には、ゼロ値を有する第２エレメントが続き、前記変換するステップは、前記第１エレメントを第１の２−タプル（ｔｕｐｌｅ）に交替するステップを包含し、前記第１の２−タプルは、
前記第１ベクトルの前記第１エレメントと同一の第１のエレメントと、
１より大きい第２エレメントと、を有する、ことを特徴とする請求項１６に記載の方法。
【請求項１８】
第２ベクトルの希薄性表現を前記第１ベクトルの前記希薄性表現と整列させるステップと、をさらに包含し、前記整列させるステップは、
前記第２ベクトルの前記希薄性表現から、前記第１ベクトルの前記第２エレメントに対応する２−タプルを削除するステップと、
前記第２ベクトルの第１の２−タプルの第２エレメントの値を増加させるステップと、を包含し、前記第２ベクトルの前記第１の２−タプルは、前記削除された２−タプルの直前に来る、ことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記複数のプロセシング素子回路のうち、一つのプロセシング素子回路が、前記第１ベクトルの前記第１の２−タプルの前記第１エレメントと前記第２ベクトルの前記第１の２−タプルの第１エレメントとを乗算して、結果として２−タプルの第１エレメントを形成するステップと、
前記結果としての２−タプルの第２エレメントを前記第１ベクトルの前記第１の２−タプルの前記第２エレメントと同一に設定するステップと、をさらに包含する、ことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記プロセシング素子回路のうちの一つは、５０００個以下のゲートを包含し、前記ノードリンク回路のうちの一つは、５００個以下のゲートを包含する、ことを特徴とする請求項１５に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算のためのシステムと方法に関し、より詳細には、ニューラルプロセシングアクセラレータ｛ＮＥＵＲＡＬ  ＰＲＯＣＥＳＳＩＮＧ  ＡＣＣＥＬＥＲＡＴＯＲ｝において必要な並列計算の遂行のための設定可能なシステム（ｃｏｎｆｉｇｕｒａｂｌｅ  ｓｙｓｔｅｍ）とその方法に関する。
【背景技術】
【０００２】
ニューラルネットワーク（ｎｅｕｒａｌ  ｎｅｔｗｏｒｋ）の学習（ｔｒａｉｎｉｎｇ）及び推論（ｉｎｆｅｒｅｎｃｅ）のためのプロセシングシステムと関連された技術は一般に高コストにつき、効率的な希薄性演算（ｓｐａｒｓｅ  ｏｐｅｒａｔｉｏｎｓ）のような、ニューラルネットワーク計算に頻繁に使用される、多様なテンソル計算（ｔｅｎｓｏｒ  ｃａｌｃｕｌａｔｉｏｎ）に容易に適用するには、柔軟性が不足する。
【０００３】
従って、ニューラルネットワーク計算を遂行するための改善されたシステムが必要である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国公開特許  第２０１４／００９５９２３Ａ１号公報
【特許文献２】米国公開特許  第２０１４／００９２７２８Ａ１号公報
【特許文献３】米国公開特許  第２０１６／０１７９４３４Ａ１号公報
【特許文献４】米国公開特許  第２０１７／０２７７６５８Ａ１号公報
【特許文献５】ヨーロッパ公開特許  第ＥＰ３０３５２０３Ａ１号公報
【非特許文献】
【０００５】
【非特許文献１】ＳＣＨＵＭＡＮ，  ＣＡＴＨＥＲＩＮＥ  Ｄ．，  ｅｔ  ａｌ．  “Ａ  Ｓｕｒｖｅｙ  ｏｆ  Ｎｅｕｒｏｍｏｒｐｈｉｃ  Ｃｏｍｐｕｔｉｎｇ  ａｎｄ  Ｎｅｕｒａｌ  Ｎｅｔｗｏｒｋｓ  ｉｎ  Ｈａｒｄｗａｒｅ”，  Ｕ．Ｓ．  Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｅｎｅｒｇｙ  ａｎｄ  Ｏａｋ  Ｒｉｄｇｅ  Ｎａｔｉｏｎａｌ  Ｌａｂｏｒａｔｏｒｙ，  ８８  ｐｇｓ，  Ｍａｙ  １９，  ２０１７．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明は、前述された技術的問題を解決するためのものであって、ニューラルネットワーク計算を効率的に遂行するためのシステム及び方法を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の一つの実施例によると、計算のためのシステムが提供される。前記システムは、複数のプロセシング素子回路、複数のノード（ｎｏｄｅ）回路を包含する通信ファブリック（ｆａｂｒｉｃ）、及びスクラッチメモリを包含し、前記スクラッチ（ｓｃｒａｔｃｈ）メモリは、前記通信ファブリックを介して前記プロセシング素子回路と連結され、一つ以上の前記プロセシング素子回路は、設定値を格納するように構成された設定レジスタ（ｒｅｇｉｓｔｅｒ）を包含し、一つ以上の前記プロセシング素子回路は、２個の入力から２個の各々のデータワード（ｄａｔａ  ｗｏｒｄ）を受信し、前記２個のデータワードの各々は、制御部分及びデータ部分を有し、前記２個のデータワードのうち、一つがデータワードをプロセシング素子設定（ｃｏｎｆｉｇｕｒａｔｉｏｎ）ワードとして識別する制御部分を有する場合、前記設定レジスタに前記プロセシング素子設定ワードの前記データ部分を前記設定値として格納し、前記２個のデータワードが、全てプロセシング素子設定ワードではない場合、前記設定値に基づき前記２個のデータワードに対する演算を遂行するように構成される。
【０００８】
一つの好ましい実施例において、前記演算を遂行することは、前記設定値がエレメントワイズ（ｅｌｅｍｅｎｔｗｉｓｅ）の乗算を指定する場合、前記２個のデータワードのうちの第１データワードの前記データ部分と、前記２個のデータワードのうちの第２データワードの前記データ部分とを乗算することを包含する。
【０００９】
一つの好ましい実施例において、前記演算を遂行することは、前記設定値がエレメントワイズ（ｅｌｅｍｅｎｔｗｉｓｅ）の加算を指定する場合、前記２個のデータワードのうちの第１データワードの前記データ部分と、前記２個のデータワードのうちの第２データワードの前記データ部分とを加算することを包含する。
【００１０】
一つの好ましい実施例において、前記演算を遂行することは、前記設定値が乗算及び累積を指定する場合、前記２個のデータワードのうちの第１データワードの前記データ部分に、前記２個のデータワードのうちの第２データワードの前記データ部分を乗算して積を形成すること、及び前記積を累積器の累積値に加算することを包含する。
【００１１】
一つの好ましい実施例において、前記プロセシング素子回路のうちの一つは、５０００個以下のゲート（ｇａｔｅ）を包含する。
【００１２】
一つの好ましい実施例において、前記ノード回路のうちの一つは、２０００個以下のゲートを包含する。
【００１３】
本発明の一つの実施例によると、計算のためのシステムが提供される。前記システムは、複数のプロセシング素子回路、複数のノード（ｎｏｄｅ）回路を包含する通信ファブリック（ｆａｂｒｉｃ）及びスクラッチメモリを包含し、前記スクラッチメモリは、前記通信ファブリックを介して前記プロセシング素子回路と連結され、一つ以上の前記ノード回路は複数のノードリンク回路を包含し、前記複数のノード回路のうち、第１ノード回路の前記複数のノードリンク回路のうち、第１ノードリンク回路は複数の入力及び一つの出力を有し、
前記第１ノードリンク回路は、データレジスタ及び設定値を格納するように構成された設定レジスタを包含し、前記第１ノードリンク回路は、前記入力において複数の各々のデータワードを受信するように構成され、前記データワードの各々は制御部分及びデータ部分を有し、前記データワードのうちの一つがデータワードをノードリンク設定ワードとして識別する制御部分を有する場合、前記設定レジスタに前記ノードリンク設定ワードの前記データ部分を前記設定値として格納し、前記データワードが、全てノードリンク設定ワードではない場合、前記設定値に基づき前記入力のうち、一つから前記データレジスタにデータワードを伝送し、及び／又は、前記入力のうち、一つから前記出力にデータワードを伝送し、及び／又は、前記データレジスタから前記出力にデータワードを伝送する。
【００１４】
一つの好ましい実施例において、一つ以上の前記ノード回路は、実質的に直交する方向においてノード回路の内側に向かう４個の入力、及び実質的に直交する方向において前記ノード回路の外側に向かう４個の出力を有する。
【００１５】
一つの好ましい実施例において、一つ以上の前記ノード回路のうち、一つのノード回路は４個のノードリンク回路を包含し、前記４個のノードリンク回路の各々は、前記ノード回路の前記４個の入力に各々連結される４個の入力及び前記回路の前記４個の出力のうち、各々の一つに連結される一つの出力を有する。
【００１６】
一つの好ましい実施例において、前記プロセシング素子回路のうちの一つは、５０００個以下のゲートを包含する。
【００１７】
一つの好ましい実施例において、前記ノード回路のうちの一つは、２０００個以下のゲートを包含する。
【００１８】
一つの好ましい実施例において、前記スクラッチメモリは、メモリバンク（ｂａｎｋ）及びメモリコントローラを包含し、前記メモリコントローラは複数の行キャッシュ（ｃａｃｈｅ）を包含し、一つ以上の前記行キャッシュは、前記データワードと同一のビット幅を有し、前記メモリコントローラは、前記メモリバンクから前記行キャッシュにデータを伝達し、前記行キャッシュから前記メモリバンクにデータを伝達するように構成され、
一つ以上の前記行キャッシュは、前記データワードのシーケンス（ｓｅｑｕｅｎｃｅ）を外にストリーム（ｓｔｒｅａｍ  ｏｕｔ）し、前記データワードのシーケンスを内にストリーム（ｓｔｒｅａｍ  ｉｎ）するように構成される。
【００１９】
一つの好ましい実施例において、前記行キャッシュのうちの一つは、二重バッファである。
【００２０】
一つの好ましい実施例において、各々の前記データワードのうち、前記制御部分は４ビットの幅を有し、各々の前記データワードのうち、前記データ部分は１６ビットの幅を有する。
【００２１】
本発明の一つの実施例によると、計算方法が提供される。前記方法は、プロセシングモジュールを設定するステップを包含し、前記プロセシングモジュールは、複数のプロセシング素子回路、各々が複数の入力及び一つの出力を有する複数のノードリンク回路を包含する、通信ファブリック（ｆａｂｒｉｃ）及びスクラッチメモリを包含し、
前記設定するステップは、前記スクラッチメモリが複数のノードリンク設定ワードを伝送するステップと、ここで、前記複数のノードリンク設定ワードの各々は、前記複数のノードリンク回路のうち、一つのノードリンク回路に送られ、前記複数のノードリンク回路のうち、第１ノードリンク回路が前記第１ノードリンク回路に送られるデータワードを受信するステップと、ここで、前記第１ノードリンク回路は、前記複数のプロセシング素子回路のうち、第１プロセシング素子回路の一つの入力に連結される一つの出力を有し、
前記第１ノードリンク回路が、前記第１ノードリンク回路の第１入力において受信されたデータワードを前記第１ノードリンク回路の前記出力に伝達するように、前記第１ノードリンク回路が前記第１ノードリンク回路の構成を設定するステップと、前記第１ノードリンク回路のうち、前記第１入力によりプロセシング素子設定ワードを受信するステップと、前記第１ノードリンク回路の前記出力により前記プロセシング素子設定ワードを前記第１プロセシング素子回路を伝送するステップと、前記第１プロセシング素子回路が、前記第１プロセシング素子回路の設定レジスタ（ｒｅｇｉｓｔｅｒ）に前記プロセシング素子設定ワードのデータ部分を格納するステップと、を包含する。
【００２２】
一つの好ましい実施例において、前記方法は、複数の積を計算するステップをさらに包含し、前記計算するステップは、前記スクラッチメモリが第１の複数のノードリンク回路を介して延伸する第１経路を通じて、被演算子の第１シーケンス（ｓｅｑｕｅｎｃｅ）を前記第１プロセシング素子回路に伝送するステップと、前記スクラッチメモリが、第２複数のノードリンク回路を介して延伸する第２経路を通じて被演算子の第２シーケンスを、前記第１プロセシング素子の回路に伝送するステップと、前記第１プロセシング素子が、ペアごとの（ｐａｉｒｗｉｓｅ）積のシーケンスを計算するステップと、を包含し、各々のペアごとの積は、被演算子の前記第１シーケンスの一つの被演算子及び被演算子の前記第２シーケンスの対応する一つの被演算子の積である。
【００２３】
一つの好ましい実施例において、前記方法は、密集性表現（ｄｅｎｓｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）から  希薄性表現（ｓｐａｒｓｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）に第１ベクトルを変換するステップをさらに包含し、前記第１ベクトルは、ノンゼロ値を有する第１エレメントを包含し、前記第１エレメントの直後には、ゼロの値を有する第２エレメントが続き、前記変換するステップは、前記第１エレメントを第１の２−タプル（ｔｕｐｌｅ）に交替するステップを包含し、第１の２−タプルは、前記１ベクトルの前記第１エレメントと同一の第１エレメント及び１より大きい第２エレメントを有する。
【００２４】
一つの好ましい実施例において、前記方法は、第２ベクトルの希薄性表現を前記第１ベクトルの前記稀薄性表現と整列させるステップをさらに包含し、前記整列させるステップは、前記第２ベクトルの前記希薄性表現から前記第１ベクトルの前記第２エレメントに対応する２−タプルを削除するステップ、及び前記第２ベクトルの第１の２−タプルの第２エレメントの値を増加させるステップを包含し、前記第２ベクトルの前記第１の２−タプルは、前記削除された２−タプルの直ぐ前に来る。
【００２５】
一つの好ましい実施例において、前記方法は、前記複数のプロセシング素子回路のうち、一つのプロセシング素子回路が前記第１ベクトルの前記第１の２−タプルの前記第１エレメントと前記第２ベクトルの前記第１の２−タプルの第１エレメントとを乗算して、結果として２−タプルの第１エレメントを形成するステップ、及び前記結果としての２−タプルの第２エレメントを前記第１ベクトルの前記第１の２−タプルの前記第２エレメントと同一に設定するステップと、をさらに包含する。
【００２６】
一つの好ましい実施例において、前記プロセシング素子回路のうちの一つは、５０００個以下のゲートを包含し、前記ノードリンク回路のうちの一つは、５００個以下のゲートを包含する。
【発明の効果】
【００２７】
本発明によるニューラルプロセシング計算のためのシステムと方法は、データワードが制御部分とデータ部分を有し、好ましくはデータ部分に希薄性表現が用いられるので、プロセシングの際の演算量を、従って電力消費を節減でき、さらに、ニューラルプロセシング計算のためのシステムのチップ面積を削減して、製造費用を減少できる。
【図面の簡単な説明】
【００２８】
【図１】図１は、本発明の一つの実施例による計算のためのシステムのレイアウト概略図である。
【図２】図２は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図３】図３は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図４】図４は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図５】図５は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図６】図６は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図７】図７は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図８】図８は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図９】図９は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図１０】図１０は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図１１】図１１は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図１２】図１２は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図１３】図１３は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図１４】図１４は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図１５】図１５は、本発明の一つの実施例による計算のためのデータの流れ図である。
【図１６】図１６は、本発明の一つの実施例によるノードリンクのブロック図である。
【図１７】図１７は、本発明の一つの実施例によるノードリンクのブロック図である。
【図１８】図１８は、本発明の一つの実施例によるノードリンクのブロック図である。
【図１９】図１９は、本発明の一つの実施例による計算のためのシステムの部分ブロック図である。
【図２０】図２０は、本発明の一つの実施例による再設定動作のためのデータの流れ図である。
【図２１】図２１は、本発明の一つの実施例によるプロセシング素子のブロック図である。
【図２２】図２２は、本発明の一つの実施例によるプロセシング素子のブロック図である。
【図２３】図２３は、本発明の一つの実施例によるスクラッチメモリのブロック図である。
【図２４】図２４は、本発明の一つの実施例によるスクラッチメモリのブロック図である。
【図２５】図２５は、本発明の一つの実施例によるスクラッチメモリのブロック図である。
【図２６】図２６は、本発明の一つの実施例によるスクラッチメモリのブロック図である。
【図２７】図２７は、本発明の一つの実施例によるスクラッチメモリのブロック図である。
【発明を実施するための形態】
【００２９】
添付された図面と関連して、以下に開示された詳細な説明は、本発明により提供されるニューラルプロセシングアクセラレータの実施例の説明として意図され、本発明が構成されたり活用されたりできる唯一の形態を示すものと意図されない。説明は、図示された実施例と関連して本発明の特徴を開示する。しかしながら、同一の又は同等の機能及び構造は、発明の思想及び範囲内に包含されるように意図された、他の実施例により達成されることができる。本明細書に示したように、同一の要素番号は、同一の要素又は特徴を示すものと意図される。
【００３０】
図１を参照すると、幾つかの実施例において、ニューラルプロセシングシステムは、スクラッチ（ｓｃｒａｔｃｈ）メモリ１１５及び複数のプロセシング素子（ＰＥ：  ｐｒｏｃｅｓｓｉｎｇ  ｅｌｅｍｅｎｔ）１２０を各々包含する複数のプロセシングモジュール１１０を包含し、プロセシング素子１２０は互いに連結され、通信ファブリック（ｆａｂｒｉｃ）１２５によりスクラッチメモリに連結される。動作時、スクラッチメモリ１１５は、通信ファブリック１２５を介してプロセシング素子１２０に被演算子（ｏｐｅｒａｎｄ）を提供し、プロセシング素子１２０は、結果を生成するために被演算子を処理し、該結果は通信ファブリック１２５を介してスクラッチメモリ１１５（又は、他のスクラッチメモリ１１５）にフィードバック（ｆｅｅｄｂａｃｋ）される。通信ファブリック１２５は、以下でより詳細に説明されるように、複数の相互連結されたノード（ｉｎｔｅｒｃｏｎｎｅｃｔｅｄ  ｎｏｄｅｓ）を包含し、ノードの各々は、複数の入力及び出力を有し、任意の入力から任意の出力までデータを直接伝達するようにプログラムされる。これにより、通信ファブリック１２５は、スクラッチメモリ１１５とプロセシング素子１２０との間に、及びプロセシング素子１２０のうちの任意の一つと他のプロセシング素子１２０との間にデータ経路を構築するようにプログラムされる。図１は物理的寸法通りに描かれていないけれども、幾つかの実施例は、通信ファブリック１２５を介して、プロセシング素子１２０同志の間に、及びスクラッチメモリ１１５とプロセシング素子１２０との間に、比較的短い通信経路を提供するように、図１のレイアウト（ｌａｙｏｕｔ）を用いる。
【００３１】
図１に図示されたニューラルプロセシングシステムは、図２乃至図１０，図１１乃至図１５を参照して以下でより詳細に説明されるように、多様なプロセシング作業を効率的に遂行するのに適している。図２は、エレメントワイズ（ｅｌｅｍｅｎｔ−ｗｉｓｅ、要素別）のベクトル演算が如何に遂行されるかを示す。例えば、下記の［数１］のようなエレメントワイズのベクトル積が遂行される。
【数１】
2019109892.tif 000003
【００３２】
幾つかの実施例において、モジュール又は全体ニューラルプロセシングシステムは、単一のクロックドメイン（ｃｌｏｃｋ  ｄｏｍａｉｎ）を有する、同期式デジタル回路である。メモリＡからは、クロック周期当たり一つずつ第１被演算子のストリーム（ｓｔｒｅａｍ）が提供され、メモリＢからは、クロック周期当たり一つずつ第２被演算子のストリームが提供される。被演算子の各々のストリームは、一般的に異なる伝達遅延を有してプロセシング素子１２０に伝達される。従って、処理されるようにスケジュールされた時刻以前に各々の被演算子が伝送される。
図２の表記法において、例えば、一番目の二つの被演算子は、時刻（ｔ０）にプロセシング素子１２０により受信されるようにスケジュールされる。時刻（ｔ０）にプロセシング素子１２０により受信されるために、メモリＡからの第１被演算子は、時刻（ｔ＿ｄＡ）に伝送され、ここで下付き添字ｄＡは、クロック周期を単位とする時間を示す。例えば、メモリＡからの一番目の被演算子は、ｄＡクロック周期だけ時間（ｔ０）以前に伝送され、ここでｄＡは、通信ファブリック１２５が、メモリＡからプロセシング素子１２０に被演算子を伝達するために使用するクロック周期を単位とする時間（以下、単に、時間という）。同様に、時刻（ｔ０）において、プロセシング素子１２０により受信されるために、メモリＢからの一番目の被演算子は、時刻（ｔ＿ｄＢ）に伝送される。例えば、メモリＢからの一番目の被演算子は、ｄＢ×クロック周期だけ時刻（ｔ０）以前に伝送され、ここでｄＢは、通信ファブリック１２５がメモリＢからプロセシング素子１２０に被演算子を伝達するために使用する時間である。
伝達遅延時間ｄＡ及びｄＢは同一であるか又は異なる。各々の伝達遅延時間は、データが通信ファブリック１２５を介して伝達される経路及び経路に沿って存在するノードの設定（ノードの各々は、設定可能な遅延を有し得る）により異なり得る。残りの被演算子は、図示されたように、クロック周期当たり、メモリごとに、一つずつメモリＡ及びメモリＢから順次伝送される。エレメントワイズの加算又は減算のような他のエレメントワイズの演算は、以下でより詳細に説明されるように、適切な演算を遂行するために設定されたプロセシング素子１２０を用いて同一の方式で遂行される。
【００３３】
プロセシング素子１２０はデータを処理し、結果（これは４個の積、即ち４個のエレメントからなる４エレメント（エレメントワイズ）積ベクトルと考えられる）を第３のメモリであるメモリＣに伝送する。プロセシング遅延は、ｔｐ（即ち、ｐクロック周期）として図２において識別される。
【００３４】
メモリＡ，メモリＢ，及びメモリＣは、全て一つのスクラッチメモリ１１５の部分（即ち、一つのプロセシングモジュール１１０のうち、スクラッチメモリ）であるか、又はメモリＡ、メモリＢ、及びメモリＣのうち、一つ以上が他のスクラッチメモリ１１５の部分である。
【００３５】
図３は、エレメントワイズのマトリックス（ｍａｔｒｉｘ）演算が、如何に遂行されるかを示す。例えば、下記の［数２］のようなエレメントワイズのマトリックス積が遂行される。
【数２】
2019109892.tif 000004
【００３６】
第１被演算子の３個の並列ストリーム（各々は、一番目の被乗数（ｍｕｌｔｉｐｌｉｃａｎｄ）の一つの行と対応する）はメモリＡから提供され、第２被演算子の３個の並列ストリーム（各々は、二番目の被乗数の行と対応する）はメモリＢから提供される。一番目の被乗数の第１の行と二番目の被乗数の第１の行のエレメントワイズの積が、第１プロセシング素子１２０ａにより一度にワンペアのエレメント毎に形成される。同様に、一番目の被乗数の第２及び第３の行と二番目の被乗数の第２及び第３の行のエレメントワイズの積が、各々第２プロセシング素子１２０ｂ及び第３プロセシング素子１２０ｃにより一度にワンペアのエレメント毎に形成される。
一番目の被乗数の一つの行と二番目の被乗数の対応する、一つの行の各々のエレメントワイズの積は、図２の各々の回路を用いて形成される。これにより、エレメントワイズの積が３個の因子により並列化される方式で遂行される。３個のベクトル演算（乗算される行の３ペアと対応される）が並列に遂行される。
他の実施例においては、同一の演算が、直列に遂行され（メモリＡが単一のストリームで第１被演算子の１２個のエレメントを一度に一つずつ伝送し、メモリＢが単一のストリームで第２非演算子の１２個のエレメントを一度に一つずつ伝送することにより）、又は同一の演算が並列化の他の方式で遂行されることができる（例えば、４個のプロセシング素子１２０の各々が、一番目の被乗数の各々の列と、二番目の被乗数の対応する列とのエレメントワイズの積の形成に関与する３個の乗算を遂行することにより、４個のプロセシング素子１２０により演算が並列化される）。
【００３７】
図４は、ベクトルの内積（ｄｏｔ  ｐｒｏｄｕｃｔ）が如何に遂行されるかを示す。例えば、下記の［数３］のようなベクトル内積演算が遂行される。
【数３】
2019109892.tif 000005
【００３８】
上述のエレメントワイズのベクトル積の場合と同様に、第１被演算子のストリームがメモリＡから提供され、第２被演算子のストリームがメモリＢから提供される。プロセシング素子１２０は、内積を形成するためにエレメントワイズの積を累積し、結果を第３のメモリであるメモリＣに伝送する。プロセシング素子１２０の累積器は、プロセシング素子１２０が設定（ｃｏｎｆｉｇｕｒａｔｉｏｎ）コマンドを受信する場合、リセットされる（以下でさらに詳細に説明される）。
【００３９】
図５は、マトリックス積の対角（ｄｉａｇｏｎａｌ）エレメントから構成されるベクトルが、例えば、下記の［数４］のようなマトリックス積の対角エレメントが如何に形成されるかを示す
【数４】
2019109892.tif 000006
【００４０】
結果ベクトルのエレメントの各々は、一番目の入力マトリックス（一番目の被乗数）の行と、二番目の入力マトリックス（二番目の被乗数）の列の内積である。このような内積の各々は、図４を参照して、上で説明した方式で計算される（一番目の内積は、第１プロセシング素子１２０ａにより計算され、二番目の内積は第２プロセシング素子１２０ｂにより計算され、三番目の内積は第３プロセシング素子１２０ｃにより計算される）。マトリックス積のエレメントの各々は、一番目の被乗数の一つの行と二番目の被乗数の一つの列の内積であるので、全体マトリックス積（図５でのように、算出された対角エレメント及び非対角（ｏｆｆ−ｄｉａｇｏｎａｌ）エレメントを包含する）は、同様の方式で計算できる。
【００４１】
図６は、ベクトルの内積が、例えば、下記の［数５］のようなベクトルの内積が、累積器がないプロセシング素子１２０を用いて如何に形成されるか、を示す。
【数５】
2019109892.tif 000007
【００４２】
第１プロセシング素子１２０ａはエレメントワイズの積を遂行し、第２プロセシング素子１２０ｂは累積器として動作する。
【００４３】
図７は、定数カーネル（ｋｅｒｎｅｌ）を有する１次元コンボルーション（ｃｏｎｖｏｌｕｔｉｏｎ、畳み込み）が、例えば、下記の［数６］が如何に遂行されるか、を示す。
【数６】
2019109892.tif 000008
【００４４】
カーネルのエレメント（［１  ２］）は、例えば、メモリＢにより、第１プロセシング素子１２０ａ及び第２プロセシング素子１２０ｂに予めプログラムされる（又は、以下でより詳細に説明されるように、このような二つのプロセシング素子１２０の各々の二番目の入力に連結された設定ファブリック（ｃｏｎｆｉｇｕｒａｔｉｏｎ  ｆａｂｒｉｃ）の２個の各々のノードにプログラムされる）。被演算子のストリーム（この場合、値［ａ，ｂ，ｃ，ｄ］）は、メモリＡから提供され、第１プロセシング素子１２０ａ及び第２プロシング素子１２０ｂの全てにブロードキャスト（ｂｒｏａｄｃａｓｔ）される（以下でより詳細に説明されるように、通信ファブリック１２５の適切な事前設定の結果として）。
第１プロセシング素子１２０ａは、被演算子のストリームの各々のエレメントをカーネルの第１のエレメント（この例示において、１）と乗算し、第２プロセシング素子１２０ｂは、被演算子のストリームの各々のエレメントをカーネルの第２のエレメント（この例示において、２）と乗算する。積のストリームは、第３プロセシング素子１２０ｃに伝送される。積の二番目のストリーム（第２プロセシング素子１２０ｂにより生成された）は、積（ａ・１及びｂ・２）が同時に第３プロセシング素子１２０ｃに到着するように、１クロック周期だけ遅延されて伝送される。
通信ファブリック１２５又は第３プロセシング素子１２０ｃは、以下でより詳細に説明されるように、積（ａ・２）が通信ファブリック１２５又は第３プロセシング素子１２０ｃにより捨てられるように、積（ａ・１及びｂ・２）の到達以前のクロック周期の最中に再設定される。もしそうしなければ、以前のクロック周期で積（ａ・２）は、第３プロセシング素子１２０ｃにより受信されて処理されるであろう。積（ｄ・１）も同様の方式で捨てられる。第３プロセシング素子１２０ｃは、図示されたように積（捨てられた積を除外して）をペアで加算してその和をメモリＣに伝送する。
【００４５】
図８は、定数カーネルを有する２次元コンボルーションが、例えば、下記の［数７］が如何に遂行されるか、を示す。
【数７】
2019109892.tif 000009
【００４６】
カーネルの一番目の行のエレメントは、例えば、メモリＢにより、第１プロセシング素子１２０ａ及び第２プロセシング素子１２０ｂに予めプログラムされる。１次元コンプルーションの場合のように、被演算子のストリーム（この場合、値［ａ，ｂ，ｃ，ｄ］は、メモリＡから提供され、第１プロセシング素子１２０ａ及び第２プロセシング素子１２０ｂの全てにブロードキャストされる（以下でさらに詳細に説明されるように、通信ファブリック１２５の適切な事前設定の結果として）。第１プロセシング素子１２０ａは、被演算子のストリームの各々のエレメントをカーネルの一番目のエレメント（この例示において、１）と乗算し、第２プロセシング素子１２０ｂは、被演算子のストリームの各々のエレメントをカーネルの二番目のエレメント（この例示において、２）と乗算する。
積のストリームは、第３プロセシング素子１２０ｃに伝送される。積の二番目のストリーム（第２プロセシング素子１２０ｂにより生成された）は、積（ａ・１及びｂ・２）が同時に第３プロセシング素子１２０ｃに到着するように、１クロック周期だけ遅延されて伝送される。コンボルーションの一部分ではない積は捨てられ（一つ以上のプロセシング素子１２０及び通信ファブリック１２５を再設定することにより）、第３プロセシング素子１２０ｃは、図示されたように、積（捨てられた積を除外して）をペアで加える。第４プロセシング素子１２０ｄ、第５プロセシング素子１２０ｅ及び第６プロセシング素子１２０ｆは共に、同様に入力マトリックスの二番目の行とカーネルの二番目の行の積の和を形成する。第３プロセシング素子１２０ｃ及び第６プロセシング素子１２０ｆにより生成された和は、第７プロセシング素子１２０ｇに提供され、第７プロセシング素子１２０ｇは図示されたように、最終コンボルーションを形成する。
【００４７】
図９は、希薄性定数カーネルを有する２次元コンボルーションが、例えば、下記の［数８］が如何に遂行されるか、を示す。
【数８】
2019109892.tif 000010
【００４８】
このコンボルーションは、図８に対応するコンボルーションと異なる。このコンボルーションにおいては、定数カーネルの二番目の行の二番目のエレメントが０であり（図８の計算においては、該エレメントは０ではなく、第５プロセシング素子１２０ｅにプログラムされる）、それ故、第５プロセシング素子１２０ｅが仮に存在しても、０を乗算するのみである。従って、第５プロセシング素子１２０ｅは図９の構成から除外される。第６プロセシング素子１２０ｆも同様に除外される。
図８の実施例においては、第６プロセシング素子１２０ｆは、入力マトリックスの二番目の行とカーネルの二番目の行の対応する項の積のペアの和を形成する。図９の実施例においては、各々の項の積のペアの内、一つの項の積は０であり、これにより第７プロセシング素子１２０ｇでは、第３プロセシング素子１２０ｃにより生成されている他の項の積が代わりに利用される。
【００４９】
図１０は、定数カーネルを有する１×１次元コンボルーションが、例えば、下記の［数９］が如何に遂行されるか、を示す。
【数９】
2019109892.tif 000011
【００５０】
図７の計算の場合と同様に、第１プロセシング素子１２０ａ及び第２プロセシング素子１２０ｂは、各々の定数項による乗算を遂行するために予めロードされ、第１プロセシング素子１２０ａ及び第２プロセシング素子１２０ｂの各々は、受信する各々の入力値を各々の定数と乗算する。得られた積は、第３プロセシング素子１２０ｃによりペアごとに加算される。
【００５１】
図１１乃至図１５は、数字シーケンス（ｓｅｑｕｅｎｃｅ）内の一つ以上の０を表わすために用いられる「希薄性表現（ｓｐａｒｓｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）」様式を利用して、希薄性の、ベクトル、マトリックス、及び他のテンソル（ｔｅｎｓｏｒ）が、どのように効率的な方式で処理されるかを例示する。幾つかの実施例において、０（ゼロ）エレメントを省略する一方、各々のノンゼロ数字を２−タプル（ｔｕｐｌｅ）として示すことにより、希薄性表現が達成される。２−タプルの一番目のエレメントは値であり、二番目のエレメントはアドレス増分（ａｄｄｒｅｓｓ  ｉｎｃｒｅｍｅｎｔ）である。
一般的な、即ち「密集性（ｄｅｎｓｅ）」ベクトルの表現において次のエレメントがノンゼロであればアドレス増分は１であり、０であれば、アドレス増分は１に現在のエレメントに続く０の個数を加算したのである。これは、表１の２つの例示で示される。例えば、第１ベクトルは、４個のノンゼロエレメント（［ａ，ｂ，ｃ，ｄ］）を有する。エレメントの全てがノンゼロであるので、このベクトルの希薄性表現の各々の２−タプルの一番目のエレメントは、密集性表現（ｄｅｎｓｅ  ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）の対応するエレメントの値と同一であり、各々の２−タプルの二番目のエレメントは１である。第２ベクトルは４個のエレメントを有し、密集性表現では［１，２，０，４］と記載（ｗｒｉｔｅ）される（即ち、第３のエレメントは０である）。第２ベクトルの希薄性表現において、０は省略され、これにより希薄性表現は３個の２−タプルのみを有する。０の値以前の値に対する２−タプルは、このエレメントの後に１つの０（ゼロ）が省略されたことを表わすように２の増分を有する。
【表１】
2019109892.tif 000012
【００５２】
図１１は、プロセシング素子１２０により希薄性形式が受信された場合、表１の二つのベクトルがどのように乗算されるかを示す。各々のクロック周期において、プロセシング素子１２０の２個の入力において受信された二つの２−タプルの二番目のエレメントは同一の値を有し、「結果２−タプル」（結果を格納する２−タプルであって、該、結果２−タプルの一番目のエレメントは、入力２−タプルの一番目のエレメントの積と同一である）の二番目のエレメントに対し上記の、同一の値を有する二番目のエレメントの値が用いられる。プロセシング素子１２０は、３個の演算で二つの４エレメントベクトル（二つの全てが、希薄性表現として提供され、二つのうち、一つは０の値を有する一つのエレメントを包含する）のエレメントワイズの積を計算する（３個の２−タプルにより希薄性表現として示される４エレメントの積ベクトルを形成するために）。
【００５３】
密集性表現から希薄性表現への変換は、スクラッチメモリ１１５のメモリコントローラ内の適切な回路により遂行できる。図１２には希薄性表現への変換が例示される。ベクトル（［ａ，ｂ，ｃ，ｄ］）の密集性表現は、メモリＡから提供される。このベクトルは、０エレメントを包含しないので、このベクトルについての希薄性表現への変換は各々のエレメントを、一番目のエレメントがベクトルの密集性表現の対応するエレメントと同一であり、二番目のエレメント（アドレス増分）が１である２−タプルに変換する効果を有する。
ベクトル（［１，２，０，４］）は、メモリＢから提供される。このベクトルは、０エレメントが二番目のエレメントの次に削除される信号に対し、三番目の位置に０エレメントを包含するので、二番目の２−タプルは二番目のエレメント（アドレス増分）「２」を有する。希薄性表現への変換結果は、図示されたように、他のメモリであるメモリＣに格納される。希薄性表現から密集性表現への変換は、図１３に図示されたように、同様の方式で、スクラッチメモリ１１５のメモリコントローラの適切な回路により遂行される。
即ち、ベクトル［ａ，ｂ，ｃ，ｄ］の希薄性表現、［｛ａ，１｝  ｛ｂ，１｝  ｛ｃ，１｝  ｛ｄ，１｝］は、メモリＡから提供される。このベクトルは０エレメントを包含しないので（そして、これにより各々のアドレス増分は１であるので）、密集性表現への変換は、このベクトルにおける各々のエレメントの２−タプルを、該２−タプルの一番目のエレメントと同一の密集性表現のエレメントに変換する効果を有する。ベクトル（［１，２，０，４］）の希薄性表現、［｛１，１｝  ｛２，２｝  ｛４，１｝］は、メモリＢから提供される。このベクトルは、二番目の２−タプルの二番目のエレメントにおいて、２のアドレス増分を有するので、二番目の２−タプルは、密集性表現の二つのエレメント（２及び０）に拡張される。他の二つの２−タプルの各々に対してアドレス増分は１であり、従って、該２−タプルの一番目のエレメントは、ベクトルの密集性表現の対応するエレメント値となる。対応するエレメント値は［１，２，０，４］である。密集性表現への変換結果は、図示されたように他のメモリであるメモリＣに格納される。
【００５４】
図１４に図示されたストリーム整列前処理ステップは、演算を遂行する前に希薄性表現の二つのベクトルのエレメントを整列するために利用される。演算が乗算であると（例えば、エレメントワイズの乗算又は内積）、他のベクトルの或るエレメントが０の値を有する場合に、一のベクトルの対応するノンゼロエレメントは削除される。又は、これと等価であるが、２−タプルは除去され、それに先行する２−タプルアドレス増分は、１だけ増加される。
図１４の例示において、ストリーム整列ステップは、一番目のベクトルから三番目の２−タプルを削除し、それに先行する２−タプルのアドレス増分を１だけ（｛ｂ，１｝から｛ｂ，２｝に）増加させる効果を有する。
但し、遂行される演算が加算であるか減算であると、何れか一方のベクトルが削除されていない２タプルを有する場合には、何れか一方のベクトルの各々の削除された２−タプルは、２−タプルの一番目のエレメントが０（ゼロ）を有する２−タプルとして回復されなければならない（そして、回復された２−タプルに先行する２−タプルのアドレス増分は１だけ減少される）。
【００５５】
図１５は、希薄性表現の二つの整列されたストリームベクトルに遂行されるエレメントワイズの乗算を示す。プロセシング素子１２０は、（ｉ）対応する結果２−タプルの一番目のエレメントを形成するために、受信された２−タプルの各対の一番目のエレメントについて演算（乗算）を遂行し、（ii）アドレス増分（アドレス増分は、ストリーム整列プロセスの結果として、入力２−タプルの全てについて同一である）を結果２−タプルのアドレス増分エレメントにコピーする。
【００５６】
通信ファブリック１２５は、４個のノードリンク（ｌｉｎｋ）又は「ノードリンク回路」を各々包含する、複数のノード又は「ノード回路」を包含する。各々のノードは、本明細書において北側、南側、東側及び西側と称される４個の実質的に直交する方向からの４個の入力及び同一の方向への４個の出力を有する。図１６は、一つの実施例においてノードリンク４０５を示す。ノードリンクは、ノードの４個の入力端に各々連結された４個の入力及びノードの４個の出力端のうち、一つに連結された一つの出力を有する。各々のノードリンクは設定レジスタ（ｃｏｎｆｉｇｕｒａｔｉｏｎ＿ｒｅｇｉｓｔｅｒ）４１０を包含し、設定レジスタ４１０の内容は、どの入力が出力と連結されるか、ノードリンクの受信されたデータを遅延させるか否か、又は一番最近に受信されたデータを定数として格納するか否かを制御する。
ノードリンクは、４入力マルチプレクサ（ＭＵＸ：ｍｕｌｔｉｐｌｅｘｅｒ）４１５、データレジスタ（ＲＧ）４２０及び２入力マルチプレクサ４２５を包含する。設定レジスタの２個のビットは、４入力マルチプレクサ４１５を制御し、４個の入力のうち、何れがノードリンク４０５の出力と連結されるかを選択する。設定レジスタの１個のビットは、データレジスタ４２０のクロック活性化（ｅｎａｂｌｅ）入力（ＣＥ）を制御し、これにより（クロックが非活性化されている場合に）定数を格納（クロック入力が活性化されている最後の周期に格納された定数）するために利用される。２入力マルチプレクサ４２５（設定レジスタ４１０の１個のビットにより制御される）の設定は、ノードリンクの出力が、４入力マルチプレクサ４１５の出力値であるか、又はデータレジスタ４２０に格納された（定数又は遅延された）値であるか否かを判定する。幾つかの実施例において、各々のノードリンクは、出力に追加レジスタを包含する（即ち、各々の出力はレジスタに格納される）。
【００５７】
図１７は、通信ファブリック１２５のノード４３０を示す。上述されたように、ノードは４個のノードリンク４０５を包含する。各々のノードリンク４０５は、制御回路４３５（図１６には図示されない）を包含する。制御回路４３５は、図１８に図示される。制御回路４３５は、有限状態マシン（「ＦＳＭ」：ｆｉｎｉｔｅ  ｓｔａｔｅ  ｍａｃｈｉｎｅ）４３２、４個の入力のうち任意の入力において構成ワードが受信された時を感知する設定ワード感知回路４４０（以下により詳細に説明されるように）、及び設定レジスタ４１０を包含し、設定ワードが感知された場合、設定ワード感知回路４４０は、設定レジスタ４１０に新たな値を書き込む。
【００５８】
ノード及びプロセシング素子は図１９のようなメッシュ（ｍｅｓｈ）を形成し、更に、例えば、追加ノード４３０、追加プロセシング素子、又はスクラッチメモリ１１５が図面のエッジの拡張部分に示される連結子により連結される。各々のプロセシング素子１２０は図示されたように、２個の出力を有する。例えば、プロセシング素子１２０が２個の入力値を受信し、２個の出力において各々、２個の入力値のうち大きい値及び２個の入力値のうち小さい値を出力するように設定されると、二番目の出力は有用である
【００５９】
動作において、スクラッチメモリ１１５、ノード４３０、及びプロセシング素子１２０の相互間に伝送されるデータは、データワードの形態であり、例えば、２０ビット幅のワードの各々は、４ビット幅の制御部分及び１６ビット幅のデータ部分を包含する。図２０は、通信ファブリック１２５がどのように構成されるかを例示する。即ち、図２０は、ノードリンク４０５の設定レジスタ４１０がどのようにプログラムされるかを示す。
スクラッチメモリ１１５のうちの一つは、ノード設定ワードのシーケンス５２０ａを伝送する。表２を参照して以下により詳細に説明されるように、シーケンス５２０ａの各々はノードリンク４０５により、例えば、一番目の４個のビットが、二進値００００を有する結果として認識される。シーケンス５２０ａの一番目の設定コマンド（ｃｏｍｍａｎｄ）は、第１ノード４３０ａのノードリンクにより、（ｉ）ノード設定コマンドとして（００００である一番目の４個のビットの結果として）、（ｉｉ）ノードリンクでアドレスが指定されることとして（ノードリンクに格納された固有の８ビット識別子と同一の次の８ビットの結果として）認識される。
ノードリンクは、第１ノード４３０ａの自分の出力へ非演算（ＮＯＰ：  ｎｏ  ｏｐｅｒａｔｉｏｎ）データワードを伝送し、第１ノード４３０ａの他のノードリンクに現在受信されたデータワードが抑制されるべきことを報らせる。第１ノード４３０ａの他のノードリンクの各々は、第１ノード４３０ａの各々の出力へ非演算データワードを伝送する。
ノード設定ワードのシーケンス５２０ａの二番目である次のデータワード（即ち、ノード設定ワードの減少されたシーケンス５２０ｂ）は、第１ノード４３０ａにより第２ノード４３０ｂに伝達される。データワードの制御部分により、ノードリンク４０５についての設定データを包含するものとして識別されるデータワードは、「ノードリンク設定ワード」として称され、データワードの制御部分により、プロセシング素子１２０についての設定データを包含するものとして識別されるデータワードは、「プロセシング素子設定ワード」として称される。
【００６０】
「ストリップ（ｓｔｒｉｐ、伝票）及びフォワード（ｆｏｒｗａｒｄ、転送）」プログラミングと称されるこの方式により、全てのノード４３０がプログラムされ、各々のノードは、一度プログラムされると、現在プログラムされた状態に従って追加設定情報及びデータを転送伝達する。プロセシング素子１２０は、そのうちの一つが図２０の例示的なプログラミングデータの経路において図示されたが、何れも同様の方式でプログラムされる。
【００６１】
［表２］を参照すると、上述されたように、各々のデータワードは、２０ビット幅を有し、２０ビット幅のうち、一番目の４ビットは制御ビットであり、残りの１６ビットはデータビットである。二進００００と同一の制御ワードを包含する任意のデータワード（全的に０で構成された非演算（ＮＯＰ）ワードを除外して）は、ノードリンク設定ワードであり、上で説明したようにノード４３０（ノードリンク４０５）により処理される。
二進０００１と同一の制御ワードを包含する任意のデータワードは、プロセシング素子設定ワードであり、データワードを受信するプロセシング素子１２０により同様の方式で処理される。即ち、プロセシング素子１２０がこのようなデータワードを受信する場合、プロセシング素子１２０は、データワードのデータビットを制御レジスタに格納する。二進００１１と同一の制御部分を包含するＳＴＯＰワードは、ＳＴＯＰワードを受信するプロセシング素子１２０が累積器を初期化し、プロセシング素子１２０が、他のプロセシング素子設定ワードを受信するまでデータ処理を中止する。ＳＴＯＰワードは、プロセシング素子１２０において乗算及び累積演算を終了するのに用いられる。
【００６２】
幾つかの実施例において、二進０１１１より大きな制御部分を有するデータワードは、希薄性表現において、アドレス増分に７を加えた制御部分を有し、ベクトルの２−タプルを符号化するのに用いられる（例えば、二進１０００の制御ワード値は、１のアドレス増分を示す）。
【表２】
2019109892.tif 000013
【００６３】
図２１は、幾つかの実施例における、プロセシング素子１２０の概略図である。各々のレジスタ及びマルチプレクサを包含する各々の入力回路６１０は、入力の各々に連結され、
（ｉ）入力値を変更しないまま伝達し、
（ｉｉ）１クロック周期だけ入力値を遅延させ、又は、
（ｉｉｉ）複数の次の計算において利用される定数値を格納する、のに用いられる。
乗算器６２０は、入力回路６１０により供給された値の積を形成し、加算器６３０は、値のペアの和を形成する。第１データスイッチングマルチプレクサ６４０ａは、加算器６３０が一番目の入力に乗算器６２０の出力を受信するか、又は入力回路６１０のうち、一番目の入力回路の出力を受信するかを判定する。第２データスイッチングマルチプレクサ６４０ｂは、加算器６３０がペアで加算を遂行するか又は累積器として動作するかを判定する。プロセシング素子１２０は、２個の出力レジスタ６５０をさらに包含する。
【００６４】
図２２は、他の実施例によるプロセシング素子１２０のブロック図である。相異なる類型のプロセシング素子１２０が、プロセシングモジュール１１０（図１）に結合されるか、又は、任意の一つのプロセシング素子１２０が、図２１及び図２２のプロセシング素子１２０のように、様々な類型のプロセシング素子の特徴を結合してなる。図２２のプロセシング素子１２０は、新たに受信されたデータが計算に用いられるか又は出力からのデータが計算に用いられるかを決定する第１マルチプレクサ６６０、データが１クロック周期だけ遅延されるかを共に選択する第１レジスタ６６５及び第２マルチプレクサ６７０、及び、図示されたように多様な数学的演算（例えば、二乗演算、平方根、逆数、又はログ（対数）演算）を遂行できる数学回路６８０を包含する。幾つかの実施例において、他の特別な目的のプロセシング素子が存在できる。例えば、プロセシング素子は、除算を遂行するように構成されたプロセシング素子を包含する。
【００６５】
プロセシング素子１２０は、浮動小数点（ＦＰ）、符号付き整数（ｉｎｔ），符号無し整数（ｕｉｎｔ）及びブール（ｂｏｏｌｅａｎ）を包含する多様なデータ類型について演算を遂行し、データの類型の間にキャスティング（ｃａｓｔｉｎｇ）演算を遂行するようにさらに構成される。このような演算を例示すると、
［Ａ］  ｍｕｌｔｉｐｌｙ（乗算）（ＦＰ１６，ＦＰ１６），（ｕ／ｉｎｔ８／１６，ｕ／ｉｎｔ８／１６），ａｄｄ（加算）（ＦＰ１６，ＦＰ１６），（ｕ／ｉｎｔ８／１６，ｕ／ｉｎｔ８／１６），ｓｕｂｔｒａｃｔ（減算）（ＦＰ１６，ＦＰ１６），（ｕ／ｉｎｔ８／１６，ｕ／ｉｎｔ８／１６），ｎｅｇａｔｅ（否定）（ＦＰ１６，ＦＰ１６），（ｕ／ｉｎｔ８／１６，ｕ／ｉｎｔ８／１６），
［Ｂ］  ｃａｓｔ（類型変換）  ＦＰ１６  ｔｏ  ｉｎｔ１６／ｕｉｎｔ１６／ｉｎｔ８／ｕｉｎｔ８，ｃａｓｔ（類型変換）  ｉｎｔ１６／ｕｉｎｔ１６／ｉｎｔ８／ｕｉｎｔ８  ｔｏ  ＦＰ１６，ｃａｓｔ（類型変換）  ＦＰ１６  ｔｏ  ｂｏｏｌｅａｎ，ｃａｓｔ（類型変換）  ｂｏｏｌｅａｎ  ｔｏ  ＦＰ１６，ｍａｘ（最大）（ＦＰ１６，ＦＰ１６），ｍｉｎ（最小）（ＦＰ１６，ＦＰ１６）；
［Ｃ］  ｂｏｏｌｅａｎ（ブール代数）：  ｇｒｅａｔｅｒ（大）ｌｅｓｓ（小），ｅｑｕａｌ（等しい），ｇｒｅａｔｅｒ−ｏｒ−ｅｑｕａｌ（非小），ｌｅｓｓ−ｏｒ−ｅｑｕａｌ（非大），ｌｏｇｉｃａｌ（論理）  ａｎｄ（ＡＮＤ），ｏｒ（ＯＲ），ｎｅｇａｔｅ（ＮＯＴ），ｘｏｒ（ＸＯＲ）；
［Ｄ］  ｂｉｔｗｉｓｅ（ビットレベルブール代数）：  ＡＮＤ，ＯＲ，ＮＯＴ，ＸＯＲ，  ｉｎｔ８／１６，ｕｉｎｔ８／１６，ｓｈｉｆｔ＿ｌｅｆｔ／ｒｉｇｈｔ（シフト左／右），  ａｒｉｔｈ／ｃｉｒｃｕｌａｒ，ｉｎｔｓ，ｕｉｎｔｓ，及びｉｓＮａＮ（ＦＰ１６）−＞ｂｏｏｌｅａｎ，ｉｓＩｎｆ（ＦＰ１６）、を包含する。
以上［Ａ］〜［Ｄ］において使用された表記法の内、斜線「／」は「又は」を意味し、これにより、例えば、「ｕ／ｉｎｔ８／１６」は、「ｕｉｎｔ８，ｕｉｎｔ１６，ｉｎｔ８、又はｉｎｔ１６」を意味する。
【００６６】
幾つかの実施例において、ノード４３０及びプロセシング素子１２０は共に小さい。即ち、ノード４３０及びプロセシング素子１２０は、その構築のために少数のゲート（ｇａｔｅ）しか要求しない。従って、単位プロセシング能力当たりの費用は低く、複数のプロセシングモジュール１１０（図１）を包含するシステムは、全体プロセシング能力の相当な量を比較的少ない費用で提供するように拡大（ｓｃａｌｅ＿ｕｐ）できる。ノード４３０及びプロセシング素子１２０のサイズが比較的小さいので、システムを構築する費用の側面及び作動する費用（例えば、電力消費及び要求空間）の側面において費用が比較的低い。幾つかの実施例において、各々のノードリンク４０５は、５００個又はもっと少ないゲートしか包含せず、各々のプロセシング素子１２０は、５０００個又はもっと少ないゲートしか包含しない。
【００６７】
図２３乃至図２７は、メモリコントローラ７１０及びメモリバンク７２０を包含するスクラッチメモリ１１５の構造及び構成を示す。メモリバンク７２０は、２ポートメモリである。例えば、メモリバンク７２０は、スタティックランダムアクセスメモリ（ＳＲＡＭ：  ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）である。メモリコントローラ７１０は、スクラッチメモリ１１５が大きな個数（Ｍ個、例えば、数１０個）のポートを有するメモリシステムとして動作させるため、（ｉ）メモリバンク７２０と複数の行キャッシュ（ｃａｃｈｅ）の間のデータをコピーし、（ｉｉ）該データに対し、密集性表現と希薄性表現との間の変換及びストリーム整列などの、前処理及び後処理動作を遂行する。
各々の行キャッシュは、図２７に図示されたように、二重バッファ（ｂｕｆｆｅｒ）として具現される。メモリバンク７２０は、スクラッチメモリ１１５をホスト中央処理装置（ＣＰＵ，ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）に連結するＡＸＩ（Ａｄｖａｎｃｅｄ  ｅＸｔｅｎｓｉｂｌｅ  Ｉｎｔｅｒｆａｃｅ）ブリッジ（ｂｒｉｄｇｅ）を介して直接メモリアクセス（ＤＭＡ：  ｄｉｒｅｃｔ  ｍｅｍｏｒｙ  ａｃｃｅｓｓ）によりアクセスされる。ホストＣＰＵは、作動中に、メモリバンク７２０をプログラムし、メモリコントローラ７１０に対してスタートコマンドを発行する。それを受けてメモリコントローラ７１０は、通信ファブリック１２５に通信ファブリック１２５のノード４３０及びプロセシング素子１２０を設定するための一番目のデータ及び演算を遂行するための二番目のデータのストリーミング（ｓｔｒｅａｍｉｎｇ）出力を開始する。
幾つかの実施例において、ＳＲＡＭはキャッシュとペアをなす。データは、ＳＲＡＭからの連続的リード（ｒｅａｄ）を含むストリーミング方式でアクセスされる。ＳＲＡＭへの書き込み及びＳＲＡＭからの読み出しは、電力の観点から比較的高コストである。従って、電力を節約するため、データは、キャッシュラインにコピーされ、キャッシュラインからストリームされる。キャッシュは、静的に（スケジュールされる。
【００６８】
本発明において、多様な素子（ｅｌｅｍｅｎｔ）、部品（ｃｏｍｐｏｎｅｎｔ）、領域（ｒｅｇｉｏｎ）、階層（ｌａｙｅｒ）及び／又はセクション（ｓｅｃｔｉｏｎ）を説明するために、「第１」、「第２」、「第３」などの用語が使用されるとしても、このような素子、部品、領域、階層及び／又はセクションは、このような用語により制限されないものと理解されるべきであろう。このような用語は、他の素子、部品、領域、階層又はセクションから一つの素子、部品、領域、階層又はセクションを区別するためにのみ使用される。従って、本明細書に開示された第１の素子、部品、領域、階層又はセクションは、本発明の思想及び範囲から逸脱せずに、第２の素子、部品、領域、階層又はセクションと称され得る。
【００６９】
本明細書において、説明の便宜のため、「下」、「下側」、「底」、「上」、「上側」などの、相対的空間用語が、図面に示された一つの素子又は特徴の、他の素子又は特徴との位置関係を説明するために利用される。このような相対的空間用語は、図面にて描写された方向だけでなく、使用又は動作においてデバイスの他の方向を包含するものと意図される。例えば、図面のデバイスが裏返されると、他の素子又は特徴の「下」又は「底」又は「下側」として説明される他の素子又は特徴の「上側」に位置する。従って、「下」又は「下側」の例示用語は、上及び下の方向を全て包含できる。デバイスは、その他の方向（例えば、９０度又は他の方向に回転される）にも位置し得るし、本明細書において使用される相対的空間記述子は、これに合わせて解釈されなければならない。なお、或る階層が二つの階層の「間」にある示される場合、該階層は、該二つの階層の間の、唯一の階層であるか、一つ以上の介在する階層が存在し得る。
【００７０】
本明細書において使用された用語は、ただ特定の実施例を説明するためであり、本発明を制限するものと意図されない。本明細書において使用されたように、「実質的に」、「約」、そして類した用語は、近似の用語として使用され、程度の用語として使用されず、技術の分野における通常の技術者により認識されることができる、測定又は計算された値から内在する偏差を説明するためのものと意図される。本明細書において使用されたように、「主要（ｍａｊｏｒ）成分」という用語は、組成物又は製品の任意の他の単一成分の量より多い量で組成物、ポリマー（ｐｏｌｙｍｅｒ）又は製品に存在する成分を示す。対照的に、「１次（ｐｒｉｍａｒｙ）成分」は、組成物、ポリマー、又は製品において、少なくとも５０％を構成する成分を示す。本明細書において使用されたように、「主要部分」は、複数の項目に適用される場合、項目のうち、最小限半分を意味する。
【００７１】
本明細書において使用されたように、文脈において明白に異なると指摘しない限り、単数形は複数形も包含すると意図される。「〜包含する」及び／又は「包含する〜」という用語は、本明細書において使用される場合、記述された特徴、整数、ステップ、動作、素子及び／又は部品の存在を明示し、一つ以上の他の特徴、整数、ステップ、動作、素子、部品、及び／又はそれらのグループの存在又は付加を排除しないと理解されることができる。本明細書において使用されたように、「及び／又は」という用語は、関連された一つ以上の列挙された項目の任意の組み合わせ及び全ての組み合わせを包含する。「少なくとも一つ」のような表現は、要素リストの前にある場合、全体の要素リストを修正し、リストの個別要素を修正しない。なお、「〜できる」の使用は、本発明の実施例を説明する場合、「本発明の一つ以上の実施例」を示す。なお、さらに、「例示的な」という用語は、例示又は実例を示すものと意図される。本明細書において使用されたように、「〜使用する」、「使用する〜」及び「使用された〜」という用語は、「〜活用する」、「活用する〜」及び「活用された〜」という用語の各々と同意語と見なされることができる。
【００７２】
要素又は階層が、他の要素又は階層の「上に」、他の要素又は階層に「連結される〜」又は他の要素又は階層に「隣接する〜」と示される場合、要素又は階層が、他の要素又は階層の直接の上に、他の要素又は階層に直接連結される、他の要素又は階層に直接隣接するものであり得るか、一つ以上の間に来る要素又は階層が存在できる。対照的に、要素又は階層が、他要素又は階層の「直接の上」、他の要素又は階層に「直接連結される〜」、又は他の要素又は階層に「直ぐに隣接する〜」ものと示される場合、間に来る要素又は階層が存在しない。
【００７３】
本明細書において列挙された任意の数値範囲は、列挙された範囲内に包含された、同一数値の精度の全てのサブ範囲を包含するものと意図される。例えば、「１．０から１０．０」の範囲は、列挙された最小値１．０及び列挙された最大値１０．０の間の（を包含する）全てのサブ範囲を、即ち、例えば、２．４から７．６のような、１．０以上の最小値及び１０．０以下の最大値を有する全てのサブ範囲を包含するものと意図される。本明細書において列挙された任意の最大数値制限は、ここに包含された全ての下位数値制限を包含するためのものと意図され、本明細書において列挙された任意の最小数値制限は、ここに包含された全ての上位数値制限を包含するためのものと意図される。
【００７４】
ニューラルプロセシングアクセラレータの実施例が、本明細書において具体的に説明されたが、多様な修正及び変更は、当該技術の分野における通常の技術者に自明であろう。従って、本発明の原理により構成されたニューラルプロセシングアクセラレータは、本明細書において具体的に説明されたものと異なるように具現可能である。本発明は、次の請求項及び該請求項の均等範囲で定義される。
【産業上の利用可能性】
【００７５】
本発明は向上されたニューラルネットワーク計算を遂行するニューラルプロセシングシステムに有用である。
【符号の説明】
【００７６】
１１０      プロセシングモジュール
１１５      スクラッチメモリ
１２０、１２０ａ〜１２０ｆ      プロセシング素子（プロセッシング素子回路））
１２５      通信ファブリック
４０５      ノードリンク（ノードリンク回路）
４１０      設定レジスタ
４１５      ４入力マルチプレクサ
４２０      データレジスタ
４２５      ２入力マルチプレクサ
４３０，  ４３０ａ〜４３０ｄ      ノード（ノード回路）
４３２      有限状態マシン
４３５      制御回路
４４０      設定ワード感知回路
５２０ａ、５２０ｂ      シーケンス
６１０      入力回路
６８０      数学回路
７１０      メモリコントローラ
７２０      メモリバンク
【図１】
2019109892.tif 000014
【図２】
2019109892.tif 000015
【図３】
2019109892.tif 000016
【図４】
2019109892.tif 000017
【図５】
2019109892.tif 000018
【図６】
2019109892.tif 000019
【図７】
2019109892.tif 000020
【図８】
2019109892.tif 000021
【図９】
2019109892.tif 000022
【図１０】
2019109892.tif 000023
【図１１】
2019109892.tif 000024
【図１２】
2019109892.tif 000025
【図１３】
2019109892.tif 000026
【図１４】
2019109892.tif 000027
【図１５】
2019109892.tif 000028
【図１６】
2019109892.tif 000029
【図１７】
2019109892.tif 000030
【図１８】
2019109892.tif 000031
【図１９】
2019109892.tif 000032
【図２０】
2019109892.tif 000033
【図２１】
2019109892.tif 000034
【図２２】
2019109892.tif 000035
【図２３】
2019109892.tif 000036
【図２４】
2019109892.tif 000037
【図２５】
2019109892.tif 000038
【図２６】
2019109892.tif 000039
【図２７】
2019109892.tif 000040