同様の表示(ラベル)は、同一の素子もしくは同様の素子に参照される。
ここで説明された主題は、コンテキスト情報を含む少なくとも1つのパケットによって構成されたニューラル処理ユニット(NPU)に関する。ここで使用されるように、コンテキスト情報は、ニューラル処理ユニットとしてプロセッサを構成するための情報に言及する。さらに、コンテキスト情報の全部ではないがいくつかは、結合値に基づいて、メモリ内に順次格納されてニューラル処理ユニットによる処理を容易化してもよい。
ニューラル処理ユニットの詳細を説明する前に、ニューラル処理ユニットを使用して実装されたニューロンによって実行された処理に関する説明が以下に提供される。
図1は、ニューラル処理ユニットによって実装されてもよいニューロンAj150を含むシステム100を図示する。図1は単一のニューロン150を図示するが、システム100は、複数のニューロンもまた含んでもよい。
ニューロン150は、(A0−A8に対応する)動作値Ai(t−1)160A−Iに基づいた出力Aj(t)170と、(C0jからC8jまでと表示された)結合Wij165A−Iと、(S0−S8と表示された)入力値110A−Iとを発生してもよい。入力値110A−Iは、他のニューロンの出力から、メモリから、及び/又は例えば電圧値などの値を提供する1つもしくはそれ以上のセンサから受信されてもよい。1つもしくは複数の動作値はホストコンピュータによってもまた提供されてもよいが、動作値Ai(t−1)は、メモリから受信されてもよく、例えば、システム100の(例えば(t−1)におけるなどの)前のサイクルもしくはエポックの前の動作値などの出力に対応してもよい。(重み、結合重み、及び結合値としてまた言及された)結合Wij165A−Iは、メモリから受信されてもよく、及び/もしくはホストコンピュータによって提供されてもよい。
例の目的で例示するために、所定の時間tにおいて、動作値160A−Iの各1つは、対応する結合165A−Iの1つによって乗算される。例えば、結合重みC0j165Aは、動作値A0160Aによって乗算され、結合重みC1j165Bは動作値A1160Bによって乗算される、など。次に、積(すなわち、結合と動作値との乗算の積)は合計され、その結果生じた合計は、基底関数Kによって演算されてノードAj150に対して時間tにおける出力Aj(t)170を得る。出力170は、(例えば(t+1)などにおける)後に続く時間では動作値として使用されてもよい。
システム100は、例えばニューロン150などの複数のニューロンを含んでもよく、各ニューロンは、ここで説明されたニューラル処理ユニット上に実装されてもよい。さらに、ニューロンはあるニューラルモデルに従って構成されてもよく、その例は次式の通りである。
ここで、Kは(例えばシグモイド関数、ウェーブレット関数及び任意の他の基底関数などを含む)基底関数に対応する。
Aj(t)は、所定の時間tにおける、(例えばj番目のニューロンなどの)所定のニューロンによって提供された出力値に対応する。
Ai(t−1)は、前の時間(t−1)における、j番目のニューロンに対する結合iに割り当てられた前の出力値(もしくは動作値)に対応する。
Wijは、j番目のニューロンに対するi番目の結合値を示す。jはニューロンの量に従って変化し、所定のニューロンを識別し、iは0からn―1まで変化し、nはニューロンに対する結合数に対応する。
ここでの説明は、ニューラルモデルの例として(式1)に言及するが、他のモデルがまた使用されてニューロンのタイプを定義してもよい。さらに、いくつかの実施例では、各結合は、複数のニューロンタイプのうちの1つに関連付けされてもよい。例えば、結合Wij165A−Cは、第1のニューロンのタイプに対応する第1のニューラルモデルを実装してもよく、結合Wij165D−Eは、第2のニューロンのタイプに対応する第2のニューラルモデルを実装してもよい。この例では、コンテキスト情報は、結合値及びニューロンのタイプを示す情報を含むであろう。
図2は、例えば図1に関して上述説明されたニューロン150などのニューロンとして動作するように構成されたニューラル処理ユニット200の例示的な実施例を図示する。ニューラル処理ユニット200は、例えばシーケンシャルメモリ205などの第1のメモリと、プロセッサ210と、例えば(SRAMと表示された)スタティックランダムアクセスメモリ215などの第2のメモリと、例えばニューロンを実装するように構成された1つもしくはそれ以上のマイクロエンジン220A−Eなどの1つもしくはそれ以上のプロセッサとを含む。
図2は、単一のニューラル処理ユニット200を図示するが、いくつかの実施例では、システムは複数のニューラル処理ユニットを含んでもよい。例えば、複数のニューラル処理ユニットは、集積回路上及び/もしくは特定用途向け集積回路上に実装されてニューラル処理システムを提供してもよい。
シーケンシャルメモリ205は、例えばランダムアクセスメモリ、ダイナミックランダムアクセスメモリ、ダブルデータレート同期式ダイナミックアクセスメモリ、フラッシュメモリ、強誘電体ランダムアクセスメモリ、機械的な磁気ディスクドライブ、光ドライブなどの任意のタイプのメモリとして実装されてもよい。シーケンシャルメモリ205は、ニューロンとして、例えばマイクロエンジン220Aなどのマイクロエンジンを構成するために必要とされる情報のすべてではないがいくつかを備えたコンテキスト情報を含んでもよい。例えば、シーケンシャルメモリ205は、以下のうちの1つもしくはそれ以上を含むデータ構造を含んでもよい。すなわち、(例えば、j個のニューロンのうちのどのニューロンが構成されたかなどの)ニューロンのアイデンティティ(同一性)、各結合iのための結合値Wij、使用される基底関数Kの指示、及び/もしくは前の動作値Ai(t−1)。
いくつかの実施例では、コンテキスト情報は、パケットフォーマットでシーケンシャルメモリ205から取得される。用語「パケット」は、コンテキスト情報及び/もしくはコンテキスト情報に対するポインタを含むコンテナに言及される。パケットは、結合値及び(例えばニューロンのタイプを構成するための命令、基底関数Kの指示、j番目のニューロンのアイデンティティなどの)他の情報を提供するが、前の動作値Ai(t−1)は、例えばスタティックランダムアクセスメモリ215などのもう1つのメモリから取得される。シーケンシャルメモリ205から読み出されたパケットは、図3A−Bに関して以下に説明されたデータ構造として構成されたコンテキスト情報を含んでもよい。いくつかの実施例では、シーケンシャルメモリ205はまた、ホストコンピュータからコンテキスト情報を受信してもよい。
プロセッサ210には、他のタイプのプロセッサがまた使用されてもよいが、例えば超長命令語(VLIW)をハンドリングするように構成された中央処理ユニットなどの任意のタイプのプロセッサとして実装されてもよい。プロセッサ210は、シーケンシャルメモリ205から、(1つもしくはそれ以上のパケットとしてフォーマットされた)コンテキスト情報を格納してもよいし、及び/又は検索してもよい。
(クラスタとしてもまた言及された)1つもしくはそれ以上の追加的なニューラル処理ユニットは、プロセッサ210からコンテキスト情報を受信してもよいし、及び/又は結合230を介してコンテキスト情報をプロセッサ210に提供してもよい。プロセッサ210はまた、例えばスタティックランダムアクセスメモリ215から、前の動作値Ai(t−1)などの中間値を検索してもよい。
プロセッサ210は、メモリ205から取得されたコンテキスト情報及び(例えばスタティックランダムアクセスメモリ215から取得された前の動作値Ai(t−1)などの)任意の中間値を含むパケットをマイクロエンジンに対してルーティングしてニューロンとしてマイクロエンジンを構成してもよい。
いくつかの実施例では、メモリ205内のコンテキスト情報は、図3A−Bに関して以下にさらに説明されるように、シーケンシャルブロック内に編成される。メモリ205内のコンテキスト情報は、メモリ205内のシーケンシャルブロックから読み出されてニューロンとしてマイクロエンジンを構成する。さらに、もしシステムが複数のニューロンを含むならば、プロセッサ210は、コンテキスト情報を含むパケットのセットを各マイクロエンジン220A−Eにルーティングして、例えば上記(式1)のニューラルモデルなどのモデルに従って動作するニューロンとして各マイクロエンジンを構成してもよい。さらに、マイクロエンジンの構成及び実行は、結合、ニューロン、及び/もしくはエポックそれぞれに対して時間にわたって繰り返されてもよい。
各マイクロエンジン220A−Eは、例えば中央処理ユニット、減少された命令セットのプロセッサなどのプロセッサとして実装されてもよい。減少された命令セットのプロセッサを用いた実施例では、減少された命令セットのプロセッサの機能性は制限されてもよく、それ故に、例えば集積回路などのチップ上に使用されたスペース/サイズを減少させる。任意のケースでは、ニューロンがマイクロエンジンにおいて実装されることを可能とするために、マイクロエンジン220A−Eはそれぞれ、プロセッサ210によって提供されたコンテキスト情報によって構成されてもよい。
図3Aは、例えばシーケンシャルメモリ205などのシーケンシャルメモリ内に格納されたデータ構造300の例を図示する。図3Aの例では、シーケンシャルメモリは、データ構造300の終わりまで順次読み出される及び/もしくは書き込まれるブロック310A−Bのコンテキスト情報を格納するように構成され、次に読み出し及び書き込みが、例えばブロック310Aなどのメモリの初めにおいて再び始まるであろう。ブロック310A−Bは、ニューラル処理システムの複数のニューロンのそれぞれに対応する。
例えば、j番目のニューロンなどの所定のニューロンに対して、ブロック310Aは、コンテキスト情報を格納してもよい。特に、ブロック310Aは、ニューロンのタイプ320を定義する情報を含んでもよい。そのタイプ320は、ニューロンの種類及び当該ニューロンをどのように実行すべきかを定義する。例えば、タイプ320は、(式1)により定義されるニューラルモデルを定義してもよく、もしくは、基底関数Kはj番目のニューロンによって使用される。この例では、ニューロンタイプは、マイクロエンジンがコンテキスト情報を処理し出力を発生することが可能となるようにマイクロエンジン内にロードされた、対応するコードセットを有してもよい。さらに、いくつかの実施例では、システムがコンテキスト情報において指示されたニューロンのタイプに対する対応するコードセットを有するマイクロエンジンを構成するように、複数のニューロンタイプがサポートされる。
ブロック310A内のコンテキスト情報はまた、シーケンシャルメモリ内で使用されたアドレス330を含んでブロック310Aを格納してもよい。もし例えば学習及び可塑性に対する重みを変更するなどによってブロック310Aのコンテンツが変更されるならば、アドレス330はシーケンシャルメモリに対するライトバックを可能とさせる。ブロック310A内のコンテキスト情報はまた、ブロック310Aのニューロンの所定の結合に関連付けされた動作アドレス340を含んでもよい。例えば、動作アドレス340は、スタティックランダムアクセスメモリ215から、ブロック310A内で使用される結合に対する動作値のローディングを可能としてもよい。ブロック310Aはまた、350A−Nを使用した結合値を含んでもよい。例えば、10個の結合を有する所定のニューロンjに対して、ブロック310Aは、W0jからW9jに対応する10個の結合値を含むであろう。
データ構造300は、ニューラル処理システムによって実装された各ニューロンに対して、例えばブロック310Bなどの他のブロックを含んでもよい。データ構造300の使用が、各ニューロンに対する(パケットベースのフォーマットでフォーマットされた)コンテキスト情報の順次読み出しを可能とし次にマイクロエンジンにおいてそれらのニューロンの構成及び実行を可能とさせてもよい。いくつかの実施例では、データ構造300はもし取り除かなければ減少させてもよく、非効率的なランダムメモリは、マイクロエンジンのニューロンの実行の間に、マイクロエンジンによってメモリ205及び215に対して読み出される。
図3Bは、シーケンシャルメモリ内に格納されたデータ構造305のもう1つの例を図示する。図3Bの例では、各ブロック390A−Cは、ニューロンに対して、単一の結合値を含んでもよい。特に、ニューロンの第1の結合値のセットのすべてが実行のために構成されてしまうまでなどは、ブロック390Aは、第1の結合350A及び第1のニューロンを構成するための他のコンテキスト情報320−340を含み、ブロック390Bは、第1の結合値333及び第2のニューロンを構成するための他のコンテキスト情報を含む。一旦実行されると、出力動作値は、例えばスタティックランダムアクセスメモリ215内に格納されてもよく、次にニューロンに対する次の結合のセットが処理される。ブロック390Cは、第2の結合350B及び第1のニューロンを構成するための他のコンテキスト情報を含む。一旦第2の結合値によって構成されると、ニューロンに対する第2の結合のセットが処理され、出力動作値のもう1つのセットが得られる。このプロセスは、すべての結合が処理されるまでニューロンに対する各結合に対して反復されてもよく、その時、当該プロセスはデータ構造305のブロック390Aにおける第1の結合からスタートすることを繰り返す。
いくつかの実施例では、データ構造300及び305は、プロセッサがニューラルモデルを実行し、そのモデルを実行するために必要とされるデータを検索するときのメモリアクセスの量を減少させてもよい。例えば、ここで説明されたデータ構造に従って構成されない典型的なマイクロプロセッサにおいては、当該マイクロプロセッサは、例えば0からnまでの、1からiまでの、及び1からjまでのインデキシングによって、(式1)のニューラルモデルを実行するために、メモリからデータの広範囲に及ぶランダムなフェッチを必要とするであろう。対照的に、ここで説明されたマイクロエンジンは、いくつかの実施例では、例のデータ構造300及び305において図示されたメモリ内のコンテキスト情報を順次に順序付けすることによって、メモリからランダムなフェッチをもし取り除かなければ減少させてもよい。さらに、システム200のランダムなフェッチは、いくつかの実施例では、スタティックランダムアクセスメモリ215から動作値を検索するプロセッサ205に制限されてもよい。いくつかの実施例では、例えばプロセッサ210などの第1のプロセッサは、上述されたインデキシングと関連付けされたメモリ205及び215からすべてのメモリフェッチをハンドリングし、例えばマイクロエンジンなどの第2のプロセッサは、メモリ205及び215にアクセスすることなしにニューロンを実装する。さらに、マイクロエンジンは、(図5に関して以下にさらに説明された)そのレジスタメモリからアクセスされたデータを用いてニューロンを動作させるように構成されてもよい。さらに、第1のプロセッサ及び第2のプロセッサを含むシステムは、いくつかの実施例では、特に、例えば(式1)などの例えばニューラルモデルと関連するスパース行列のコンテキストにおいて効率的な処理を容易化してもよい。
図4は、ここで説明されたニューラル処理システムによって実装されるプロセス400を図示する。図4の説明はまた、図2及び図3A−Bを参照してなされる。
492では、プロセッサ210は、メモリ205から順次読み出されてもよい。この順次読み出しには、コンテキスト情報を含む複数のパケットの少なくとも1つを、メモリ205内の連続的なアドレスのブロックから読み出すことを含んでもよい。例えば、データは、図3A−Bに関して説明されたようにブロックにおいて順次読み出されてもよい。コンテキスト情報は、例えば(式1)などのニューラルモデルに従ってニューロンとしてマイクロエンジンを構成するための情報を含んでもよい。例えば、シーケンシャルメモリ205から受信されたパケットは、結合値及び(例えば、ニューロンタイプを指示する命令、動作値などの)他の情報を提供してニューロンを構成してもよい。
493では、プロセッサ210はまた、スタティックランダムアクセスメモリ215から前の動作値Ai(t−1)を読み出してもよい。図3A−Bを参照すると、プロセッサ210は、結合値350A、ニューロンタイプ320、シーケンシャルメモリ内のアドレス330、及びスタティックランダムアクセスメモリ215内のアドレス340を含むパケットを受信してもよい。次に、プロセッサ210は、スタティックランダムアクセスメモリ215をロケーションするためにアドレス340を使用してもよく、その場合は結合値350Aに対応する動作値を決定するためのルックアップテーブルを使用してもよい。
494では、プロセッサ210は、コンテキスト情報及び動作値をマイクロエンジンに対して転送してマイクロエンジンを構成してもよい。例えば、プロセッサ210は、(例えば、結合値350A、ニューロンタイプ320などの)コンテキスト情報と、スタティックランダムアクセスメモリ215から取得された動作値を含む少なくとも1つのパケットとを、マイクロエンジン220Aに転送してもよい。マイクロエンジンは少なくとも1つのパケットを受信するとき、マイクロエンジン220Aは、(例えば、ニューロンタイプ320によって指示されたニューロンタイプに対するコードセット/命令をロードすることなどによって、)ニューロンタイプに基づいてそれ自身を構成し、次に結合値350A、動作値、及びマイクロエンジンに提供されてもよい他のコンテキスト情報を用いてニューロンを実行してもよい。
496では、構成された少なくとも1つのマイクロエンジンは、所定の時間tの間に、例えばAj(t)などの出力を発生する。その出力Aj(t)はまた、出力Aj(t)をスタティックランダムアクセスメモリ215もしくは他のニューラル処理ユニット230に対してルーティングしてもよいプロセッサ210に提供されてもよい。当該プロセッサ290は、システムの、結合、ニューロン、及び/もしくはエポックのそれぞれに対して反復されてもよい。
図5は、ニューラル処理ユニット500のもう1つの例示的な実施例を図示する。ニューラル処理ユニット500は、いくつかの点ではシステム200に類似するが、メモリインターフェース505と、アプリケーションインターフェース510と、ディスパッチャ520とをさらに含む。メモリインターフェース505は、シーケンシャルメモリ205及びプロセッサ210に結合され、アプリケーションインターフェース510は、プロセッサ210及び、マイクロエンジン220A−Eにさらに結合されたディスパッチャ520に結合される。
メモリインターフェース505は、シーケンシャルメモリ205に対するアクセスを制御する。例えば、メモリインターフェース505は、メモリ205内に順次索引付けしてプロセッサ210に送信されたコンテキスト情報の次のパケットを検索してもよい。
プロセッサ210はさらにルータとして構成されてもよい。プロセッサ210は、シーケンシャルメモリ205及び/もしくはメモリ215から、パケットフォームでコンテキスト情報を受信する場合、その場合には、プロセッサ210は、パケットベースのコンテキスト情報をマイクロエンジンにルーティングしてニューロンとしてマイクロエンジンを構成してもよい。ニューロンが実行された後、パケットプロセッサ210はまた、マイクロエンジンによって発生された出力値Aj(t)を受信してもよい。次に、受信された出力値Aj(t)は、結合565A−Dを介して他のニューラル処理ユニットに提供されてもよく、及び/もしくは例えばスタティックランダムアクセスメモリ215などのメモリ内に格納されてもよい。
システム500を構成するためのホストコンピュータからのデータの初期ロードの間、プロセッサ210は、ホストコンピュータからデータのブロックを、例えばシーケンシャルメモリ205内のシーケンシャルロケーション並びに例えばスタティックランダムアクセスメモリ215、結合565A−Dを介して他の隣接したニューラル処理ユニット、及び/もしくは1つもしくはそれ以上のマイクロエンジン220A−Eなどの他のロケーションに移動させてもよい。
マイクロエンジンにおけるニューロンの実行の間、プロセッサ210は、結合重みを動作値とマッチングさせてもよい。例えば、プロセッサ210は、シーケンシャルメモリ205から、j番目のニューロンのi番目の結合に対する結合重みWijを含むパケットを受信してもよい。次に、i番目の結合に対して、プロセッサ210は、結合重みWijを、スタティックランダムアクセスメモリ215内に格納された、前の動作値Ai(t−1)とマッチングさせてもよい。いくつかの実施例では、ルックアップテーブルが、結合重みWijのそれぞれをスタティックランダムアクセスメモリ215内に格納された、対応する動作値Ai(t−1)とマッチングさせるために使用される。
アプリケーションインターフェース510は、各マイクロエンジン220A−Eに対してインターフェースを提供する。いくつかの実施例では、アプリケーションインターフェース510は、スタティックランダムアクセスメモリ215から、受信されたパケット内に含まれた結合値をマッチングさせる動作値をフェッチしてもよい。マッチング動作値のアドレスは、プロセッサ210から受信されたパケット内に含まれてもよい。例えば、マッチング動作アドレスのアドレスは、ニューロンスタティックランダムアクセスメモリ動作アドレス340としてパケット内に格納されてもよい。その場合は、(例えばニューロンタイプ、結合値、動作値などの)コンテキスト情報を含むパケットは、マイクロエンジンに転送される。
ディスパッチャ520は、アプリケーションインターフェース510及びマイクロエンジン220A−E間で交換されたパケットに対してハンドリングしてキューイングするパケットを提供する。いくつかの実施例では、ディスパッチャ520は、コンテキスト情報を含むパケットに対して、宛先マイクロエンジンを選択する。ディスパッチャ520はまた、コンテキスト情報を有したマイクロエンジンのレジスタを含むマイクロエンジンをロードしてもよく、マイクロエンジン220A−Eからの出力データを、他のニューラル処理ユニット、スタティックランダムアクセスメモリ215、及び/もしくはシーケンシャルメモリ205に送信してもよい。
ニューラル処理ユニット500は、(ノース、イースト、ウエスト及びサウスと表示された)結合565A−Dを介して、他のニューラル処理ユニットに接続されてもよい。例えば、ニューラル処理ユニット500は、(例えばユニット500のニューラル処理ユニットノース、ユニット500のニューラル処理ユニットサウス、ユニット500のニューラル処理ユニットイースト及びユニット500のニューラル処理ユニットウエストなどの)4つの他のニューラル処理ユニットに対する結合565A−Dを有してもよい。さらに、他のニューラル処理ユニットのそれぞれは、4つの他のニューラル処理ユニットに結合されてもよく、いくつかの実施例では、各ニューラル処理ユニットは、1つもしくはそれ以上の特定用途向けの集積回路上に実装されてもよい。
図6は、ニューラル処理ユニット660A−Dを含むシステム600の例を図示する。各ニューラル処理ユニットは、(DDR2と表示された)シーケンシャルメモリ632と、メモリコントローラ634と、メモリインターフェース636と、アプリケーションインターフェース640と、スタティックランダムアクセスメモリ642と、ディスパッチャ644と、複数の(NMEと表示された)マイクロエンジン646とを含んでもよい。
図6に図示された実施例では、各ニューラル処理ユニット660A−Dは、プロセッサ210に関して上述説明されたように実装されてもよいルータ610に結合される。しかしながら、ルータ610は、いくつかの実施例では、例えばメモリインターフェース及びアプリケーションインターフェースなどの入力と出力との間の、複数の並列パスを提供する、ノンブロッキングの、クロスバーパケットルータとしてさらに構成されてもよい。
ニューラル処理ユニット660A内の素子に関する説明を以下に提供するが、他のニューラル処理ユニット660B−Dが、ニューラル処理ユニット660Aと同様の方法で構成されてもよい。さらに、ニューラル処理ユニット660A−Dを含むシステム600は、例えば特定用途向け集積回路(ASIC)などのチップ上に実装されてもよく、4つのニューラル処理ユニット660A−Dだけが図6で図示されるが、システム600はまた、他の量のニューラル処理ユニットを含んでもよい。
シーケンシャルメモリ632は、シーケンシャルメモリ205に関して上述説明されたように実装されてもよい。図6の例では、シーケンシャルメモリ632は、他のタイプのメモリがまた使用されてもよいが、ダブルデータレート同期式ダイナミックアクセスメモリとして実装されてもよい。シーケンシャルメモリ632からの読み出し及びシーケンシャルメモリ632への書き込みを可能とするために、シーケンシャルメモリ632は、メモリコントローラ634に電気的に結合されてもよい。
メモリコントローラ634は、シーケンシャルメモリ632からの読み出し及びシーケンシャルメモリ632への書き込みを制御してもよい。コンテキスト情報は、シーケンシャルメモリ632のシーケンシャルアドレス内に格納されてもよく、コンテキスト情報は、パケットベースのフォーマットで、メモリ632から読み出されてもよく、もしくはメモリ632へ書き込まれてもよい。パケットベースのフォーマットが実装される場合、パケットは、メモリインターフェース636に対する電気的結合を介して、ルータ610に対して提供されてもよいし、もしくはルータ610から受信されてもよい。さらに、メモリコントローラ634は、いくつかの実施例では、例えばメモリ632などのメモリから取得されたデータからパケットを発生し、発生されたパケットをルータ610に送信するインターフェースを提供してもよい。メモリコントローラ634はまた、ルータ610からパケットを受信してパケットのコンテンツをメモリ632に書き込んでもよい。スタティックランダムアクセスメモリ、ダイナミックランダムアクセスメモリから、より高い永続的性を有する光学的な記憶機構までの範囲に及ぶ異なるタイプのメモリがメモリ632において使用されてもよいが、使用されたメモリのタイプにもかかわらず、メモリコントローラ634はパケットをハンドリングしてパケットに対してメモリのためのアドレスを指定する。
メモリインターフェース636は、上述されたメモリインターフェース505と同様の方法で実装されてもよい。図6の例では、メモリインターフェース636は、メモリコントローラ634に対して送信されたパケットもしくはメモリコントローラ634から受信されたパケットをバッファリングしてもよい。
ルータ610は、660A−Dにおける各アプリケーションインターフェース及び結合692A−Cに対して電気的に結合されてもよい。結合692A−Cは、例えば他のニューラル処理ユニット、メモリ、ホストコンピュータなどの他のデバイスに対する結合を提供してもよい。いくつかの実施例では、結合692Cは、PCIインターフェースとして実装されて1秒あたり132メガビットまでの速度でルータ610に対する(及びルータ610からの)データ転送を可能としてもよい。結合692Cはまた、システム600のために、データをロードすること、データをデバッグすること、及びデータを処理することをハンドリングしてもよい。例えば、結合692A−Cは、システム600をホストコンピュータに結合するために使用されてもよい。ホストコンピュータは、動作値を含むコンテキスト情報を提供し、マイクロエンジンによって発生された出力値を受信し、各マイクロエンジン対してコードを提供してニューロンとしてマイクロエンジンを構成してもよい。
アプリケーションインターフェース640は、アプリケーションインターフェース510と同様の方法で実装されてもよい。しかしながら、図6における例では、アプリケーションインターフェース640は、スタティックランダムアクセスメモリ642及びディスパッチャ644に電気的に結合されてもよい。スタティックランダムアクセスメモリ642は、スタティックランダムアクセスメモリ215と同様の方法で実装されてもよく、ディスパッチャ644は、ディスパッチャ520と同様の方法で実装されてもよい。ディスパッチャ644は、マイクロエンジン210A−Eと同様の方法で実装されてもよい、複数の(NMEと表示された)マイクロエンジン646に電気的に結合される。
図7は、ここで説明されたニューラル処理システムによって実装されてもよいプロセス700を図示する。プロセス700の説明はまた、図3A−B及び図6を参照するであろう。
793では、メモリコントローラ634は、メモリ632のシーケンシャルアドレスからデータを読み出してもよい。この読み出し動作は、ニューラルモデルに従って、ニューロンとしてマイクロエンジンを構成するために、コンテキスト情報を含む複数のパケットの少なくとも1つを読み出すことを含んでもよい。メモリコントローラ634は、1つもしくは複数の読み出しパケットをメモリインターフェース636に提供してもよく、ここで1つもしくは複数のパケットは、ルータ610に提供される前にキューイングされてもよい。メモリコントローラ634はまた、例えばルータ610から受信されたパケットなどのデータをメモリ632に対して書き込むことを制御してもよい。
794では、ルータ610は、複数のパケットの少なくとも1つをメモリインターフェース636から受信し、次に受信されたパケットを660A−Dにおけるアプリケーションインターフェースの1つに提供してもよい。例えば、ルータ610は、j番目のニューロンのi番目の結合に対する結合重みWijを含む少なくとも1つのパケットを、アプリケーションインターフェース640に対してルーティングしてもよい。
797では、アプリケーションインターフェースは、メモリからマッチング動作値をフェッチしてもよい。例えば、アプリケーションインターフェース640は、結合重みを前の動作値Ai(t−1)とマッチングさせ、その場合は例えばスタティックランダムアクセスメモリ642などのメモリからマッチング動作値をフェッチしてもよい。受信された各パケットに対して、アプリケーションインターフェース640は、パケット内に含まれた結合重みWijを読み出し、次にスタティックランダムアクセスメモリ642内に格納されたマッチング動作値を決定してもよい。上述されたように、アプリケーションインターフェース640は、どの動作値をフェッチすべきであるかを指示するルックアップテーブルに基づいてマッチングを決定してもよい。
次に、798では、例えばアプリケーションインターフェース640などのアプリケーションインターフェースは、(例えば結合重みWij、マッチング動作値Ai(t−1)などの)コンテキスト情報を、例えばディスパッチャ644などのディスパッチャに提供してもよい。次に、ディスパッチャ644は、このコンテキスト情報をマイクロエンジン646の1つに提供してニューロンとしてマイクロエンジンを構成する。
799では、構成されたマイクロエンジンは、例えばAj(t)などの出力を発生する。出力Aj(t)は、ディスパッチャ644と、出力Aj(t)をスタティックランダムアクセスメモリ642もしくは他のニューラル処理ユニット660B−Dに提供してもよいアプリケーションインターフェース640とに提供されてもよい。プロセス700は、ニューロンの各結合に対して反復されてもよく、ニューラル処理システムの各ニューロンに対して反復されてもよい。さらに、プロセス700は、複数のエポックに対して反復されてもよい。
図8は、マイクロエンジン220A−E及び/もしくはマイクロエンジン646において使用されてもよいマイクロエンジン800の例を図示する。マイクロエンジン800は、レジスタメモリ820と、中央処理ユニット830と、プログラムメモリ850とを含んでもよい。マイクロエンジン800は、マイクロエンジン800がディスパッチャ520からコンテキスト情報、動作値などを含むパケットを受信し、ディスパッチャ520に対して出力動作を提供することができるように、ディスパッチャ520に対して電気的に結合されてもよい。
いくつかの実施例では、マイクロエンジン800は、例えば図3Bに図示されたブロック390Aなどのコンテキスト情報を含むパケットを受信する。マイクロエンジン800は、レジスタ820内にブロック390Aを格納する。その場合は、マイクロエンジン800は、プログラムメモリ850にアクセスして例えばプログラムコードなどの命令を取得してレジスタ820内に格納されたブロック390Aのコンテキスト情報によって指示されたニューラルタイプ320に従ってマイクロエンジンを構成してもよい。次に、マイクロエンジン800は、レジスタ820において格納されたブロック内に含まれた、(例えば、動作値及び結合値などの)コンテキスト情報を用いて命令を実行する。その場合は、出力は、ディスパッチャ520に送信され、ここで、それは、例えばスタティックランダムアクセスメモリなどのもう1つのデバイス、もう1つのニューラル処理ユニット、及び/もしくはホストコンピュータに対してさらにルーティングされてもよい。出力は、後に続く時間では動作値として使用されてもよい。
レジスタ820は、ディスパッチャ520から、例えば図3A−Bに関して上述されたように構造化されたコンテキスト情報を受信してもよい。レジスタ820はまた、制御ステータスレジスタ(CSR)と、累積レジスタと、プログラムカウンタ(PC)と、多数のスクラッチパッドレジスタとを含んでもよい。レジスタ820は、少なくともデータ構造300及び305並びに/又は図3A−Bで図示されたデータ構造300及び305のブロックのうちの少なくとも1つを格納するのに十分な記憶スペースを含むように実装されてもよい。レジスタ820はまた、ディスパッチャ520がレジスタ820のバンクの1つの中に書き込むことが可能となる一方で中央処理ユニット830がレジスタ820の他のバンクから読み出して実行することが可能となるように、2つの同一のレジスタバンクを含むピンポン構成で実装されてもよい。
マイクロエンジン800は、マイクロエンジンにおいて実装された可能なニューラルモデルのセットを定義する(例えば、コードなどの)命令のセットを含んでもよい。従って、(プログラムメモリ850内に格納されてもよい)命令のセットは、マイクロエンジンを構成してコード化して複数のニューロンタイプの少なくとも1つとして動作するように使用されてもよい。さらに、命令のセットは、マイクロエンジン間で移植されて構成を容易化してもよい。マイクロエンジン800に対するコードはまた、アセンブリ言語プログラムをハンドリングしてマイクロエンジン内にローディングするためにそのプログラムをバイナリーコードファイルに変換するためにアセンブラを使用してもよい。例えば、ニューラルアセンブラは、コマンドラインを介して起動してマイクロエンジン内にローディングするためにアセンブリコードプログラムを受け取ってアセンブリコードをバイナリファイルに変換してもよい。
図9は、ここでハイブとして言及されたシステム900を図示する。(NPUとしてそれぞれが表示された)ニューラル処理ユニットは、2次元グリッドレイアウトにおいて相互接続されてもよい。いくつかの実施例では、単一のメモリバスを共有する複数のプロセッサと比較すると、2次元グリッド構造は、処理電力は増加するかもしれない。ニューラル処理ユニット間の相互接続は、高速シリアルデータ線を提供する電気的な相互接続として実装されてもよい。ホストインターフェース990は、ニューラル処理ユニットとホストコンピュータ992との間をインターフェースしてもよい。例えば、ホストインターフェース990は、パケットをハイブの中に通過させ、ニューラル処理ユニット間で交換されたパケットを読み出し、ニューラル処理ユニット間で送信されたパケットを妨害してもよい。各ニューラル処理ユニットは、各ニューラル処理ユニットのロケーショニング及び/もしくはアドレッシングを可能とするための固有の識別子を有してもよい。
ここで説明された主題は、所望された構成によるシステム、装置、方法及び/または物において具現化されてもよい。特に、ここで説明された主題の種々の実施例は、デジタル電子回路、集積回路、特別に設計されたASIC(特定用途向け集積回路)、コンピュータハードウエア、ファームウェア、ソフトウェア、及び/又はそれらの組み合わせにおいて利用されてもよい。これらの種々の実施例は、特別なもしくは一般的な目的であってもよい、記憶システム、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスからのデータ及び命令を受信するために、並びに記憶システム、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスにデータ及び命令を送信するために結合された、少なくとも1つのプログラマブルプロセッサを含むプログラマブルシステムに対して実行可能な及び/又はインタプリタ可能である1つもしくはそれ以上のコンピュータプログラムにおける実施例を含んでもよい。
(プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリケーション、コンポーネント、又はコードとしてもまた知られた)これらのコンピュータプログラムは、プログラマブルプロセッサに対する機械命令を含み、高水準手続き及び/もしくはオブジェクト指向のプログラミング言語において、並びに/又はアセンブリ/機械言語において実装されてもよい。ここで使用されたように、用語「機械可読媒体」は、機械命令及び/又はデータをプログラマブルプロセッサに提供するために使用された任意のコンピュータプログラム製品、装置及び/もしくは(例えば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(PLD)などの)デバイスに言及し、機械可読信号として機械命令を受信する機械可読媒体を含む。
同様に、プロセッサ及び当該プロセッサに結合されたメモリを含んでもよいシステムがまたここで説明される。メモリは、プロセッサがここで説明された1つもしくはそれ以上の動作を実行させる1つもしくはそれ以上のプログラムを含んでもよい。
さらに、ここで説明されたシステムは、ニューラル処理のコンテキスト内であるが、ここで説明されたシステムは、例えば有限要素解析及びフィルターバンク処理などを含む他の環境において使用されてもよい。さらに、用語「セット」は、空のセットを含む任意の量に言及してもよい。
数個の変形例が詳細に上述されたが、他の変更もしくは追加が可能である。特に、さらなる特徴及び/又は変形例が、ここで説明された特徴及び/又は変形例に加えて提供されてもよい。例えば、上述された実施例は、開示された特徴の種々のコンビネーション及びサブコンビネーション並びに/又は上記開示されたいくつかのさらなる特徴のコンビネーション及びサブコンビネーションに対して指示されてもよい。さらに、添付された図面において図示された及び/又はここで説明されたロジックフローは、所望される結果を獲得するために、表示された特定の順番、もしくは順次の順番を必要としない。以下の特許請求の範囲の範囲内で他の実施形態が可能である。