(57)【要約】  装置は、複数の並列処理コア（１０２）を含み、各処理コア（１０２）は、１つ又は複数の演算処理を実行して入力データを生成するように構成される。この装置は、各処理コア（１０２）に関連付けられた複数の並列コプロセッサ（１１２）も含む。装置は、各処理コア（１０２）からの入力データを、各処理コア（１０２）に関連付けられたコプロセッサ（１１２）のうちの指定された１つに転送するように構成された複数の通信ライン（１２２，１２４）をさらに含み、コプロセッサ（１１２）は、入力データを処理して出力データを生成するように構成される。さらに、この装置は、複数の減算回路（１１５）を含み、各処理コア（１０２）は、減算回路（１１５）のうちの１つに関連付けられる。各減算回路（１１５）は、関連付けられた処理コア（１０２）の各コプロセッサ（１１２）から出力データを受け取り、出力データに１つ又は複数の関数を適用し、且つ１つ又は複数の結果を関連付けられた処理コア（１０２）に提供するように構成される。
2018518753.tif 000002
【特許請求の範囲】
【請求項１】
装置であって、当該装置は、
複数の並列処理コアであって、各処理コアは、１つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
各処理コアに関連付けられた複数の並列コプロセッサと、
各処理コアからの前記入力データを各処理コアに関連付けられた前記複数のコプロセッサのうちの指定された１つに転送するように構成された複数の通信ラインであって、前記コプロセッサは、前記入力データを処理して出力データを生成するように構成される、複数の通信ラインと、
複数の減算回路であって、各処理コアは前記複数の減算回路のうちの１つに関連付けられ、各減算回路は、前記関連付けられた処理コアの各コプロセッサから前記出力データを受け取り、前記出力データに１つ又は複数の関数を適用し、且つ１つ又は複数の結果を前記関連付けられた処理コアに提供するように構成される、複数の減算回路と、を有する、
装置。
【請求項２】
前記処理コア、前記コプロセッサ、前記減算回路、及び前記通信ラインは、集積回路チップの複数の層に配置される、請求項１に記載の装置。
【請求項３】
前記処理コアは、各処理コアが前記通信ライン及び前記コプロセッサを介して他の全ての処理コアと直接的に通信できる点で完全に接続されている、請求項１に記載の装置。
【請求項４】
各処理コアは、
前記通信ラインを介した低遅延の送信動作、
前記処理コアの指定されたコプロセッサへの入力データの送信、及び
前記処理コアに関連付けられたコプロセッサをプログラミングすること、のうちの少なくとも１つをサポートする命令を実行するように構成される、請求項１に記載の装置。
【請求項５】
各コプロセッサは、
特定のシーケンスの入力データを受け取り処理すること、
受け取った入力データ及び格納されたパラメータに対して１つ又は複数のプログラム可能な演算を実行すること、及び
出力データを減算回路に転送すること、のうちの少なくとも１つをサポートする命令を実行するように構成される、請求項１に記載の装置。
【請求項６】
前記１つ又は複数のプログラム可能な演算は、加算、乗算、最小、最大、平方根の逆数、テスト値に基づく値の選択、及びコプロセッサの一意識別子の出力のうちの１つ又は複数を含む、請求項５に記載の装置。
【請求項７】
各減算回路は、
前記関連付けられた処理コアの前記コプロセッサから出力データを並列に受け取ること、
該受け取った出力データに対して１つ又は複数のプログラム可能な演算を実行すること、及び
１つ又は複数の結果を前記関連付けられた処理コアに転送すること、のうちの少なくとも１つをサポートする命令を実行するように構成される、請求項１に記載の装置。
【請求項８】
前記１つ又は複数のプログラム可能な演算は、合計、最小、最大、及び値の選択のうちの１つ又は複数を含む、請求項７に記載の装置。
【請求項９】
前記コプロセッサ及び前記通信ラインは、前記処理コア同士の間に複数の通信チャネルを形成する、請求項１に記載の装置。
【請求項１０】
各減算回路の結果は、以下のように規定され、
【数２２】
2018518753.tif 000027
ここで、ｙｊは、特定の処理コアｊに関連する前記減算回路の前記結果を表し、
Ψｊは、前記特定の処理コアｊに関連する前記減算回路によって実行される関数を表し、
Φｊは、前記特定の処理コアｊに関連する前記コプロセッサによって実行される関数を表し、
ｘｉは、ｉ番目の処理コアによって生成された入力を表し、
ｐｉｊは、１つ又は複数の状態変数又はローカル変数を表し、
Ｎは、処理コアの数を表す、
請求項１に記載の装置。
【請求項１１】
前記Ψ及びΦは、それぞれ、前記減算回路及び前記コプロセッサの選択可能な関数を表す、請求項１０に記載の装置。
【請求項１２】
前記処理コア、前記コプロセッサ、及び前記減算回路は、複数のチャネルを介して通信するように構成され、
前記コプロセッサ及び前記減算回路は、前記コプロセッサ及び前記減算回路によって実行される演算が、特定の入力データが受け取られる前記チャネルに基づいて変化するように構成される、請求項１に記載の装置。
【請求項１３】
前記処理コアは、第１の処理コア・グループを形成し、
当該装置は、少なくとも１つの追加の処理コア・グループをさらに有し、
前記コプロセッサは、前記少なくとも１つの追加の処理コア・グループから入力データを受け取るように構成される、請求項１に記載の装置。
【請求項１４】
システムであって、当該システムは、
複数の集積回路デバイスであって、各集積回路デバイスは、
複数の並列処理コアであって、各処理コアは、１つ又は複数の演算処理を実行して入力データを生成するように構成される、複数の並列処理コアと、
各処理コアに関連付けられた複数の並列コプロセッサと、
各処理コアからの前記入力データを各処理コアに関連付けられた前記コプロセッサのうちの指定された１つに転送するように構成された複数の通信ラインであって、前記コプロセッサは、前記入力データを処理して出力データを生成するように構成される、複数の通信ラインと、
複数の減算回路であって、各処理コアは前記複数の減算回路のうちの１つに関連付けられ、各減算回路は、前記関連付けられた処理コアの各プロセッサから前記出力データを受け取り、前記出力データに１つ又は複数の関数を適用し、且つ１つ又は複数の結果を前記関連付けられた処理コアに提供するように構成される、複数の減算回路と、を含む、複数の集積回路デバイスと、
前記集積回路デバイス内の前記複数の通信ラインの少なくともいくつかを結合する少なくとも１つの高速接続と、を有する、
システム。
【請求項１５】
各集積回路デバイスにおいて、各処理コアは、各処理コアが、前記通信ライン及び前記コプロセッサを介して他の全ての処理コアと直接的に通信することができるという点で完全に接続される、請求項１４に記載のシステム。
【請求項１６】
各処理コアは、
前記通信ラインを介した低遅延の送信動作、
前記処理コアの指定されたコプロセッサへの入力データの送信、及び
前記処理コアに関連付けられたコプロセッサをプログラミングすること、のうちの少なくとも１つをサポートする命令を実行するように構成される、請求項１４に記載のシステム。
【請求項１７】
各コプロセッサは、
特定のシーケンスの入力データを受け取り処理すること、
該受け取った入力データ及び格納されたパラメータに対して１つ又は複数のプログラム可能な演算を実行すること、及び
出力データを減算回路に転送すること、のうちの少なくとも１つをサポートする命令を実行するように構成される、請求項１４に記載のシステム。
【請求項１８】
前記１つ又は複数のプログラム可能な演算は、加算、乗算、最小、最大、平方根の逆数、テスト値に基づく値の選択、及びコプロセッサの一意識別子の出力のうちの１つ又は複数を含む、請求項１７に記載のシステム。
【請求項１９】
各減算回路は、
前記関連付けられた処理コアの前記コプロセッサから出力データを並列に受け取ること、
該受け取った出力データに対して１つ又は複数のプログラム可能な演算を実行すること、及び
１つ又は複数の結果を前記関連付けられた処理コアに転送すること、のうちの少なくとも１つをサポートする命令を実行するように構成される、請求項１４に記載のシステム。
【請求項２０】
前記１つ又は複数のプログラム可能な演算は、合計、最小、最大、及び値の選択のうちの１つ又は複数を含む、請求項１９に記載のシステム。
【請求項２１】
各減算回路の結果は、以下のように規定され、
【数２３】
2018518753.tif 000028
ここで、ｙｊは、特定の処理コアｊに関連する前記減算回路の前記結果を表し、
Ψｊは、前記特定の処理コアｊに関連する前記減算回路によって実行される関数を表し、
Φｊは、前記特定の処理コアｊに関連する前記コプロセッサによって実行される関数を表し、
ｘｉは、ｉ番目の処理コアによって生成された入力を表し、
ｐｉｊは、１つ又は複数の状態変数又はローカル変数を表し、
Ｎは、処理コアの数を表す、
請求項１４に記載のシステム。
【請求項２２】
前記処理コア、前記コプロセッサ、及び前記減算回路は、複数のチャネルを介して通信するように構成され、
前記コプロセッサ及び前記減算回路は、前記コプロセッサ及び前記減算回路によって実行される演算が、特定の入力データが受け取られる前記チャネルに基づいて変化するように構成される、請求項１４に記載のシステム。
【請求項２３】
各集積回路デバイスについて、
前記処理コアは、第１の処理コア・グループを形成し、
前記集積回路デバイスは、少なくとも１つの追加の処理コア・グループをさらに有し、
前記コプロセッサは、前記少なくとも１つの追加の処理コア・グループから入力データを受け取るように構成される、請求項１４に記載のシステム。
【請求項２４】
方法であって、当該方法は、
複数の並列処理コアを使用して入力データを生成するステップであって、各処理コアは１つ又は複数の演算処理を実行するように構成される、生成するステップと、
各処理コアについて、その処理コアからの前記入力データを、各処理コアの指定されたコプロセッサに公開するステップであって、各処理コアは複数の並列コプロセッサに関連付けられる、公開するステップと、
各処理コアについて、全ての処理コアからの前記入力データを処理して、その処理コアに関連付けられた前記コプロセッサを使用して出力データを生成するステップと、
各処理コアについて、その処理コアに関連付けられた前記コプロセッサからの前記出力データを低減して１つ又は複数の結果を生成するステップと、
各処理コアについて、１つ又は複数の結果をその処理コアに提供するステップと、を含む、
方法。
【請求項２５】
複数の通信ラインが、前記入力データを前記処理コアから前記コプロセッサに転送する、請求項２４に記載の方法。
【請求項２６】
各処理コアを使用して、
前記通信ラインを介した低遅延の送信動作、
前記処理コアの指定されたコプロセッサへの入力データの送信、及び
処理コアに関連付けられたコプロセッサをプログラミングすること、のうちの少なくとも１つをサポートする命令を実行するステップをさらに含む、請求項２４に記載の方法。
【請求項２７】
各コプロセッサを使用して、
特定のシーケンスの入力データを受け取り処理すること、
該受け取った入力データ及び格納されたパラメータに対して１つ又は複数のプログラム可能な演算を実行すること、及び
出力データを、前記処理コアのうちの１つに関連付けられた前記コプロセッサからの前記出力データを１つ又は複数の結果に低減する減算回路に転送すること、のうちの少なくとも１つをサポートする命令を実行するステップをさらに含む、請求項２４に記載の方法。
【請求項２８】
前記１つ又は複数のプログラム可能な演算は、加算、乗算、最小、最大、平方根の逆数、テスト値に基づく値の選択、及びコプロセッサの一意識別子の出力のうちの１つ又は複数を含む、請求項２７に記載の方法。
【請求項２９】
各減算回路を使用して、
前記関連付けられた処理コアの前記コプロセッサから出力データを並列に受け取ること、
該受け取った出力データに対して１つ又は複数のプログラム可能な演算を実行すること、
１つ又は複数の結果を前記関連付けられた処理コアに転送すること、のうちの少なくとも１つをサポートする命令を実行するステップをさらに含む、請求項２４に記載の方法。
【請求項３０】
前記１つ又は複数のプログラム可能な演算は、合計、最小、最大、及び値の選択のうちの１つ又は複数を含む、請求項２９に記載の方法。
【請求項３１】
前記処理コアのうちの１つに関連付けられた前記コプロセッサからの前記出力データの各縮小の結果は、以下のように規定され、
【数１】
2018518753.tif 000029
ここで、ｙｊは、特定の処理コアｊに関連する前記縮小の結果を表し、
Ψｊは、前記特定の処理コアｊに関連する前記縮小中に実行される関数を表し、
Φｊは、前記特定の処理コアｊに関連する前記コプロセッサによって実行される関数を表し、
ｘｉは、ｉ番目の処理コアの入力を表し、
ｐｉｊは、１つ又は複数の状態変数又はローカル変数を表し、
Ｎは、処理コアの数を表す、
請求項２４に記載の方法。
【請求項３２】
前記処理コアは複数のチャネルを介して通信し、
前記入力データの処理及び前記出力データの縮小は、特定の入力データが受け取られるチャネルに基づいて変化する、請求項２４に記載の方法。
【請求項３３】
前記処理コア及びそれらに関連付けられたコプロセッサがグループに分割され、
各処理コアに関連付けられた前記コプロセッサは、前記処理コアからの入力データを１つ又は複数のグループで受け取る、請求項２４に記載の方法。
【請求項３４】
方法であって、当該方法は、
第１の処理コアに関連付けられた複数の並列コプロセッサによる実行のための第１の命令を第１の処理コアから発し、第１の処理コアに関連付けられた減算回路による実行のための第２の命令を第１の処理コアから発するステップと、
第１の処理コアを使用して入力データを生成するステップと、
前記コプロセッサを使用して第１の命令を実行して、前記コプロセッサにおいて第１の処理コアからの前記入力データ及び１つ又は複数の追加の処理コアからの入力データを処理し、出力データを生成するステップと、
前記減算回路を使用して第２の命令を実行して、前記出力データに１つ又は複数の関数を適用し、１つ又は複数の結果を生成するステップと、
該１つ又は複数の結果を前記処理コアに提供するステップと、を含む、
方法。
【請求項３５】
第１の処理コアを使用して、
第１の処理コアに結合された通信ラインを介した低遅延の送信動作、
入力データを前記コプロセッサに送信すること、及び
前記コプロセッサをプログラミングすること、のうちの少なくとも１つをサポートする命令を実行するステップをさらに含む、請求項３４に記載の方法。
【請求項３６】
前記コプロセッサを使用して、
特定のシーケンスの入力データを受け取り処理すること、
該受け取った入力データ及び格納されたパラメータに対して１つ又は複数のプログラム可能な演算を実行すること、及び
出力データを前記減算回路に転送すること、のうちの少なくとも１つをサポートする第１の命令を実行するステップをさらに含む、請求項３４に記載の方法。
【請求項３７】
前記減算回路を使用して、
前記コプロセッサから出の力データを並列に受け取ること、
該受け取った出力データに対して１つ又は複数のプログラム可能な演算を実行すること、
前記１つ又は複数の結果を前記処理コアに転送すること、のうちの少なくとも１つをサポートする第２の命令を実行するステップをさらに含む、請求項３４に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、概して、コンピュータ装置及びコンピュータシステムのためのハードウェア・アーキテクチャに関する。より具体的には、本開示は、人工知能で使用されるような高度な処理機能をサポートする多目的の並列処理アーキテクチャ（general-purpose
parallel computing architecture）に関する。
【背景技術】
【０００２】
ヒトの脳は、典型的には、１，０００兆個のシナプスによって接続された約１，０００億個のニューロンを含む大規模な並列システムである。理想的には、ヒトの脳の動作をシミュレートすることにより、人工知能等の高度な処理機能をサポートすることができる。しかしながら、ヒトの脳をシミュレートする、又はヒトの脳の能力に匹敵するコンピュータシステムを設計する従来の試みは、一般に、脳の接続形態又は３次元構造に実質的に一致しない等、多くの理由で不十分であった。
【発明の概要】
【０００３】
本開示は、多目的の並列処理アーキテクチャを提供する。
【０００４】
第１の実施形態では、装置は、複数の並列処理コア（computing
cores）を含み、各処理コアは、１つ又は複数の演算処理（processing
operations）を実行して入力データを生成するように構成される。この装置は、各処理コアに関連付けられた複数の並列コプロセッサも含む。この装置は、各処理コアからの入力データを各処理コアに関連付けられたコプロセッサのうちの指定された１つに転送するように構成された複数の通信ラインをさらに含み、コプロセッサは、入力データを処理して出力データを生成するように構成される。さらに、この装置は複数の減算回路を含み、各処理コアは、減算回路のうちの１つに関連付けられる。各減算回路は、関連付けられた処理コアの各コプロセッサから出力データを受け取り、出力データに１つ又は複数の関数を適用し、且つ１つ又は複数の結果を関連付けられた処理コアに提供するように構成される。
【０００５】
第２の実施形態では、システムは、複数の集積回路デバイスを含む。各集積回路デバイスは、複数の並列処理コアを含み、各処理コアは、１つ又は複数の演算処理を実行して入力データを生成するように構成される。各集積回路デバイスは、各処理コアに関連付けられた複数の並列コプロセッサも含む。各集積回路デバイスは、各処理コアからの入力データを各処理コアに関連付けられたコプロセッサのうちの指定された１つに転送するように構成された複数の通信ラインをさらに含み、コプロセッサは、入力データを処理して出力データを生成するように構成される。さらに、各集積回路デバイスは、複数の減算回路を含み、各処理コアは、減算回路のうちの１つに関連付けられる。各減算回路は、関連付けられた処理コアの各コプロセッサから出力データを受け取り、出力データに１つ又は複数の関数を適用し、且つ１つ又は複数の結果を関連付けられた処理コアに提供するように構成される。システムは、集積回路デバイス内の通信ラインの少なくともいくつかを結合する少なくとも１つの高速接続も含む。
【０００６】
第３の実施形態では、方法は、複数の並列処理コアを使用して入力データを生成するステップであって、各処理コアは１つ又は複数の演算処理を実行するように構成される、生成するステップを含む。この方法は、各処理コアについて、その処理コアからの入力データを各処理コアの指定されたコプロセッサに公開するステップであって、各処理コアは複数の並列コプロセッサに関連付けられる、公開するステップも含む。この方法は、各処理コアについて、全ての処理コアからの入力データを処理して、その処理コアに関連付けられたコプロセッサを使用して出力データを生成するステップをさらに含む。この方法は、各処理コアについて、その処理コアに関連付けられたコプロセッサからの出力データを減らして１つ又は複数の結果を生成するステップも含む。さらに、この方法は、各処理コアについて、１つ又は複数の結果をその処理コアに提供するステップを含む。
【０００７】
第４の実施形態では、方法は、第１の処理コアに関連付けられた複数の並列コプロセッサによる実行のための第１の命令を第１の処理コアから発し、第１の処理コアに関連付けられた減算回路による実行のための第２の命令を第１の処理コアから発するステップを含む。この方法は、第１の処理コアを使用して入力データを生成するステップも含む。この方法は、コプロセッサを使用して第１の命令を実行して、コプロセッサにおいて第１の処理コアからの入力データ及び１つ又は複数の追加の処理コアからの入力データを処理し、出力データを生成するステップをさらに含む。この方法は、減算回路を使用して第２の命令を実行して、出力データに１つ又は複数の関数を適用し、１つ又は複数の結果を生成するステップも含む。さらに、この方法は、１つ又は複数の結果を処理コアに提供するステップを含む。
【０００８】
他の技術的特徴は、以下の図面、詳細な説明、及び特許請求の範囲から当業者に容易に明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１Ａ】本開示による例示的な多目的の並列処理アーキテクチャを示す図である。
【図１Ｂ】本開示による例示的な多目的の並列処理アーキテクチャを示す図である。
【図１Ｃ】本開示による例示的な多目的の並列処理アーキテクチャを示す図である。
【図２】本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的な通信を示す図である。
【図３】本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的な通信を示す図である。
【図４】本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的なコプロセッサ機能を示す図である。
【図５】本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的なコプロセッサ機能を示す図である。
【図６】本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的なプログラム可能なコプロセッサ及び減算機能を示す図である。
【図７】本開示による多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示す図である。
【図８】本開示による多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示す図である。
【図９】本開示による多目的の並列処理アーキテクチャを使用して高度な処理機能をサポートする例示的な方法を示す図である。
【発明を実施するための形態】
【００１０】
本開示及びその特徴のより完全な理解のために、添付の図面と併せて以下の詳細な説明を参照する。
【００１１】
以下に説明する図１Ａ〜図９、及び本特許文書における本発明の原理を説明するために使用される様々な実施形態は、単に説明のために過ぎず、決して本発明の範囲を限定するものと解釈すべきではない。当業者であれば、本発明の原理は、適切に構成された任意のタイプの装置又はシステムで実施できることを理解するであろう。
【００１２】
上記のように、ヒトの脳は、典型的には、１，０００兆個のシナプスによって接続された約１，０００億個のニューロンを含む大規模な並列システムである。シナプスは、ニューロン同士の間の信号の伝達を支援する。ヒトの脳は、古典的なチューリング・マシンとは非常に異なった構造をしている。古典的なチューリング・マシンを使用してヒトの脳をシミュレートすることは、典型的にはヒトの脳内に多数のニューロン及びシナプスが存在するため、実際的ではない。
【００１３】
ヒトの知能には多くの要素があるが、１つの重要な要素は、莫大な量（高帯域幅）の感覚入力を受け取り、情報をより少ない量（低帯域幅）の説明的な概念に減少させるプロセスを指す、次元の縮小（reduction）である。数学的には、この縮小は、様々な形式の反復因子分析を使用して達成することができる。様々な形式の因子分析は、いくつかの特徴を共有する傾向がある。例えば、「順方向説明モード」と呼ばれる１つの動作モードでは、因子分析は、多数の入力に対していくつかの簡単な計算を実行し、合計を累算し、可能であればより複雑な計算を出力に対して実行する。「逆方向学習モード」と呼ばれる別の動作モードでは、因子分析は、入力に対する簡単な計算を、出力及び対応する入力に対するいくつかの簡単な計算によって変更する。これらの計算は簡単な傾向があるが、（入力数を指す）ファンイン及び（出力先の数を指す）ファンアウトは、どちらも数万になる。
【００１４】
ヒトの脳の能力に幾らか匹敵することができるシステムを設計することは、一般的に多くの理由から不十分である。例えば、そのような莫大なファンイン及びファンアウトは、２次元（２Ｄ）回路に実際にマッピングすることができず、そのような高度に接続された処理アーキテクチャをメインストリームから締め出す。ヒトの脳の能力に匹敵するコンピュータ装置を設計するために、より多くの通信帯域幅を有するハードウェア・アーキテクチャが必要とされる。本開示は、多数の高度に相互接続された処理コアを含む様々な新しい多目的の「コネクショニスト（connectionist）」ハードウェア・アーキテクチャを説明する。とりわけ、これらのハードウェア・アーキテクチャは、機械学習、科学計算、ビデオゲーム、及び他の分野における幅広い種類のアルゴリズムを高速化することができる。いくつかの実施形態では、これらのハードウェア・アーキテクチャは、３次元（３Ｄ）集積回路技術等の最新の技術を使用して妥当なコストで製造することができる。
【００１５】
図１Ａ〜図１Ｃは、本開示による例示的な多目的の並列処理アーキテクチャを示す。特に、図１Ａ〜図１Ｃは、高い通信帯域幅を有するハードウェア・アーキテクチャを提供する例示的なマルチレベル構造を示す。異なるレベルの構造が、以下に説明するように異なる機能を実行する。
【００１６】
図１Ａは、ハードウェア・アーキテクチャの第１のレベル１００を示す。このレベル１００は、ソーマコア（soma core）と呼ばれる複数のコンピュータ処理又は処理コア１０２を含む。最小限の形態では、各ソーマコア１０２は、１つ又は複数のデータ信号を受け取り、いくつかのタイプの処理を実行し、且つ１つ又は複数の入力信号を送信することができる。演算処理を実行するために各ソーマコア１０２に含まれる構造は、非常に単純な処理コアから非常に複雑な処理コアまで及ぶことができる。例えば、各ソーマコア１０２内の処理ユニットは、多目的の単一命令多重データ（SIMD）計算ユニット等の比較的簡単な処理コアであってもよい。ソーマコア１０２は、ＡＲＭ、ＩＮＴＥＬ（登録商標）、又は他のコンピュータプロセッサ製造者からのもの等、完全な処理コアを表してもよい。いくつかの実施形態では、ソーマコア１０２のグループは、既存の「多数のコア」プロセッサ設計を使用して実装することができる。しかしながら、任意の適切な処理コアを使用してソーマコア１０２を実装することができる。本明細書でのハードウェア・アーキテクチャは１６個のソーマコア１０２を含むが、任意数のソーマコア１０２をハードウェア・アーキテクチャでサポートすることができる。特定の実施形態では、本明細書の全てのソーマコア１０２は、プロセッサと呼ばれる単一の集積回路チップ内に実装することができる。また、ソーマコア１０２は、均一であってもなくてもよいことに留意されたい。
【００１７】
各ソーマコア１０２は、処理回路１０４及び少なくとも１つのメモリ装置１０６を含む。処理回路１０４は、一般に、ソーマコア１０２内でいくつかのタイプの処理を実行するために使用される回路を表す。上記のように、処理は、単純又は複雑であってもよく、処理回路１０４は、実行すべき特定の処理に依存して変更することができる。メモリ装置１０６は、一般に、ソーマコア１０２によって使用、生成、又は受け取られるデータを格納するための１つ又は複数のレジスタ等の任意の適切な記憶及び検索装置を表す。図１Ａでは、メモリ装置１０６がソーマコア１０２内に埋め込まれるように示されているが、各メモリ装置１０６の全体又は一部は、ソーマコア１０２にアクセス可能な他の任意の適切な位置に配置してもよい。
【００１８】
図１Ｂは、ハードウェア・アーキテクチャの第１のレベル１００に関連するハードウェア・アーキテクチャの第２のレベル１１０を示す。第２のレベル１１０は、各ソーマコア１０２に関連付けられた（シナプス・コプロセッサと呼ばれる）複数のコプロセッサ１１２を含む。シナプス・コプロセッサ１１２は、一般的に、ソーマコア１０２同士の間の（後述する）信号線を介して送信された入力データを処理する。各ソーマコア１０２を複数のシナプス・コプロセッサ１１２に関連付けることができる。一例として、Ｎ個のソーマコアから構成されるグループ内の各ソーマコア１０２について、最大Ｎ個のシナプス・コプロセッサ１１２が設けられ、これを使用して、（それ自体を含む）グループ内のソーマコア１０２からそのソーマコア１０２への通信をサポートすることができる。いくつかの実施形態では、各ソーマコア１０２は、グループ内の各ソーマコア１０２について、１つのシナプス・コプロセッサ１１２に通信可能に結合される。換言すれば、各ソーマコア１０２は、Ｎ個全てのソーマコア１０２に通信可能に結合され得る。従って、「ローカル」又は「ホスト」ソーマコア１０２のシナプス・コプロセッサ１１２は、全てのソーマコア１０２（それ自体を含む）からの入力データを受け取って処理するために使用される。これにより、いくつかの実施形態では、各ソーマコア１０２のＮ個全てのシナプス・コプロセッサ１１２が、Ｎ個全てのソーマコア１０２からの入力データを並列に受け取ることが可能になる。各ソーマコア１０２は、典型的には、同数のシナプス・コプロセッサ１１２を含むことができるが、他の実施形態を使用することもできることに留意されたい。
【００１９】
各シナプス・コプロセッサ１１２は、ソーマコア１０２に対して入来する入力データの処理をサポートする任意の適切な構造を含む。シナプス・コプロセッサ１１２は、限定された能力を有し得るが、再プログラム可能であり得る。いくつかの実施形態では、各シナプス・コプロセッサ１１２は、プログラム可能なユニット又は他の計算ユニット１１３、及び少なくとも１つのメモリ装置１１４を含む。計算ユニット１１３は、ハードウェア・アーキテクチャにおける様々な機能をサポートする命令の１つ又は複数のシーケンスを実行するように構成された任意の適切な構造を表す。これらの機能の例には、特定のシーケンスのデータの受け取り及び処理、受け取った入力及び格納されたパラメータに対する演算の実行、又は値の転送が含まれる。メモリ装置１１４は、一般に、シナプス・コプロセッサ１１２によって使用、生成、又は受け取られるデータを格納するための１つ又は複数のレジスタ等の任意の適切な記憶及び検索装置を表す。図１Ｂでは、メモリ装置１１４がシナプス・コプロセッサ１１２内に埋め込まれるように示されているが、各メモリ装置１１４の全体又は一部は、シナプス・コプロセッサ１１２にアクセス可能な任意の他の適切な位置に配置してもよい。
【００２０】
ハードウェア・アーキテクチャの第２のレベル１１０は、種々の減算回路、すなわち「減算器（reducer）１１５」も含む。いくつかの実施形態では、ソーマコア１０２毎に１つの減算器１１５が存在し得る。各減算器１１５は、ソーマコア１０２のうちの１つに関連付けられた全てのシナプス・コプロセッサ１１２によって生成される出力データを受け取り、受け取った出力データをいくつかの方法で処理し、結果、すなわち処理の結果をローカル・ソーマコア１０２に渡す。例えば、各減算器１１５は、受け取った出力データ値を合計又は他に累算する、受け取った出力データの最小値又は最大値を特定する、又は他のいくつかの演算処理を実行することができる。このようにして、各減算器１１５は、ソーマコア１０２の出力データを処理し、そのソーマコア１０２に供給されるデータ量を減らす。
【００２１】
各減算器１１５は、複数の出力値を処理するための任意の適切な構造を含む。いくつかの実施形態では、各減算器１１５は、処理回路１１６、及び少なくとも１つのメモリ装置１１７を含む。処理回路１１６は、一般に、減算器１１５内で何らかのタイプの処理を実行するために使用される回路を表し、且つソーマコア１０２の処理回路１０４よりも遥かに特殊化されることが多い。例えば、処理回路１１６は、１つのソーマコア１０２に関連付けられたシナプス・コプロセッサ１１２からの出力値の全てを合計するために使用される累算器によって形成された加算器ツリーを含むことができる。メモリ装置１１７は、一般に、減算器１１５によって使用、生成、又は受け取られるデータを格納するための１つ又は複数のレジスタ等の任意の適切な記憶及び検索装置（複数可）を表す。図１Ｂでは、例メモリ装置１１７が減算器１１５内に埋め込まれるように示されているが、各メモリ装置１１７の全体又は一部は、減算器１１５にアクセス可能な他の任意の適切な位置に配置してもよい。
【００２２】
図１Ｃは、ここではハードウェア・アーキテクチャの第１のレベル１００及び第２のレベル１１０に関連するハードウェア・アーキテクチャの第３のレベル１２０を示す。第３のレベル１２０は、ソーマコア１０２を通信可能に結合する複数の信号線１２２及び１２４を含み、それによって、ソーマコア１０２への、ソーマコア１０２からの、及びソーマコア同士の間の信号の伝達をサポートする。いくつかの実施形態では、ソーマコア１０２は、グループ内の各ソーマコア１０２が、信号線１２２及び１２４並びにシナプス・コプロセッサ１１２の適切な構成を介して、同じグループ内の他の全てのソーマコア１０２と直接的に通信することができるという点で完全に接続される。
【００２３】
図１Ｃにおける信号線１２２及び１２４の物理的レイアウトは、単に説明のために過ぎず、ハードウェア・アーキテクチャにおける信号線の実際の物理的配置を表す必要はないことに留意されたい。例えば、ソーマコア１０２同士の間のネットワークを設計する様々な方法があり、その設計は、ソーマコア１０２の全ての間の直接的な通信をサポートしてもしなくてもよい。従って、信号線１２２及び１２４は、ハードウェア・アーキテクチャ内の任意の所望の通信経路をサポートするように構成することができる。
【００２４】
動作中、各ソーマコア１０２は、所望の命令を実行し、場合によってはその減算器１１５又は他のソース（複数可）から受け取ったデータを含むデータを処理するように動作する。各ソーマコア１０２は、その演算処理の結果を他のソーマコア１０２（及び場合によってはそれ自体）に入力データとして提供することができ、各ソーマコア１０２は、他のソーマコアの演算処理によってそのシナプス・コプロセッサ１１２を介して生成された入力データを受け取ることができる。各ソーマコア１０２のシナプス・コプロセッサ１１２は、入力データに対して所望の演算処理を実行することができ、シナプス・コプロセッサ１１２が出力するデータは、各ソーマコア１０２の減算器１１５によってさらに処理することができる。減算器１１５からの結果は、ローカル／ホスト・ソーマコア１０２に提供され、ローカル／ホスト・ソーマコア１０２は、そのデータを使用して追加の演算処理を実行することができる。
【００２５】
ソーマコア１０２から接続されたシナプスプロセッサ１１２への各通信において複数の「チャネル」をサポートすることも可能であり、ここで各チャネルを異なる演算処理に関連付けることができる。例えば、各シナプス・コプロセッサ１１２は、１つのソーマコア１０２から複数のチャネルを介して入力データを受け取ることができ、そのソーマコア１１２に接続されたシナプス・コプロセッサ１１２は、入力データに使用されるチャネルに応じて異なる演算処理を実行することができる。さらに、各減算器１１５は、その関連するシナプス・コプロセッサ１１２からの出力データを複数のチャネルを介して受け取ることができ、減算器１１５は、シナプスプロセッサ１１２から出力データを受け取ったチャネルに応じて異なる演算処理を実行することができる。チャネルは、実際の物理的チャネル（データが異なる信号線を介して送信される場合等）又は論理チャネル（データが異なるチャネル識別子を用いて共通信号線を介して送信される場合等）を表すことができる。これらの実施形態では、ソーマコア１０２、シナプス・コプロセッサ１１２、及び減算器１１５内の異なるレジスタ又は他のメモリ位置を使用して、異なるデータ及び異なるプログラミング命令を格納することができる。これにより、ハードウェア・アーキテクチャが同時処理又は他のタイプのプログラミング動作をサポートできる。
【００２６】
上記のように、各シナプス・コプロセッサ１１２のメモリ装置１１４は、複数のレジスタを含むことができる。いくつかの実施形態では、レジスタは、可能な各接続パートナー（各ソーマコア１０２）に関連付けられ、且つ各接続パートナーのチャネル（複数可）の入来する入力データを保持するために使用されるレジスタを含む。レジスタは、プログラミング命令の実行中に使用されるパラメータ値及び他の値を保持するために使用されるローカルレジスタも含むことができる。特定の実施形態では、シナプス・コプロセッサ１１２の演算処理は、入来する入力データに応答して実行される１つ又は複数の命令を使用して記述され、シナプス・コプロセッサ１１２にはコマンドループは存在していない。
【００２７】
各ソーマコア１０２は、そのシナプス・コプロセッサ１１２上のプログラム命令のインストールを個別に制御することができ、異なるプログラム命令を異なるチャネルに対して提供することができる。例えば、ソーマコア１０２に、そのシナプス・コプロセッサ１１２の一部又は全部に同じプログラムをロードさせる命令が存在する可能性がある。また、ソーマコア１０２に、そのシナプス・コプロセッサ１１２の大抵の場合に異なる値を含むパラメータレジスタをロードさせる命令が存在する可能性がある。ソーマコア１０２は、このデータの全てを、ソーマコアの全てのシナプス・コプロセッサ１１２の全てのレジスタの値を保持するのに十分な大きさの所与のメモリ領域からロードすることができることに留意されたい。各ソーマコア１０２は、そのシナプス・コプロセッサ１１２の個々のパラメータレジスタを読み出すことができるが、チャネル毎のレジスタの値を読み出すことはできない。代わりに、チャネル毎のレジスタの値は、シナプスプロセッサ１１２によって処理され、及び／又は関連する減算器１１５に供給され、減算器１１５は、各チャネルについて受け取ったデータを適切に処理するようにローカル／ホスト・ソーマコア１０２によってプログラムされ得る。各減算器１１５への入力は、特定のチャネル上の関連するソーマコア１０２の全てのシナプス・コプロセッサ１１２からの出力値を表すことができる。
【００２８】
各ソーマコア１０２は、上述したようにシナプス・コプロセッサ１１２及び減算器１１５の使用を容易にする多数の新しい命令をサポートすることができる。例えば、各ソーマコア１０２は、入力データ要素を全てのソーマコア１０２（の特定のチャネル）に送信し、それ自体のシナプス・コプロセッサ１１２の特定のチャネルに入力データを送信し、それ自体の減算器１１５から結果を受け取り、そのシナプス・コプロセッサ１１２及び減算器１１５内にプログラム又は他の命令をインストール又は選択し、シナプス・コプロセッサ１１２のパラメータレジスタにデータを格納するための命令をサポートすることができる。ハードウェア・アーキテクチャにおいてサポートされる例示的な命令の更なる詳細が以下に提示される。
【００２９】
いくつかの実施形態では、図１Ａ〜図１Ｃに示されるハードウェア・アーキテクチャは、単一の集積回路チップ内に実装することができる。集積回路チップは、例えば、シリコン・オン・インシュレータ（SOI）等の長年に亘る製造技術を使用することにより、又は３次元集積回路製造技術等の最近開発された技術を使用することにより、任意の適切な方法で製造することができる。必要又は所望に応じて、図１Ａ〜図１Ｃに示されるハードウェア・アーキテクチャの複数のインスタンスを、一緒に結合し、且つ使用可能なソーマコア１０２の数を拡張するために使用することができる。例えば、複数の集積回路チップは、１つ又は複数の高速接続を使用して、ハードウェア・アーキテクチャの各インスタンスの信号線１２２及び１２４を結合すること等によって、任意の所望の数のソーマコア１０２を提供するために互いに通信可能に結合し得る。
【００３０】
また、いくつかの実施形態では、各ソーマコア１０２は、ハードウェア・アーキテクチャに所望の機能を提供するために、特定の機能又は機能の組合せを実行するように構成することができる。他の実施形態では、ソーマコア１０２の機能（複数可）を、規定することができ、且つ時間の経過とともに又は所望に応じて変更できるように、各ソーマコア１０２をプログラム可能とすることができる。同様に、いくつかの実施形態では、各シナプス・コプロセッサ１１２及び減算器１１５は、ハードウェア・アーキテクチャに所望の機能を提供するために、特定の機能又は機能の組合せを実行するように構成することができる。他の実施形態では、各シナプス・コプロセッサ１１２及び減算器１１５は、シナプス・コプロセッサ１１２及び減算器１１５の機能を、規定し、且つ時間の経過とともに又は所望に応じて変更できるようにプログラム可能とすることができる。
【００３１】
ソーマコア１０２によって実行される処理は並行して行うことができ、各ソーマコア１０２についてシナプス・コプロセッサ１１２及び減算器１１５によって実行される処理も並行して行うことができることに留意されたい。このようにして、各ソーマコア１０２は、ソーマコア１０２同士の間に十分な通信インフラストラクチャが与えられると同時に、複数の信号線１２２及び１２４を介して通信することができる。適切な数のソーマコア１０２、シナプス・コプロセッサ１１２、減算器１１５、及び信号線１２２及び１２４がある場合に、このハードウェア・アーキテクチャは、処理コア同士の間の膨大な数の通信接続をサポートすることができ、これらの通信接続を全て同時に使用可能にすることができる。その結果、この設計は、より多くの通信帯域幅を有するハードウェア・アーキテクチャを表す。
【００３２】
図１Ａ〜図１Ｃは、多目的の並列処理アーキテクチャの一例を示すが、図１Ａ〜図１Ｃに示されるハードウェア・アーキテクチャに様々な変更を行ってもよい。例えば、ハードウェア・アーキテクチャは、適切な数のシナプス・コプロセッサ及び減算器と共に、任意の適切な数のソーマコアをサポートすることができる。また、各ソーマコア、シナプス・コプロセッサ、及び減算器は、ソーマコア又はシナプス・コプロセッサのための共有処理リソースを使用することにより、又は複数の動作を同時に実行することを可能にする複数の減算器を使用すること等により、他の適切な方法で実装することができる。さらに、図１Ａ〜図１Ｃの様々な構成要素を組み合わせ、さらに細分化し、再配列し、又は省略することができ、特定の必要性に応じて追加の構成要素を加えることができる。特定の例として、１つ又は複数のソーマコア１０２は、減算器１１５と共に使用する必要はないことがある。
【００３３】
図２及び図３は、本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的な通信を示す。図２に示されるように、各ソーマコア１０２は、全てのソーマコア１０２（それ自体を含む）から入力データを受け取るシナプス・コプロセッサ１１２を有することができる。この同じパターンは、ソーマコア１０２から構成されるグループ内の全てのソーマコア１０２について繰り返すことができる。上述した信号線１２２及び１２４を使用して、各ソーマコア１０２を、全てのソーマコア１０２のうちの１つのシナプス・コプロセッサ１１２に適切な方法で結合し、これらの通信をサポートすることができる。
【００３４】
Ｎ個のソーマコア１０２が存在する場合に、各ソーマコア１０２にＮ個のシナプス・コプロセッサ１１２（それ自体を含むソーマコア１０２毎に１個のシナプス・コプロセッサ１１２）を設けることができる。各ソーマコア１０２は、全てのソーマコア１０２に情報をブロードキャストすることができ、各ソーマコア１０２は、そのシナプス・コプロセッサ１１２を介して他の全てのソーマコア１０２から情報を受け取ることができる。実際上、いくつかの実施形態では、Ｎ個のソーマコア１０２のそれぞれについてのＮ個のシナプス・コプロセッサ１１２は、ソーマコア１０２同士の間のＮ個の独立した通信ネットワークをサポートすることができる。
【００３５】
図３は、ソーマコア同士の間の２つの独立した通信ネットワークのうちの１つの特定の例を示す。図３に示されるように、１つのソーマコア１０２ａは、システム内の各ソーマコア１０２の１つのシナプス・コプロセッサ１１２に入力データをブロードキャストすることができる。同様に、別のソーマコア１０２ｂは、システム内の各ソーマコア１０２の１つのシナプス・コプロセッサ１１２にデータをブロードキャストすることができる。いくつかの実施形態では、ソーマコア１０２ａ及び１０２ｂによるブロードキャストは、同時に発生することができる。その結果、Ｎ個のソーマコア１０２は、同時にＮ個のデータブロードキャストに関与することができる。
【００３６】
ここでのブロードキャストは、あるソーマコアから次の行及び列まで連続的に発生するものとして示されているが、これは単に説明を簡単にするために過ぎないものであることに留意されたい。データをブロードキャストしている各シナプス・コプロセッサ１１２は、代わりに、信号線１２２及び１２４を介して全てのソーマコア１０２のシナプス・コプロセッサ１１２にデータを直接的にブロードキャストすることができる。当然ながら、必要であるか又は所望すれば、複数のソーマコア１０２が、何らかの種類のアドレッシング機構又は競合機構を適切に使用等して、同じ信号線１２２及び１２４を介してブロードキャストするのも可能にする。
【００３７】
図２及び図３は、図１Ａ〜図１Ｃの処理アーキテクチャにおける通信の例を示しているが、図２及び図３に様々な変更を行ってもよい。例えば、ハードウェア・アーキテクチャは、適切な数のシナプス・コプロセッサと共に適切な数のソーマコアをサポートすることができる。また、図２及び図３の様々な構成要素を組み合わせ、さらに細分化し、再配列し、又は省略することができ、特定の必要性に応じて追加の構成要素を加えることができる。さらに、ソーマコア１０２同士の間の任意の適切な通信をサポートすることができる。
【００３８】
図４及び図５は、本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的なコプロセッサ機能を示す。特に、図４及び図５は、上述したシナプス・コプロセッサ１１２を実装するための例示的な機構を示す。これらの例示的な実装形態は単に例示に過ぎず、他の方法でシナプス・コプロセッサ１１２を実装し得ることに留意されたい。
【００３９】
図４に示されるように、ｊ番目のソーマコア１０２のシナプス・コプロセッサ１１２は、上述した計算ユニット１１３を使用して実装することができる。計算ユニット１１３は、ｉ番目のソーマコア１０２から受け取った受け入れ入力データを使用して、１つ又は複数の所望の計算を行う。次に、計算ユニット１１３は、得られた出力データをｊ番目のソーマコア１０２に関連する減算器１１５に出力する。減算器１１５は、ｊ番目のソーマコア１０２に関連する複数のシナプス・コプロセッサ１１２の複数の計算ユニット１１３からの出力を処理し、結果をｊ番目のソーマコア１０２に提供する。
【００４０】
図４の計算ユニット１１３によって実行される動作（演算）は、プログラム（φ）４０２を使用して規定又は制御することができ、プログラム４０２は、１つ又は複数のパラメータ４０４を使用して動作する。プログラム４０２及びパラメータ４０４（複数可）は、メモリ装置１１４又は他の場所（複数可）内に格納することができる。１つ又は複数のパラメータ４０４は、シナプス・コプロセッサ１１２によって、関連するソーマコア１０２によって、又は任意の他の適切な方法で設定又は制御することができる。計算ユニット１１３によって実行され得る演算の例は、値を加算、減算、又は乗算すること；ソーマコア１０２に関連する全てのシナプス・コプロセッサ１１２に亘って一定値を生成すること；シナプス・コプロセッサ１１２の識別子を出力すること；テスト値に基づいて複数の値のうちの１つを選択すること；値の符号又は平方根の逆数を計算すること；を含むことができる。
【００４１】
図５に示されるように、ハードウェア・アーキテクチャ内で実行される複数の動作（演算）又は動作（演算）のセットが存在し得る。「チャネル識別子」の値は、シナプス・コプロセッサ１１２によって使用され、複数の選択可能なプログラム（φ）５０２のうちのどれを、計算ユニット１１３によって入来データに対して実行すべきかを特定することができる。「チャネル識別子」は、どのパラメータ５０４が計算ユニット１１３によって使用され、計算ユニット１１３によって生成された結果を何処に送るかを制御するためにも使用することができる。選択可能なプログラム５０２及びパラメータ５０４は、シナプス・コプロセッサ１１２のメモリ装置１１４又は他の場所（複数可）に格納することができる。
【００４２】
いくつかの実施形態では、計算ユニット１１３及び減算器１１５のそれぞれをパイプライン形式で実装することができ、入来データはスカラー値又は小さな値ベクトルを表すことができる。これらの実施形態では、複数のスカラー値又は少なくとも１つのベクトル値をｉ番目のソーマコア１０２から受け取ることができ、計算ユニット１１３によって１つのプログラム５０２又は異なるプログラム５０２を値に適用して出力値のシーケンスを生成することができる。出力値のシーケンスは、更なる処理のために減算器１１５に提供してもよい。
【００４３】
図４及び図５は、図１Ａ〜図１Ｃの処理アーキテクチャにおけるコプロセッサ機能の例を示しているが、図４及び図５に様々な変更を行ってもよい。例えば、各シナプス・コプロセッサ１１２は、任意の他の規定された又は再構成可能な方法で実装することができる。
【００４４】
図６は、本開示による図１Ａ〜図１Ｃの処理アーキテクチャにおける例示的なプログラム可能なコプロセッサ及び縮小（reduction）機能を示す。特に、図６は、上述したシナプス・コプロセッサ１１２及び減算器１１５のプログラミングを制御する例示的な機構を示す。
【００４５】
図６に示されるように、減算器１１５は、ソーマコア１０２に関連する複数のシナプス・コプロセッサ１１２から出力データを受け取るように構成される。次に、減算器１１５は、シナプス・コプロセッサ１１２からの出力を使用して、（Ψによって特定される）少なくとも１つの演算を実行して、関連するソーマコア１０２に提供される少なくとも１つの結果を生成する。減縮器１１５によって実行される１つ又は複数の計算は、複数のシナプス・コプロセッサ１１２からの出力を使用して実行される任意の適切な演算を含むことができる。いくつかの実施形態では、減算器１１５は、ハードウェア・アーキテクチャ内の様々な機能をサポートする１つ又は複数の命令シーケンスを実行することができる。例えば、関連するソーマコア１０２のコプロセッサ１１２から並列にデータを受け取った後に、減算器１１５は、受け取ったデータに対してプログラム可能な演算を実行し、結果を関連するソーマコア１０２に出力することができる。例示的な演算は、全てのシナプス・コプロセッサ１１２からの出力を合計又は乗算すること；シナプス・コプロセッサ１１２からの出力の最小値又は最大値を特定すること；又は特定のシナプス・コプロセッサの値を出力として選択すること；を含むことができる。
【００４６】
シナプス・コプロセッサ１１２によって実行される１つ又は複数のプログラム（φ）を格納するために、メモリ装置６０２をこの構造で使用することができる。メモリ装置６０２を使用して、減算器によって実行される１つ又は複数のプログラム（Ψ）を格納することができる。メモリ装置６０２は、１つ又は複数のメモリ１０６，１１４，１１７の一部等の、任意の適切な揮発性又は不揮発性の記憶及び検索装置を表す。
【００４７】
図６は、図１Ａ〜図１Ｃの処理アーキテクチャにおけるプログラム可能なコプロセッサ及び縮小機能の一例を示しているが、図６に様々な変更を行ってもよい。例えば、ハードウェア・アーキテクチャは、適切な数のシナプス・コプロセッサ及び減算器と共に任意の適切な数のソーマコアをサポートすることができる。また、図６の様々な構成要素を組み合わせ、さらに細分化し、再配列し、又は省略することができ、特定の必要性に応じて追加の構成要素を加えることができる。
【００４８】
図７及び図８は、本開示による多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示す。図７に示されるように、コンピュータシステム７００は、少なくとも１つのプロセッサ７０２、少なくとも１つの記憶装置７０４、少なくとも１つの通信ユニット７０６、及び少なくとも１つの入出力（I/O）ユニット７０８を含む。
【００４９】
プロセッサ７０２は、上述したソーマコア１０２、シナプス・コプロセッサ１１２、減算器１１５、及び信号線１２２及び１２４を組み込んだ集積回路チップを表すことができる。プロセッサ７０２は、メモリ装置７１０内にロードされ、次に、ソーマコア１０２、シナプス・コプロセッサ１１２、及び減算器１１５のレジスタ又は他のメモリ内にロードされる命令等の命令を実行する。プロセッサ７０２は、任意の適切な数のソーマコア１０２、シナプス・コプロセッサ１１２、減算器１１５、及び信号線１２２及び１２４を含むことができる。
【００５０】
メモリ装置７１０及び永続的なストレージ７１２は、記憶装置７０４の例であり、これらは、情報（一時的又は永久的に記憶されるデータ、プログラムコード、及び／又は他の適切な情報等）を格納及び容易に検索することができる任意の構造を表す。メモリ装置７１０は、ランダムアクセスメモリ又は任意の他の適切な揮発性又は不揮発性ストレージ装置を表してもよい。永続的なストレージ７１２は、読出し専用メモリ、ハードドライブ、フラッシュメモリ、又は光ディスク等、データの長期記憶をサポートする１つ又は複数のコンポーネント又は装置を含んでもよい。
【００５１】
通信ユニット７０６は、他のシステム又は装置との通信をサポートする。例えば、通信ユニット７０６は、有線ネットワーク又は無線ネットワークを介した通信を容易にするネットワークインタフェースカード又は無線トランシーバを含むことができる。通信ユニット７０６は、任意の適切な物理的又は無線通信リンク（複数可）を介した通信をサポートすることができる。
【００５２】
Ｉ／Ｏユニット７０８によって、データの入出力が可能になる。例えば、Ｉ／Ｏユニット７０８は、キーボード、マウス、キーパッド、タッチスクリーン、又は他の適切な入力装置を介したユーザ入力のための接続を提供することができる。また、Ｉ／Ｏユニット７０８は、ディスプレイ、プリンタ、又は他の適切な出力装置に出力を送信することもできる。
【００５３】
必要又は所望の場合に、図１Ａ〜図１Ｃに示されるハードウェア・アーキテクチャの複数のインスタンスを、一緒に結合し、且つ使用可能なソーマコア１０２の数を拡張するために使用することができる。例えば、複数の集積回路チップは、所望数のソーマコア１０２を提供するために互いに通信可能に結合することができる。この例が図８に示されており、マルチプロセッサ装置８００は、プロセッサ７０２としてコンピュータシステム７００において又は他のコンピュータシステムにおいて使用することができる。ここで、マルチプロセッサ装置８００は、少なくとも１つの高速接続によって結合された少なくとも２つのプロセッサを含む。この例では、４つのプロセッサ８０２〜８０８が４つの高速接続８１０によってリング状に結合されているが、他の適切な数及び配置のプロセッサ及び高速接続を使用することもできる。
【００５４】
各高速接続８１０は、図１Ａ〜図１Ｃに示されるハードウェア・アーキテクチャの複数のインスタンスを結合するための任意の適切な通信経路（複数可）をサポートすることができる。例えば、各高速接続８１０は、高速接続８１０がハードウェア・インスタンスの信号線１２２及び／又は１２４の間の信号の伝達をサポートするように、ハードウェア・アーキテクチャの各インスタンスの第３のレベル１２０に通信可能に接続することができる。各高速接続８１０は、複数の集積回路チップ同士の間等の、ハードウェア・インスタンス同士の間で信号を伝達するための任意の適切な構造を含む。
【００５５】
種々のタイプの高速接続８１０を使用して、マルチプロセッサ・アーキテクチャをサポートすることができる。例えば、各高速接続８１０は、２つの集積回路チップ同士の間のフォトニック（photonic）接続を使用して実装することができる。別の例として、集積回路チップ自体が「キルト（quilt）」パッケージングをサポートすることができ、各集積回路チップは、少なくとも１つの側面に沿って電気接続を含み、集積回路チップは、異なるチップ上の電気接続が互いに接触するように取り付けられる。しかしながら、任意の他の又は追加の高速接続８１０を使用してもよいことに留意されたい。
【００５６】
図７及び図８は、多目的の並列処理アーキテクチャを使用する例示的なコンピュータシステムを示しているが、図７及び図８に様々な変更を行ってもよい。例えば、図１Ａ〜図１Ｃに示されるハードウェア・アーキテクチャは、任意の適切な機能を実行するために他の適切なシステムで使用してもよい。
【００５７】
図９は、本開示による多目的の並列処理アーキテクチャを使用して高度な処理機能をサポートする例示的な方法９００を示す。説明を容易にするために、方法９００は、図１Ａ〜図１Ｃに示されるハードウェア・アーキテクチャに関して説明する。しかしながら、方法９００は、任意の他の適切なハードウェア・アーキテクチャと共に使用することができる。
【００５８】
図９に示されるように、演算処理は、ステップ９０２において複数の並列処理コアを使用して実行される。これは、例えば、多種多様な計算のいずれかを行う命令を実行するソーマコア１０２を１つ又は複数のプロセッサ内に含むことができる。演算処理は、ＳＩＭＤソーマコア１０２によって実行される簡単な演算から、フルプロセッサ・ソーマコア１０２によって実行される複雑な演算まで表すことができる。図９に示される動作は、演算の依存性のために順番に実行できることに留意されたい。同じ演算の複数の独立したチェーンを同時に実行することができ、通信及びシナプス／減算器の動作は、上述したようにチャネルアドレス指定を使用して並列に実行することができる。
【００５９】
ステップ９０４において、各処理コアからの処理結果が他の処理コアに公開される。これは、例えば、各ソーマコア１０２が、その処理結果を信号線１２２及び１２４を介して各ソーマコア１０２の１つのシナプス・コプロセッサ１１２に提供することを含む。いくつかの実施形態では、これにより、各ソーマコア１０２が全てのソーマコア１０２から処理結果を受け取るためのシナプス・コプロセッサ１１２が得られる。
【００６０】
各処理コアについて、処理コアからの処理結果が、ステップ９０６において処理され、ステップ９０８において低減される。これは、例えば、各ソーマコア１０２に関連するシナプス・コプロセッサ１１２が、全てのソーマコア１０２からの処理結果に対していくつかタイプの処理を実行することを含む。シナプス・コプロセッサ１１２の計算ユニット１１３によって実行される演算の種類の具体例を以下に説明する。これは、各ソーマコア１０２がそのソーマコア１０２についてのシナプス・コプロセッサ１１２の出力を処理するための減算器１１５も含むことができる。減算器１１５によって実行される演算の種類の具体例を以下に説明する。シナプス・コプロセッサ１１２及び減算器１１５によって実行される演算は、制御され、且つ異なるプログラムのφ及びΨが異なるデータチャネルに使用される場合等に、変化し得ることに留意されたい。
【００６１】
低減された結果は、ステップ９１０において処理コアに提供される。これは、例えば、それら関連するソーマコア１０２に出力を提供する減算器１１５を含むことができる。この時点で、方法９００は、処理コアが演算処理の更なる実行中に減らされた結果を使用するように繰り返すことができる。あるいはまた、方法９００は終了し、後で新しいデータを用いて繰り返すことができる。
【００６２】
図９は、多目的の並列処理アーキテクチャを使用して高度な処理機能をサポートする方法９００の一例を示しているが、図９に様々な変更を行ってもよい。例えば、一連のステップとして示されているが、図９の様々なステップは、重なり合うか、並行して発生するか、異なる順序で発生するか、又は何回も発生する可能性がある。
【００６３】
上述した実施形態のいくつかでは、各ソーマコア１０２は、そのシナプス・コプロセッサ１１２をプログラムして少なくとも１つのプログラムφを実行することができ、入来データが到着すると直ちにプログラム（複数可）φを実行することができる。ソーマコア１０２についての減算器１１５は、そのソーマコア１０２についての全てのシナプス・コプロセッサ１１２からのプログラムφの結果を使用して、少なくとも１つのプログラムΨを実行する。特定の実施形態では、各プログラムφは、ベクトルサイズが固定され及びループが無いという条件で、大抵の場合Ｏ（１）回実行することができ、プログラムΨは、大抵の場合Ｏ（log N）回実行することができる。また、特定の実施形態では、各ソーマコア１０２についてのシナプス・コプロセッサ１１２及び減算器１１５によって実行される集合的処理は、以下のように表すことができ、
【数１】
2018518753.tif 000003
ここで、ｉは、送信側ソーマコア１０２のアイデンティティ（又はソーマコア１０２のアイデンティティ＋ソーマコア１０２のソーマグループ識別子）を表し、Ｎは、ソーマコア１０２の数（又はソーマコア１０２の数×ソーマグループの数）を表す。また、ｊはチャネル識別子を表し、ｐは、シナプス・コプロセッサ１１２で使用される（パラメータ４０２又は５０２等の）１つ又は複数のパラメータ（チャネル特有であってもなくてもよい状態変数又はローカル変数等）を表す。さらに、ｘｉは、ｉ番目のソーマコア１０２の出力を表し、ｙｊは、チャネルｊのソーマコア１０２の結果として減算器１１５によって提供される出力を表す。さらに、φｊ（）は、入来データｘｉ及び場合によってはパラメータｐを使用してシナプス・コプロセッサ１１２によってｊ番目のチャネルに対して実行される関数を表し、Ψ（）は、シナプス・コプロセッサ１１２の出力を使用して減算器１１５によってローカル・ソーマコア１０２に対して実行される関数を表す。
【００６４】
φｊ（）関数の例としては、以下を含む：
【数２】
2018518753.tif 000004
・ｒ＝最大（ｘ，ｃ）
・ｒ＝最小（ｘ，ｃ）
・ｒ＝選択（ｘ，ａ，ｂ）
・ｒ＝インデックス
ここで、ａ，ｂ，ｃ及びｒは、シナプス・コプロセッサ１１２内のレジスタの名前を表すことができ、ｘは、（シナプス・コプロセッサ１１２の別のレジスタを代わりに使用することもできるが）ソーマコア１０２からの入力値を表すことができる。選択動作は、（簡単な非ゼロテスト等を実行して）第１のパラメータの条件をテストし、このテストの結果に基づいて第２のパラメータ又は第３のパラメータのいずれかを返す。インデックス（index）動作は、複数のソーマグループを含む実装に固有のものであり得る。各ソーマグループは、同数のソーマコア１０２を含むことができる。ソーマグループの更なる詳細が以下に提示される。いくつかの実施形態では、シナプス・コプロセッサ１１２によって実装される関数のいずれもループを伴わない。
【００６５】
Ψ（）関数の例としては、以下を含む：
・ｖ＝合計（ｒ［ｉ］）
・ｖ＝最大（ｒ［ｉ］）
・ｖ＝最小（ｒ［ｉ］）
ここで、ｖは、ソーマコア１０２に提供される減算器１１５の出力を表し、ｒ［ｉ］は、減算器１１５がシナプス・コプロセッサ１１２から受け取った入力を表す（同じシナプス・コプロセッサ１１２からの複数の値が複数のソーマグループを含む実装で得られる）。最大及び最小関数の各々は、（ｉ）最大値又は最小値と、（ｉｉ）最大値又は最小値を与えるシナプス・コプロセッサ１１２のインデックス値ｉとの両方を返すことができる。Ψ（）関数の結果は、１つ又は複数のレジスタを使用してソーマコア１０２に利用可能にすることができる。
【００６６】
これらの実施形態では、シナプス・コプロセッサ１１２は、ループで動作し、入力を能動的に検索する（必要な場合には入力を待つ）従来のプログラムではプログラミングできないことがある。代わりに、各チャネルはプログラムφと関連付けることができ、プログラムφは、チャネルにデータが到着したときに実行可能とマークされ、計算リソースが利用可能になったときに最終的に実行される。全てのシナプス・コプロセッサのプログラムφが終了すると、縮小プログラムΨの結果を計算することができる。縮小プログラムΨによる計算結果は、最小数のシナプス・コプロセッサの結果が利用可能になると直ぐに開始することができ、以下で述べるような警告がある。縮小プログラムΨの結果はチャネル毎のレジスタに保存することができる。ソーマコア１０２が縮小結果を読み出す命令を発すると、減算器１１５はそのチャネルに対する次の縮小結果を生成する準備ができている。それまでは、そのチャネルに対する減算器１１５の演算を阻止することができる。
【００６７】
シナプス・コプロセッサ１１２及び減算器１１５におけるレジスタの割当て及びチャネルの割当ては、必要に応じて抽象化（abstracted）することができる。例えば、プログラム仕様におけるこれらのリソースのそれぞれについて絶対指数を参照する代わりに、マルチプログラム実行と同等のものを達成するために割当て機構を使用することができる。例えば、プログラム（φ及びΨプログラムを含む）がロードされた場合に、レジスタファイルの使用可能なレジスタの中から実際に使用するレジスタを選択し、使用可能なチャネルを選択することができる。入来データに基づいてプログラムが呼び出されるため、明示的な同時処理は形成する必要がない。プログラムが終了すると、レジスタ及びチャネルに関して使用したリソースを再び利用可能にすることができる。シナプス・コプロセッサ１１２及び減算器１１５によって実行される実際の命令は、このことについて知る必要はない。むしろ、アップロードされたプログラムコードの命令は、絶対的レジスタ数又はインデックスを使用することができ、抽象化は、ソーマコア１０２によるプログラムロードの前に、プログラムの必要性及び利用可能なリソースに基づいて適切なコード生成又は再書込みによって高いレベルで行われる。
【００６８】
最小数のシナプス・コプロセッサの結果が得られると直ぐに開始する縮小プログラムΨによる計算結果に対して注意する一例は、以下の通りである。演算及び場合によってはデータタイプに応じて、ハードウェア・アーキテクチャは、指定された順序の動作（演算）に従わないことによって、再現性を犠牲にしてプログラムΨの実行を大幅に高速化できるモードをサポートすることができる。例えば、浮動小数点演算は、打消し（cancellation）の可能性のために結合規則（associativity
rules）に従わない。これの具体的な例は、浮動小数点加算を同じ順序で実行して毎回全く同じ結果を保証する必要がある場合である。これにより、ある入力値がまだ利用可能でないが、操作（演算）の順序の後の方で他の入力値が利用可能となる場合に、減速が生じる可能性がある。減算器１１５は、操作順序が常に維持される（減速をもたらす）ように入力値を待つ、又は減算器１１５が合計を順不同で実行する（結果をより迅速に得ることができるが、再現性が低い可能性がある）ようにプログラムすることができる。
【００６９】
上記のように、ハードウェア・アーキテクチャの実装は、複数のソーマコア・グループ１０２を含むことができる。そのような手法は、ソーマグループを単一の集積回路に実装することができ、又は異なるソーマグループを別個の集積回路として実装することができる（集積回路は、電気的又は光学的接続等を用いて一緒に結合することができる）。データセット全体がソーマコア１０２にマッピングされ得るならば、いくつかのタイプのプログラム（以下でより詳細に議論されるものを含む）は、このタイプのハードウェア・アーキテクチャを用いて大幅にスピードアップすることができる。
【００７０】
複数のソーマグループを用いる解決策を容易にするために、各シナプス・コプロセッサ１１２の通信相手の数に依存して、いくつかのリソース及び動作を複製してもよい。例えば、簡単なモデルでは、各シナプス・コプロセッサ１１２は、正確に１つのソーマコア１１２からの結果を受け取ることができる。複数のソーマグループを用いる解決策では、各シナプス・コプロセッサ１１２は、ソーマグループ毎に１つのソーマコア１０２から結果を受け取ることができる。シナプス・コプロセッサプログラムでは、データ転送に関連するリソース（送信されるデータを保持するレジスタや結果を保持するレジスタ等）が複製される場合に、単一のソーマグループを用いる実装と同様に表現できる。従って、シナプス・コプロセッサのレジスタ毎にＳ個の複製がある場合には、Ｓ個のソーマグループまで動作するように単一のプロセッサを実装することができる。ソーマグループ毎のパラメータを有効にするには、データのソースであるソーマグループ番号へのアクセスを提供することが有用又は必要となり得る。これは、特定の通信に使用されるソーマコア・インデックスに加えてソーマグループ番号を返す上述したインデックス操作を使用して達成できる。
【００７１】
複数のソーマグループの実装は、物理的に分離される場合に、フォトニクス又は他の高速相互接続を使用して複数の集積回路を結合する等、任意の適切な方法で達成することができる。各ソーマコア１０２がその結果を専用バスに書き込む場合に、各ソーマグループ内の異なるソーマコア１０２のそれぞれのバスを接続することができ、この接続は、各バスを１：Ｎ通信バスからＳ：Ｎバスに変化させる。これは、例えば、送信されるデータが最も一般的な形式［ソーマグループＩＤ、ソーマＩＤ、チャネルＩＤ］等のようにフルアドレスを持つ場合に許容することができ、各ソーマグループ内の各ソーマコア１０２上のシナプス・コプロセッサ１１２がデータを受け取ることが保証される限り、データをソーマグループ毎に経路指定することを可能にする。
【００７２】
さらに、信号線１２２及び１２４を使用してソーマコア１０２をシナプス・コプロセッサ１１２に結合するために使用されるネットワークを実装するために多数の可能な手法が存在する。例えば、上述したように、Ｎ個の独立したネットワークのそれぞれは、Ｎ個のソーマコア１０２のうちの１つをソースとして有することができ、そのソーマコア１０２をＮ個のシナプス・コプロセッサ１１２（各ソーマコア１０２の１つ）に接続する。各ソーマコア１０２の各出力に対する専用ネットワークが、データ転送における起こり得る競合を最小限に抑えるが、送信が発生していないときにリソースが使えなくなることを意味する。理想的には、ソーマコア１０２の全てがロックステップで動作し、ほぼ同時にデータを送信し、これは、専用の信号線でのみうまく処理することができる。実際には、ソーマコア１０２は、リソースを待つような実行時の細かい影響や、分岐予測のような異なる動的決定等の様々な要因のため、同期を失う可能性がある。その場合に、送信はまったく同じタイミングでは起こらない。送信されるデータは通常小さいので、ソーマコア１０２を接続するネットワークのうちの１つ（又は少数）を使用することは、著しい減速を生じさせることなく、十分であり、リソースの利用率を改善する。上述したアドレス［ソーマグループＩＤ、ソーマＩＤ、チャネルＩＤ］において、ソーマグループ毎の各ソーマコア１０２がそれ自体の専用ネットワークを有し、そのネットワークを各ソーマコア１０２上のシナプス・コプロセッサ１１２に接続するならば、ソーマＩＤを省くことができる。接続ネットワークの別の実装では、ソーマグループ毎に単一のネットワークを有することができ、全てのデータパッケージには完全なアドレスが付される。
【００７３】
ソーマコア１０２同士の間にネットワークを形成するための様々な方法がある。１つの可能性は、全てのデータパケットを中央の開始点から各受信者（recipient）に送信することである。この開始点から、データパケットを他のソーマグループにも容易に送信できる。この手法の利点には、直接配信、高スループット（異なるターゲットへの送信に競合がない）、及び低遅延が含まれる。１つの欠点は、特にソーマ毎又はソーマのグループ毎に１つのネットワークを用いることによる高いコストである。
【００７４】
別の手法は、ソーマコアの限定されたセット１０２にポイント・ツー・ポイント接続を提供し、受信者にデータパッケージをさらに配信させることである。受信者は、ソーマコア１０２の異なるサブセットに接続することができ、これらのサブセットは、全てのソーマコア１０２が確実に接続されるように選択することができる。理想的には、サブセットは、ネットワークの「直径」を低減又は最小化するように選択することができ、ここでネットワークの直径は、２つのコア１０２同士の間の最大距離（ターゲットに到達するために通るソーマコア１０２の数）を指す。ソーマコア１０２当たりの接続数に固定した上限が与えられると、その範囲（degree）の超立方体アーキテクチャは直径を最小にすることができる。
【００７５】
全てのソーマコア１０２が、可能な限り多くの個々の接続を介して確実にデータを受け取り且つ送信を拡散させるために、様々な手法を用いることができる。例えば、周知のアルゴリズムは、送信側ソーマコア１０２のインデックスと、送信側ソーマコア１０２からデータを受け取ったリンクとを考慮に入れることができる。そのような場合に、各ソーマコア１０２からのデータは固定パターンで送信することができるが、そのパターンは個々のソーマコア１０２に対して異なってもよく、接続の利用率を最大化する。この手法は、各ソーマコア１０２が選択された隣接コアと単に通信することができ、必要に応じて隣接コアがデータを転送することができるので、各ネットワークの中央の開始位置を除去することができる。ネットワーク内の１つ又は複数のソーマコア１０２は、他のソーマグループにデータを送信する役割を担い、異なるソーマコア１０２は、異なるソーマグループとの通信を担うことができる。
【００７６】
動的アルゴリズムも使用することができる。例えば、受け取られた全てのパケットは、１つのソーマコア１０２から（ソーマコア１０２がパケットを送信することを除いて）全ての隣接コアに転送することができる。次に、隣接する各ソーマコア１０２は、そのパケットを既に見たかどうかを追跡し続けることができる。そうであれば（パケットを見たならば）、パケットは単に破棄することができる。そうでなければ（パケットを見ていないならば）、隣接するソーマコア１０２のシナプス・コプロセッサ１１２は、パケットを受け取って転送する。この手法の１つの利点は、ネットワークをより迅速に完全に充たす（flooded）ことができることである。この手法のもう１つの利点は、複数のソーマグループを設計に組み込むことが容易なことである。１：Ｎバスアーキテクチャ（送信側の競合をチェックする必要がない）をＳ：Ｎアーキテクチャに変更することは大きな進歩になり得る。あるソーマグループのソーマコア１０２が別のソーマグループ内の別のソーマコア１０２にパケットを転送する場合に、後者（別のソーマコア１０２）は、そのパケットを他の入来パケットと見なすのと同様に、そのパケットを見なすことができる。実際には、ソーマコア間のリンクは、通常のソーマ内のソーマグループ内の接続のように見なすことができる。
【００７７】
上記のように、シナプス・コプロセッサ１１２及び減算器１１５の使用を容易にするために、複数の新しい命令を使用することができる。これらの命令は、ソーマコア１０２によって実行される命令だけでなく、シナプス・コプロセッサ１１２及び減算器１１５に提供されシナプス・コプロセッサ１１２及び減算器１１５によって実行される命令も含む。以下に、新しいハードウェア・アーキテクチャをサポートするために使用される新しい命令のタイプの例を示す。以下に具体的な命令が記載されているが、必要又は所望に応じて、ハードウェア・アーキテクチャにおいて他の又は追加の命令をサポートすることができることに留意されたい。
【００７８】
表１は、ソーマコア１０２及びシナプス・コプロセッサによって実行され得る例示的な命令を示す。表１において、“ｏｒｅｇ”は（メモリ装置１０６内等の）ソーマコアのレジスタを示し、“ｙｒｅｇ”は（メモリ装置１１４内等の）シナプス・コプロセッサのレジスタを示す。
【表１】
2018518753.tif 000005
【００７９】
表２は、減算器１１５によって実行され得る例示的な演算を示す。縮小演算は対数的に多くのサイクルを要する可能性があるため、縮小演算は、異なるツリーレベルで複数のそのような動作をパイプライン化することにより、利益を得る。
【表２】
2018518753.tif 000006
【００８０】
いくつかの実施形態では、各シナプス・コプロセッサ１１２は、ＳＩＭＤ処理を実行することができる。各ソーマコア１０２は、特定のチャネル上のデータ通信に先立ち、そのチャネルの命令のシーケンスをローカルシナプス・コプロセッサ１１２にアップロードすることができる。さらに、各ソーマコア１０２は、そのチャネルについての命令シーケンスをその全てのシナプス・コプロセッサ１１２にブロードキャストすることによりアップロードすることができる。ソーマコア１０２は、必要な入力データが利用可能になると、実行すべき演算を減算器１１５にさらにプログラムすることができる。表３は、実行するためにシナプス・コプロセッサ１１２にアップロードすることができる命令のタイプの例を示す。
【表３】
2018518753.tif 000007
【００８１】
上述したハードウェア・アーキテクチャは、機械学習、科学計算、ビデオゲーム、及び他の分野における広範囲のアルゴリズムを高速化する（accelerated）ことができる。上記の命令のタイプに基づいて、この特許文書に記載されているハードウェア・アーキテクチャを使用して６つの例示的なタイプの問題をどのように高速化して解決できるかを以下に説明する。
【００８２】
第１の例として、提案されるアーキテクチャによって高速化され得るディープ・ラーニングに使用される１つのアルゴリズムはスパース・コーディング（sparse coding）である。最も単純な形式では、スパース・コーディングは、
【数３】
2018518753.tif 000008
で正規化された入力ベクトルｘであり、以下で規定されるエネルギーｅを最小にする正規化されたスパース出力ベクトルｙを計算する。
【数４】
2018518753.tif 000009
ここで、Ｆは因子行列であり、
【数５】
2018518753.tif 000010
である。また、
【数６】
2018518753.tif 000011
は、ｙのエントリー（entries）の絶対値の和を表し、λは、出力の疎らさ（sparseness）を制御する定数である。監督されていない学習モードでは、因子行列Ｆは、一組のトレーニング入力ｘｉに亘ってエネルギーｅｉの和Ｅを最小にするように選択される。両方の最小化を達成する１つの方法は最急降下法（gradient
descent）であり、負の勾配は以下のように規定される。
【数７】
2018518753.tif 000012
その後に制約
【数８】
2018518753.tif 000013
が課される。ここで、ｓｇｎ  ｙはｙのエントリの符号のベクトルを表す。
【００８３】
（ｙ−Ｆｘ）を計算するために、トレーニング入力ｘ及び出力ｙは、共有された仮想又はローカルソーマメモリに存在することができる。（疎ではない）因子行列Ｆのエントリは、シナプス・コプロセッサ１１２のレジスタに存在することができる。具体的には、因子行列ＦのエントリＦｊｋは、ｊ番目のソーマコアについてのｋ番目のシナプス・コプロセッサ１１２のレジスタに存在することができる。ソーマコア１０２によってそれらのシナプス・コプロセッサ１１２にブロードキャストされるＳＩＭＤ命令は、ソーマコア１０２を横切ると同時に、ｋ番目のソーマコア１０２が入力エントリｘｋをｊ番目のソーマコア１０２のｋ番目のシナプス・コプロセッサ１１２にブロードキャストすることができるように、相対アドレス指定を使用することができる。ＳＩＭＤ形式のｊ番目のソーマコア１０２のｋ番目のシナプス・コプロセッサは、乗算Ｆｊｋｘｋを実行し、次に、そのソーマコアのシナプス・コプロセッサ１１２を横切るｊ番目のソーマコア１０２の減算器１１５によって対数時間で合計され、（Ｆｘ）ｊ、従ってｊ番目のエントリ（ｙ−Ｆｘ）ｊを得る。
【００８４】
Ｆの勾配降下を計算するために、エントリＦｊｋが（ｙ−Ｆｘ）ｊｘｋに比例して増分されろ。ｊ番目のソーマコア１０２は単に計算済みの（ｙ−Ｆｘ）ｊを有し、そのｋ番目のシナプス・コプロセッサ１１２は、直近のｘｋ値を受け取り、その値をシナプス・コプロセッサ１１２のレジスタに格納する。こうして、ｊ番目のソーマコア１０２は、（ｙ−Ｆｘ）ｊをｋ番目のシナプス・コプロセッサ１１２にブロードキャストし、次にＳＩＭＤ形式でその結果を格納されたｘｋ値で乗算し、その値の倍数をそのシナプス・コプロセッサ１１２に格納されたＦｊｋ値に加算する。
【００８５】
これを擬似コードで表現するために、ソーマコア１０２は複数命令複数データ列方式（MIMD）コアであるので、命令が置かれるソーマコア１０２のインデックスをｉとする慣例が採用される。ＭＩＭＤのため、命令はｉによってパラメータ化してもよい。対照的に、シナプス・コプロセッサ１１２はＳＩＭＤコアであり得るので、ソーマコア１０２は、同じ命令シーケンスをそのシナプス・コプロセッサ１１２の全てにブロードキャストすることができる。明確にするために、レジスタは、レジスタ番号の代わりに変数名でラベル付けされる。これらの慣例を前提とすると、ディープ・ラーニング問題のスパース・コーディングは、次のようにハードウェア・アーキテクチャを使用して解決できる。
【数９】
2018518753.tif 000014
【００８６】
第２の例として、提案されるアーキテクチャによって高速化されるディープ・ラーニングに使用される別のアルゴリズムは、制限されたボルツマン・マシンを必要とする。このタイプのネットワークでは、｛−１，１｝の値を有する入力ベクトルｘ及び出力ベクトルｙは、以下のようにボルツマン分布によって確率論的に関連付けることができる。
Ｐ（ｘ，ｙ）＝ｅ−Ｅ（ｘ，ｙ）／Ｚ                        （５）
ここで、Ｚは分配関数であり、最も簡単な形式のエネルギーｅ（ｘ，ｙ）は以下のように表すことができる。
【数１０】
2018518753.tif 000015
このネットワークは、入力が与えられると、出力が条件付きで独立している（その逆もある）という意味で「制限されている。」また。これは、入力が与えられると、出力は、以下のように表される確率で独立してサンプリングされることを意味する。
【数１１】
2018518753.tif 000016
ここで、σ（χ）はロジスティック関数である。このネットワークの監督されていないトレーニング・アルゴリズムの対比的発散は、以下のような結合Ｆの勾配をとる。
【数１２】
2018518753.tif 000017
ここで、ｘｉはトレーニング入力であり、ｙは上述したようにｘからサンプリングされ、ｘ’はｙ’からサンプリングされ、ｙ’はｘ’からサンプリングされる。
【００８７】
この課題を満たすために、トレーニング入力ｘｋ及び出力ｙｊは、共有された仮想又はローカルソーマメモリに存在することができる。結合Ｆｊｋは、シナプス・コプロセッサ１１２のレジスタに存在することができる。具体的には、各結合Ｆｊｋは、ｊ番目のソーマコア１０２のｋ番目のシナプス・コプロセッサ１１２のレジスタに存在することができる。このアルゴリズムがどのように高速化されるかを説明するために、サンプリングステップについて最初に説明する。ソーマコア１０２を横切ると同時にＳＩＭＤ通信を介して入力ベクトルｘが与えられると、ｋ番目のソーマコア１０２は、入力エントリｘｋをｊ番目のソーマコア１０２のｋ番目のシナプス・コプロセッサ１１２にブロードキャストする。次に、ｊ番目のソーマコア１０２のｋ番目のシナプス・コプロセッサ１１２は、ＳＩＭＤ形式で、乗算Ｆｊｋｘｋを実行し、その後、そのソーマコアのシナプス・コプロセッサ１１２を横切るｊ番目のソーマコア１０２の減算器１１５によって対数時間で合計され、
【数１３】
2018518753.tif 000018
を得る。次に、ｊ番目のソーマコア１０２は、この合計のロジスティック関数を計算し、これを確率として使用して、｛−１，１｝からｙｊをランダムにサンプリングする。
【００８８】
次に、勾配の計算が行われる。トレーニング入力ｘで開始して、上述したようなサンプリングステップを３回行い、ｊ番目のソーマコア１０２内のｙ、ｋ番目のソーマコア１０２内のｘ’、ｊ番目のソーマコア１０２内のｙ’を得る。ｊ番目のソーマコア１０２は、ｙｊ及び（ｙ’）ｊをレジスタに格納するべくその全てのすべてのシナプス・コプロセッサ１１２にブロードキャストする。次に、高帯域幅通信を使用して、（ｘ’）ｋをｋ番目のソーマコア１０２から全てのソーマコア１０２のｋ番目のシナプス・コプロセッサ１１２に同時に送信する。最後に、ｊ番目のソーマコア１０２のｋ番目のシナプス・コプロセッサ１１２は、（ｙ’）ｊ（ｘ’）ｋ−ｙｊｘｋを計算し、この倍数を（それが保持する）値Ｆｊｋから減算する。
【００８９】
擬似コードでは、順方向サンプリングアルゴリズムは、以下のように表すことができる：
【数１４】
2018518753.tif 000019
逆方向サンプリングは類似している可能性がある。サンプリングが与えられると、勾配アルゴリズムは以下のように表される：
【数１５】
2018518753.tif 000020
【００９０】
第３の例として、より良好な通信から利益を得ることができる異なる機械学習方法は、階層的クラスタリングである。最も単純な階層的クラスタリング方法は、それ自体のクラスタ内の各項目から開始する。次に、各階層レベルにおいて、階層的クラスタリング方法は、最小距離だけ分離された２つのクラスタを単一のクラスタにグループ化する。
【００９１】
改良された階層的クラスタリング方法の第１のステップは、クラスタ同士の間の距離の初期行列を計算することを含む。各アクティブなソーマコア１０２はクラスタを表すことができ、そのシナプス・コプロセッサ１１２は、２乗距離を他のクラスタに格納することができる。最初の反復では、各クラスタは単一の項目であるので、アクティブな各ソーマコア１０２は、その項目の座標を他のソーマコア１０２の対応するシナプス・コプロセッサ１１２にブロードキャストし、そのシナプス・コプロセッサ１１２は、それ自体の項目に対する他の項目の２乗距離を計算する。改良された階層的クラスタリング方法の第２のステップは、クラスタ同士の間の最小２乗距離を求めることを含む。（その減算器１１５によって）各ソーマコア１０２は、最小値演算を使用してそれ自体のシナプス・コプロセッサの２乗距離を減少させ、各ソーマコア１０２はこの数値を全てのソーマコア１０２にブロードキャストし、各ソーマコアは（それら減算器１１５によって）最小値演算を用いてその値を再び減少させる。第２の最小値演算は、等しい値（例えば、シナプスコアの最も低いインデックスの値を選択する等）の場合に予測可能なタイブレーカーがあると仮定して、全てのソーマコア１０２に対して同じ結果を生成する。別の方法は、１つのソーマコア１０２に対して第２の最小値演算を実行し、その結果を他の全てのソーマコア１０２にブロードキャストし直すことである。
【００９２】
改良された階層的クラスタリング方法の第３のステップは、この最小距離だけ分離された２つのクラスタを見つけることを含む。最良のクラスタに対応するソーマコア１０２は、それ自体以外のソーマコア１０２に対する最小距離を計算し、この次に最良のクラスタを全てのソーマコア１０２にブロードキャストし直す。改良された階層的クラスタリング方法の第４のステップは、選択した２つのクラスタを１つのクラスタに統合することを含む。各ソーマコア１０２は、最良のクラスタ及び次に最良のクラスタへの距離のうちの最小値を取って、この最小距離を最良のクラスタに対応するシナプス・コプロセッサ１１２に再び記憶し、このソーマコアのチャネル上でその最小距離をブロードキャストする。次に、最良のクラスタに対応するソーマコア１０２は、そのシナプス・コプロセッサ１１２の全てについて、それらの距離をこれらのブロードキャストされたものに置き換える。最後に、次に最良のソーマコア１０２及びその対応するシナプス・コプロセッサ１１２が計算から抜ける。次に、第２〜第４のステップは、単一のクラスタのみが存在するまで繰り返される。
【００９３】
擬似コードでは、（各座標について繰り返す）２乗距離行列を計算する第１のステップは、以下のように表すことができる：
【数１６】
2018518753.tif 000021
（x is the
local cluster’s coordinate:  ｘはローカルクラスタの座標である）
【００９４】
クラスタ同士の間の最小距離を求める第２のステップは、以下のように表すことができる：
【数１７】
2018518753.tif 000022
【００９５】
最小距離だけ分離された２つのクラスタを見つける第３のステップは、以下のように表すことができる：
【数１８】
2018518753.tif 000023
【００９６】
最も近い２つのクラスタを結合する（及びそれら２つのクラスタのうちの１つを非アクティブ化する）第４のステップは、以下のように表すことができる：
【数１９】
2018518753.tif 000024
【００９７】
第４の例として、他の一般的な機械学習方法は、多数の変数の複雑な結合確率関数を、少数の変数のみ（ネットワークの入次数（in-degree）まで）を含む条件付き確率の積に分解するベイジアンネットワークを含む。問題は、各変数の周辺分布を計算することである。標準的なシリアル・アーキテクチャでは、これは、以下の式に比例する回数（time）をとる確率伝播アルゴリズムを使用して実行することができる：
変数×入次数×２入次数                        （９）
このアルゴリズムは、上記の数の積を反復計算し、次に、２入次数のそのような積それぞれの変数×入次数の合計を計算する。
【００９８】
新しいハードウェア・アーキテクチャを使用して、これは、適切なソーマコア１０２及びシナプス・コプロセッサ１１２が存在する限り、一定の回数内に達成することができる。任意のソーマコア１０２へのファンインは、２入次数のみであるので、これは通信を飽和させない。積を計算するために、ログ（logs）の合計（指数（exp）及び対数（log）演算がソーマコア１０２で実行される場合）を累積するか、又は減算器１１５の利用可能な累積方法を拡張して、積だけでなく合計も含むことができる。
【００９９】
第５の例として、アーキテクチャで高速化され得る人工知能と無関係な他のアプリケーションには、分子シミュレーション及び仮想現実が含まれる。これらのアプリケーションでは、シナプス・コプロセッサ１１２が、乗算及び加算に加えて平方根の逆数
【数２０】
2018518753.tif 000025
演算のためのハードウェアを有すると仮定する。両方のアプリケーションで高価なステップは似ている。分子シミュレーションに注目すると、それは、以下に式のようなクーロンポテンシャルの計算である：
【数２１】
2018518753.tif 000026
ここで、ｑｊはｊ番目の電荷であり、ｒｊｋはｊ番目とｋ番目の電荷の間の距離である。高帯域幅通信は、ｋ番目の電荷の座標をｋ番目のソーマコア１０２からｊ番目のソーマコア１０２のｋ番目のシナプス・コプロセッサに全てのｊ及びｋに亘って同時にブロードキャストするように処理する。各シナプス・コプロセッサ１１２において、加算及び乗算を用いて、ｒｊｋ２を計算し、次に平方根の逆数を用いて、１／ｒｊｋを計算する。最後に、その合計は、そのシナプス・コプロセッサ１１２を横切る累算器（減算器１１５）を使用してｊ番目のソーマコア１０２によって計算される。
【０１００】
第６の例として、提案されるアーキテクチャによって２次時間（quadric time）から一定時間まで加速され得る別のクラスのアルゴリズムは、凸包アルゴリズム等の幾何学アルゴリズムを必要とする。これらのアルゴリズムは、提案されるアーキテクチャの非線形特性を必要とせず、提案されるアーキテクチャの行列処理能力にのみ依存することができる。これらのアルゴリズムの高次での重要なステップの１つは、動的行列式計算であることが示されている。この計算は、行列−ベクトル乗算によって２次時間で連続的に達成することができる。しかしながら、これらの乗算は、提案されるアーキテクチャを使用して一定時間に減少させることができる。
【０１０１】
これらの例は、この特許文書に記載されたハードウェア・アーキテクチャを使用して特定の問題に対する特定の解決策によってどの様に解決できるかを示すためだけに提供されたものであることに留意されたい。当然ながら、ハードウェア・アーキテクチャを使用して他の機能を実行することもできる。さらに、上述した特定の問題は、ハードウェア・アーキテクチャを使用して実装された他の解決策を使用して解決することができる。
【０１０２】
この特許文書に記載されたハードウェア・アーキテクチャ及び関連する命令／動作（演算）は、実装に応じて、従来の手法よりも様々な利点を提供することができる。例えば、本開示は、（適切な数の構成要素で実装される場合に）アーキテクチャがヒトの脳の能力に匹敵するのを可能にするハードウェア・アーキテクチャを提供する。さらに、ハードウェア・アーキテクチャの機能を使用して、人工知能、ディープ・ラーニング、分子シミュレーション、仮想現実等の他の分野のコンピュータ処理を改善することができる。
【０１０３】
いくつかの実施形態では、この特許文書に記載される様々な機能は、コンピュータ可読プログラムコードから形成され、及びコンピュータ可読媒体に組み込まれたコンピュータプログラムによって実装又はサポートされる。「コンピュータ可読プログラムコード」という語句は、ソースコード、オブジェクトコード、及び実行可能コードを含むあらゆるタイプのコンピュータコードを含む。「コンピュータ可読媒体」という語句は、読取り専用メモリ（ROM）、ランダムアクセスメモリ（RAM）、ハードディスクドライブ、コンパクトディスク（CD）、デジタルビデオディスク（DVD）、又は他のタイプのメモリ等の、コンピュータによってアクセス可能なあらゆるタイプの媒体を含む。「非一時的な」コンピュータ可読媒体は、一時的な電気信号又は他の信号を伝送する有線、無線、光、又は他の通信リンクを除外する。非一時的なコンピュータ可読媒体は、データを永続的に格納することができる媒体と、書き換え可能な光ディスク又は消去可能なメモリ装置等の、データを保存し後で上書きすることができる媒体とを含む。
【０１０４】
この特許文書を通して使用される特定の用語及び語句の規定を述べることは有益であり得る。「アプリケーション」及び「プログラム」という用語は、１つ又は複数のコンピュータプログラム、ソフトウェアコンポーネント、命令セット、プロシージャ、機能、オブジェクト、クラス、インスタンス、関連データ、又は適切なコンピュータコード（ソースコード、オブジェクトコード、又は実行可能コードを含む）で実装するように構成されたものの一部を指す。用語「通信する」及びその派生語は、直接的な通信と間接的な通信との両方を包含する。「含む、有する（include）」及び「備える、有する、含む（comprise）」という用語及びその派生語は、限定されない包含を意味する。「又は」という用語は、包括的であり、及び／又はを意味する。「関連する、関連付けられる」という語句及びその派生語は、〜を含む、〜内に含まれる、〜と相互作用する、〜を包含する、〜内に包含される、〜に又は〜と接続する、〜に又は〜と結合する、〜と通信可能である、〜と協働する、〜を挟む、〜と並置する、〜に近接する、〜に又は〜と結合される、〜を有する、〜の性質を有する、或いは〜への又は〜との関係を有する等を意味し得る。語句「少なくとも１つ」は、項目のリストとともに使用される場合に、列挙された項目の１つ又は複数の異なる組合せを使用してもよく、リストの１つの項目のみを必要としてもよいことを意味する。例えば、「Ａ，Ｂ，Ｃの少なくとも１つ」には、Ａ、Ｂ、Ｃ、Ａ及びＢ、Ａ及びＣ、Ｂ及びＣ、並びにＡ及びＢ及びＣの組合せが含まれる。
【０１０５】
この特許文書の記載は、特定の要素、ステップ、又は機能が特許請求の範囲に含めなければならない必須又は重要な要素であることを暗示するものとして理解すべきではない。また、請求項のいずれも、特定の請求項において、機能を特定する分詞句の後に「〜のための手段」又は「〜のステップ」用語が明示的に使用されている場合を除いて、添付の請求項又は請求項の要素のいずれかに関して、米国特許法第１１２条（ｆ）を行使することを意図する。特許請求の範囲内の「機構」、「モジュール」、「装置」、「ユニット」、「構成要素」、「要素」、「部材」、「機器」、「機械」、「システム」、「プロセッサ」、「処理装置」又は「コントローラ」等（これらに限定されない）の用語の使用は、特許請求の範囲自体の特徴によってさらに修正又は改良されたものとして理解され、当業者に知られている構造を指すものと理解され且つ意図しており、米国特許法第１１２条（ｆ）を行使することを意図していない。
【０１０６】
本開示は特定の実施形態及び一般的に関連する方法を記載しているが、これらの実施形態及び方法の改変及び置換は当業者には明らかであろう。従って、例示的な実施形態の上記説明は、本開示を規定又は制限しない。以下の請求項によって規定されるように、本開示の精神及び範囲から逸脱することなく、他の変更、置換、及び改変も可能である。
【図１Ａ】
2018518753.tif 000030
【図１Ｂ】
2018518753.tif 000031
【図１Ｃ】
2018518753.tif 000032
【図２】
2018518753.tif 000033
【図３】
2018518753.tif 000034
【図４】
2018518753.tif 000035
【図５】
2018518753.tif 000036
【図６】
2018518753.tif 000037
【図７】
2018518753.tif 000038
【図８】
2018518753.tif 000039
【図９】
2018518753.tif 000040
【国際調査報告】
2018518753.tif 000041