(57)【要約】【課題】大規模並列ニューラル推論コンピューティング・エレメントが提供される。【解決手段】複数の乗算器は、複数の等サイズのグループに配置される。複数の乗算器の各々は、入力活性化に重みを並列に適用して出力を生成するように適合される。乗算器のグループの１つに、複数の加算器が動作的に結合される。複数の加算器の各々は、自身の関連するグループ内の乗算器の出力を並列に加算して部分和を生成するように適合される。複数の加算器の１つに、複数の関数ブロックが動作的に結合される。複数の関数ブロックの各々は、自身の関連する加算器の部分和に関数を並列に適用して出力値を生成するように適合される。【選択図】図１
2021519455.tif 000002
【特許請求の範囲】
【請求項１】
複数の等サイズのグループに配置され、各々が入力活性化に重みを並列に適用して出力を生成するように適合される、複数の乗算器と、
各々が前記乗算器のグループの１つに動作的に結合され、各々が自身の関連するグループ内の前記乗算器の前記出力を並列に加算して部分和を生成するように適合される、複数の加算器と
を含む、システム。
【請求項２】
複数の関数ブロックをさらに含み、前記複数の関数ブロックの各々は、前記複数の加算器の１つに動作的に結合され、ならびに自身の関連する加算器の前記部分和に関数を並列に適用して出力値を生成するように適合される、請求項１に記載のシステム。
【請求項３】
重みの行列と、活性化のベクトルとを受信するように適合された、請求項１に記載のシステム。
【請求項４】
前記複数の加算器の各々は加算器のツリーを含む、請求項１に記載のシステム。
【請求項５】
前記加算器のツリーはバイナリ・ツリーである、請求項４に記載のシステム。
【請求項６】
前記加算器のツリーは複数の桁上げ保存加算器を含む、請求項４に記載のシステム。
【請求項７】
前記活性化のベクトルの各活性化は、前記乗算器のグループのすべてに一斉送信される、請求項３に記載のシステム。
【請求項８】
前記乗算器のグループの各々に動作的に結合されたシストリック・パイプラインをさらに含む、請求項３に記載のシステム。
【請求項９】
前記乗算器のグループはパイプライン処理される、請求項１に記載のシステム。
【請求項１０】
前記重みは平衡三進数である、請求項１に記載のシステム。
【請求項１１】
前記複数の乗算器の各々はマルチプレクサを含む、請求項１に記載のシステム。
【請求項１２】
前記重みの行列は圧縮され、前記システムは前記圧縮された重みの行列を展開するように適合される、請求項３に記載のシステム。
【請求項１３】
前記複数の関数ブロックは、前記出力値と、後で計算される出力値とを組み合わせるように適合される、請求項２に記載のシステム。
【請求項１４】
複数のシフタをさらに含み、各シフタは前記関数ブロックの１つに動作的に接続され、各シフタは自身の対応する関数ブロックの前記出力値を並列にシフトするように適合され、
前記複数の関数ブロックは、前記シフトされた値と、後で計算される出力値とを組み合わせるように適合される、請求項２に記載のシステム。
【請求項１５】
各々の前記関数ブロックの前記関数は活性化関数である、請求項２に記載のシステム。
【請求項１６】
各々の前記関数ブロックの前記関数はプログラマブルである、請求項２に記載のシステム。
【請求項１７】
各々の前記関数ブロックの前記関数は加算である、請求項２に記載のシステム。
【請求項１８】
各々の前記関数ブロックの前記関数は乗算である、請求項２に記載のシステム。
【請求項１９】
各々の前記関数ブロックの前記関数は恒等関数である、請求項２に記載のシステム。
【請求項２０】
ルックアップ・テーブルをさらに含み、各々の前記活性化関数ブロックの前記関数は、前記ルックアップ・テーブルからのルックアップを含む、請求項２に記載のシステム。
【請求項２１】
前記ルックアップ・テーブルはプログラマブルである、請求項２０に記載のシステム。
【請求項２２】
各々の前記関数ブロックの前記関数は最大関数である、請求項２に記載のシステム。
【請求項２３】
各々の前記関数ブロックの前記関数は最小関数である、請求項２に記載のシステム。
【請求項２４】
前記関数ブロックに動作的に結合され、ならびに前記関数ブロックの前記出力値を記憶するように適合される、ベクトル・レジスタと、
各々が前記ベクトル・レジスタに動作的に結合され、各々が前記記憶された出力値に関数を並列に適用するように適合される、第２の複数の関数ブロックと
をさらに含む、請求項２に記載のシステム。
【請求項２５】
前記第２の複数の関数ブロックの各々の前記関数は前記恒等関数である、請求項２４に記載のシステム。
【請求項２６】
前記第２の複数の関数ブロックの各々の前記関数は活性化関数である、請求項２４に記載のシステム。
【請求項２７】
置換演算を行うように適合された、請求項２４に記載のシステム。
【請求項２８】
ベクトル・パック演算を行うように適合された、請求項２４に記載のシステム。
【請求項２９】
最大プール演算を行うように適合された、請求項２４に記載のシステム。
【請求項３０】
平均プール演算を行うように適合された、請求項２４に記載のシステム。
【請求項３１】
要素ごとの乗算演算を行うように適合された、請求項２４に記載のシステム。
【請求項３２】
乗算器の複数の等サイズのグループによって、複数の入力活性化に複数の重みを並列に適用して、乗算器の各グループに対する複数の出力を生成するステップと、
乗算器の各グループからの前記複数の出力を並列に加算して、乗算器の各グループからの部分和を生成するステップと
を含む方法。
【請求項３３】
前記部分和に関数を並列に適用して、複数の出力値を生成するステップをさらに含む、請求項３２に記載の方法。
【請求項３４】
複数の等サイズのグループに配置される、複数の乗算器と、
各々が前記乗算器のグループの１つに動作的に結合される、複数の加算器と、
自身によって具現化されるプログラム命令を有するコンピュータ可読ストレージ媒体とを含むシステムであって、前記プログラム命令は、
前記複数の乗算器の各々によって、入力活性化に重みを並列に適用して出力を生成するステップ、
前記複数の加算器の各々によって、自身が関連するグループ内の前記乗算器の前記出力を並列に加算して部分和を生成するステップ
を含む方法を行うように実行可能である、システム。
【請求項３５】
複数の関数ブロックをさらに含み、前記複数の関数ブロックの各々は、前記複数の加算器の１つに動作的に結合され、前記方法はさらに、
前記複数の関数ブロックの各々によって、自身の関連する加算器の前記部分和に関数を並列に適用して出力値を生成するステップを含む、請求項３４に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の実施形態はニューラル・ネットワーク推論に関し、より具体的には大規模並列ニューラル推論コンピューティング・エレメントに関する。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
大規模並列ニューラル推論コンピューティングのためのシステム、方法、およびコンピュータ・プログラム製品を提供する。
【課題を解決するための手段】
【０００３】
本開示の実施形態によると、大規模並列ニューラル推論コンピューティングのためのシステム、方法、およびコンピュータ・プログラム製品が提供される。複数の乗算器は、複数の等サイズのグループに配置される。複数の乗算器の各々は、入力活性化に重みを並列に適用して出力を生成するように適合される。乗算器のグループの１つに、複数の加算器が動作的に結合される。複数の加算器の各々は、自身の関連するグループ内の乗算器の出力を並列に加算して部分和を生成するように適合される。複数の加算器の１つに、複数の関数ブロックが動作的に結合される。複数の関数ブロックの各々は、自身の関連する加算器の部分和に関数を並列に適用して出力値を生成するように適合される。
【０００４】
一態様によると、システムが提供され、このシステムは複数の乗算器を含み、複数の乗算器は複数の等サイズのグループに配置され、複数の乗算器の各々は、入力活性化に重みを並列に適用して出力を生成するように適合され、このシステムはさらに複数の加算器を含み、複数の加算器の各々は乗算器のグループの１つと動作的に結合され、複数の加算器の各々は、自身の関連するグループ内の乗算器の出力を並列に加算して部分和を生成するように適合される。
【０００５】
一態様によると、乗算器の複数の等サイズのグループによって、複数の入力活性化に複数の重みを並列に適用して、乗算器の各グループに対する複数の出力を生成するステップと、乗算器の各グループからの複数の出力を並列に加算して、乗算器の各グループからの部分和を生成するステップとを含む方法が提供される。
【０００６】
一態様によると、システムが提供され、このシステムは複数の乗算器を含み、複数の乗算器は複数の等サイズのグループに配置され、このシステムはさらに複数の加算器を含み、複数の加算器の各々は乗算器のグループの１つと動作的に結合され、このシステムはさらに、自身によって具現化されるプログラム命令を有するコンピュータ可読ストレージ媒体を含み、このプログラム命令は、複数の乗算器の各々によって入力活性化に重みを並列に適用して出力を生成するステップと、複数の加算器の各々によって自身の関連するグループ内の乗算器の出力を並列に加算して部分和を生成するステップとを含む方法を行うために実行可能である。
【０００７】
ここで添付の図面を参照して、単なる例として本発明の実施形態を説明することとする。
【図面の簡単な説明】
【０００８】
【図１】本開示の実施形態による複数ニューラル・コア推論プロセッサ・アーキテクチャを示す図である。
【図２】本開示の実施形態による部分和を算出するための大規模並列ベクトル行列乗算器を示す図である。
【図３】本開示の実施形態による樹状回路を示す図である。
【図４】本開示の実施形態による加算器のアレイおよびベクトル・レジスタを有するベクトル行列乗算器を示す図である。
【図５】本開示の実施形態による活性化関数を有するベクトル行列乗算器を示す図である。
【図６】本開示の実施形態による活性化関数に対するルックアップ・テーブルを示す図である。
【図７】本開示の実施形態による分配一斉送信を介した入力活性化を示す図である。
【図８】本開示の実施形態による樹状回路に対する加算器のバイナリ・ツリーを示す図である。
【図９】本開示の実施形態による樹状回路に対する桁上げ保存加算器のツリーを示す図である。
【図１０】本開示の実施形態によるマルチプレクサによって実現される三進乗算器を示す図である。
【図１１】本開示の実施形態によるベクトル行列乗算において用いるためのシフタを示す図である。
【図１２】本開示の実施形態によるニューラル回路を示す図である。
【図１３】本開示の実施形態によるベクトル行列乗算ユニットを用いたシャッフル演算を示す図である。
【図１４】本開示の実施形態による例示的なバタフライ・ネットワーク計算を示す図である。
【図１５】本開示の実施形態によるベクトル行列乗算ユニットを用いたデータ・パック演算を示す図である。
【図１６】本開示の実施形態によるベクトル行列乗算ユニットを用いた最大プール演算を示す図である。
【図１７】本開示の実施形態によるベクトル行列乗算ユニットを用いた平均プール演算を示す図である。
【図１８】本開示の実施形態によるベクトル行列乗算ユニットを用いた要素ごとの乗算演算を示す図である。
【図１９】本開示の実施形態によるベクトル行列乗算ユニットを用いた複数の要素ごとの演算と部分和とを組み合わせるためのプログラマブル演算を示す図である。
【図２０】本開示の実施形態によるニューラル処理コアを動作するための方法を示す図である。
【図２１】本開示の実施形態によるコンピューティング・ノードを示す図である。
【発明を実施するための形態】
【０００９】
人工ニューロンは数学関数であり、その出力は自身の入力の線形結合の非線形関数である。２つのニューロンは、もし一方の出力が他方への入力であれば接続される。重みとは、１つのニューロンの出力と別のニューロンの入力との間の接続の強度を符号化するスカラ値である。
【００１０】
ニューロンは、その入力の重み付き和に非線形活性化関数を適用することによって、活性化と呼ばれる自身の出力を計算する。重み付き和は、各入力と対応する重みとを乗算し、その積を累積することによって計算される中間結果である。部分和は、入力の部分集合の重み付き和である。１つ以上の部分和を累積することによって、すべての入力の重み付き和を段階的に計算してもよい。
【００１１】
ニューラル・ネットワークは、１つ以上のニューロンの集合体である。ニューラル・ネットワークはしばしば、レイヤと呼ばれるニューロンのグループに分割される。レイヤは１つ以上のニューロンの集合体であり、それらのニューロンのすべてが同じレイヤから入力を受信し、すべてが同じレイヤに出力を送信し、通常は類似の機能を行う。入力レイヤは、ニューラル・ネットワークの外側のソースから入力を受信するレイヤである。出力レイヤは、ニューラル・ネットワークの外側のターゲットに出力を送信するレイヤである。他のすべてのレイヤは、中間処理レイヤである。マルチレイヤ・ニューラル・ネットワークは、２つ以上のレイヤを有するニューラル・ネットワークである。ディープ・ニューラル・ネットワークは、多くのレイヤを有するマルチレイヤ・ニューラル・ネットワークである。
【００１２】
ニューラル処理ユニットのアレイはニューラル・コアと呼ばれ、さまざまなタイプのニューラル・ネットワークおよびディープ・ニューラル・ネットワークを実行するためのアーキテクチャを提供する。さまざまなコア・アーキテクチャがニューラル・ネットワーク計算を実施するために好適である。一般的に、こうした計算は入力値と、シナプス重みと、ニューラル活性化関数とに基づいてニューロン活性化を計算することを伴う。当然のことながら、ニューロン活性化は、オンチップ・ネットワークを介するものを含むさまざまなやり方で分配されてもよい。本明細書におけるさまざまな実施例は、ネットワークを通じて送信されるニューロン活性化に言及しているが、当然のことながら本開示はより一般的に、ＧＰＵおよび特殊化ＡＳＩＣチップを含む任意のニューロシナプス・システムに適用され、かつ輸送機構にかかわらずニューロン活性化に適用される。
【００１３】
本開示のさまざまな実施形態によると、ニューラル・プログラムはニューラル・ネットワークを表す。ニューラル・プログラムは、ニューラル・ネットワークに関する情報を含む。いくつかの実施形態において、この情報は、入力ニューロン活性化に対する電子ニューロンの応答を定めるニューロン特性および動力学を含む。たとえば、ニューロン特性および動力学は、閾値パラメータ、リーク・パラメータ、遅延パラメータ、またはリセット・パラメータを含み得る。いくつかの実施形態において、ニューラル・プログラム情報は、ニューロンのシナプス接続（例、シナプス重み行列を介して行われたシナプス接続）を含む。いくつかの実施形態において、ニューラル・プログラム情報は軸索特性（例、軸索タイプ）を含む。いくつかの実施形態において、ニューラル・プログラム情報は、ニューロンの出力活性化が配信されるべき１つ以上の送信先（例、ターゲット軸索）を含む。
【００１４】
さまざまな実施形態によると、ニューラル・ネットワークはニューラル・プログラムのインスタンス化を表す。ニューラル・ネットワークは、ハードウェア、シミュレーション、またはその両方においてインスタンス化されてもよい。たとえば、ニューラル・プログラムはニューラル・ネットワークの１つ以上のインスタンスを生じさせてもよく、そのインスタンスは単一のコア、複数のコア、または複数のチップに存在してもよい。
【００１５】
本開示の実施形態によると、樹状ツリーが提供され、この樹状ツリーはすべてのシナプスに対する乗算累積回路に対する専用の方向に構成されてもよく、場合によっては並列に動作する。加えて、好ましい実施形態による本開示は、すべてのニューロンに対する専用の部分和オペレータおよび非線形活性化回路を提供し、これらも同様に並列に動作し得る。いくつかの実施形態において、加算器または最大／最小演算に対して多機能回路が使用される。いくつかの実施形態において、このシステムはパイプライン樹状ツリーを含む。
【００１６】
本開示の実施形態によると、ニューロン活性化関数が含まれており、これはいくつかの実施形態において、ニューロン活性化関数を表すためにルックアップ・テーブルを使用する。この特徴は、たとえばシグモイド、ｔａｎｈ、ＲｅＬＵなどの連続的非線形性の離散化モデルの効率的かつ再構成可能な実現を可能にするという点で有利である。いくつかの実施形態において、このシステムは、たとえば一斉送信ネットワークまたはシストリック分配などを用いて、コア内のすべての並列ニューロン回路に活性化を分配する。さらに、好ましい実施形態による本開示は、効率的な三進ベクトル行列乗算のための回路を含む。いくつかの実施形態において、ｍエントリ三進乗算器およびアキュムレータ回路によって、ｍエントリｎビット・ベクトル乗算が行われる。いくつかの実施形態において、ｍエントリｎビット・ベクトル乗算は、累積回路を伴うｍエントリ三進圧縮ベクトル（例、５の重みに対して８ビット）によって直接行われる。
【００１７】
ここで図１を参照すると、本開示の実施形態によるベースライン多コア・ニューラル推論プロセッサ・アーキテクチャが示されている。いくつかの実施形態において、ニューラル・コア１００は軸索入力としてニューラル活性化のベクトルを受信し、入力活性化とシナプス重みを表す行列とを乗算して、ニューラル活性化のベクトルを出力として生成する。いくつかの実施形態において、入力活性化および出力活性化は３２要素ベクトルとして提供される。こうした実施形態において、シナプス重みは１，０２４の重み要素を有する３２×３２行列によって表される。さまざまな実施形態において、重みは二進数、三進数（−１，０，１）、または小さい整数である。いくつかの実施形態においては、図１に示されるとおり、複数のニューラル・コアがチップ上にタイル化されている。
【００１８】
集合において、複数のニューラル推論コア１００がネットワーク・オン・チップ（ＮｏＣ：Ｎｅｔｗｏｒｋ  ｏｎ  Ｃｈｉｐ）１０２によって接続される。図１のコールアウトに示されるとおり、各ニューラル推論コア１００は活性化メモリ１０４と、重みメモリ１０６と、一斉送信バス１０８と、入力活性化レジスタ１１０と、大規模並列ベクトル行列乗算器１１２と、出力活性化レジスタ１１４と、部分和スクラッチ・パッド１１６と、ルーティング・バッファ１１８とを含む。
【００１９】
例示的実施において、ベースライン・コアは次のプロトコルに従って挙動する。
１．初期化の際に、コア活性化メモリに入力活性化が記憶される。
２．ネットワーク・オン・チップ（ＮｏＣ）１０２を通じて各コアに重み値が分配され、重みメモリ１０６に記憶される。
３．活性化メモリ１０４から活性化ブロックＸが読み出され、重みメモリ１０６から重みブロックＷが読み出されて、ベクトル行列乗算器に送信される。
４．ベクトル行列乗算器はベクトル行列積ＸＷを計算し、出力Ｚは部分和レジスタ１１６に記憶される。
５．部分和はルーティング・バッファ１１８を通じて近隣のコアに送信されるか、またはそこから受信されてもよく、次いで他の部分行列乗算結果Ｘ’Ｗ’＝Ｚ’に加算される。
６．最終部分和に活性化関数が適用され、結果Ｙが出力活性化レジスタ１１４に書込まれる。
７．出力活性化Ｙは活性化メモリ１０４に戻って書込まれる。
【００２０】
このやり方で、さまざまなコア構成が計算のための分散論理を提供する。さまざまな実施形態において、複数の分散型ニューラル・コアが並列に活動する。この並列性によって、ニューラル・ネットワーク処理の速度を増加させながら入力の提示と出力の計算との間の待ち時間を減少させることが可能になる。各ニューラル・コアは、所与の問題に対するより大きなニューラル・ネットワーク・モデルの一部を実現する。各ニューラル・コアは全チップ入力の一部分と、全ニューラル・ネットワーク・モデルの一部分とを受信する。このことはチップおよびコアのモジュラリティを可能にすることによって、システム設計、デバッギング、およびテストを効率化する。
【００２１】
本明細書に開示される特定のコア実施は、例示の目的のものであって限定ではなく、本開示の実施形態にはさまざまなコア実施が組み込まれ得ることが当業者に理解されるだろう。
【００２２】
例示的実施において、各ニューロンｊに対して入力活性化ｘｉおよび重みｗｉｊによって次のニューラル・ネットワーク計算が行われ、部分和Ｚｊは次式によって計算され得る。
【００２３】
【数１】
2021519455.tif 000003
【００２４】
次いで、各出力ニューロンｊに対する部分和ｚから出力活性化が計算される。
ｙｊ＝ｆ（ｚｊ）
ここでｆ（ｚ）は非線形活性化関数である。
ｆ（ｚ）に対して、シグモイド関数、ｔａｎｈ（ｘ）、またはより単純な線形整流関数が用いられ得る。
【００２５】
ＧＰＵおよびＡＳＩＣを含むがそれに限定されないニューラル・アクセラレータは、いくつかの乗算累積（ＭＡＣ：ｍｕｌｔｉｐｌｙ−ａｃｃｕｍｕｌａｔｅ）ユニットを通じて分散型乗算加算演算を行ってもよい。しかし、こうしたアーキテクチャは一連の乗算加算演算の実行において固有の逐次的性質を有し、このことは並列性の程度を制限するが、基礎をなすニューラル・ネットワークは基本的に並列の計算であり、大規模並列性を可能にする。したがって、本開示は好ましくは低精度ニューラル・ネットワークを提供し、ここでハードウェアは実質的により多くの（例、桁の）計算を並列に行い得る。特に、本開示は好ましくは、ニューロンを並列に計算するための複数の乗算加算演算を含む大規模並列コンピューティング・エレメントを提供する。
【００２６】
ここで図２を参照すると、ニューロン活性化を算出するための例示的な大規模並列コンピューティング・エレメントが開示されている。例示的実施形態は、低精度ニューロンを有するニューラル推論プロセッサに対する大規模並列ベクトル行列乗算ユニットを含む。コンピュート・ユニット２０２内に、複数の加算器ツリー２０４が提供されている（各加算器ツリーはｎの乗算器からのｎの出力を合計できる）。個々の乗算器が２０６に示されており、ＶＭＭの単一列２０８は、示される（かつ図３によりさらに詳細に説明される）樹状ツリーである。
【００２７】
システムはＸ、すなわちｎ要素の入力活性化行ベクトルを受信する（いくつかの実施形態において、各要素は４ビットであり、ｎ＝３２である）。加えて、システムはＷ、すなわちｎ×ｍの重み行列を受信する（いくつかの実施形態において、各要素は２ビットであり、ｎ＝ｍ＝３２である）。コンピュート・ユニット２０２はｎ×ｍ個の乗算器と、積を組み合わせるための加算器とを有する。それらはすべての乗算を並列に計算し、その結果を並列に加算する（ただし、乗算器の正確な場所は変動でき、図示される特定のアレイに制限されない）。いくつかの実施形態においては、３２×３２＝１０２４の小型乗算器が存在する。結果Ｚ＝ＸＷは、ｍ要素を有するベクトル行列積である。例示的実施形態において、ｍ＝３２であるが、ｍ要素の各々は１０ビットである。
【００２８】
図２のベクトル行列乗算ユニットの出力要素は、図３に示されるとおり、加算器ツリーの続くｎ個の並列乗算器によって計算され得る。具体的には、入力であるｎ要素ベクトルＸおよびＷｊ（行列Ｗの第ｊ列）は、並列方向に構成され得るｎ通りの並列乗算器３０２に分配される。各乗算器は積を計算し、それらの積は加算器ツリー３０４によって加算されて、単一の和になる。加算器ツリーの出力は部分和３０６であり、これがニューロン活性化を算出するために用いられてもよい。以下にさらに示されるとおり、この部分和が活性化関数に提供されてもよく、活性化関数はいくつかの実施形態においてプログラマブルであり、非線形または線形関数、たとえば恒等関数などに設定され得る。
【００２９】
図３の例示的実施形態においては、ｎ個の乗算器と、加算器ツリーとが提供されている。加えて、入力ｎ要素行ベクトルＸおよびＷｊ（行列Ｗの第ｊ列）がｎ個の乗算器に分配され、各乗算器は積を計算し、積は加算器ツリーによって加算されて単一の和となり、出力Ｚｊ＝Σｉｘｉｗｉｊは、Ｚ＝ＸＷの第ｊベクトル要素を表す。いくつかの実施形態において、乗算器は４×２ビット乗算器であり、加算器ツリーはｎ＝３２個の乗算器からの出力を合計し、最終出力は１０ビットである。他の実施形態においては、乗算および加算演算が桁上げ保存加算器を用いて行われることによって、最終出力は２つのベクトル（和ベクトルおよび桁上げベクトル）からなる。最終回答Ｚは、和および桁上げベクトルの加算である。和および桁上げベクトルの最終加算は、樹状ツリーの内側で起こってもよいし、樹状ツリーの外側の後続処理段階によって行われてもよい。
【００３０】
図４に概略的に示される演算に関連して、ベクトル行列乗算器の結果が以前に計算された（部分和）結果に加算される例示的実施形態である。こうした実施形態において、ベクトル行列乗算ユニットの出力結果（部分和ベクトルと呼ばれる）は、前に計算された部分和ベクトルに加算され得る。図４に示されるとおり、部分和レジスタはｍ要素の部分和ベクトルを記憶でき、ｍ個の並列加算器は新たな部分和（Ｚ）と、以前に計算されたもの（Ｖｔ−１）とを加算する。加えて、以前に計算された部分和（Ｖｔ−１）は、コア・ツー・コア通信チャネルによって他のコアから来てもよい。示される実施形態において、部分和ベクトル加算は、ｍ個の並列加算器４０７によって並列に行われる。加えて、ベクトル行列乗算器からの出力が２セットのベクトル（和ベクトルおよび桁上げベクトル）によって表されるとき、さらなる最適化が実現され得る。そのとき、ｍ個の並列加算器は桁上げ保存加算器（浮動小数点乗算加算器と類似のもの）を用いて実現されてもよい。
【００３１】
図５に示されるとおり、活性化関数アレイが開示されており、ここでベクトル行列ユニットからの各出力要素はＺｊ＝Σｉｘｉｗｉｊである。活性化関数ｆを適用して、次のニューロン活性化を得ることができる。Ｙｊ＝ｆ（Σｉｘｉｗｉｊ）。例示的な活性化関数は、バイナリ閾値関数、シグモイド関数、ＲｅＬＵ（整流線形ユニット（Ｒｅｃｔｉｆｉｅｄ  Ｌｉｎｅａｒ  Ｕｎｉｔ））、および線形関数、ならびにルックアップ・テーブル（ＬＵＴ：ｌｏｏｋ−ｕｐ  ｔａｂｌｅ）を用いて可能な任意非線形関数を含む。次に、ｍ個の活性化関数計算機のアレイが実現されて、ベクトル行列ユニットの出力に結合される。これによってｍ個の活性化値が生成され、その各々はｙｊ＝ｆ（Σｉｘｉｗｉｊ）と表され得る。アーキテクチャ設計を簡略化するために、活性化関数の出力（Ｙ）は入力活性化（Ｘ）と同じ精度を有し得る。いくつかの実施形態において、入力活性化および出力活性化はどちらも４ビットである。活性化関数計算機は、ベクトルの精度を低減させるために用いられ得る。部分和ベクトル（Ｚ）は一般的により高精度（１０ビット）であり、一方で出力活性化ベクトル（Ｙ）は低精度（４ビット）である。さまざまな線形および非線形関数が、この精度の低減を達成できる。加えて、例示的実施形態においてｍ＝ｎ＝３２であり、よって入力活性化ベクトルおよび出力活性化ベクトルは同じ長さである。したがって、出力活性化ベクトル（Ｙ）を入力活性化ベクトル（Ｘ）として直ちに用いることができる。
【００３２】
示されるとおり、典型的なニューロン活性化はｎ要素ベクトルＸ、ｎ×ｍ重み行列Ｗを用い、Ｙｊ＝ｆ（Σｉｘｉｗｉｊ）を計算し、ｍ要素出力ベクトルＹを生成する。Ｚｊ＝Σｉｘｉｗｉｊの部分は、乗算器５０４のアレイおよび加算器ツリー５０６のアレイからなるベクトル行列乗算器５０２によって計算される。活性化関数５０８は、ベクトル行列乗算からの出力に並列に適用される。いくつかの実施形態において、ｎ＝ｍ＝３２またはｎ＝ｍ＝６４であり、これによって入力および出力サイズが同一にされる。
【００３３】
図６に概略的に示される演算に関連して、プログラマブル非線形単調活性化関数がテーブル・ルックアップによって実現されている例示的実施形態である。この例示的実施形態において、プログラマブル・テーブル・エントリＴ０、Ｔ１、Ｔ２．．．は、特定の出力値に対する部分和ＰＳの範囲を指定する。
・ｚｊ＜Ｔ０のとき、ｆ＝０
・Ｔ０＜ｚｊ＜Ｔ１のとき、ｆ＝１
・Ｔ１＜ｚｊ＜Ｔ２のとき、ｆ＝２など。
【００３４】
図６に示される実施において、プログラマブル・ルックアップ・テーブルはＴ０、Ｔ１、Ｔ２、．．．を含み、コンパレータのアレイはテーブル・エントリと部分和要素ｚｊとを比較する。セレクタ論理は、コンパレータの結果に依存して関数値出力を選択する。当然のことながら、図６の構成は任意のサイズのルックアップ・テーブルに適用されてもよい。
【００３５】
論理サイズを低減するために、上位ビットのみまたは下位ビットのみの比較が行われ得る。これが有効なのは、出力活性化が制限された精度を有するからである（例、４ビットを有し、ルックアップ・テーブルは１５エントリのみを必要とする）。このことによって、複雑な算術計算ユニットなしに、たとえばシグモイド関数などの任意非線形関数を実施できる。
【００３６】
開示の別の実施形態によると、ベクトル行列乗算はパイプライン処理され、活性化関数回路との複合回路もパイプライン処理される。クロック周波数および論理回路のパフォーマンスを増加させるために、パイプライン処理が行われ得る。ベクトル行列乗算回路は比較的大きい回路であるため、パイプライン処理されるのによく適したターゲットである。
【００３７】
図７Ａ〜Ｂは、一斉送信またはシストリック・パイプラインによって入力活性化の分配を達成している例示的実施形態を示す。中間サイズの回路であるｍ個の樹状ツリーからなるベクトル行列乗算ユニットは、入力をどのように一斉送信するかに関して最適化され得る。加えて、入力活性化を送ることを一斉送信によって達成できる。いくつかの実施形態において、すべての樹状ツリーが一斉に計算を開始し、すべての出力結果が同時に生成される。付加的または代替的に、入力活性化を送ることをシストリック・パイプラインによって行い得る。たとえば、活性化入力はクロック・サイクルごとに１つのラッチから別のものに送られて、異なるクロック・サイクルの樹状ツリーに配信され得る。こうしたシナリオにおいてはいくらかの遅延がもたらされることがあるが、より高速のクロック周波数を提供することによってスループットが改善され得る。
【００３８】
図８に概略的に示される演算に関連して、加算器のバイナリ・ツリーとして加算器ツリーが構成されている例示的実施形態が提供される。本開示の実施形態によると、加算器ツリーはさまざまなやり方で実現され得る。加算器ツリーの例示的実施の１つは、バイナリ・ツリーを用いることである。これは、現行の回路合成ツールを用いて良好に最適化された回路を生成できるという点で有利である。低精度加算器ツリーに対して、このアプローチは十分な結果を提供する。
【００３９】
図９に概略的に示される演算に関連して、桁上げ保存加算器によって加算器ツリーが実現されている例示的実施形態である。桁上げ保存加算器は、短いサイクル時間を有し、３つの入力を受けて入力和と和の等しい２つの出力を生成し、乗算器回路によく用いられるという点で有利である。たとえば、ｓ０およびｃ０がＣＳＡからの２つの出力であるとき、
和ベクトル：ｓ０＝ＣＳＡ−Ｓ（ａ０，ａ１，ａ２）
桁上げベクトル：ｃ０＝ＣＳＡ−Ｃ（ａ０，ａ１，ａ２）
よって、ｓ０＋ｃ０＝ａ０＋ａ１＋ａ２
【００４０】
示される例示的実施形態においては、桁上げ保存加算器によってウォレス（Ｗａｌｌａｃｅ）加算器ツリーが構築され、出力は２つのベクトルであり、それらの和はすべての入力の和と等しい。最終的な総和の結果を得るために、２つの出力ベクトルを最後に通常の加算器で加算する必要がある。最終加算を行う前に予め算出された部分和を加算するための付加的なＣＳＡが存在してもよい。この技術の利点は、単純な加算器ツリーよりも実行時間が短いことである。
【００４１】
いくつかの実施形態において、ｎ×ｍ重み行列Ｗは、可能な値として｛−１，０，１｝のみを有して使用される。４ビット・ニューロンを有する三進重み行列は、好適なトレーニング・アルゴリズムによる高い精度を達成できる。４×４行列の例は次のとおりである。
【００４２】
【数２】
2021519455.tif 000004
【００４３】
図１０Ａ〜Ｂは、マルチプレクサによって三進乗算器が実現されている例示的実施形態を示す。ここでマルチプレクサは、重みが三進値、すなわちｗｉｊ∈｛−１，０，１｝であるときに、乗算器の代替として提供され得る。示される例は、２方向マルチプレクサを用いてｘｉｗｉｊを出力する。
・ｗｉｊ＝１のときにｘｉを出力する
・ｗｉｊ＝−１のときに−ｘｉを出力する
・どちらの制御信号もオンでないとき、出力はデフォルトの０値である。
【００４４】
これは以下のとおり、かつ図１０Ｂに示されるとおりに最適化できる。−ｘｉ（２の補数）の代わりに
【００４５】
【数３】
2021519455.tif 000005
【００４６】
を用いる。
【００４７】
【数４】
2021519455.tif 000006
【００４８】
であるため、どこか他の場所で１を加算する必要がある。もし加算器ツリーに対してＣＳＡツリーが使用されていれば、ＣＳＡのＣＳＡ−Ｃ出力は左に１シフトされるため、この１はよく適合する。加えて、ｗｉｊは２ビット表現［ｂ１ｂ０］で表されてもよい。（１：［０１］、０：［００］、−１：［１０］。）よって、ｂ０およびｂ１がマルチプレクサへの入力として用いられ得る。
【００４９】
開示の別の実施形態によると、重み行列は圧縮形式で記憶されて、要求に応じて復号され得る。ここでは三進重み値が圧縮され得る。なぜなら、三進表現は（２のバイナリ・ビットよりも）少ない情報を有するからである。いくつかの実施形態において、８ビットの二進数は５の三進値を表し得る。たとえば、圧縮された８ビット値ωは、以下の等式を用いて５の三進値ｗ０：４に復号される。
ｗ０＝ω％３−１
ｗ１＝（ω／３）％３−１
ｗ２＝（ω／９）％３−１
ｗ３＝（ω／２７）％３−１
ｗ４＝（ω／８１）％３−１
ここでａ％ｂは、ａをｂで除算した剰余である。
【００５０】
ベクトル行列乗算を行う直前に、圧縮重みの復号が行われる。このことによって、ストレージおよび通信オーバーヘッドが少なくなる（例、５の三進値を表すために１０ビットの代わりに８ビットのみが必要とされる）。当然のことながら、この例示的圧縮アルゴリズムは例示のために提供されたものであり、重み行列圧縮のために他の圧縮アルゴリズムが使用されてもよい。加えて、より良好な圧縮率を達成するために疎行列が圧縮されてもよい。
【００５１】
図１１は、より高精度のベクトル行列乗算を得るためにシフタが使用されている例示的実施形態を示す。場合によっては、ニューラル・ネットワークの評価においてさらに高精度の計算を用いることが望ましい。たとえば、入力活性化データは８ビット値で表されてもよい。８ビットの活性化値ｘは以下によって表され得る。
ｘ［７：０］＝ｘＬ＋（ｘＭ＜＜４）
ここでｘＬは最下位４ビットであり、
ｘＭは最上位４ビットである。
【００５２】
次式によって、ベクトル行列乗算を反復することによってＸＷを計算できる。
ＸＷ＝ＸＬＷ＋ＸＭＷ＜＜４
【００５３】
部分和Ｖｔ−１＝ＸＬＷが計算されて左に４ビット・シフトされ、新たな部分和Ｚ＝ＸＭＷに加算される。シフタのアレイは、部分和レジスタから加算器アレイへの経路において、シフトされた部分和を新たなベクトル行列乗算結果に加算するために使用され得る。
【００５４】
したがって、要素ごとに乗算加算を適用して順次計算するいくつかのベクトル行列乗算器が存在する。好ましい実施形態によると、本開示は低精度ベクトル乗算に対処するものであり、低精度ベクトル乗算に対して並列アーキテクチャを実現して、全ベクトル乗算を一斉に計算できる。したがって、本明細書に開示される新規の並列態様は、先行技術を超えて特に有利である。
【００５５】
さまざまな実施形態において、図５に示される回路は、図１２に示されるとおりのｍ個の回路を含む。具体的には、入力であるｎ要素ベクトルＸおよびＷｊ（行列Ｗの第ｊ列）は、並列方向に構成され得るｎ個の乗算器１２０２に分配される。各乗算器は積を計算し、それらの積は加算器ツリー１２０４によって加算されて、単一の和になる。加算器ツリーの出力は活性化関数１２０６に向かい、ニューロン活性化を生成する。いくつかの実施形態において、この関数はプログラマブルであり、非線形または線形関数、たとえば恒等関数などに設定され得る。
【００５６】
開示の実施形態によると、提供されるシステムおよび方法はベクトル乗算を計算し、その後に非線形または線形活性化関数が続き得る。特に、本開示の実施形態はニューラル活性化の計算を提供する。加えて、本開示の実施形態はニューラル・ネットワーク（ＮＮ：ｎｅｕｒａｌ  ｎｅｔｗｏｒｋｓ）における「プール」演算を提供し、これは必須かつ時間のかかるものである。さらに、本開示の実施形態はニューラル・ネットワーク（ＮＮ）推論におけるデータ・シャッフル演算を提供する。これらの計算は、上述の樹状ツリー回路を拡張することによって達成される。
【００５７】
図１３に概略的に示される演算に関連して、例示的なデータ・シャッフル演算が示されている。たとえば、バタフライ置換は次のとおりに提供される：入力ベクトルＸ＝（０１２３）について、置換出力結果はＹ＝（１０３２）である。いくつかの実施形態において、シャッフル演算は、活性化関数を恒等関数（ｉｄ（ｘ）＝ｘ）に設定し、重み行列Ｗを置換行列に設定することによって実施され得る。たとえば、行および列における１つの要素だけが１であり、その他すべての要素は０である。例示的なバタフライ・ネットワークの実施が図１４Ａに示されている。図１４Ａに示される行列Ｗによって行列乗算演算が行われるとき、入力ベクトルＸ＝（０，１，２，３）は置換されて出力ベクトルＹ＝（１，０，３，２）となる。次数２の例示的なバタフライ・ネットワークが図１４Ｂに示されている。図１４Ｂに示される行列Ｗによって行列乗算演算が行われるとき、入力ベクトルＸ＝（０，１，２，３）は置換されて出力ベクトルＹ＝（２，３，０，１）となる。
【００５８】
図１５に概略的に示される演算に関連して、本開示の実施形態による、複数のベクトルからのデータがパックされて単一ベクトルになる例示的実施形態が提供される。この特徴は、テンソル・ダウンサンプリングに対して特に有用であり得る。限定ではなく例示の目的で、ベクトルＸＡ＝（０１２３）およびＸＢ＝（４５６７）の値を交互に選ぶことによってパックして、単一のベクトルＹ＝（０２４６）とする。この例示的実施形態において、以下のベクトル行列乗算ユニット１５０２が使用され、活性化関数は恒等関数（ｉｄ（ｘ）＝ｘ）に設定される。
・第１に、Ｚ＝ＸＡＷ０、およびＶ＝Ｚ＋０を行う
【００５９】
【数５】
2021519455.tif 000007
【００６０】
・第２に、Ｖ＝Ｖ＋ＸＢＷ１を行う
【００６１】
【数６】
2021519455.tif 000008
【００６２】
ベクトル・レジスタは、以前に計算された部分和（Ｖ１）を保持している。この部分和が加算器１５０４のアレイにフィードバックされ、アレイは次いで新たな部分和（ＸＢＷ１）を加算する。図１５の右側に示されるデータの流れは、加算器のアレイ、レジスタ、フィードバック経路、および恒等関数に設定された活性化関数１５０６のアレイからなる。
【００６３】
図１６に概略的に示される演算に関連して、本開示の実施形態による、ベクトル行列乗算ユニットを用いて最大プール演算が行われる例示的実施形態が提供される。この特徴は、ニューラル・ネットワークにおいて大きい画像をより小さいサイズに縮小するために特に有用であり得る。限定ではなく例示の目的で、ＸＡ＝（０３２１）、ＸＢ＝（３１２２）、ＸＣ＝（４０１０）、およびＸＤ＝（０１４０）に対して２ｘ２最大（ｍａｘ）プールが行われる。示される例示的実施形態において、要素ごとの最大値が使用されてＹ＝（４３４２）が得られる。この例示的実施形態において、ベクトル行列乗算ユニットは次のとおりに使用され得る。
・活性化関数を恒等関数に設定する。
【００６４】
【数７】
2021519455.tif 000009
【００６５】
・フィードバック経路を用いて、要素ごとの最大値演算を用いて現行の部分和（Ｚ）と以前に計算された部分和（Ｖ）とを組み合わせる。
・これらの演算は次のとおりに記載されてもよい。
１．Ｖ＝ｍａｘ（ＸＡＷｉｄ，０）
２．Ｖ＝ｍａｘ（ＸＢＷｉｄ，Ｖ）
３．Ｖ＝ｍａｘ（ＸＣＷｉｄ，Ｖ）
４．Ｖ＝ｍａｘ（ＸＤＷｉｄ，Ｖ）
５．Ｙ＝ｉｄ（Ｖｔ−１）
【００６６】
図１７に概略的に示される演算に関連して、本開示の実施形態による、ベクトル行列乗算ユニットを用いて平均プール演算が行われる例示的実施形態が提供される。この特徴も、ニューラル・ネットワークにおいて大きい画像をより小さいサイズに縮小するために特に有用であり得る。限定ではなく例示の目的で、ＸＡ＝（０３２１）、ＸＢ＝（３１２２）、ＸＣ＝（４０１０）、およびＸＤ＝（１０３１）に対して２ｘ２平均プールが行われる。要素ごとの平均を取って、Ｙ＝（２１２１）を得る。この例示的実施形態において、ベクトル行列乗算ユニットは次のとおりに使用され得る。
・活性化関数を１／４の乗算に設定する
・恒等行列Ｗｉｄを用いる
・フィードバック経路を用いて、以前に計算された部分和（Ｖ）を新たなベクトル行列積（Ｚ＝ＸＷ）に単純に加算する。
・式においては、以下が行われる。
１．Ｖ＝ＸＡＷｉｄ＋０
２．Ｖ＝ＸＢＷｉｄ＋Ｖ
３．Ｖ＝ＸＣＷｉｄ＋Ｖ
４．Ｖ＝ＸＤＷｉｄ＋Ｖ
５．Ｙ＝（Ｖ＊１／４）
【００６７】
図１８に概略的に示される演算に関連して、ベクトル行列乗算ユニットを用いて要素ごとの乗算演算が行われる例示的実施形態が提供される。この特徴は、たとえば長・短期記憶（ＬＳＴＭ：Ｌｏｎｇ  Ｓｈｏｒｔ−Ｔｅｒｍ  Ｍｅｍｏｒｙ）などのいくつかのニューラル・ネットワークにおいて重要である。限定ではなく例示の目的で、ＸＡ＝（０３２１）およびＸＢ＝（３１２２）に対して要素ごとの乗算演算が行われ、その結果としてＹ＝（０９４２）が得られる。この例示的実施形態において、ベクトル行列乗算ユニットは次のとおりに使用され得る。
・活性化関数を恒等関数に設定する
・恒等行列Ｗｉｄを用いる
・乗算器ユニットのアレイによってフィードバックが組み合わされて、以前に計算された部分和（Ｖ）と、新たなベクトル行列積（Ｚ＝ＸＷ）との積が計算される。
・式においては、以下が行われる。
１．Ｖ＝ＸＡＷｉｄ＊１
２．Ｖ＝ＸＢＷｉｄ＊Ｖ
３．Ｙ＝ｉｄ（Ｖ）
【００６８】
図１９に概略的に示される演算に関連して、以前の部分和と複数の要素ごとの演算とを組み合わせるためのプログラマブル演算である例示的実施形態が提供される。限定ではなく例示の目的で、ベクトル・ユニットは、たとえば加算（Ａｄｄ）、最大（Ｍａｘ）、乗算（Ｍｕｌｔｉｐｌｙ）、シフト（Ｓｈｉｆｔ）、バイパス（Ｂｙｐａｓｓ）などの要素ごとの関数を行い得る。付加的または代替的に、これらの関数は、以下を含む（１つの入力に対する）シフトとともに提供され得る。
・ａｄｄ（ｓｈｉｆｔ（Ａ），Ｂ）、ｍａｘ（ｓｈｉｆｔ（Ａ），Ｂ）、ｍｕｌｔ（ｓｈｉｆｔ（Ａ），Ｂ）、ｓｈｉｆｔ（Ａ）
・ＳＩＭＤ（単一命令多重データ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ，Ｍｕｌｔｉｐｌｅ  Ｄａｔａ））演算
・ベクトル・ユニットに対するすべての入力に同じ演算が並列に適用される
・ベクトル・ユニットは各サイクルに任意の演算を行うようにプログラマブルである
【００６９】
したがって、ベクトル・ユニットは複数の選択可能な要素ごとのオペレータを有し、入力経路は選択可能なシフト・オペレータを有する。
【００７０】
したがって、本開示の実施形態は、プログラマブルな要素ごとのオペレータおよび要素ごとのシフト・オペレータを有するベクトル行列乗算ユニットを含むデバイスを提供する。いくつかの実施形態において、データ論理はパイプライン処理される。
【００７１】
図２０を参照すると、本開示の実施形態によるニューラル処理コアを動作するための方法が示されている。２００１において、乗算器の複数の等サイズのグループが、複数の重みを複数の入力活性化に並列に適用して、乗算器の各グループに対する複数の出力を生成する。２００２において、乗算器の各グループからの複数の出力が並列に加算されて、乗算器の各グループからの部分和が生成される。いくつかの実施形態においては、２００３において、部分和に関数が並列に適用されて、複数の出力値が生成される。いくつかの実施形態において、部分和に適用される関数はベクトル加算、乗算、シフト、および最大演算を含み、これらの演算は複合部分和を生成するために用いられる。示されるとおり、いくつかの実施形態においては、次いで２００１において付加的な部分和が計算されてもよい。２００４において、部分和に活性化関数が並列に適用されて、複数の出力活性化が生成される。
【００７２】
ここで図２１を参照すると、コンピューティング・ノードの例の概略図が示されている。コンピューティング・ノード１０は好適なコンピューティング・ノードの単なる一例であり、本明細書に記載される実施形態の使用または機能の範囲に関するいかなる限定を示唆することも意図されていない。それにかかわらず、コンピューティング・ノード１０は本明細書の上記に示される任意の機能の実現もしくは実行またはその両方が可能である。
【００７３】
コンピューティング・ノード１０内にはコンピュータ・システム／サーバ１２が存在し、これは多数のその他の汎用目的または特定目的のコンピュータ・システム環境または構成とともに動作する。コンピュータ・システム／サーバ１２との使用に適し得る周知のコンピュータ・システム、環境、もしくは構成、またはその組み合わせの例は、パーソナル・コンピュータ・システム、サーバ・コンピュータ・システム、シン・クライアント、シック・クライアント、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサ・システム、マイクロプロセッサ・ベースのシステム、セット・トップ・ボックス、プログラマブル家電機器、ネットワークＰＣ、ミニコンピュータ・システム、メインフレーム・コンピュータ・システム、および上記のシステムまたはデバイスのいずれかを含む分散型クラウド・コンピューティング環境などを含むが、それらに限定されない。
【００７４】
コンピュータ・システム／サーバ１２は、コンピュータ・システムによって実行されるたとえばプログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的なコンテキストで記載されてもよい。一般的にプログラム・モジュールは、特定のタスクを行うか、または特定の抽象データ型を実現するルーチン、プログラム、オブジェクト、コンポーネント、論理、およびデータ構造などを含んでもよい。コンピュータ・システム／サーバ１２は、通信ネットワークを通じてリンクされたリモート処理デバイスによってタスクが行われる分散型クラウド・コンピューティング環境において実施されてもよい。分散型クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含むローカルおよびリモート・コンピュータ・システム・ストレージ媒体の両方に位置してもよい。
【００７５】
図２１に示されるとおり、コンピューティング・ノード１０内のコンピュータ・システム／サーバ１２は、汎用目的のコンピュータ・デバイスの形で示されている。コンピュータ・システム／サーバ１２のコンポーネントは、１つ以上のプロセッサまたは処理ユニット１６、システム・メモリ２８、およびシステム・メモリ２８を含むさまざまなシステム・コンポーネントをプロセッサ１６に結合するバス１８を含んでもよいが、それに限定されない。
【００７６】
バス１８は、メモリ・バスまたはメモリ・コントローラ、周辺装置用バス、アクセラレーテッド・グラフィクス・ポート、およびさまざまなバス・アーキテクチャのいずれかを用いたプロセッサまたはローカル・バスを含むいくつかのタイプのバス構造のいずれか１つ以上を表す。限定ではなく例として、こうしたアーキテクチャはインダストリ・スタンダード・アーキテクチャ（ＩＳＡ：Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、マイクロ・チャネル・アーキテクチャ（ＭＣＡ：Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、拡張ＩＳＡ（ＥＩＳＡ：Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ビデオ・エレクトロニクス・スタンダーズ・アソシエーション（ＶＥＳＡ：Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカル・バス、ペリフェラル・コンポーネント・インターコネクト（ＰＣＩ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、ペリフェラル・コンポーネント・インターコネクト・エクスプレス（ＰＣＩｅ：Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ）、およびアドバンスト・マイクロコントローラ・バス・アーキテクチャ（ＡＭＢＡ：Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏｃｏｎｔｒｏｌｌｅｒ  Ｂｕｓ  Ａｒｃｈｉｔｅｃｔｕｒｅ）を含む。
【００７７】
コンピュータ・システム／サーバ１２は通常、さまざまなコンピュータ・システム可読媒体を含む。こうした媒体はコンピュータ・システム／サーバ１２によってアクセス可能な任意の利用可能な媒体であってもよく、それは揮発性および不揮発性媒体、取り外し可能および取り外し不可能な媒体の両方を含む。
【００７８】
システム・メモリ２８は、たとえばランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）３０もしくはキャッシュ・メモリ３２またはその両方などの、揮発性メモリの形のコンピュータ・システム可読媒体を含み得る。コンピュータ・システム／サーバ１２はさらに、他の取り外し可能／取り外し不可能な揮発性／不揮発性コンピュータ・システム・ストレージ媒体を含んでもよい。単なる例として、取り外し不可能な不揮発性磁気媒体（図示されず、通常「ハード・ドライブ」と呼ばれる）からの読取りおよびそこへの書込みのために、ストレージ・システム３４が提供され得る。図示されていないが、取り外し可能な不揮発性磁気ディスク（例、「フレキシブル・ディスク」）からの読取りおよびそこへの書込みのための磁気ディスク・ドライブ、およびたとえばＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはその他の光媒体などの取り外し可能な不揮発性光ディスクからの読取りまたはそこへの書込みのための光ディスク・ドライブが提供され得る。こうした場合には、各々が１つ以上のデータ媒体インターフェースによってバス１８に接続され得る。以下にさらに示されて説明されるように、メモリ２８は、この開示の実施形態の機能を行うように構成されたプログラム・モジュールのセット（例えば少なくとも１つ）を有する少なくとも１つのプログラム製品を含んでもよい。
【００７９】
プログラム・モジュール４２のセット（少なくとも１つ）を有するプログラム／ユーティリティ４０は、限定ではなく例としてメモリ２８に記憶されてもよく、加えてオペレーティング・システム、１つ以上のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データに記憶されてもよい。オペレーティング・システム、１つ以上のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データ、またはその何らかの組み合わせの各々は、ネットワーク形成環境の実現を含んでもよい。プログラム・モジュール４２は一般に、本明細書に記載される実施形態の機能もしくは方法またはその両方を実行する。
【００８０】
加えてコンピュータ・システム／サーバ１２は、たとえばキーボード、ポインティング・デバイス、ディスプレイ２４などの１つ以上の外部デバイス１４か、ユーザがコンピュータ・システム／サーバ１２と対話することを可能にする１つ以上のデバイスか、もしくはコンピュータ・システム／サーバ１２が１つ以上の他のコンピュータ・デバイスと通信することを可能にする任意のデバイス（例、ネットワーク・カード、モデムなど）か、またはその組み合わせと通信してもよい。こうした通信は、入力／出力（Ｉ／Ｏ：Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）インターフェース２２を介して起こり得る。さらに、コンピュータ・システム／サーバ１２はネットワーク・アダプタ２０を介して、たとえばローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）、一般的な広域ネットワーク（ＷＡＮ：ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ）、もしくは公共ネットワーク（例、インターネット）、またはその組み合わせなどの１つ以上のネットワークと通信し得る。示されるとおり、ネットワーク・アダプタ２０はバス１８を介して、コンピュータ・システム／サーバ１２のその他のコンポーネントと通信する。図示されていないが、コンピュータ・システム／サーバ１２とともに他のハードウェアもしくはソフトウェア・コンポーネントまたはその両方が用いられ得ることが理解されるべきである。その例はマイクロコード、デバイス・ドライバ、冗長処理ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイバル・ストレージ・システムなどを含むが、それに限定されない。
【００８１】
さまざまな実施形態において、１つ以上のニューロシナプス・コア（図示せず）がバス１８に結合される。こうした実施形態において、ニューロシナプス・コアはバス１８を介してメモリ２８からデータを受信するか、またはそこにデータを書き込んでもよい。同様に、本明細書に記載されるとおり、ニューロシナプス・コアはバス１８を介して他のコンポーネントと対話してもよい。さまざまな実施形態において、ニューロシナプス・コアは、たとえば本明細書の他の場所に示されるとおりの１つ以上のローカル・コントローラ、メモリ、またはクロックなどを含んでもよい。
【００８２】
本開示は、システム、方法、もしくはコンピュータ・プログラム製品、またはその組み合わせを含んでもよい。コンピュータ・プログラム製品は、プロセッサに本開示の態様を行わせるためのコンピュータ可読プログラム命令を有するコンピュータ可読ストレージ媒体（または複数の媒体）を含んでもよい。
【００８３】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および記憶できる有形デバイスであり得る。コンピュータ可読ストレージ媒体は、たとえば電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または前述の任意の好適な組み合わせなどであってもよいが、それに限定されない。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的リストは以下を含む。ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラマブル・リード・オンリ・メモリ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：ｓｔａｔｉｃ  ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、ポータブル・コンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、デジタル多用途ディスク（ＤＶＤ：ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｋ）、メモリ・スティック、フレキシブル・ディスク、機械的に符号化されたデバイス、たとえばパンチ・カードまたは記録された命令を有する溝の中の隆起構造など、および前述の任意の好適な組み合わせ。本明細書において用いられるコンピュータ可読ストレージ媒体は、たとえば電波もしくはその他の自由に伝播する電磁波、導波路もしくはその他の伝送媒体を通じて伝播する電磁波（例、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通じて伝送される電気信号など、それ自体が一時的信号であると解釈されるべきではない。
【００８４】
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体からそれぞれのコンピュータ／処理デバイスにダウンロードされ得るか、またはたとえばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、もしくはワイヤレス・ネットワーク、またはその組み合わせなどのネットワークを介して外部コンピュータまたは外部ストレージ・デバイスにダウンロードされ得る。ネットワークは銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、もしくはエッジ・サーバ、またはその組み合わせを含んでもよい。各コンピュータ／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信して、そのコンピュータ可読プログラム命令をそれぞれのコンピュータ／処理デバイス内のコンピュータ可読ストレージ媒体に記憶するために転送する。
【００８５】
本開示の動作を実行するためのコンピュータ可読プログラム命令はアセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：ｉｎｓｔｒｕｃｔｉｏｎ−ｓｅｔ−ａｒｃｈｉｔｅｃｔｕｒｅ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、または１つ以上のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードであってもよく、このプログラミング言語はオブジェクト指向プログラミング言語、たとえばＳｍａｌｌｔａｌｋ、またはＣ＋＋など、および従来の手続き型プログラミング言語、たとえば「Ｃ」プログラミング言語または類似のプログラミング言語などを含む。コンピュータ可読プログラム命令は、すべてがユーザのコンピュータで実行されてもよいし、スタンド・アロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータで実行されてもよいし、一部がユーザのコンピュータで、一部がリモート・コンピュータで実行されてもよいし、すべてがリモート・コンピュータまたはサーバで実行されてもよい。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通じてユーザのコンピュータに接続されてもよいし、（たとえば、インターネット・サービス・プロバイダを用いてインターネットを通じて）外部コンピュータへの接続が行われてもよい。いくつかの実施形態において、たとえばプログラマブル論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ：ｆｉｅｌｄ−ｐｒｏｇｒａｍｍａｂｌｅ  ｇａｔｅ  ａｒｒａｙｓ）、またはプログラマブル論理アレイ（ＰＬＡ：ｐｒｏｇｒａｍｍａｂｌｅ  ｌｏｇｉｃ  ａｒｒａｙｓ）などを含む電子回路は、本開示の態様を行うために電子回路をパーソナライズするためのコンピュータ可読プログラム命令の状態情報を使用することによって、コンピュータ可読プログラム命令を実行してもよい。
【００８６】
本明細書においては、開示の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図もしくはブロック図またはその両方を参照して、本開示の態様を説明している。流れ図もしくはブロック図またはその両方の各ブロック、および流れ図もしくはブロック図またはその両方におけるブロックの組み合わせは、コンピュータ可読プログラム命令によって実現され得ることが理解されるだろう。
【００８７】
これらのコンピュータ可読プログラム命令は、汎用目的コンピュータ、特定目的コンピュータ、またはマシンを生成するためのその他のプログラマブル・データ処理装置のプロセッサに提供されてもよく、それによって、そのコンピュータまたはその他のプログラマブル・データ処理装置のプロセッサを介して実行される命令は、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定される機能／動作を実現するための手段を生じる。これらのコンピュータ可読プログラム命令は、コンピュータ、プログラマブル・データ処理装置、もしくはその他のデバイスまたはその組み合わせに特定の方式で機能するように指示できるコンピュータ可読ストレージ媒体にも記憶されてもよく、それによって、命令が記憶されたコンピュータ可読ストレージ媒体は、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定される機能／動作の態様を実現する命令を含む製造物を含む。
【００８８】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイスにもロードされて、コンピュータに実現されるプロセスを生成するためにコンピュータ、他のプログラマブル装置、または他のデバイスにおいて一連の動作ステップを行わせることによって、そのコンピュータ、他のプログラマブル装置、または他のデバイスにおいて実行される命令が、流れ図もしくはブロック図またはその両方の単数または複数のブロックにおいて指定される機能／動作を実現してもよい。
【００８９】
図面における流れ図およびブロック図は、本開示のさまざまな実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施のアーキテクチャ、機能、および動作を説明するものである。これに関して、流れ図またはブロック図の各ブロックは、指定される論理機能（単数または複数）を実現するための１つ以上の実行可能命令を含むモジュール、セグメント、または命令の一部を表してもよい。いくつかの代替的実施において、ブロック内に示される機能は、図面に示されるものとは異なる順序で起こってもよい。たとえば、連続して示される２つのブロックは、実際には実質的に同時に実行されてもよいし、関与する機能によってはこれらのブロックがときに逆の順序で実行されてもよい。加えて、ブロック図もしくは流れ図またはその両方の各ブロック、およびブロック図もしくは流れ図またはその両方のブロックの組み合わせは、指定された機能または動作を行うか、特定目的のハードウェアおよびコンピュータ命令の組み合わせを実行する特定目的のハードウェア・ベースのシステムによって実現され得ることに留意されたい。
【００９０】
本開示のさまざまな実施形態の説明は例示の目的のために提供されたものであるが、開示された実施形態に対して網羅的または限定的になることは意図されていない。記載される実施形態の範囲および趣旨から逸脱することなく、多くの修正および変形が当業者に明らかになるだろう。本明細書において用いられる用語は、実施形態の原理、実際の適用、もしくは市場に見出される技術に対する技術的改善点を最もよく説明するため、または他の当業者が本明細書に開示される実施形態を理解できるようにするために選択されたものである。
【図１】
2021519455.tif 000010
【図２】
2021519455.tif 000011
【図３】
2021519455.tif 000012
【図４】
2021519455.tif 000013
【図５】
2021519455.tif 000014
【図６】
2021519455.tif 000015
【図７】
2021519455.tif 000016
【図８】
2021519455.tif 000017
【図９】
2021519455.tif 000018
【図１０】
2021519455.tif 000019
【図１１】
2021519455.tif 000020
【図１２】
2021519455.tif 000021
【図１３】
2021519455.tif 000022
【図１４】
2021519455.tif 000023
【図１５】
2021519455.tif 000024
【図１６】
2021519455.tif 000025
【図１７】
2021519455.tif 000026
【図１８】
2021519455.tif 000027
【図１９】
2021519455.tif 000028
【図２０】
2021519455.tif 000029
【図２１】
2021519455.tif 000030
【手続補正書】
【提出日】令和2年10月8日(2020.10.8)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の等サイズのグループに配置され、各々が入力活性化に重みを並列に適用して出力を生成するように適合される、複数の乗算器と、
各々が前記乗算器のグループの１つに動作的に結合され、各々が自身の関連するグループ内の前記乗算器の前記出力を並列に加算して部分和を生成するように適合される、複数の加算器と
を含む、システム。
【請求項２】
複数の関数ブロックをさらに含み、前記複数の関数ブロックの各々は、前記複数の加算器の１つに動作的に結合され、ならびに自身の関連する加算器の前記部分和に関数を並列に適用して出力値を生成するように適合される、請求項１に記載のシステム。
【請求項３】
重みの行列と、活性化のベクトルとを受信するように適合された、請求項１に記載のシステム。
【請求項４】
前記複数の加算器の各々は加算器のツリーを含む、請求項１に記載のシステム。
【請求項５】
前記加算器のツリーはバイナリ・ツリーである、請求項４に記載のシステム。
【請求項６】
前記加算器のツリーは複数の桁上げ保存加算器を含む、請求項４に記載のシステム。
【請求項７】
前記活性化のベクトルの各活性化は、前記乗算器のグループのすべてに一斉送信される、請求項３に記載のシステム。
【請求項８】
前記乗算器のグループの各々に動作的に結合されたシストリック・パイプラインをさらに含む、請求項３に記載のシステム。
【請求項９】
前記乗算器のグループはパイプライン処理される、請求項１に記載のシステム。
【請求項１０】
前記重みは平衡三進数である、請求項１に記載のシステム。
【請求項１１】
前記複数の乗算器の各々はマルチプレクサを含む、請求項１に記載のシステム。
【請求項１２】
前記重みの行列は圧縮され、前記システムは前記圧縮された重みの行列を展開するように適合される、請求項３に記載のシステム。
【請求項１３】
前記複数の関数ブロックは、前記出力値と、後で計算される出力値とを組み合わせるように適合される、請求項２に記載のシステム。
【請求項１４】
複数のシフタをさらに含み、各シフタは前記関数ブロックの１つに動作的に接続され、各シフタは自身の対応する関数ブロックの前記出力値を並列にシフトするように適合され、
前記複数の関数ブロックは、前記シフトされた値と、後で計算される出力値とを組み合わせるように適合される、請求項２に記載のシステム。
【請求項１５】
各々の前記関数ブロックの前記関数は活性化関数またはプログラマブルである、請求項２に記載のシステム。
【請求項１６】
各々の前記関数ブロックの前記関数は加算または乗算、若しくは恒等関数である、請求項２に記載のシステム。
【請求項１７】
ルックアップ・テーブルをさらに含み、各々の前記活性化関数ブロックの前記関数は、前記ルックアップ・テーブルからのルックアップを含む、請求項２に記載のシステム。
【請求項１８】
前記ルックアップ・テーブルはプログラマブルである、請求項１７に記載のシステム。
【請求項１９】
各々の前記関数ブロックの前記関数は最大関数または最小関数である、請求項２に記載のシステム。
【請求項２０】
前記関数ブロックに動作的に結合され、ならびに前記関数ブロックの前記出力値を記憶するように適合される、ベクトル・レジスタと、
各々が前記ベクトル・レジスタに動作的に結合され、各々が前記記憶された出力値に関数を並列に適用するように適合される、第２の複数の関数ブロックと
をさらに含む、請求項２に記載のシステム。
【請求項２１】
請求項１から２０のいずれか１項に記載のシステムを実行するための命令を含む、記憶媒体。
【国際調査報告】
2021519455.tif 000031
2021519455.tif 000032