(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-06-28
(54)【発明の名称】ニューラルネットワークアクセラレータ
(51)【国際特許分類】
G06N 3/065 20230101AFI20240621BHJP
【FI】
G06N3/065
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023579442
(86)(22)【出願日】2021-11-25
(85)【翻訳文提出日】2024-02-21
(86)【国際出願番号】 IB2021060991
(87)【国際公開番号】W WO2023275610
(87)【国際公開日】2023-01-05
(32)【優先日】2021-06-28
(33)【優先権主張国・地域又は機関】EP
(81)【指定国・地域】
(71)【出願人】
【識別番号】523481115
【氏名又は名称】シンタラ アーゲー
【氏名又は名称原語表記】SYNTHARA AG
【住所又は居所原語表記】Josefstrasse 219 Zurich SWITZERLAND
(74)【代理人】
【識別番号】100134430
【氏名又は名称】加藤 卓士
(72)【発明者】
【氏名】マヌ ヴィジャヤゴパラン・ナイール
(57)【要約】
コンピューティングエレメントアレイシステムは、複数のコネクションによって接続されたコンピューティングエレメントのアレイを含む。各コンピューティングエレメントは、制御回路、記憶回路、および演算回路を有し、コネクションはそれぞれ2つのコンピューティングエレメントを接続する。記憶回路は、データ値とターゲットタグを含むデータパケットを接続の1つから入力し、記憶する。演算回路は、データ値に対して演算を実行し、処理されたデータ値を生成する。ターゲットタグは、データ値に対して演算を実行するコンピューティングエレメントを特定する。制御回路は、ターゲットタグからコンピューティングエレメントを識別し、識別されたコンピューティングエレメントがコンピューティングエレメントと一致する場合に、演算回路がデータ値を処理する。処理データ値を含むようにデータパケットを修正し、修正データパケットをコネクションで出力する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
複数のコネクションによって接続された複数のコンピューティングエレメントを含むコンピューティングエレメントアレイを備えたコンピューティングエレメントアレイシステムであって、
各コンピューティングエレメントは、制御回路、記憶回路、および演算回路を備え、
前記複数のコネクションはそれぞれ、2つの前記コンピューティングエレメントを接続し
前記コンピューティングエレメントアレイ内の各コンピューティングエレメントにおいて、
前記記憶回路は、データ値とターゲットタグとを含むデータパケットを前記複数のコネクションの1つから入力し、前記データパケットを記憶するように動作可能であり、
前記演算回路は、前記データ値に対して演算を実行し、処理データ値を生成するように動作可能であり、
前記ターゲットタグは、前記データ値に対して演算を実行すべきコンピューティングエレメントを指定し、
前記制御回路は、前記コンピューティングエレメントが前記ターゲットタグによって指定されているか判定し、前記ターゲットタグによって指定された前記コンピューティングエレメントにおいては、前記演算回路が前記データ値に演算を実行できるようにし、前記処理データ値を含むように前記データパケットを修正し、前記複数のコネクションの1つに修正データパケットを出力できるように動作するコンピューティングエレメントアレイシステム。
【請求項2】
前記ターゲットタグは、ルーティング値順序リストに含まれた1つ以上のルーティング値を備えた請求項1記載のコンピューティングエレメントアレイシステム。
【請求項3】
前記制御回路は、前記ルーティング値順序リスト内の前記ルーティング値を変更するように動作可能である請求項2に記載のコンピューティングエレメントアレイシステム。
【請求項4】
前記制御回路が、前記ルーティング値順序リストから1つのルーティング値を削除するように動作可能であるか、
または、
前記ルーティング値順序リストが、ルーティング値リストポインタを含み、前記制御回路が、前記ルーティング値リストポインタを変更するように動作可能である、請求項3に記載のコンピューティングエレメントアレイシステム。
【請求項5】
前記ルーティング値の少なくとも1つは、前記コンピューティングエレメントを特定するノールート値であり、前記制御回路は、前記ノールート値でコンピューティングエレメントを特定する請求項2~4のいずれか1項に記載のコンピューティングエレメントアレイシステム。
【請求項6】
前記コンピューティングエレメントは、該コンピューティングエレメントを記述するセルフタグを含み、
前記ターゲットタグは、1つ以上のコンピューティングエレメント特定情報を含み、
前記制御回路は、前記コンピューティングエレメント特定情報と前記セルフタグとを比較することにより前記コンピューティングエレメントを識別する請求項2~5のいずれか1項に記載のコンピューティングエレメントアレイシステム。
【請求項7】
前記1つ以上のコンピューティングエレメント特定情報は、前記コンピューティングエレメントまたは前記コンピューティングエレメントのオペレーションを識別する請求項6に記載のコンピューティングエレメントアレイシステム。
【請求項8】
前記コンピューティングエレメント特定情報は、コンピューティングエレメント順序リストに含まれ、前記制御回路がコンピューティングエレメント順序リストに含まれるコンピューティングエレメント特定情報を修正するように動作可能である請求項6または7に記載のコンピューティングエレメントアレイシステム。
【請求項9】
前記制御回路が、前記コンピューティングエレメント順序リストから1つのコンピューティングエレメントを削除するように動作可能か、または、
前記コンピューティングエレメント順序リストがコンピューティングエレメントリストポインタを含み、前記制御回路が、前記コンピューティングエレメントリストポインタを変更するように動作可能である請求項7または8に記載のコンピューティングエレメントアレイシステム。
【請求項10】
前記制御回路は、前記ターゲットタグを修正して、前記コンピューティングエレメント順序リストにエンドタグを提供するように動作可能である請求項1~9のいずれか1項に記載のコンピューティングエレメントアレイシステム。
【請求項11】
前記ターゲットタグは、前記データ値に対して順次演算を実行する複数の前記コンピューティングエレメントを指定する、請求項1~10のいずれか1項に記載のコンピューティングエレメントアレイシステム。
【請求項12】
アレイが、2次元グリッド、2次元アレイ、3次元グリッド、3次元アレイ、トーラス、またはリングである、請求項1~11のいずれか1項に記載のコンピューティングエレメントアレイシステム。
【請求項13】
前記複数のコンピューティングエレメントの少なくとも1つに接続されたデータ制御回路をさらに備え、
前記データ制御回路は、前記コンピューティングエレメントアレイの外部からデータパケットを受信し、前記コンピューティングエレメントアレイの外部にデータパケットを送信するように動作可能である請求項1~12のいずれか1項に記載のコンピューティングエレメントアレイシステム。
【請求項14】
前記データ制御回路は、前記コネクションの1つを介して前記コンピューティングエレメントの少なくとも1つに接続されるか、または、
前記データ制御回路は、バスを介して前記コンピューティングエレメントの少なくとも1つに接続される請求項13に記載のコンピューティングエレメントアレイシステム。
【請求項15】
前記データ制御回路は、前記コンピューティングエレメントアレイからデータパケットを受信し、前記データパケットを前記コンピューティングエレメントアレイに返すように動作可能である請求項13または14に記載のコンピューティングエレメントアレイシステム。
【請求項16】
前記データ制御回路が、前記コンピューティングエレメントの少なくとも1つに接続されている請求項13~15のいずれか1項に記載のコンピューティングエレメントアレイシステム。
【請求項17】
前記データ制御回路が前記コンピューティングエレメントから受信したデータパケットは、エンドタグまたはノールート値を含み、前記データ制御回路は、データ値をコンピューティングエレメントアレイの外部に送信するように動作可能である請求項13~16のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項18】
前記データ制御回路が前記コンピューティングエレメントから受信したデータパケットのターゲットタグは、エンドタグもノールート値も含まず、前記データ制御回路は、データ値を前記コンピューティングエレメントの1つに送信するように動作可能である請求項13~17のいずれか一項に記載のコンピューティングエレメントアレイにおいて、
【請求項19】
前記コネクションは双方向接続である請求項1~18のいずれか一項に記載のコンピューティングエレメントアレイ。
【請求項20】
前記演算回路が、
(i)行列-ベクトル積演算、
(ii)加算、
(iii)累積、
(iv)乗算、
(v)変換、
(vi)フィルタ演算、
(vii)テーブルルックアップ、または、
(viii)(i)~(vii)の任意の組み合わせを実行するように動作可能である請求項1~19のいずれか一項に記載のコンピューティングエレメントアレイ。
【請求項21】
前記コンピューティングエレメントの少なくとも1つが設定変更可能(configurable)である請求項1~20のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項22】
前記コンピューティングエレメントの少なくとも1つが1つ以上の設定変数を記憶できる請求項21に記載のコンピューティングエレメントアレイ。
【請求項23】
前記設定変数の少なくとも1つは、セルフタグ、計算定数、または動作設定を含む請求項21または22に記載のコンピューティングエレメントアレイ。
【請求項24】
前記コンピューティングエレメントは、(i)ルーティングノード、(ii)メモリノード、(iii)ルーティングパススルーを実行するように動作可能、(iv)指定された期間の1つまたは複数のデータ値を記憶するように動作可能、または(v)(i)~(iv)の任意の組み合わせである請求項1~23のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項25】
第1のコンピューティングエレメントの演算回路は、第1の演算を実行するように動作可能であり、第2のコンピューティングエレメントの演算回路は、第1の演算とは異なる第2の演算を実行するように動作可能である請求項1~24のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項26】
コンピューティングエレメントの1つの演算回路は、2つ以上の演算を実行するように動作可能である請求項1~25のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項27】
前記制御回路は、設定変数に応答する動作を選択するように動作可能である、請求項26に記載のコンピューティングエレメントアレイ。
【請求項28】
前記制御回路は、前記ターゲットタグまたはルーティング値に応答する動作を選択するように動作可能である請求項2~27のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項29】
2つ以上のコンピューティングエレメントが同期している請求項1~28のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項30】
2つ以上のコンピューティングエレメントが非同期である請求項1~29のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項31】
コンピューティングエレメントの1つ以上が、2つ、3つ、4つ、または8つの隣接するコンピューティングエレメントとコネクションによって接続されている請求項1~30のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項32】
1つまたは複数のコンピューティングエレメントの記憶回路は、1つ、2つ、3つ、4つ、または8つの隣接するコンピューティングエレメントから入力データを受信するように動作可能であるか、1つ、2つ、3つ、4つ、または8つの隣接するコンピューティングエレメントにデータを出力するように動作可能であるか、またはその両方である、請求項1~31のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項33】
各コンピューティングエレメントの1つは、設定制御回路に直接または間接的に接続されている請求項1~32のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項34】
ターゲットタグが数学関数または計算グラフを指定する、請求項1~33のいずれか1項に記載のコンピューティングエレメントアレイ。
【請求項35】
複数のコネクションによって接続された複数のコンピューティングエレメントを含むコンピューティングエレメントアレイであって、
各コンピューティングエレメントは、制御回路、記憶回路、および演算回路を備え、
各コンピューティングエレメントは、前記演算回路によって実行される演算を識別するセルフタグを記憶するように動作可能であり、
前記コンピューティングエレメントアレイ内の各コンピューティングエレメントにおいて、
前記記憶回路は、データパケットを前記複数のコネクションの1つから入力し、前記データパケットを記憶するように動作可能であり、
前記データパケットはデータ値とターゲットタグを含み、前記ターゲットタグは、前記データ値に対して実行すべき演算を指定し、
前記制御回路は、前記ターゲットタグと前記セルフタグとを比較し、前記セルフタグが前記ターゲットタグと一致する場合に、前記演算回路が前記データ値を処理し、処理された前記データ値を含むように前記データパケットを修正し、前記コネクションの1つで前記修正されたデータパケットの出力するように動作可能であり、
前記演算回路は、前記データ値を処理して処理データ値を生成するように動作可能であるコンピューティングエレメントアレイ。
【請求項36】
複数のコネクションによって接続された複数のコンピューティングエレメントを含むコンピューティングエレメントアレイであって、
各コンピューティングエレメントは、制御回路、記憶回路、および演算回路を備え、
前記コンピューティングエレメントアレイ内の各コンピューティングエレメントにおいて、
前記記憶回路は、データパケットを前記複数のコネクションの1つから入力し、前記データパケットを記憶するように動作可能であり、
前記データパケットは、データ値と、ルーティング値を指定するターゲットタグとを含み、
前記ルーティング値の1つは、前記演算回路が前記データ値に基づいて動作することを示すノールート値であり、
前記制御回路は、前記ノールート値を識別し、前記ノールート値が識別された場合に前記演算回路が前記データ値を処理し、処理された前記データ値を含むように前記データパケットを修正し、前記コネクションの1つで修正された前記データパケットを出力するように動作可能であり、
前記演算回路は、データ値を処理して処理データ値を生成するように動作可能であるコンピューティングエレメントアレイ。
【請求項37】
記憶値を記憶する1つのラッチと、1つのキャパシタと、スイッチ入力に応答してラッチからキャパシタに電荷を供給する1つのスイッチとを含むユニット乗算器を複数有するユニット乗算器アレイを備えた行列スベクトル乗算器であって、
複数の前記ユニット乗算器に含まれる複数の前記キャパシタは電気的に並列に接続され、出力電荷値を提供する行列ベクトル乗算器。
【請求項38】
前記記憶値はアナログ値であり、前記スイッチ入力はアナログ入力であり、前記ユイット乗算器はアナログ乗算器である請求項37に記載の行列ベクトル乗算器。
【請求項39】
前記記憶値はデジタル値であり、前記スイッチ入力はデジタル入力であり、単位乗算器はデジタル乗算器である請求項37に記載の行列ベクトル乗算器。
【請求項40】
前記スイッチ入力がデジタル値であり、前記スイッチ入力をアナログ値に変換するために前記スイッチに接続されたデジタル-アナログ変換器を備えた請求項37に記載のマトリクスベクトル乗算器。
【請求項41】
前記出力値がアナログ電荷値であり、アナログ電荷値を出力デジタル値に変換するためにアナログ電荷値に接続されたアナログデジタル変換器を備える、請求項37に記載の行列ベクトル乗算器。
【請求項42】
スイッチがバイポーラトランジスタ、ラッチがキャパシタ、またはその両方を含む、請求項37に記載の行列ベクトル乗算器。
【請求項43】
スイッチ入力、ラッチ、キャパシタ、またはそれらの任意の組み合わせに接続された変換回路を備えた請求項37に記載の行列ベクトル乗算器。
【請求項44】
記憶値を記憶するラッチと、抵抗器と、前記記憶値をスイッチ入力で乗算してビット値を提供するためにスイッチ入力に応答するスイッチのアレイとを設けたユニット乗算器を複数備えたユニット乗算器のアレイと、
前記ビット値を加算して前記記憶値と前記スイッチ入力との積を算出するビット加算器と、
を備えた行列ベクトル乗算器。
【請求項45】
前記ビット加算器がデジタル論理回路である請求項44に記載の行列ベクトル乗算器。
【請求項46】
N個のデジタル入力値を提供するベクトル入力回路と、
N行M列に格納されたデジタルウェイト値のMxN配列と、
N個の記憶されたデジタル重み値の各列をN個のデジタル入力値で乗算し、各列MについてN個の積を生成するように動作可能である乗算器のMxNアレイと、
各列MのN個の積のデジタル値を累積し、M個の累積値を提供するように動作可能なアキュムレータと、
を備えた行列ベクトル乗算器であって、
N個のデジタル入力値はそれぞれiビットであり、格納されたデジタル重み値はそれぞれjビットであり、
各乗算器はi+jビット未満の積を計算する行列ベクトル乗算器。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、人工知能のプロセスアーキテクチャ、処理装置、および処理方法に関し、特に、人工ニューラルネットワークハードウェアに関する。
【背景技術】
【0002】
センサフュージョンは、人工知能システムにとって重要なアプリケーションである。人工知能システムでは、スマートウェアラブルデバイス、拡張現実(AR)ヘッドセット、ドローン、産業用アプリケーションおよび自動車用アプリケーションなどのデバイスに、音声、カメラ、慣性およびその他のセンサタイプなどの多数の異なるセンサが統合されている。これらのセンサは、特定のタスクに対処するために、共通の理解と表現に統合(融合)されなければならない様々なデータを生成する。データ処理には様々な複雑さがあり、異なるデータ帯域幅を必要となる。さまざまなセンサからのデータが時間とともに変化すると、処理と帯域幅の要件も変化する。エネルギー消費を最小限に抑えながら、さまざまなアプリケーションのこうした変化に対応することは困難であり、現在のソリューションでは十分に対応できていない。
【0003】
人工的なニューラルネットワークは何十年も前から提案されており、最近では、従来の蓄積プログラム型デジタルコンピューター内のソフトウェアシミュレーションとしても、実際の専用電子ハードウェアとしても、さらに発展している。典型的なニューラルネットワークは、様々な強度の相互接続を持つ多層ノードで、一連の入力に応答する。ハードウェアとソフトウェアの両方のニューラルネットワークはアダプティブであり、既知のよいアウトプットを実現するデータを供給して相互接続の強さを変えることによって、つまりトレーニングすることにより結果を改善することができる。
【0004】
現代のニューラルネットワークは非常に大きくなり、大量の電力を必要とすることがある。
【0005】
アプリケーションによっては、特にセーフティクリティカルなタスクのため、有用な出力を有用な時間で提供するためにリアルタイム処理が必要となる。さらに、ポータブルデバイスにおけるアプリケーションでは、使用できる電力が限られている。そのため、少ない電力と小さなハードウェアで、効率的でタイムリーな処理を提供するニューラルネットワークが求められている。
【発明の概要】
【発明が解決しようとする課題】
【0006】
アプリケーションによっては、特にセーフティクリティカルなタスクのため、有用な出力を有用な時間で提供するためにリアルタイム処理が必要となる。さらに、ポータブルデバイスにおけるアプリケーションでは、使用できる電力が限られている。そのため、少ない電力と小さなハードウェアで、効率的でタイムリーな処理を提供するニューラルネットワークが求められている。
【0007】
本発明の目的は、上述の課題を解決する技術を提供することにある。
【課題を解決するための手段】
【0008】
本実施形態は、特に、低減された電力および帯域幅で動作するニューラルネットワークを提供することができる。いくつかの実施形態は、動的ニューラルネットワーク処理ワークロード用に設計されたニューラルネットワークアクセラレータ(例えば、ハードウェア回路)を備える。ニューラルネットワークは、固定ハードウェア電子システムとすることもできるし、例えばファームウェアまたは他のソフトウェアで設定される、ハードウェアに格納された可変パラメータ、を使用してオペレーションを再設定することができるステートマシンを備えてもよい。
【0009】
ここに開示された実施形態は、リアルタイムコンピューティングシステムを含み、リアルタイムコンピューティングシステムは、パターンマッチングシステム、機械学習システム、ニューラルネットワークシステム、または人工知能システムでありえる。リアルタイムコンピューティングシステムは、ニューラルネットワークアクセラレータであり得る。ここに開示された実施形態によれば、リアルタイムコンピューティングシステムは、可変入力(例えばセンサ入力)を連続的に監視し、その可変入力に応答するモニタ信号(例えば割り込み信号)を生成するハードウェアシステムを備える。センサ入力は、単一の値、ベクトル、または画像のような値のアレイを含む。
【0010】
ハードウェアシステムは、電子または光電子コンピューティングシステムとすることができる。ハードウェアシステムの動作は、固定され得るか、または記憶されたパラメータまたはファームウェアによって再設定され得る。例えば、ハードウェアの動作を制御および変更することができる可変値をハードウェアに記憶することによって、またはハードウェアの計算または他のソフトウェア手段において変数を提供することによって、ハードウェアの動作を制御および変更することができる。開示された実施形態は、それぞれがコンピューティングエレメント(computing element)であるインメモリ行列乗算器のアレイを備えたハードウェアシステムを提供することができる。各コンピューティングエレメントは、コネクションによって接続されたコンピューティングエレメントのアレイを備え、各コンピューティングエレメントは、制御回路、記憶回路、および演算回路(operation circuit)を含む。
【0011】
本実施形態によれば、コンピューティングエレメントアレイシステムは、コネクションによって接続されたコンピューティングエレメントのアレイを含む。各コンピューティングエレメントは、制御回路、記憶回路、および演算回路を備える。コネクションはそれぞれ、2つのコンピューティングエレメントを接続する。コンピューティングエレメントアレイ内の各コンピューティングエレメントにおいて、記憶回路は、データ値とターゲットタグを含むデータパケットをコネクションの1つから入力し、データパケットを記憶するように動作可能である。演算回路は、そのデータ値に対して演算(operation)を実行して処理データ値を生成するように動作可能である。ターゲットタグは、そのデータ値に対してその演算を実行するコンピューティングエレメントを指定する。制御回路は、そのコンピューティングエレメントをそのターゲットタグによって指定されたコンピューティングエレメントとして識別し、そのターゲットタグによって識別されたコンピューティングエレメントがコンピューティングエレメントである場合、演算回路がそのデータ値を処理することを可能にし、処理されたデータ値を含むようにデータパケットを修正し、修正されたデータパケットの出力をコネクションの1つ上で可能にするように動作可能である。
【0012】
ターゲットタグは、ルーティング値順序リストに配置された1つまたは複数のルーティング値を含み得る。制御回路は、ルーティング値順序リスト内のルーティング値を修正するように動作可能であり得る。制御回路は、ルーティング値順序付きリストからルーティング値を削除するように動作可能である。ルーティング値順序付きリストは、ルーティング値リストポインタを含み、制御回路は、ルーティング値リストポインタを変更するように動作可能である。ルーティング値の1つ以上は、コンピューティングエレメントを特定するノールート値とすることができ、制御回路は、ノールート値でコンピューティングエレメントを特定する。いくつかの実施形態では、ヌルセット(空リスト)であるルーティング値リストは、ノールート値と等価である。コンピューティングエレメントは、コンピューティングエレメントを記述するセルフタグを含むことができる。ターゲットタグは、1つ以上のコンピューティングエレメント特定情報を含むことができる。コンピューティングエレメント特定情報は、コンピューティングエレメント順序リストに配置することができる。コンピューティングエレメント特定情報は、コンピューティングエレメントの識別、またはコンピューティングエレメントの機能の識別、例えばコンピューティングエレメントの動作または計算とすることができる。制御回路は、ターゲットタグ内のコンピューティングエレメント特定情報をセルフタグと比較することによって、コンピューティングエレメントを識別することができる。制御回路は、コンピューティングエレメント順序リスト内のコンピューティングエレメントを修正するように動作可能であり得る。制御回路は、コンピューティングエレメント順序付きリストからコンピューティングエレメントを削除するように動作可能であり得る。コンピューティングエレメント順序付きリストは、コンピューティングエレメントリストポインタを含み、制御回路は、コンピューティングエレメントリストポインタを変更するように動作可能であり得る。制御回路は、ターゲットタグを変更して、コンピューティングエレメント順序付きリストにエンドタグを提供するように動作可能である。ターゲットタグは、データ値に対して順次演算を実行する複数のコンピューティングエレメントを指定することができる。
【0013】
アレイは2次元グリッド、2次元アレイ、トーラス、リング、3次元グリッド、3次元アレイのいずれでもよい。
【0014】
本実施形態によれば、コンピューティングエレメントアレイシステムは、コンピューティングエレメントのアレイ内の1つまたは複数のコンピューティングエレメントに接続されたデータ制御回路を備える。データ制御回路は、コンピューティングエレメントのアレイの外側からデータパケットを受信し、コンピューティングエレメントのアレイの外側にデータパケットを送信するように動作可能である。データ制御回路は、コネクションを介して、コンピューティングエレメントのアレイ内の1つまたは複数のコンピューティングエレメントに接続することができる。データ制御回路は、バスを介してコンピューティングエレメントのアレイ内の1つまたは複数のコンピューティングエレメントに接続され得る。データ制御回路は、コンピューティングエレメントのアレイからデータパケットを受信し、データパケットをコンピューティングエレメントのアレイに返すように動作可能であり得る。データ制御回路は、コンピューティングエレメントのアレイ内の1つまたは複数のコンピューティングエレメントに接続することができる。
【0015】
いくつかの実施形態によれば、データ制御回路によってアレイ内のコンピューティングエレメントから受信されたデータパケットは、エンドタグまたはノールート値を含み、データ制御回路は、エンドタグまたはノールート値に応答してデータ値をコンピューティングエレメントアレイから送信するように動作可能である。本開示のいくつかの実施形態によれば、データ制御回路によってアレイ内のコンピューティングエレメントから受信されたデータパケットのターゲットタグは、エンドタグまたはノールート値を含まず、データ制御回路は、データ値をアレイ内のコンピューティングエレメントに送信するように動作可能である。
【0016】
いくつかの実施形態によれば、コネクションは双方向接続である。いくつかの実施形態によれば、コネクションは単方向接続である。実施形態によれば、コンピューティングエレメントの1つ以上は、2つ、3つ、4つ、または8つの隣接するコンピューティングエレメントへのコネクションによって接続される。いくつかの実施形態によれば、1つまたは複数のコンピューティングエレメントの記憶回路は、1つ、2つ、3つ、4つ、または8つの隣接するコンピューティングエレメントから入力データを受信するように動作可能であり、1つ、2つ、3つ、4つ、または8つの隣接するコンピューティングエレメントにデータを出力するように動作可能であり、あるいはその両方である。
【0017】
いくつかの実施形態によれば、演算回路は、(i)行列-ベクトル積演算を計算する、(ii)加算を計算する、(iii)累積を計算する、(iv)乗算を計算する、(v)変換を計算する、(vi)フィルタ演算を実行する、(vii)テーブルルックアップを実行する、または(viii)(i)~(vii)の任意の組み合わせを実行するように動作可能である。本開示のいくつかの実施形態によれば、コンピューティングエレメントのうちの1つ以上は設定可能である。本開示のいくつかの実施形態によれば、コンピューティングエレメントのうちの1つ以上は、1つ以上の設定変数を記憶するように動作可能である。本開示のいくつかの実施形態によれば、設定変数のうちの1つ以上は、セルフタグ、計算定数、または動作設定を含む。
【0018】
本開示のいくつかの実施形態によれば、コンピューティングエレメントは、(i)ルーティングノード、(ii)メモリノード、(iii)ルーティングパススルーを実行するように動作可能、(iv)指定された期間の1つまたは複数のデータ値を記憶するように動作可能、または(v)(i)~(iv)の任意の組み合わせである。
【0019】
本開示のいくつかの実施形態によれば、第1のコンピューティングエレメントの演算回路は、第1の演算を実行するように動作可能であり、第2のコンピューティングエレメントの演算回路は、第1の演算とは異なる第2の演算を実行するように動作可能である。コンピューティングエレメントの1つの演算回路は、2つ以上の演算を実行するように動作可能であり得る。制御回路は、設定変数に応答して動作を選択するように動作可能であり得る。
【0020】
本開示のいくつかの実施形態によれば、制御回路は、ターゲットタグまたはルーティング値に応答する動作を選択するように動作可能である。
【0021】
本開示のいくつかの実施形態によれば、コンピューティングエレメントの2つ以上が同期であるか、コンピューティングエレメントの2つ以上が非同期であるか、またはその両方である。
【0022】
各コンピューティングエレメントは、例えばシリアルバスやパラレルバス、デイジーチェーン接続など、設定制御回路に直接または間接的に接続することができる。
【0023】
ターゲットタグには、数学関数や計算グラフを指定することができる。
【0024】
本開示の実施形態によれば、コンピューティングエレメントアレイは、コネクションによって接続されたコンピューティングエレメントのアレイを備え、各コンピューティングエレメントは、制御回路、記憶回路、および演算回路を備え、各コンピューティングエレメントは、演算回路によって実行される演算を識別するセルフタグを記憶するように動作可能である。コンピューティングエレメントのアレイ内の各コンピューティングエレメントについて、記憶回路は、接続の1つからデータパケットを受信し、入力データを記憶するように動作可能であり得、データパケットは、データ値と、データ値に対して実行される演算を指定するターゲットタグとを含み得、制御回路は、ターゲットタグとセルフタグとを比較するように動作可能であり得る、セルフタグがターゲットタグと一致する場合、演算回路がデータ値を処理し、処理されたデータ値を含むようにデータパケットを修正し、コネクションの1つ上で修正されたデータパケットの出力を可能にし、演算回路が、処理されたデータ値を生成するようにデータ値を処理するように動作可能であり得る。ターゲットタグは、ルーティング値順序リストに配置された1つまたは複数のルーティング値から設定され得る。制御回路は、ルーティング値順序リスト内のルーティング値を修正するように動作可能であり得る。制御回路は、ルーティング値順序リストからルーティング値を削除するように動作可能であり得る。ルーティング値順序付きリストはルーティング値リストポインタを含み、制御回路はルーティング値リストポインタを変更するように動作可能である。
【0025】
本開示の実施形態によれば、コンピューティングエレメントアレイは、コネクションによって接続されたコンピューティングエレメントのアレイを備え、各コンピューティングエレメントは、制御回路、記憶回路、および演算回路を備える。コンピューティングエレメントアレイ内の各コンピューティングエレメントについて、記憶回路は、接続の1つからデータパケットを受信し、データパケットを記憶するように動作可能であり得る。データパケットは、データ値と、ルーティング値を指定するターゲットタグとを含むことができ、ルーティング値の1つは、演算回路がデータ値で動作することを示すノールート値であり、制御回路は、ノールート値を識別するように動作可能であることができる、ノールート値が識別された場合、演算回路がデータ値を処理することを可能にし、処理されたデータ値を含むようにデータパケットを修正し、コネクションの1つ上で修正されたデータパケットの出力を可能にし、演算回路は、処理されたデータ値を生成するようにデータ値を処理するように動作可能であり得る。ターゲットタグは、ルーティング値順序リストに配置された1つまたは複数のルーティング値を含み得る。制御回路は、ルーティング値順序リスト内のルーティング値を修正するように動作可能であり得る。制御回路は、ルーティング値順序付きリストからルーティング値を削除するように動作可能であり得る。ルーティング値順序付きリストはルーティング値リストポインタを含み、制御回路はルーティング値リストポインタを変更するように動作可能である。
【0026】
本開示の実施形態によれば、行列-ベクトル乗算器は、単位乗算器のアレイを備える。各単位乗算器は、記憶された値を記憶するラッチと、キャパシタと、ラッチからキャパシタに電荷を伝導するためのスイッチ入力に応答するスイッチとを備えることができる。単位乗算器のキャパシタは電気的に並列に接続され、出力電荷値を提供する。蓄積値はアナログ値とすることができ、スイッチ入力はアナログ入力とすることができ、単位容量乗算器はアナログ乗算器とすることができる。いくつかの実施形態によれば、蓄積値はデジタル値であり、スイッチ入力はデジタル入力であり、単位乗算器はデジタル乗算器である。いくつかの実施形態によれば、スイッチ入力はデジタル値であり、実施形態は、スイッチ入力をアナログ値に変換するためにスイッチに接続されたデジタルアナログ変換器を備える。いくつかの実施形態によれば、出力値はアナログ電荷値であり、実施形態は、アナログ電荷値を出力デジタル値に変換するためにアナログ電荷値に接続されたアナログ/デジタル変換器を備える。スイッチはバイポーラトランジスタ、ラッチはキャパシタ、またはその両方を備えることができる。
【0027】
本開示の実施形態は、スイッチ入力、ラッチ、キャパシタ、またはスイッチ入力、ラッチ、キャパシタの任意の組み合わせに接続された変換回路を備えることができる。
【0028】
本開示の実施形態によれば、行列-ベクトル乗算器は、デジタル単位乗算器のアレイを備える。各デジタル単位乗算器は、記憶された値を記憶するラッチと、抵抗器と、記憶された値とスイッチ入力とを乗算してビット値を提供するためにスイッチ入力に応答するスイッチのアレイとを備えることができる。ビット加算器は、ビット値を加算して、記憶値とスイッチ入力の積を生成することができる。ビット加算器はデジタル論理回路とすることができる。
【0029】
本開示の実施形態によれば、行列-ベクトル乗算器は、N個のデジタル入力値を提供するベクトル入力回路と、M個の列のN行に記憶された記憶されたデジタル重み値のM×N個のアレイと、乗算器のM×N個のアレイであって、乗算器のアレイは、N個の記憶されたデジタル重み値の各列をN個のデジタル入力値で乗算して各列MのN個の積を生成するように動作可能である、乗算器のM×N個のアレイと、各列MのN個の積のデジタル値を累積してM個の累積値を提供するように動作可能な累積器とを備える。N個のデジタル入力値はそれぞれiビットからなり、記憶されたデジタル重み値はそれぞれjビットからなり、各乗算器はi+jビット未満の積を計算する。
【図面の簡単な説明】
【0030】
【
図1】本開示の例示的実施形態による、センサと、コンピューティングアクセラレタを含むハードウェアユニットとを含むリアルタイムコンピューティングシステムの概略図である。
【
図2】本開示の例示的実施形態によるコンピューティングアクセラレータの機能概略図である。
【
図3】本開示の例示的実施形態による行列-ベクトル積回路の概略図である。
【
図4】本開示の例示的な実施形態による、コンピューティングエレメントのアレイを含むグリッド接続コンピューティングアクセラレータの概略図である。
【
図5A】本開示の例示的な実施形態によるコンピューティングエレメントの概略図である。
【
図5B】本開示の例示的な実施形態によるコンピューティングエレメントの概略図である。
【
図6A】本開示の例示的な実施形態によるコンピューティングエレメント間の接続の概略図である。
【
図6B】本開示の例示的な実施形態によるコンピューティングエレメント間の接続の概略図である。
【
図7】本開示の例示的実施形態による、コンピューティングエレメントのアレイを含むトーラス接続コンピューティングアクセラレータの概略図である。
【
図8A】本開示の例示的な実施形態によるデータパケット内のビットを示す図である。
【
図8B】本開示の例示的な実施形態によるデータパケット内のビットを示す図である。
【
図8C】本開示の例示的な実施形態によるデータパケット内のビットを示す図である。
【
図9】本開示の例示的実施形態によるコンピューティングエレメントのアレイの概略図である。
【
図10】本開示の例示的な実施形態によるデータフローを示すコンピューティングエレメントのアレイの概略図である。
【
図11A】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11B】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11C】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11D】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11E】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11F】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11G】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11H】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11I】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11J】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11K】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11L】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図11M】本開示の例示的な実施形態による、セルフタグおよびコンピューティングエレメント識別子を使用して、コンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続したターゲットタグである。
【
図12】本開示の例示的実施形態による、
図11A~11Mに対応するコンピューティングエレメントのアレイにおける計算グラフのデータおよび計算の流れを示すフロー図である。
【
図13A】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13B】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13C】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13D】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13E】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13F】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13G】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13H】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13I】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図13J】本開示の例示的な実施形態による、無経路ルーティング値を使用してコンピューティングエレメントのアレイによって実行されるコンピュートグラフの連続するターゲットタグである。
【
図14】本開示の例示的実施形態による、
図13A~13Jに対応するコンピューティングエレメントのアレイにおける計算グラフのデータと計算の流れを示すフロー図である。
【
図15】本開示の例示的な実施形態によるコンピューティングエレメントのアレイの概略図である。
【
図16】本開示の例示的な実施形態によるコンピューティングエレメントのアレイの概略図である。
【
図17】本開示の例示的な実施形態によるコンピューティングエレメントのアレイの概略図である。
【
図18】本開示の例示的な実施形態によるコンピューティングエレメントのアレイの概略図である。
【
図19】本開示の例示的な実施形態によるコンピューティングエレメントのアレイの概略図である。
【
図20】本開示の例示的実施形態による単位容量逓倍器の簡略回路図である。
【
図21】本開示の例示的実施形態による単位容量逓倍器のアレイの簡略化された概略図である。
【
図22】本開示の例示的実施形態に従ってデジタル乗算を実行するように配置された単位容量乗算器のアレイの簡略化された概略図である。
【
図23A】本開示の例示的実施形態による単位論理セルである。
【
図23B】本開示の例示的な実施形態に従って、乗算された単一ビット値を累積するために単位論理セルを使用する回路である。
【
図23C】本開示の実施形態を理解する上で有用なビット番号付けを示す図である。
【発明を実施するための形態】
【0031】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素はあくまで例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
【0032】
本開示の特徴および利点は、同様の参照文字が全体を通して対応する要素を識別する図面と併せて考慮すると、以下に記載する詳細な説明からより明らかになるだろう。
【0033】
図面において、同様の参照番号は、一般に、同一、機能的に類似、および/または構造的に類似の要素を示す。図は必ずしも縮尺通りに描かれていない。
【0034】
[第1実施形態]
本開示の特定の実施形態は、低減された電力およびハードウェア要件で効率的かつタイムリーな処理を提供するニューラルネットワーク、パターンマッチングコンピュータ、または機械学習コンピュータに向けられている。そのような実施形態は、コンピューティングアクセラレータ、例えば、ニューラルネットワークアクセラレータ、パターンマッチングアクセラレータ、機械学習アクセラレータ、または、例えば、センサフュージョンに限定されないが、静的または動的処理ワークロード用に設計された人工知能コンピューティングアクセラレータを備えることができる。動的ワークロードは、いくつかの実施形態において、連続的な時間的監視を必要とする常時オンタスクと、特定の時間に発生する割り込み駆動タスクという、少なくとも2つのカテゴリのタスクを含む。場合によっては、常時オンタスクは比較的計算集約度が低く、割り込み駆動タスクは比較的計算集約度が高い。常時オンタスクの例としては、1つまたは複数のセンサ、例えば、生体医療センサ、加速度センサなどのモーションセンサ、およびマイクなどのオーディオセンサからの時間的信号を連続的に分類して、動きの検出および分類、ならびにキーフレーズの検出を提供することが挙げられる(ただし、これらに限定されない)。割り込み駆動タスクの例としては、画像セグメンテーション、音声翻訳、物体検出および識別を挙げることができる(ただし、これらに限定されない)。処理される常時オンタスクは、入力(例えば、センサ)データの連続ストリームを監視してトリガイベントを検出し、別のハードウェアまたはソフトウェアシステムによって処理される割込み駆動タスクのトリガイベントに応答してトリガ信号(例えば、割込み)を提供することができる。本開示のシステムは、例えば、シリアルまたはパラレルのいずれかの従来のプロトコルまたはハードウェアインターフェースを介して、従来のコンピュータシステムまたはスーパーコンピュータに接続された計算アクセラレータであり得る。
【0035】
図1に示される本開示の実施形態は、例えばセンサ信号32を提供するセンサ30からの、常時オン、連続、または連続的にサンプリングされた信号に応答して、エネルギー効率に優れた計算を提供するコンピューティングアクセラレータ20を含むハードウェアシステム10を備える。ハードウェアシステム10は、センサ30からのセンサ信号32に応答することができ、コンピューティングアクセラレータ20と通信するマイクロコントローラまたはコンピュータ(例えば、メモリ12およびプロセッサ14を含む)を備えることができる。いくつかの実施形態によれば、ハードウェアシステム10は、トリガ割り込み信号22を提供するためのトリガイベントの検出を、マイクロワットレベルの電力消費のみで実現できる。本開示の実施形態によれば、コンピューティングアクセラレータ20は、従来の格納プログラムデジタルコンピュータ(例えば、中央処理装置(例えば、プロセッサ14)を駆動するメモリ(例えば、メモリ12)に格納されたソフトウェアプログラムを含むコンピュータ)よりも高速かつ少ない電力で、データセットを処理する(例えば、データセット内のデータ値を数学的に処理することによって結果を計算または算出する)ことができる。実施形態によれば、コンピューティングアクセラレータ20は、ハードウェアアクセラレータであり得る。ハードウェアアクセラレータの動作は、例えば、ファームウェアまたは設定変数を用いて設定可能であり得る。実施形態によれば、コンピューティングアクセラレータ20は、従来、行列-ベクトル積演算によって支配されているニューラルネットワークおよび機械学習タスクを、より効率的に、より少ない中央処理装置-メモリ相互作用またはデータ転送で計算することができる。コンピューティングアクセラレータ20は、コンピューティング速度および様々なコンピューティングタスクまたは機能への適応性の有用な組み合わせを提供することができる。
【0036】
コンピューティングアクセラレータ20は、行列ベクトル積演算を実行するために、従来の格納プログラムデジタルコンピュータに見られるような、プロセッサ14(例えば、中央処理装置またはCPU)とメモリ12との間のデータ転送を排除または削減するインメモリ処理アーキテクチャを備えることができる。このような従来のシステムの電力使用は、メモリ-CPU間のデータ転送によって支配されているため、このようなデータ転送を排除または削減することにより、ハードウェアシステム10の電力使用を大幅に削減することができる。ハードウェアシステム10およびコンピューティングアクセラレータ20は、1つまたは複数の特定用途向け集積回路(ASIC)に実装することができ、センサ30の入力に応答してリアルタイムで動作することができ、センサ30(例えば、異なるセンサ30A、30B、30C)からの未処理のアナログデータへの直接インターフェースをサポートすることができる。
【0037】
本開示の実施形態によれば、および
図1および
図2に示されるように、ハードウェアシステム10は、インメモリ行列乗算器のアレイ(例えば、コンピューティングエレメント70のアレイ)を備えることができ、サブミリワットのエネルギーレベルで動作することができ、同期的にまたは非同期的に入力データを処理することができる。
図2は、回路表現ではなく、ハードウェアシステム10およびコンピューティングアクセラレータ20の動作の機能的な説明図である。コンピューティングアクセラレータ20は、インメモリ行列乗算器(MVM)60、非直線性変換器(NL)62、アキュムレータブロック(ACC)64、および1つまたは複数のメモリノード(MEM)66を備えることができる。ハードウェアシステム10は、内部リーク、制御、およびクロックゲーティングロジック56と、センサ30のためのインターフェース回路と、例えばアナログ汎用入出力回路(GPIO)52を含むセンサインターフェース回路50と、アナログセンサ30に電気的に接続された自動利得制御(AGC)回路54とを備えることができる。ハードウェアシステム10およびコンピューティングアクセラレータ20は、低域通過RNN(リカレントニューラルネットワーク)、完全接続ニューラルネットワーク層、LSTM(long/short-term memory networks)またはゲーテッドリカレントユニットなどのゲーテッドRNN、および1次元接続ニューラルネットワーク(1D-CNN)をサポートすることができる。
【0038】
本実施形態によれば、行列ベクトル積計算は、少ないデータ転送数で効率的に計算を実行し、その結果、電力を削減するインメモリ計算モジュールおよびアーキテクチャに基づいている。この削減は、n2(nは行列の要素数)のオーダーである。本実施形態はモデル化され、シミュレーションは、コンピューティングエレメント70のアレイが、1Top/s/W(テラ演算/秒/ワット)以下(例えば、4Top/s/W以下、10Top/s/W以下、20Top/s/W以下、50Top/s/W以下、または100Top/s/W以下)で動作できることを示している。4~100Top/s/Wを提供してもよい。50GOps/s以下、100GOps/s以下、または150GOps/s以下を提供してもよい。
【0039】
図3は、ベクトル行列乗算回路のアナログ電流ベース実装を示している。左側の各入力線は、別個の電流(所与の電圧)を持つ別個の入力データ40値を搬送する。行列の底を横切る各出力線は、各入力線から入力線と出力線を接続する抵抗R
WTを介して供給される入力電流I
INの合計である。抵抗R
WTは、出力電流I
OUT=V/R
WTとなるようにベクトル乗算を行うために、各入力線に関連する重み値を提供する。各出力ライン上の合計電流I
OUTは出力ベクトルを提供し、この出力ベクトルは累積(加算または合計)され、最終的な重み付けされた出力値を提供する。入力、出力、および累積は、アナログでも、
図3に示すように、対応するデジタルアナログ変換器97およびアナログデジタル変換器98を備えたデジタルでもよい。
【0040】
ベクトル行列回路のハードウェア実装は、入力ベクトルのサイズに効率的に対応するサイズでなければならない。ベクトル行列回路が大きすぎると、回路の多くが使用されない(例えば、入力線の一部で入力電流IINがゼロ、または対応するRWTがゼロ、またはその両方)。ベクトル行列回路が小さすぎる場合、ベクトル乗算をより小さなベクトルに分解しなければならない。同様に、小さすぎるベクトルが多すぎると非効率になる。非直線性変換(変換)を累積値と行列-ベクトル積演算間に適用することで、回路のニューロン動作をよりよくモデル化することができる。
【0041】
本開示の一般的な実施形態によれば、および
図4および
図5A、
図5B、
図6A、および
図6Bの詳細に示されるように、コンピューティングアクセラレータ20は、
図4に示されるように、コネクション48によって接続されたコンピューティングエレメント70のアレイを備える。
図4のアレイは、2次元グリッドとして図示されているが、本開示の実施形態は、それに限定されるものではなく、1次元アレイ、2次元アレイ、リング、トーラス(
図7に図示されているように)、3次元アレイ、または接続されたコンピューティングエレメント70の他の配置でもよい。
【0042】
図5Aに示すように、各コンピューティングエレメント70は、コンピューティングエレメント制御回路78と、記憶回路72と、記憶回路72に記憶された入力データ40に対して演算(例えば、行列-ベクトル積のような数学演算)を実行する演算(例えば、計算)回路74とを備える。
図5Bは、実行される演算(例えば、2つ以上のコネクション48から別々に受信された2つ以上のデータ値Dまたはベクトルの加算または乗算)のタイプに応じて、1つ以上のコネクション48から演算のための入力データ40を受信するコンピューティングエレメント70を示す。
【0043】
記憶回路72は、コネクション48の1つから入力データ40を受信し、受信した入力データ40を記憶するように動作可能である。記憶回路72は、1つまたは複数のシフトレジスタ、メモリ、またはフリップフロップとすることができる。入力データ40は、コネクション48上で通信される情報であり、例えばデータ値や、コンピューティングエレメント70のアレイを介した動作およびデータルーティングを記述するメタデータなどである。コネクション48と入力データ40の両方は、例えば
図6Aに示されるように、入力データのソース(例えば、隣接するコンピューティングエレメント70からの出力データ44)と入力データ40の宛先を示す接続矢印で表される。
図6Bは、2つの隣接するコンピューティングエレメント70間の双方向コネクション48を示しており、データ通信に別々のワイヤが使用されている。いくつかの実施形態では、同じワイヤが、例えば、使用されていないときに高抵抗を提供するトライステートドライバおよび記憶回路72を用いて、双方向に渡されるデータを通信するために使用される。
【0044】
本開示の実施形態によれば、および
図6Aおよび
図6Bに示されるように、各コンピューティングエレメント70は、信号ハンドシェイクを使用して隣接するコンピューティングエレメント70と通信することができる。送信元(送信側)コンピューティングエレメント70は、データパケット80を送信する準備ができていることを示す要求信号Reqを生成することができ、また、例えば、隣接するコンピューティングエレメント70を接続する1つまたは複数のワイヤ上に(例えば、直列または並列に)データパケット80を出力する。受信コンピューティングエレメント70の近傍が要求信号Reqを受信すると、データパケット80を入力して保存し、例えば隣接コンピューティングエレメント70を接続するワイヤ(コネクション48)上で、送信側コンピューティングエレメント70に送り返される確認信号Ackを提供する。送信側コンピューティングエレメント70がアクノリッジAckを受信すると、データパケット80は送信側コンピューティングエレメント70から出力されなくなり、データの送受信が完了する。
【0045】
図4は、入力制御回路26を備えるデータ制御回路24が入力データ40を受信し、例えば、グリッド構成のコンピューティングエレメント70のアレイの端部上で、1つまたは複数のコンピューティングエレメント70に接続された入力バス42を介して、1つまたは複数のコンピューティングエレメント70に入力データ40を通信する実施形態を示す。同様に、データ制御回路24は、1つまたは複数のコンピューティングエレメント70から、例えば、グリッド構成におけるコンピューティングエレメント70のアレイの端部上で、1つまたは複数のコンピューティングエレメント70に接続された出力バス46を介して、処理された出力データ44を受信し、処理された出力データ44を、例えば、ハードウェアシステム10のメモリ12またはプロセッサ14に通信する出力制御回路28を備えてもよい。本開示のいくつかの実施形態において、および
図7に示されるように、データ制御回路24は、1つまたは複数のコネクション48によって、1つまたは複数のコンピューティングエレメント70と、入力データ40の外部ソースと、処理された出力データ44の宛先とに接続される。データ制御回路24は、コンピューティングエレメント70の一種であることができる。
図7に示される実施形態では、コンピューティングエレメント70は、データ制御回路24が行の1つのリング内に接続されたトーラス(2次元リング)内にコネクション48で接続されている。
【0046】
本開示の実施形態によれば、データパケット80は、
図8Aに示されるように、データ値Dと通信されるルーティング値R(
図8Bに示される)に応答して、ターゲットタグTに格納されたデータ値Dに対する演算を実行するために、コンピューティングエレメント70のアレイを通って流れる。ルーティング値Rは、データパケット80がコンピューティングエレメント70のアレイを通過する経路を指示する。本開示の実施形態によれば、データ値に対して実行される演算は、データ値Dが記憶されているコンピューティングエレメント70の動作によって決定される。演算は、データ値Dを変更する数学的演算、タイミング演算(例えば、コンピューティングエレメント70間のデータパケット80伝送に遅延を与える)、データパケット80を記憶するための記憶演算(例えば、メモリ)、またはデータパケット80をコネクション48(例えば、通信回路を含む)上で伝送するためのルーティング演算であり得る。
【0047】
いくつかの実施形態によれば、各コンピューティングエレメント70は、コンピューティングエレメント70またはその動作を識別するセルフタグSを含み、または記憶する。セルフタグSは、一意である必要はなく、同じ動作を実行するコンピューティングエレメント70について同じであることができる。計算エレメント70のセルフタグSが、計算エレメント70の識別子C、データパケット80のターゲットタグTと一致すると、オペレーションが実行される。いくつかの実施形態によれば、セルフタグSまたはコンピューティングエレメント70の識別子Cは使用されない。その代わりに、ルーティング値Rは、コンピューティングエレメント70によって遭遇されると、コンピューティングエレメント70の動作がデータ値D上で実行されるべきであることを示すノールート値Nを符号化する。ルーティング値Rのノールート値Nは、データパケット80がコネクション48上で送信されるべきでなく、むしろデータパケット80のデータ値D上でのコンピューティングエレメント70の動作を可能にすることを示すものとしてコンピューティングエレメント70が認識する任意の値であり、非接続(例えば、ルーティングなし)値、または残りのルーティング値Rのゼロカウント値(例えば、ルーティング値Rがリストに残っていない)である。この名称は、(通常はルーティング値Rによって示される)コネクション48にデータパケット80をルーティングするのではなく、演算が実行されることを示す。いくつかの実施形態では、ルーティング値Rは、残っているルーティングステップの数を指定するカウンタを含み、カウンタがゼロに等しいとき、オペレーションが実行される。
図8Cは、そのような実施形態のターゲットタグTを示す。本開示の実施形態によれば、データパケット80内のターゲットタグTによって指定されるコンピューティングエレメント70と共にデータパケット80が存在するコンピューティングエレメント70を識別することは、(i)コンピューティングエレメント70に記憶されたセルフタグSをコンピューティングエレメント70の識別子Cにマッチングさせること(
図11A~12に関して議論される)、または(ii)ノールートNルーティング値Rを検出すること(
図13A~4に関して議論される)を含む。他のルーティング値Rは、ルーティングコネクション48識別子、ルーティング命令、またはルーティング値カウントを含む。
【0048】
図8Aに示されるように、入力データ40(および出力データ44)は、データ値D(例えば、1つまたは複数ビットのデジタル数値)およびターゲットタグTを含むデータパケット80で提供される。
図8Bに示されるように、ターゲットタグTは、1つまたは複数のコンピューティングエレメント識別子Cや、1つまたは複数のルーティング値Rや、演算回路74によって使用される1つまたは複数の定数kを指定するメタデータ、および、任意の他の有用なメタデータを含んでもよい。ターゲットタグTは、コンピューティングエレメント70の動作において有用な、任意の他のパケットヘッダ情報を含んでもよい。
図8Cに示されるように、ターゲットタグTは、ノールート値Nを含む1つまたは複数のルーティング値R、演算回路74によって使用される1つまたは複数の定数k、および任意の他の有用なメタデータを指定するメタデータを含んでもよい。ターゲットタグTおよびターゲットタグT内の様々な値は、デジタルビット列またはリストとすることができ、様々な要素(例えば、コンピューティングエレメント特定情報、ルーティング値R)ごとに規定された数のビットを使うことができる。ターゲットタグは、ターゲットタグTのルーティングビットのカウント値を含んでもよい。コンピューティングエレメント識別子Cおよびルーティング値Rは、ターゲットタグT内の順序リストにおいて提供される。いくつかの実施形態では、この順序リストは、リスト内の現在の値、演算可能な値、または公開された値を示すポインタ(例えば、アドレス)を含む。またはこの順序リストは、リスト内の残りの値の数を示すカウンタを含む。そのカウンタがゼロに等しい場合、それ以上のルーティングステップは利用できず、オペレーションが実行される。いくつかの実施形態では、現在の値、演算可能な値、または公開された値は、例えばリスト内の順序またはアドレスによって指定されるように、リスト内の最初の値、またはリストの先頭の値である。
【0049】
いくつかの実施形態において、例えば、コンピューティングエレメント識別子Cを含むターゲットタグTを用いる場合、コンピューティングエレメント70は、演算回路74によって実行される演算を識別するセルフタグSを記憶する。セルフタグSは、コンピューティングエレメント70に記憶された1つまたは複数の設定変数Vのうちの1つであることができる。いくつかの実施形態では、セルフタグSは、コンピューティングエレメント70のアレイの初期設定ステップにおいて、例えば外部コントローラから、コンピューティングエレメント70にロードされた設定変数Vである。
【0050】
本発明のいくつかの実施形態では、コンピューティングエレメント制御回路78は、ターゲットタグTを受信し、ターゲットタグTを解析してコンピューティングエレメント70識別子Cまたは現在のルーティング値Rを抽出し、ターゲットタグTのコンピューティングエレメント70識別子CをセルフタグSと比較するか、またはルーティング値Rのルーティングなし値Nを認識するように動作可能である、比較が一致する場合、データ値Dを処理し、ルーティング値Rに応答してデータパケット80をルーティングし、ターゲットタグTを修正し、比較が一致しない場合、処理された出力データ44の出力を有効にするか、または単に入力データ40をルーティングするために、コンピューティングエレメント70に対応する動作を有効にする。コンピューティングエレメント制御回路78は、例えば
図5Aおよび
図5Bに破線で示すように、あるコネクション48から別のコネクション48上の出力データ44へのルーティング(パススルー)回路通信入力データ40を可能にする。オペレーション回路74は、データ値D(入力データ40)を処理して、例えば出力データ44としてコネクション48の1つに出力されるプロセスデータパケット80内の処理された出力データD(出力データ44)を生成するように動作可能である。
【0051】
コンピューティングエレメント70は、デジタルコンピューティングエレメント70とすることができ、どのようなデジタル回路であってもよい。いくつかの実施形態では、コンピューティングエレメント70は、アナログ回路を含んでもよい。コンピューティングエレメント制御回路78も同様に、デジタル回路、論理、フリップフロップやラッチなどの記憶素子を含むことができ、マイクロコントローラ、ステートマシン、または離散制御論理を備えることができる。演算回路74は、例えば、加算器、乗算器、フィルタ(例えば、一次フィルタ)、変換回路(例えば、ルックアップテーブルなどによって実行される線形変換または非線形変換)を備えることができる。演算回路74は、入力データ40がコンピューティングエレメント70に提供される前に特定のコンピューティングエレメント70にロードされ得る、コンピューティングエレメント制御回路78によって設定変数Vとして提供される定数k(例えば、乗算定数または加算定数)を採用し得る。いくつかの実施形態では、定数kは、
図8Bおよび
図8Cに示すように、ターゲットタグTに含めることができる。
【0052】
コンピューティングエレメント制御回路78の制御の下で、入力データ40は、各コンピューティングエレメント70に供給される共通のクロックに応答して、各記憶回路72に同時にロードされ得る。いくつかの実施形態では、交互の記憶回路72は、クロックの正方向エッジとクロックの負方向エッジによって制御され、競合状態を回避する。クロック周期は、演算回路74がデータ値Dを処理するのに必要な時間を超えることはできない。このような実施形態では、各コンピューティングエレメント70は同期であり、異なるデータ要素に対して同時に計算を実行する。いくつかの実施形態では、コンピューティングエレメント70は非同期であり、独立して、あるコンピューティングエレメント70から別のコンピューティングエレメント70に送信されるデータパケット80に応答して動作する。いずれの場合も、データパケット80は、コンピューティングエレメント70のアレイを通って流れることができ、多数のコンピューティングエレメント70をアレイに含めて同時に動作させることができるため、高い計算速度およびデータ速度を達成することができる。さらに、演算を実行するために任意の時点で使用されないコンピューティングエレメント70は、比較的静止しており、コンピューティングエレメント70のアレイの電力を節約する。
【0053】
図9は、各コンピューティングエレメント70の動作がラベル付けされたコンピューティングエレメント70のアレイを示している。コンピューティングエレメント70は全て同一である必要はなく、異なる演算回路74を有することができる。コンピューティングエレメント70のいくつかは、行列-ベクトル積を計算する演算回路74を備えることができる(例えば、
図3の回路に例示されているような関数を実装するアナログまたはデジタルハードウェアを使用する)。コンピューティングエレメント70のいくつかは、2つのベクトルを加算する加算演算回路74を備える。コンピューティングエレメント70のいくつかは、例えばルックアップテーブルによって実装される線形または非線形関数などの変換演算回路74を備える。いくつかの実施形態では、コンピューティングエレメント制御回路78は、演算が実行可能であるかどうか(例えば、データパケット80とコンピューティングエレメント70との間に一致が存在するかどうか)を判定し、可能であれば演算回路74による演算を可能にし、演算が実行不可能であれば、例えば、パススルールーティング演算または関数として、データパケット80を隣接するコンピューティングエレメント70に渡すように動作可能な回路を備える。一部のコンピューティングエレメント70は、データパケット80のルーティングを制御するルーティングノード、またはデータパケット80を格納または遅延させるメモリノードとすることができ、例えば、コンピューティングエレメント制御回路78の制御下で、シフトレジスタのアレイまたはSRAM(スタティックランダムアクセスメモリ)を備える。
【0054】
本開示のいくつかの実施形態によれば、各コンピューティングエレメント70は、固定された計算機能(例えば、加算器、乗算器、およびルックアップテーブルのうちの1つだけである演算回路74)を有する。いくつかの実施形態によれば、コンピューティングエレメント70は、複数の演算回路(例えば、加算器、乗算器、およびルックアップテーブルのうちの1つ以上)と、例えばターゲットタグTにおいて受信される、コンピューティングエレメント70に記憶された所望の計算を選択的に行う構成とを備えることができる。例えば、各コンピューティングエレメント70は、所望の計算に応じて選択される状態機械を実装することができる。ターゲットタグTは、データ値Dに対して実行される1つまたは複数の演算を指定することができる。演算が完了すると、ターゲットタグTを修正することができる。いくつかの実施形態によれば、コンピューティングエレメント70の演算は、例えば、設定変数Vに応答して、あらかじめ定義された計算グラフに応答して選択された、または所望の動作または関数を実行するように設定され得る。いくつかの実施形態によれば、設定変数Vは、動作または動作モードを選択する。演算を選択する設定変数Vは、例えば、数学的演算を選択することができる。ここで演算回路74は、異なるまたは複数の演算(例えば、加算、複数の値の和を計算するアキュムレータ、乗算、行列-ベクトル積、線形変換、非線形変換のいずれか1つまたは複数であり得る第1および第2の演算回路74)を計算するためのハードウェアを備える。または演算回路74は、データパケット80が単に異なる隣接するコンピューティングエレメント70に通信されるパススルールーティング機能のためのハードウェアを備える。
【0055】
本開示のいくつかの実施形態によれば、アレイに接続された2つ以上のコンピューティングエレメント70は、
図4および
図7に示すように、ポイントツーポイントコネクション48を介して、例えば左、右、上、または下から、アレイ内の任意の隣接するコンピューティングエレメント70からデータ40を入力することができる。アレイの端にあるコンピューティングエレメント70は、例えば入力バス42または出力バス46、あるいはその両方を介して、入力制御回路26および出力制御回路28を含むデータ制御回路24に接続することができる。入力バス42および出力バス46は、コンピューティングエレメント70のアレイの端にある1つまたは複数のコンピューティングエレメント70に接続された共通のバスとすることができるが(必ずしもそうである必要はない)、理解を助けるために別々に図示されている。したがって、アレイ内部のコンピューティングエレメント70は、コネクション48を介して4つの隣接するコンピューティングエレメント70に接続することができ、アレイの端にあるコンピューティングエレメント70は、コネクション48を介して2つまたは3つの隣接するコンピューティングエレメント70に接続することができる。
図7の実施形態では、データ制御回路24のみが入力および出力バス42、46に接続され、入力データ40および出力データ46は、コネクション48を介してデータ制御回路24に通信される。コンピューティングエレメント70内の制御回路78は、デイジーチェーンで(または共通バスで)通信可能に接続され、セルフタグS、数学的定数、および動作モード選択を含む設定変数を通信することができる。
【0056】
本開示の実施形態によれば、コンピューティングエレメント70のアレイを流れるデータパケット80は、少なくとも部分的には、各データパケット80に関連付けられたターゲットタグ82によって制御することができる。したがって、複雑な集中制御および通信機構は必要ない。
【0057】
本開示の実施形態によれば、
図8Aに示されるように、データパケット80は、データ値D(例えば、演算回路74によって数学的に演算される数値)と、ターゲットタグTとを含む。
図8Bに示されるように、ターゲットタグTは、データ値Dに対する関連する演算を識別するコンピューティングエレメント70識別子Cを含むことができ、ルーティング値Rを含むことができる。ターゲットタグTは、ターゲットタグTが存在するコンピューティングエレメント70がコンピューティングエレメント70のオペレーションを実行することを示し、したがってコンピューティングエレメント70を識別する)。コンピューティングエレメント70の識別は、コンピューティングエレメント70のラベルまたは演算に一致すること、またはノールート値Nルーティング値R(例えば、コネクション48ではないヌル値またはカウント)を識別することを含むことができる。したがって、ターゲットタグTは、演算回路74の動作およびコンピューティングエレメント70のアレイを通るデータパケットの流れを制御する動的設定変数の形態として動作することができる。
【0058】
図9に示されるように、各コンピューティングエレメント70は、それがデータ値Dに対して実行することができる関連する演算を有する。図示において、「*」がマークされたコンピューティングエレメント70は、指示された重みW値(例えば、設定変数として提供されるか、コンピューティングエレメント70にハードワイヤードされるか、またはデータパケット80の一部として提供される)を使用して、行列-ベクトル積演算(本明細書において「乗算」と呼ばれる)を実行することができ、「+」がマークされたコンピューティングエレメント70は、加算または累積演算を実行することができ、「f」がマークされたコンピューティングエレメント70は、変換を実行することができる(例えば、ルックアップテーブルなど)を実行することができる。ターゲットタグTがコンピューティングエレメント70に一致する場合、例えば、コンピューティングエレメント制御回路78がセルフタグSをコンピューティングエレメント識別子Cに一致させることによって、またはノールートNルーティング値R(例えば、ヌル値またはルーティング値のゼロカウント)を識別することによって決定されるように、コンピューティングエレメント70の演算は、コンピューティングエレメント制御回路78によって可能にされるように、演算回路74によってデータ値Dに対して実行される。ターゲットタグTは、コンピューティングエレメント70を通過する際に変更され得、例えば、演算が完了する際のコンピューティングエレメント制御回路78によるコンピューティングエレメント70のリスト、およびデータパケット80がコンピューティングエレメント70のアレイを通過してルーティングされる際のルーティング値Rのリストである。
【0059】
本開示の実施形態において、コンピューティングエレメント70のアレイは、例えばハードウェアにおいて、または例えばハードウェアシステム10のプロセッサ14によって、アレイ内の各コンピューティングエレメント70に設定変数Vを送信することによって、初期化され得る。いくつかの実施形態では、設定変数Vは、(コンピューティングエレメント70がハードワイヤード動作識別子を持たない場合)各コンピューティングエレメント70および関連する動作を識別するセルフタグSを含むことができる。いくつかの実施形態では、セルフタグSは使用されず、設定値Vに含まれず、各コンピューティングエレメント70にハードワイヤードされない。
【0060】
図10に示されるように、外部コンパイラ(例えば、
図1に示されるハードウェアシステム10のプロセッサ14上で実行されるソフトウェアを含む)は、データ値D、使用される場合、コンピューティングエレメント70識別子C、および使用される場合、無経路値Nを含むルーティング情報Rを含むデータパケット80のセットを構築し、ルーティング値Rによってルーティングされるデータ値Dに対して所望の順序で実行される1つまたは複数の演算を指定する1つまたは複数の演算グラフを符号化する。ターゲットタグTは、使用される場合、コンピューティングエレメント70の識別子Cと、例えば、実行されるべき次のコンピューティングエレメント70での演算または使用されるべきルート値Rが、関連するリスト内の最初の値であり、したがって、次のステップのために公開されるターゲットタグT内のリストで提供されるルート値Rと、を含むことができる、次の演算またはコネクション48出力のための現在の値。データパケット80は、(例えば、プロセッサ14によって)データ制御回路24に提供され、データ制御回路24は、(
図4に示されるように)入力バス42上で、または(
図7に示されるように)コネクション48を介して、特定のコンピューティングエレメント70に提供する。受信コンピューティングエレメント制御回路78はそれぞれ、ターゲットタグTで指定されたコンピューティングエレメント70識別子CをセルフタグSと比較するか、またはノールートN値Rを識別する。コンピューティングエレメント制御回路78が一致した場合、指示された演算が実行され、データ値Dが処理され、処理されたデータ値Dが、コネクション48、例えばハードウェアで定義されたコネクション48、設定変数Vで定義されたコネクション48、またはルーティング値Rで定義されたコネクション48に出力される、を削除して、新しいルーティング値Rが公開されるように変更することができる。(リスト内の実際の値は、削除または上書きすることができる。あるいは、いくつかの実施形態では、次のルーティング値Rまたは識別子Cを示すためにリストポインタを使用することができる。)一致しない場合、コンピューティングエレメント70に関連する演算は実行されない。代わりに、ルーティング値RはターゲットタグT内のルーティング値のリストから削除され、変更されたデータパケット80が、削除されたルーティング値Rによって示されるコネクション48上に出力される。
【0061】
元のデータパケット80を構築する責任を負うコンパイラは、データパケット80をルーティングし、所望のコンピューティングエレメント70上で所望の計算を実行するために、一連のルーティング値Rおよびコンピューティングエレメント70識別子C(使用される場合)を設定する。エンドタグEは、処理された出力データ44の値Dが、どの演算回路74によってもそれ以上処理されることなく、ルーティング値Rによって示されるようにアレイを通ってルーティングされ、
図4に示されるように出力バス46を通ってデータ制御回路24、または
図7に示されるようにコネクション48に伝送されることを可能にすることができる。データパケット80は、データ制御回路24によってコンピューティングエレメント70のアレイを通して再循環され、処理を継続することができる。複数のデータパケット80をコンピューティングエレメント70のアレイに同時に導入して、コンピューティングエレメント70をビジー状態に保ち、コンピューティングエレメント70を可能な限り効率的に使用することができる。
【0062】
図10の例は、y=g(f((W
0*x)+(W
1*x))*W
2)の計算を示す。ここで、xは入力ベクトル(入力データ40)であり、yは出力ベクトル(処理済み出力データ44)であり、関数gおよびfは非線形変換である。
図10に示すように、データパケット80のデータ値Dは、関数(W
0*x)および(W
1*x)がそれぞれ実行されるアレイの左上2つのコンピューティングエレメント70に提供される。処理されたデータパケット80は、次に、最初のルーティング値Rによって指定されるように、隣接するボトムコンピューティングエレメント70に渡される。受信コンピューティングエレメント70は、(
図9に示すように)必要な次の加算関数を実行できないため、データパケット80は、次のルーティング値Rによって指定されるように、次のボトムコンピューティングエレメント70にルーティングされ、したがって、
図10の「P」によって示されるパススルー関数が実行される。次の演算は、2つのコンピューティングエレメント70からの入力データ40を必要とする加算であるため、W
0 の積のデータパケット80は、(次のルーティング値Rに従って)右側に伝達される。次に、データパケット80は、次のコンピューティングエレメント70によって上と左から入力され、加算が実行され、ターゲットタグTは、次の演算とルーティング値Rを公開するように修正され、加算の結果は、関数変換fを計算するコンピューティングエレメント70に渡される。再び、セルフタグSとターゲットタグTの公開された演算が一致するので、関数変換fが実行され、処理されたデータ値Dは、次のルーティング値Rに従って、右に送信される。次に、データパケット80は、次の演算、重みW
2を持つ乗算ステップに、後続のルーティング値Rに従って、2回上に送信される。乗算の結果は、関数変換g(x)を実行する最終的なマッチングコンピューティングエレメント70に、次のルーティング値Rによって示されるように、右に渡され、次に2回下に渡される。処理された出力データ44は、データ制御回路24に伝えられ、演算アレイから取り除かれる。
【0063】
一般に、演算は、1つまたは複数のコネクション48からの入力を必要とすることができ、コンピューティングエレメント制御回路78は、コネクション48のいずれか1つまたは複数からの入力データ40を有効にすることができる。さらに、異なるコネクション48からの入力データ40(例えば、データパケット80から)は、異なる時間に到着することができ、コンピューティングエレメント制御回路78は、例えば、値がターゲットタグTにエンコードされ、コンパイラによって指定され得るカウンタを使用して、必要なデータが全て到着するまで、オペレーションを遅延させることができる。さらに、いくつかの実施形態では、コンピューティングエレメント70は、データパケット80を内部に格納する一方で、次のオペレーションに必要でない他のデータパケット80を、例えばメモリノードにルーティングすることができる。したがって、データパケット80は、無関係なオペレーションが行われるために遅延することなく、効率的にルーティングすることができる。
【0064】
図10に示された計算グラフは、
図7に示されたコンピューティングエレメント70のトロイダルアレイを用いて実装することもできる。いくつかのそのような実施形態において、データ値D(入力データ40)およびターゲットタグTを含むデータパケット80は、アレイの外部でコンパイルされ、データ制御回路24(例えば、専用のコンピューティングエレメント70)に(例えば、バスを介して)通信される。データ制御回路24は、データパケット80を、コネクション48を介してアレイ内のコンピューティングエレメント70に通信する。例えば、W
0、W
1、最初の2つの乗算演算は、コンピューティングエレメント70のアレイにおける最上行の左端および右端のコンピューティングエレメント70によって実行することができる。そして、左端のコンピューティングエレメント70の処理データと右端のコンピューティングエレメント70の処理データが、2つのコンピューティングエレメント70の下にシフトされ、右端のデータが1つのコンピューティングエレメント70の右にシフトされ、2つの乗算コンピューティングエレメント70からの処理データが加算される。加算されたデータは、コンピューティングエレメント70が1つ下にシフトされ、変換演算が行われ、その後、上述したような処理が行われる。
【0065】
上述したように、データパケット80の制御フローは、各コンピューティングエレメント70に格納されたセルフタグSと、ターゲットタグTで通信されるコンピューティングエレメント識別子Cとを用いて実装することができる。
図11A~11Jは、そのような実施形態における第1のデータパケット80に関連付けられたターゲットタグTの簡略化された例を示している。
図13A~13Jは、
図11A~11JのようにセルフタグSおよび識別子Cを使用せず、無経路Nルーティング値Rを使用する実施形態を示す。
図11Aに示すように、コンピューティングエレメント70の識別子Cには、コンピューティングエレメント70に関連する関数、「*」(乗算)、「+」(加算)、「f」(関数変換)、「E」(終了タグまたは無演算)、および処理順序を示す添え字が付されている。ルーティング値Rも同様に、順にマークされ、示された方向にコンピューティングエレメント70から延びるコネクション48に対応する「B」(下)、「L」(左)、「R」(右)、「T」(上)で示される。X」は、未使用の任意のルーティング値Rを示す。ルーティング値は、複数ビットのバイナリ値、例えば、コネクション48の各方向を示す2ビット値とすることができる。後述する
図15に示すように、いくつかの単一方向の配置では、2つの可能なコネクション48のうちの1つを選択するには、1ビットで十分である。
【0066】
ターゲットタグTの最初の演算「*」は、左上のコンピューティングエレメント70と一致し、実行される。次に、コンピューティングエレメント制御回路78は、ターゲットタグTから演算とルーティング値「B」を除去し、ターゲットタグTの識別子C部分を別のエンドタグと任意のルーティング値(「X」で示す)で満たし、
図11Bの更新されたターゲットタグTで底部コネクション48上に乗算の結果を出力する。ターゲットタグTの更新は、デジタル回路技術に熟練した者には明らかであるように、デジタル論理でハードワイヤードされるか、マイクロコントローラでファームウェアとして実行されるか、または他の論理回路で実行され得る。次の、露出した演算は「+」であり、コンピューティングエレメント70と一致しないので、
図11Cに示されるように、データパケット80のルーティング値Rのみが修正され、底部コネクション48上に出力される。このコンピューティングエレメント70は、公開された演算「+」に一致し、加算演算が実行され、
図11Dに示すように、演算とルーティング値Rの両方のターゲットタグTが更新された加算データ値Dの結果が、ボトムコネクション48を介してルーティングされる。次の演算「f」も一致し、演算が実行され、
図11Eに示すように、更新されたターゲットタグTを有するデータパケット80が右コネクション48上に出力される。データパケット80は次に、
図11Fおよび
図11Gに示すように、乗算コンピューティングエレメント70に遭遇するために2つのコンピューティングエレメント70の上方にルーティングされる。乗算演算が実行された後、
図11Hに示されるように、結果が右コネクション48を介して送信され、演算値およびルーティング値が更新される。次の2つのコンピューティングエレメント70が公開関数「f」に一致しないので、
図11Iおよび
図11Jに示すように、データパケット80が底部コネクション48を介して2回送信される。「f」演算が実行された後、
図11Kに示されるように、データパケット80は、再び下に送られ、コンピューティングエレメント70の4×4アレイの最上段のコンピューティングエレメント70まで回される。この時点で、データパケット80は再びデータ制御回路24に到達しており、露出した演算は終了タグであるため、データ制御回路24は演算結果を出力する。
【0067】
全体的な動作フローは、
図12のフロー図に示されている(
図7に示されたコンピューティングエレメント70のアレイに対応する)。
図12に示されるように、ステップ100において、入力データ40が、例えばセンサ30からハードウェアシステム10(
図1に示されるように)へ、システムに提供される。入力データ40は、ステップ105において、例えばプロセッサ14によってデータパケット80にコンパイルされる。コンピューティングエレメント70は、ステップ110において設定され(例えば、ハードワイヤードでない場合には、セルフタグSなどの設定値で)、データパケット80は、ステップ115においてデータ制御回路24に送信される。次に、データ制御回路24は、ステップ120において、例えば入力バス42(
図4に示される)またはコネクション48(
図7に示される)を介して、設定されたコンピューティングエレメント70のアレイにデータパケット80を送信する。ステップ125において、現在の露出されたコンピューティングエレメント70の識別子C(例えば、コンピューティングエレメント70の識別子Cのリストの最上位にある現在のコンピューティングエレメント70の識別子C)が、受信コンピューティングエレメント70の能力(例えば、コンピューティングエレメント70の識別子CがセルフタグSに一致する)と一致する場合、演算は、ステップ130において実行され、識別子リストは、ステップ135において更新される。ステップ125において、現在の識別子Cがコンピューティングエレメント70のセルフタグSに一致しない場合、演算は実行されない。データパケット80は、ステップ140でルーティングリストを更新した後、ステップ145でルーティングリストに示されたコネクション48を介して隣接コンピューティングエレメント70にルーティングされる。受信コンピューティングエレメント70がデータ制御回路24である場合、ステップ145でコンピュートグラフが完了し、ステップ150で処理されたデータが出力される。受信コンピューティングエレメント70がデータ制御回路24でない場合(あるいは、データ制御回路24がエンドタグE識別子Cを検出しない場合)、プロセスは、処理されたデータがデータ制御回路24に伝達されるまで継続する。例えば、データ制御回路24は、データ制御回路24が接続されている行において、アレイの一方の側から他方の側にデータをルーティングすることができる。
【0068】
図13A~
図13Jは、
図11A~
図11JのようにセルフタグSおよび識別子Cを使用せず、無経路Nルーティング値Rを使用する実施形態を示す。実施形態において、ルーティング値Rは、ルーティングコネクション48または性能演算(例えば、無経路値N)のいずれかを示す複数ビットのタグであり得る。非限定的な例では、各ルーティング値Rは、2つのビットを有し、00は性能動作を示し、01は第1のコネクション48へのルーティングを示し、10は第2のコネクション48へのルーティングを示し、11はデータパケット80が受信されたコネクション48から時計回りの方向で第3のコネクション48へのルーティングを示す。(この例では、データパケット80は、データパケット80が受信されたコネクション48を通って戻されないが、他の例では、例えば、3ビットのルーティング値Rでは、そのような戻しが可能である)。ルーティング値Rは、順にマークされ、示された方向にコンピューティングエレメント70から延びるコネクション48に対応する「B」(下)、「L」(左)、「R」(右)、「T」(上)で示される。X」は、使用されない任意のルーティング値Rを示す。配線値R(無配線値Nを含む)を使用することにより、(セルフタグが不要なため)単純性が向上し、回路が削減されるなどの利点が得られる。デジタル回路設計技術に精通した者には理解されるように、計算が実行されることを示すために様々な論理機構を提供することができる。例えば、いくつかの他の実施形態では、ルーティング値Rは、コネクション48を介した各送信の後にヌル値(例えば、ルーティングなし値)に置き換えられる。ルーティング値Rのリストがヌル値で満たされると、演算が実行される。本開示の実施形態は、ルーティング値Rおよび無ルート値Nの特定の論理的実装、または計算が実行されることを示す他の表示に限定されない。実施形態によれば、必要なことは、コンピューティングエレメント70が、ターゲットタグTから、コンピューティングエレメント70のコンピューティング動作が実行されることを認識することだけである。この認識により、コンピューティングエレメント70は、ターゲットタグTによって指定されたコンピューティングエレメント70と識別される。
【0069】
図13Aに示すように、第1のルーティング値Rは「N」であるため、第1のコンピューティングエレメント70の演算(
図10において「*」で示す乗算)が実行され、「N」のルーティング値Rがルーティング値Rリストから削除される。任意の値(例えば、「N」個のルーティング値)をリストの一番下に挿入することができる。次のルーティング値Rは「B」(
図13Bに示す)であり、乗算の結果が底部コネクション48を通過し、「B」ルーティング値Rがルーティング値リストから削除されることを示す(
図13Cに示す)。次のルーティング値Rも「B」であり(
図13Cに示される)、データパケット80がボトムコネクション48を通過し、「B」ルーティング値Rがルーティング値リストから削除されることを示す(
図13Dに示される)。次のルーティング値Rは「N」であるため、コンピューティングエレメント70の演算(
図10において「+」で示される加算)が実行され、「N」のルーティング値Rがルーティング値Rリストから削除される。次のルーティング値Rは、加算の結果が底部コネクション48を通過し、ルーティング値リストから「B」ルーティング値Rが削除されることを示す「B」である(
図13Eでは、ルーティング値Rリストから「N」と「B」の両方が削除されて示されている)。次のルーティング値Rは再び「N」であるため、コンピューティングエレメント70の演算が実行され(
図10において「f」で示される変換)、「N」ルーティング値Rがルーティング値Rリストから削除される。次のルーティング値Rは、加算の結果が右コネクション48に渡され、ルーティング値リストRから削除された「R」ルーティング値Rを示す「R」である(
図13Fでは、ルーティング値Rリストから「N」と「R」の両方が削除されて示されている)。次の2つのルーティング値Rは両方とも「T」であり、データパケット80がトップコネクション48を通過して乗算コンピューティングエレメント70に提示され、「T」ルーティング値Rが削除されることを示す(
図13Gに示されるように)。次のルーティング値Rは再び「N」であるため、コンピューティングエレメント70の演算(
図10において「*」で示される乗算)が実行され、「N」のルーティング値Rがルーティング値Rリストから削除される。次のルーティング値Rは、加算の結果が右コネクション48に渡され、ルーティング値リストから「B」ルーティング値Rが削除されることを示す「R」である(
図13Hでは、ルーティング値Rリストから「N」と「R」の両方が削除されて示されている)。次の2つのルーティング値Rは両方とも「B」であり、データパケット80がボトムコネクション48を通過して変換コンピューティングエレメント70に提示され、「B」ルーティング値Rが削除されることを示す(
図13Iに示されるように)。次のルーティング値Rは再び「N」であり、したがって、コンピューティングエレメント70の演算が実行され(
図10において「f」で示される変換)、「N」ルーティング値Rがルーティング値Rリストから削除される。次のルーティング値Rは「B」であり、加算の結果が底部コネクション48を通過し、「B」ルーティング値Rがルーティング値リストから削除されることを示す(
図13Jでは、「N」と「B」の両方がルーティング値Rリストから削除されて示されている)。次の2つのルーティング値Rは両方とも「R」であり、データパケット80が右コネクション48を通過してデータ制御回路24に提示されることを示す。データ制御回路24は、「N」のルーティング値を検出し、データ制御回路24が完了したデータパケット80を出力することを示す。その後、データパケット80の処理が完了し、データパケット80のデータ値Dがコンピューティングエレメント70のアレイから出力される。
図13A~13Jは、アクティブまたは露出されたルーティング値Rがメモリまたはレジスタの最前または最下アドレス位置にあるルーティング値Rのリストを示す。いくつかの実施形態では、アクティブまたは露出されたルーティング値Rは、メモリまたはレジスタ内の後方または最高アドレス位置にある。
【0070】
全体的なデータの流れは、
図14のフロー図に示されている(
図7に示されたコンピューティングエレメント70のアレイに対応する)。
図14に示されるように、ステップ100において、入力データ40が、例えばセンサ30からハードウェアシステム10に(
図1に示されるように)提供される。入力データ40は、ステップ105において、例えばプロセッサ14によってデータパケット80をコンパイルする。コンピューティングエレメント70は、ステップ110において任意に設定され(例えば、設定値で)、データパケット80は、ステップ115においてデータ制御回路24に送信される。次に、データ制御回路24は、ステップ120において、例えば入力バス42(
図4に示される)またはコネクション48(
図7に示される)を介して、設定されたコンピューティングエレメント70のアレイにデータパケット80を送信する。現在のコンピューティングエレメント70が「N」ルーティング値Rを検出した場合、演算はステップ130で実行される。現在のコンピューティングエレメント70が「N」ルーティング値Rを検出しない場合、演算は実行されない。データパケット80は、ステップ140でルーティングリストを更新した後、ステップ145でルーティングリストに示されたコネクション48を介して隣接コンピューティングエレメント70にルーティングされる。受信コンピューティングエレメント70がデータ制御回路24であり、次のルーティング値Rが「N」に等しい場合、ステップ145でコンピュートグラフが完了し、ステップ150で処理されたデータが出力される。受信コンピューティングエレメント70がデータ制御回路24でない場合(あるいは、データ制御回路24が「N」ルーティング値Rを検出しない場合)、プロセスは、処理されたデータがデータ制御回路24に伝達されるまで継続する。例えば、データ制御回路24は、データ制御回路24が接続されている行において、アレイの一方の側から他方の側へデータをルーティングすることができる。
【0071】
複数セットのデータパケット80は、コンパイルされたデータパケット80によって指示されるように、コンピューティングエレメント70のアレイを同時に循環することができ、コンピューティングエレメント70の効率的な使用を可能にする。コンピューティングエレメント70は、各コンピューティングエレメント70に記憶されたプログラムマシンを必要とすることなく、論理回路に直接実装することができるため、コネクション48を介した1つのコンピューティングエレメント70と別のコンピューティングエレメント70との間の通信を含む入力、処理動作、および出力動作は、例えばナノ秒など、非常に高速であり、その結果、極めて高速で電力効率の高いコンピューティングを実現することができる。
【0072】
本開示の実施形態は、多種多様なコンピューティングエレメント70の構成およびコネクション48のアーキテクチャを備える。同様に、本開示の実施形態は、多種多様なコンピューティングエレメント70、例えば、外部システム(例えば、プロセッサ14)と相互作用するデータ制御回路24、演算回路74を含むコンピューティングエレメント70、メモリノードとして機能し、データパケット80をバッファまたは順序付けることができるコンピューティングエレメント70(例えば、シフトレジスタまたはSRAMのようなメモリアレイおよびステートマシンコントローラを備える)またはルーティングノードを含む。
図15は、データ制御回路24に接続されたグリッドの対向する角のコンピューティングエレメント70を有するグリッド配置の一方向コネクション48を含む実施形態を示す。このような実施形態は、より単純であり、より少ないコネクション48を必要とするが、
図7のような他の配置よりも多くのルーティングを必要とする可能性がある。
図16は、より少ないコネクション48を有する、より単純なコンピューティングエレメント70の一次元アレイを図示する。いくつかの実施形態において、および
図17に示されるように、複数のデータ制御回路24は、各々、コンピューティングエレメント70のアレイのサブセットを制御することができる。各サブセットのコンピューティングエレメント70は、1次元または2次元アレイとすることができ、様々な機能、例えば行列-ベクトル積乗算器、アキュムレータ、非線形変換器、およびメモリノードを含むことができる。いくつかの実施形態では、コンピューティングエレメント70は、
図18に示されるように、8つの最近接コンピューティングエレメント70に双方向(任意選択で単方向)コネクション48によって斜めに接続される。斜めコネクション48は、ルーティング通信ステップの数を減らすことができる。いくつかのそのような実施形態では、ルーティング値Rは、3ビット値として記憶され得る。いくつかの構成では、データパケット80は、データパケット80の到着時間を制御するために、異なる経路を使用してルーティングされ得る。
【0073】
図19は、比較的単純なメッセージパッシング回路71がコネクション48で接続され、各メッセージパッシング回路71が、メッセージパッシング回路71に接続された1つ以上のコンピューティングエレメント70にデータパケット80を渡すことができる実施形態を示す。この配置は、コンピューティングエレメント70を単純化することができる。
【0074】
本開示の実施形態において、複数のデータパケット80は、コンピューティングエレメント70のアレイ内を循環することができる。しかしながら、コンピューティングエレメント70のいずれか1つ以上がコンピューティング、ルーティング、または他の方法でアクティブでないとき、コンピューティングアクセラレータ20の電力を節約するために、電力を低減した静止状態に入ることができる。
【0075】
本開示の実施形態によれば、コンピューティングエレメント70の回路は、例えば、半導体ファウンドリでフォトリソグラフィプロセスを使用してシリコン基板または他の半導体材料で作られ、プリント回路基板技術を用いて組み立てられた、デジタルロジックを含む集積回路であり得る。コンピューティングエレメント70は、単一の集積回路で構成することができる。コンピューティングエレメントアレイシステム、例えばコンピューティングアクセラレータ20は、コンピューティングアクセラレータ20を備えた回路に電力を供給し、コンピューティングアクセラレータ20に入力データ40とターゲットタグTを供給する適切な電気信号を供給することによって動作させることができる。
【0076】
本開示の実施形態によれば、行列ベクトル乗算器(MVM)60は、コンピューティングエレメント70(例えば、
図3に示されるような)において、デジタル演算として、またはアナログ演算とともに、またはその組み合わせのいずれかで、行列ベクトル積演算を実行することができる。このようなMVM60は、示された演算を実行するためのデジタル回路およびロジックを備えることができ、またはアナログ回路を備えることができ、またはデジタル回路とアナログ回路との組み合わせを備えてもよい。このようなドット積行列乗算は、ニューラルネットワーク計算における典型的な演算である。いくつかの実施形態では、MVM60は、マルチビットキャパシタアレイと、乗算累積(MAC)機能を提供し、ハードウェアシステム10内のコンピューティングエレメント70のインメモリ計算アーキテクチャの改善された電力効率の基礎を生成するアナログ/デジタルコンバータ98とを含む。マルチビットキャパシタアレイは、本明細書ではqMAC61(「q」は、マルチビットキャパシタアレイ内の電荷Qを指す)として参照され、コンピューティングエレメント70のMVM60においてドット積演算を実装することができる。このようなドット積は、N個の入力値を有する1次元ベクトルの各メンバを、MxN配列のN個の値を有する列の各メンバに乗算し、乗算された値を累積(合計)して、M個の値を有する出力ベクトルをもたらす。MxN配列は、ニューラルネットワークの計算における重み行列となる。Mが1に等しい場合、各1次元Nx1配列の対応する要素が乗算され、それらの値が加算されて単一の値が得られる。本開示のいくつかの実施形態では、ドット積演算は、電力を低減し、乗算の速度を向上させるために、少なくとも部分的にアナログ領域で実行され(例えば、1つまたは複数のキャパシタ内の電荷で)、その結果、性能および電力効率が向上する。
【0077】
図20の実施形態に示されるように、単位容量乗算器90は、例えば重み値Wのような値を記憶するラッチ92を含む。ラッチ92に記憶される値は、例えばキャパシタに記憶される電圧のようなアナログ値であっても、例えばフリップフロップまたはデジタルラッチに記憶される2進値のようなデジタル値であってもよい。スイッチ94(例えば、トランジスタ)は、ラッチ92をキャパシタ96に接続する。スイッチ94は、2つの状態で動作可能なデジタルバイナリスイッチとすることも、例えばバイポーラトランジスタの電圧に応答して連続制御を行うアナログスイッチとすることもできる。スイッチ入力93(例えば、入力40)は、スイッチ94をオンにしてラッチ92からキャパシタ96に電荷を伝導するようにスイッチ94を制御する。ラッチ92がゼロ値を記憶しているか、スイッチ入力93がゼロの場合、電荷は伝導されない。ラッチ92とスイッチ入力93の両方がゼロより大きい値を持つ場合のみ、電荷がキャパシタ96に伝導される。最も単純なケースでは、ラッチ92とスイッチ94は単一ビットである。いくつかの実施形態では、ラッチ92とスイッチ94は、複数のビットを表す電圧を持つか、実質的に連続した電荷でキャパシタ96を充電する連続電圧である。キャパシタ96の出力(電荷Q)は、Q=W*Xとなるようにラッチ92によって乗算されたスイッチ入力93と等価である(そして、例えば、
図3の挿入図に対応する)。
【0078】
完全なMVM60は、qMAC61を生成する複数の単位容量型乗算器90を含むことができる。単位容量マルチプライヤ90のアレイ(例えば、
図3のマルチプライヤの列を表す)の累積(和)は、
図21に示されるように、キャパシタ96を短絡させて電荷Qの全てを累積することによって得られる。この蓄積はほぼ瞬時に行われ(電荷は導体に沿って非常に速く伝搬するため)、ほとんど電力を必要とせず、それによりエネルギーが節約される。入力40(例えば、40A、40B、40C、40D)は、(
図3に示されるように)デジタル-アナログ変換器を用いてデジタル値からアナログ値(例えば、電圧)に変換することができ、出力値は、アナログ-デジタル変換器を用いてアナログ(例えば、電荷)値からデジタル値に変換することができる。いくつかの実施形態では、qMAC61はアナログ配列乗算器である。入力データ40および出力データ44は、オプションの変換回路68によって、ある数学的空間から別の数学的空間へ(例えば、線形から非線形へ、またはその逆へ)変換することができる。この変換は、スイッチ94とラッチ92の特性を補完して乗算動作を可能にするように特別に選択することができる。
【0079】
いくつかの実施形態では、各乗算はデジタル演算として実行され、
図21の各単位乗算素子は、例えば
図22に示されるようなデジタル乗算器である。いくつかのそのような実施形態では、ラッチ92はバイナリ値を記憶し、スイッチ入力93はバイナリ値であり、スイッチ94はバイナリスイッチである。ラッチ92とスイッチ入力93の両方がハイ(正電圧、真値、または1値)のとき、電荷がキャパシタ96に堆積される。積の各ビットの電荷は、例えばキャパシタ96で合計される。結果として得られるデジタル値のビットは、
図23Cに示すように、欠落している単位乗算器にもラベルが付けられた正方行列を仮定すると累積することができ、例えばデジタル回路を用いて、
図23Aおよび
図23Bのように示される(ビットはそれぞれB
yxと記される。yは行であり、xは
図22の単位乗算器の行のビットである)。
図23Aは、論理排他的論理和(XOR)関数と、
図23Bで繰り返し使用される論理積関数(OR関数と共に)を示し、乗算の下位3ビットの各ビットを累積する。デジタル論理設計に精通した者であれば、同様または同様の概念を使用して、任意のビット数を有するデジタル乗算のビット値を計算する論理回路を設計することができる。いくつかの実施形態では、
図20および
図21のキャパシタを高値の抵抗に置き換え、各単位乗算器の出力を、容量和やアナログ-デジタル変換またはデジタル-アナログ変換を行うことなく、電圧として(ラッチ92またはスイッチ94が低い(低電圧を有する)場合はゼロ値として抵抗によってグランドにプルされるか、または両方が高い(高電圧を有する)場合は1値としてプルアップされる)
図23Bの回路に直接供給することができる。
【0080】
本開示の実施形態によれば、
図20に示されるようなデジタル1ビット乗算器の使用は、従来のデジタル論理ANDゲートの使用に勝る利点を提供する。このような実施形態は、デジタルゲートまたは論理回路と比較して、リークを低減したスイッチ94(例えば、トランジスタ)の低電圧領域で動作させることができ、それにより、使用電力を低減することができる。単位乗算器90は高速かつ高頻度で繰り返し使用されるため、このような電力削減により、MVM60が使用する電力を大幅に削減することができる。例えば、
図22のデジタル乗算器構造を使用する
図21に示すような4×4の乗算器アレイは、各乗算を実行するために4×4の単位乗算器90のアレイ、または256(16×16)の乗算器を必要とする。ビット数は通常4よりはるかに大きいので、単位乗算器の数は、本開示の実施形態によって提供される電力節約と同様に、それに応じて大きくなる。例えば、8ビット値では4096(64×64)個の乗算器が必要となり、16ビット値では65536(256×256)個の乗算器が必要となり、32ビット値では1048576(1024×1024)個の乗算器が必要となる。
【0081】
本開示の実施形態によれば、MVM60は、入力ベクトル(例えば、入力データ40)と重み行列との間の乗算の上位ビットのみを計算することができる。ニューラルネットは、入力データの非常に小さな変化に対して非常に弱くしか応答することができないので、行列-ベクトル乗算の下位ビットは無視することができる。したがって、
図22に示されるような計算の下位ビットは無視することができ、乗算を実行するために使用される回路のサイズと電力を低減することができる。
【0082】
本開示のいくつかの実施形態では、累積値またはベクトルのサブセットのみが処理される。行列が繰り返し処理されるネットワークでは、1つまたは複数のベクトル積の乗算からの結果を刈り込みまたは他の方法でダウンサンプリングする(例えば、蓄積された値またはベクトルの全てよりも少ないサブセットを選択する)ことによって、使用される計算の総数およびエネルギーが低減される。いくつかの実施形態では、他の累積値またはベクトルに比べてゼロまたは相対的に小さい結果は、ゼロに設定されるか、または後続の計算から除外される。
【0083】
実施形態の特定の実施態様を説明してきたが、当業者には、本開示の概念を組み込んだ他の実施態様を使用することができることが今や明らかになるだろう。したがって、本開示は、特定の実施態様に限定されるべきではなく、むしろ、以下の特許請求の範囲の精神および範囲によってのみ限定されるべきである。
【0084】
本明細書を通じて、装置およびシステムが特定の要素を有する、含む、または備えるものとして記載される場合、または、プロセスおよび方法が特定のステップを有する、含む、または備えるものとして記載される場合、さらに、開示された要素から本質的に構成される、または構成される開示された技術の装置およびシステムが存在すること、および開示された処理ステップから本質的に構成される、または構成される開示された技術によるプロセスおよび方法が存在することが企図される。
【0085】
開示された技術が動作可能である限り、ステップの順序や特定の動作を実行する順序は重要ではないことを理解すべきである。さらに、状況によっては、2つ以上のステップまたは動作を同時に実施することもできる。本開示は、その特定の実施形態を特に参照して詳細に説明されてきたが、以下の特許請求の範囲の精神および範囲内で、変形および修正が効果的に行われ得ることが理解されるだろう。
【符号の説明】
【0086】
B ビット
C 要素識別子の計算/識別子
D データ値
E エンドタグ
k 定数
N 非ルート
O 演算
Q チャージ
R ルーティング値
S セルフタグ
T ターゲットタグ
W 重み
10 ハードウェアシステム
12 メモリ
14 プロセッサ
20 コンピューティングアクセラレータ
22 割り込み信号
24 データ制御回路
26 入力制御回路
28 出力制御回路
30、30A、30B、30C センサ
32 センサ信号
40、40A、40B、40C、40D、40N 入力/入力データ/入力値
42 入力バス
44 出力/出力データ
46 出力バス
48 接続
50 センサインターフェース回路
52 汎用入出力回路
54 オートマチックゲイン回路
56 内部ロジックとクロックゲーティング
60 インメモリ行列乗算器
61 qMAC
62 非線形変換器
64 アキュムレータ
66 メモリノード
68 変換回路
70 コンピューティングエレメント
72 ストレージ回路
74 演算回路
78 制御回路/コンピューティングエレメント制御回路
80 データパケット
90 単位容量乗数/単位乗数
92 ラッチ
93 スイッチ入力
94 スイッチ
95 ビット加算器
96 キャパシタ
97 デジタルアナログコンバータ
98 アナログデジタルコンバータ
100 入力データステップを提供するステップ
105 データパケットをコンパイルするステップ
110 コンピューティングエレメントを設定するステップ
115 データ制御回路にデータパケットを提供するステップ
120 データパケットをコンピューティングエレメントに送信するステップ
125 露出した演算がコンピューティングエレメントステップと一致するか判定するステップ
127 公開されたルーティング値がNに一致するか判定するステップ
130 演算実行ステップ
135 演算リスト更新ステップ
140 ルーティングリスト更新ステップ
145 コンピューティングエレメントがデータ制御回路と一致するか判定するステップ
147 コンピューティングエレメントがデータ制御回路であり、かつルーティング値がNに一致するか判定するステップ
150 処理データ値を出力するステップ
【国際調査報告】