以下に説明される図1A-19、及び本特許文献にて本発明の原理を説明するために使用される様々な実施形態は、単に例示によるものであり、本発明の範囲を限定するように解釈されるべきでない。当業者が理解するように、本発明の原理は、あらゆる種類の好適に構成された装置又はシステムにて実装され得る。
上述したように、ヒトの脳は、典型的に、1,000兆個のシナプスによって接続された約1,000億個のニューロンを含んだ、甚だしく並列なシステムである。シナプスは、ニューロン間での信号の輸送を支援する。ヒトの脳は、古典的なチューリングマシンとは非常に異なる構造になっている。ヒトの脳内には典型的に多数のニューロン及びシナプスがあることを考えると、古典的なチューリングマシンを用いてヒトの脳を模倣することは実用的でない。
ヒトの知能には数多くの要素が存在するが、一つの重要な要素は次元削減(dimensional reduction)であり、これは、莫大な量(高帯域幅)の感覚入力を受け取って、その情報を、より少ない量(低帯域幅)の記述的概念へと削減するプロセスを指す。数学的には、この削減は、様々な形態の反復因子分析を用いて達成され得る。それら様々な形態の因子分析は、幾つかの特徴を共通に有する傾向にある。例えば、“フォワード説明モード(forward explanatory mode)”と呼ばれる1つの動作モードにおいて、因子分析は、多数の入力に対して幾らかの単純計算を行い、合計を累算し、そして場合によって、より複雑な計算を出力に対して行う。“バックワード学習モード(backward learning mode)”と呼ばれる別の動作モードでは、因子分析は、出力及び対応する入力に対する幾らかの単純計算によって、入力に対する単純計算を変更する。これらの計算は単純である傾向にあるが、ファンイン(入力の数を指す)及びファンアウト(出力が提供される宛先の数を指す)はどちらも何万にもなる。
ヒトの脳の能力に幾分でも匹敵するシステムを設計することは、一般に、数多くの理由で不十分であった。例えば、このような膨大なファンイン及びファンアウトは、2次元(2D)回路に実用的にマッピングされることができず、そのことが、このような高度に接続されたコンピューティングアーキテクチャを主流でないものに保ち続けてきた。ヒトの脳の能力に匹敵するコンピューティング装置を設計するためには、より多くの通信帯域幅を持つハードウェアアーキテクチャが必要とされる。本開示は、多数の高度に相互接続されたプロセッシングコアを含む様々な新たな汎用“コネクショニスト”ハードウェアアーキテクチャを記述する。とりわけ、これらのハードウェアアーキテクチャは、機械学習、科学計算、ビデオゲーム、及び他の分野における広範なクラスのアルゴリズムを加速させることができる。一部の実施形態において、これらのハードウェアアーキテクチャは、例えば3次元(3D)集積回路技術などの最新技術を使用して、妥当なコストで製造されることができる。
図1A-1Cは、本開示に従った汎用並列コンピューティングアーキテクチャの一例を示している。特に、図1A-1Cは、高い通信帯域幅を持つハードウェアアーキテクチャを提供する多階層(マルチレベル)構造の一例を示している。この構造の異なる階層が、後述するような異なる機能を実行する。
図1Aは、ハードウェアアーキテクチャの第1階層100を示している。この階層100は、soma(細胞体)コアとして参照する複数のコンピューティングコア又はプロセッシングコア102を含んでいる。その最小形態において、各somaコア102は、1つ以上のデータ信号を受信し、何らかのタイプの処理を実行し、そして、1つ以上の入力信号を送信することができる。プロセッシング処理を実行するために各somaコア102に含められる構造は、非常に単純なプロセッシングコアから非常に複雑なプロセッシングコアまで及び得る。例えば、各somaコア102内のプロセッシングユニットは、例えば汎用的な単一命令複数データ(SIMD)算術ユニットなどの比較的単純なコンピューティングコアとし得る。somaコア102はまた、例えばARM社、INTEL社、又は他のコンピュータプロセッサメーカーからのものなど、フルプロセッシングコアを表すこともできる。一部の実施形態において、somaコア102のグループは、既存の“メニーコア(many core)”プロセッサ設計を用いて実装され得る。しかしながら、somaコア102を実装することには、如何なる好適なプロセッシングコアが使用されてもよい。ハードウェアアーキテクチャはここでは16個のsomaコア102を含むが、任意数のsomaコア102がこのハードウェアアーキテクチャでサポートされ得る。特定の実施形態において、somaコア102の全てが、ここでは、プロセッサとして参照する単一の集積回路チップ内に実装され得る。また、留意されたいことには、これらのsomaコア102は同種であってもよいし、同種でなくてもよい。
各somaコア102が、プロセッシング回路104及び少なくとも1つのメモリデバイス106を含む。プロセッシング回路104は、概して、somaコア102内で何らかのタイプの処理を実行するのに使用される回路を意味する。上述のように、処理は単純であってもよいし、複雑であってもよく、プロセッシング回路104は、実行すべき具体的な処理に応じて様々とすることができる。メモリデバイス106は、概して、somaコア102によって使用、生成、又は受信されるデータを格納するための、例えば1つ以上のレジスタなどの任意の好適な(1つ以上の)記憶・取り出し(storage and retrieval)デバイスを意味する。図1Aでは、メモリデバイス106がsomaコア102に内蔵されているように示されているが、各メモリデバイス106は、全体として、又は部分的に、somaコア102にアクセス可能な他の好適な(1つ以上の)位置に置かれてもよい。
図1Bは、ハードウェアアーキテクチャの第1階層100に関連付けられるものであるハードウェアアーキテクチャの第2階層110を示している。第2階層110は、各somaコア102に付随する多数のコプロセッサ112(シナプスコプロセッサとして参照する)を含む。シナプスコプロセッサ112は、概して、somaコア102間の信号ライン(後述する)上で伝送される入力データを処理する。各somaコア102に、複数のシナプスコプロセッサ112が付随し得る。一例として、N個のsomaコアのグループ内の各somaコア102に対して、最大N個のシナプスコプロセッサ112が設けられて、該グループ内のsomaコア102(それ自身を含む)から該somaコア102への通信を支援するために使用され得る。一部の実施形態において、各somaコア102が、グループ内のsomaコア102の各々についての1つのシナプスコプロセッサ112に通信可能に結合される。換言すれば、各somaコア102が、N個全てのsomaコア102に(それらそれぞれのシナプスコプロセッサ112を介して)通信可能に結合されることができるが、他のアプローチ(後述するものを含む)は、これを行う必要がない。“ローカル”又は“ホスト”のsomaコア102のシナプスコプロセッサ112を用いて、全てのsomaコア102(それ自身を含む)から入ってくる入力データを受信して処理する。これは、一部の実施形態において、somaコア102毎の全N個のシナプスコプロセッサ112が、N個全てのsomaコア102からの入力データを並列に受信することを実効的に可能にする。なお、典型的には各somaコア102が同数のシナプスコプロセッサ112を含むとし得るが、他の実施形態が用いられてもよい。
各シナプスコプロセッサ112は、somaコア102に関して入来する入力データの処理を支援する任意の好適構造を含む。シナプスコプロセッサ112は、限られた能力を持つとともに再プログラム可能であってもよい。一部の実施形態において、各シナプスコプロセッサ112は、プログラム可能な又はその他の算術ユニット113と、少なくとも1つのメモリデバイス114とを含む。算術ユニット113は、ハードウェアアーキテクチャにおける様々な機能をサポートするために1つ以上の命令シーケンスを実行するように構成される任意の好適構造を意味する。それらの機能の例は、特定のシーケンスにてデータの受信及び処理を行うこと、受信した入力及び格納されたパラメータに対して算術演算を実行すること、又は値を転送することを含む。メモリデバイス114は、概して、シナプスコプロセッサ112によって使用、生成、又は受信されるデータを格納するための、例えば1つ以上のレジスタなどの任意の好適な(1つ以上の)記憶・取り出しデバイスを意味する。図1Bでは、メモリデバイス114がシナプスコプロセッサ112に内蔵されているように示されているが、各メモリデバイス114は、全体として、又は部分的に、シナプスコプロセッサ112にアクセス可能な他の好適な(1つ以上の)位置に置かれてもよい。
ハードウェアアーキテクチャの第2階層110はまた、様々な削減器回路すなわち“リデューサ”115を含む。一部の実施形態において、somaコア102毎に1つのリデューサ115が存在し得る。各リデューサ115は、somaコア102のうちの1つに付随する全てのシナプスコプロセッサ112によって生成された出力データを受信し、受信した出力データを何らかの手法で処理し、そして、処理の1つ以上の結果をそのローカルsomaコア102に渡す。例えば、各リデューサ115は、受信した出力データ値を合計し若しくはその他の方法で累算したり、受信した出力データ値の最小値又は最大値を特定したり、あるいは何らかの他のプロセッシング処理を実行したりすることができる。斯くして、各リデューサ115が、あるsomaコア102の出力データを処理し、そのsomaコア102に提供されるデータの量を削減する。
各リデューサ115は、複数の出力値を処理する任意の好適構造を含む。一部の実施形態において、各リデューサ115は、プロセッシング回路116及び少なくとも1つのメモリデバイス117を含む。プロセッシング回路116は、概して、リデューサ115内の何らかのタイプの処理を実行するのに使用される回路を意味し、しばしば、somaコア102のプロセッシング回路104よりも遥かに特殊化される。例えば、プロセッシング回路116は、1つのsomaコア102に付随するシナプスコプロセッサ112からの出力値の全てを合計するために使用される累算器によって形成された加算器ツリーを含むことができる。メモリデバイス117は、概して、リデューサ115によって使用、生成、又は受信されるデータを格納するための、例えば1つ以上のレジスタなどの任意の好適な(1つ以上の)記憶・取り出しデバイスを意味する。図1Bでは、メモリデバイス117がリデューサ115に内蔵されているように示されているが、各メモリデバイス117は、全体として、又は部分的に、リデューサ115にアクセス可能な他の好適な(1つ以上の)位置に置かれてもよい。
図1Cは、ここでのハードウェアアーキテクチャの第1階層100及び第2階層110に付随するものであるハードウェアアーキテクチャの第3階層120を示している。第3階層120は、somaコア102を通信可能に結合する複数の信号ライン122及び124を含み、それにより、somaコア102への、somaコア102からの、及びsomaコア102間での信号の輸送を支援する。一部の実施形態において、あるグループ内の各somaコア102が、信号ライン122及び124並びにシナプスコプロセッサ112の適切な構成を介して、同一グループ内の他の全てのsomaコア102と直接的に通信することができるように、somaコア102同士が完全に接続される。しかしながら、完全よりも少ない接続がこのハードウェアアーキテクチャ内でサポートされてもよい。
なお、図1Cにおける信号ライン122及び124の物理的レイアウトは、単に例示のためであり、このハードウェアアーキテクチャにおける信号ラインの実際の物理的配置を表すわけではない。例えば、somaコア102間のネットワークを設計するためことには様々なやり方が存在し、それらは、somaコア102、及びsomaコア102から入力データを受信するシナプスコプロセッサ112、の全ての間の直接通信をサポートするものもあれば、サポートしないものもある。従って、信号ライン122及び124は、ハードウェアアーキテクチャ内の所望される通信経路をサポートするように配置されることができる。これまた留意されたいことには、各somaコア102とそれに付随するシナプスコプロセッサ112との間の直接接続は、論理レベルでの一例として与えられており、必ずしも、必要とされるネットワークの具体的な実装として与えられているわけではない。各somaコア102とそれに付随するシナプスコプロセッサ112との間の接続を提供することには、様々な機構(後述するものを含む)が使用され得る。
動作中、各somaコア102は、所望の命令を実行し、場合によりそのリデューサ115又は他の(1つ以上の)ソースから受信したデータを含むものであるデータを処理するように動作する。各somaコア102は、そのプロセッシング処理の結果を他のsomaコア102(及び場合によりそれ自身)に入力データとして提供することができ、また、各somaコア102は、そのシナプスコプロセッサ112を介して、他のsomaコアのプロセッシング処理によって生成された入力データを受信することができる。各somaコア102についてのシナプスコプロセッサ112は、入力データに対して所望のプロセッシング処理を実行することができ、シナプスコプロセッサ112によって出力されるデータは、各somaコア102についてのリデューサ115によって更に処理されることができる。リデューサ115からの結果が、ローカル/ホストのsomaコア102に提供され、該コアは、該データを用いて更なるプロセッシング処理を実行することができる。
somaコア102から接続されたシナプスコプロセッサ112への各通信において複数の“チャネル”をサポートすることも可能であり、その場合、各チャネルに異なるプロセッシング処理を関連付けることができる。例えば、各シナプスコプロセッサ112が、1つのsomaコア102から複数のチャネル上で入力データを受信してもよく、そのsomaコア112に接続された複数のシナプスコプロセッサ112が、入力データに使用されたチャネルに応じて異なるプロセッシング処理を実行してもよい。また、各リデューサ115が、それが付随するシナプスコプロセッサ112から複数のチャネルについての出力データを受信してもよく、リデューサ115が、シナプスコプロセッサ112によって入力データが受信されたチャネルに応じて異なるプロセッシング処理を実行してもよい。チャネルは、実際の物理チャネル(例えば、データが異なる信号ライン上で送られる場合など)又は論理チャネル(例えば、データが異なるチャネル識別子を用いて共通信号ライン上で送られる場合など)を意味し得る。これらの実施形態では、somaコア102、シナプスコプロセッサ112、及びリデューサ115内の異なるレジスタ又は他のメモリロケーションを使用して、異なるチャネルについての異なるデータ及び異なるプログラミング命令を格納し得る。これは、ハードウェアアーキテクチャが、並行処理タイプ又は他のタイプのプログラミング処理をサポートすることを可能にする。
上述のように、各シナプスコプロセッサ112のメモリデバイス114は、多数のレジスタを含むことができる。一部の実施形態において、レジスタは、可能な各接続パートナー(各somaコア102)に関連付けられて、各接続パートナーの(1つ以上の)チャネルについての入来する入力データを保持するために使用されるレジスタを含むことができる。レジスタはまた、プログラミング命令の実行中に使用されるパラメータ値及び他の値を保持するために使用されるローカルレジスタを含み得る。特定の実施形態において、シナプスコプロセッサ112のプロセッシング処理は、入来する入力データに応答して実行される1つ以上の命令を用いて記述され、シナプスコプロセッサ112にはコマンドループが存在しない。
各somaコア102は、その複数のシナプスコプロセッサ112上へのプログラム命令のインストールを個別に制御することができ、異なるチャネルに対して異なるプログラム命令を提供することができる。例えば、somaコア102に、そのシナプスコプロセッサ112のうちの一部又は全てに同じプログラムをロードさせる命令が存在し得る。また、somaコア102に、しばしば異なる値を、そのシナプスコプロセッサ112のパラメータレジスタにロードさせる命令が存在し得る。なお、somaコア102は、そのsomaコアの全シナプスコプロセッサ112の全レジスタの値を保持するのに十分な大きさの所与のメモリ領域から、このデータの全てをロードし得る。各somaコア102は、そのシナプスコプロセッサ112の個々のパラメータレジスタを読み取ることを可能にされ得るが、チャネル毎のレジスタの値を読み取ることはできない。代わりに、チャネル毎のレジスタの値は、シナプスコプロセッサ112によって処理されることができ、及び/又は、各チャネルについて受信されたデータに対して適切に動作するようにローカル/ホストsomaコア102によってプログラムされ得るものである付随リデューサ115に供給されることができる。各リデューサ115への入力は、特定のチャネルについての付随するsomaコア102の全シナプスコプロセッサ112からの出力値を表すことができる。
各somaコア102は、上述のようなシナプスコプロセッサ112及びリデューサ115の使用を容易にするための多数の命令をサポートし得る。例えば、各somaコア102は、入力データ要素を全てのsomaコア102(の特定チャネル)に送るための命令、入力データをそれ自身のシナプスコプロセッサ112の特定チャネルに送るための命令、それ自身のリデューサ115からの結果を受信するための命令、それ自身のシナプスコプロセッサ112及びリデューサ115においてプログラム又は他の命令をインストール又は選択するための命令、及びシナプスコプロセッサ112のパラメータレジスタにデータを格納するための命令をサポートし得る。このハードウェアアーキテクチャでサポートされる命令の例の更なる詳細については、以下で提供する。
一部の実施形態において、図1A-1Cに示したハードウェアアーキテクチャは、単一の集積回路チップ内に実装され得る。集積回路チップは、例えば、シリコン・オン・インシュレータ(SOI)などの長年の製造技術、又は3次元集積回路製造技術などのもっと最近になって開発された技術を使用することによってなど、如何なる好適手法で製造されてもよい。必要とされる場合又は望まれる場合、使用のために利用可能なsomaコア102の数を増やすために、図1A-1Cに示したハードウェアアーキテクチャの複数のインスタンスを共に結合して使用し得る。例えば、複数の集積回路チップを共に、例えば、ハードウェアアーキテクチャの各インスタンスの信号ライン122及び124を1つ以上の高速接続を用いて共に結合することによってなどで、通信可能に結合することで、所望数のsomaコア102を提供し得る。
また、一部の実施形態において、各somaコア102は、ハードウェアアーキテクチャにおける所望の機能を提供するために、特定の機能又は複数機能の組み合わせを実行するように構成され得る。他の実施形態において、各somaコア102は、somaコア102の(1つ以上の)機能が規定され得るとともに、経時的に又は所望に応じて変化され得るように、プログラム可能であるとし得る。同様に、一部の実施形態において、各シナプスコプロセッサ112及びリデューサ115は、ハードウェアアーキテクチャにおける所望の機能を提供するために、特定の機能又は複数機能の組み合わせを実行するように構成され得る。他の実施形態において、各シナプスコプロセッサ112及びリデューサ115は、シナプスコプロセッサ112及びリデューサ115の(1つ以上の)機能が規定され得るとともに、経時的に又は所望に応じて変化され得るように、プログラム可能であるとし得る。
なお、somaコア102によって実行される処理は並列に行われることができ、また、各somaコア102に対してシナプスコプロセッサ112及びリデューサ115によって実行される処理も並列に行われることができる。斯くして、各somaコア102は、somaコア102同士の間に十分な通信基盤を与えられて、複数の信号ライン122及び124を介して同時に通信することができる。十分な数のsomaコア102、シナプスコプロセッサ112、リデューサ115、及び信号ライン122及び124を所与として、このハードウェアアーキテクチャは、コンピューティングコア間の莫大な数の通信接続をサポートすることができ、それらの通信接続は全て、同時使用に利用可能であることができる。結果として、この設計は、より多くの通信帯域幅を持つハードウェアアーキテクチャを表す。
図1A-1Cは、汎用並列コンピューティングアーキテクチャの一例を示しているが、図1A-1Cに示したハードウェアアーキテクチャには様々な変更が為され得る。例えば、ハードウェアアーキテクチャは、任意の好適数のsomaコアを、好適数のシナプスコプロセッサ及びリデューサと共にサポートし得る。また、各somaコア、シナプスコプロセッサ、及びリデューサは、例えば、複数のsomaコア又はシナプスコプロセッサに共有の計算リソースを使用することによって、又は2つ以上の処理を同時に実行することを可能にする複数のリデューサを使用することによってなど、他の好適手法で実装されてもよい。また、具体的なニーズに従って、図1A-1Cの様々なコンポーネントが組み合わされ、更に細分化され、配置変更され、又は省略されてもよく、また、更なるコンポーネントが追加されてもよい。特定の一例として、1つ以上のsomaコア102は、リデューサ115と共に使用される必要がないとし得る。他の特定の一例として、図10-12(後述する)が、汎用並列コンピューティングアーキテクチャのコンポーネント間の他の可能なレイアウト及び接続を示す。
図2及び3は、本開示に従った図1A-1Cのコンピューティングアーキテクチャにおける通信の例を示している。図2に示すように、各somaコア102は、全てのsomaコア102(それ自身を含む)からの入力データを受信する複数のシナプスコプロセッサ112を有することができる。これと同じパターンが、somaコア102のグループ内の全てのsomaコア102に対して繰り返され得る。上述の信号ライン122及び124を使用して、各somaコア102を、全てのsomaコア102の1つのシナプスコプロセッサ112に、これらの通信をサポートするのに好適なように結合することができる。
N個のsomaコア102が存在する場合、各somaコア102がN個のシナプスコプロセッサ112(それ自身を含めsomaコア102毎に1つのシナプスコプロセッサ112)を備え得る。各somaコア102は、情報を全てのsomaコア102にブロードキャストすることができ、また、各somaコア102は、そのシナプスコプロセッサ112を介して他の全てのsomaコア102から情報を受信することができる。実効的に、一部の実施形態において、N個のsomaコア102の各々に対するN個のシナプスコプロセッサ112は、somaコア102との間のN個の独立した通信ネットワークをサポートすることができる。
図3は、somaコア間の独立した通信ネットワークのうちの2つの一具体例を示している。図3に示すように、1つのsomaコア102aは、システム内の各somaコア102の1つのシナプスコプロセッサ112に、入力データをブロードキャストすることができる。同様に、別の1つのsomaコア102bは、システム内の各somaコア102の1つのシナプスコプロセッサ112に、データをブロードキャストすることができる。somaコア102a及び102bによるブロードキャストは、一部の実施形態において、同時に行われることができる。結果として、N個のsomaコア102は、同時にN個のデータブロードキャストに携わることができる。
なお、ここではブロードキャストが、1つのsomaコアからロウ及びカラム内の次のsomaコアへと順次に行われているように示されているが、これは単に図示の容易さのためである。それに代えて、データをブロードキャストしている各シナプスコプロセッサ112は、信号ライン122及び124を介して、全てのsomaコア102のシナプスコプロセッサ112に直接的にデータをブロードキャストし得る。当然ながら、必要とされる場合又は望まれる場合には、例えば準備されている何らかのタイプのアドレッシング機構又は競合機構などを用いて、複数のsomaコア102が同じ信号ライン122及び124上でブロードキャストすることを可能にすることも可能である。
図2及び3は、図1A-1Cのコンピューティングアーキテクチャにおける通信の例を示しているが、図2及び3には様々な変更が為され得る。例えば、ハードウェアアーキテクチャは、任意の好適数のsomaコアを、好適数のシナプスコプロセッサと共にサポートし得る。また、具体的なニーズに従って、図2及び3の様々なコンポーネントが組み合わされ、更に細分化され、配置変更され、又は省略されてもよく、また、更なるコンポーネントが追加されてもよい。さらに、somaコア102間で如何なる好適な通信がサポートされてもよい。
図4及び5は、本開示に従った図1A-1Cのコンピューティングアーキテクチャにおけるコプロセッサ機能の例を示している。特に、図4及び5は、上述のシナプスコプロセッサ112を実装するための機構例を示している。なお、これらの実装例は単に例示のためであり、シナプスコプロセッサ112は他の手法で実装されてもよい。
図4に示すように、j番目のsomaコア102についてのシナプスコプロセッサ112が、上述の算術ユニット113を用いて実装され得る。算術ユニット113は、i番目のsomaコア102から受信した入来する入力データを用いて、1つ以上の所望の計算を実行する。算術ユニット113は、次いで、得られた出力データを、j番目のsomaコア102に付随するリデューサ115に出力する。リデューサ115は、j番目のsomaコア102に付随する複数のシナプスコプロセッサ112の複数の算術ユニット113からの出力を処理して、(1つ以上の)結果をj番目のsomaコア102に提供することができる。
図4の算術ユニット113によって実行される(1つ以上の)処理は、プログラム(φ)402を用いて規定又は制御されることができ、プログラム402は、1つ以上のパラメータ404を使いて動作する。プログラム402及び(1つ以上の)パラメータ404は、メモリデバイス114又は他の(1つ以上の)位置に格納されることができる。この1つ以上のパラメータ404は、シナプスコプロセッサ112によって、又は付随するsomaコア102によって、又は他の好適手法にて設定又は制御されることができる。算術ユニット113によって実行され得る処理の例は、値を加算、減算若しくは乗算すること;あるsomaコア102に付随する全てのシナプスコプロセッサ112にわたって一定値を生成すること;シナプスコプロセッサ112に関する識別子を出力すること;テスト値に基づいて複数の値のうちの1つを選択すること;又は値の符号若しくは逆数平方根を計算することを含み得る。
図5に示すように、ハードウェアアーキテクチャ内で実行される複数の処理又は複数の処理セットが存在し得る。入来データに対して複数の選択可能なプログラム(φ)502のうちのどれが算術ユニット113によって実行されるべきかを識別するために、シナプスコプロセッサ112によって“チャネル識別子”値が使用され得る。“チャネル識別子”はまた、どの(1つ以上の)パラメータ504が算術ユニット113によって使用されるのか、及び算術ユニット113によって生成された結果がどこに送られるのかを制御するためにも使用されることができる。選択可能なプログラム502及びパラメータ504は、シナプスコプロセッサ112のメモリデバイス114又は他の(1つ以上の)位置に格納され得る。
一部の実施形態において、算術ユニット113及びリデューサ115の各々は、パイプライン的に実装されてもよく、入来データは、スカラ値又は小さいベクトルをなす値を示し得る。これらの実施形態において、複数のスカラ値又は少なくとも1つのベクトルをなす値がi番目のsomaコア102から受信され、そして、算術ユニット113によってそれらの値に単一のプログラム502又は複数の異なるプログラム502が適用されて、一連の出力値が生成され得る。この一連の出力値が、更なる処理のためにリデューサ115に提供され得る。
図4及び5は、図1A-1Cのコンピューティングアーキテクチャにおけるコプロセッサ機能の例を示しているが、図4及び5には様々な変更が為され得る。例えば、各シナプスコプロセッサ112は、他の規定された手法又は再構成可能な手法で実装されてもよい。
図6は、本開示に従った図1A-1Cのコンピューティングアーキテクチャにおけるプログラマブルコプロセッサ及びリダクション(削減)機能の一例を示している。特に、図6は、上述のシナプスコプロセッサ112及びリデューサ115のプログラミングを制御するための一機構例を示している。
図6に示すように、リデューサ115は、somaコア102に付随する複数のシナプスコプロセッサ112から出力データを受信するように構成される。リデューサ115は、次いで、シナプスコプロセッサ112からの出力を用いて少なくとも1つの処理(Ψによって識別される)を実行して、付随するsomaコア102に提供される少なくとも1つの結果を生成する。リデューサ115によって実行される1つ以上の計算は、複数のシナプスコプロセッサ112からの出力を用いて実行される任意の好適な演算を含み得る。一部の実施形態において、リデューサ115は、ハードウェアアーキテクチャにおける様々な機能をサポートするために、命令の1つ以上のシーケンスを実行し得る。例えば、付随するsomaコア102の複数のコプロセッサ112から並列にデータを受信した後に、リデューサ115は、受信したデータに対してプログラム可能な処理を実行して、(1つ以上の)結果を付随するsomaコア102に出力し得る。処理の例は、全てのシナプスコプロセッサ112からの出力を加算若しくは乗算すること、シナプスコプロセッサ112からの最小若しくは最大の出力を特定すること、又は特定のシナプスコプロセッサの値を出力として選択することを含むことができる。
シナプスコプロセッサ112によって実行される1つ以上のプログラム(φ)を格納するために、この構造においてメモリデバイス602を使用することができる。メモリデバイス602はまた、リデューサ115によって実行される1つ以上のプログラム(Ψ)を格納するために使用されることができる。メモリデバイス602は、例えばメモリ106、114、117のうちの1つ以上の部分など、任意の好適な(1つ以上の)揮発性又は不揮発性記憶・取り出しデバイスを表す。
図6は、図1A-1Cのコンピューティングアーキテクチャにおけるプログラマブルコプロセッサ及びリダクション機能の一例を示しているが、図6には様々な変更が為され得る。例えば、ハードウェアアーキテクチャは、任意の好適数のsomaコアを、好適数のシナプスコプロセッサ及びリデューサと共にサポートし得る。また、具体的なニーズに従って、図6の様々なコンポーネントが組み合わされ、更に細分化され、配置変更され、又は省略されてもよく、また、更なるコンポーネントが追加されてもよい。
図7及び8は、本開示に従った汎用並列コンピューティングアーキテクチャを使用するコンピューティングシステムの例を示している。図7に示すように、コンピューティングシステム700は、少なくとも1つのプロセッサ702、少なくとも1つの記憶デバイス704、少なくとも1つの通信ユニット706、及び少なくとも1つの入力/出力(I/O)ユニット708を含む。
プロセッサ702は、上述のsomaコア102、シナプスコプロセッサ112、リデューサ115、並びに信号ライン122及び124を組み込んだ集積回路チップを示し得る。プロセッサ702は、例えば、メモリデバイス710にロードされ、その後、somaコア102、シナプスコプロセッサ112及びリデューサ115のレジスタ又は他のメモリにロードされ得るものなどの、命令を実行する。プロセッサ702は、任意の好適数のsomaコア102、シナプスコプロセッサ112、リデューサ115、並びに信号ライン122及び124を含み得る。
メモリデバイス710及び永続ストレージ712は記憶デバイス704の例であり、記憶デバイス704は、情報(一時的ベース又は永続的ベースの例えばデータ、プログラムコード、及び/又は他の好適情報など)を記憶するとともにその取り出しを容易にすることが可能な任意の(1つ以上の)構造を表す。メモリデバイス710は、ランダムアクセスメモリ又は他の好適な(1つ以上の)揮発性若しくは不揮発性記憶デバイスを表し得る。永続ストレージ712は、例えば読み出し専用メモリ、ハードドライブ、フラッシュメモリ、又は光ディスクなどの、より長期でのデータ記憶をサポートする1つ以上のコンポーネント又はデバイスを含み得る。
通信ユニット706は、他のシステム又は装置との通信をサポートする。例えば、通信ユニット706は、有線又は無線のネットワーク上での通信を支援するネットワークインタフェースカード又は無線トランシーバを含み得る。通信ユニット706は、任意の好適な(1つ以上の)物理的又は無線通信リンクを介しての通信をサポートし得る。
I/Oユニット708は、データの入力及び出力を可能にする。例えば、I/Oユニット708は、キーボード、マウス、キーパッド、タッチスクリーン、又は他の好適な入力装置を介したユーザ入力のための接続を提供し得る。I/Oユニット708はまた、出力をディスプレイ、プリンタ、又は他の好適な出力装置に送信し得る。
必要とされる場合又は望まれる場合、使用のために利用可能なsomaコア102の数を増やすために、図1A-1Cに示したハードウェアアーキテクチャの複数のインスタンスを共に結合して使用し得る。例えば、複数の集積回路チップを共に通信可能に結合することで、所望数のsomaコア102を提供し得る。これの一例が図8に示されており、コンピューティングシステム700においてプロセッサ702として、又は他のコンピューティングシステムにおいて、マルチプロセッサ構成800が使用されてもよい。マルチプロセッサ構成800は、ここでは、少なくとも1つの高速接続によって結合された少なくとも2つのプロセッサを含む。この例では、リング状に4つのプロセッサ802-808が4つの高速接続810によって結合されているが、他の好適な個数及び構成のプロセッサ及び高速接続が使用されてもよい。
各高速接続810は、図1A-1Cに示したハードウェアアーキテクチャの複数のインスタンスを結合するのに好適な(1つ以上の)通信経路をサポートすることができる。例えば、各高速接続810は、その高速接続810がハードウェアインスタンスの信号ライン122及び/又は124間での信号の輸送をサポートするように、ハードウェアアーキテクチャの各インスタンスの第3階層120に通信可能に結合されることができる。各高速接続810は、例えば複数の集積回路チップ間などのハードウェアインスタンス間で信号を輸送するのに適した任意の構造を含む。
マルチプロセッサアーキテクチャをサポートすることには、様々なタイプの高速接続810が使用され得る。例えば、各高速接続810は、2つの集積回路チップ間のフォトニック接続を用いて実装され得る。他の一例として、集積回路チップそれら自体が“キルト(quilt)”パッケージングをサポートしてもよく、キルトパッケージングでは、各集積回路チップが少なくとも1つの側面に沿って電気接続を含んでおり、それら集積回路チップが、異なるチップ上の電気接続が互いに接触するようにマウントされる。しかしながら、留意されたいことには、他の又は追加の高速接続810も使用され得る。
図7及び8は、汎用並列コンピューティングアーキテクチャを使用するコンピューティングシステムの例を示しているが、図7及び8には様々な変更が為され得る。例えば、何らかの好適な機能を実行するために、図1A-1Cに示したハードウェアアーキテクチャが、何らかの他の好適システムで使用されてもよい。
図9は、本開示に従った汎用並列コンピューティングアーキテクチャを使用して高度なコンピューティング機能をサポートする方法900の一例を示している。説明の容易さのため、方法900を、図1A-1Cに示したハードウェアアーキテクチャに関して記述する。しかしながら、方法900は、他の好適なハードウェアアーキテクチャと共に使用されてもよい。
図9に示すように、ステップ902にて、複数の並列コンピューティングコアを用いてプロセッシング処理が実行される。これは、例えば、1つ以上のプロセッサ内の複数のsomaコア102が命令を実行して多種多様な計算のうちいずれかを実行することを含み得る。プロセッシング処理は、SIMD somaコア102によって実行される単純な処理から、フルプロセッサsomaコア102によって実行される複雑な処理に至るまで表し得る。なお、図9に示す処理は、処理の従属性のために、順番に実行されることができる。上述のようにチャネルアドレッシングを用いて、同じ処理の複数の独立したチェーンを同時に実行することができ、通信及びシナプス/リデューサ処理を並列に実行することができる。
ステップ904にて、各コンピューティングコアからの処理結果が他のコンピューティングコアに発行される。これは、例えば、各somaコア102がその処理結果を、信号ライン122及び124を介して、各somaコア102の1つのシナプスコプロセッサ112に提供することを含み得る。一部の実施形態において、これは、各somaコア102についてのシナプスコプロセッサ112が、全てのsomaコア102からの処理結果を受信することをもたらす。
各コンピューティングコアについて、コンピューティングコアからの処理結果が、ステップ906で処理され、ステップ908で削減される。これは、例えば、各somaコア102に付随するシナプスコプロセッサ112が、全てのsomaコア102からの処理結果に対して何らかのタイプの処理を実行することを含み得る。シナプスコプロセッサ112の算術ユニット113によって実行され得る処理のタイプの具体例については後述する。これはまた、各somaコア102についてのリデューサ115が、そのsomaコア102についてのシナプスコプロセッサ112の出力を処理することを含み得る。リデューサ115によって実行され得る処理のタイプの具体例については後述する。なお、シナプスコプロセッサ112及びリデューサ115によって実行される処理は、制御されたものとすることができ、また、例えば異なるチャネルのデータに対して異なるプログラムφ及びΨが使用されるときなどに変わることができる。
ステップ910にて、削減された結果がコンピューティングコアに提供される。これは、例えば、リデューサ115が、それが付随するsomaコア102に出力を提供することを含み得る。この時点で、方法900を繰り返すことができ、コンピューティングコアは、プロセッシング処理の更なる実行中に削減された結果を使用する。あるいは、方法900は終了し、後に新たなデータを用いて繰り返され得る。
図9は、汎用並列コンピューティングアーキテクチャを使用して高度なコンピューティング機能をサポートする方法900の一例を示しているが、図9には様々な変更が為され得る。例えば、一連のステップとして示されているが、図9における様々なステップは、重複してもよいし、並列に行われてもよいし、異なる順序で行われてもよいし、あるいは複数回行われてもよい。
以上の図1A-1Cに示したアーキテクチャの説明においては、アーキテクチャが多階層構造であるとして記述されている。例えば、シナプスコプロセッサ112及びリデューサ115がsomaコア102の上に置かれ、信号ライン122及び124がシナプスコプロセッサ112及びリデューサ115の上に置かれ得る。しかしながら、アーキテクチャ全体を形成するときにこれらコンポーネントに関して使用され得る物理レイアウトが数多く存在する。特定のアーキテクチャに使用される厳密なレイアウトは、多数のファクタに基づいて選択又は設計されることができ、必要に応じて又は所望に応じて様々となり得る。また、例えば、通信経路長を最小化すること、アーキテクチャのコンポーネントによって占有される空間を最小化すること、又は製造コスト若しくは組み立てコストを最小化することによってなど、特定のアプローチを用いて、レイアウトを最適化する助けとし得る。以下、使用され得る物理レイアウト例を記述するが、それらのレイアウトは単に例示のためであり、数多くの更なるレイアウトが当業者によって承知され又は開発され得る。
図10-12は、本開示に従った汎用並列コンピューティングアーキテクチャにおけるコンポーネントの接続の他の例を示している。説明の容易さのため、これらの接続を、図1A-1Cに示したアーキテクチャのコンポーネントに関して記述する。
図10に示すように、レイアウト1000は複数のsomaコア102を含み、それらのうちのサブセットがここに示されている。また、図10では、各somaコア102についてのシナプスコプロセッサ112が、そのsomaコア102の上方に縦方向に整列されるように示されている。各somaコア102とそのシナプスコプロセッサ112との間にリデューサ115がある。各somaコア102が、そのそれぞれの信号ライン1002を用いて、各somaコア102についてのそれぞれのシナプスコプロセッサ112(各列の1つのシナプスコプロセッサ112を意味する)にデータを送る。シナプスコプロセッサ112での計算の結果が、信号ライン1004を介して、somaコア102についてのリデューサ115に送られる。各リデューサ115が、結果を、それぞれの信号ライン1006を介してそのsomaコア102に送り返す。
一部の実施形態において、信号ライン1002及び/又は1004上の通信は、ポイント・ツー・ポイントであるとすることができ、シナプスコプロセッサ112が、データを受信し、次いで、それをライン上の次のシナプスコプロセッサ112に転送する。他の実施形態において、各信号ライン1002及び/又は1004は、複数の別々の信号ライン(例えば最大N個の信号ラインなど)を含む。これらの実施形態において、各信号ライン1002が、somaコア102を信号ライン1002上の各シナプスコプロセッサ112に直接接続することができ、また、各信号ライン1004が、全てのシナプスコプロセッサ112を付随するリデューサ115と直接接続することができる。
更なる他の実施形態では、各リデューサ115を、それが付随するsomaコア102に統合することができ、信号ライン1006は必要とされない。リデューサ115は、この場合、somaコア102のコンピューティング機能を用いて実装されることができ、あるいは、リデューサ115がそれ自身のコンピューティング機能を有してもよい。
図11に示すように、レイアウト1100は複数のsomaコア102を含み、それらのうちのサブセットがここに示されている。図11におけるsomaコア102は、図10においてと同様に示されており、それらは信号ライン1102を介してデータを送る。しかしながら、図11では、各somaコア102に、複数のコプロセッサ112及び1つの別個のリデューサ115ではなく、複数のコプロセッサ/リデューサコア1104が付随している。コプロセッサ/リデューサコア1104は、コプロセッサ112の機能とリデューサ115の機能の一部とを組み合わせた機能ユニットである。例えば値を合計すること又は最小値若しくは最大値の発見することのような連想演算などの特定のタイプの処理がリデューサ115内で使用されるとき、リデューサの機能を分散させることができる。連想演算の使用は、コプロセッサ/リデューサコア1104のうちの一部において中間結果が生成されることを可能にする。各somaコア102についてのチェーン内の最後のコプロセッサ/リデューサコア1104が、最終的なリデューサ結果を生成する。これは、信号ライン1106の全長を短縮させることができ、場合により物理レイアウトを単純化させ得る。
各コプロセッサ/リデューサコア1104は、somaコア102について入来する入力データの処理をサポートする任意の好適構造を含む。これらコプロセッサ/リデューサコア1104のうち少なくとも一部はまた、バイナリ連想演算又は他の削減処理をサポートする任意の好適構造を含む。
信号ライン1106は、コプロセッサ/リデューサコア1104を互いに及びsomaコア102に結合する。ここでは、幾つかの信号ライン1106が、1つのコプロセッサ/リデューサコア1104から同一のコプロセッサ/リデューサコア1104に進むループとして示されている。これらの信号ライン1106は、それらコプロセッサ/リデューサコア1104内での内部通信を意味し、コプロセッサ/リデューサコア1104の外にある実際の経路を表しているわけではない。
一部の実施形態において、信号ライン1106からデータを受信するコプロセッサ/リデューサコア1104のみが、リダクション機能を含んでもよく、残りのコプロセッサ/リデューサコア1104は、シナプスコプロセッサのみを示し得る。図11では、例えば、第1、第3、第5、及び第7行(ロウ)のコプロセッサ/リデューサコア1104が、シナプスコプロセッサのみを示し、第2、第4、第6、及び第8行のコプロセッサ/リデューサコア1104が、リダクション機能を持つシナプスコプロセッサを示すとし得る。
従って、図11に示す例では、第2行のコプロセッサ/リデューサコア1104の各々が、2つの値(それ自身の値及び第1行からの値)を合計するか、2つの値の最小値若しくは最大値を見つけるかして、結果を出力することができる。第4行のコプロセッサ/リデューサコア1104の各々が、3つの値(それ自身の値、第2行からの値、及び第3行からの値)を合計するか、3つの値の最小値若しくは最大値を見つけるかして、結果を出力することができる。第6行のコプロセッサ/リデューサコア1104の各々が、2つの値(それ自身の値及び第5行からの値)を合計するか、2つの値の最小値若しくは最大値を見つけるかして、結果を出力することができる。第8行のコプロセッサ/リデューサコア1104の各々が、4つの値(それ自身の値、第5行からの値、第6行からの値、及び第7行からの値)を合計するか、4つの値の最小値若しくは最大値を見つけるかして、結果を出力することができる。第8行の各コプロセッサ/リデューサコア1104からの結果が、関連する列(カラム)について合計値又は最大/最小値を示すことになる。
なお、これは、リデューサ115の機能が分散され得る一手法を表しており、8つのsomaコア102が使用される実施形態に特有のものである。例えば異なる数のsomaコア102及び異なる数の付随コプロセッサを使用する他のアプローチなどの、他のアプローチも使用され得る。これまた留意されたいことには、値を合計すること及び最小/最大値を発見することは、コプロセッサ/リデューサコア1104に分散され得る処理のタイプの単なる例である。
更に留意されたいことには、リダクション機能によって使用される入力の数及び入力値の(1つ以上の)ソースは、必要に応じて又は所望に応じて様々であることができ、リダクション機能を実装するコプロセッサ/リデューサコア1104の厳密な位置は、必要に応じて又は所望に応じて様々であることができる。例えば、入力の数は、例えばsomaコアの数及び付随するコプロセッサの数などのアーキテクチャの全体サイズに依存して様々となり得る。また、リダクション処理に使用される入力は、コプロセッサ/リデューサコア1104から来るのみである必要はない。リダクション処理に使用される入力はまた、あるいは代わりに、例えば入力が他のリデューサからの出力を含む場合など、1つ以上の外部エージェントから来るものであってもよい。これは、モノリシックリデューサ実装が使用されて列内の全てのシナプスコプロセッサ112が1つのリデューサ115と通信するものである図10に示した例とは対照的である。他の可能な実装は、列毎に1つのリデューサを持つとともに、チップ/半導体ダイ毎に1つ以上の追加リデューサを持ち、その(1つ以上の)追加リデューサを用いて、複数のチップ/半導体ダイ間の通信トラヒックを減らすことができる。
信号ライン1102及び1106は、好適な手法でコンポーネントを共に結合するために使用されることができ、また、信号ライン1102及び1106は、任意の(1つ以上の)好適技術を用いて製造されることができる。実装に応じて、図11におけるコンポーネントは、単一デバイスにて、又は共に結合される複数のデバイスにて形成され得る。例えば、図11に示すコンポーネントの全てが単一の集積回路チップ内に製造されてもよいし、あるいは、図11に示す異なるコンポーネントが、直列ポイント・ツー・ポイント接続、高速バス、又は他の接続のような電気接続を用いて共に結合される異なる集積回路チップ内に製造されてもよい。
図12は、somaコア102、シナプスコプロセッサ112、及びリデューサ115を実装するために複数の集積回路チップ1202及び1204が使用されるレイアウト1200の一例を示している。なお、ここでの別々のシナプスコプロセッサ112及びリデューサ115の代わりに、コプロセッサ/リデューサコア1104が使用されてもよい。これまた留意されたいことには、上述のように、集積回路チップ1202と1204との間で送られるデータを更に削減するために、少なくとも1つの追加リデューサ115が使用されてもよい。
異なる集積回路チップ1202及び1204内のコンポーネントを結合するために、1つ以上の通信リンク1206又は他の通信インタフェースが使用され得る。例えば、(1つ以上の)通信リンク1206が、チップ1202内のsomaコア102からチップ1204内のシナプスコプロセッサ112への接続と、チップ1204内のリデューサ115からチップ1202内のsomaコア102への接続を含み得る。このタイプのレイアウトは、異なる数又はタイプのsomaコア102及びシナプスコプロセッサ112/リデューサ115を含む集積回路チップの様々な組み合わせを可能にし得る。
図10-12は、汎用並列コンピューティングアーキテクチャにおけるコンポーネントの物理レイアウトの例を示しているが、図10-12には様々な変更が為され得る。例えば、ハードウェアアーキテクチャは、任意の好適数のsomaコアを、好適数のシナプスコプロセッサ、リデューサ、コプロセッサ/リデューサ、又は信号ラインと共にサポートし得る。また、上述のように、多種多様な物理レイアウトを使用することができ、図10-12は、本開示を図示したレイアウトのみに限定するものではない。
図13-19は、本開示に従った汎用並列コンピューティングアーキテクチャにおける通信スキームの例を示している。somaコア102とそれらのシナプスコプロセッサ112との間でのデータ転送をサポートするためのネットワーク又は他の通信機構の実際の実装は、数多くの異なる形態をとることができる。以下、それらの通信機構のうち幾つかの具体例を記述するが、somaコア102とそれらのシナプスコプロセッサ112との間でデータを輸送することには、他の好適な通信スキームが使用されてもよい。また、以下に提供する通信スキーム例は、somaコア102及びそれらのそれぞれのシナプスコプロセッサ112が物理的に結び付ける実装にもそうでない実装にも等しく適用される。
N個のsomaコア102と、somaコア102毎にN個のシナプスコプロセッサ112とを有する実装を仮定する。図13において、各somaコア102は、そのシナプスコプロセッサ112のうちの1つへの単一の接続1302を有し、そのsomaコア102についての残りのシナプスコプロセッサ112は共にデイジーチェーン接続されている。チェーン内の最初のシナプスコプロセッサ112は、somaコア102からデータを受信し、チェーン内のその他全てのシナプスコプロセッサ112は、チェーン内の前のシナプスコプロセッサ112からデータを受信する。この例では、somaコア102の全てのシナプスコプロセッサ112がデータを持つまで、複数のシナプスコプロセッサ112が次から次へと順に、somaコア102からのデータを受信する。
単一のデイジーチェーンの使用は要求されるものではない。例えば、図14では、各somaコア102が、シナプスコプロセッサ112の複数のチェーンへの複数の接続1402を有することができる。各チェーンの最初のシナプスコプロセッサ112が、somaコア102からデータを受信し、そのデータが、各チェーン内のシナプスコプロセッサ112を通って順々に渡される。これら異なるチェーンに並列にデータを提供することができ、図13と比較して、全てのシナプスコプロセッサ112へのデータのより速い送達を可能にする。なお、ここでは2本のチェーンが示されているが、如何なる数のシナプスコプロセッサチェーンが用いられてもよい。
デイジーチェーンの使用も要求されるものではない。例えば、図15では、somaコア102が、そのシナプスコプロセッサ112の各々への専用の接続1502を有することができる。ここでは、シナプスコプロセッサ112が、somaコア102から直接的にデータを受信し、また、シナプスコプロセッサ112の全てが並列にデータを受信し得る。
単一のsomaコア102からそのシナプスコプロセッサ112のうちの1つへの通信をサポートし、そのシナプスコプロセッサ112からの通信を分岐させることも可能である。例えば、図16は、単一の接続1602がsomaコア102を1つのシナプスコプロセッサ112に結合し、複数の接続1604がそのシナプスコプロセッサ112をシナプスコプロセッサ112の複数のチェーンに結合することを示している。データは、somaコア102から第1のシナプスコプロセッサ112に提供されることができ、次いで、そのデータがシナプスコプロセッサ112の複数のチェーンに並列に提供され得る。なお、ここではシナプスコプロセッサ112の3本のチェーンが示されているが、如何なる数のチェーンが使用されてもよい。これまた留意されたいことには、2つ以上のシナプスコプロセッサ112がsomaコア102から直接的にデータを受信した後に、それら2つ以上のシナプスコプロセッサ112からの通信を分岐させてもよい。
さらに、シナプスコプロセッサ112をツリー又は他のマルチレベル階層にて構成することも可能である。例えば、図17は、単一の接続1702がsomaコア102を1つのシナプスコプロセッサ112に結合することを示している。複数の接続1704が、そのシナプスコプロセッサ112を別のレベルのシナプスコプロセッサ112に結合し、複数の接続1706が、そのレベルのシナプスコプロセッサ112を更に別のレベルのシナプスコプロセッサ112に結合する。好適数の階層レベルでのシナプスコプロセッサ112の使用を支援するために、この構成を更なる回数繰り返すことができる。なお、左から右に移るにつれ、各シナプスコプロセッサ112が次レベルの3つのシナプスコプロセッサ112に結合されているが、これは単に例示のためのものである。必要に応じて又は所望に応じて、他の好適なツリー構成がサポートされてもよい。なお、他の可能な一構成は、2つ以上のツリーを有し、これが意味することは、2つ以上のシナプスコプロセッサ112が、somaコア102から直接的にデータを受信し、個々のツリーのルートノードとして作用するということである。
図13-17のレイアウトは通信経路の構成例を示しているが、これらは単に例示のためのものである。各シナプスコプロセッサ112がそれが付随するsomaコア102からデータを受信することができる限り、これらのアプローチの様々な組み合わせも使用され得る。また、例えば、somaコア102を隣接するシナプスコプロセッサ112に通信可能に結合し、次いでそれらがメッシュネットワークを通じて他のシナプスコプロセッサ112にデータを伝達するメッシュネットワークなどの、他の又は更なるアプローチも使用され得る。適切な構造のメッシュは、各シナプスコプロセッサ112がデータを受信することを保証する。
ここまでの通信スキームに関する設計は、somaコアがそのシナプスコプロセッサ112とプライベートに通信し得ることを仮定してきたが、これは必ずしも当てはまる必要があるわけではない。例えば、図18に示すように、これらに代わる1つの可能な実装は、somaコア102に対して仮想ネットワーク1802を使用するものであり、somaコア102からそれらのシナプスコプロセッサ112へと、データが、ネットワーク1802を介して効果的にルーティングされる。仮想ネットワーク1802は、シナプスコプロセッサ112それら自身によって実行されるロジックを用いて、又はシナプスコプロセッサ112の外部のコンポーネントを用いて実装され得る。
仮想ネットワーク1802を実装するために、仮想ネットワーク1802上で送られる各データパッケージが、該データパッケージが正しい(1つ以上の)宛先に届くことを可能にするメタ情報を有する。このメタ情報を記述する様々な手法が存在する。例えば、一部の実施形態において、各データパッケージは、起源となるsomaコア102に関する識別子を有し得る。ルーティングテーブル1804(静的又は動的のいずれか)を使用して、データパッケージを、それらそれぞれのsomaコア102から適切なシナプスコプロセッサ112に転送することができる。一つの特定の実装は、各シナプスコプロセッサ112についての静的なルーティングテーブルの使用を伴い、ルーティングテーブルへのインデックスとしてアドレスが使用される。他の実施形態では、各データパッケージが、送信元のsomaコア102によって指定される1つ以上の宛先アドレスを有してもよく、仮想ネットワーク1802は、データパッケージをそれらの宛先アドレスに従ってルーティングすることができる。起源となるsomaコアの識別子又は宛先アドレスを指定することには、如何なる好適な機構が使用されてもよい。機構の例は、各データパッケージに明示的な情報を付加すること、又は各データパッケージを指定のアドレス(例えば、somaコアのアドレス空間内など)に格納し、その指定されたアドレスが、必要な情報を暗示的に伝えることを含む。
更なる他の一例として、2つ以上の参加者(somaコア102又はシナプスコプロセッサ112)によって共有されるリソースを用いて通信を実装することが可能である。少なくとも1つの参加者が共有リソースへの書き込みアクセスを持ち、そして、少なくとも1つの他の参加者が共有リソースへの読み出しアクセスを持つ。共有リソースは、様々な手法で実装され得る。例えば、“ストア・アンド・フォワード(蓄積転送)”ネットワークは、データが、1つ以上のコンポーネントによって格納されるとともに、1つ以上のコンポーネントによって取り出される(転送される)ネットワークを意味する。“ストア・アンド・フォワード”ネットワークは、各somaコア102がシナプスコプロセッサ112にデータを通信することを、そのデータを指定のアドレスに格納することによって可能にし、シナプスコプロセッサ112はその後に同じアドレスからそのデータを読み出すことができる。
一例を図19に示しており、ここでは、共有メモリ1902を用いて、somaコア102からコプロセッサ/リデューサコア1104(シナプスコプロセッサ112とリデューサ115も使用され得る)にデータが転送される。共有メモリ1902は、多数のメモリロケーション1904を含む。somaコア102は、それらのメモリロケーション1904にデータを書き込むことができ、シナプスコプロセッサ112又はコプロセッサ/リデューサコア1104は、それらのメモリロケーション1904からそのデータを読み出すことができる。これは、somaコア102がシナプスコプロセッサ112又はコプロセッサ/リデューサコア1104にブロードキャストする通信パターンに対して内部的に最適化された手法で行われることができる。
この例では、メモリロケーション1904にデータを書き込む又はそれからデータを受け取るために、メモリインタフェース1906及び1908が設けられて使用される。メモリインタフェース1906及び1908の各々は、アドレスを受け取ることができ、メモリインタフェース1906はまたデータを受け取ることができる。メモリインタフェース1906は、受け取ったデータを、受け取ったアドレスに書き込み、メモリインタフェース1908は、受け取ったアドレスから、要求されたデータを読み出す。しかしながら、留意されたいことには、somaコア102及びシナプスコプロセッサ112若しくはコプロセッサ/リデューサコア1104が、指定されたメモリロケーションに対する読み出し及び書き込みを行うように構成される場合、メモリインタフェース1906及び1908は省略されてもよい。
シナプスコプロセッサ112又はコプロセッサ/リデューサコア1104は、任意の好適手法で共有メモリ1902にアクセスし得る。例えば、シナプスコプロセッサ112又はコプロセッサ/リデューサコア1104は、新たなデータを特定するために共有メモリ1902にポーリングすることができ、あるいは、シナプスコプロセッサ112又はコプロセッサ/リデューサコア1104は、データが共有メモリ1902に格納されるときに、帯域外(アウト・オブ・バンド)通知を受け取ることができる。
例えば、コンポーネント間でデータを転送するために変数を使用して共有メモリ1902が実装されるものなど、この設計をソフトウェア実装でサポートすることが可能である。当然ながら、そのような変数は実行するデバイスのメモリに格納されるが、そのメモリは特別な構成を必要としない。図19に示す機能は、他の手法で実装されることもできる。例えば、メールボックス又は他のセグメント化されたメモリ空間を実装する特殊目的のハードウェアも、通信を支援するために使用されることができる。
一部の実施形態では、N個のsomaコア102が存在し得るが、各somaコア102がN個のシナプスコプロセッサ112を有していなくてもよい。代わりに、各somaコア102は、N個の“論理”シナプスコプロセッサを、より少ない数の実在シナプスコプロセッサ112を用いて実装してもよい。それらの実施形態では、論理通信リンクのうちサブセットを物理的に実装することができ、上述の様々な方法を単純化することができる。
図13-19は、汎用並列コンピューティングアーキテクチャにおける通信スキームの例を示しているが、図13-19には様々な変更が為され得る。例えば、somaコア102と付随するシナプスコプロセッサ112との間でデータを転送するために、任意数の他の又は追加の技術が使用されてもよい。また、ここに示した技術はいずれも、シナプスコプロセッサ112とリデューサ115又はコプロセッサ/リデューサコア1104を含むアーキテクチャで使用され得る。
上述の一部の実施形態において、各somaコア102は、そのシナプスコプロセッサ112を、少なくとも1つのプログラムφを実行するようにプログラムすることができ、その(1つ以上の)プログラムφは、入力データが到着するとすぐに実行されることができる。あるsomaコア102についてのリデューサ115は、そのsomaコア102についての全てのシナプスコプロセッサ112からのプログラムφの結果を用いて、少なくとも1つのプログラムΨを実行する。特定の実施形態において、各プログラムφは、固定ベクトルサイズ及びループなしを所与としてO(1)時間で実行できることが多く、プログラムΨはO(logN)時間で実行できることが多い。また、特定の実施形態において、各somaコア102についてシナプスコプロセッサ112及びリデューサ115によって実行される集団的処理は:
として表され得る。ここで、iは、送り元のsomaコア102の識別子(又はsomaコア102の識別子+somaコア102のsomaグループ識別子)を表し、Nは、somaコア102の数(又はsomaコア102の数×somaグループの数)を表す。また、jは、チャネル識別子を示し、pは、シナプスコプロセッサ112で使用される1つ以上のパラメータ(例えばパラメータ404又は504など)(例えば状態変数又は局所変数などであり、チャネル特異的であってもなくてもよい)を表す。さらに、x
iは、i番目のsomaコア102の出力を表し、y
jは、チャネルjにおける、リデューサによって結果としてsomaコア102に提供される出力を表す。さらには、φ
j()は、入力データx
i及び場合によりパラメータpを用いてj番目のチャネルについてシナプスコプロセッサ112によって実行される関数を表し、Ψ()は、シナプスコプロセッサ112の出力を用いてローカルsomaコア102についてリデューサ115によって実行される関数を表す。
φ
j()関数の例は:
を含み得る。ここで、a、b、c、及びrは、シナプスコプロセッサ112内のレジスタの名称を表すことができ、xは、somaコア102からの入力値を表すことができる(ただし、シナプスコプロセッサ112の別のレジスタも代わりに使用され得る)。select演算は、第1パラメータの条件を(例えば、単純な非ゼロテストを実行することなどによって)テストし、テストの結果に基づいて第2パラメータ又は第3パラメータのいずれかを返す。index演算は、複数のsomaグループを持つ実装に特有とし得る。各somaグループが同数のsomaコア102を含み得る。somaグループの更なる詳細については以下にて提示する。一部の実施形態において、シナプスコプロセッサ112によって実装される関数はいずれもループを伴わない。
Ψ()関数の例は:
を含み得る。ここで、vは、somaコア102に提供されるリデューサ115の出力を表し、r[i]は、リデューサ115によってシナプスコプロセッサ112から受け取られる入力を表す(複数のsomaグループを有する実装では、同一のシナプスコプロセッサ112から複数の値が得られ得る)。max関数及びmin関数の各々は、(i)最大値又は最小値と、(ii)最大値又は最小値を提供したシナプスコプロセッサ112のインデックス値iとの両方を返すことができる。Ψ()関数の結果は、1つ以上のレジスタを用いてsomaコア102に利用可能にされ得る。
これらの実施形態において、シナプスコプロセッサ112は、ループで動作して積極的に入力を取り出す(及び必要な場合に入力を待つ)伝統的なプログラムではプログラムされることができないことがあり得る。代わりに、各チャネルがプログラムφに関連付けられ、そのプログラムφが、チャネルに関してデータが到着したときに実行可能としてマークされ、そして最終的に、計算リソースが利用可能になったときに実行され得る。全てのシナプスコプロセッサプログラムφが終了すると、リダクションプログラムΨの結果を計算することができる。リダクションプログラムΨによる結果の計算は、最低限の数のシナプスコプロセッサの結果が利用可能になるとすぐに開始することができるが、例えば以下に述べるものなどの注意事項がある。リダクションプログラムΨの結果は、チャネル毎のレジスタに保存され得る。somaコア102が、削減結果を読み取るための命令を発すると、リデューサ115は、そのチャネルについての次の削減結果を生成する準備が整い得る。それまでは、そのチャネルについてのリデューサ115の処理が阻止され得る。
シナプスコプロセッサ112及びリデューサ115におけるレジスタの割り当て及びチャネルの割り当ては、望まれる場合には抽象化されることができる。例えば、プログラム仕様におけるこれらリソースの各々についての絶対インデックスを参照することに代えて、割り当て機構を使用して、マルチプログラム実行と同等のものを達成し得る。例えば、プログラム(φ及びΨプログラムを含む)がロードされると、使用される実在レジスタがレジスタファイルの利用可能なレジスタから選択され得るとともに、利用可能なチャネルが選択され得る。入来するデータに基づいてプログラムが呼び出されるので、明示的な同時並行性を生み出す必要はない。プログラムを終了すると、レジスタ及びチャネルに関して使用されたリソースが再び利用可能にされ得る。シナプスコプロセッサ112及びリデューサ115によって実行される実際の命令は、これのいずれについても知る必要がない。むしろ、アップロードされたプログラムコードの命令は、絶対レジスタ番号又はインデックスを使用することができ、抽象化は、より高い階層で行われることができ、somaコア102によるプログラムローディングに先立って、プログラム及び利用可能リソースのニーズに基づく適切なコード生成又は書換えが行われる。
最低限の数のシナプスコプロセッサの結果が利用可能になるとすぐに開始するリダクションプログラムΨによる結果の計算に対する注意事項の一例は、以下の通りである。演算及び場合によりデータタイプに依存して、ハードウェアアーキテクチャは、指定された処理順序に従わないことによって、再現性を犠牲にして、プログラムΨの実行を大幅に高速化することができるモードをサポートし得る。例えば、浮動小数点演算は、キャンセルの可能性があるため、結合規則に従わない。これの一具体例は、毎回まったく同じ結果を生じることを保証するために、浮動小数点加算が同じ順序で実行されなければならない場合である。これは、1つの入力値がまだ利用可能でないが、処理順序で後の他の入力値が利用可能である場合に低速化を引き起こしてしまい得る。リデューサ115は、処理順序が常に維持されるように入力値を待つ(低速化をもたらす)ようにプログラムされることができ、あるいは順不同で合算を実行する(より迅速に結果を得ることを可能にするが、潜在的に低い再現性を持つ)ようにプログラムされることができる。
上述のように、ハードウェアアーキテクチャの実装は、2つ以上のグループのsomaコア102を含むことができる。このようなアプローチは、単一の集積回路内にsomaグループを実装してもよいし、あるいは、異なるsomaグループが別々の集積回路として実装されてもよい(そして、それらの集積回路が、例えば電気接続又は光接続などで共に結合され得る)。幾つかのタイプのプログラム(より詳細に後述するものを含む)は、データセット全体をsomaコア102にマッピングすることができる場合に、このタイプのハードウェアアーキテクチャを用いて大幅に高速化されることができる。
複数のsomaグループでのソリューションを容易にするため、各シナプスコプロセッサ112の通信相手の数に応じて、一部のリソース及び処理を複製してもよい。例えば、単純なモデルでは、各シナプスコプロセッサ112が、きっちり1つのsomaコア102から結果を受信するとし得る。複数のsomaグループでのソリューションでは、各シナプスコプロセッサ112が、somaグループ当たり1つのsomaコア102から結果を受信し得る。シナプスコプロセッサプログラムにおいて、これは、データ転送に関係するリソース(例えば、送信されるデータを保持するレジスタ及び結果を保持するレジスタなど)が複製される場合に、まるで単一somaグループでの実装においてのように表現されることができる。従って、各シナプスコプロセッサレジスタについてS個の複製が存在する場合、最大S個までのsomaグループを扱って動作するように単一のプロセッサを実装することができる。somaグループ毎のパラメータを可能にするには、データのソースであるsomaグループ番号へのアクセスを提供することが有用又は必要であり得る。これは、特定の通信に使用されるsomaコアインデックスに加えてsomaグループ番号を返すものである上述のindex演算を用いて達成され得る。
複数のsomaグループの実装は、それらが物理的に分離されている場合、例えばフォトニクス又はその他の高速インタコネクトを用いて複数の集積回路を結合することによってなど、如何なる好適手法で達成されてもよい。各somaコア102がその結果を専用バスに書き込む場合、各somaグループ内の異なるsomaコア102のそれぞれのバスを接続することができ、それが、各バスを1:Nの通信バスからS:Nのバスに変化させる。これが許されるのは、例えば、送信されるデータが、最も一般的な形式[somaグループID、somaID、チャネルID]のような完全なアドレスを担持していて、各somaグループ内の各somaコア102上のあるシナプスコプロセッサ112がデータを受け取ることを確保し得る限り、somaグループ毎を基本にデータがルーティングされることが可能にされる場合である。
さらに、信号ライン122及び124を用いてsomaコア102をシナプスコプロセッサ112に結合するのに使用される(1つ以上の)ネットワークを実装するための数多くの可能なアプローチが存在する。例えば、上述のように、N個の独立したネットワークの各々が、N個のsomaコア102のうちの1つをソースとして持つとともに、そのsomaコア102をN個のシナプスコプロセッサ112(各somaコア102のもの)に接続することができる。各somaコア102の各出力に対する専用ネットワークは、データ転送において起こり得る競合を最小化し得るが、伝送が発生していないときにリソースが使用されないことを意味する。理想的には、somaコア102の全てが足並みを揃えて動作して、ほぼ同時にデータを送信するが、これは専用の信号ラインを用いてのみ良好に対処され得る。実際には、somaコア102は、例えば、リソースを待つような実行における細かい影響、又は分岐予測のような様々な動的決定などの、様々な要因によって同期を失い得る。その場合、伝送は厳密に同時には発生しないことになる。伝送されるデータは通常は小さいので、somaコア102を接続するためにネットワークのうちの1つ(又は少ない数)を使用することで、有意な低速化なく、十分であり、それが、リソースの改善された利用を提供することになる。なお、上述のアドレス[somaグループID、somaID、チャネルID]において、somaグループ毎の各somaコア102が、それを各somaコア102上のシナプスコプロセッサ112に接続するそれ自身の専用ネットワークを有する場合、somaIDは省略されることができる。接続ネットワークの他の一実装は、somaグループ当たり1つの単一ネットワークを有し、全てのデータパッケージが、それに付加された完全なアドレスを有する。
somaコア102間にネットワークを作り出すための様々な手法が存在する。1つの可能性は、全てのデータパケットを中心の開始ポイントから各受信者に送るものである。この開始ポイントから、データパケットはまた、他のsomaグループにも容易に送られることができる。このアプローチの利点は、直接的な送達、高スループット(異なる宛先への伝送との衝突がない)、及び低レイテンシを含む。1つの欠点は、特にsoma当たり又はsomaグループ当たり1つのネットワークでは、高コストであることである。
他の1つのアプローチは、限られた組みのsomaコア102とのポイント・ツー・ポイント接続を提供するとともに、受信者にデータパッケージをさらに配布させるものである。それら受信者は、異なるサブセットのsomaコア102に接続されることができ、それらサブセットは、全てのsomaコア102が接続されることを確保するように選択され得る。理想的には、それらサブセットは、ネットワークの“直径”を縮小又は最小化するように選択されることができ、ここで、ネットワークの直径は、2つのコア102間の最大距離(宛先に到達するために踏み入るsomaコア102の数)を指す。somaコア102当たりの接続数についての一定の上限を所与として、その程度の超立方体(ハイパーキューブ)アーキテクチャが直径を最小化し得る。
全てのsomaコア102がデータを受信して、できるだけ多くの個別の接続上に送信を広げることを保証するために、様々なアプローチが使用され得る。例えば、よく知られたアルゴリズムは、送信元のsomaコア102のインデックス及びそれからデータが受信されるリンクを考慮に入れることができる。そのような場合、各somaコア102からのデータはある固定パターンで送られることができるが、そのパターンが個々のsomaコア102で異なって、接続の利用を最大化することができる。このアプローチはまた、各somaコア102が選択された隣接者とだけ通信し、それら隣接者が必要な場合にデータを転送するとし得るので、各ネットワークの中心の開始位置の排除を可能にする。ネットワーク内の1つ以上のsomaコア102が、他のsomaグループにデータを送信することを担い得るとともに、異なるsomaコア102が異なるsomaグループとの通信を担い得る。
動的アルゴリズムも使用されることができる。例えば、受信された全てのパケットが、1つのsomaコア102から全ての隣接者(パケットを送信するsomaコア102を除く)に転送されることができる。そして、各隣接somaコア102は、それがそのパケットを既に見たかどうかの記録をつけることができる。そうであれば、そのパケットを単純に廃棄することができる。そうでなければ、その隣接somaコア102についてのシナプスコプロセッサ112が、そのパケットを受信して転送する。このアプローチの1つの利点は、より迅速にネットワーク全体に送りつけることができることである。このアプローチの別の1つの利点は、複数のsomaグループを設計に統合することが、より簡単であることである。1:Nのバスアーキテクチャ(送信者の衝突のチェックをする必要がない)を、S:Nのアーキテクチャに変えることは、大きな前進であり得る。1つのsomaグループのあるsomaコア102が、別のsomaグループの別のsomaコア102にパケットを転送する場合、後者は、そのパケットを、自身が任意の他の入来パケットをどのように見るのかと同様に見ることができる。実際には、このsomaコア間リンクは、通常のsomaグループ内soma間接続(normal inter-soma intra-soma group connections)のように見なされ得る。
上述のように、シナプスコプロセッサ112及びリデューサ115の使用を容易にするために、数多くの新命令を使用することができる。それらの命令は、somaコア102によって実行される命令と、シナプスコプロセッサ112及びリデューサ115に提供されてそれらによって実行される命令とを含む。以下、この新たなハードウェアアーキテクチャをサポートするために使用され得る新命令のタイプの例を提示する。なお、以下では具体的な命令が記述されるが、必要に応じて又は所望に応じて、他の又は追加の命令がハードウェアアーキテクチャにおいてサポートされ得る。
表1は、somaコア102及びシナプスコプロセッサによって実行され得る命令の例を示している。表1において、oregは、somaコアレジスタ(例えばメモリデバイス106内など)を表し、yregは、シナプスコプロセッサレジスタ(例えばメモリデバイス114内など)を表す。
表2は、リデューサ115によって実行され得る処理の例を示している。リダクション処理は、対数的に多くのサイクルを要することがあり、そのため、リダクション処理は、複数のこのような処理を異なるツリー階層でパイプライン化することの恩恵を受け得る。
一部の実施形態において、各シナプスコプロセッサ112は、SIMD演算を実行することができる。各somaコア102は、特定のチャネル上のデータ通信の前に、そのチャネルについての命令シーケンスをローカルシナプスコプロセッサ112にアップロードすることができる。さらに、各somaコア102は、ブロードキャストすることによって、そのチャネルについての命令シーケンスをそのシナプスコプロセッサ112の全てにアップロードすることができる。somaコア102は更に、必要な入力データが利用可能になったときに実行されるべき処理を、リデューサ115にプログラムすることができる。表3は、実行のためにシナプスコプロセッサ112にアップロードされ得る命令のタイプの例を示している。
上述のハードウェアアーキテクチャは、機械学習、科学計算、ビデオゲーム、及び他の分野における広範なクラスのアルゴリズムを加速させることができる。以上の命令のタイプに基づき、以下にて、6つのタイプの問題例が、本特許文献に記載されたハードウェアアーキテクチャを用いてどのように加速されて解かれ得るのかを説明する。
第1の例として、提案したアーキテクチャによって加速されることが可能な、深層学習で使用される1つアルゴリズムは、スパースコーディング(sparse coding)である。その最も単純な形態において、スパースコーディングは、||x||=1で正規化された入力ベクトルxをとり、次式:
として規定されるエネルギーeを最小化する正規化されたスパース出力ベクトルyを計算する。ここで、Fは因子行列であり、||y||=1である。また、
は、yのエントリーの絶対値の合計を表し、λは、出力のスパース性を制御する定数である。教師なし学習モードにおいて、因子行列Fは、トレーニング入力x
iのセットにわたるエネルギーe
iの合計Eを最小化するように選択される。両方の最小化を達成する1つの手法は勾配降下法であり、負の勾配が:
として規定され、その後、||y
i||=1の制約が課される。ここで、sgn yは、yのエントリーの符号のベクトルを表す。
(y-Fx)を計算するために、訓練入力x及び出力yは、共有の仮想又はローカルsomaメモリ内にあることができる。因子行列F(スパースではない)のエントリーは、シナプスコプロセッサ112のレジスタ内にあることができる。具体的には、因子行列FのエントリーFjkは、j番目のsomaコア102についてのk番目のシナプスコプロセッサ112のレジスタ内にあることができる。somaコア102によってそのシナプスコプロセッサ112にブロードキャストされるSIMD命令は、相対的アドレッシングを使用することができ、それにより、複数のsomaコア102にわたって同時に、k番目のsomaコア102が、入力エントリーxkを、j番目のsomaコア102のk番目のシナプスコプロセッサ112にブロードキャストすることができる。j番目のsomaコア102のk番目のシナプスコプロセッサがSIMD的に乗算Fjkxkを実行し、次いで、それが、そのsomaコアのシナプスコプロセッサ112にわたってj番目のsomaコア102のリデューサ115によって対数時間で合計されて、(Fx)j、ひいては、j番目のエントリー(y-Fx)jを生み出す。
Fについての勾配降下を計算するために、エントリーFjkが(y-Fx)jxkに比例増分される。j番目のsomaコア102は(y-Fx)jを計算したところであり、そのk番目のシナプスコプロセッサ112は、最新のxk値を受け取って、それをシナプスコプロセッサ112のレジスタに格納している。故に、j番目のsomaコア102が、(y-Fx)jをそのk番目のシナプスコプロセッサ112にブロードキャストし、次いで、該シナプスコプロセッサ112が、SIMD的に、その結果に、格納されたxk値を乗算し、その値の倍数をそのシナプスコプロセッサ112に格納されたFjk値に加算する。
これを擬似コードで表現するため、somaコア102は複数命令複数データ(MIMD)コアであるので、命令が置かれているsomaコア102のインデックスをiが表すという規則が採用される。MIMDに起因して、命令はiによってパラメータ化され得る。対照的に、シナプスコプロセッサ112はSIMDコアとし得るので、somaコア102は、同じ命令シーケンスをそのシナプスコプロセッサ112の全てにブロードキャストすることができる。明瞭さのため、レジスタに、レジスタ番号ではなく、変数名のラベルを付す。これらの規則を所与として、深層学習問題に関するスパースコーディングを、ハードウェアアーキテクチャを用いて、次のように解くことができる:
send x →cid1
synapse cid1 {
recv → x
multiply F x → y’
return y’
} reduce add recv cid1 → y’
y - y’ → dy
store dy → cid2
synapse cid2 {
recv → dy
multiply dy x → dF
multiply dF -e → dF
add F dF → F
}。
第2の例として、提案したアーキテクチャによって加速されることが可能な、深層学習で使用される別の1つのアルゴリズムは、制限ボルツマンマシンに関わる。このタイプのネットワークでは、{-1,1}の値をとる入力ベクトルxと出力ベクトルyとを、ボルツマン分布によって:
のように確率的に関連付けることができる。ここで、Zは分配関数(partition function)であり、エネルギーE(x,y)は、その最も単純な形態で:
として表現されることができる。このネットワークは、入力を所与として出力は条件付きで独立であり、逆もまた然りという意味で“制限”されている。これが意味することは、入力が与えられると、出力を、
として表される確率で独立してサンプリングすることができるということである。ここでσ(x)はロジスティック関数である。このネットワーク用の対照発散教師なし訓練アルゴリズムは、結合(カップリング)Fについての勾配:
をとり、ここで、xは訓練入力であり、yは、上で説明したようにxからサンプリングされ、x’はyからサンプリングされ、y’はx’からサンプリングされる。
この問題を実装するために、訓練入力xk及び出力yjは、共有の仮想又はローカルsomaメモリ内にあることができる。結合Fjkは、シナプスコプロセッサ112のレジスタ内にあることができる。具体的には、各結合Fjkは、j番目のsomaコア102のk番目のシナプスコプロセッサ112のレジスタ内にあることができる。このアルゴリズムがどのように加速されるのかを説明するために、先ず、サンプリングステップを説明する。入力ベクトルxが、複数のsomaコア102にわたって同時にSIMD通信を介して与えられると、k番目のsomaコア102が、入力エントリーxkを、j番目のsomaコア102のk番目のシナプスコプロセッサ112にブロードキャストする。次いで、j番目のsomaコア102のk番目のシナプスコプロセッサ112が、SIMD的に乗算Fjkxkを実行し、次いで、それが、そのsomaコアのシナプスコプロセッサ112にわたってj番目のsomaコア102のリデューサ115によって対数時間で合計されて、ΣkFjkxkを生み出す。次いで、j番目のsomaコア102が、この合計のロジスティック関数を計算し、それを、{-1,1}からyjをランダムにサンプリングする確率として使用する。
次に、勾配の計算が行われる。訓練入力xから開始して、上述のサンプリングステップを3回実行することで、j番目のsomaコア102におけるy、k番目のsomaコア102におけるx’、及びj番目のsomaコア102におけるy’を生み出す。j番目のsomaコア102が、yj及び(y’)jを、その全てのシナプスコプロセッサ112に、そこのレジスタ内に格納すべくブロードキャストする。次いで、高帯域幅通信を用いて、k番目のsomaコア102から全somaコア102のk番目のシナプスコプロセッサ112へと(x’)kを同時に送信する。最後に、j番目のsomaコア102のk番目のシナプスコプロセッサ112が、(y’)j(x’)k-yjxkを計算し、これの倍数を、それが保持する値Fjkから減算する。
擬似コードでは、フォワードサンプリングアルゴリズムは:
send x → cid
synapse cid {
recv → x
multiply F x → y’
return y’
} reduce add
recv cid → y’
σ(y’) → p
if(rand() < p) then y = 1 else y = -1 endif
として表現されることができ、フォワードサンプリングは類似したものとし得る。サンプリングが与えられると、勾配アルゴリズムは:
forward sample x → y
(keep x in synapse register)
backward sample y → x’ (keep y in synapse register)
forward sample x’ → y’ (keep x’ in synapse register)
store y’ → cid2
synapse cid2 {
recv → y’
multiply y’ x’ → yx’
multiply y x -1 → yx
add yx’ yx → dF
multiply dF -e → dF
add F dF → F
}
として表現されることができる。
第3の例として、より良い通信の恩恵を受けることが可能な別の機械学習法は、階層的クラスタリング法である。最も単純な階層的クラスタリング法は、それ自身のクラスタ内の各アイテムから開始する。そして、各階層レベルにて、階層的クラスタリング法は、最も小さい最小距離だけ離れた2つのクラスタを単一クラスタへとグループ化する。
改良階層的クラスタリング法の第1ステップは、クラスタ間の距離のイニシャル行列を計算することを含む。各アクティブsomaコア102がクラスタを表すとすることができ、そのシナプスコプロセッサ112が、他のクラスタへの二乗距離を格納するとすることができる。最初の反復において、各クラスタは単一のアイテムであり、故に、各アクティブsomaコア102が、そのアイテムの座標を、他のsomaコア102の対応するシナプスコプロセッサ112にブロードキャストし、そして、そのシナプスコプロセッサ112が並列に、それ自身のアイテムに対する他のアイテムの二乗距離を計算する。改良階層的クラスタリング法の第2ステップは、クラスタ間の最小二乗距離を見つけることを含む。各somaコア102が(そのリデューサ115を通じて)、最小値演算を用いてそれ自身のシナプスコプロセッサの二乗距離を削減し、そして、各somaコア102が、この数を全てのsomaコア102にブロードキャストし、全てのsomaコア102が再び、最小値演算を用いて(それらのリデューサ115を通じて)値を削減する。この第2の最小値演算は、等しい値の場合に予測可能なタイブレーカが存在する(例えば、最低インデックスシナプスコプロセッサ値を選択するなど)と仮定すると、全てのsomaコア102に対して同じ結果を生成する。一代替例は、1つのsomaコア102に対して第2の最小値演算を実行し、その結果を他の全てのsomaコア102にブロードキャストすることである。
改良階層的クラスタリング法の第3ステップは、この最小距離だけ離れた2つのクラスタを見つけることを含む。最善のクラスタに対応するsomaコア102が、それ自身以外のsomaコア102への最小距離を計算し、次いで、次善のクラスタが、全てのsomaコア102にブロードキャストし返す。改良階層的クラスタリング法の第4ステップは、2つの選択されたクラスタを単一のクラスタへと結合することを含む。各somaコア102が、最善及び次善のクラスタまでのその距離の最小値をとり、この最小距離を、最善のクラスタに対応するシナプスコプロセッサ112に格納し返すとともに、この最小距離を、このsomaコアのチャネル上でブロードキャストする。次いで、最善のクラスタに対応するsomaコア102が、そのシナプスコプロセッサ112の全てに、それらの距離をこれらブロードキャストされたものに置き換えさせる。最後に、次善のsomaコア102及び対応するシナプスコプロセッサ112が計算から脱落する。そして、第2ステップから第4ステップが、1つのクラスタのみが存在することになるまで繰り返される。
擬似コードでは、二乗距離行列を計算する第1ステップ(各座標に対して繰り返す)は:
send -x → cid
synapse cid {
recv → x’
add x x’ → dx //xはローカルクラスタの座標である
multiply dx dx → dx
add dist dx → dist
return dist
} reduce min
recv cid → mindist
として表現されることができる。
クラスタ間の最小距離を見つける第2ステップは:
send mindist → cid2
synapse cid2 {
recv → mindist ; id → cluster
return mindist, cluster
} reduce min
recv cid2 → allmindst, mincluster
として表現されることができる。
最小距離だけ離れた2つのクラスタを見つける第3ステップは:
if(mincluster == id) then
store -mincluster → cid3
synapse cid3 {
recv → mincluster
id → cluster
add cluster mincluster → notmin
if notmin then dist else ∞ → mindist
return mindist, cluster
} reduce min
recv cid3 → dummy, nextcluster
send nextcluster → cid4
else
send 0 → cid4
endif
synapse id {
recv → nextcluster
} reduce one mincluster
recv cid5 → nextcluster
store -mincluster → cid6
synapse cid6 {
recv → mincluster
id → cluster
add cluster mincluster → notmin
return dist
} reduce one mincluster
recv cid6 → mindist
store -nextcluster → cid7
synapse cid7 {
recv → nextcluster
add cluster nextcluster → notnext
return dist
} reduce one nextcluster
recv cid7 → nextdist
mindist = min(mindist, nextdist)
として表現されることができる。
2つの最も近いクラスタを結合する(及びそれらのうち一方を非アクティブにする)第4ステップは:
store mindist → cid8
synapse cid8 {
recv → mindist
if notmin then dist else mindist → dist
if notnext then dist else ∞ → dist
}
send mindist → cid9
if(mincluster == id) then
synapse cid9 { recv → dist }
elif(nextcluster == id) then
synapse cid9 { recv → dummy; ∞ → dist
}
else
synapse cid9 { recv → dummy }
endif
として表現されることができる。
第4の例として、別の一般的な機械学習法は、ベイズネットワークを含み、これは、多数の変数の複雑な同時確率関数を、各々が少数の変数(最大でネットワークのin-degreeまで)のみを伴う複数の条件付き確率の積へと分解するものであるベイジアンネットワークに関わる。すると、この問題は、各変数の周辺分布(marginal distribution)を計算するものである。標準的なシリアルアーキテクチャでは、これは、
に比例する時間をとるものである確率伝搬アルゴリズム(Belief Propagation Algorithm)を用いて遂行されることができる。このアルゴリズムは、上記数の積を反復的に計算し、そして、2
In-Degree個のそのような積各々のVariables×In-Degree和を計算する。
この新たなハードウェアアーキテクチャを用いると、これは、十分なsomaコア102及びシナプスコプロセッサ112が存在する限り、定数時間で遂行されることができる。任意の1つのsomaコア102へのファンインはたったの2In-Degreeであり、故に、これは通信を飽和させない。積を計算するために、対数の和を累算する(somaコア102でexp演算及びlog演算が実行される)か、あるいは、リデューサ115の利用可能な累算方法を、和だけでなく積も含むように拡張するかのいずれかを行い得る。
第5の例として、これらのアーキテクチャで加速され得る人工知能とは無関係の他の用途は、分子シミュレーションとバーチャルリアリティを含む。これらの用途のために、シナプスコプロセッサ112が、乗算及び加算に加えて、逆数平方根演算(1/√x)用のハードウェアを有すると仮定する。どちらの用途においても、高価なステップは同様である。分子シミュレーションに焦点を当てると、それはクーロンポテンシャル:
の計算である。ここで、q
jはj番目の電荷であり、r
jkは、j番目の電荷とk番目の電荷との間の距離である。高帯域幅通信が、全てのj及びkにわたって、同時に、k番目の電荷の座標を、k番目のsomaコア102から、j番目のsomaコア102のk番目のシナプスコプロセッサにブロードキャストすることを引き受ける。各シナプスコプロセッサ112にて、加算及び乗算を用いてr
jk
2を計算し、次いで逆数平方根を用いて1/r
jkを計算する。最後に、累算器(リデューサ115)を用いて、j番目のsomaコア102によってそのシナプスコプロセッサ112にわたる合計が計算される。
第6の例として、提案したアーキテクチャによって二乗時間から定数時間へと加速されることが可能な別クラスのアルゴリズムは、例えば凸包アルゴリズムなどの幾何アルゴリズムに関わる。これらのアルゴリズムは、提案したアーキテクチャの非線形能力を必要とせずに、提案したアーキテクチャの行列処理能力のみを当てにし得る。示されていることには、高次元におけるこれらのアルゴリズムの1つの重要なステップは、動的な行列式計算である。この計算は、行列-ベクトル乗算によって二乗時間で順次に遂行されることができる。しかしながら、これらの乗算は、提案したアーキテクチャを用いて定数時間へと削減されることができる。
なお、これらの例は、特定の問題に対する特定の解法が本特許文献に記載されたハードウェアアーキテクチャを用いてどのように解かれ得るのかを、実例によって示すためだけに上で提示されたものである。当然ながら、これらのハードウェアアーキテクチャは、他の機能を実行するために使用されてもよい。また、上述の特定の問題は、これらのハードウェアアーキテクチャを用いて実装される他の解法を用いて解かれてもよい。
本特許文献に記載されたハードウェアアーキテクチャ及び関連する命令/演算は、実装に応じて、従来アプローチに対する様々な利点を提供することができる。例えば、本開示は、(十分な数のコンポーネントで実施される場合に)アーキテクチャがヒトの脳の能力に匹敵するものとなることを可能にするハードウェアアーキテクチャを提供する。さらに、これらのハードウェアアーキテクチャの機能は、例えば人工知能、深層学習、分子シミュレーション、及びバーチャルリアリティなどの、他分野のコンピューティングを向上させるために使用されることができる。
一部の実施形態において、本特許文献に記載された様々な機能は、コンピュータ読み取り可能プログラムコードから形成されてコンピュータ読み取り可能媒体にて具現化されるコンピュータプログラムによって実装又はサポートされる。“コンピュータ読み取り可能プログラムコード”なる言い回しは、ソースコード、オブジェクトコード、及び実行可能コードを含め、如何なるタイプのコンピュータコードをも含む。“コンピュータ読み取り可能媒体”なる言い回しは、例えば、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、ハードディスクドライブ、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、又はその他のタイプのメモリなど、コンピュータによってアクセスされることが可能な如何なるタイプの媒体をも含む。“非一時的”なコンピュータ読み取り可能媒体は、一時的な電気的又はその他の信号を輸送する有線リンク、無線リンク、光リンク、又はその他の通信リンクを除外する。非一時的コンピュータ読み取り可能媒体は、例えば書換可能な光ディスク又は消去可能なメモリデバイスなど、データが永続的に格納され得る媒体及びデータが格納され且つ後に上書きされ得る媒体を含む。
本特許文献の全体を通して使用される特定の単語及びフレーズの定義を説明しておくことが有益であるかもしれない。用語“アプリケーション”及び“プログラム”は、好適なコンピュータコード(ソースコード、オブジェクトコード、又は実行可能コードを含む)での実装に適応された、1つ以上のコンピュータプログラム、ソフトウェアコンポーネント、命令のセット、プロシージャ、関数、オブジェクト、クラス、インスタンス、関連データ、又はその一部を指す。用語“通信する”及びその派生語は、直接的な通信及び間接的な通信の両方を包含する。用語“含む”及び“有する”、並びにこれらの派生語は、限定なしでの包含を意味する。用語“又は”は、及び/又はを意味する包括的なものである。“~と関連付けられる”なる言い回し、及びその派生語は、~を含む、~の中に含まれる、~と相互接続される、~を含有する、~内に含有される、~に又は~と接続する、~に又は~と結合する、~と通信可能である、~と協働する、~と交互である、~隣り合う、~に近接した、~に又は~と結合される、~を有する、~の特性を有する、~に又は~と関係を有する、又はこれらに類するものを意味し得る。“~のうちの少なくとも1つ”なる言い回しは、アイテムのリストとともに使用されるとき、リストアップされたアイテムのうちの1つ以上の様々な組み合わせが使用され得ることを意味し、リスト内の1つのアイテムのみが必要とされることもある。例えば、“A、B、及びCのうちの少なくとも1つ”は、以下の組み合わせ:A、B、C、AとB、AとC、BとC、及びAとBとC、のうちの何れをも含む。
本特許文献における記載は、特定の要素、ステップ、又は機能がクレーム範囲に含まれていなければならない必須又は重要な要素であることを意味するものとして読まれるべきでない。また、クレームは何れも、その特定のクレーム中で“する手段”又は“するステップ”なるそのままの語が、機能を特定する特定の言い回しに続かれて、明示的に使用されない限り、添付のクレーム又はクレーム要素に関して35USC第112節(f)を行使することを意図していない。クレーム内での、例えば(以下に限られないが)“機構”、“モジュール”、“デバイス”、“ユニット”、“コンポーネント”、“要素”、“部材”、“装置”、“機械”、“システム”、“プロセッサ”、“プロセッシングデバイス”、又は“コントローラ”などの用語の使用は、クレームの特徴自体によって更に改良又は強化されるような、当業者に知られた構造を指すものと理解及び意図されるものであり、35USC第112節(f)を行使することを意図するものではない。
本開示は、特定の実施形態及び概して関連する方法を述べてきたが、これらの実施形態及び方法の改変及び並べ替えが当業者に明らかになる。従って、以上の実施形態例の説明は、本開示を定めたり制約したりするものではない。以下の請求項によって規定される本開示の精神及び範囲を逸脱することなく、その他の変形、代用、及び改変も可能である。