IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ゴールドマン サックス アンド カンパニー エルエルシーの特許一覧

<>
  • 特許-多目的の並列処理アーキテクチャ 図1A
  • 特許-多目的の並列処理アーキテクチャ 図1B
  • 特許-多目的の並列処理アーキテクチャ 図1C
  • 特許-多目的の並列処理アーキテクチャ 図2
  • 特許-多目的の並列処理アーキテクチャ 図3
  • 特許-多目的の並列処理アーキテクチャ 図4
  • 特許-多目的の並列処理アーキテクチャ 図5
  • 特許-多目的の並列処理アーキテクチャ 図6
  • 特許-多目的の並列処理アーキテクチャ 図7
  • 特許-多目的の並列処理アーキテクチャ 図8
  • 特許-多目的の並列処理アーキテクチャ 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2021-12-20
(45)【発行日】2022-01-17
(54)【発明の名称】多目的の並列処理アーキテクチャ
(51)【国際特許分類】
   G06F 9/38 20060101AFI20220107BHJP
   G06F 15/167 20060101ALI20220107BHJP
   G06F 15/80 20060101ALI20220107BHJP
【FI】
G06F9/38 370X
G06F15/167 615Z
G06F15/80
【請求項の数】 20
【外国語出願】
(21)【出願番号】P 2020213356
(22)【出願日】2020-12-23
(62)【分割の表示】P 2017559643の分割
【原出願日】2016-05-17
(65)【公開番号】P2021057076
(43)【公開日】2021-04-08
【審査請求日】2020-12-23
(31)【優先権主張番号】62/165,052
(32)【優先日】2015-05-21
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】62/173,866
(32)【優先日】2015-06-10
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】517309766
【氏名又は名称】ゴールドマン サックス アンド カンパニー エルエルシー
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100091214
【弁理士】
【氏名又は名称】大貫 進介
(72)【発明者】
【氏名】バーチャード,ポール
(72)【発明者】
【氏名】ドレッパー,ウルリッヒ
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開平5-242065(JP,A)
【文献】特開平5-89066(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 15/167
G06F 15/80
(57)【特許請求の範囲】
【請求項1】
装置であって、当該装置は、
複数の並列処理コアであって、各処理コアが、1つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
並列コプロセッサの複数セットであって、各処理コアが、前記並列コプロセッサの複数セットのうちの異なる1つのセットに関連付けられ、並列コプロセッサの各セット内のコプロセッサが、前記処理コアのうちの少なくともいくつかの処理コアからの前記入力データの少なくとも一部を処理して出力データを生成するように構成される、並列コプロセッサの複数セットと、を有しており、
前記処理コアのそれぞれが、追加の入力データを生成するために、前記並列コプロセッサの関連付けられたセットによって生成された前記出力データに適用される少なくとも1つの関数の1つ又は複数の結果を受信及び処理するようにさらに構成される、
装置。
【請求項2】
処理コアの数は、並列コプロセッサの各セット内のコプロセッサの数と一致しており、
各処理コアが、並列コプロセッサの各セット内のコプロセッサのうちの1つのコプロセッサにその入力データを提供するように構成される、請求項1に記載の装置。
【請求項3】
前記処理コアのそれぞれが、前記並列コプロセッサの複数セットを介してそれ自体を含む全ての前記処理コアと直接通信するように構成される、請求項1に記載の装置。
【請求項4】
装置であって、当該装置は、
複数の並列処理コアであって、各処理コアが、1つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
並列コプロセッサの複数セットであって、各処理コアが、前記並列コプロセッサの複数セットのうちの異なる1つのセットに関連付けられ、並列コプロセッサの各セット内のコプロセッサが、前記処理コアのうちの少なくともいくつかの処理コアからの前記入力データの少なくとも一部を処理して出力データを生成するように構成される、並列コプロセッサの複数セットと、
複数のリデューサ回路であって、各処理コアが、前記複数のリデューサ回路のうちの異なる1つのリデューサ回路に関連付けられる、複数のリデューサ回路と、を有しており、
各リデューサ回路が、前記並列コプロセッサの複数セットのうちの異なる1つのセット内の前記コプロセッサから前記出力データを受信し、1つ又は複数の関数を前記出力データに適用し、1つ又は複数の結果を関連付けられた前記処理コアに提供するように構成され、
前記処理コアのそれぞれが、関連付けられた前記リデューサ回路によって生成された前記1つ又は複数の結果に基づいて追加の入力データを生成するようにさらに構成される、
装置。
【請求項5】
全ての前記処理コアは、前記入力データを前記並列コプロセッサの複数セットに同時にブロードキャストするように構成される、請求項1に記載の装置。
【請求項6】
前記処理コアの複数のサブセットのそれぞれにおける前記処理コアは、前記入力データを前記並列コプロセッサの複数セットのうちの少なくともいくつかのセットに同時にブロードキャストするように構成される、請求項1に記載の装置。
【請求項7】
前記処理コアの少なくともいくつかが、前記入力データを前記並列コプロセッサの複数セットのうちの少なくともいくつかのセットに連続的に送信するように構成される、請求項1に記載の装置。
【請求項8】
前記複数の並列処理コアは、N個の並列処理コアを含み、
並列コプロセッサの各セットが、前記N個の並列処理コアにそれぞれ関連付けられたN個の並列コプロセッサを含み、
Nは、16以上の整数である、請求項1に記載の装置。
【請求項9】
システムであって、当該システムは、
複数の集積回路デバイスであって、各集積回路デバイスは、
複数の並列処理コアであって、各処理コアが、1つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
並列コプロセッサの複数セットであって、各処理コアが、前記並列コプロセッサの複数セットのうちの異なる1つのセットに関連付けられ、並列コプロセッサの各セット内のコプロセッサが、前記処理コアのうちの少なくともいくつかの処理コアからの前記入力データの少なくとも一部を処理して出力データを生成するように構成される、並列コプロセッサの複数セットと、を有しており、
前記処理コアのそれぞれが、追加の入力データを生成するために、前記並列コプロセッサの関連付けられたセットによって生成された前記出力データに適用される少なくとも1つの関数の1つ又は複数の結果を受信及び処理するようにさらに構成される、複数の集積回路デバイスと、
前記集積回路デバイスを結合する少なくとも1つの接続と、を含む、
システム。
【請求項10】
各集積回路デバイスにおいて、
処理コアの数は、並列コプロセッサの各セット内のコプロセッサの数と一致しており、
各処理コアが、並列コプロセッサの各セット内のコプロセッサのうちの1つのコプロセッサにその入力データを提供するように構成される、前記請求項9に記載のシステム。
【請求項11】
各集積回路デバイスにおいて、前記処理コアのそれぞれが、前記並列コプロセッサの複数セットを介してそれ自体を含む全ての前記処理コアと直接通信するように構成される、請求項9に記載のシステム。
【請求項12】
システムであって、当該システムは、
複数の集積回路デバイスであって、各集積回路デバイスは、
複数の並列処理コアであって、各処理コアが、1つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
並列コプロセッサの複数セットであって、各処理コアが、前記並列コプロセッサの複数セットのうちの異なる1つのセットに関連付けられ、並列コプロセッサの各セット内のコプロセッサが、前記処理コアのうちの少なくともいくつかの処理コアからの前記入力データの少なくとも一部を処理して出力データを生成するように構成される、並列コプロセッサの複数セットと、
複数のリデューサ回路であって、各処理コアが、前記複数のリデューサ回路のうちの異なる1つのリデューサ回路に関連付けられる、複数のリデューサ回路と、を有しており、
各リデューサ回路が、前記並列コプロセッサの複数セットのうちの異なる1つのセット内の前記コプロセッサから前記出力データを受信し、1つ又は複数の関数を前記出力データに適用し、1つ又は複数の結果を関連付けられた前記処理コアに提供するように構成され、
前記処理コアのそれぞれが、関連付けられた前記リデューサ回路によって生成された前記1つ又は複数の結果に基づいて追加の入力データを生成するようにさらに構成される、複数の集積回路デバイスと、
前記集積回路デバイスを結合する少なくとも1つの接続と、を含む、
システム。
【請求項13】
各集積回路デバイスにおいて、全ての前記処理コアは、前記入力データを前記並列コプロセッサの複数セットに同時にブロードキャストするように構成される、請求項9に記載のシステム。
【請求項14】
各集積回路デバイスにおいて、前記処理コアの複数のサブセットのそれぞれにおける前記処理コアは、前記入力データを前記並列コプロセッサの複数セットの少なくともいくつかのセットに同時にブロードキャストするように構成される、請求項9に記載のシステム。
【請求項15】
各集積回路デバイスにおいて、前記処理コアの少なくともいくつかが、前記入力データを前記並列コプロセッサの複数セットのうちの少なくともいくつかのセットに連続的に送信するように構成される、請求項9に記載のシステム。
【請求項16】
各集積回路デバイスにおいて、
前記複数の並列処理コアは、N個の並列処理コアを含み、
並列コプロセッサの各セットが、前記N個の並列処理コアにそれぞれ関連付けられたN個の並列コプロセッサを含み、
Nは、16以上の整数である、請求項9に記載のシステム。
【請求項17】
方法であって、当該方法は、
複数の並列処理コアを使用して入力データを生成するステップであって、各処理コアが、1つ又は複数の演算処理を実行するように構成される、生成するステップと、
前記入力データを処理コアから並列コプロセッサの複数セットに提供するステップであって、各処理コアが、前記並列コプロセッサの複数セットのうちの異なる1つのセットに関連付けられる、提供するステップと、
前記並列コプロセッサの複数セットを使用して前記入力データを処理して出力データを生成するステップと、
前記並列処理コアのそれぞれにおいて、前記並列コプロセッサの関連付けられたセットによって生成された前記出力データに適用される少なくとも1つの関数の1つ又は複数の結果を受信するステップと、
前記並列処理コアのそれぞれを使用して、前記並列コプロセッサの関連付けられたセットによって生成された前記出力データに適用される少なくとも1つの関数の前記1つ又は複数の結果に基づいて追加の入力データを生成するステップと、を含む、
方法。
【請求項18】
全ての前記処理コアは、前記入力データを前記並列コプロセッサの複数セットに同時にブロードキャストするように構成される、請求項17に記載の方法。
【請求項19】
前記処理コアの複数のサブセットのそれぞれにおける前記処理コアは、前記入力データを前記並列コプロセッサの複数セットのうちの少なくともいくつかのセットに同時にブロードキャストするように構成される、請求項17に記載の方法。
【請求項20】
前記処理コアの少なくともいくつかが、前記入力データを前記並列コプロセッサの複数セットのうちの少なくともいくつかのセットに連続的に送信するように構成される、請求項17に記載の方法。

【発明の詳細な説明】
【技術分野】
【0001】
本開示は、概して、コンピュータ装置及びコンピュータシステムのためのハードウェア・アーキテクチャに関する。より具体的には、本開示は、人工知能で使用されるような高度な処理機能をサポートする多目的の並列処理アーキテクチャ(general-purpose parallel computing architecture)に関する。
【背景技術】
【0002】
ヒトの脳は、典型的には、1,000兆個のシナプスによって接続された約1,000億個のニューロンを含む大規模な並列システムである。理想的には、ヒトの脳の動作をシミュレートすることにより、人工知能等の高度な処理機能をサポートすることができる。しかしながら、ヒトの脳をシミュレートする、又はヒトの脳の能力に匹敵するコンピュータシステムを設計する従来の試みは、一般に、脳の接続形態又は3次元構造に実質的に一致しない等、多くの理由で不十分であった。
【発明の概要】
【0003】
本開示は、多目的の並列処理アーキテクチャを提供する。
【0004】
第1の実施形態では、装置は、複数の並列処理コア(computing cores)を含み、各処理コアは、1つ又は複数の演算処理(processing
operations)を実行して入力データを生成するように構成される。この装置は、各処理コアに関連付けられた複数の並列コプロセッサも含む。この装置は、各処理コアからの入力データを各処理コアに関連付けられたコプロセッサのうちの指定された1つに転送するように構成された複数の通信ラインをさらに含み、コプロセッサは、入力データを処理して出力データを生成するように構成される。さらに、この装置は複数の減算回路を含み、各処理コアは、減算回路のうちの1つに関連付けられる。各減算回路は、関連付けられた処理コアの各コプロセッサから出力データを受け取り、出力データに1つ又は複数の関数を適用し、且つ1つ又は複数の結果を関連付けられた処理コアに提供するように構成される。
【0005】
第2の実施形態では、システムは、複数の集積回路デバイスを含む。各集積回路デバイスは、複数の並列処理コアを含み、各処理コアは、1つ又は複数の演算処理を実行して入力データを生成するように構成される。各集積回路デバイスは、各処理コアに関連付けられた複数の並列コプロセッサも含む。各集積回路デバイスは、各処理コアからの入力データを各処理コアに関連付けられたコプロセッサのうちの指定された1つに転送するように構成された複数の通信ラインをさらに含み、コプロセッサは、入力データを処理して出力データを生成するように構成される。さらに、各集積回路デバイスは、複数の減算回路を含み、各処理コアは、減算回路のうちの1つに関連付けられる。各減算回路は、関連付けられた処理コアの各コプロセッサから出力データを受け取り、出力データに1つ又は複数の関数を適用し、且つ1つ又は複数の結果を関連付けられた処理コアに提供するように構成される。システムは、集積回路デバイス内の通信ラインの少なくともいくつかを結合する少なくとも1つの高速接続も含む。
【0006】
第3の実施形態では、方法は、複数の並列処理コアを使用して入力データを生成するステップであって、各処理コアは1つ又は複数の演算処理を実行するように構成される、生成するステップを含む。この方法は、各処理コアについて、その処理コアからの入力データを各処理コアの指定されたコプロセッサに公開するステップであって、各処理コアは複数の並列コプロセッサに関連付けられる、公開するステップも含む。この方法は、各処理コアについて、全ての処理コアからの入力データを処理して、その処理コアに関連付けられたコプロセッサを使用して出力データを生成するステップをさらに含む。この方法は、各処理コアについて、その処理コアに関連付けられたコプロセッサからの出力データを減らして1つ又は複数の結果を生成するステップも含む。さらに、この方法は、各処理コアについて、1つ又は複数の結果をその処理コアに提供するステップを含む。
【0007】
第4の実施形態では、方法は、第1の処理コアに関連付けられた複数の並列コプロセッサによる実行のための第1の命令を第1の処理コアから発し、第1の処理コアに関連付けられた減算回路による実行のための第2の命令を第1の処理コアから発するステップを含む。この方法は、第1の処理コアを使用して入力データを生成するステップも含む。この方法は、コプロセッサを使用して第1の命令を実行して、コプロセッサにおいて第1の処理コアからの入力データ及び1つ又は複数の追加の処理コアからの入力データを処理し、出力データを生成するステップをさらに含む。この方法は、減算回路を使用して第2の命令を実行して、出力データに1つ又は複数の関数を適用し、1つ又は複数の結果を生成するステップも含む。さらに、この方法は、1つ又は複数の結果を処理コアに提供するステップを含む。
【0008】
他の技術的特徴は、以下の図面、詳細な説明、及び特許請求の範囲から当業者に容易に明らかになるであろう。
【図面の簡単な説明】
【0009】
図1A】本開示による例示的な多目的の並列処理アーキテクチャを示す図である。
図1B】本開示による例示的な多目的の並列処理アーキテクチャを示す図である。
図1C】本開示による例示的な多目的の並列処理アーキテクチャを示す図である。
図2】本開示による図1A図1Cの処理アーキテクチャにおける例示的な通信を示す図である。
図3】本開示による図1A図1Cの処理アーキテクチャにおける例示的な通信を示す図である。
図4】本開示による図1A図1Cの処理アーキテクチャにおける例示的なコプロセッサ機能を示す図である。
図5】本開示による図1A図1Cの処理アーキテクチャにおける例示的なコプロセッサ機能を示す図である。
図6】本開示による図1A図1Cの処理アーキテクチャにおける例示的なプログラム可能なコプロセッサ及び減算機能を示す図である。
図7】本開示による多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示す図である。
図8】本開示による多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示す図である。
図9】本開示による多目的の並列処理アーキテクチャを使用して高度な処理機能をサポートする例示的な方法を示す図である。
【発明を実施するための形態】
【0010】
本開示及びその特徴のより完全な理解のために、添付の図面と併せて以下の詳細な説明を参照する。
【0011】
以下に説明する図1A図9、及び本特許文書における本発明の原理を説明するために使用される様々な実施形態は、単に説明のために過ぎず、決して本発明の範囲を限定するものと解釈すべきではない。当業者であれば、本発明の原理は、適切に構成された任意のタイプの装置又はシステムで実施できることを理解するであろう。
【0012】
上記のように、ヒトの脳は、典型的には、1,000兆個のシナプスによって接続された約1,000億個のニューロンを含む大規模な並列システムである。シナプスは、ニューロン同士の間の信号の伝達を支援する。ヒトの脳は、古典的なチューリング・マシンとは非常に異なった構造をしている。古典的なチューリング・マシンを使用してヒトの脳をシミュレートすることは、典型的にはヒトの脳内に多数のニューロン及びシナプスが存在するため、実際的ではない。
【0013】
ヒトの知能には多くの要素があるが、1つの重要な要素は、莫大な量(高帯域幅)の感覚入力を受け取り、情報をより少ない量(低帯域幅)の説明的な概念に減少させるプロセスを指す、次元の縮小(reduction)である。数学的には、この縮小は、様々な形式の反復因子分析を使用して達成することができる。様々な形式の因子分析は、いくつかの特徴を共有する傾向がある。例えば、「順方向説明モード」と呼ばれる1つの動作モードでは、因子分析は、多数の入力に対していくつかの簡単な計算を実行し、合計を累算し、可能であればより複雑な計算を出力に対して実行する。「逆方向学習モード」と呼ばれる別の動作モードでは、因子分析は、入力に対する簡単な計算を、出力及び対応する入力に対するいくつかの簡単な計算によって変更する。これらの計算は簡単な傾向があるが、(入力数を指す)ファンイン及び(出力先の数を指す)ファンアウトは、どちらも数万になる。
【0014】
ヒトの脳の能力に幾らか匹敵することができるシステムを設計することは、一般的に多くの理由から不十分である。例えば、そのような莫大なファンイン及びファンアウトは、2次元(2D)回路に実際にマッピングすることができず、そのような高度に接続された処理アーキテクチャをメインストリームから締め出す。ヒトの脳の能力に匹敵するコンピュータ装置を設計するために、より多くの通信帯域幅を有するハードウェア・アーキテクチャが必要とされる。本開示は、多数の高度に相互接続された処理コアを含む様々な新しい多目的の「コネクショニスト(connectionist)」ハードウェア・アーキテクチャを説明する。とりわけ、これらのハードウェア・アーキテクチャは、機械学習、科学計算、ビデオゲーム、及び他の分野における幅広い種類のアルゴリズムを高速化することができる。いくつかの実施形態では、これらのハードウェア・アーキテクチャは、3次元(3D)集積回路技術等の最新の技術を使用して妥当なコストで製造することができる。
【0015】
図1A図1Cは、本開示による例示的な多目的の並列処理アーキテクチャを示す。特に、図1A図1Cは、高い通信帯域幅を有するハードウェア・アーキテクチャを提供する例示的なマルチレベル構造を示す。異なるレベルの構造が、以下に説明するように異なる機能を実行する。
【0016】
図1Aは、ハードウェア・アーキテクチャの第1のレベル100を示す。このレベル100は、ソーマコア(soma core)と呼ばれる複数のコンピュータ処理又は処理コア102を含む。最小限の形態では、各ソーマコア102は、1つ又は複数のデータ信号を受け取り、いくつかのタイプの処理を実行し、且つ1つ又は複数の入力信号を送信することができる。演算処理を実行するために各ソーマコア102に含まれる構造は、非常に単純な処理コアから非常に複雑な処理コアまで及ぶことができる。例えば、各ソーマコア102内の処理ユニットは、多目的の単一命令多重データ(SIMD)計算ユニット等の比較的簡単な処理コアであってもよい。ソーマコア102は、ARM、INTEL(登録商標)、又は他のコンピュータプロセッサ製造者からのもの等、完全な処理コアを表してもよい。いくつかの実施形態では、ソーマコア102のグループは、既存の「多数のコア」プロセッサ設計を使用して実装することができる。しかしながら、任意の適切な処理コアを使用してソーマコア102を実装することができる。本明細書でのハードウェア・アーキテクチャは16個のソーマコア102を含むが、任意数のソーマコア102をハードウェア・アーキテクチャでサポートすることができる。特定の実施形態では、本明細書の全てのソーマコア102は、プロセッサと呼ばれる単一の集積回路チップ内に実装することができる。また、ソーマコア102は、均一であってもなくてもよいことに留意されたい。
【0017】
各ソーマコア102は、処理回路104及び少なくとも1つのメモリ装置106を含む。処理回路104は、一般に、ソーマコア102内でいくつかのタイプの処理を実行するために使用される回路を表す。上記のように、処理は、単純又は複雑であってもよく、処理回路104は、実行すべき特定の処理に依存して変更することができる。メモリ装置106は、一般に、ソーマコア102によって使用、生成、又は受け取られるデータを格納するための1つ又は複数のレジスタ等の任意の適切な記憶及び検索装置を表す。図1Aでは、メモリ装置106がソーマコア102内に埋め込まれるように示されているが、各メモリ装置106の全体又は一部は、ソーマコア102にアクセス可能な他の任意の適切な位置に配置してもよい。
【0018】
図1Bは、ハードウェア・アーキテクチャの第1のレベル100に関連するハードウェア・アーキテクチャの第2のレベル110を示す。第2のレベル110は、各ソーマコア102に関連付けられた(シナプス・コプロセッサと呼ばれる)複数のコプロセッサ112を含む。シナプス・コプロセッサ112は、一般的に、ソーマコア102同士の間の(後述する)信号線を介して送信された入力データを処理する。各ソーマコア102を複数のシナプス・コプロセッサ112に関連付けることができる。一例として、N個のソーマコアから構成されるグループ内の各ソーマコア102について、最大N個のシナプス・コプロセッサ112が設けられ、これを使用して、(それ自体を含む)グループ内のソーマコア102からそのソーマコア102への通信をサポートすることができる。いくつかの実施形態では、各ソーマコア102は、グループ内の各ソーマコア102について、1つのシナプス・コプロセッサ112に通信可能に結合される。換言すれば、各ソーマコア102は、N個全てのソーマコア102に通信可能に結合され得る。従って、「ローカル」又は「ホスト」ソーマコア102のシナプス・コプロセッサ112は、全てのソーマコア102(それ自体を含む)からの入力データを受け取って処理するために使用される。これにより、いくつかの実施形態では、各ソーマコア102のN個全てのシナプス・コプロセッサ112が、N個全てのソーマコア102からの入力データを並列に受け取ることが可能になる。各ソーマコア102は、典型的には、同数のシナプス・コプロセッサ112を含むことができるが、他の実施形態を使用することもできることに留意されたい。
【0019】
各シナプス・コプロセッサ112は、ソーマコア102に対して入来する入力データの処理をサポートする任意の適切な構造を含む。シナプス・コプロセッサ112は、限定された能力を有し得るが、再プログラム可能であり得る。いくつかの実施形態では、各シナプス・コプロセッサ112は、プログラム可能なユニット又は他の計算ユニット113、及び少なくとも1つのメモリ装置114を含む。計算ユニット113は、ハードウェア・アーキテクチャにおける様々な機能をサポートする命令の1つ又は複数のシーケンスを実行するように構成された任意の適切な構造を表す。これらの機能の例には、特定のシーケンスのデータの受け取り及び処理、受け取った入力及び格納されたパラメータに対する演算の実行、又は値の転送が含まれる。メモリ装置114は、一般に、シナプス・コプロセッサ112によって使用、生成、又は受け取られるデータを格納するための1つ又は複数のレジスタ等の任意の適切な記憶及び検索装置を表す。図1Bでは、メモリ装置114がシナプス・コプロセッサ112内に埋め込まれるように示されているが、各メモリ装置114の全体又は一部は、シナプス・コプロセッサ112にアクセス可能な任意の他の適切な位置に配置してもよい。
【0020】
ハードウェア・アーキテクチャの第2のレベル110は、種々の減算回路、すなわち「減算器(reducer)115」も含む。いくつかの実施形態では、ソーマコア102毎に1つの減算器115が存在し得る。各減算器115は、ソーマコア102のうちの1つに関連付けられた全てのシナプス・コプロセッサ112によって生成される出力データを受け取り、受け取った出力データをいくつかの方法で処理し、結果、すなわち処理の結果をローカル・ソーマコア102に渡す。例えば、各減算器115は、受け取った出力データ値を合計又は他に累算する、受け取った出力データの最小値又は最大値を特定する、又は他のいくつかの演算処理を実行することができる。このようにして、各減算器115は、ソーマコア102の出力データを処理し、そのソーマコア102に供給されるデータ量を減らす。
【0021】
各減算器115は、複数の出力値を処理するための任意の適切な構造を含む。いくつかの実施形態では、各減算器115は、処理回路116、及び少なくとも1つのメモリ装置117を含む。処理回路116は、一般に、減算器115内で何らかのタイプの処理を実行するために使用される回路を表し、且つソーマコア102の処理回路104よりも遥かに特殊化されることが多い。例えば、処理回路116は、1つのソーマコア102に関連付けられたシナプス・コプロセッサ112からの出力値の全てを合計するために使用される累算器によって形成された加算器ツリーを含むことができる。メモリ装置117は、一般に、減算器115によって使用、生成、又は受け取られるデータを格納するための1つ又は複数のレジスタ等の任意の適切な記憶及び検索装置(複数可)を表す。図1Bでは、例メモリ装置117が減算器115内に埋め込まれるように示されているが、各メモリ装置117の全体又は一部は、減算器115にアクセス可能な他の任意の適切な位置に配置してもよい。
【0022】
図1Cは、ここではハードウェア・アーキテクチャの第1のレベル100及び第2のレベル110に関連するハードウェア・アーキテクチャの第3のレベル120を示す。第3のレベル120は、ソーマコア102を通信可能に結合する複数の信号線122及び124を含み、それによって、ソーマコア102への、ソーマコア102からの、及びソーマコア同士の間の信号の伝達をサポートする。いくつかの実施形態では、ソーマコア102は、グループ内の各ソーマコア102が、信号線122及び124並びにシナプス・コプロセッサ112の適切な構成を介して、同じグループ内の他の全てのソーマコア102と直接的に通信することができるという点で完全に接続される。
【0023】
図1Cにおける信号線122及び124の物理的レイアウトは、単に説明のために過ぎず、ハードウェア・アーキテクチャにおける信号線の実際の物理的配置を表す必要はないことに留意されたい。例えば、ソーマコア102同士の間のネットワークを設計する様々な方法があり、その設計は、ソーマコア102の全ての間の直接的な通信をサポートしてもしなくてもよい。従って、信号線122及び124は、ハードウェア・アーキテクチャ内の任意の所望の通信経路をサポートするように構成することができる。
【0024】
動作中、各ソーマコア102は、所望の命令を実行し、場合によってはその減算器115又は他のソース(複数可)から受け取ったデータを含むデータを処理するように動作する。各ソーマコア102は、その演算処理の結果を他のソーマコア102(及び場合によってはそれ自体)に入力データとして提供することができ、各ソーマコア102は、他のソーマコアの演算処理によってそのシナプス・コプロセッサ112を介して生成された入力データを受け取ることができる。各ソーマコア102のシナプス・コプロセッサ112は、入力データに対して所望の演算処理を実行することができ、シナプス・コプロセッサ112が出力するデータは、各ソーマコア102の減算器115によってさらに処理することができる。減算器115からの結果は、ローカル/ホスト・ソーマコア102に提供され、ローカル/ホスト・ソーマコア102は、そのデータを使用して追加の演算処理を実行することができる。
【0025】
ソーマコア102から接続されたシナプスプロセッサ112への各通信において複数の「チャネル」をサポートすることも可能であり、ここで各チャネルを異なる演算処理に関連付けることができる。例えば、各シナプス・コプロセッサ112は、1つのソーマコア102から複数のチャネルを介して入力データを受け取ることができ、そのソーマコア112に接続されたシナプス・コプロセッサ112は、入力データに使用されるチャネルに応じて異なる演算処理を実行することができる。さらに、各減算器115は、その関連するシナプス・コプロセッサ112からの出力データを複数のチャネルを介して受け取ることができ、減算器115は、シナプスプロセッサ112から出力データを受け取ったチャネルに応じて異なる演算処理を実行することができる。チャネルは、実際の物理的チャネル(データが異なる信号線を介して送信される場合等)又は論理チャネル(データが異なるチャネル識別子を用いて共通信号線を介して送信される場合等)を表すことができる。これらの実施形態では、ソーマコア102、シナプス・コプロセッサ112、及び減算器115内の異なるレジスタ又は他のメモリ位置を使用して、異なるデータ及び異なるプログラミング命令を格納することができる。これにより、ハードウェア・アーキテクチャが同時処理又は他のタイプのプログラミング動作をサポートできる。
【0026】
上記のように、各シナプス・コプロセッサ112のメモリ装置114は、複数のレジスタを含むことができる。いくつかの実施形態では、レジスタは、可能な各接続パートナー(各ソーマコア102)に関連付けられ、且つ各接続パートナーのチャネル(複数可)の入来する入力データを保持するために使用されるレジスタを含む。レジスタは、プログラミング命令の実行中に使用されるパラメータ値及び他の値を保持するために使用されるローカルレジスタも含むことができる。特定の実施形態では、シナプス・コプロセッサ112の演算処理は、入来する入力データに応答して実行される1つ又は複数の命令を使用して記述され、シナプス・コプロセッサ112にはコマンドループは存在していない。
【0027】
各ソーマコア102は、そのシナプス・コプロセッサ112上のプログラム命令のインストールを個別に制御することができ、異なるプログラム命令を異なるチャネルに対して提供することができる。例えば、ソーマコア102に、そのシナプス・コプロセッサ112の一部又は全部に同じプログラムをロードさせる命令が存在する可能性がある。また、ソーマコア102に、そのシナプス・コプロセッサ112の大抵の場合に異なる値を含むパラメータレジスタをロードさせる命令が存在する可能性がある。ソーマコア102は、このデータの全てを、ソーマコアの全てのシナプス・コプロセッサ112の全てのレジスタの値を保持するのに十分な大きさの所与のメモリ領域からロードすることができることに留意されたい。各ソーマコア102は、そのシナプス・コプロセッサ112の個々のパラメータレジスタを読み出すことができるが、チャネル毎のレジスタの値を読み出すことはできない。代わりに、チャネル毎のレジスタの値は、シナプスプロセッサ112によって処理され、及び/又は関連する減算器115に供給され、減算器115は、各チャネルについて受け取ったデータを適切に処理するようにローカル/ホスト・ソーマコア102によってプログラムされ得る。各減算器115への入力は、特定のチャネル上の関連するソーマコア102の全てのシナプス・コプロセッサ112からの出力値を表すことができる。
【0028】
各ソーマコア102は、上述したようにシナプス・コプロセッサ112及び減算器115の使用を容易にする多数の新しい命令をサポートすることができる。例えば、各ソーマコア102は、入力データ要素を全てのソーマコア102(の特定のチャネル)に送信し、それ自体のシナプス・コプロセッサ112の特定のチャネルに入力データを送信し、それ自体の減算器115から結果を受け取り、そのシナプス・コプロセッサ112及び減算器115内にプログラム又は他の命令をインストール又は選択し、シナプス・コプロセッサ112のパラメータレジスタにデータを格納するための命令をサポートすることができる。ハードウェア・アーキテクチャにおいてサポートされる例示的な命令の更なる詳細が以下に提示される。
【0029】
いくつかの実施形態では、図1A図1Cに示されるハードウェア・アーキテクチャは、単一の集積回路チップ内に実装することができる。集積回路チップは、例えば、シリコン・オン・インシュレータ(SOI)等の長年に亘る製造技術を使用することにより、又は3次元集積回路製造技術等の最近開発された技術を使用することにより、任意の適切な方法で製造することができる。必要又は所望に応じて、図1A図1Cに示されるハードウェア・アーキテクチャの複数のインスタンスを、一緒に結合し、且つ使用可能なソーマコア102の数を拡張するために使用することができる。例えば、複数の集積回路チップは、1つ又は複数の高速接続を使用して、ハードウェア・アーキテクチャの各インスタンスの信号線122及び124を結合すること等によって、任意の所望の数のソーマコア102を提供するために互いに通信可能に結合し得る。
【0030】
また、いくつかの実施形態では、各ソーマコア102は、ハードウェア・アーキテクチャに所望の機能を提供するために、特定の機能又は機能の組合せを実行するように構成することができる。他の実施形態では、ソーマコア102の機能(複数可)を、規定することができ、且つ時間の経過とともに又は所望に応じて変更できるように、各ソーマコア102をプログラム可能とすることができる。同様に、いくつかの実施形態では、各シナプス・コプロセッサ112及び減算器115は、ハードウェア・アーキテクチャに所望の機能を提供するために、特定の機能又は機能の組合せを実行するように構成することができる。他の実施形態では、各シナプス・コプロセッサ112及び減算器115は、シナプス・コプロセッサ112及び減算器115の機能を、規定し、且つ時間の経過とともに又は所望に応じて変更できるようにプログラム可能とすることができる。
【0031】
ソーマコア102によって実行される処理は並行して行うことができ、各ソーマコア102についてシナプス・コプロセッサ112及び減算器115によって実行される処理も並行して行うことができることに留意されたい。このようにして、各ソーマコア102は、ソーマコア102同士の間に十分な通信インフラストラクチャが与えられると同時に、複数の信号線122及び124を介して通信することができる。適切な数のソーマコア102、シナプス・コプロセッサ112、減算器115、及び信号線122及び124がある場合に、このハードウェア・アーキテクチャは、処理コア同士の間の膨大な数の通信接続をサポートすることができ、これらの通信接続を全て同時に使用可能にすることができる。その結果、この設計は、より多くの通信帯域幅を有するハードウェア・アーキテクチャを表す。
【0032】
図1A図1Cは、多目的の並列処理アーキテクチャの一例を示すが、図1A図1Cに示されるハードウェア・アーキテクチャに様々な変更を行ってもよい。例えば、ハードウェア・アーキテクチャは、適切な数のシナプス・コプロセッサ及び減算器と共に、任意の適切な数のソーマコアをサポートすることができる。また、各ソーマコア、シナプス・コプロセッサ、及び減算器は、ソーマコア又はシナプス・コプロセッサのための共有処理リソースを使用することにより、又は複数の動作を同時に実行することを可能にする複数の減算器を使用すること等により、他の適切な方法で実装することができる。さらに、図1A図1Cの様々な構成要素を組み合わせ、さらに細分化し、再配列し、又は省略することができ、特定の必要性に応じて追加の構成要素を加えることができる。特定の例として、1つ又は複数のソーマコア102は、減算器115と共に使用する必要はないことがある。
【0033】
図2及び図3は、本開示による図1A図1Cの処理アーキテクチャにおける例示的な通信を示す。図2に示されるように、各ソーマコア102は、全てのソーマコア102(それ自体を含む)から入力データを受け取るシナプス・コプロセッサ112を有することができる。この同じパターンは、ソーマコア102から構成されるグループ内の全てのソーマコア102について繰り返すことができる。上述した信号線122及び124を使用して、各ソーマコア102を、全てのソーマコア102のうちの1つのシナプス・コプロセッサ112に適切な方法で結合し、これらの通信をサポートすることができる。
【0034】
N個のソーマコア102が存在する場合に、各ソーマコア102にN個のシナプス・コプロセッサ112(それ自体を含むソーマコア102毎に1個のシナプス・コプロセッサ112)を設けることができる。各ソーマコア102は、全てのソーマコア102に情報をブロードキャストすることができ、各ソーマコア102は、そのシナプス・コプロセッサ112を介して他の全てのソーマコア102から情報を受け取ることができる。実際上、いくつかの実施形態では、N個のソーマコア102のそれぞれについてのN個のシナプス・コプロセッサ112は、ソーマコア102同士の間のN個の独立した通信ネットワークをサポートすることができる。
【0035】
図3は、ソーマコア同士の間の2つの独立した通信ネットワークのうちの1つの特定の例を示す。図3に示されるように、1つのソーマコア102aは、システム内の各ソーマコア102の1つのシナプス・コプロセッサ112に入力データをブロードキャストすることができる。同様に、別のソーマコア102bは、システム内の各ソーマコア102の1つのシナプス・コプロセッサ112にデータをブロードキャストすることができる。いくつかの実施形態では、ソーマコア102a及び102bによるブロードキャストは、同時に発生することができる。その結果、N個のソーマコア102は、同時にN個のデータブロードキャストに関与することができる。
【0036】
ここでのブロードキャストは、あるソーマコアから次の行及び列まで連続的に発生するものとして示されているが、これは単に説明を簡単にするために過ぎないものであることに留意されたい。データをブロードキャストしている各シナプス・コプロセッサ112は、代わりに、信号線122及び124を介して全てのソーマコア102のシナプス・コプロセッサ112にデータを直接的にブロードキャストすることができる。当然ながら、必要であるか又は所望すれば、複数のソーマコア102が、何らかの種類のアドレッシング機構又は競合機構を適切に使用等して、同じ信号線122及び124を介してブロードキャストするのも可能にする。
【0037】
図2及び図3は、図1A図1Cの処理アーキテクチャにおける通信の例を示しているが、図2及び図3に様々な変更を行ってもよい。例えば、ハードウェア・アーキテクチャは、適切な数のシナプス・コプロセッサと共に適切な数のソーマコアをサポートすることができる。また、図2及び図3の様々な構成要素を組み合わせ、さらに細分化し、再配列し、又は省略することができ、特定の必要性に応じて追加の構成要素を加えることができる。さらに、ソーマコア102同士の間の任意の適切な通信をサポートすることができる。
【0038】
図4及び図5は、本開示による図1A図1Cの処理アーキテクチャにおける例示的なコプロセッサ機能を示す。特に、図4及び図5は、上述したシナプス・コプロセッサ112を実装するための例示的な機構を示す。これらの例示的な実装形態は単に例示に過ぎず、他の方法でシナプス・コプロセッサ112を実装し得ることに留意されたい。
【0039】
図4に示されるように、j番目のソーマコア102のシナプス・コプロセッサ112は、上述した計算ユニット113を使用して実装することができる。計算ユニット113は、i番目のソーマコア102から受け取った受け入れ入力データを使用して、1つ又は複数の所望の計算を行う。次に、計算ユニット113は、得られた出力データをj番目のソーマコア102に関連する減算器115に出力する。減算器115は、j番目のソーマコア102に関連する複数のシナプス・コプロセッサ112の複数の計算ユニット113からの出力を処理し、結果をj番目のソーマコア102に提供する。
【0040】
図4の計算ユニット113によって実行される動作(演算)は、プログラム(φ)402を使用して規定又は制御することができ、プログラム402は、1つ又は複数のパラメータ404を使用して動作する。プログラム402及びパラメータ404(複数可)は、メモリ装置114又は他の場所(複数可)内に格納することができる。1つ又は複数のパラメータ404は、シナプス・コプロセッサ112によって、関連するソーマコア102によって、又は任意の他の適切な方法で設定又は制御することができる。計算ユニット113によって実行され得る演算の例は、値を加算、減算、又は乗算すること;ソーマコア102に関連する全てのシナプス・コプロセッサ112に亘って一定値を生成すること;シナプス・コプロセッサ112の識別子を出力すること;テスト値に基づいて複数の値のうちの1つを選択すること;値の符号又は平方根の逆数を計算すること;を含むことができる。
【0041】
図5に示されるように、ハードウェア・アーキテクチャ内で実行される複数の動作(演算)又は動作(演算)のセットが存在し得る。「チャネル識別子」の値は、シナプス・コプロセッサ112によって使用され、複数の選択可能なプログラム(φ)502のうちのどれを、計算ユニット113によって入来データに対して実行すべきかを特定することができる。「チャネル識別子」は、どのパラメータ504が計算ユニット113によって使用され、計算ユニット113によって生成された結果を何処に送るかを制御するためにも使用することができる。選択可能なプログラム502及びパラメータ504は、シナプス・コプロセッサ112のメモリ装置114又は他の場所(複数可)に格納することができる。
【0042】
いくつかの実施形態では、計算ユニット113及び減算器115のそれぞれをパイプライン形式で実装することができ、入来データはスカラー値又は小さな値ベクトルを表すことができる。これらの実施形態では、複数のスカラー値又は少なくとも1つのベクトル値をi番目のソーマコア102から受け取ることができ、計算ユニット113によって1つのプログラム502又は異なるプログラム502を値に適用して出力値のシーケンスを生成することができる。出力値のシーケンスは、更なる処理のために減算器115に提供してもよい。
【0043】
図4及び図5は、図1A図1Cの処理アーキテクチャにおけるコプロセッサ機能の例を示しているが、図4及び図5に様々な変更を行ってもよい。例えば、各シナプス・コプロセッサ112は、任意の他の規定された又は再構成可能な方法で実装することができる。
【0044】
図6は、本開示による図1A図1Cの処理アーキテクチャにおける例示的なプログラム可能なコプロセッサ及び縮小(reduction)機能を示す。特に、図6は、上述したシナプス・コプロセッサ112及び減算器115のプログラミングを制御する例示的な機構を示す。
【0045】
図6に示されるように、減算器115は、ソーマコア102に関連する複数のシナプス・コプロセッサ112から出力データを受け取るように構成される。次に、減算器115は、シナプス・コプロセッサ112からの出力を使用して、(Ψによって特定される)少なくとも1つの演算を実行して、関連するソーマコア102に提供される少なくとも1つの結果を生成する。減縮器115によって実行される1つ又は複数の計算は、複数のシナプス・コプロセッサ112からの出力を使用して実行される任意の適切な演算を含むことができる。いくつかの実施形態では、減算器115は、ハードウェア・アーキテクチャ内の様々な機能をサポートする1つ又は複数の命令シーケンスを実行することができる。例えば、関連するソーマコア102のコプロセッサ112から並列にデータを受け取った後に、減算器115は、受け取ったデータに対してプログラム可能な演算を実行し、結果を関連するソーマコア102に出力することができる。例示的な演算は、全てのシナプス・コプロセッサ112からの出力を合計又は乗算すること;シナプス・コプロセッサ112からの出力の最小値又は最大値を特定すること;又は特定のシナプス・コプロセッサの値を出力として選択すること;を含むことができる。
【0046】
シナプス・コプロセッサ112によって実行される1つ又は複数のプログラム(φ)を格納するために、メモリ装置602をこの構造で使用することができる。メモリ装置602を使用して、減算器によって実行される1つ又は複数のプログラム(Ψ)を格納することができる。メモリ装置602は、1つ又は複数のメモリ106,114,117の一部等の、任意の適切な揮発性又は不揮発性の記憶及び検索装置を表す。
【0047】
図6は、図1A図1Cの処理アーキテクチャにおけるプログラム可能なコプロセッサ及び縮小機能の一例を示しているが、図6に様々な変更を行ってもよい。例えば、ハードウェア・アーキテクチャは、適切な数のシナプス・コプロセッサ及び減算器と共に任意の適切な数のソーマコアをサポートすることができる。また、図6の様々な構成要素を組み合わせ、さらに細分化し、再配列し、又は省略することができ、特定の必要性に応じて追加の構成要素を加えることができる。
【0048】
図7及び図8は、本開示による多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示す。図7に示されるように、コンピュータシステム700は、少なくとも1つのプロセッサ702、少なくとも1つの記憶装置704、少なくとも1つの通信ユニット706、及び少なくとも1つの入出力(I/O)ユニット708を含む。
【0049】
プロセッサ702は、上述したソーマコア102、シナプス・コプロセッサ112、減算器115、及び信号線122及び124を組み込んだ集積回路チップを表すことができる。プロセッサ702は、メモリ装置710内にロードされ、次に、ソーマコア102、シナプス・コプロセッサ112、及び減算器115のレジスタ又は他のメモリ内にロードされる命令等の命令を実行する。プロセッサ702は、任意の適切な数のソーマコア102、シナプス・コプロセッサ112、減算器115、及び信号線122及び124を含むことができる。
【0050】
メモリ装置710及び永続的なストレージ712は、記憶装置704の例であり、これらは、情報(一時的又は永久的に記憶されるデータ、プログラムコード、及び/又は他の適切な情報等)を格納及び容易に検索することができる任意の構造を表す。メモリ装置710は、ランダムアクセスメモリ又は任意の他の適切な揮発性又は不揮発性ストレージ装置を表してもよい。永続的なストレージ712は、読出し専用メモリ、ハードドライブ、フラッシュメモリ、又は光ディスク等、データの長期記憶をサポートする1つ又は複数のコンポーネント又は装置を含んでもよい。
【0051】
通信ユニット706は、他のシステム又は装置との通信をサポートする。例えば、通信ユニット706は、有線ネットワーク又は無線ネットワークを介した通信を容易にするネットワークインタフェースカード又は無線トランシーバを含むことができる。通信ユニット706は、任意の適切な物理的又は無線通信リンク(複数可)を介した通信をサポートすることができる。
【0052】
I/Oユニット708によって、データの入出力が可能になる。例えば、I/Oユニット708は、キーボード、マウス、キーパッド、タッチスクリーン、又は他の適切な入力装置を介したユーザ入力のための接続を提供することができる。また、I/Oユニット708は、ディスプレイ、プリンタ、又は他の適切な出力装置に出力を送信することもできる。
【0053】
必要又は所望の場合に、図1A図1Cに示されるハードウェア・アーキテクチャの複数のインスタンスを、一緒に結合し、且つ使用可能なソーマコア102の数を拡張するために使用することができる。例えば、複数の集積回路チップは、所望数のソーマコア102を提供するために互いに通信可能に結合することができる。この例が図8に示されており、マルチプロセッサ装置800は、プロセッサ702としてコンピュータシステム700において又は他のコンピュータシステムにおいて使用することができる。ここで、マルチプロセッサ装置800は、少なくとも1つの高速接続によって結合された少なくとも2つのプロセッサを含む。この例では、4つのプロセッサ802~808が4つの高速接続810によってリング状に結合されているが、他の適切な数及び配置のプロセッサ及び高速接続を使用することもできる。
【0054】
各高速接続810は、図1A図1Cに示されるハードウェア・アーキテクチャの複数のインスタンスを結合するための任意の適切な通信経路(複数可)をサポートすることができる。例えば、各高速接続810は、高速接続810がハードウェア・インスタンスの信号線122及び/又は124の間の信号の伝達をサポートするように、ハードウェア・アーキテクチャの各インスタンスの第3のレベル120に通信可能に接続することができる。各高速接続810は、複数の集積回路チップ同士の間等の、ハードウェア・インスタンス同士の間で信号を伝達するための任意の適切な構造を含む。
【0055】
種々のタイプの高速接続810を使用して、マルチプロセッサ・アーキテクチャをサポートすることができる。例えば、各高速接続810は、2つの集積回路チップ同士の間のフォトニック(photonic)接続を使用して実装することができる。別の例として、集積回路チップ自体が「キルト(quilt)」パッケージングをサポートすることができ、各集積回路チップは、少なくとも1つの側面に沿って電気接続を含み、集積回路チップは、異なるチップ上の電気接続が互いに接触するように取り付けられる。しかしながら、任意の他の又は追加の高速接続810を使用してもよいことに留意されたい。
【0056】
図7及び図8は、多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示しているが、図7及び図8に様々な変更を行ってもよい。例えば、図1A図1Cに示されるハードウェア・アーキテクチャは、任意の適切な機能を実行するために他の適切なシステムで使用してもよい。
【0057】
図9は、本開示による多目的の並列処理アーキテクチャを使用して高度な処理機能をサポートする例示的な方法900を示す。説明を容易にするために、方法900は、図1A図1Cに示されるハードウェア・アーキテクチャに関して説明する。しかしながら、方法900は、任意の他の適切なハードウェア・アーキテクチャと共に使用することができる。
【0058】
図9に示されるように、演算処理は、ステップ902において複数の並列処理コアを使用して実行される。これは、例えば、多種多様な計算のいずれかを行う命令を実行するソーマコア102を1つ又は複数のプロセッサ内に含むことができる。演算処理は、SIMDソーマコア102によって実行される簡単な演算から、フルプロセッサ・ソーマコア102によって実行される複雑な演算まで表すことができる。図9に示される動作は、演算の依存性のために順番に実行できることに留意されたい。同じ演算の複数の独立したチェーンを同時に実行することができ、通信及びシナプス/減算器の動作は、上述したようにチャネルアドレス指定を使用して並列に実行することができる。
【0059】
ステップ904において、各処理コアからの処理結果が他の処理コアに公開される。これは、例えば、各ソーマコア102が、その処理結果を信号線122及び124を介して各ソーマコア102の1つのシナプス・コプロセッサ112に提供することを含む。いくつかの実施形態では、これにより、各ソーマコア102が全てのソーマコア102から処理結果を受け取るためのシナプス・コプロセッサ112が得られる。
【0060】
各処理コアについて、処理コアからの処理結果が、ステップ906において処理され、ステップ908において低減される。これは、例えば、各ソーマコア102に関連するシナプス・コプロセッサ112が、全てのソーマコア102からの処理結果に対していくつかタイプの処理を実行することを含む。シナプス・コプロセッサ112の計算ユニット113によって実行される演算の種類の具体例を以下に説明する。これは、各ソーマコア102がそのソーマコア102についてのシナプス・コプロセッサ112の出力を処理するための減算器115も含むことができる。減算器115によって実行される演算の種類の具体例を以下に説明する。シナプス・コプロセッサ112及び減算器115によって実行される演算は、制御され、且つ異なるプログラムのφ及びΨが異なるデータチャネルに使用される場合等に、変化し得ることに留意されたい。
【0061】
低減された結果は、ステップ910において処理コアに提供される。これは、例えば、それら関連するソーマコア102に出力を提供する減算器115を含むことができる。この時点で、方法900は、処理コアが演算処理の更なる実行中に減らされた結果を使用するように繰り返すことができる。あるいはまた、方法900は終了し、後で新しいデータを用いて繰り返すことができる。
【0062】
図9は、多目的の並列処理アーキテクチャを使用して高度な処理機能をサポートする方法900の一例を示しているが、図9に様々な変更を行ってもよい。例えば、一連のステップとして示されているが、図9の様々なステップは、重なり合うか、並行して発生するか、異なる順序で発生するか、又は何回も発生する可能性がある。
【0063】
上述した実施形態のいくつかでは、各ソーマコア102は、そのシナプス・コプロセッサ112をプログラムして少なくとも1つのプログラムφを実行することができ、入来データが到着すると直ちにプログラム(複数可)φを実行することができる。ソーマコア102についての減算器115は、そのソーマコア102についての全てのシナプス・コプロセッサ112からのプログラムφの結果を使用して、少なくとも1つのプログラムΨを実行する。特定の実施形態では、各プログラムφは、ベクトルサイズが固定され及びループが無いという条件で、大抵の場合O(1)回実行することができ、プログラムΨは、大抵の場合O(log N)回実行することができる。また、特定の実施形態では、各ソーマコア102についてのシナプス・コプロセッサ112及び減算器115によって実行される集合的処理は、以下のように表すことができ、
【数1】
ここで、iは、送信側ソーマコア102のアイデンティティ(又はソーマコア102のアイデンティティ+ソーマコア102のソーマグループ識別子)を表し、Nは、ソーマコア102の数(又はソーマコア102の数×ソーマグループの数)を表す。また、jはチャネル識別子を表し、pは、シナプス・コプロセッサ112で使用される(パラメータ402又は502等の)1つ又は複数のパラメータ(チャネル特有であってもなくてもよい状態変数又はローカル変数等)を表す。さらに、xは、i番目のソーマコア102の出力を表し、yは、チャネルjのソーマコア102の結果として減算器115によって提供される出力を表す。さらに、φ()は、入来データx及び場合によってはパラメータpを使用してシナプス・コプロセッサ112によってj番目のチャネルに対して実行される関数を表し、Ψ()は、シナプス・コプロセッサ112の出力を使用して減算器115によってローカル・ソーマコア102に対して実行される関数を表す。
【0064】
φ()関数の例としては、以下を含む:
【数2】
・r=最大(x,c)
・r=最小(x,c)
・r=選択(x,a,b)
・r=インデックス
ここで、a,b,c及びrは、シナプス・コプロセッサ112内のレジスタの名前を表すことができ、xは、(シナプス・コプロセッサ112の別のレジスタを代わりに使用することもできるが)ソーマコア102からの入力値を表すことができる。選択動作は、(簡単な非ゼロテスト等を実行して)第1のパラメータの条件をテストし、このテストの結果に基づいて第2のパラメータ又は第3のパラメータのいずれかを返す。インデックス(index)動作は、複数のソーマグループを含む実装に固有のものであり得る。各ソーマグループは、同数のソーマコア102を含むことができる。ソーマグループの更なる詳細が以下に提示される。いくつかの実施形態では、シナプス・コプロセッサ112によって実装される関数のいずれもループを伴わない。
【0065】
Ψ()関数の例としては、以下を含む:
・v=合計(r[i])
・v=最大(r[i])
・v=最小(r[i])
ここで、vは、ソーマコア102に提供される減算器115の出力を表し、r[i]は、減算器115がシナプス・コプロセッサ112から受け取った入力を表す(同じシナプス・コプロセッサ112からの複数の値が複数のソーマグループを含む実装で得られる)。最大及び最小関数の各々は、(i)最大値又は最小値と、(ii)最大値又は最小値を与えるシナプス・コプロセッサ112のインデックス値iとの両方を返すことができる。Ψ()関数の結果は、1つ又は複数のレジスタを使用してソーマコア102に利用可能にすることができる。
【0066】
これらの実施形態では、シナプス・コプロセッサ112は、ループで動作し、入力を能動的に検索する(必要な場合には入力を待つ)従来のプログラムではプログラミングできないことがある。代わりに、各チャネルはプログラムφと関連付けることができ、プログラムφは、チャネルにデータが到着したときに実行可能とマークされ、計算リソースが利用可能になったときに最終的に実行される。全てのシナプス・コプロセッサのプログラムφが終了すると、縮小プログラムΨの結果を計算することができる。縮小プログラムΨによる計算結果は、最小数のシナプス・コプロセッサの結果が利用可能になると直ぐに開始することができ、以下で述べるような警告がある。縮小プログラムΨの結果はチャネル毎のレジスタに保存することができる。ソーマコア102が縮小結果を読み出す命令を発すると、減算器115はそのチャネルに対する次の縮小結果を生成する準備ができている。それまでは、そのチャネルに対する減算器115の演算を阻止することができる。
【0067】
シナプス・コプロセッサ112及び減算器115におけるレジスタの割当て及びチャネルの割当ては、必要に応じて抽象化(abstracted)することができる。例えば、プログラム仕様におけるこれらのリソースのそれぞれについて絶対指数を参照する代わりに、マルチプログラム実行と同等のものを達成するために割当て機構を使用することができる。例えば、プログラム(φ及びΨプログラムを含む)がロードされた場合に、レジスタファイルの使用可能なレジスタの中から実際に使用するレジスタを選択し、使用可能なチャネルを選択することができる。入来データに基づいてプログラムが呼び出されるため、明示的な同時処理は形成する必要がない。プログラムが終了すると、レジスタ及びチャネルに関して使用したリソースを再び利用可能にすることができる。シナプス・コプロセッサ112及び減算器115によって実行される実際の命令は、このことについて知る必要はない。むしろ、アップロードされたプログラムコードの命令は、絶対的レジスタ数又はインデックスを使用することができ、抽象化は、ソーマコア102によるプログラムロードの前に、プログラムの必要性及び利用可能なリソースに基づいて適切なコード生成又は再書込みによって高いレベルで行われる。
【0068】
最小数のシナプス・コプロセッサの結果が得られると直ぐに開始する縮小プログラムΨによる計算結果に対して注意する一例は、以下の通りである。演算及び場合によってはデータタイプに応じて、ハードウェア・アーキテクチャは、指定された順序の動作(演算)に従わないことによって、再現性を犠牲にしてプログラムΨの実行を大幅に高速化できるモードをサポートすることができる。例えば、浮動小数点演算は、打消し(cancellation)の可能性のために結合規則(associativity
rules)に従わない。これの具体的な例は、浮動小数点加算を同じ順序で実行して毎回全く同じ結果を保証する必要がある場合である。これにより、ある入力値がまだ利用可能でないが、操作(演算)の順序の後の方で他の入力値が利用可能となる場合に、減速が生じる可能性がある。減算器115は、操作順序が常に維持される(減速をもたらす)ように入力値を待つ、又は減算器115が合計を順不同で実行する(結果をより迅速に得ることができるが、再現性が低い可能性がある)ようにプログラムすることができる。
【0069】
上記のように、ハードウェア・アーキテクチャの実装は、複数のソーマコア・グループ102を含むことができる。そのような手法は、ソーマグループを単一の集積回路に実装することができ、又は異なるソーマグループを別個の集積回路として実装することができる(集積回路は、電気的又は光学的接続等を用いて一緒に結合することができる)。データセット全体がソーマコア102にマッピングされ得るならば、いくつかのタイプのプログラム(以下でより詳細に議論されるものを含む)は、このタイプのハードウェア・アーキテクチャを用いて大幅にスピードアップすることができる。
【0070】
複数のソーマグループを用いる解決策を容易にするために、各シナプス・コプロセッサ112の通信相手の数に依存して、いくつかのリソース及び動作を複製してもよい。例えば、簡単なモデルでは、各シナプス・コプロセッサ112は、正確に1つのソーマコア112からの結果を受け取ることができる。複数のソーマグループを用いる解決策では、各シナプス・コプロセッサ112は、ソーマグループ毎に1つのソーマコア102から結果を受け取ることができる。シナプス・コプロセッサプログラムでは、データ転送に関連するリソース(送信されるデータを保持するレジスタや結果を保持するレジスタ等)が複製される場合に、単一のソーマグループを用いる実装と同様に表現できる。従って、シナプス・コプロセッサのレジスタ毎にS個の複製がある場合には、S個のソーマグループまで動作するように単一のプロセッサを実装することができる。ソーマグループ毎のパラメータを有効にするには、データのソースであるソーマグループ番号へのアクセスを提供することが有用又は必要となり得る。これは、特定の通信に使用されるソーマコア・インデックスに加えてソーマグループ番号を返す上述したインデックス操作を使用して達成できる。
【0071】
複数のソーマグループの実装は、物理的に分離される場合に、フォトニクス又は他の高速相互接続を使用して複数の集積回路を結合する等、任意の適切な方法で達成することができる。各ソーマコア102がその結果を専用バスに書き込む場合に、各ソーマグループ内の異なるソーマコア102のそれぞれのバスを接続することができ、この接続は、各バスを1:N通信バスからS:Nバスに変化させる。これは、例えば、送信されるデータが最も一般的な形式[ソーマグループID、ソーマID、チャネルID]等のようにフルアドレスを持つ場合に許容することができ、各ソーマグループ内の各ソーマコア102上のシナプス・コプロセッサ112がデータを受け取ることが保証される限り、データをソーマグループ毎に経路指定することを可能にする。
【0072】
さらに、信号線122及び124を使用してソーマコア102をシナプス・コプロセッサ112に結合するために使用されるネットワークを実装するために多数の可能な手法が存在する。例えば、上述したように、N個の独立したネットワークのそれぞれは、N個のソーマコア102のうちの1つをソースとして有することができ、そのソーマコア102をN個のシナプス・コプロセッサ112(各ソーマコア102の1つ)に接続する。各ソーマコア102の各出力に対する専用ネットワークが、データ転送における起こり得る競合を最小限に抑えるが、送信が発生していないときにリソースが使えなくなることを意味する。理想的には、ソーマコア102の全てがロックステップで動作し、ほぼ同時にデータを送信し、これは、専用の信号線でのみうまく処理することができる。実際には、ソーマコア102は、リソースを待つような実行時の細かい影響や、分岐予測のような異なる動的決定等の様々な要因のため、同期を失う可能性がある。その場合に、送信はまったく同じタイミングでは起こらない。送信されるデータは通常小さいので、ソーマコア102を接続するネットワークのうちの1つ(又は少数)を使用することは、著しい減速を生じさせることなく、十分であり、リソースの利用率を改善する。上述したアドレス[ソーマグループID、ソーマID、チャネルID]において、ソーマグループ毎の各ソーマコア102がそれ自体の専用ネットワークを有し、そのネットワークを各ソーマコア102上のシナプス・コプロセッサ112に接続するならば、ソーマIDを省くことができる。接続ネットワークの別の実装では、ソーマグループ毎に単一のネットワークを有することができ、全てのデータパッケージには完全なアドレスが付される。
【0073】
ソーマコア102同士の間にネットワークを形成するための様々な方法がある。1つの可能性は、全てのデータパケットを中央の開始点から各受信者(recipient)に送信することである。この開始点から、データパケットを他のソーマグループにも容易に送信できる。この手法の利点には、直接配信、高スループット(異なるターゲットへの送信に競合がない)、及び低遅延が含まれる。1つの欠点は、特にソーマ毎又はソーマのグループ毎に1つのネットワークを用いることによる高いコストである。
【0074】
別の手法は、ソーマコアの限定されたセット102にポイント・ツー・ポイント接続を提供し、受信者にデータパッケージをさらに配信させることである。受信者は、ソーマコア102の異なるサブセットに接続することができ、これらのサブセットは、全てのソーマコア102が確実に接続されるように選択することができる。理想的には、サブセットは、ネットワークの「直径」を低減又は最小化するように選択することができ、ここでネットワークの直径は、2つのコア102同士の間の最大距離(ターゲットに到達するために通るソーマコア102の数)を指す。ソーマコア102当たりの接続数に固定した上限が与えられると、その範囲(degree)の超立方体アーキテクチャは直径を最小にすることができる。
【0075】
全てのソーマコア102が、可能な限り多くの個々の接続を介して確実にデータを受け取り且つ送信を拡散させるために、様々な手法を用いることができる。例えば、周知のアルゴリズムは、送信側ソーマコア102のインデックスと、送信側ソーマコア102からデータを受け取ったリンクとを考慮に入れることができる。そのような場合に、各ソーマコア102からのデータは固定パターンで送信することができるが、そのパターンは個々のソーマコア102に対して異なってもよく、接続の利用率を最大化する。この手法は、各ソーマコア102が選択された隣接コアと単に通信することができ、必要に応じて隣接コアがデータを転送することができるので、各ネットワークの中央の開始位置を除去することができる。ネットワーク内の1つ又は複数のソーマコア102は、他のソーマグループにデータを送信する役割を担い、異なるソーマコア102は、異なるソーマグループとの通信を担うことができる。
【0076】
動的アルゴリズムも使用することができる。例えば、受け取られた全てのパケットは、1つのソーマコア102から(ソーマコア102がパケットを送信することを除いて)全ての隣接コアに転送することができる。次に、隣接する各ソーマコア102は、そのパケットを既に見たかどうかを追跡し続けることができる。そうであれば(パケットを見たならば)、パケットは単に破棄することができる。そうでなければ(パケットを見ていないならば)、隣接するソーマコア102のシナプス・コプロセッサ112は、パケットを受け取って転送する。この手法の1つの利点は、ネットワークをより迅速に完全に充たす(flooded)ことができることである。この手法のもう1つの利点は、複数のソーマグループを設計に組み込むことが容易なことである。1:Nバスアーキテクチャ(送信側の競合をチェックする必要がない)をS:Nアーキテクチャに変更することは大きな進歩になり得る。あるソーマグループのソーマコア102が別のソーマグループ内の別のソーマコア102にパケットを転送する場合に、後者(別のソーマコア102)は、そのパケットを他の入来パケットと見なすのと同様に、そのパケットを見なすことができる。実際には、ソーマコア間のリンクは、通常のソーマ内のソーマグループ内の接続のように見なすことができる。
【0077】
上記のように、シナプス・コプロセッサ112及び減算器115の使用を容易にするために、複数の新しい命令を使用することができる。これらの命令は、ソーマコア102によって実行される命令だけでなく、シナプス・コプロセッサ112及び減算器115に提供されシナプス・コプロセッサ112及び減算器115によって実行される命令も含む。以下に、新しいハードウェア・アーキテクチャをサポートするために使用される新しい命令のタイプの例を示す。以下に具体的な命令が記載されているが、必要又は所望に応じて、ハードウェア・アーキテクチャにおいて他の又は追加の命令をサポートすることができることに留意されたい。
【0078】
表1は、ソーマコア102及びシナプス・コプロセッサによって実行され得る例示的な命令を示す。表1において、“oreg”は(メモリ装置106内等の)ソーマコアのレジスタを示し、“yreg”は(メモリ装置114内等の)シナプス・コプロセッサのレジスタを示す。
【表1】
【0079】
表2は、減算器115によって実行され得る例示的な演算を示す。縮小演算は対数的に多くのサイクルを要する可能性があるため、縮小演算は、異なるツリーレベルで複数のそのような動作をパイプライン化することにより、利益を得る。
【表2】
【0080】
いくつかの実施形態では、各シナプス・コプロセッサ112は、SIMD処理を実行することができる。各ソーマコア102は、特定のチャネル上のデータ通信に先立ち、そのチャネルの命令のシーケンスをローカルシナプス・コプロセッサ112にアップロードすることができる。さらに、各ソーマコア102は、そのチャネルについての命令シーケンスをその全てのシナプス・コプロセッサ112にブロードキャストすることによりアップロードすることができる。ソーマコア102は、必要な入力データが利用可能になると、実行すべき演算を減算器115にさらにプログラムすることができる。表3は、実行するためにシナプス・コプロセッサ112にアップロードすることができる命令のタイプの例を示す。
【表3】
【0081】
上述したハードウェア・アーキテクチャは、機械学習、科学計算、ビデオゲーム、及び他の分野における広範囲のアルゴリズムを高速化する(accelerated)ことができる。上記の命令のタイプに基づいて、この特許文書に記載されているハードウェア・アーキテクチャを使用して6つの例示的なタイプの問題をどのように高速化して解決できるかを以下に説明する。
【0082】
第1の例として、提案されるアーキテクチャによって高速化され得るディープ・ラーニングに使用される1つのアルゴリズムはスパース・コーディング(sparse coding)である。最も単純な形式では、スパース・コーディングは、
【数3】
で正規化された入力ベクトルxであり、以下で規定されるエネルギーeを最小にする正規化されたスパース出力ベクトルyを計算する。
【数4】
ここで、Fは因子行列であり、
【数5】
である。また、
【数6】
は、yのエントリー(entries)の絶対値の和を表し、λは、出力の疎らさ(sparseness)を制御する定数である。監督されていない学習モードでは、因子行列Fは、一組のトレーニング入力xに亘ってエネルギーeの和Eを最小にするように選択される。両方の最小化を達成する1つの方法は最急降下法(gradient descent)であり、負の勾配は以下のように規定される。
【数7】
その後に制約
【数8】
が課される。ここで、sgn yはyのエントリの符号のベクトルを表す。
【0083】
(y-Fx)を計算するために、トレーニング入力x及び出力yは、共有された仮想又はローカルソーマメモリに存在することができる。(疎ではない)因子行列Fのエントリは、シナプス・コプロセッサ112のレジスタに存在することができる。具体的には、因子行列FのエントリFjkは、j番目のソーマコアについてのk番目のシナプス・コプロセッサ112のレジスタに存在することができる。ソーマコア102によってそれらのシナプス・コプロセッサ112にブロードキャストされるSIMD命令は、ソーマコア102を横切ると同時に、k番目のソーマコア102が入力エントリxをj番目のソーマコア102のk番目のシナプス・コプロセッサ112にブロードキャストすることができるように、相対アドレス指定を使用することができる。SIMD形式のj番目のソーマコア102のk番目のシナプス・コプロセッサは、乗算Fjkを実行し、次に、そのソーマコアのシナプス・コプロセッサ112を横切るj番目のソーマコア102の減算器115によって対数時間で合計され、(Fx)、従ってj番目のエントリ(y-Fx)を得る。
【0084】
Fの勾配降下を計算するために、エントリFjkが(y-Fx)に比例して増分されろ。j番目のソーマコア102は単に計算済みの(y-Fx)を有し、そのk番目のシナプス・コプロセッサ112は、直近のx値を受け取り、その値をシナプス・コプロセッサ112のレジスタに格納する。こうして、j番目のソーマコア102は、(y-Fx)をk番目のシナプス・コプロセッサ112にブロードキャストし、次にSIMD形式でその結果を格納されたx値で乗算し、その値の倍数をそのシナプス・コプロセッサ112に格納されたFjk値に加算する。
【0085】
これを擬似コードで表現するために、ソーマコア102は複数命令複数データ列方式(MIMD)コアであるので、命令が置かれるソーマコア102のインデックスをiとする慣例が採用される。MIMDのため、命令はiによってパラメータ化してもよい。対照的に、シナプス・コプロセッサ112はSIMDコアであり得るので、ソーマコア102は、同じ命令シーケンスをそのシナプス・コプロセッサ112の全てにブロードキャストすることができる。明確にするために、レジスタは、レジスタ番号の代わりに変数名でラベル付けされる。これらの慣例を前提とすると、ディープ・ラーニング問題のスパース・コーディングは、次のようにハードウェア・アーキテクチャを使用して解決できる。
【数9】
【0086】
第2の例として、提案されるアーキテクチャによって高速化されるディープ・ラーニングに使用される別のアルゴリズムは、制限されたボルツマン・マシンを必要とする。このタイプのネットワークでは、{-1,1}の値を有する入力ベクトルx及び出力ベクトルyは、以下のようにボルツマン分布によって確率論的に関連付けることができる。
P(x,y)=e-E(x,y)/Z (5)
ここで、Zは分配関数であり、最も簡単な形式のエネルギーe(x,y)は以下のように表すことができる。
【数10】
このネットワークは、入力が与えられると、出力が条件付きで独立している(その逆もある)という意味で「制限されている。」また。これは、入力が与えられると、出力は、以下のように表される確率で独立してサンプリングされることを意味する。
【数11】
ここで、σ(χ)はロジスティック関数である。このネットワークの監督されていないトレーニング・アルゴリズムの対比的発散は、以下のような結合Fの勾配をとる。
【数12】
ここで、xはトレーニング入力であり、yは上述したようにxからサンプリングされ、x’はy’からサンプリングされ、y’はx’からサンプリングされる。
【0087】
この課題を満たすために、トレーニング入力x及び出力yは、共有された仮想又はローカルソーマメモリに存在することができる。結合Fjkは、シナプス・コプロセッサ112のレジスタに存在することができる。具体的には、各結合Fjkは、j番目のソーマコア102のk番目のシナプス・コプロセッサ112のレジスタに存在することができる。このアルゴリズムがどのように高速化されるかを説明するために、サンプリングステップについて最初に説明する。ソーマコア102を横切ると同時にSIMD通信を介して入力ベクトルxが与えられると、k番目のソーマコア102は、入力エントリxをj番目のソーマコア102のk番目のシナプス・コプロセッサ112にブロードキャストする。次に、j番目のソーマコア102のk番目のシナプス・コプロセッサ112は、SIMD形式で、乗算Fjkを実行し、その後、そのソーマコアのシナプス・コプロセッサ112を横切るj番目のソーマコア102の減算器115によって対数時間で合計され、
【数13】
を得る。次に、j番目のソーマコア102は、この合計のロジスティック関数を計算し、これを確率として使用して、{-1,1}からyをランダムにサンプリングする。
【0088】
次に、勾配の計算が行われる。トレーニング入力xで開始して、上述したようなサンプリングステップを3回行い、j番目のソーマコア102内のy、k番目のソーマコア102内のx’、j番目のソーマコア102内のy’を得る。j番目のソーマコア102は、y及び(y’)をレジスタに格納するべくその全てのすべてのシナプス・コプロセッサ112にブロードキャストする。次に、高帯域幅通信を使用して、(x’)をk番目のソーマコア102から全てのソーマコア102のk番目のシナプス・コプロセッサ112に同時に送信する。最後に、j番目のソーマコア102のk番目のシナプス・コプロセッサ112は、(y’)(x’)-yを計算し、この倍数を(それが保持する)値Fjkから減算する。
【0089】
擬似コードでは、順方向サンプリングアルゴリズムは、以下のように表すことができる:
【数14】
逆方向サンプリングは類似している可能性がある。サンプリングが与えられると、勾配アルゴリズムは以下のように表される:
【数15】
【0090】
第3の例として、より良好な通信から利益を得ることができる異なる機械学習方法は、階層的クラスタリングである。最も単純な階層的クラスタリング方法は、それ自体のクラスタ内の各項目から開始する。次に、各階層レベルにおいて、階層的クラスタリング方法は、最小距離だけ分離された2つのクラスタを単一のクラスタにグループ化する。
【0091】
改良された階層的クラスタリング方法の第1のステップは、クラスタ同士の間の距離の初期行列を計算することを含む。各アクティブなソーマコア102はクラスタを表すことができ、そのシナプス・コプロセッサ112は、2乗距離を他のクラスタに格納することができる。最初の反復では、各クラスタは単一の項目であるので、アクティブな各ソーマコア102は、その項目の座標を他のソーマコア102の対応するシナプス・コプロセッサ112にブロードキャストし、そのシナプス・コプロセッサ112は、それ自体の項目に対する他の項目の2乗距離を計算する。改良された階層的クラスタリング方法の第2のステップは、クラスタ同士の間の最小2乗距離を求めることを含む。(その減算器115によって)各ソーマコア102は、最小値演算を使用してそれ自体のシナプス・コプロセッサの2乗距離を減少させ、各ソーマコア102はこの数値を全てのソーマコア102にブロードキャストし、各ソーマコアは(それら減算器115によって)最小値演算を用いてその値を再び減少させる。第2の最小値演算は、等しい値(例えば、シナプスコアの最も低いインデックスの値を選択する等)の場合に予測可能なタイブレーカーがあると仮定して、全てのソーマコア102に対して同じ結果を生成する。別の方法は、1つのソーマコア102に対して第2の最小値演算を実行し、その結果を他の全てのソーマコア102にブロードキャストし直すことである。
【0092】
改良された階層的クラスタリング方法の第3のステップは、この最小距離だけ分離された2つのクラスタを見つけることを含む。最良のクラスタに対応するソーマコア102は、それ自体以外のソーマコア102に対する最小距離を計算し、この次に最良のクラスタを全てのソーマコア102にブロードキャストし直す。改良された階層的クラスタリング方法の第4のステップは、選択した2つのクラスタを1つのクラスタに統合することを含む。各ソーマコア102は、最良のクラスタ及び次に最良のクラスタへの距離のうちの最小値を取って、この最小距離を最良のクラスタに対応するシナプス・コプロセッサ112に再び記憶し、このソーマコアのチャネル上でその最小距離をブロードキャストする。次に、最良のクラスタに対応するソーマコア102は、そのシナプス・コプロセッサ112の全てについて、それらの距離をこれらのブロードキャストされたものに置き換える。最後に、次に最良のソーマコア102及びその対応するシナプス・コプロセッサ112が計算から抜ける。次に、第2~第4のステップは、単一のクラスタのみが存在するまで繰り返される。
【0093】
擬似コードでは、(各座標について繰り返す)2乗距離行列を計算する第1のステップは、以下のように表すことができる:
【数16】
(x
is the local cluster’s coordinate: xはローカルクラスタの座標である)
【0094】
クラスタ同士の間の最小距離を求める第2のステップは、以下のように表すことができる:
【数17】
【0095】
最小距離だけ分離された2つのクラスタを見つける第3のステップは、以下のように表すことができる:
【数18】
【0096】
最も近い2つのクラスタを結合する(及びそれら2つのクラスタのうちの1つを非アクティブ化する)第4のステップは、以下のように表すことができる:
【数19】
【0097】
第4の例として、他の一般的な機械学習方法は、多数の変数の複雑な結合確率関数を、少数の変数のみ(ネットワークの入次数(in-degree)まで)を含む条件付き確率の積に分解するベイジアンネットワークを含む。問題は、各変数の周辺分布を計算することである。標準的なシリアル・アーキテクチャでは、これは、以下の式に比例する回数(time)をとる確率伝播アルゴリズムを使用して実行することができる:
変数×入次数×2入次数 (9)
このアルゴリズムは、上記の数の積を反復計算し、次に、2入次数のそのような積それぞれの変数×入次数の合計を計算する。
【0098】
新しいハードウェア・アーキテクチャを使用して、これは、適切なソーマコア102及びシナプス・コプロセッサ112が存在する限り、一定の回数内に達成することができる。任意のソーマコア102へのファンインは、2入次数のみであるので、これは通信を飽和させない。積を計算するために、ログ(logs)の合計(指数(exp)及び対数(log)演算がソーマコア102で実行される場合)を累積するか、又は減算器115の利用可能な累積方法を拡張して、積だけでなく合計も含むことができる。
【0099】
第5の例として、アーキテクチャで高速化され得る人工知能と無関係な他のアプリケーションには、分子シミュレーション及び仮想現実が含まれる。これらのアプリケーションでは、シナプス・コプロセッサ112が、乗算及び加算に加えて平方根の逆数
【数20】
演算のためのハードウェアを有すると仮定する。両方のアプリケーションで高価なステップは似ている。分子シミュレーションに注目すると、それは、以下に式のようなクーロンポテンシャルの計算である:
【数21】
ここで、qはj番目の電荷であり、rjkはj番目とk番目の電荷の間の距離である。高帯域幅通信は、k番目の電荷の座標をk番目のソーマコア102からj番目のソーマコア102のk番目のシナプス・コプロセッサに全てのj及びkに亘って同時にブロードキャストするように処理する。各シナプス・コプロセッサ112において、加算及び乗算を用いて、rjk を計算し、次に平方根の逆数を用いて、1/rjkを計算する。最後に、その合計は、そのシナプス・コプロセッサ112を横切る累算器(減算器115)を使用してj番目のソーマコア102によって計算される。
【0100】
第6の例として、提案されるアーキテクチャによって2次時間(quadric time)から一定時間まで加速され得る別のクラスのアルゴリズムは、凸包アルゴリズム等の幾何学アルゴリズムを必要とする。これらのアルゴリズムは、提案されるアーキテクチャの非線形特性を必要とせず、提案されるアーキテクチャの行列処理能力にのみ依存することができる。これらのアルゴリズムの高次での重要なステップの1つは、動的行列式計算であることが示されている。この計算は、行列-ベクトル乗算によって2次時間で連続的に達成することができる。しかしながら、これらの乗算は、提案されるアーキテクチャを使用して一定時間に減少させることができる。
【0101】
これらの例は、この特許文書に記載されたハードウェア・アーキテクチャを使用して特定の問題に対する特定の解決策によってどの様に解決できるかを示すためだけに提供されたものであることに留意されたい。当然ながら、ハードウェア・アーキテクチャを使用して他の機能を実行することもできる。さらに、上述した特定の問題は、ハードウェア・アーキテクチャを使用して実装された他の解決策を使用して解決することができる。
【0102】
この特許文書に記載されたハードウェア・アーキテクチャ及び関連する命令/動作(演算)は、実装に応じて、従来の手法よりも様々な利点を提供することができる。例えば、本開示は、(適切な数の構成要素で実装される場合に)アーキテクチャがヒトの脳の能力に匹敵するのを可能にするハードウェア・アーキテクチャを提供する。さらに、ハードウェア・アーキテクチャの機能を使用して、人工知能、ディープ・ラーニング、分子シミュレーション、仮想現実等の他の分野のコンピュータ処理を改善することができる。
【0103】
いくつかの実施形態では、この特許文書に記載される様々な機能は、コンピュータ可読プログラムコードから形成され、及びコンピュータ可読媒体に組み込まれたコンピュータプログラムによって実装又はサポートされる。「コンピュータ可読プログラムコード」という語句は、ソースコード、オブジェクトコード、及び実行可能コードを含むあらゆるタイプのコンピュータコードを含む。「コンピュータ可読媒体」という語句は、読取り専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、ハードディスクドライブ、コンパクトディスク(CD)、デジタルビデオディスク(DVD)、又は他のタイプのメモリ等の、コンピュータによってアクセス可能なあらゆるタイプの媒体を含む。「非一時的な」コンピュータ可読媒体は、一時的な電気信号又は他の信号を伝送する有線、無線、光、又は他の通信リンクを除外する。非一時的なコンピュータ可読媒体は、データを永続的に格納することができる媒体と、書き換え可能な光ディスク又は消去可能なメモリ装置等の、データを保存し後で上書きすることができる媒体とを含む。
【0104】
この特許文書を通して使用される特定の用語及び語句の規定を述べることは有益であり得る。「アプリケーション」及び「プログラム」という用語は、1つ又は複数のコンピュータプログラム、ソフトウェアコンポーネント、命令セット、プロシージャ、機能、オブジェクト、クラス、インスタンス、関連データ、又は適切なコンピュータコード(ソースコード、オブジェクトコード、又は実行可能コードを含む)で実装するように構成されたものの一部を指す。用語「通信する」及びその派生語は、直接的な通信と間接的な通信との両方を包含する。「含む、有する(include)」及び「備える、有する、含む(comprise)」という用語及びその派生語は、限定されない包含を意味する。「又は」という用語は、包括的であり、及び/又はを意味する。「関連する、関連付けられる」という語句及びその派生語は、~を含む、~内に含まれる、~と相互作用する、~を包含する、~内に包含される、~に又は~と接続する、~に又は~と結合する、~と通信可能である、~と協働する、~を挟む、~と並置する、~に近接する、~に又は~と結合される、~を有する、~の性質を有する、或いは~への又は~との関係を有する等を意味し得る。語句「少なくとも1つ」は、項目のリストとともに使用される場合に、列挙された項目の1つ又は複数の異なる組合せを使用してもよく、リストの1つの項目のみを必要としてもよいことを意味する。例えば、「A,B,Cの少なくとも1つ」には、A、B、C、A及びB、A及びC、B及びC、並びにA及びB及びCの組合せが含まれる。
【0105】
この特許文書の記載は、特定の要素、ステップ、又は機能が特許請求の範囲に含めなければならない必須又は重要な要素であることを暗示するものとして理解すべきではない。また、請求項のいずれも、特定の請求項において、機能を特定する分詞句の後に「~のための手段」又は「~のステップ」用語が明示的に使用されている場合を除いて、添付の請求項又は請求項の要素のいずれかに関して、米国特許法第112条(f)を行使することを意図する。特許請求の範囲内の「機構」、「モジュール」、「装置」、「ユニット」、「構成要素」、「要素」、「部材」、「機器」、「機械」、「システム」、「プロセッサ」、「処理装置」又は「コントローラ」等(これらに限定されない)の用語の使用は、特許請求の範囲自体の特徴によってさらに修正又は改良されたものとして理解され、当業者に知られている構造を指すものと理解され且つ意図しており、米国特許法第112条(f)を行使することを意図していない。
【0106】
本開示は特定の実施形態及び一般的に関連する方法を記載しているが、これらの実施形態及び方法の改変及び置換は当業者には明らかであろう。従って、例示的な実施形態の上記説明は、本開示を規定又は制限しない。以下の請求項によって規定されるように、本開示の精神及び範囲から逸脱することなく、他の変更、置換、及び改変も可能である。
【0107】
以下に、出願当初の特許請求の範囲の内容を実施例として記載しておく。
[実施例1]
装置であって、当該装置は、
複数の並列処理コアであって、各処理コアは、1つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
各処理コアに関連付けられた複数の並列コプロセッサと、
各処理コアからの前記入力データを各処理コアに関連付けられた前記複数のコプロセッサのうちの指定された1つに転送するように構成された複数の通信ラインであって、前記コプロセッサは、前記入力データを処理して出力データを生成するように構成される、複数の通信ラインと、
複数の減算回路であって、各処理コアは前記複数の減算回路のうちの1つに関連付けられ、各減算回路は、前記関連付けられた処理コアの各コプロセッサから前記出力データを受け取り、前記出力データに1つ又は複数の関数を適用し、且つ1つ又は複数の結果を前記関連付けられた処理コアに提供するように構成される、複数の減算回路と、を有する、
装置。
[実施例2]
前記処理コア、前記コプロセッサ、前記減算回路、及び前記通信ラインは、集積回路チップの複数の層に配置される、実施例1に記載の装置。
[実施例3]
前記処理コアは、各処理コアが前記通信ライン及び前記コプロセッサを介して他の全ての処理コアと直接的に通信できる点で完全に接続されている、実施例1に記載の装置。
[実施例4]
各処理コアは、
前記通信ラインを介した低遅延の送信動作、
前記処理コアの指定されたコプロセッサへの入力データの送信、及び
前記処理コアに関連付けられたコプロセッサをプログラミングすること、のうちの少なくとも1つをサポートする命令を実行するように構成される、実施例1に記載の装置。
[実施例5]
各コプロセッサは、
特定のシーケンスの入力データを受け取り処理すること、
受け取った入力データ及び格納されたパラメータに対して1つ又は複数のプログラム可能な演算を実行すること、及び
出力データを減算回路に転送すること、のうちの少なくとも1つをサポートする命令を実行するように構成される、実施例1に記載の装置。
[実施例6]
前記1つ又は複数のプログラム可能な演算は、加算、乗算、最小、最大、平方根の逆数、テスト値に基づく値の選択、及びコプロセッサの一意識別子の出力のうちの1つ又は複数を含む、実施例5に記載の装置。
[実施例7]
各減算回路は、
前記関連付けられた処理コアの前記コプロセッサから出力データを並列に受け取ること、
該受け取った出力データに対して1つ又は複数のプログラム可能な演算を実行すること、及び
1つ又は複数の結果を前記関連付けられた処理コアに転送すること、のうちの少なくとも1つをサポートする命令を実行するように構成される、実施例1に記載の装置。
[実施例8]
前記1つ又は複数のプログラム可能な演算は、合計、最小、最大、及び値の選択のうちの1つ又は複数を含む、実施例7に記載の装置。
[実施例9]
前記コプロセッサ及び前記通信ラインは、前記処理コア同士の間に複数の通信チャネルを形成する、実施例1に記載の装置。
[実施例10]
各減算回路の結果は、以下のように規定され、
【数22】
ここで、yは、特定の処理コアjに関連する前記減算回路の前記結果を表し、
Ψは、前記特定の処理コアjに関連する前記減算回路によって実行される関数を表し、
Φは、前記特定の処理コアjに関連する前記コプロセッサによって実行される関数を表し、
は、i番目の処理コアによって生成された入力を表し、
ijは、1つ又は複数の状態変数又はローカル変数を表し、
Nは、処理コアの数を表す、
実施例1に記載の装置。
[実施例11]
前記Ψ及びΦは、それぞれ、前記減算回路及び前記コプロセッサの選択可能な関数を表す、実施例10に記載の装置。
[実施例12]
前記処理コア、前記コプロセッサ、及び前記減算回路は、複数のチャネルを介して通信するように構成され、
前記コプロセッサ及び前記減算回路は、前記コプロセッサ及び前記減算回路によって実行される演算が、特定の入力データが受け取られる前記チャネルに基づいて変化するように構成される、実施例1に記載の装置。
[実施例13]
前記処理コアは、第1の処理コア・グループを形成し、
当該装置は、少なくとも1つの追加の処理コア・グループをさらに有し、
前記コプロセッサは、前記少なくとも1つの追加の処理コア・グループから入力データを受け取るように構成される、実施例1に記載の装置。
[実施例14]
システムであって、当該システムは、
複数の集積回路デバイスであって、各集積回路デバイスは、
複数の並列処理コアであって、各処理コアは、1つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
各処理コアに関連付けられた複数の並列コプロセッサと、
各処理コアからの前記入力データを各処理コアに関連付けられた前記コプロセッサのうちの指定された1つに転送するように構成された複数の通信ラインであって、前記コプロセッサは、前記入力データを処理して出力データを生成するように構成される、複数の通信ラインと、
複数の減算回路であって、各処理コアは前記複数の減算回路のうちの1つに関連付けられ、各減算回路は、前記関連付けられた処理コアの各プロセッサから前記出力データを受け取り、前記出力データに1つ又は複数の関数を適用し、且つ1つ又は複数の結果を前記関連付けられた処理コアに提供するように構成される、複数の減算回路と、を含む、複数の集積回路デバイスと、
前記集積回路デバイス内の前記複数の通信ラインの少なくともいくつかを結合する少なくとも1つの高速接続と、を有する、
システム。
[実施例15]
各集積回路デバイスにおいて、各処理コアは、各処理コアが、前記通信ライン及び前記コプロセッサを介して他の全ての処理コアと直接的に通信することができるという点で完全に接続される、実施例14に記載のシステム。
[実施例16]
各処理コアは、
前記通信ラインを介した低遅延の送信動作、
前記処理コアの指定されたコプロセッサへの入力データの送信、及び
前記処理コアに関連付けられたコプロセッサをプログラミングすること、のうちの少なくとも1つをサポートする命令を実行するように構成される、実施例14に記載のシステム。
[実施例17]
各コプロセッサは、
特定のシーケンスの入力データを受け取り処理すること、
該受け取った入力データ及び格納されたパラメータに対して1つ又は複数のプログラム可能な演算を実行すること、及び
出力データを減算回路に転送すること、のうちの少なくとも1つをサポートする命令を実行するように構成される、実施例14に記載のシステム。
[実施例18]
前記1つ又は複数のプログラム可能な演算は、加算、乗算、最小、最大、平方根の逆数、テスト値に基づく値の選択、及びコプロセッサの一意識別子の出力のうちの1つ又は複数を含む、実施例17に記載のシステム。
[実施例19]
各減算回路は、
前記関連付けられた処理コアの前記コプロセッサから出力データを並列に受け取ること、
該受け取った出力データに対して1つ又は複数のプログラム可能な演算を実行すること、及び
1つ又は複数の結果を前記関連付けられた処理コアに転送すること、のうちの少なくとも1つをサポートする命令を実行するように構成される、実施例14に記載のシステム。
[実施例20]
前記1つ又は複数のプログラム可能な演算は、合計、最小、最大、及び値の選択のうちの1つ又は複数を含む、実施例19に記載のシステム。
[実施例21]
各減算回路の結果は、以下のように規定され、
【数23】
ここで、yは、特定の処理コアjに関連する前記減算回路の前記結果を表し、
Ψは、前記特定の処理コアjに関連する前記減算回路によって実行される関数を表し、
Φは、前記特定の処理コアjに関連する前記コプロセッサによって実行される関数を表し、
は、i番目の処理コアによって生成された入力を表し、
ijは、1つ又は複数の状態変数又はローカル変数を表し、
Nは、処理コアの数を表す、
実施例14に記載のシステム。
[実施例22]
前記処理コア、前記コプロセッサ、及び前記減算回路は、複数のチャネルを介して通信するように構成され、
前記コプロセッサ及び前記減算回路は、前記コプロセッサ及び前記減算回路によって実行される演算が、特定の入力データが受け取られる前記チャネルに基づいて変化するように構成される、実施例14に記載のシステム。
[実施例23]
各集積回路デバイスについて、
前記処理コアは、第1の処理コア・グループを形成し、
前記集積回路デバイスは、少なくとも1つの追加の処理コア・グループをさらに有し、
前記コプロセッサは、前記少なくとも1つの追加の処理コア・グループから入力データを受け取るように構成される、実施例14に記載のシステム。
[実施例24]
方法であって、当該方法は、
複数の並列処理コアを使用して入力データを生成するステップであって、各処理コアは1つ又は複数の演算処理を実行するように構成される、生成するステップと、
各処理コアについて、その処理コアからの前記入力データを、各処理コアの指定されたコプロセッサに公開するステップであって、各処理コアは複数の並列コプロセッサに関連付けられる、公開するステップと、
各処理コアについて、全ての処理コアからの前記入力データを処理して、その処理コアに関連付けられた前記コプロセッサを使用して出力データを生成するステップと、
各処理コアについて、その処理コアに関連付けられた前記コプロセッサからの前記出力データを低減して1つ又は複数の結果を生成するステップと、
各処理コアについて、1つ又は複数の結果をその処理コアに提供するステップと、を含む、
方法。
[実施例25]
複数の通信ラインが、前記入力データを前記処理コアから前記コプロセッサに転送する、実施例24に記載の方法。
[実施例26]
各処理コアを使用して、
前記通信ラインを介した低遅延の送信動作、
前記処理コアの指定されたコプロセッサへの入力データの送信、及び
処理コアに関連付けられたコプロセッサをプログラミングすること、のうちの少なくとも1つをサポートする命令を実行するステップをさらに含む、実施例24に記載の方法。
[実施例27]
各コプロセッサを使用して、
特定のシーケンスの入力データを受け取り処理すること、
該受け取った入力データ及び格納されたパラメータに対して1つ又は複数のプログラム可能な演算を実行すること、及び
出力データを、前記処理コアのうちの1つに関連付けられた前記コプロセッサからの前記出力データを1つ又は複数の結果に低減する減算回路に転送すること、のうちの少なくとも1つをサポートする命令を実行するステップをさらに含む、実施例24に記載の方法。
[実施例28]
前記1つ又は複数のプログラム可能な演算は、加算、乗算、最小、最大、平方根の逆数、テスト値に基づく値の選択、及びコプロセッサの一意識別子の出力のうちの1つ又は複数を含む、実施例27に記載の方法。
[実施例29]
各減算回路を使用して、
前記関連付けられた処理コアの前記コプロセッサから出力データを並列に受け取ること、
該受け取った出力データに対して1つ又は複数のプログラム可能な演算を実行すること、
1つ又は複数の結果を前記関連付けられた処理コアに転送すること、のうちの少なくとも1つをサポートする命令を実行するステップをさらに含む、実施例24に記載の方法。
[実施例30]
前記1つ又は複数のプログラム可能な演算は、合計、最小、最大、及び値の選択のうちの1つ又は複数を含む、実施例29に記載の方法。
[実施例31]
前記処理コアのうちの1つに関連付けられた前記コプロセッサからの前記出力データの各縮小の結果は、以下のように規定され、
【数1】
ここで、yは、特定の処理コアjに関連する前記縮小の結果を表し、
Ψは、前記特定の処理コアjに関連する前記縮小中に実行される関数を表し、
Φは、前記特定の処理コアjに関連する前記コプロセッサによって実行される関数を表し、
は、i番目の処理コアの入力を表し、
ijは、1つ又は複数の状態変数又はローカル変数を表し、
Nは、処理コアの数を表す、
実施例24に記載の方法。
[実施例32]
前記処理コアは複数のチャネルを介して通信し、
前記入力データの処理及び前記出力データの縮小は、特定の入力データが受け取られるチャネルに基づいて変化する、実施例24に記載の方法。
[実施例33]
前記処理コア及びそれらに関連付けられたコプロセッサがグループに分割され、
各処理コアに関連付けられた前記コプロセッサは、前記処理コアからの入力データを1つ又は複数のグループで受け取る、実施例24に記載の方法。
[実施例34]
方法であって、当該方法は、
第1の処理コアに関連付けられた複数の並列コプロセッサによる実行のための第1の命令を第1の処理コアから発し、第1の処理コアに関連付けられた減算回路による実行のための第2の命令を第1の処理コアから発するステップと、
第1の処理コアを使用して入力データを生成するステップと、
前記コプロセッサを使用して第1の命令を実行して、前記コプロセッサにおいて第1の処理コアからの前記入力データ及び1つ又は複数の追加の処理コアからの入力データを処理し、出力データを生成するステップと、
前記減算回路を使用して第2の命令を実行して、前記出力データに1つ又は複数の関数を適用し、1つ又は複数の結果を生成するステップと、
該1つ又は複数の結果を前記処理コアに提供するステップと、を含む、
方法。
[実施例35]
第1の処理コアを使用して、
第1の処理コアに結合された通信ラインを介した低遅延の送信動作、
入力データを前記コプロセッサに送信すること、及び
前記コプロセッサをプログラミングすること、のうちの少なくとも1つをサポートする命令を実行するステップをさらに含む、実施例34に記載の方法。
[実施例36]
前記コプロセッサを使用して、
特定のシーケンスの入力データを受け取り処理すること、
該受け取った入力データ及び格納されたパラメータに対して1つ又は複数のプログラム可能な演算を実行すること、及び
出力データを前記減算回路に転送すること、のうちの少なくとも1つをサポートする第1の命令を実行するステップをさらに含む、実施例34に記載の方法。
[実施例37]
前記減算回路を使用して、
前記コプロセッサから出の力データを並列に受け取ること、
該受け取った出力データに対して1つ又は複数のプログラム可能な演算を実行すること、
前記1つ又は複数の結果を前記処理コアに転送すること、のうちの少なくとも1つをサポートする第2の命令を実行するステップをさらに含む、実施例34に記載の方法。


図1A
図1B
図1C
図2
図3
図4
図5
図6
図7
図8
図9