(57)【要約】  ここで開示された主題は、ニューラルベースの処理のための製造の方法、装置及び物を提供する。１つの態様では方法が提供される。当該方法は、少なくとも１つの結合値に基づいて格納されたコンテキスト情報を第１のメモリから読み出すステップと、少なくとも１つの結合値をマッチングさせる動作値を第２のメモリから読み出すステップと、第１のプロセッサによって、コンテキスト情報及び動作値を複数のマイクロエンジンの少なくとも１つに対して送信して少なくとも１つのマイクロエンジンをニューロンとして構成するステップと、少なくとも１つのマイクロエンジンにおいて、ニューロンの出力を示す値を発生するステップとを含んでもよい。関連した装置、システム、方法及び物がまた説明される。
2013529342.tif 000002
【特許請求の範囲】
【請求項１】
第１のメモリから、少なくとも１つの結合値に基づいて格納されたコンテキスト情報を読み出すステップと、
第２のメモリから、上記少なくとも１つの結合値をマッチングさせる動作値を読み出すステップと、
第１のプロセッサによって、上記コンテキスト情報及び上記動作値を複数のマイクロエンジンの少なくとも１つに対して送信してニューロンとして上記少なくとも１つのマイクロエンジンを構成するステップと、
上記少なくとも１つのマイクロエンジンにおいて、上記ニューロンの出力を示す値を発生するステップとを含むことを特徴とする方法。
【請求項２】
上記第１のメモリから読み出すステップはさらに、
上記複数のマイクロエンジンにおいて実装されたニューロンに対する結合値に基づいて、メモリ内に順次格納された上記コンテキスト情報を含むデータ構造を読み出すステップを含むことを特徴とする請求項１記載の方法。
【請求項３】
上記データ構造は、複数のブロックを含み、
上記複数のブロックのそれぞれは、
上記ニューロンにおける実行を定義するタイプと、
上記少なくとも１つの結合値を含む上記コンテキスト情報が格納された上記第１のメモリ内のロケーションを示す第１のアドレスと、
上記動作値が格納された上記第２のメモリ内のロケーションを示す第２のアドレスとを含むことを特徴とする請求項１記載の方法。
【請求項４】
上記データ構造は、複数のシーケンシャルブロックを含み、
上記複数のシーケンシャルブロックのそれぞれは、
結合値と、
上記複数のマイクロエンジンの１つにおいて実装された対応するニューロンを定義するニューロンタイプとを含むことを特徴とする請求項１記載の方法。
【請求項５】
上記各シーケンシャルブロックは、上記複数のマイクロエンジンのうちの少なくとも１つに対してパケットとして送信され、
上記複数のマイクロエンジンのそれぞれは、少なくとも１つのプロセッサと少なくとも１つのメモリとを備えたことを特徴とする請求項４記載の方法。
【請求項６】
上記データ構造は、複数のシーケンシャルブロックを含み、
上記各シーケンシャルブロックは、対応するニューロンに対して、ニューロンタイプ及び複数の結合値を含むことを特徴とする請求項１記載の方法。
【請求項７】
上記第１のプロセッサは、上記第１のメモリからの読み出すステップを可能とするために、上記第１のメモリに対して結合されたことを特徴とする請求項１記載の方法。
【請求項８】
上記発生するステップは、上記少なくとも１つのマイクロエンジンにおいて、上記第１のメモリ及び上記第２のメモリにアクセスすることなしに、上記コンテキスト情報及び上記動作値に基づいて上記値を発生して追加的なコンテキスト情報を取得するステップを含むことを特徴とする請求項１記載の方法。
【請求項９】
上記第１のメモリ及び上記第２のメモリは、集積回路の同一のメモリ内に実装されたことを特徴とする請求項１記載の方法。
【請求項１０】
上記値を、少なくとも上記第２のメモリに送信するステップをさらに含んだことを特徴とする請求項１記載の方法。
【請求項１１】
少なくとも１つの結合値に基づいて格納されたコンテキスト情報を含む第１のメモリと、
上記少なくとも１つの結合値をマッチングさせる動作値を含む第２のメモリと、
上記第１のメモリから読み出された上記コンテキスト情報と、上記第２のメモリから読み出された上記動作値とを送信するように構成された第１のプロセッサと、
上記第１のメモリから読み出された上記コンテキスト情報と、上記第２のメモリから読み出された上記動作値とを受信して少なくとも１つのニューロンのセットの出力を示す少なくとも１つの値を発生するように構成された少なくとも１つの第２のセットのプロセッサとを備えたことを特徴とする装置。
【請求項１２】
上記第１のメモリはさらに、
上記第２のセットのプロセッサにおいて実装された上記少なくとも１つのニューロンのセットに対する結合値に基づいてメモリ内に順次格納された上記コンテキスト情報を含むデータ構造を備えたことを特徴とする請求項１１記載の装置。
【請求項１３】
上記データ構造は、複数のブロックを含み、
上記複数のブロックのそれぞれは、
ニューロンタイプと、
上記コンテキスト情報が格納された上記第１のメモリ内のロケーションを示す第１のアドレスと、
上記動作値が格納された上記第２のメモリ内のロケーションを示す第２のアドレスとを含むことを特徴とする請求項１１記載の装置。
【請求項１４】
少なくとも１つのプログラマブルプロセッサによって実行されるときに上記少なくとも１つのプログラマブルプロセッサが、
第１のメモリから、少なくとも１つの結合値に基づいて格納されたコンテキスト情報を読み出すステップと、
第２のメモリから、少なくとも１つの結合値とマッチングさせる動作値を読み出すステップと、
第１のプロセッサによって、上記コンテキスト情報及び上記動作値を複数のマイクロエンジンの少なくとも１つに対して送信してニューロンとして上記少なくとも１つのマイクロエンジンを構成するステップと、
上記少なくとも１つのマイクロエンジンにおいて、上記ニューロンの出力を示す値を発生するステップとを含む動作を実行することができる命令を格納する機械可読媒体を備えたことを特徴とするコンピュータプログラム製品。
【請求項１５】
上記第１のメモリから読み出すステップはさらに、
上記複数のマイクロエンジンにおいて実装されたニューロンに対する結合値に基づいて、メモリ内に順次格納された上記コンテキスト情報を含むデータ構造を読み出すステップを含むことを特徴とする請求項１４記載のコンピュータプログラム製品。
【請求項１６】
上記データ構造は、複数のブロックを含み、
上記複数のブロックのそれぞれは、上記ニューロンにおける実行を定義するタイプと、
上記少なくとも１つの結合値を含む上記コンテキスト情報が格納された上記第１のメモリ内のロケーションを示す第１のアドレスと、
上記動作値が格納された上記第２のメモリ内のロケーションを示す第２のアドレスとを含むことを特徴とする請求項１４記載のコンピュータプログラム製品。
【請求項１７】
各ブロックがニューロンに対する少なくとも１つの結合値と上記ニューロンのタイプを示す情報とを含むブロック内に格納されたコンテキスト情報を含む第１のメモリと、
上記第１のメモリをインターフェースし、上記第１のメモリから読み出すこと及び上記第１のメモリに対して書き込むことのうちの少なくとも１つを制御するメモリコントローラと、
上記コンテキスト情報を転送し、さらに上記メモリコントローラ及び上記第１のメモリからの上記コンテキスト情報を受信するように構成された第１のプロセッサと、
上記第１のプロセッサによって転送された上記コンテキスト情報を受信し、複数の動作値のうちの少なくとも１つを上記少なくとも１つの結合値とマッチングさせ、上記マッチングする上記複数の動作値の少なくとも１つをフェッチし、上記フェッチされた上記複数の動作値の少なくとも１つ及び上記少なくとも１つの結合値を転送するように構成されたインターフェースと、
上記転送された上記複数の動作値の少なくとも１つと上記少なくとも１つの結合値とを受信し、少なくとも１つのセットのニューロンとして構成された少なくとも１つの第２のセットのプロセッサの出力を示す少なくとも１つの値を発生するように構成された上記少なくとも１つの第２のセットのプロセッサとを備えたことを特徴とする装置。
【請求項１８】
少なくとも１つのプログラマブルプロセッサによって実行されるときに上記少なくとも１つのプログラマブルプロセッサが、
第１のメモリから、各ブロックがニューロンに対する少なくとも１つの結合値及び上記ニューロンのタイプを示す情報を含むブロック内に格納されたコンテキスト情報を読み出すステップと、
上記第１のメモリをインターフェースするメモリコントローラにおいて、上記第１のメモリから読み出すこと及び上記第１のメモリに書き込むことのうちの少なくとも１つを制御するステップと、
上記コンテキスト情報をインターフェースに転送するように構成された第１のプロセッサにおいて、上記第１のメモリコントローラ及び上記第１のメモリから上記コンテキスト情報を受信するステップと、
上記インターフェースにおいて、上記第１のプロセッサによって転送された上記コンテキスト情報を受信するステップと、
上記インターフェースにおいて、複数の動作値の少なくとも１つを上記少なくとも１つの結合値とマッチングさせるステップと、
上記インターフェースにおいて、上記マッチングする複数の動作値の少なくとも１つをフェッチするステップと、
上記インターフェースにおいて、上記フェッチされた複数の動作値の少なくとも１つ及び上記少なくとも１つの結合値を転送するステップと、
１つもしくはそれ以上の第２のセットのプロセッサにおいて、上記転送された複数の動作値のうちの少なくとも１つ及び上記転送された少なくとも１つの結合値を受信するステップと、
上記１つもしくはそれ以上の第２のセットのプロセッサにおいて、出力を発生するステップとを含む動作を実行することができる命令を格納する機械可読媒体を備えたことを特徴とするコンピュータプログラム製品。
【請求項１９】
第１のメモリから、各ブロックがニューロンに対する少なくとも１つの結合値及び上記ニューロンのタイプを示す情報を含むブロック内に格納されたコンテキスト情報を読み出すステップと、
上記第１のメモリをインターフェースするメモリコントローラにおいて、上記第１のメモリから読み出すこと及び上記第１のメモリに書き込むことのうちの少なくとも１つを制御するステップと、
上記コンテキスト情報をインターフェースに転送するように構成された第１のプロセッサにおいて、上記第１のメモリコントローラ及び上記第１のメモリから上記コンテキスト情報を受信するステップと、
上記インターフェースにおいて、上記第１のプロセッサによって転送された上記コンテキスト情報を受信するステップと、
上記インターフェースにおいて、複数の動作値のうちの少なくとも１つを上記少なくとも１つの結合値とマッチングさせるステップと、
上記インターフェースにおいて、上記マッチングする複数の動作値のうちの少なくとも１つをフェッチするステップと、
上記インターフェースにおいて、上記フェッチされた複数の動作値のうちの少なくとも１つ及び上記少なくとも１つの結合値を転送するステップと、
１つもしくはそれ以上の第２のセットのプロセッサにおいて、上記転送された複数の動作値のうちの少なくとも１つ及び上記転送された少なくとも１つの結合値を受信するステップと、
上記１つもしくはそれ以上の第２のセットのプロセッサにおいて、出力を発生するステップとを含むことを特徴とする方法。
【請求項２０】
少なくとも１つの結合値に基づいて格納されたコンテキスト情報を読み出すための手段と、
上記少なくとも１つの結合値をマッチングさせる動作値を読み出すための手段と、
上記コンテキスト情報及び上記動作値を、複数のマイクロエンジンのうちの少なくとも１つに対して送信して上記少なくとも１つのマイクロエンジンをニューロンとして構成するための手段と、
上記ニューロンの出力を示す値を発生するための手段とを備えたことを特徴とする装置。
【発明の詳細な説明】
【技術分野】
【０００１】
ここで説明された主題は、データ処理に関し、特にニューラルベースの処理に関する。
【０００２】
関連出願の相互参照
この出願は、２０１０年５月１９日出願の発明の名称“ニューラル処理ユニット”を有する米国仮出願第６１／３４６，４４１号の利益を主張し、それがその全体において参照によりここで組み込まれる。
【背景技術】
【０００３】
ニューラルベースのデータ処理は、ニューロン、樹状突起、及び／もしくは軸索の挙動を定義する種々のニューラルモデルに基づいて実装されてもよい。いくつかの例では、ニューラルベースのデータ処理は、非常に多数の並列ニューロン及びそれらのニューロン間の結合を用いて実装されてもよい。ニューラルベースの処理のこの並列性は、例えばデータ処理、信号処理、予測、分類などのタスクを処理するのに十分に適している。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで開示された主題は、ニューラル処理のための製造の方法、装置、及び物を提供する。
【課題を解決するための手段】
【０００５】
一態様では、方法が提供される。当該方法は、第１のメモリから、少なくとも１つの結合値に基づいて格納されたコンテキスト情報を読み出すステップと、第２のメモリから、少なくとも１つの結合値とマッチングさせる動作値を読み出すステップと、第１のプロセッサによって、コンテキスト情報及び動作値を、複数のマイクロエンジンの少なくとも１つに送信して上記少なくとも１つのマイクロエンジンをニューロンとして構成するステップと、上記少なくとも１つのマイクロエンジンにおいて、ニューロンの出力を示す値を発生するステップとを含んでもよい。
【０００６】
方法の実施態様は、１つもしくはそれ以上の以下の特徴を含む、ここで説明された１つもしくはそれ以上の特徴を含む。第１のメモリから読み出すステップは、複数のマイクロエンジンで実装されたニューロンのための結合値に基づいて、メモリ内に順次格納されたコンテキスト情報を含むデータ構造を読み出すステップをさらに含んでもよい。データ構造は、複数のブロックを含んでもよく、複数のブロックのそれぞれは、ニューロンにおける実行を定義するタイプと、少なくとも１つの結合値を含むコンテキスト情報が格納された第１のメモリでのロケーションを示す第１のアドレスと、動作値が格納された第２のメモリでのロケーションを示す第２のアドレスとを含む。データ構造は、複数のシーケンシャルブロックを含んでもよく、複数のシーケンシャルブロックのそれぞれは、結合値と、複数のマイクロエンジンの１つで実装された、対応するニューロンを定義するニューロンタイプとを含む。シーケンシャルブロックは、複数のマイクロエンジンの少なくとも１つに対して、パケットとして送信されてもよく、複数のマイクロエンジンのそれぞれは、少なくとも１つのプロセッサと少なくとも１つのメモリとを含んでもよい。データ構造は、複数のシーケンシャルブロックを含んでもよく、シーケンシャルブロックのそれぞれは、ニューロンタイプと、対応するニューロンに対する複数の結合値とを含む。第１のプロセッサは、第１のメモリからの読み出しを可能とするために、第１のメモリに対して結合されてもよい。その値は、追加的なコンテキスト情報を取得するために、第１のメモリ及び第２のメモリにアクセスすることなしにコンテキスト情報及び動作値に基づいて、少なくとも１つのマイクロエンジンにおいて発生されてもよい。第１のメモリ及び第２のメモリは、集積回路の同一のメモリ内に実装されてもよい。発生された値は、少なくとも第２のメモリに送信されてもよい。
【０００７】
１つもしくはそれ以上の（例えば、コンピュータなどの）機械がここで説明された動作が得られるように動作可能な、タンジブルに具現化された機械可読媒体を備えた物がまた説明される。同様に、プロセッサと、当該プロセッサに結合されたメモリを含むシステムがまた説明される。メモリは、プロセッサにここで説明された１つもしくはそれ以上の動作を実行させる１つもしくはそれ以上のプログラムを含んでもよい。
【０００８】
ここで説明された主題に対する１つもしくはそれ以上の変形例の詳細が、添付図面及び以下の説明文において説明される。ここで説明された主題の特徴及び利点は、説明文、図面及び特許請求の範囲から明らかとなろう。
【図面の簡単な説明】
【０００９】
【図１】ニューロンのブロック図を図示する。
【図２】ニューラル処理ユニット（ＮＰＵ）のブロック図を図示する。
【図３Ａ】コンテキスト情報を順次格納するためのデータ構造の例を図示する。
【図３Ｂ】コンテキスト情報を順次格納するためのデータ構造の例を図示する。
【図４】コンテキスト情報に基づいてニューロンを構成するためのプロセスを図示する。
【図５】ニューラル処理ユニットのもう１つのブロック図を図示する。
【図６】複数のニューラル処理ユニットを含むシステムのブロック図を図示する。
【図７】ニューロンを構成するためのもう１つのプロセスを図示する。
【図８】コンテキスト情報に基づいてニューロンを実装するように構成されたマイクロエンジンの例を図示する。
【図９】複数のニューラル処理ユニットを含むシステムのブロック図を図示する。
【発明を実施するための形態】
【００１０】
同様の表示（ラベル）は、同一の素子もしくは同様の素子に参照される。
【００１１】
ここで説明された主題は、コンテキスト情報を含む少なくとも１つのパケットによって構成されたニューラル処理ユニット（ＮＰＵ）に関する。ここで使用されるように、コンテキスト情報は、ニューラル処理ユニットとしてプロセッサを構成するための情報に言及する。さらに、コンテキスト情報の全部ではないがいくつかは、結合値に基づいて、メモリ内に順次格納されてニューラル処理ユニットによる処理を容易化してもよい。
【００１２】
ニューラル処理ユニットの詳細を説明する前に、ニューラル処理ユニットを使用して実装されたニューロンによって実行された処理に関する説明が以下に提供される。
【００１３】
図１は、ニューラル処理ユニットによって実装されてもよいニューロンＡｊ１５０を含むシステム１００を図示する。図１は単一のニューロン１５０を図示するが、システム１００は、複数のニューロンもまた含んでもよい。
【００１４】
ニューロン１５０は、（Ａ０−Ａ８に対応する）動作値Ａｉ（ｔ−１）１６０Ａ−Ｉに基づいた出力Ａｊ（ｔ）１７０と、（Ｃ０ｊからＣ８ｊまでと表示された）結合Ｗｉｊ１６５Ａ−Ｉと、（Ｓ０−Ｓ８と表示された）入力値１１０Ａ−Ｉとを発生してもよい。入力値１１０Ａ−Ｉは、他のニューロンの出力から、メモリから、及び／又は例えば電圧値などの値を提供する１つもしくはそれ以上のセンサから受信されてもよい。１つもしくは複数の動作値はホストコンピュータによってもまた提供されてもよいが、動作値Ａｉ（ｔ−１）は、メモリから受信されてもよく、例えば、システム１００の（例えば（ｔ−１）におけるなどの）前のサイクルもしくはエポックの前の動作値などの出力に対応してもよい。（重み、結合重み、及び結合値としてまた言及された）結合Ｗｉｊ１６５Ａ−Ｉは、メモリから受信されてもよく、及び／もしくはホストコンピュータによって提供されてもよい。
【００１５】
例の目的で例示するために、所定の時間ｔにおいて、動作値１６０Ａ−Ｉの各１つは、対応する結合１６５Ａ−Ｉの１つによって乗算される。例えば、結合重みＣ０ｊ１６５Ａは、動作値Ａ０１６０Ａによって乗算され、結合重みＣ１ｊ１６５Ｂは動作値Ａ１１６０Ｂによって乗算される、など。次に、積（すなわち、結合と動作値との乗算の積）は合計され、その結果生じた合計は、基底関数Ｋによって演算されてノードＡｊ１５０に対して時間ｔにおける出力Ａｊ（ｔ）１７０を得る。出力１７０は、（例えば（ｔ＋１）などにおける）後に続く時間では動作値として使用されてもよい。
【００１６】
システム１００は、例えばニューロン１５０などの複数のニューロンを含んでもよく、各ニューロンは、ここで説明されたニューラル処理ユニット上に実装されてもよい。さらに、ニューロンはあるニューラルモデルに従って構成されてもよく、その例は次式の通りである。
【００１７】
【数１】
2013529342.tif 000003
【００１８】
ここで、Ｋは（例えばシグモイド関数、ウェーブレット関数及び任意の他の基底関数などを含む）基底関数に対応する。
【００１９】
Ａｊ（ｔ）は、所定の時間ｔにおける、（例えばｊ番目のニューロンなどの）所定のニューロンによって提供された出力値に対応する。
【００２０】
Ａｉ（ｔ−１）は、前の時間（ｔ−１）における、ｊ番目のニューロンに対する結合ｉに割り当てられた前の出力値（もしくは動作値）に対応する。
【００２１】
Ｗｉｊは、ｊ番目のニューロンに対するｉ番目の結合値を示す。ｊはニューロンの量に従って変化し、所定のニューロンを識別し、ｉは０からｎ―１まで変化し、ｎはニューロンに対する結合数に対応する。
【００２２】
ここでの説明は、ニューラルモデルの例として（式１）に言及するが、他のモデルがまた使用されてニューロンのタイプを定義してもよい。さらに、いくつかの実施例では、各結合は、複数のニューロンタイプのうちの１つに関連付けされてもよい。例えば、結合Ｗｉｊ１６５Ａ−Ｃは、第１のニューロンのタイプに対応する第１のニューラルモデルを実装してもよく、結合Ｗｉｊ１６５Ｄ−Ｅは、第２のニューロンのタイプに対応する第２のニューラルモデルを実装してもよい。この例では、コンテキスト情報は、結合値及びニューロンのタイプを示す情報を含むであろう。
【００２３】
図２は、例えば図１に関して上述説明されたニューロン１５０などのニューロンとして動作するように構成されたニューラル処理ユニット２００の例示的な実施例を図示する。ニューラル処理ユニット２００は、例えばシーケンシャルメモリ２０５などの第１のメモリと、プロセッサ２１０と、例えば（ＳＲＡＭと表示された）スタティックランダムアクセスメモリ２１５などの第２のメモリと、例えばニューロンを実装するように構成された１つもしくはそれ以上のマイクロエンジン２２０Ａ−Ｅなどの１つもしくはそれ以上のプロセッサとを含む。
【００２４】
図２は、単一のニューラル処理ユニット２００を図示するが、いくつかの実施例では、システムは複数のニューラル処理ユニットを含んでもよい。例えば、複数のニューラル処理ユニットは、集積回路上及び／もしくは特定用途向け集積回路上に実装されてニューラル処理システムを提供してもよい。
【００２５】
シーケンシャルメモリ２０５は、例えばランダムアクセスメモリ、ダイナミックランダムアクセスメモリ、ダブルデータレート同期式ダイナミックアクセスメモリ、フラッシュメモリ、強誘電体ランダムアクセスメモリ、機械的な磁気ディスクドライブ、光ドライブなどの任意のタイプのメモリとして実装されてもよい。シーケンシャルメモリ２０５は、ニューロンとして、例えばマイクロエンジン２２０Ａなどのマイクロエンジンを構成するために必要とされる情報のすべてではないがいくつかを備えたコンテキスト情報を含んでもよい。例えば、シーケンシャルメモリ２０５は、以下のうちの１つもしくはそれ以上を含むデータ構造を含んでもよい。すなわち、（例えば、ｊ個のニューロンのうちのどのニューロンが構成されたかなどの）ニューロンのアイデンティティ（同一性）、各結合ｉのための結合値Ｗｉｊ、使用される基底関数Ｋの指示、及び／もしくは前の動作値Ａｉ（ｔ−１）。
【００２６】
いくつかの実施例では、コンテキスト情報は、パケットフォーマットでシーケンシャルメモリ２０５から取得される。用語「パケット」は、コンテキスト情報及び／もしくはコンテキスト情報に対するポインタを含むコンテナに言及される。パケットは、結合値及び（例えばニューロンのタイプを構成するための命令、基底関数Ｋの指示、ｊ番目のニューロンのアイデンティティなどの）他の情報を提供するが、前の動作値Ａｉ（ｔ−１）は、例えばスタティックランダムアクセスメモリ２１５などのもう１つのメモリから取得される。シーケンシャルメモリ２０５から読み出されたパケットは、図３Ａ−Ｂに関して以下に説明されたデータ構造として構成されたコンテキスト情報を含んでもよい。いくつかの実施例では、シーケンシャルメモリ２０５はまた、ホストコンピュータからコンテキスト情報を受信してもよい。
【００２７】
プロセッサ２１０には、他のタイプのプロセッサがまた使用されてもよいが、例えば超長命令語（ＶＬＩＷ）をハンドリングするように構成された中央処理ユニットなどの任意のタイプのプロセッサとして実装されてもよい。プロセッサ２１０は、シーケンシャルメモリ２０５から、（１つもしくはそれ以上のパケットとしてフォーマットされた）コンテキスト情報を格納してもよいし、及び／又は検索してもよい。
【００２８】
（クラスタとしてもまた言及された）１つもしくはそれ以上の追加的なニューラル処理ユニットは、プロセッサ２１０からコンテキスト情報を受信してもよいし、及び／又は結合２３０を介してコンテキスト情報をプロセッサ２１０に提供してもよい。プロセッサ２１０はまた、例えばスタティックランダムアクセスメモリ２１５から、前の動作値Ａｉ（ｔ−１）などの中間値を検索してもよい。
【００２９】
プロセッサ２１０は、メモリ２０５から取得されたコンテキスト情報及び（例えばスタティックランダムアクセスメモリ２１５から取得された前の動作値Ａｉ（ｔ−１）などの）任意の中間値を含むパケットをマイクロエンジンに対してルーティングしてニューロンとしてマイクロエンジンを構成してもよい。
【００３０】
いくつかの実施例では、メモリ２０５内のコンテキスト情報は、図３Ａ−Ｂに関して以下にさらに説明されるように、シーケンシャルブロック内に編成される。メモリ２０５内のコンテキスト情報は、メモリ２０５内のシーケンシャルブロックから読み出されてニューロンとしてマイクロエンジンを構成する。さらに、もしシステムが複数のニューロンを含むならば、プロセッサ２１０は、コンテキスト情報を含むパケットのセットを各マイクロエンジン２２０Ａ−Ｅにルーティングして、例えば上記（式１）のニューラルモデルなどのモデルに従って動作するニューロンとして各マイクロエンジンを構成してもよい。さらに、マイクロエンジンの構成及び実行は、結合、ニューロン、及び／もしくはエポックそれぞれに対して時間にわたって繰り返されてもよい。
【００３１】
各マイクロエンジン２２０Ａ−Ｅは、例えば中央処理ユニット、減少された命令セットのプロセッサなどのプロセッサとして実装されてもよい。減少された命令セットのプロセッサを用いた実施例では、減少された命令セットのプロセッサの機能性は制限されてもよく、それ故に、例えば集積回路などのチップ上に使用されたスペース／サイズを減少させる。任意のケースでは、ニューロンがマイクロエンジンにおいて実装されることを可能とするために、マイクロエンジン２２０Ａ−Ｅはそれぞれ、プロセッサ２１０によって提供されたコンテキスト情報によって構成されてもよい。
【００３２】
図３Ａは、例えばシーケンシャルメモリ２０５などのシーケンシャルメモリ内に格納されたデータ構造３００の例を図示する。図３Ａの例では、シーケンシャルメモリは、データ構造３００の終わりまで順次読み出される及び／もしくは書き込まれるブロック３１０Ａ−Ｂのコンテキスト情報を格納するように構成され、次に読み出し及び書き込みが、例えばブロック３１０Ａなどのメモリの初めにおいて再び始まるであろう。ブロック３１０Ａ−Ｂは、ニューラル処理システムの複数のニューロンのそれぞれに対応する。
【００３３】
例えば、ｊ番目のニューロンなどの所定のニューロンに対して、ブロック３１０Ａは、コンテキスト情報を格納してもよい。特に、ブロック３１０Ａは、ニューロンのタイプ３２０を定義する情報を含んでもよい。そのタイプ３２０は、ニューロンの種類及び当該ニューロンをどのように実行すべきかを定義する。例えば、タイプ３２０は、（式１）により定義されるニューラルモデルを定義してもよく、もしくは、基底関数Ｋはｊ番目のニューロンによって使用される。この例では、ニューロンタイプは、マイクロエンジンがコンテキスト情報を処理し出力を発生することが可能となるようにマイクロエンジン内にロードされた、対応するコードセットを有してもよい。さらに、いくつかの実施例では、システムがコンテキスト情報において指示されたニューロンのタイプに対する対応するコードセットを有するマイクロエンジンを構成するように、複数のニューロンタイプがサポートされる。
【００３４】
ブロック３１０Ａ内のコンテキスト情報はまた、シーケンシャルメモリ内で使用されたアドレス３３０を含んでブロック３１０Ａを格納してもよい。もし例えば学習及び可塑性に対する重みを変更するなどによってブロック３１０Ａのコンテンツが変更されるならば、アドレス３３０はシーケンシャルメモリに対するライトバックを可能とさせる。ブロック３１０Ａ内のコンテキスト情報はまた、ブロック３１０Ａのニューロンの所定の結合に関連付けされた動作アドレス３４０を含んでもよい。例えば、動作アドレス３４０は、スタティックランダムアクセスメモリ２１５から、ブロック３１０Ａ内で使用される結合に対する動作値のローディングを可能としてもよい。ブロック３１０Ａはまた、３５０Ａ−Ｎを使用した結合値を含んでもよい。例えば、１０個の結合を有する所定のニューロンｊに対して、ブロック３１０Ａは、Ｗ０ｊからＷ９ｊに対応する１０個の結合値を含むであろう。
【００３５】
データ構造３００は、ニューラル処理システムによって実装された各ニューロンに対して、例えばブロック３１０Ｂなどの他のブロックを含んでもよい。データ構造３００の使用が、各ニューロンに対する（パケットベースのフォーマットでフォーマットされた）コンテキスト情報の順次読み出しを可能とし次にマイクロエンジンにおいてそれらのニューロンの構成及び実行を可能とさせてもよい。いくつかの実施例では、データ構造３００はもし取り除かなければ減少させてもよく、非効率的なランダムメモリは、マイクロエンジンのニューロンの実行の間に、マイクロエンジンによってメモリ２０５及び２１５に対して読み出される。
【００３６】
図３Ｂは、シーケンシャルメモリ内に格納されたデータ構造３０５のもう１つの例を図示する。図３Ｂの例では、各ブロック３９０Ａ−Ｃは、ニューロンに対して、単一の結合値を含んでもよい。特に、ニューロンの第１の結合値のセットのすべてが実行のために構成されてしまうまでなどは、ブロック３９０Ａは、第１の結合３５０Ａ及び第１のニューロンを構成するための他のコンテキスト情報３２０−３４０を含み、ブロック３９０Ｂは、第１の結合値３３３及び第２のニューロンを構成するための他のコンテキスト情報を含む。一旦実行されると、出力動作値は、例えばスタティックランダムアクセスメモリ２１５内に格納されてもよく、次にニューロンに対する次の結合のセットが処理される。ブロック３９０Ｃは、第２の結合３５０Ｂ及び第１のニューロンを構成するための他のコンテキスト情報を含む。一旦第２の結合値によって構成されると、ニューロンに対する第２の結合のセットが処理され、出力動作値のもう１つのセットが得られる。このプロセスは、すべての結合が処理されるまでニューロンに対する各結合に対して反復されてもよく、その時、当該プロセスはデータ構造３０５のブロック３９０Ａにおける第１の結合からスタートすることを繰り返す。
【００３７】
いくつかの実施例では、データ構造３００及び３０５は、プロセッサがニューラルモデルを実行し、そのモデルを実行するために必要とされるデータを検索するときのメモリアクセスの量を減少させてもよい。例えば、ここで説明されたデータ構造に従って構成されない典型的なマイクロプロセッサにおいては、当該マイクロプロセッサは、例えば０からｎまでの、１からｉまでの、及び１からｊまでのインデキシングによって、（式１）のニューラルモデルを実行するために、メモリからデータの広範囲に及ぶランダムなフェッチを必要とするであろう。対照的に、ここで説明されたマイクロエンジンは、いくつかの実施例では、例のデータ構造３００及び３０５において図示されたメモリ内のコンテキスト情報を順次に順序付けすることによって、メモリからランダムなフェッチをもし取り除かなければ減少させてもよい。さらに、システム２００のランダムなフェッチは、いくつかの実施例では、スタティックランダムアクセスメモリ２１５から動作値を検索するプロセッサ２０５に制限されてもよい。いくつかの実施例では、例えばプロセッサ２１０などの第１のプロセッサは、上述されたインデキシングと関連付けされたメモリ２０５及び２１５からすべてのメモリフェッチをハンドリングし、例えばマイクロエンジンなどの第２のプロセッサは、メモリ２０５及び２１５にアクセスすることなしにニューロンを実装する。さらに、マイクロエンジンは、（図５に関して以下にさらに説明された）そのレジスタメモリからアクセスされたデータを用いてニューロンを動作させるように構成されてもよい。さらに、第１のプロセッサ及び第２のプロセッサを含むシステムは、いくつかの実施例では、特に、例えば（式１）などの例えばニューラルモデルと関連するスパース行列のコンテキストにおいて効率的な処理を容易化してもよい。
【００３８】
図４は、ここで説明されたニューラル処理システムによって実装されるプロセス４００を図示する。図４の説明はまた、図２及び図３Ａ−Ｂを参照してなされる。
【００３９】
４９２では、プロセッサ２１０は、メモリ２０５から順次読み出されてもよい。この順次読み出しには、コンテキスト情報を含む複数のパケットの少なくとも１つを、メモリ２０５内の連続的なアドレスのブロックから読み出すことを含んでもよい。例えば、データは、図３Ａ−Ｂに関して説明されたようにブロックにおいて順次読み出されてもよい。コンテキスト情報は、例えば（式１）などのニューラルモデルに従ってニューロンとしてマイクロエンジンを構成するための情報を含んでもよい。例えば、シーケンシャルメモリ２０５から受信されたパケットは、結合値及び（例えば、ニューロンタイプを指示する命令、動作値などの）他の情報を提供してニューロンを構成してもよい。
【００４０】
４９３では、プロセッサ２１０はまた、スタティックランダムアクセスメモリ２１５から前の動作値Ａｉ（ｔ−１）を読み出してもよい。図３Ａ−Ｂを参照すると、プロセッサ２１０は、結合値３５０Ａ、ニューロンタイプ３２０、シーケンシャルメモリ内のアドレス３３０、及びスタティックランダムアクセスメモリ２１５内のアドレス３４０を含むパケットを受信してもよい。次に、プロセッサ２１０は、スタティックランダムアクセスメモリ２１５をロケーションするためにアドレス３４０を使用してもよく、その場合は結合値３５０Ａに対応する動作値を決定するためのルックアップテーブルを使用してもよい。
【００４１】
４９４では、プロセッサ２１０は、コンテキスト情報及び動作値をマイクロエンジンに対して転送してマイクロエンジンを構成してもよい。例えば、プロセッサ２１０は、（例えば、結合値３５０Ａ、ニューロンタイプ３２０などの）コンテキスト情報と、スタティックランダムアクセスメモリ２１５から取得された動作値を含む少なくとも１つのパケットとを、マイクロエンジン２２０Ａに転送してもよい。マイクロエンジンは少なくとも１つのパケットを受信するとき、マイクロエンジン２２０Ａは、（例えば、ニューロンタイプ３２０によって指示されたニューロンタイプに対するコードセット／命令をロードすることなどによって、）ニューロンタイプに基づいてそれ自身を構成し、次に結合値３５０Ａ、動作値、及びマイクロエンジンに提供されてもよい他のコンテキスト情報を用いてニューロンを実行してもよい。
【００４２】
４９６では、構成された少なくとも１つのマイクロエンジンは、所定の時間ｔの間に、例えばＡｊ（ｔ）などの出力を発生する。その出力Ａｊ（ｔ）はまた、出力Ａｊ（ｔ）をスタティックランダムアクセスメモリ２１５もしくは他のニューラル処理ユニット２３０に対してルーティングしてもよいプロセッサ２１０に提供されてもよい。当該プロセッサ２９０は、システムの、結合、ニューロン、及び／もしくはエポックのそれぞれに対して反復されてもよい。
【００４３】
図５は、ニューラル処理ユニット５００のもう１つの例示的な実施例を図示する。ニューラル処理ユニット５００は、いくつかの点ではシステム２００に類似するが、メモリインターフェース５０５と、アプリケーションインターフェース５１０と、ディスパッチャ５２０とをさらに含む。メモリインターフェース５０５は、シーケンシャルメモリ２０５及びプロセッサ２１０に結合され、アプリケーションインターフェース５１０は、プロセッサ２１０及び、マイクロエンジン２２０Ａ−Ｅにさらに結合されたディスパッチャ５２０に結合される。
【００４４】
メモリインターフェース５０５は、シーケンシャルメモリ２０５に対するアクセスを制御する。例えば、メモリインターフェース５０５は、メモリ２０５内に順次索引付けしてプロセッサ２１０に送信されたコンテキスト情報の次のパケットを検索してもよい。
【００４５】
プロセッサ２１０はさらにルータとして構成されてもよい。プロセッサ２１０は、シーケンシャルメモリ２０５及び／もしくはメモリ２１５から、パケットフォームでコンテキスト情報を受信する場合、その場合には、プロセッサ２１０は、パケットベースのコンテキスト情報をマイクロエンジンにルーティングしてニューロンとしてマイクロエンジンを構成してもよい。ニューロンが実行された後、パケットプロセッサ２１０はまた、マイクロエンジンによって発生された出力値Ａｊ（ｔ）を受信してもよい。次に、受信された出力値Ａｊ（ｔ）は、結合５６５Ａ−Ｄを介して他のニューラル処理ユニットに提供されてもよく、及び／もしくは例えばスタティックランダムアクセスメモリ２１５などのメモリ内に格納されてもよい。
【００４６】
システム５００を構成するためのホストコンピュータからのデータの初期ロードの間、プロセッサ２１０は、ホストコンピュータからデータのブロックを、例えばシーケンシャルメモリ２０５内のシーケンシャルロケーション並びに例えばスタティックランダムアクセスメモリ２１５、結合５６５Ａ−Ｄを介して他の隣接したニューラル処理ユニット、及び／もしくは１つもしくはそれ以上のマイクロエンジン２２０Ａ−Ｅなどの他のロケーションに移動させてもよい。
【００４７】
マイクロエンジンにおけるニューロンの実行の間、プロセッサ２１０は、結合重みを動作値とマッチングさせてもよい。例えば、プロセッサ２１０は、シーケンシャルメモリ２０５から、ｊ番目のニューロンのｉ番目の結合に対する結合重みＷｉｊを含むパケットを受信してもよい。次に、ｉ番目の結合に対して、プロセッサ２１０は、結合重みＷｉｊを、スタティックランダムアクセスメモリ２１５内に格納された、前の動作値Ａｉ（ｔ−１）とマッチングさせてもよい。いくつかの実施例では、ルックアップテーブルが、結合重みＷｉｊのそれぞれをスタティックランダムアクセスメモリ２１５内に格納された、対応する動作値Ａｉ（ｔ−１）とマッチングさせるために使用される。
【００４８】
アプリケーションインターフェース５１０は、各マイクロエンジン２２０Ａ−Ｅに対してインターフェースを提供する。いくつかの実施例では、アプリケーションインターフェース５１０は、スタティックランダムアクセスメモリ２１５から、受信されたパケット内に含まれた結合値をマッチングさせる動作値をフェッチしてもよい。マッチング動作値のアドレスは、プロセッサ２１０から受信されたパケット内に含まれてもよい。例えば、マッチング動作アドレスのアドレスは、ニューロンスタティックランダムアクセスメモリ動作アドレス３４０としてパケット内に格納されてもよい。その場合は、（例えばニューロンタイプ、結合値、動作値などの）コンテキスト情報を含むパケットは、マイクロエンジンに転送される。
【００４９】
ディスパッチャ５２０は、アプリケーションインターフェース５１０及びマイクロエンジン２２０Ａ−Ｅ間で交換されたパケットに対してハンドリングしてキューイングするパケットを提供する。いくつかの実施例では、ディスパッチャ５２０は、コンテキスト情報を含むパケットに対して、宛先マイクロエンジンを選択する。ディスパッチャ５２０はまた、コンテキスト情報を有したマイクロエンジンのレジスタを含むマイクロエンジンをロードしてもよく、マイクロエンジン２２０Ａ−Ｅからの出力データを、他のニューラル処理ユニット、スタティックランダムアクセスメモリ２１５、及び／もしくはシーケンシャルメモリ２０５に送信してもよい。
【００５０】
ニューラル処理ユニット５００は、（ノース、イースト、ウエスト及びサウスと表示された）結合５６５Ａ−Ｄを介して、他のニューラル処理ユニットに接続されてもよい。例えば、ニューラル処理ユニット５００は、（例えばユニット５００のニューラル処理ユニットノース、ユニット５００のニューラル処理ユニットサウス、ユニット５００のニューラル処理ユニットイースト及びユニット５００のニューラル処理ユニットウエストなどの）４つの他のニューラル処理ユニットに対する結合５６５Ａ−Ｄを有してもよい。さらに、他のニューラル処理ユニットのそれぞれは、４つの他のニューラル処理ユニットに結合されてもよく、いくつかの実施例では、各ニューラル処理ユニットは、１つもしくはそれ以上の特定用途向けの集積回路上に実装されてもよい。
【００５１】
図６は、ニューラル処理ユニット６６０Ａ−Ｄを含むシステム６００の例を図示する。各ニューラル処理ユニットは、（ＤＤＲ２と表示された）シーケンシャルメモリ６３２と、メモリコントローラ６３４と、メモリインターフェース６３６と、アプリケーションインターフェース６４０と、スタティックランダムアクセスメモリ６４２と、ディスパッチャ６４４と、複数の（ＮＭＥと表示された）マイクロエンジン６４６とを含んでもよい。
【００５２】
図６に図示された実施例では、各ニューラル処理ユニット６６０Ａ−Ｄは、プロセッサ２１０に関して上述説明されたように実装されてもよいルータ６１０に結合される。しかしながら、ルータ６１０は、いくつかの実施例では、例えばメモリインターフェース及びアプリケーションインターフェースなどの入力と出力との間の、複数の並列パスを提供する、ノンブロッキングの、クロスバーパケットルータとしてさらに構成されてもよい。
【００５３】
ニューラル処理ユニット６６０Ａ内の素子に関する説明を以下に提供するが、他のニューラル処理ユニット６６０Ｂ−Ｄが、ニューラル処理ユニット６６０Ａと同様の方法で構成されてもよい。さらに、ニューラル処理ユニット６６０Ａ−Ｄを含むシステム６００は、例えば特定用途向け集積回路（ＡＳＩＣ）などのチップ上に実装されてもよく、４つのニューラル処理ユニット６６０Ａ−Ｄだけが図６で図示されるが、システム６００はまた、他の量のニューラル処理ユニットを含んでもよい。
【００５４】
シーケンシャルメモリ６３２は、シーケンシャルメモリ２０５に関して上述説明されたように実装されてもよい。図６の例では、シーケンシャルメモリ６３２は、他のタイプのメモリがまた使用されてもよいが、ダブルデータレート同期式ダイナミックアクセスメモリとして実装されてもよい。シーケンシャルメモリ６３２からの読み出し及びシーケンシャルメモリ６３２への書き込みを可能とするために、シーケンシャルメモリ６３２は、メモリコントローラ６３４に電気的に結合されてもよい。
【００５５】
メモリコントローラ６３４は、シーケンシャルメモリ６３２からの読み出し及びシーケンシャルメモリ６３２への書き込みを制御してもよい。コンテキスト情報は、シーケンシャルメモリ６３２のシーケンシャルアドレス内に格納されてもよく、コンテキスト情報は、パケットベースのフォーマットで、メモリ６３２から読み出されてもよく、もしくはメモリ６３２へ書き込まれてもよい。パケットベースのフォーマットが実装される場合、パケットは、メモリインターフェース６３６に対する電気的結合を介して、ルータ６１０に対して提供されてもよいし、もしくはルータ６１０から受信されてもよい。さらに、メモリコントローラ６３４は、いくつかの実施例では、例えばメモリ６３２などのメモリから取得されたデータからパケットを発生し、発生されたパケットをルータ６１０に送信するインターフェースを提供してもよい。メモリコントローラ６３４はまた、ルータ６１０からパケットを受信してパケットのコンテンツをメモリ６３２に書き込んでもよい。スタティックランダムアクセスメモリ、ダイナミックランダムアクセスメモリから、より高い永続的性を有する光学的な記憶機構までの範囲に及ぶ異なるタイプのメモリがメモリ６３２において使用されてもよいが、使用されたメモリのタイプにもかかわらず、メモリコントローラ６３４はパケットをハンドリングしてパケットに対してメモリのためのアドレスを指定する。
【００５６】
メモリインターフェース６３６は、上述されたメモリインターフェース５０５と同様の方法で実装されてもよい。図６の例では、メモリインターフェース６３６は、メモリコントローラ６３４に対して送信されたパケットもしくはメモリコントローラ６３４から受信されたパケットをバッファリングしてもよい。
【００５７】
ルータ６１０は、６６０Ａ−Ｄにおける各アプリケーションインターフェース及び結合６９２Ａ−Ｃに対して電気的に結合されてもよい。結合６９２Ａ−Ｃは、例えば他のニューラル処理ユニット、メモリ、ホストコンピュータなどの他のデバイスに対する結合を提供してもよい。いくつかの実施例では、結合６９２Ｃは、ＰＣＩインターフェースとして実装されて１秒あたり１３２メガビットまでの速度でルータ６１０に対する（及びルータ６１０からの）データ転送を可能としてもよい。結合６９２Ｃはまた、システム６００のために、データをロードすること、データをデバッグすること、及びデータを処理することをハンドリングしてもよい。例えば、結合６９２Ａ−Ｃは、システム６００をホストコンピュータに結合するために使用されてもよい。ホストコンピュータは、動作値を含むコンテキスト情報を提供し、マイクロエンジンによって発生された出力値を受信し、各マイクロエンジン対してコードを提供してニューロンとしてマイクロエンジンを構成してもよい。
【００５８】
アプリケーションインターフェース６４０は、アプリケーションインターフェース５１０と同様の方法で実装されてもよい。しかしながら、図６における例では、アプリケーションインターフェース６４０は、スタティックランダムアクセスメモリ６４２及びディスパッチャ６４４に電気的に結合されてもよい。スタティックランダムアクセスメモリ６４２は、スタティックランダムアクセスメモリ２１５と同様の方法で実装されてもよく、ディスパッチャ６４４は、ディスパッチャ５２０と同様の方法で実装されてもよい。ディスパッチャ６４４は、マイクロエンジン２１０Ａ−Ｅと同様の方法で実装されてもよい、複数の（ＮＭＥと表示された）マイクロエンジン６４６に電気的に結合される。
【００５９】
図７は、ここで説明されたニューラル処理システムによって実装されてもよいプロセス７００を図示する。プロセス７００の説明はまた、図３Ａ−Ｂ及び図６を参照するであろう。
【００６０】
７９３では、メモリコントローラ６３４は、メモリ６３２のシーケンシャルアドレスからデータを読み出してもよい。この読み出し動作は、ニューラルモデルに従って、ニューロンとしてマイクロエンジンを構成するために、コンテキスト情報を含む複数のパケットの少なくとも１つを読み出すことを含んでもよい。メモリコントローラ６３４は、１つもしくは複数の読み出しパケットをメモリインターフェース６３６に提供してもよく、ここで１つもしくは複数のパケットは、ルータ６１０に提供される前にキューイングされてもよい。メモリコントローラ６３４はまた、例えばルータ６１０から受信されたパケットなどのデータをメモリ６３２に対して書き込むことを制御してもよい。
【００６１】
７９４では、ルータ６１０は、複数のパケットの少なくとも１つをメモリインターフェース６３６から受信し、次に受信されたパケットを６６０Ａ−Ｄにおけるアプリケーションインターフェースの１つに提供してもよい。例えば、ルータ６１０は、ｊ番目のニューロンのｉ番目の結合に対する結合重みＷｉｊを含む少なくとも１つのパケットを、アプリケーションインターフェース６４０に対してルーティングしてもよい。
【００６２】
７９７では、アプリケーションインターフェースは、メモリからマッチング動作値をフェッチしてもよい。例えば、アプリケーションインターフェース６４０は、結合重みを前の動作値Ａｉ（ｔ−１）とマッチングさせ、その場合は例えばスタティックランダムアクセスメモリ６４２などのメモリからマッチング動作値をフェッチしてもよい。受信された各パケットに対して、アプリケーションインターフェース６４０は、パケット内に含まれた結合重みＷｉｊを読み出し、次にスタティックランダムアクセスメモリ６４２内に格納されたマッチング動作値を決定してもよい。上述されたように、アプリケーションインターフェース６４０は、どの動作値をフェッチすべきであるかを指示するルックアップテーブルに基づいてマッチングを決定してもよい。
【００６３】
次に、７９８では、例えばアプリケーションインターフェース６４０などのアプリケーションインターフェースは、（例えば結合重みＷｉｊ、マッチング動作値Ａｉ（ｔ−１）などの）コンテキスト情報を、例えばディスパッチャ６４４などのディスパッチャに提供してもよい。次に、ディスパッチャ６４４は、このコンテキスト情報をマイクロエンジン６４６の１つに提供してニューロンとしてマイクロエンジンを構成する。
【００６４】
７９９では、構成されたマイクロエンジンは、例えばＡｊ（ｔ）などの出力を発生する。出力Ａｊ（ｔ）は、ディスパッチャ６４４と、出力Ａｊ（ｔ）をスタティックランダムアクセスメモリ６４２もしくは他のニューラル処理ユニット６６０Ｂ−Ｄに提供してもよいアプリケーションインターフェース６４０とに提供されてもよい。プロセス７００は、ニューロンの各結合に対して反復されてもよく、ニューラル処理システムの各ニューロンに対して反復されてもよい。さらに、プロセス７００は、複数のエポックに対して反復されてもよい。
【００６５】
図８は、マイクロエンジン２２０Ａ−Ｅ及び／もしくはマイクロエンジン６４６において使用されてもよいマイクロエンジン８００の例を図示する。マイクロエンジン８００は、レジスタメモリ８２０と、中央処理ユニット８３０と、プログラムメモリ８５０とを含んでもよい。マイクロエンジン８００は、マイクロエンジン８００がディスパッチャ５２０からコンテキスト情報、動作値などを含むパケットを受信し、ディスパッチャ５２０に対して出力動作を提供することができるように、ディスパッチャ５２０に対して電気的に結合されてもよい。
【００６６】
いくつかの実施例では、マイクロエンジン８００は、例えば図３Ｂに図示されたブロック３９０Ａなどのコンテキスト情報を含むパケットを受信する。マイクロエンジン８００は、レジスタ８２０内にブロック３９０Ａを格納する。その場合は、マイクロエンジン８００は、プログラムメモリ８５０にアクセスして例えばプログラムコードなどの命令を取得してレジスタ８２０内に格納されたブロック３９０Ａのコンテキスト情報によって指示されたニューラルタイプ３２０に従ってマイクロエンジンを構成してもよい。次に、マイクロエンジン８００は、レジスタ８２０において格納されたブロック内に含まれた、（例えば、動作値及び結合値などの）コンテキスト情報を用いて命令を実行する。その場合は、出力は、ディスパッチャ５２０に送信され、ここで、それは、例えばスタティックランダムアクセスメモリなどのもう１つのデバイス、もう１つのニューラル処理ユニット、及び／もしくはホストコンピュータに対してさらにルーティングされてもよい。出力は、後に続く時間では動作値として使用されてもよい。
【００６７】
レジスタ８２０は、ディスパッチャ５２０から、例えば図３Ａ−Ｂに関して上述されたように構造化されたコンテキスト情報を受信してもよい。レジスタ８２０はまた、制御ステータスレジスタ（ＣＳＲ）と、累積レジスタと、プログラムカウンタ（ＰＣ）と、多数のスクラッチパッドレジスタとを含んでもよい。レジスタ８２０は、少なくともデータ構造３００及び３０５並びに／又は図３Ａ−Ｂで図示されたデータ構造３００及び３０５のブロックのうちの少なくとも１つを格納するのに十分な記憶スペースを含むように実装されてもよい。レジスタ８２０はまた、ディスパッチャ５２０がレジスタ８２０のバンクの１つの中に書き込むことが可能となる一方で中央処理ユニット８３０がレジスタ８２０の他のバンクから読み出して実行することが可能となるように、２つの同一のレジスタバンクを含むピンポン構成で実装されてもよい。
【００６８】
マイクロエンジン８００は、マイクロエンジンにおいて実装された可能なニューラルモデルのセットを定義する（例えば、コードなどの）命令のセットを含んでもよい。従って、（プログラムメモリ８５０内に格納されてもよい）命令のセットは、マイクロエンジンを構成してコード化して複数のニューロンタイプの少なくとも１つとして動作するように使用されてもよい。さらに、命令のセットは、マイクロエンジン間で移植されて構成を容易化してもよい。マイクロエンジン８００に対するコードはまた、アセンブリ言語プログラムをハンドリングしてマイクロエンジン内にローディングするためにそのプログラムをバイナリーコードファイルに変換するためにアセンブラを使用してもよい。例えば、ニューラルアセンブラは、コマンドラインを介して起動してマイクロエンジン内にローディングするためにアセンブリコードプログラムを受け取ってアセンブリコードをバイナリファイルに変換してもよい。
【００６９】
図９は、ここでハイブとして言及されたシステム９００を図示する。（ＮＰＵとしてそれぞれが表示された）ニューラル処理ユニットは、２次元グリッドレイアウトにおいて相互接続されてもよい。いくつかの実施例では、単一のメモリバスを共有する複数のプロセッサと比較すると、２次元グリッド構造は、処理電力は増加するかもしれない。ニューラル処理ユニット間の相互接続は、高速シリアルデータ線を提供する電気的な相互接続として実装されてもよい。ホストインターフェース９９０は、ニューラル処理ユニットとホストコンピュータ９９２との間をインターフェースしてもよい。例えば、ホストインターフェース９９０は、パケットをハイブの中に通過させ、ニューラル処理ユニット間で交換されたパケットを読み出し、ニューラル処理ユニット間で送信されたパケットを妨害してもよい。各ニューラル処理ユニットは、各ニューラル処理ユニットのロケーショニング及び／もしくはアドレッシングを可能とするための固有の識別子を有してもよい。
【００７０】
ここで説明された主題は、所望された構成によるシステム、装置、方法及び／または物において具現化されてもよい。特に、ここで説明された主題の種々の実施例は、デジタル電子回路、集積回路、特別に設計されたＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウエア、ファームウェア、ソフトウェア、及び／又はそれらの組み合わせにおいて利用されてもよい。これらの種々の実施例は、特別なもしくは一般的な目的であってもよい、記憶システム、少なくとも１つの入力デバイス及び少なくとも１つの出力デバイスからのデータ及び命令を受信するために、並びに記憶システム、少なくとも１つの入力デバイス及び少なくとも１つの出力デバイスにデータ及び命令を送信するために結合された、少なくとも１つのプログラマブルプロセッサを含むプログラマブルシステムに対して実行可能な及び／又はインタプリタ可能である１つもしくはそれ以上のコンピュータプログラムにおける実施例を含んでもよい。
【００７１】
（プログラム、ソフトウェア、ソフトウェアアプリケーション、アプリケーション、コンポーネント、又はコードとしてもまた知られた）これらのコンピュータプログラムは、プログラマブルプロセッサに対する機械命令を含み、高水準手続き及び／もしくはオブジェクト指向のプログラミング言語において、並びに／又はアセンブリ／機械言語において実装されてもよい。ここで使用されたように、用語「機械可読媒体」は、機械命令及び／又はデータをプログラマブルプロセッサに提供するために使用された任意のコンピュータプログラム製品、装置及び／もしくは（例えば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス（ＰＬＤ）などの）デバイスに言及し、機械可読信号として機械命令を受信する機械可読媒体を含む。
【００７２】
同様に、プロセッサ及び当該プロセッサに結合されたメモリを含んでもよいシステムがまたここで説明される。メモリは、プロセッサがここで説明された１つもしくはそれ以上の動作を実行させる１つもしくはそれ以上のプログラムを含んでもよい。
【００７３】
さらに、ここで説明されたシステムは、ニューラル処理のコンテキスト内であるが、ここで説明されたシステムは、例えば有限要素解析及びフィルターバンク処理などを含む他の環境において使用されてもよい。さらに、用語「セット」は、空のセットを含む任意の量に言及してもよい。
【００７４】
数個の変形例が詳細に上述されたが、他の変更もしくは追加が可能である。特に、さらなる特徴及び／又は変形例が、ここで説明された特徴及び／又は変形例に加えて提供されてもよい。例えば、上述された実施例は、開示された特徴の種々のコンビネーション及びサブコンビネーション並びに／又は上記開示されたいくつかのさらなる特徴のコンビネーション及びサブコンビネーションに対して指示されてもよい。さらに、添付された図面において図示された及び／又はここで説明されたロジックフローは、所望される結果を獲得するために、表示された特定の順番、もしくは順次の順番を必要としない。以下の特許請求の範囲の範囲内で他の実施形態が可能である。
【図１】
2013529342.tif 000004
【図２】
2013529342.tif 000005
【図３Ａ】
2013529342.tif 000006
【図３Ｂ】
2013529342.tif 000007
【図４】
2013529342.tif 000008
【図５】
2013529342.tif 000009
【図６】
2013529342.tif 000010
【図７】
2013529342.tif 000011
【図８】
2013529342.tif 000012
【図９】
2013529342.tif 000013
【国際調査報告】
2013529342.tif 000014
2013529342.tif 000015
2013529342.tif 000016
2013529342.tif 000017
2013529342.tif 000018
2013529342.tif 000019