(57)【要約】【課題】複数のタイルと、タイル間の相互接続とを含む処理システムを提供する。【解決手段】処理システムにおいて、相互接続は、バルク同期並列方式に従ってタイルの一部又はすべての群間で通信するために使用され、群内の各タイルは、オンタイルの計算段階とそれに続くタイル間交換段階を実行するとともに、群内のすべてのタイルが計算段階を完了するまで交換段階は制止される。群内の各タイルは、計算段階が完了するとローカル終了状態になる。命令セットは、相互接続内のロジックへの同期要求を通知するために、その計算段階の完了時に各タイルによって実行される同期命令を含む。群内のすべてのタイルからの同期要求を受信したことに応答して、ロジックは次の交換段階を解除し、群内のすべてのタイルの集合状態を利用可能にする。【選択図】図１１
2019079528.tif 000002
【特許請求の範囲】
【請求項１】
タイルの配列及び前記タイル間の通信のための相互接続を備える処理システムであって、
各タイルは、機械コード命令を実行するための実行ユニットを備え、それぞれが前記プロセッサの命令セットにおける命令タイプの定義済みセットのインスタンスであり、前記命令セット内の各命令タイプは、対応するオペコードと、０個以上のオペランドを取り込むための０個以上のオペランドフィールドとによって定義され、
前記相互接続は、バルク同期並列方式に従って前記タイルの一部又はすべての群間の通信を行うように動作可能であり、
前記群内の前記タイルそれぞれは、オンタイルの計算段階とそれに続くタイル間交換段階を実行するとともに、前記群内のすべての前記タイルが前記計算段階を完了するまで前記交換段階が制止され、前記群内の各タイルは、前記計算段階の完了時にローカル終了状態を有しており、
前記命令セットは、その計算段階の完了時に前記群内の各タイルによる実行のための同期命令を含み、前記同期命令の実行は、前記実行ユニットに同期要求を前記相互接続内のハードウェアロジックに送信させ、
前記相互接続内の前記ロジックは、前記ローカル終了状態をグローバル終了状態に集合させるように構成され、前記群内のすべての前記タイルからの前記同期要求を受信することによって示されるように、前記群内のすべての前記タイルによる前記計算段階の完了に応答して、前記群内の前記タイルの各々上のグローバル終了状態レジスタに前記グローバル終了状態を記憶し、それにより、前記群内の前記タイルの各々上で実行されているコードの一部によって前記グローバル終了状態をアクセス可能にする処理システム。
【請求項２】
各タイル上の前記実行ユニットは、前記同期命令の実行に応答して命令発行を一時停止するように構成され、前記相互接続グループ内の前記ロジックは、前記群内のすべての前記タイルから前記同期要求を受信することに応答して、前記命令発行を再開するために前記群内の前記タイルの各々に同期肯定応答信号を返送するように構成されている、請求項１に記載の処理システム。
【請求項３】
前記ローカル終了状態及び前記グローバル終了状態の各々は、単一ビットである、請求項１又は２に記載の処理システム。
【請求項４】
前記集合体は、前記ローカル終了状態のブールＡＮＤ、又は前記ローカル終了状態のブールＯＲからなる、請求項３に記載の処理システム。
【請求項５】
前記集合された終了状態は、前記ローカル終了状態がすべて真であるか、すべて偽であるか、又は混合されているかを示す、３値を表す少なくとも２ビットからなる、請求項１又は２に記載の処理システム。
【請求項６】
前記タイル群の各々は、前記タイルの前記ローカル終了状態を表すように配列されたローカル終了状態レジスタを備える、請求項１〜５のいずれか１項に記載の処理システム。
【請求項７】
前記群内の各タイルは、
複数のコンテキストレジスタセットであって、各々が複数のスレッドのうちの個別の１つのプログラム状態を記憶するように配列された各コンテキストレジスタセットと、
インターリーブされたタイムスロットの反復シーケンスにおいて、複数のタイムスロットの各々で複数のワーカースレッドの個別の１つの実行をスケジュールするように配列されたスケジューラであって、前記ワーカースレッドの各々の前記プログラム状態が前記コンテキストレジスタセットの個別の１つに記憶されるスケジューラと、を備え、
前記バルク同期並列方式に従って、前記群内のすべての前記タイル上で全ての前記ワーカースレッドが前記計算段階を完了するまで前記交換段階は制止され、
各タイル上の前記ローカル終了状態は、前記タイル上の前記ワーカースレッドの各々によって出力された個々の終了状態の集合体であり、
前記コードの一部は、前記タイル上の複数のスレッドの少なくとも１つを含む、請求項１〜６のいずれか１項に記載の処理システム。
【請求項８】
前記群内の各タイルは、前記ローカル終了状態への前記個々の終了状態の前記集合体を実行するように構成されたハードウェアロジックを含む、請求項７に記載の処理システム。
【請求項９】
前記命令セットは、前記ワーカースレッドの各々に含めるための終了命令を含み、前記実行ユニットは、個別の前記ワーカースレッドの個々の前記終了状態を出力し、前記終了命令の前記オペコードに応答して個別の前記ワーカースレッドを終了させるように構成されている、請求項８に記載の処理システム。
【請求項１０】
個々の前記終了状態及び前記ローカル終了状態の各々は単一ビットであり、個々の前記終了状態の前記集合体は、個々の前記終了状態のブールＡＮＤ又は個々の前記終了状態のブールＯＲである、請求項７〜９のいずれか１項に記載の処理システム。
【請求項１１】
前記ローカル終了状態は、個々の前記終了状態がすべて真であるか、すべて偽であるか、又は混合されているかを示す３値を表す少なくとも２ビットを含む、請求項７〜９のいずれか１項に記載の処理システム。
【請求項１２】
前記交換段階は、前記ワーカースレッドとは別個のスーパーバイザスレッドによって実行されるように配列され、前記少なくとも１つのスレッドは、前記スーパーバイザスレッドを含む、請求項７〜１１のいずれか１項に記載の処理システム。
【請求項１３】
前記命令発行の前記一時停止は、前記同期肯定応答を保留している前記スーパーバイザスレッドからの命令の発行を少なくとも一時停止することを含む、請求項２に従属するときの請求項１２に記載の処理システム。
【請求項１４】
各タイル上の前記コンテキストレジスタセットは、前記複数のワーカースレッドの個別の１つの前記プログラム状態を表すように配列された複数のワーカーコンテキストレジスタセットと、前記スーパーバイザスレッドのプログラム状態を表すように配列されたレジスタの追加セットからなる追加スーパーバイザコンテキストレジスタセットとを備える、請求項１２又は１３に記載の処理システム。
【請求項１５】
前記スーパーバイザスレッドは、前記タイムスロットの各々において実行することによって開始するように配置され、
前記命令セットは、放棄命令をさらに含み、前記実行ユニットは、前記放棄命令の前記オペコードに応答して、前記放棄命令が実行された前記タイムスロットを個別の前記ワーカースレッドに放棄するように構成され、そして、
前記終了命令は、前記終了命令が実行された個別の前記タイムスロットを前記スーパーバイザスレッドに戻して、前記スーパーバイザスレッドが個別の前記スロットで実行を再開する、請求項１４に記載の処理システム。
【請求項１６】
前記コードでプログラムされたシステムであり、前記コードの一部は、有効となった前記グローバル終了状態を使用して、前記グローバル終了状態に依存する分岐判定を実行するように構成され、請求項１〜１５のいずれか１項に記載の処理システム。
【請求項１７】
グラフの各ノードが１つ以上の個別の入力エッジと１つ以上の個別の出力エッジとを有するとともに、前記ノードのうちの少なくともいくつかの前記入力エッジは、前記ノードのうちの少なくともいくつかの前記出力エッジである機械知能アルゴリズムを実行するようにプログラムされており、各ノードは、その出力エッジをその入力エッジに関連付ける個別の関数からなるとともに、各個別の関数は１つ以上の個別のパラメータによってパラメータ化され、個別の前記パラメータの各々は関連付けられたエラーを有していて、前記グラフの一部又はすべてのエラーが小さくなるにつれて前記グラフは解に向かって収束するようになっており、
前記タイルの各々は、前記グラフ内の前記ノードのサブセットを含む個別のサブグラフをモデル化し、前記ローカル終了状態の各々は、個別の前記サブグラフ内の前記ノードの１つ以上の前記パラメータにおける前記エラーが所定状態を満たすかどうかを示すために使用される、請求項１〜１６のいずれか１項に記載の処理システム。
【請求項１８】
前記群は、前記同期命令のオペランドによって少なくとも部分的に選択される、請求項１〜１７のいずれか１項に記載の処理システム。
【請求項１９】
前記同期命令の前記オペランドは、同じ前記チップ上のタイルのみを含むか、又は前記群内の異なるチップ上のタイルを含むかを選択する、請求項１８に記載の処理システム。
【請求項２０】
前記同期命令の前記オペランドは、グルーピングの異なる階層レベルの中から前記群を選択する、請求項１８又は１９に記載の処理システム。
【請求項２１】
前記命令セットは不参加命令をさらに含み、前記不参加命令が実行されたタイルを前記群から脱退させる、請求項１〜２０のいずれか１項に記載の処理システム。
【請求項２２】
タイルの配列と前記タイル間の通信のための相互接続とを含む処理システムを動作させる方法であって、各タイルは、機械コード命令を実行するための実行ユニットを含み、それぞれの命令が前記プロセッサの命令セットにおける命令タイプの所定セットのインスタンスであり、前記命令セット内の各命令タイプは、対応するオペコードと、０個以上のオペランドを取り込むための０個以上のオペランドフィールドとによって定義され、前記方法は、
バルク同期並列方式に従って、前記相互接続を介して前記タイルの一部又はすべての群間で通信を行うことを含み、
前記群内で前記タイルの各々は、オンタイル計算段階を実行した後にタイル間交換段階を実行するとともに、前記群内のすべての前記タイルが前記計算段階を完了するまで前記交換段階は制止され、前記群内の各タイルは、前記計算段階の完了時にローカル終了状態を有しており、
前記命令セットは、その計算段階の完了時に前記群内の各タイルによる実行のための同期命令を含み、前記同期命令の実行は、前記実行ユニットに前記相互接続内のハードウェアロジックへ同期要求を送信させ、
前記方法はさらに、前記群内のすべての前記タイルからの前記同期要求を受信することによって示されるように、前記群内のすべての前記タイルによる前記計算段階の完了に応答して、前記ローカル終了状態をグローバル終了状態に集合させ、前記群内の前記タイルの各々のグローバル終了状態レジスタに前記グローバル終了状態を記憶させるために前記相互接続内の前記ロジックをトリガし、前記群内の前記タイルの各々上で実行されているコードの一部によって前記グローバル終了状態をアクセス可能にすることを含む方法。
【請求項２３】
コンピュータ可読媒体上に具現化され、且つ請求項１〜２１のいずれか１項に記載の前記処理システム上で実行されるように構成されたコードを含むコンピュータプログラムであって、前記コードが、各部分に前記同期命令のインスタンスを含む前記群内の前記タイルの各々上で実行するための部分を含む、コンピュータプログラム製品。 
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、マルチタイル処理配列（array）において複数の異なるタイルのワークロードを同期させることに関し、各タイルは、それ自身の処理ユニット及びメモリからなる。特に、本開示は、群内でタイルのいずれかが交換段階に進むことができる前に、タイル群の各々が計算段階を完了しなければならないバルク同期並列（ＢＳＰ）方式に関する。
【背景技術】
【０００２】
マルチスレッドプロセッサは、互いに並行して複数のプログラムスレッドを実行することができるプロセッサである。プロセッサは、複数の異なるスレッドに共通のいくつかのハードウェア（例えば、共通命令メモリ、データメモリ及び／又は実行ユニット）を備え得るが、マルチスレッドをサポートするために、プロセッサは各スレッドに固有の専用ハードウェアも備えている。
【０００３】
専用ハードウェアは、一度に実行可能なスレッド数の各々に対して少なくとも１つの個別のコンテキストレジスタファイルを備える。「コンテキスト」は、マルチスレッドプロセッサについて言及するとき、互いに並行して実行されるスレッドの個別のプログラム状態（例えば、プログラムカウンタ値、ステータス及び現行のオペランド値）を指す。コンテキストレジスタファイルは、各スレッドにおけるこのプログラム状態を表すためのレジスタの個別の集合を指す。レジスタファイル内のレジスタは汎用メモリとは異なり、レジスタアドレスは命令語のビットとして固定されるが、メモリアドレスは命令を実行することによって計算することができる。所与のコンテキストレジスタは、典型的には、個別のスレッドのための個別のプログラムカウンタと、そのスレッドによって実行される計算中に個別のスレッドに作用して出力されるデータを一時的に保持するためのオペランドレジスタの個別のセットを備える。各コンテキストは、個別のスレッドの状態（例えば、一時停止中であるか実行中であるか）を記憶するために個別のステータスレジスタを有していてもよい。従って、現在実行中のスレッドの各々は、それ自身の個別のプログラムカウンタと、任意にオペランドレジスタ及びステータスレジスタとを有している。
【０００４】
マルチスレッドの１つの可能な形態は並列処理である。すなわち、複数のコンテキストと同様に、複数の実行パイプライン、すなわち並列に実行されるべき命令の各ストリームのために別の実行パイプラインが提供される。しかし、これにはハードウェアの点で多量の重複を必要とする。
【０００５】
その代わりに、マルチスレッドプロセッサの別の形態では、並列処理ではなく同時処理を用いて、スレッドが共通実行パイプライン（又は少なくともパイプラインの共通部分）を共有し、異なるスレッドはこの同じ共有実行パイプラインを介してインターリーブされる。マルチスレッドプロセッサのパフォーマンスは、パイプラインレイテンシを隠す機会が増えるため、同時処理がない場合、あるいは、並列処理に比べてさらに改善され得る。また、このアプローチでは、複数の実行パイプラインを備えた完全並列プロセッサとして各スレッド専用のハードウェアを余分に必要とせず、従って、沢山の余分なシリコンを必要としない。
【０００６】
並列処理の一形態は、同じチップ（すなわち、同じダイ）上に複数のタイルを配置し、各タイルはそれ自身の個別の処理ユニットとメモリ（プログラムメモリとデータメモリを含む）を備えるプロセッサによって達成することができる。従って、プログラムコードの別の部分は、タイルの異なる部分上で並列に実行することができる。タイルは、タイル間で通信するために異なるタイル上でコード実行を可能にするオンチップ相互接続を介して相互に接続される。場合によっては、各タイル上の処理ユニットは、それ自身がタイル上で複数の同時スレッドを実行し、同じパイプラインを介して同じタイル上で複数のスレッドのインターリーブをサポートするために、上述したように各タイルはそれ自身の個別のコンテキストのセット及び対応するパイプラインを有する。
【０００７】
一般に、異なるタイル上で動作するプログラムの部分間には依存関係が存在することがある。従って、そのコードが依存しているデータに先んじて実行されているあるタイル上のあるコードが、他のタイル上の別のコードによって利用可能にされるのを防ぐ技術が必要となる。これを達成するための多くの可能なスキームが存在するが、ここで対象とするスキームは「バルク同期並列（ＢＳＰ）」として知られている。ＢＳＰによれば、各タイルは交互サイクルで計算段階と交換段階を実行する。計算段階では、各タイルは１つ以上の計算タスクをタイル上でローカルに実行するが、その計算結果をタイルの他のものと通信しない。交換段階では、各タイルは、前の計算段階からの計算の１つ以上の結果を群内の１つ以上の他のタイルに交換することが許可されるが、次の計算段階には進まない。さらに、ＢＳＰの原理によれば、バリア同期は、計算段階から交換段階へ、又は交換段階から計算段階へ、又はその両方へと遷移する時点に置かれる。すなわち、（ａ）群内のいずれかが次の交換段階に進むことが許可される前に、全てのタイルがそれぞれの計算段階を完了する必要があるか、（ｂ）群内のいずれかのタイルが次の計算段階に進むことが許可される前に、群内の全てのタイルがそれぞれの交換段階を完了する必要があるか、（ｃ）これらの両方である。いくつかのシナリオでは、計算を実行するタイルは、群内の他のタイルとの通信を伴わない限り、ネットワークカード又はストレージディスクなどの他のシステムリソースと通信することを許可されてもよい。
【０００８】
マルチスレッド及び／又はマルチタイル処理の使用例は、機械知能に見られる。機械知能の当業者によく知られているように、機械知能アルゴリズムは、複数の相互接続されたノードのグラフによって表すことができる「知識モデル」に対して反復的な更新を行うことに基づいている。各ノードは、その入力の関数を表す。いくつかのノードはグラフへの入力を受け取り、あるものは１つ以上の他のノードからの入力を受信する一方、いくつかのノードの出力は他のノードの入力を形成し、いくつかのノードの出力はグラフの出力を提供する（そして、場合によっては、与えられたノードは、これらの全て、すなわちグラフへの入力、グラフからの出力及び他のノードへの接続を有することさえある）。さらに、各ノードにおける機能は、１つ又は複数の個別のパラメータ、例えば、重みなど１つ又は複数のパラメータによってパラメータ化される。学習段階では、一連の経験的入力データに基づいて、グラフ全体が可能な入力の範囲に対して所望の出力を生成するように、様々なパラメータの値を見つけることが目的である。確率的勾配降下法に基づくエラー逆伝搬法など、これを行うための様々なアルゴリズムが当技術分野で知られている。入力データに基づく複数の反復にわたって、パラメータは徐々にそれらのエラーを減少させるように調整され、アウトカムとしてグラフは解に向かって収束する。次に後段では、学習されたモデルを使用して、入力の指定されたセットが与えられた出力の予測を行い、あるいは、出力の指定されたセットが与えられた入力（原因）についての推論を行うことができる。
【０００９】
各ノードの実装はデータの処理を含み、グラフの相互接続はノード間で交換されるデータに対応する。典型的には、各ノード処理の少なくともいくつかは、グラフ内でノードのいくつか又は全てと独立して実行することが可能であり、従って、大きなグラフは、同時処理及び／又は並列処理の卓越した機会を顕在化する。
【発明の概要】
【発明が解決しようとする課題】
【００１０】
以下では、機械知能アプリケーションに関連する計算において生じる問題に対処するために開発されたアーキテクチャを有するプロセッサのコンポーネントについて説明する。本明細書で説明するプロセッサは、ワーク（work）アクセラレータとして使用することができ、すなわち、ホストコンピュータ上で動作するアプリケーションからワークロード（workload）を受け取る。ワークロードは、一般に、処理されるべき非常に大きなデータセット（知識モデルを学習するために機械知能アルゴリズムによって使用される大規模な経験データセット、又は以前に学習された知識モデルを使用して予測又は推論を実行するデータのような）の形態を呈している。本明細書に提示されたアーキテクチャの目的は、これらの膨大なデータを非常に効率的に処理することである。プロセッサアーキテクチャは、機械知能に関わる作業負荷を処理するために開発されてきた。それにもかかわらず、開示されたアーキテクチャは、同様の特性を共有する他のワークロードにも適していることは明らかであろう。
【００１１】
複数のタイルにわたってプログラムの異なる部分を実行する場合、複数のタイルを共通の実行点に持っていく（bring）ためにバリア同期を実行する必要がある。また、すべてのタイルが計算フェーズを完了した後に、全体としてプログラムの状態を特定する、例えば、例外をホストに報告する必要があるかどうかを特定し、プログラムの次の部分に分岐するか、又は現行部分を反復し続けるかを特定するのが望ましい。例えば、タイル群の各々が機械知能グラフの個別のサブグラフの計算を実行している場合、サブグラフのノードが、グラフが解に向かって収束していることを示す一定の条件を満たすかどうかを特定することが望ましい場合がある。既存の技術を用いてそのような特定を行うには、汎用命令を使用してプログラムされた多数のステップが必要となる。
【００１２】
ここでは、プロセッサの命令セットを、機械学習などの大規模なマルチスレッド可能なアプリケーションに適合させることが望ましいであろうことが認識される。本開示によれば、これは、群内のすべてのタイルが現在のＢＳＰ計算段階を完了した後にのみ、タイル群の結果を検証するための専用マシンコード命令を提供することによって達成される。これにより、タイルを同期させると同時に、レイテンシが小さく、コード密度が低い複数のスレッドの全体的なアウトカムを特定する能力を提供できる。
【課題を解決するための手段】
【００１３】
本明細書で開示される１つの態様によれば、タイルの配列及びタイル間の通信のための相互接続を備える処理システムであって、ここで、
各タイルは、機械コード命令を実行するための実行ユニットを備え、それぞれがプロセッサの命令セットにおける命令タイプの定義済みセットのインスタンスであり、前記命令セット内の各命令タイプは、対応するオペコードと、０個以上のオペランドを取り入れるための０個以上のオペランドフィールドとによって定義され、
前記相互接続は、バルク同期並列方式に従って前記タイルの一部又はすべての群間の通信を行うように動作可能であり、前記群内の各タイルは、オンタイルの計算段階とそれに続くタイル間交換段階を実行するとともに、前記群内のすべてのタイルが計算段階を完了するまで交換段階は制止され、前記群内の各タイルは、計算段階の完了時にローカル終了状態を有しており、
前記命令セットは、その計算段階の完了時に前記群内の各タイルによる実行のための同期命令を含み、前記同期命令の実行は、前記実行ユニットに同期要求を前記相互接続内のハードウェアロジックに送信させ、
前記相互接続内のロジックは、前記ローカル終了状態をグローバル終了状態に集合させるように構成され、前記群内のすべてのタイルからの同期要求を受信することによって示されるように、前記群内のすべてのタイルによる計算段階の完了に応答して、前記群内のタイルの各々上のグローバル終了状態レジスタにグローバル終了状態を記憶し、それにより、前記群内のタイルの各々上で実行されているコードの一部によってグローバル終了状態をアクセス可能にする処理システムが提供される。
【００１４】
本明細書で開示される別の態様によれば、タイルの配列及びタイル間で通信するための相互接続を備える処理システムが提供される。ここで、
各タイルは、機械コード命令を実行するためのそれぞれの実行ユニットを備え、それぞれがプロセッサの命令セットにおける命令タイプの所定のセットのインスタンスであり、命令セット内の各命令タイプは、対応するオペコードと、０個以上のオペランドを受け取るための０個以上のオペランドフィールドとによって定義され、
前記相互接続は、前記タイルの一部又はすべての群間を調整するための専用ハードウェアロジックの形態をした同期ロジックを含み、
前記命令セットは同期命令を含み、各固別なタイル上の固別な実行ユニットは、前記同期命令のインスタンスが個別の実行ユニットを介して実行される場合には、同期命令のオペコードに応答して、個別のタイルから相互接続内の同期ロジックに同期要求のインスタンスを送信させ、前記同期ロジックから受信された同期肯定応答を保留している個別のタイル上の命令発行を一時中断するように構成され、
各タイルは、個別の計算段階の完了時にタイルのローカル終了状態を記憶するためのローカル終了状態レジスタを有し、
同期ロジックは、前記群内のタイルのローカル終了状態をグローバル終了状態に集合するように構成され、
同期論理はさらに、前記群のすべてのタイルから同期要求のインスタンスを受信することに応答して、同期肯定（acknowledgement）応答を群内の各タイルに返送し、それにより、命令発行を再開させることができ、そして、群内の各タイル上でグローバル終了状態レジスタにグローバル終了状態を記憶し、群内の各タイル上で実行されているコードの一部によってグローバル終了状態へアクセス可能にするように構成される。
【００１５】
実施形態では、各タイル上の実行ユニットは、同期命令の実行に応答して命令発行を一時停止するように構成してもよく、相互接続グループ内のロジックは、群内のすべてのタイルから同期要求を受信することに応答して、命令発行を再開するために群内のタイルの各々に同期肯定応答信号を返送するように構成してもよい。
【００１６】
実施形態では、ローカル終了状態及びグローバル終了状態の各々は、単一ビットであってもよい。
【００１７】
実施形態では、集合体は、ローカル終了状態のブールＡＮＤ、又はローカル終了状態のブールＯＲからなっていてもよい。
【００１８】
代替の実施形態では、集合された終了状態は、ローカル終了状態がすべて真であるか、すべて偽であるか、又は混合されているかを示す、３値を表す少なくとも２ビットからなっていてもよい。実施形態では、集合された終了状態は、個々のバイナリ終了状態が全て１であるか、全て０であるか又は混合されているかを示す、３値を表す少なくとも２ビットを含んでいてもよい。
【００１９】
実施形態では、前記タイル群の各々は、タイルのローカル終了状態を表すように配列されたローカル終了状態レジスタを備えていてもよい。
【００２０】
実施形態では、群内の各タイルは、
複数のコンテキストレジスタセットであって、各々が複数のスレッドのうちの個別の１つのプログラム状態を記憶するように配列された各コンテキストレジスタセットと、
インターリーブされたタイムスロットの反復シーケンスにおいて、複数のタイムスロットの各々で複数のワーカースレッドの個別の１つの実行をスケジュールするように配列されたスケジューラであって、前記ワーカースレッドの各々の前記プログラム状態が前記コンテキストレジスタセットの個別の１つに記憶されるスケジューラと、を備え、
前記バルク同期並列スキームに従って、群内のすべてのタイル上で全てのワーカースレッドが計算段階を完了するまで交換段階は制止され、
各タイル上のローカル終了状態は、タイル上のワーカースレッドの各々によって出力された個々の終了状態の集合体であってもよく、そして、
前記コードの一部は、タイル上で複数のスレッドの少なくとも１つを含んでもよい。
【００２１】
実施形態では、群内の各タイルは、ローカル終了状態への個々の終了状態の前記集合体を実行するように構成されたハードウェアロジックを含んでいてもよい。
【００２２】
実施形態では、命令セットは、ワーカースレッドの各々に含めるための終了命令を含んでいてもよく、実行ユニットは、個別のワーカースレッドの個々の終了状態を出力し、終了命令のオペコードに応答して個別のワーカースレッドを終了させるように構成してもよい。
【００２３】
実施形態では、個々の終了状態及びローカル終了状態の各々は単一ビットであってもよく、個々の終了状態の集合体は、個々の終了状態のブールＡＮＤ又は個々の終了状態のブールＯＲであってもよい。
【００２４】
実施形態では、ローカル終了状態は、３値を表す少なくとも２ビットからなり、個々の終了状態がすべて真であるか、すべて偽であるか、又は混合されているかを示してもよい。
【００２５】
実施形態では、交換段階は、ワーカースレッドとは別個のスーパーバイザスレッドによって実行されるように配列されてもよく、前記少なくとも１つのスレッドは、スーパーバイザスレッドから構成されていてもよい。
【００２６】
実施形態では、命令発行の一時停止は、同期肯定応答を保留しているスーパーバイザスレッドからの命令の発行を少なくとも一時停止することを含んでいてもよい。
【００２７】
実施形態では、各タイル上のコンテキストレジスタセットは、前記複数のワーカースレッドの個別の１つのプログラム状態を表すように配列された複数のワーカーコンテキストレジスタセットと、スーパーバイザスレッドのプログラム状態を表すように配列されたレジスタの追加セットからなる追加スーパーバイザコンテキストレジスタセットとを備える。
【００２８】
実施形態では、
スーパーバイザスレッドは、前記タイムスロットの各々において実行することにより開始するように配列してもよく、
命令セットは、放棄命令をさらに含み、実行ユニットは、放棄命令のオペコードに応答して、放棄命令が実行されたタイムスロットを個別のワーカースレッドに放棄するように構成され、そして、
終了命令は、終了命令が実行された個別のタイムスロットをスーパーバイザスレッドに戻して、スーパーバイザスレッドが個別のスロットで実行を再開するようにしてもよい。
【００２９】
実施形態では、コードの一部は、有効となったグローバル終了状態を使用して、グローバル終了状態に依存する分岐判定を実行するように構成されてもよい。
【００３０】
実施形態では、処理システムは、グラフの各ノードが１つ以上の個別の入力エッジと１つ以上の個別の出力エッジとを有するとともに、ノードのうちの少なくともいくつかの入力エッジは、ノードのうちの少なくともいくつかの出力エッジである機械知能アルゴリズムを実行するようにプログラムされてもよく、各ノードは、その出力エッジをその入力エッジに関連付ける個別の関数からなるとともに、各個別の関数は１つ以上の個別のパラメータによってパラメータ化され、個別のパラメータの各々は関連付けられたエラーを有していて、グラフの一部又はすべてのエラーが小さくなるにつれてグラフは解に向かって収束するようになっており、タイルの各々は、グラフ内のノードのサブセットを含む個別のサブグラフをモデル化し、ローカル終了状態の各々は、個別のサブグラフ内のノードの１つ以上のパラメータにおけるエラーが所定状態を満たすかどうかを示すために使用してもよい。
【００３１】
実施形態では、前記群は、同期命令のオペランドによって少なくとも部分的に選択されてもよい。
【００３２】
実施形態では、同期命令のオペランドは、同じチップ上にタイルのみを含むか、又は前記群内の異なるチップ上のタイルを含むかを選択してもよい。
【００３３】
実施形態では、同期命令のオペランドは、グルーピングの異なる階層レベルの中から前記群を選択してもよい。
【００３４】
実施形態では、命令セットは不参加（abstain）命令をさらに含み、不参加命令が実行されたタイルを前記群から脱退（opt-out）させてもよい。
【００３５】
本明細書で開示される別の態様によれば、タイルの配列と、タイル間で通信するための相互接続とからなる処理システムを動作させる方法が提供される。ここで、各タイルは、機械コード命令を実行するための実行ユニットを含み、それぞれがプロセッサの命令セットにおける命令タイプの所定セットのインスタンスであり、命令セット内の各命令タイプは、対応するオペコードと、０個以上のオペランドを取り込むための０個以上のオペランドフィールドとによって定義され、この方法は、
バルク同期並列方式に従って、相互接続を介してタイルの一部又はすべての群間で通信を行い、それにより、前記群内でタイルの各々はタイル間演算段階を実行し、前記群内の各タイルは、オンタイル計算段階を実行した後にタイル間交換段階を実行するとともに、前記群内のすべてのタイルが計算段階を完了するまで交換段階は制止され、群内の各タイルは、計算段階の完了時にローカル終了状態を有しており、
命令セットは、その計算段階の完了時に群内の各タイルによる実行のための同期命令を含み、同期命令の実行は、実行ユニットに相互接続内のハードウェアロジックへ同期要求を送信させ、そして、この方法は、
バルク同期並列方式に従って、相互接続を介してタイルの一部又はすべての群間で通信を行い、それにより、前記群内でタイルの各々はタイル間演算段階を実行し、前記群内の各タイルは、オンタイル計算段階を実行した後にタイル間交換段階を実行するとともに、前記群内のすべてのタイルが計算段階を完了するまで交換段階を保持し続け、群内の各タイルは、計算段階の完了時にローカル終了状態を有しており、
命令セットは、その計算段階の完了時に群内の各タイルによる実行のための同期命令を含み、同期命令の実行は、実行ユニットに相互接続内のハードウェアロジックへ同期要求を送信させ、そして、
この方法は、群内のすべてのタイルからの同期要求を受信することによって示されるように、群内のすべてのタイルによる計算段階の完了に応答して、ローカル終了状態をグローバル終了状態に集合させ、群内の各タイル上のグローバル終了状態レジスタにグローバル終了状態を記憶するために相互接続内のロジックをトリガし、それにより、群内の各タイル上で実行されているコードの一部によってグローバル終了状態をアクセス可能にすることを含む。
【００３６】
本明細書に開示される別の態様によれば、コンピュータ可読媒体上に具現化され、本明細書で開示される任意の実施形態におけるプロセッサ上で実行されるコードを含むコンピュータプログラム製品が提供され、このコードは、各部分に同期命令のインスタンスを含む群内の各タイル上で実行するための部分を含む。
【図面の簡単な説明】
【００３７】
本開示の理解を支援し、実施形態がどのように実施され得るかを示すために、実施例として添付の図面を参照する。
【００３８】
【図１】マルチスレッド処理ユニットの概略ブロック図である。
【図２】複数のスレッドコンテキストの概略ブロック図である。
【図３】インターリーブされた実行タイムスロットのスキームを概略的に示す。
【図４】スーパーバイザスレッド及び複数のワーカースレッドを概略的に示す。
【図５】マルチスレッドの終了状態を集合するロジックの概略図である。
【図６】同じタイル上におけるワーカースレッド間の同期を概略的に示す。
【図７】多数のタイルを含むプロセッサチップの概略ブロック図である。
【図８】バルク同期並列（ＢＳＰ）計算モデルの概略図である。
【図９】ＢＳＰモデルの別の概略図である。
【図１０】マルチスレッド処理ユニット間におけるＢＳＰの概略図である。
【図１１】相互接続システムの概略ブロック図である。
【図１２】複数の相互接続されたプロセッサチップのシステムの概略図である。
【図１３】多層ＢＳＰスキームの概略図である。
【図１４】マルチプロセッサチップのシステムの別の概略図である。
【図１５】機械知能アルゴリズムで使用されるグラフの概略図である。
【図１６】チップ間の同期化のための例示的な配線を示す。
【発明を実施するための形態】
【００３９】
以下では、バリア同期を実行し、同時に複数のタイルにわたる複数のスレッドの終了状態を終了状態レジスタ内の単一の集合状態に集合する専用命令をその命令セット内に含むプロセッサアーキテクチャについて説明する。この集合終了状態レジスタはすべてのタイルに存在し、集合されたすべてのタイルについて同じ結果を包含する最初に、これを組み込むことができる例示的なプロセッサを、図１〜図４を参照しながら説明する。
【００４０】
図１は、本開示の実施形態によるプロセッサモジュール４の一実施例を示す。例えば、プロセッサモジュール４は、同じチップ上の同様なプロセッサタイル配列の１つのタイルであってもよく、又はそれ自身のチップ上に独立型プロセッサとして実装されてもよい。プロセッサモジュール４は、バレルスレッド処理ユニットの形態をしたマルチスレッド処理ユニット１０と、ローカルメモリ１１（すなわち、マルチタイル配列の場合は同じタイル上の、又はシン群ロセッサチップの場合は同じチップ上の）を備えている。バレルスレッド処理ユニットは、パイプラインの実行時間がインターリーブされたタイムスロットの反復シーケンスに分割され、これらの各々が所与のスレッドによって所有され得るマルチスレッド処理ユニットの一種である。これについては後ほど詳しく説明する。メモリ１１は、命令メモリ１２及びデータメモリ２２（異なるアドレス可能なメモリユニットに、又は同一のアドレス可能なメモリユニットの異なる領域に実装することができる）を備えている。命令メモリ１２は、処理ユニット１０によって実行される機械コードを記憶する一方、データメモリ２２は、実行されたコードによって操作されるべきデータと、実行されたコードによって出力されるデータ（例えば、そのような操作の結果として）の両方を記憶する。
【００４１】
メモリ１２は、プログラムの様々な異なるスレッドを記憶し、各スレッドは、特定のタスクの実行を命令する個別のシーケンスを含む。本明細書で参照される命令は、機械コード命令、すなわち、プロセッサの命令セットにおける基本命令の１つのインスタンスであって、単一のオペコード及び０個以上のオペランドからなるものを意味していることに留意されたい。
【００４２】
本明細書で説明するプログラムは、複数のワーカースレッドと、１つ又は複数のスーパーバイザスレッドとして構成することができる監視サブプログラムとを含む。これらについては後ほど詳しく説明する。実施形態では、ワーカースレッドの一部又はすべての各々は、それぞれ「コードレット（codelet）」の形態をとる。コードレットは特定のタイプのスレッドであり、時には「アトミック」スレッドとも呼ばれている。これはスレッドの開始から（起動時から）実行する必要がある全ての入力情報を有し、すなわち、プログラムの他の部分又は起動後のメモリからの入力を全く取り込まない。さらに、プログラムの他の部分は、スレッドが終了する（完了する）までスレッドのいかなる出力（アウトカム）を使用しないことがある。エラーが発生しない限り、終了することが保証される。但し、いくつかの文献では、コードレットはステートレスであると定義されていて、２回実行すると最初の実行から情報を継承できなかったが、本明細書ではこのような追加の定義は採用していない。また、ワーカースレッドの全てがコードレット（アトミック）である必要はなく、実施形態によっては、ワーカーの一部又は全てが代わりに相互に通信することができることにも留意されたい。
【００４３】
処理ユニット１０内で、命令メモリ１２からの複数の異なるスレッドは、単一の実行パイプライン１３を介してインターリーブされ得る（典型的には、命令メモリに記憶された全スレッドのサブセットのみが、プログラム全体の任意の時点でインターリーブされ得るのであるが）。マルチスレッド処理ユニット１０は、同時に実行される異なるスレッドの状態（コンテキスト）をそれぞれ表すように配列された複数のコンテキストレジスタファイル２６と、同時に実行されるスレッドに共通の共有実行パイプライン１３、インターリーブされた態様で、好ましくはラウンドロビン方式で共有パイプラインを介して実行するための同時スレッドをスケジューリングするためのスケジューラ２４とを備えている。処理ユニット１０は、複数のスレッドに共通の共有命令メモリ１２と、複数のスレッドに同様に共通な共有データメモリ２２とに接続されている。
【００４４】
実行パイプライン１３は、フェッチステージ１４、デコードステージ１６、及び命令セットアーキテクチャによって定義されるような算術及び論理演算、アドレス計算、ロード及びストア演算、及び他の演算を実行する実行ユニットからなる実行ステージ１８を含む。コンテキストレジスタファイル２６の各々は、個別のスレッドのプログラム状態を表すためのレジスタの個別のセットからなっている。
【００４５】
コンテキストレジスタファイル２６の各々を構成するレジスタの一実施例が図２に概略的に示されている。コンテキストレジスタファイル２６の各々は、それぞれのスレッドについて（スレッドが現在実行中の命令アドレスを追跡するため）少なくとも１つのプログラムカウンタ（ＰＣ）からなるそれぞれ１つ以上の制御レジスタ２８を備え、実施形態では各スレッドの現在の状態（例えば、エラーに遭遇したために、現在実行中であるか一時停止中であるかなど）を記録する１つ又は複数のステータスレジスタ（ＳＲ）のセットも備えている。コンテキストレジスタファイル２６の各々はまた、オペランドレジスタ（ＯＰ）３２の個別のセットを備えており、それぞれのスレッドによって実行される命令のオペランド、すなわちオペレーション実行時に、各スレッドの命令のオペコードによって定義されたオペレーションで操作される値又はオペレーションによって生じる値を一時的に保持する。コンテキストレジスタファイル２６の各々は、任意に、それぞれ１つ以上の他のタイプのレジスタ（図示せず）からなっていてもよいことが理解されよう。また、用語「レジスタファイル」は、時には共通アドレス空間内のレジスタの群を言うために使用されるが、必ずしも本開示で当てはまる必要はなく、各ハードウェアコンテキスト２６（コンテキストの各々が各レジスタセット２６を表している）は、より一般的には、１つ又は複数のこのようなレジスタファイルから構成されていてもよい。
【００４６】
詳細は後述するが、開示された構成は、並行して実行可能なＭ個のスレッド（図示の例ではＭ＝３であるが、限定するものではない）のそれぞれについて１つのワーカーコンテキストレジスタファイルＣＸ０・・・ＣＸ（Ｍ−１）と、１つの追加スーパーバイザコンテキストレジスタファイルＣＸＳを有している。ワーカーコンテキストレジスタファイルは、ワーカースレッドのコンテキストを記憶するために別にしてあって、スーパーバイザコンテキストレジスタファイルは、スーパーバイザスレッドのコンテキストを記憶するために別にしてある。実施形態では、スーパーバイザコンテキストは、各ワーカーと異なる数のレジスタを有する点で特別であることに留意されたい。ワーカーコンテキストの各々は、好ましくは、互いに同じ数のステータスレジスタ及びオペランドレジスタを有している。実施形態では、スーパーバイザコンテキストは、ワーカーの各々より少ないオペランドレジスタを有していてもよい。オペランドレジスタの実施例では、ワーカーコンテキストは、スーパーバイザが浮動小数点レジスタ、累算レジスタ、及び／又は専用のウェイトレジスタ（ニューラルネットワークの重みを保持するための）を含まないものである。実施形態では、スーパーバイザは、異なる数のステータスレジスタを有していてもよい。さらに、実施形態では、プロセッサモジュール４の命令セットアーキテクチャは、ワーカースレッド及びスーパーバイザスレッドがいくつかの異なるタイプの命令を実行するが、いくつかの命令タイプを共有するように構成されてもよい。
【００４７】
フェッチステージ１４は、スケジューラ２４の制御の下で、命令メモリ１２から実行すべき命令をフェッチするように接続されている。スケジューラ２４は、フェッチステージ１４を制御して、一組の同時実行スレッドのそれぞれからの命令を、時間スロットの反復シーケンスで順番に取り出し、パイプライン１３のリソースを時間的にインターリーブして複数のタイムスロットに分割するが、これについては後ほど詳しく説明する。例えば、スケジューリング方式は、ラウンドロビン方式又は重み付けラウンドロビン方式とすることができる。このように動作するプロセッサの別の用語はバレルスレッドプロセッサである。
【００４８】
いくつかの実施形態では、スケジューラ２４は、スレッドが一時停止しているかどうかを示す各スレッドの状態レジスタＳＲの１つにアクセスして、スケジューラ２４が実際にフェッチステージ１４を制御して、現在アクティブであるスレッドの命令のみをフェッチするようにする。実施形態では、好ましくは、各タイムスロット（及び対応するコンテキストレジスタファイル）が常に１つのスレッド又は他のスレッドによって所有される、すなわち、各スロットが常にスレッドによって占有され、各スロットは常にスケジューラ２４のシーケンスに含まれる。しかし、任意で所与のスロットを占有するスレッドは、その時点で一時停止してもよいが、この場合、そのスロットにシーケンスが回ってくると、それぞれのスレッドの命令フェッチが渡される。代替的に、あまり好ましくない実施例では、いくつかのスロットは一時的に空いており、スケジュールされたシーケンスから除外することができる。実行ユニットがインターリーブするように動作可能なタイムスロットの数などに関しては、これは、実行ユニットが同時に実行できるスロットの最大数、すなわち実行ユニットのハードウェアがサポートする同時スロットの数を言う。
【００４９】
フェッチステージ１４は、各コンテキストのプログラムカウンタ（ＰＣ）にアクセスする。それぞれのスレッドについて、フェッチステージ１４は、プログラムカウンタによって示されるように、プログラムメモリ１２内の次のアドレスからそのスレッドの次の命令をフェッチする。プログラムカウンタは、分岐命令によって分岐されない限り、各実行サイクルをインクリメントする。その後、フェッチステージ１４はフェッチされた命令をデコードステージ１６に渡してデコードされ、デコードステージ１６はその命令で指定された任意のオペランドレジスタ３２のデコードされたアドレスとともに、デコードされた命令の指示を実行ユニット１８に渡す命令が実行されるようにする。実行ユニット１８は、オペランドレジスタ３２及び制御レジスタ２８へのアクセスを有し、オペランドレジスタ３２及び制御レジスタ２８は、算術命令の場合（例えば、２つのオペランドレジスタ内の値を加算、乗算、減算又は除算し、そのアウトカムをそれぞれのスレッドの別のオペランドレジスタに出力することによって）のように、復号されたレジスタアドレスに基づいて命令を実行する際に使用することができる。あるいは、命令がメモリアクセス（ロード又はストア）を定義する場合、実行ユニット１８のロード／ストアロジックは、その命令に従ってデータメモリからの値を個別のスレッドのオペランドレジスタにロードするか、各スレッドのオペランドレジスタからの値をデータメモリ２２に記憶する。あるいは、命令が分岐又は状態変化を定義する場合、実行ユニットはプログラムカウンタＰＣ又は状態レジスタＳＲの１つの値をそれに応じて変更する。１つのスレッドの命令が実行ユニット１８によって実行されている間に、インターリーブされたシーケンスにおける次のタイムスロットのスレッドからの命令は、デコードステージ１６によってデコードされることが可能であり、及び／又は１つの命令がデコードステージ１６によってデコードされている間に、その次のタイムスロットのスレッドからの命令をフェッチステージ１４によってフェッチすることができる（一般に、本開示の範囲は、タイムスロットごとに１つの命令に限定されないし、例えば、別のシナリオでは、２つ以上の命令のバッチを、タイムスロットごとに所与のスレッドから発することができることもあり得る）。従って、インターリーブは、既知のバレルスレッド処理技術に従って、パイプライン１３のレイテンシを効果的に隠す。
【００５０】
スケジューラ２４によって実行されるインターリーブ方式の実施例が図３に示されている。ここでは、同時スレッドは、ラウンドロビン方式に従ってインターリーブされ、スキームの各ラウンド内で、ラウンドはタイムスロットＳ０、Ｓ１、Ｓ２・・・のシーケンスに分割され、各々が個別のスレッドを実行する。典型的に、各スロットは１プロセッササイクルであり、異なるスロットは均等なサイズであるが、全ての可能な実施形態では必ずしもそうではなく、例えば、重み付けラウンドロビン方式も可能であり、これにより、いくつかのスレッドは、実行ラウンドごとに他のスレッドより多くのサイクルが得られる。一般に、バレルスレッドは、偶数ラウンドロビン又は重み付けラウンドロビンスケジュールのいずれかを使用することができ、後者の場合、重み付けを固定又は適応させてもよい。
【００５１】
実行ラウンドごとのシーケンスが何であれ、このパターンが繰り返され、各ラウンドは各タイムスロットのそれぞれのインスタンスを含む。従って、本明細書で言及されるタイムスロットは、シーケンスの所与の反復におけるタイムスロットの特定の例ではなく、シーケンスにおける反復割り当てされた場所を意味することに留意されたい。別の言い方をすれば、スケジューラ２４は、パイプライン１３の実行サイクルを複数の時間的にインターリーブされた（時分割多重化された）実行チャネルに振り分けるとともに、各々がタイムスロットの反復シーケンスにおける個別のタイムスロットの繰り返しを含む。図示された実施形態では、４つのタイムスロットが存在するが、これは例示のためのものであり、他の数も可能である。例えば、１つの好ましい実施形態では、実際には６つのタイムスロットが存在する。
【００５２】
ラウンドロビン方式で分割されるタイムスロットの数が何であっても、本開示によれば、処理ユニット１０は、タイムスロットが存在する数よりも１つ多いコンテキストレジスタファイル２６を備えていて、インターリーブされたタイムスロットの数よりも１つ多いコンテキストをサポートし、バレルスレッディングが可能である。
【００５３】
これは、図２の実施例として示されており、図３に示すように４つのタイムスロットＳ０・・・Ｓ３がある場合、ここではＣＸ０、ＣＸ１、ＣＸ２、ＣＸ３及びＣＸＳという５つのコンテキストレジスタファイルが存在する。すなわち、バレルスレッド方式の実行時間スロットＳ０・・・Ｓ３が４つしかなく、同時に４つのスレッドしか実行できないとしても、本明細書では、第５のプログラムカウンタ（ＰＣ）と、オペランドレジスタ３２の第５のセットからなり、実施形態では１つ以上のステータスレジスタ（ＳＲ）の第５のセットも含む第５のコンテキストレジスタファイルＣＸＳを追加することが開示されている。上述したように留意されたいが、実施形態では、スーパーバイザコンテキストは他のコンテキストＣＸ０・・・３と異なる場合があり、スーパーバイザスレッドは、実行パイプライン１３を動作させるための命令の異なるセットをサポートすることができる。
【００５４】
第１の４つのコンテキストＣＸ０・・・ＣＸ３の各々は、プログラマが望むアプリケーション固有の計算タスクが何であっても実行するために、４つの実行タイムスロットＳ０・・・Ｓ３のうちの１つに現在割り当てられている複数の「ワーカースレッド」のそれぞれ１つの状態を表すために使用される（これは、命令メモリ１２に記憶されたプログラムのワーカースレッド総数のサブセットでしかないことに今一度留意されたい）。しかし、第５のコンテキストＣＸＳは、特別な機能のために別にしてあり、少なくともスーパーワーカースレッド（ＳＶ）の状態を表すものであって、その役割はワーカースレッドの実行を調整する役割を果たすが、少なくともワーカースレッドＷは、プログラム全体のどの時点でタイムスロットＳ０、Ｓ１、Ｓ２・・・のどれで実行されるかが判定される。任意に、スーパーバイザスレッドは、他の「スーパーバイザ」又は調整責任を有していてもよい。例えば、スーパーバイザスレッドは、特定の実行順序を保証するためにバリア同期を実行する責任を負うことがある。例として、１つ又は複数の第２のスレッドが同じプロセッサモジュール４上で実行される１つ又は複数の第１のスレッドによって出力されるデータに依存する場合、スーパーバイザは、第１のスレッドが終了するまで第２のスレッドのいずれも開始しないようにバリア同期を実行してもよい。そして／又は、スーパーバイザは、別のタイル又はプロセッサチップなどの特定の外部データソースがそのデータを利用可能にするために必要な処理を完了するまで、プロセッサモジュール４上の１つ又は複数のスレッドが開始しないことを保証するためにバリア同期を実行することができる。スーパーバイザスレッドは、複数のワーカースレッドに関する他の機能を実行するためにも使用できる。例えば、スーパーバイザスレッドは、プロセッサモジュール４に対して外的にデータを通信する責任を負ってもよい（１つ以上のスレッドによって作用される外部データを受信し、及び／又は１つ以上のワーカースレッドによって出力されたデータを送信する）。一般に、スーパーバイザスレッドは、プログラマが望むあらゆる種類のスーパーバイザ機能又は調整機能を提供するために使用されてもよい。例えば、別の実施例として、スーパーバイザは、タイルローカルメモリ１２と記憶ディスク又はネットワークカードのようなより広範なシステム（配列６の外部）の１つ又は複数のリソースとの間の転送をスーパーバイズすることができる。
【００５５】
当然のことながら、４つのタイムスロットは一実施例に過ぎず、一般に他の実施形態では、１ラウンドあたり最大Ｍ個のタイムスロット０・・・Ｍ−１が存在する場合、プロセッサモジュール４がＭ＋１コンテキストＣＸ・・・ＣＸ（Ｍ−１）＆ＣＸＳ、つまり任意の時点でインターリーブされ得る各ワーカースレッドためのものと、スーパーバイザのための追加コンテキストから構成されるように、他の数で存在してもよい。例えば、１つの例示的な実施形態では、６つのタイムスロットと７つのコンテキストが存在する。
【００５６】
図４を参照すると、スーパーバイザスレッドＳＶは、インターリーブされたタイムスロットのスキームにおいてそれ自身のタイムスロットを有さない。ワーカースレッドへのスロット割り当てとしてのワーカーも柔軟に定義されない。むしろ、各タイムスロットは、ワーカーコンテキストを記憶するための独自の専用コンテキストレジスタファイル（ＣＸ０・・・ＣＸＭ−１）を有しており、スロットがワーカーに割り当てられたときにワーカーによって使用されるが、スロットがスーパーバイザに割り当てられると使用されない。所与のスロットがスーパーバイザに割り当てられると、そのスロットは代わりにスーパーバイザのコンテキストレジスタファイルＣＸＳを使用する。スーパーバイザは常に独自のコンテキストにアクセスでき、ワーカーはスーパーバイザコンテキストレジスタファイルＣＸＳを占有することはできないことに留意されたい。
【００５７】
スーパーバイザスレッドＳＶは、任意の時間スロットＳ０・・・Ｓ３（又は、より一般的にはＳ０・・・ＳＭ−１）及びこれらの時間スロット全てにおいて実行する能力を有する。スケジューラ２４は、全体としてプログラムが起動すると、全てのタイムスロットにスーパーバイザスレッドを割り当てること、すなわちスーパーバイザＳＶがＳ０・・・Ｓ３の全てで実行を開始するように構成されている。しかし、スーパーバイザスレッドには、後続のあるポイント（１つ又は複数のスーパーバイザタスクを実行する直後又は直後のいずれか）で、実行中のスロットのそれぞれをワーカースレッドのそれぞれの１つに一時的に放棄するメカニズムが提供されるが、例えば、図４に示す実施例では、最初はワーカーＷ０・・・Ｗ３である。これは、スーパーバイザスレッドが本明細書の一実施例として「ＲＵＮ」と呼ばれる放棄命令を実行することによって達成される。実施形態では、この命令は、２つのオペランド（命令メモリ１２内のワーカースレッドのアドレスと、データメモリ２２内のそのワーカースレッド用のいくつかのデータのアドレス）を取る。すなわち、ＲＵＮ  ｔａｓｋ＿ａｄｄｒ，ｄａｔａ＿ａｄｄｒ。
【００５８】
ワーカースレッドは、互いに並行して実行することができるコードの部分であり、それぞれが実行されるべき１つ以上の個別の計算タスクを表す。データアドレスは、ワーカースレッドによって実行されるいくつかのデータを指定してもよい。あるいは、放棄命令はワーカースレッドのアドレスを指定する単一のオペランドのみを取り、データアドレスをワーカースレッドのコードに含めてもよく、あるいは、別の実施例では、単一オペランドが、ワーカースレッド及びデータのアドレスを指定するデータ構造を指し示してもよい。上述したように、実施形態では、ワーカーの少なくとも一部は、コードレットの形態、すなわち同時に実行可能なコードの原子単位をとることができる。代替的に又は追加的に、ワーカーのいくつかはコードレットである必要はなく、代わりに相互に通信することができてもよい。
【００５９】
放棄命令（「ＲＵＮ」）は、スケジューラ２４に対して作用し、この命令自身が実行される現行のタイムスロットを、オペランドによって指定されたワーカースレッドに放棄する。放棄命令では、放棄されるのがこの命令が実行されるタイムスロットであることが暗示されていることに留意されたい（マシンコード命令の文脈において暗黙の意味は、これを指定するためのオペランドを必要としないことを意味するもので、オペコード自身から暗黙的に理解されるものである）。従って、放棄されるタイムスロットは、スーパーバイザが放棄命令を実行するタイムスロットである。別の言い方をすれば、スーパーバイザは、それが放棄するのと同じ空間で実行している。スーパーバイザが「この場所でこのコード部分をrunする」というと、その時点以降、反復スロットは関連するワーカースレッドによって（一時的に）所有される。
【００６０】
スーパーバイザスレッドＳＶは、１つ又は複数のタイムスロットの各々において同様の動作を実行して、そのタイムスロットの一部又はすべてをワーカースレッドＷ０・・・Ｗ３（命令メモリ１２内のより大きな集合Ｗ０・・・Ｗｊから選択された）の異なるそれぞれに放棄する。最後のスロットでそれが実行されると、スーパーバイザは中断される（その後、スロットの１つがワーカーＷによって戻されたとき中断したところから再開する）。
【００６１】
このようにスーパーバイザスレッドＳＶは、インターリーブされた実行時間スロットＳ０・・・Ｓ３の異なるスレッドに、１つ又は複数のタスクを実行する異なるワーカースレッドを割り当てることができる。スーパーバイザスレッドがワーカースレッドを実行する時間であると特定すると、放棄命令（「ＲＵＮ」）を使用して、このワーカーをＲＵＮ命令が実行されたタイムスロットに割り当てる。
【００６２】
いくつかの実施形態では、命令セットはまた、実行命令ＲＵＮＡＬＬ（「全て実行」）の変形を含む。この命令は、複数のワーカーをまとめて起動し、全て同じコードを実行する。実施形態では、これは、処理ユニットのスロットＳ０・・・Ｓ３（又は、より一般的にはＳ０・・・Ｓ（Ｍ−１））の一つ残らずにおいてワーカーを立ち上げる。
【００６３】
さらに、いくつかの実施形態では、ＲＵＮ及び／又はＲＵＮＡＬＬ命令はまた、これが実行されると、１つ又は複数のスーパーバイザステータスレジスタＣＸＳ（ＳＲ）からのいくつかの状態を、ＲＵＮ又はＲＵＮＡＬＬによって起動されたワーカースレッド（複数可）の対応する１つ又は複数にコピーする。例えば、コピーされた状態は、浮動小数点丸めモード（例えば、最近への丸め又はゼロへの丸め）及び／又はオーバーフローモード（例えば、飽和又は無限大を表す別個の値の使用）などの１つ又は複数のモードからなっていてもよい。次に、コピーされた状態又はモードは、コピーされた状態又はモードに従って動作するように当該ワーカーを制御する。実施形態では、ワーカーは後でこれを自身のステータスレジスタに上書きすることができる（ただし、スーパーバイザの状態を変更することはできない）。更なる代替又は追加の実施形態では、ワーカーは、スーパーバイザの１つ又は複数のステータスレジスタからいくつかの状態を読み出すことを選択することができる（そしてさらに、後で自身の状態を変更することもできる）。例えば、ここでもスーパーバイザステータスレジスタから浮動小数点モードや丸めモードなどのモードを採用することができる。しかし、実施形態では、スーパーバイザは、ワーカーのコンテキストレジスタＣＸ０・・・のいずれも読み取ることができない。
【００６４】
一旦起動されると、現在割り当てられているワーカースレッドＷ０・・・Ｗ３のそれぞれは、個別の放棄命令によって指定されたコードで定義された１つ又は複数の計算タスクを実行する。最後に、それぞれのワーカースレッドは、実行中のタイムスロットをスーパーバイザスレッドに戻す。これは、終了命令（「ＥＸＩＴ」）を実行することによって達成される。
【００６５】
ＥＸＩＴ命令は、終了時にそれぞれのコードレットの状態を示すために（例えば、  一定の条件が満たされたかを示すために）、プログラマが望む任意な目的に使用される少なくとも１つのオペランド、好ましくは単一のオペランド、ｅｘｉｔ＿ｓｔａｔｅ（例えば、バイナリ値）を取る。すなわち、ＥＸＩＴ  ｅｘｉｔ＿ｓｔａｔｅ。
【００６６】
ＥＸＩＴ命令はスケジューラ２４に作用し、命令が実行されるタイムスロットはスーパーバイザスレッドに返ってくるようにする。その後、スーパーバイザスレッドは、１つ又は複数の継続するスーパーバイザタスク（例えば、バリア同期及び／又は他のタイルのような外部リソースとのデータ交換）を実行し、及び／又は新たなワーキングスレッド（Ｗ４など）を当該スロットに割り当てるための別の放棄命令を実行し続けることができる。従って、命令メモリ１２内のスレッドの総数は、バレルスレッド処理ユニット１０がいつでもインターリーブすることができる数よりも大きくてよいことに再度留意されたい。スーパーバイザスレッドＳＶの役割は、スケジューラ２４のラウンドロビンスケジュール内でインターリーブされたタイムスロットＳ０・・・ＳＭのどれに、プログラム全体のどの段階で命令メモリ１２からのワーカースレッドＷ０・・・Ｗｊのどれを割り当てるかをスケジュールすることである。
【００６７】
さらに、ＥＸＩＴ命令には特別な機能、すなわちＥＸＩＴ命令のオペランドに指定された終了状態を、同じプロセッサモジュール４（例えば、同じタイル）の同じパイプライン１３で実行されている複数のワーカースレッドの終了状態に（専用のハードウェアロジックにより）自動的に集合させる機能が与えられている。従って、追加の暗黙的な機能がワーカースレッドを終了させる命令に含まれている。
【００６８】
これを実現する回路例を図５に示す。この実施例では、個々のスレッドの終了状態及び集合された終了状態は、それぞれ単一ビット、すなわち０又は１の形態をとる。プロセッサモジュール４は、そのプロセッサモジュール４の集合された終了状態を記憶するためのレジスタ３８を含む。このレジスタは、本明細書では、「ローカルコンセンサス」レジスタ＄ＬＣと呼ばれる（後ほど詳細に説明する、プロセッサモジュール４が類似のプロセッサタイルの配列のうちの１つとして含まれる場合のグローバルコンセンサスとは対照的である）。実施形態では、このローカルコンセンサスレジスタ＄ＬＣ３８は、スーパーバイザのコンテキストレジスタファイルＣＸＳ内のスーパーバイザのステータスレジスタの１つである。アグリゲーションを実行するロジックは、（Ａ）ＥＸＩＴ命令のオペランドに指定された終了状態と（Ｂ）ローカルコンセンサスレジスタ（＄ＬＣ）３８における現在値の論理ＡＮＤを実行して、アウトカム（Ｑ）をローカル集合レジスタの新しい値としてローカルコンセンサスレジスタ＄ＬＣ３８に出力し戻すように配列されたＡＮＤゲートからなっている。
【００６９】
プログラム中の適切な同期ポイントでは、ローカルコンセンサスレジスタ（＄ＬＣ）３８に記憶された値は、最初に値１にリセットされ、このポイントの後に終了するどのスレッドも、次回のリセットまでローカルに集合された終了状態＄ＬＣに寄与する。ＡＮＤゲート３７の出力（Ｑ）は、両方の入力（Ａ、Ｂ）が１の場合には１であるが、そうでない場合は、入力Ａ、Ｂのいずれかが０であれば出力Ｑは０になる。ＥＸＩＴ命令が実行されるたびに、その終了状態は、以前に実行された状態（最終リセット以降）に集合される。従って、図５に示す構成により、ロジックは、ローカルコンセンサスレジスタ（＄ＬＣ）３８が最後にリセットされてからＥＸＩＴ命令によって終了したワーカースレッドの終了状態の実行集合体を保持する。この実施例では、実行中の集合体は、これまでの全てのスレッドが本当に終了したかどうかを参照し、いずれかのワーカースレッドからの０の終了状態は、レジスタ３８内の集合体が次のリセットまで０にラッチされることを意味する。実施形態では、スーパーバイザＳＶは、ローカルコンセンサスレジスタ（＄ＬＣ）３８から現在値を取得することによって、いつでも実行中の集合体を読み取ることができる（オンタイル同期化がそうすることを待つ必要がない）。
【００７０】
ローカルコンセンサスレジスタ（＄ＬＣ）３８における集合体のリセットは、１つ又は複数の汎用命令を使用してスーパーバイザＳＶがローカルコンセンサスレジスタ（＄ＬＣ）３８のレジスタアドレスにＰＵＴを入力することによって、この実施例では、レジスタ３８に１の値を入力することにより実行することができる。これとは別に、例えば、本明細書で後述するＳＹＮＣ命令を実行することによってトリガされるような、自動化された機構によってリセットが実行され得ることを排除するものではない。
【００７１】
アグリゲーション回路３７（この場合はＡＮＤゲート）は、ブールＡＮＤの機能を形成するための電子コンポーネントの任意の適切な組み合わせを使用して、実行ステージ１８における実行ユニット内の専用ハードウェア回路に実装される。専用回路又はハードウェアとは、汎用コードを使用してソフトウェアでプログラムされるのではなく、ハードワイヤード機能を有する回路を意味する。ローカル終了状態の更新は、終了状態を集合する固有の機能を有した特殊なＥＸＩＴ命令の実行によってトリガされるが、これは、プロセッサモジュール４の命令セットにおける基本的な機械コード命令の１つであって、終了状態を集合する固有の機能を有している。また、ローカル集合体は、制御レジスタ３８に記憶されており、その値はパイプライン上で実行されているコードによってアクセスすることができるが、任意の汎用データを記憶するロードストアユニット（ＬＳＵ）によっては使用できない記憶装置の一部（実施形態では記憶装置の単一ビット）を意味する。代わりに、制御レジスタに保持されたデータの機能は固定されており、この場合はローカルに集合された終了状態を記憶する機能に固定されている。好ましくは、ローカルコンセンサスレジスタ（＄ＬＣ）３８は、その値はスーパーバイザがＧＥＴ命令を実行することによってアクセスすることができ、ＰＵＴ命令を実行することによって設定することができるプロセッサモジュール４上の（例えば、タイル上の）制御レジスタの１つを形成する。
【００７２】
図５に示す回路は単なる一実施例にすぎないことに留意されたい。等価回路は、ＡＮＤゲート３７をＯＲゲートで置き換え、ソフトウェアで終了状態０と１の解釈を反転させることであろう、すなわち０→真、１→偽に反転させることであろう（各同期点において１ではなく０にリセットされるレジスタ３８で）。同様に、ＡＮＤゲートがＯＲゲートで置き換えられるが終了状態の解釈は反転もされずリセット値でもない場合、＄ＬＣの集合状態は、ワーカー状態のいずれかが（全てではなく）が状態１で終了したかどうかを記録することになる。他の実施形態では、終了状態は単一ビットである必要はない。例えば、個々のワーカーの終了状態は１ビットであってもよいが、集合された終了状態＄ＬＣは、３値の状態、すなわち、全てのワーカーは状態１で終了した、全てのワーカーは状態０で終了した、又はワーカーの終了状態は混合であったかを表す２ビットからなっていてもよい。これを実現するロジックの一実施例として、３値を符号化する２つのビットのうちの１つは、個々の終了状態のブールＡＮＤ（又はＯＲ）であって、３値の他のビットは、個々の終了状態のブールＯＲであってもよい。次いで、これらの２つのビットの排他的論理和として、ワーカーの終了状態が混在していることを示す第３の符号化されたケースを形成することができる。
【００７３】
終了状態は、プログラマが望むものは何でも表すために使用することができるが、具体的に想定される１つの実施例は、それぞれのワーカースレッドが「成功」状態又は「真」状態で抜け出たことを示すために１との終了状態を使用する一方、０の終了状態をそれぞれのワーカースレッドが「不成功」又は「偽」状態で抜け出たことを示す（アグリゲーション回路３７がＡＮＤの代わりにＯＲを実行し、レジスタ＄ＬＣ３８が最初に０にリセットされる場合、その逆になる）ように使用できる。例えば、各ワーカースレッドが、機械知能アルゴリズムのグラフ内で個別のノードの１つ又は複数のパラメータにおけるエラーが、所定のメトリックに従って許容可能なレベルに収まっているかどうかを示す条件など、各ワーカースレッドが関連する条件を有する計算を実行するアプリケーションを考える。この場合、１つの論理レベル（例えば、１）を有する個々の終了状態を条件が満たされている（例えば、ノードの１つ又は複数のパラメータにおける１つ又は複数のエラーは、いくつかのメトリックに従って許容可能なレベル内にある）ことを示すために用い、反対の論理レベル（例えば、０）を有する個々の終了状態を条件が満たされない（例えば、エラーが当該メトリックに従って許容レベル内にない）ことを示すために用いることができる。条件は、例えば、単一のパラメータ又は各パラメータに置かれたエラー閾値であってもよく、ワーカースレッドによって実行されるそれぞれの計算に関連する複数のパラメータのより複雑な関数にもなり得る。
【００７４】
別のより複雑な実施例として、ワーカーの個々の終了状態及び集合された終了状態は、それぞれ２つ以上のビットから構成されていてもよく、これらは、例えば、ワーカースレッドのアウトカムにおける信頼度を表すために使用され得る。例えば、各ワーカースレッドの終了状態は、個別のワーカースレッドのアウトカムにおける確信度の尺度を表し、アグリゲーションロジック３７は、ハードウェア内の個々の信頼レベルの確率的な集合を実行するためにより複雑な回路で置き換えてもよい。
【００７５】
プログラマが終了状態にどのような意味を与えても、次にスーパーバイザスレッドＳＶはローカルコンセンサスレジスタ（＄ＬＣ）３８から集計された値を取得して、例えば、最後の同期点で、最後にリセットされてから抜け出た全てのワーカースレッドの集合された終了状態を特定すること、例えば、全てのワーカーが成功又は真の状態で抜け出たかどうかを特定することができる。この集合された値に依存して、スーパーバイザスレッドはプログラマの設計に従ってその後に決定を下してもよい。プログラマは、自身が望むローカルに集合された終了状態をどのように使っても構わない。例えば、スーパーバイザスレッドは、ローカル集合された終了状態を参照して、ワーカースレッドの特定のサブセットで構成されたプログラムの特定の一部が、期待どおりに又は所望どおりに完了したかどうかを特定することができる。そうでない場合（例えば、ワーカースレッドの少なくとも１つが不成功又は偽の状態で抜け出たとき）、それはホストプロセッサに報告してもよく、あるいは、同じワーカースレッドを含むプログラムの部分で別の反復を実行してもよいが、もしそうであれば（例えば、全てのワーカースレッドが成功又は真の状態で終了した場合）、代わりに１つ又は複数の新たなワーカーを含むプログラムの別の部分に分岐してもよい。
【００７６】
好ましくは、スーパーバイザスレッドは、そこに記憶された値が全て所望するスレッドの正確で最新の集合状態を表すように、当該全てのワーカースレッドが終了するまで、ローカルコンセンサスレジスタ（＄ＬＣ）３８内の値にアクセスすべきではない。これを待機することは、現在実行中の全てのローカルワーカースレッド（すなわち、同じプロセッサモジュール４上のもので、同じパイプライン１３を介して実行中のスレッド）が終了するのを待機するために、スーパーバイザスレッドによって達成されるバリア同期によって実行されてもよい。換言すれば、スーパーバイザがローカルコンセンサスレジスタ（＄ＬＣ）３８から集合された終了状態を取得することを許可される前に、全ての未処理のワーカースレッドが終了するのを待機するために、スーパーバイザスレッドは、ローカルコンセンサスレジスタ（＄ＬＣ）３８をリセットし、複数のワーカースレッドを起動して、次にローカルバリア同期（処理モジュール４に対してローカルであり、１つのタイルに対してローカルな）を開始する。
【００７７】
図６を参照すると、実施形態では、ＳＹＮＣ（同期）命令がプロセッサの命令セットに提供される。ＳＹＮＣ命令は、現在実行中の全てのワーカーＷがＥＸＩＴ命令によって終了するまでスーパーバイザスレッドＳＶを待機させる効果がある。実施形態では、ＳＹＮＣ命令はオペランド（実施形態ではその唯一のオペランド）としてモードを取り込み、このモードは、例えば、ＳＹＮＣがその一部として実行されるスーパーバイザとしての同じタイルで、ＳＹＮＣが同じプロセッサモジュール４上でローカルに動作するワーカースレッドのみに対してローカルでのみ（すなわち、同じバレルスレッド処理ユニット１０の同じパイプライン１３を通るスレッドのみ）動作するかどうかを指定し、あるいは、代わりに複数のタイルに又は複数のチップにわたって適用するかどうかを指定する。
ＳＹＮＣモード／／モード∈｛ｔｉｌｅ、ｃｈｉｐ、ｚｏｎｅ＿１、ｚｏｎｅ＿２｝
【００７８】
これについてはより詳細に後述するが、図６では、ローカルＳＹＮＣ（「ＳＹＮＣタイル」、すなわち単一のタイル内での同期）が想定される。
【００７９】
バレルスレッド処理ユニット１０のタイムスロットＳ０、Ｓ１、・・・のいずれもが占有されなくなるまでスーパーバイザＳＶは自動的に待機することが暗示されるので、ワーカーはＳＹＮＣ命令のオペランドとして識別される必要はない。図６に示すように、ワーカーＷＬｎの現行のバッチそれぞれがスーパーバイザによって全て起動されると、スーパーバイザは次にＳＹＮＣ命令を実行する。スーパーバイザＳＶがバレルスレッド処理ユニット１０の全てのスロットＳ０・・・３（図示の例では全て４つであるが、これは単なる一実施例である）でワーカーＷを立ち上げると、一旦ワーカースレッドＷＬｎの現行のバッチのうちの最初のバッチが終了してＳＹＮＣが実行されることになり、少なくとも１つのスロットの制御をスーパーバイザＳＶに返す。それ以外の場合、ワーカーが全てのスロットを占有しないならば、現行のバッチＷＬｎの最後のスレッドが起動された直後にＳＹＮＣが実行されることになる。いずれにせよ、ＳＹＮＣは、スーパーバイザが処理を進め得る以前にＥＸＩＴを実行するために、ワーカーＷＬｎ−１の現行のバッチにおける他の全てを待機させるべくスーパーバイザＳＶに命じる。その後に限り、スーパーバイザはローカルコンセンサスレジスタ（＄ＬＣ）３８のコンテンツを取得するためにＧＥＴ命令を実行する。一旦ＳＹＮＣが実行されると、すなわちＳＹＮＣ命令のオペコードに応答して、スーパーバイザスレッドによるこの待機はハードウェアに課され、実行ステージ１８の実行ユニット（ＥＸＵ）内におけるロジックは、全ての未処理のワーカースレッドがＥＸＩＴ命令を実行するまで、フェッチステージ１４及びスケジューラ２４にスーパーバイザスレッドの命令を発することを一時停止させる。ローカルコンセンサスレジスタ（＄ＬＣ）３８の値を得た後のある時点で（任意に、その間にいくつかのスーパーバイザコードを伴って）、スーパーバイザはＰＵＴ命令を実行してローカルコンセンサスレジスタ（＄ＬＣ）３８をリセット（図示の実施例では１に）する。
【００８０】
図６にも示すように、ＳＹＮＣ命令は、ワーカースレッドの異なる相互依存レイヤーＷＬ１、ＷＬ２、ＷＬ３、・・・の間に同期バリアを配置するために使用してもよく、各連続レイヤー内における１つ以上のスレッドは、１つ又は複数のワーカースレッドをその前のレイヤーに配置する。スーパーバイザスレッドによって実行されるローカルＳＹＮＣは、直前のレイヤーＷＬｎ内で全てのワーカースレッドが（ＥＸＩＴ命令を実行することによって）終了するまで、次のレイヤーＷＬｎ＋１内でワーカースレッドのいずれもが実行されないことを保証する。
【００８１】
上述したように、実施形態では、プロセッサモジュール４は、マルチタイルプロセッサを形成する相互接続されたタイル配列の１つとして実装されてもよく、各タイルは、図１〜６に関連して上述したように構成してもよい。
【００８２】
これは図７にさらに図示されており、単一のチッププロセッサ２、すなわち複数のプロセッサタイル４の配列６及びタイル４間を接続するオンチップ相互接続３４からなる単一のダイを示している。チップ２は、それ自身の単一チップ集積回路パッケージ上に単独で、又は同じＩＣパッケージ内にパッケージされた複数のダイのうちの１つとして実装してもよい。オンチップ相互接続は、タイル４が相互にデータを交換することを可能にするために、本明細書では「交換ファブリック」３４と呼ぶこともできる。各タイル４は、バレルスレッド処理ユニット１０及びメモリ１１のそれぞれのインスタンスからなり、それぞれ図１〜図６に関連して上述したように構成されている。例えば、実例としてチップ２は、何百ものタイル４、さらには１０００を超えるタイルから構成されてもよい。完璧を期するために、本明細書で言及される「配列」は、タイル４の任意な特定の次元数又は物理的レイアウトを必ずしも暗示してはいないことにも留意されたい。
【００８３】
実施形態では、各チップ２はまた、１つ以上の外部リンク８を備え、チップ２を異なるチップ上（例えば、同じチップ２の１つ又は複数の他のインスタンス）で１つ以上の他の外部プロセッサに接続することを可能にしている。これらの外部リンク８は、チップ２をホストプロセッサに接続するための１つ又は複数のチップ−ホスト間リンク、及び／又は同じＩＣパッケージ又はカード上で、あるいは、異なるカード上でチップ２の他のインスタンスと接続するための１つ又は複数のチップ−チップ間リンクの１つ又は１以上を備えている。一実施例の構成では、チップ２は、チップ２によって処理される入力データの形態でチップ−ホスト間リンクの１つを介してチップに接続されたホストプロセッサ（図示せず）から作業を受信する。チップ２の複数のインスタンスは、チップ−チップ間リンクによってカードに相互に接続することができる。このようにしてホストは、ホストに必要な作業負荷に応じて、複数の相互接続されたカード上に場合により配置された複数の単一チッププロセッサ２として、あるいは、複数の単一チッププロセッサ２として構築されたコンピュータにアクセスすることができる。
【００８４】
相互接続３４は、配列６内の異なるプロセッサタイル４が互いにオンチップ２で通信できるように構成されている。しかし、潜在的に同じタイル４上でスレッド間の依存性が存在するだけでなく、配列６内の異なるタイル４上で実行されるプログラムにおける部分間の依存性も存在する可能性がある。従って、それが依存するデータに先んじて実行される１つのタイル４上のコード片が、別のタイル４上の別のコード片によって利用可能になるのを防ぐ技術が必要とされる。
【００８５】
実施形態では、これは、図８及び図９に概略的に示されるように、バルク同期並列（ＢＳＰ）交換方式を実装することによって達成される。
【００８６】
ＢＳＰの１つのバージョンによれば、各タイル４は、タイル間のバリア同期３０によって一方から他方へと分離された交代サイクルで計算段階５２及び交換段階５０を実行する。図示の例では、各計算段階５２と後続の交換段階５０との間にバリア同期が設けられている。計算段階５２の間に、各タイル４は、タイル上でローカルに１つ以上の計算タスクを実行するが、これら計算のアウトカムをタイル４上の他のタスクと通信しない。交換段階５０では、各タイル４は、先行する計算段階からの計算の１つ以上のアウトカムを、群内で１つ以上の他のタイルへ、及び／又は１つ以上の他のタイルから交換することが許可されるが、そのタスク（複数可）が依存関係を有するデータを他のタイル４から受信するまでは新たな計算を実行しない。先行の計算段階で計算されたデータ以外のデータも他のタイルに送信されない。これは、交換段階において内部管理関連業務のような他の業務を行うことを排除するものではない。実施形態では、交換段階５０には、非時間決定論的な計算は含まれないが、交換段階５０の間に、少数の時間決定論的な計算を任意に許容してもよい。計算を実行するタイル４は、計算段階５２の間に、同期されている群内の他のタイル４との通信を伴わない限り、例えば、ネットワークカード、ディスクドライブ、又はフィールドプログラマブルゲート配列（ＦＰＧＡ）のように同期されているタイル４の配列の外部にある他の外部システムリソースと通信することを許可されてもよいことにも留意されたい。タイル群の外部通信は、任意でＢＳＰメカニズムを利用してもよいが、代わりにＢＳＰを利用せず、それ自身の他の何らかの同期メカニズムを使用することができる。
【００８７】
ＢＳＰの原理によれば、バリア同期３０は、計算段階５２から交換段階５０へ、又は交換段階５０から計算段階５２へ、あるいは、その両方へ移行する岐路に置かれる。すなわち、（ａ）群内のいずれかが次の交換段階５０に進むことが許可される前に、全てのタイル４がそれぞれの計算段階５２を完了する必要があるか、（ｂ）群内のいずれかのタイルが次の計算段階５２に進むことが許可される前に、群内の全てのタイル４がそれぞれの交換段階５０を完了することが要求されるか、（ｃ）これらの条件の両方が実行されるかのいずれかである。３つの全ての変形では、段階を交互に行うのは個々のプロセッサであり、同期するアセンブリ全体である。交換及び計算段階のシーケンスは、複数回にわたって繰り返されてもよい。ＢＳＰ用語では、交換段階と計算段階の各繰り返しは、「スーパーステップ」と呼ばれることがある（ただし、文献では常に用語が一貫して使用されているわけではないが、時には個々の交換段階と計算段階を個別にスーパーステップと呼ぶ一方で、他の文献では、本明細書で採用されている用語のように、交換及び計算段階はともにスーパーステップと呼ばれる）。
【００８８】
また、同様に留意されたいが、同じチップ２又は異なるチップ上でタイル４の複数の異なる独立した群が、互いに非同期的に動作する個別のそれぞれのＢＳＰ群を形成し、計算、同期及び交換のＢＳＰサイクルがそれぞれ所与の群内でのみ課されることを伴うが、他の群とは独立してそれを実行する各群、すなわちマルチタイル配列６が、それぞれ他のそのような群と独立して非同期的に動作する複数の内部同期群（より詳細に詳述する）を含む可能性があることを除外するものではない。
【００８９】
図９は、（ａ）計算段階５２から交換段階５０へのバリア同期（上述を参照のこと）を課す場合、配列６内のタイルのいくつか又は全ての群４ｉ、４ｉｉ、４ｉｉｉの間で実行されるＢＳＰ原理を示している。この構成では、いくつかのタイル４は計算を開始することが許可されているが、他のタイル４はまだ交換されていることに留意されたい。
【００９０】
本明細書に開示された実施形態によれば、このタイプのＢＳＰは、バリア同期、すなわちＳＹＮＣ命令を実行するための機械コード命令に追加の特別な専用機能を組み込むことによって容易にすることができる。
【００９１】
実施形態では、ＳＹＮＣ関数は、オペランドとしてタイル間モード（例えばオンチップモード：ＳＹＮＣ  ｃｈｉｐ）によって修飾されたときにこの機能性を取る。
【００９２】
これは図１０に概略的に示されている。各タイル４がマルチスレッド処理ユニット１０からなる場合、各タイルの計算段階５２は、実際には同じタイル４上の複数のワーカースレッドＷによって実行されるタスクからなっていてもよい（そして、所与のタイル４上の所与の計算段階５２が、ワーカースレッドの１つ以上のレイヤーＷＬを含んでいてもよく、複数のレイヤーの場合、これらは前述したようにオペランドとしてのローカルオンタイルモードを有するＳＹＮＣ命令を使用して内部バリア同期によって分離されてもよい）。所与のタイル４上のスーパーバイザスレッドＳＶが現行のＢＳＰスーパーステップで最後のワーカースレッドを開始すると、そのタイル４上のスーパーバイザは、オペランド：ＳＹＮＣ  ｃｈｉｐとしてセットされたタイル間モードを有するＳＹＮＣ命令を実行する。スーパーバイザが、それぞれの処理ユニット１０の全てのスロット内でワーカースレッドを起動「ＲＵＮ」させると、現在のＢＳＰスーパーステップでそれ以上のワーカーを実行するためにもはや必要とされない最初のスロットがスーパーバイザに戻されてすぐに、「ＳＹＮＣ  ｃｈｉｐ」が実行される。例えば、これは最後のレイヤーＷＬでＥＸＩＴする最初のスレッドの後に、又は単一のレイヤーしかない場合にはＥＸＩＴする最初のワーカースレッドの後に発生する可能性がある。さもなければ、現行のＢＳＰスーパーステップでワーカーを実行するために全てのスロットを使用するわけではない場合、現行のＢＳＰスーパーステップで実行する必要がある最後のワーカーがＲＵＮされるとすぐに「ＳＹＮＣ  ｃｈｉｐ」を実行することができる。これは、一旦最後のレイヤー内の全てのワーカーがＲＵＮになると、又はレイヤーが１つしか存在しない場合には、単に全てのワーカースレッドがＲＵＮになった後に発生する可能性がある。
【００９３】
実行ステージ１８の実行ユニット（ＥＸＵ）は、ＳＹＮＣ命令のオペコードに応答して、オンチップ（タイル間）オペランドによって修飾されたときに、配列６内の全てのタイル４がワーカーの実行を終了するまで、「ＳＹＮＣ  ｃｈｉｐ」が実行されたスーパーバイザスレッドに一時停止されるよう命じる。これは、次のＢＳＰスーパーステップへのバリアを実装するために使用でき、すなわち、チップ２上の全てのタイル４がバリアを通過した後、全体としてクロスタイルプログラムは次の交換段階５０に進むことができる。
【００９４】
図１１は、本明細書に開示された実施形態による「ＳＹＮＣ  ｃｈｉｐ」によってトリガされるロジックを示す概略図である。
【００９５】
一旦スーパーバイザがスレッドの全てを起動（ＲＵＮ）すると、現行の計算サイクル５２で実行することを意図し、次にオンチップのタイル間オペランド：ＳＹＮＣ  ｃｈｉｐを使用してＳＹＮＣ命令を実行する。これにより、タイル４上の専用同期ロジック３９、及びハードウェア相互接続３４に実装された同期コントローラ３６において、以下の機能性がトリガされる。相互接続３４におけるオンタイル同期ロジック３９と同期コントローラ３６との両方のこの機能性は、一旦ＳＹＮＣ  ｃｈｉｐが実行されると、残りの機能性は、それを実行するためのさらなる命令を実行することなく進行するように専用のハードウェア回路に実装されている。
【００９６】
最初に、オンタイル同期ロジック３９は、当該タイル４上のスーパーバイザに対する命令発行を自動的に中断させる（フェッチステージ１４及びスケジューラ２４にスーパーバイザの発行命令を中断させる）。ローカルタイル４上における全ての未処理のワーカースレッドがＥＸＩＴを実行すると、同期ロジック３９は、同期リクエスト「ｓｙｎｃ＿ｒｅｑ」を相互接続３４内の同期コントローラ３６に自動的に送信する。その時、ローカルのタイル４は、スーパーバイザ命令の発行が一時停止した状態で待機し続ける。配列６内の他のタイル４（それぞれが同期ロジック３９のそれ自身のインスタンスを含む）の各々にも同様のプロセスが実装される。従って、ある時点で、現行の計算段階５２の最終ワーカーが全て配列６内の全てのタイル４上でＥＸＩＴ（抜け出る）すると、同期コントローラ３６は配列６内の全てのタイル４からそれぞれの同期要求（ｓｙｎｃ＿ｒｅｑ）を受信することになる。そのとき初めて、同期コントローラ３６は、同じチップ２上の配列６内の全てのタイル４からｓｙｎｃ＿ｒｅｑを受信したことに応答して、同期確認信号ｓｙｎｃ＿ａｃｋを各タイル４上の同期ロジック３９に送り返す。この時点まで、タイル４の各々は、同期肯定応答信号（ｓｙｎｃ＿ａｃｋ）を待機しているスーパーバイザ命令の発行を一時停止させている。ｓｙｎｃ＿ａｃｋ信号を受信すると、タイル４内の同期ロジック３９は、そのタイル４上のそれぞれのスーパーバイザスレッドに関するスーパーバイザ命令発行を自動的に解除する。その後、スーパーバイザは、後続の交換段階５０において相互接続３４を介して他のタイル４とのデータ交換を自由に進めることができる。
【００９７】
好ましくは、ｓｙｎｃ＿ｒｅｑ及びｓｙｎｃ＿ａｃｋ信号は、各タイル４を相互接続３４内の同期コントローラ３６に接続する１つ又は複数の専用同期ワイヤを介して、同期コントローラとの間でそれぞれ送受信される。
【００９８】
さらに、本明細書で開示される実施形態によれば、追加の機能性がＳＹＮＣ命令に含まれる。すなわち、少なくともタイル間モード（例えば、ＳＹＮＣ  ｃｈｉｐ）で実行されるとき、ＳＹＮＣ命令は、同期化されたタイル４の各々のローカル終了状態＄ＬＣを、相互接続３４内の別の専用ハードウェア４０内で自動的に集合させる。図示される実施形態では、このロジックは多入力ＡＮＤゲート（配列６内の各タイル４の１つの入力）、例えば、図１１に実施例として示すように、２入力ＡＮＤゲート４０ｉ、４０ｉｉ、・・・のストリングから形成される形態をとる。このタイル間アグリゲーションロジック４０は、配列内の各タイル４からのローカル終了状態レジスタ（ローカルコンセンサスレジスタ）＄ＬＣ３８の値を受信するが、実施形態ではそれぞれ単一ビットで受け取り、それらを単一の値、例えば、全てのローカルに集合された終了状態のＡＮＤに集合する。従って、ロジックは、配列６内の全てのタイル４上の全てのスレッドにわたってグローバルに集合された終了状態を形成する。
【００９９】
タイル４の各々は、グローバルアグリゲーションロジック４０からのグローバル終了状態を受け取り、相互接続３４内に記憶するように配列されたグローバルコンセンサスレジスタ（＄ＧＣ）４２の個別のインスタンスを含む。実施形態では、これは、スーパーバイザのコンテキストレジスタファイルＣＸＳ内のステータスレジスタのもう１つである。配列６内の全てのタイル４から受信された同期要求（ｓｙｎｃ＿ｒｅｑ）に応答して、同期コントローラ３６は、アグリゲーションロジック４０の出力（例えば、ＡＮＤの出力）を各タイル４上でグローバルコンセンサスレジスタに記憶させる（図１１に示す「スイッチ」は機能性の概略図であり、実際には任意の適切なデジタルロジックによって更新を実行してもよいことは理解されよう）。このレジスタ＄ＧＣ４２は、一旦スーパーバイザ命令発行が再開されると、各タイル４上のスーパーバイザスレッドＳＶによってアクセス可能である。実施形態では、グローバルコンセンサスレジスタ＄ＧＣは、制御レジスタファイル内の制御レジスタとして実装され、スーパーバイザスレッドは、グローバルコンセンサスレジスタ（＄ＧＣ）４２内の値をＧＥＴ命令によって取得することができる。同期ロジック３６は、グローバルコンセンサスレジスタ（＄ＧＣ）４２のいずれかで値を更新する前に、ｓｙｎｃ＿ｒｅｑが全てのタイル４から受信されるまで待機し、さもなければ、計算段階５２のその部分をまだ完了しておらず、従って依然として実行中のタイル上でスーパーバイザスレッドに不正な値をアクセス可能にしてしまうことがある。
【０１００】
グローバルに集合された終了状態＄ＧＣは、プログラムが、個々のタイル上で個別の各ワーカースレッドの状態を１つ１つ調べる必要なくして、複数の異なるタイル４上で実行されているプログラムのパーツの全体的なアウトカムを特定できるようにする。これは、プログラマが望む任意の目的に使用することができる。例えば、グローバル集合体がブールＡＮＤである図１１に示す実施例では、これは、いずれかの入力が０ならば集合体が０になり、すべての入力が１ならば集合体が１となることを意味している。すなわち、１が真又は成功アウトカムを表すために使用される場合、これは、タイル４のいずれかのローカル終了状態が偽又は不成功であるならば、グローバル集合状態も偽であるか、又は不成功のアウトカムを表すであろうことを意味する。例えば、これは、全てのタイル上で実行されているコードのパーツが全て所定の条件を満たすかどうかを特定するために使用できる可能性がある。従って、プログラムは、個々のタイル上で個別のワーカースレッドの個々の状態を調べる必要なくして、単一のレジスタ（実施形態では単一ビット）に「何かが間違っていたか？  諾否は？」又は「グラフの全てのノードが許容可能なエラーレベルに達したか？  諾否は？」と質問することができる（そしてまた実施形態では、スーパーバイザは、実際には終了状態レジスタ３８を介する以外にワーカーの状態を照会することができない）。言い換えれば、ＥＸＩＴ及びＳＹＮＣ命令はそれぞれ、複数の個々の終了状態を単一の結合状態にまとめる訳である。
【０１０１】
１つの使用例では、１つ又は複数のタイル上のスーパーバイザは、グローバル集合体が偽又は不成功のアウトカムを示したかどうかをホストプロセッサに報告することもできる。別の実施例として、プログラムは、グローバル終了状態に応じて分岐判断を実行してもよい。例えば、プログラムはグローバル集合終了状態＄ＧＣを調べ、これに基づいてループを続行するかどうか、又は別の場所に分岐するかどうかを判定する。グローバル終了状態＄ＧＣが依然として偽であるか不成功である場合、プログラムは同じ最初のプログラム部分を反復し続けるが、一旦グローバル終了状態＄ＧＣが真であるか又は成功すると、プログラムはプログラムの第２の異なるパーツに分岐する。分岐判定は、各スーパーバイザスレッドで個別に実行されてもよいし、マスターの役割を担うスーパーバイザの１つが他のタイル上で他のスレーブスーパーバイザに指示してもよい（マスターの役割はソフトウェアで構成されている）。
【０１０２】
図１１に示すアグリゲーションロジック４０は単なる一実施例に過ぎないことに留意されたい。別の等価な実施例では、ＡＮＤをＯＲで置き換えることができ、０と１の解釈を反転することができる（０→真、１→偽）。同様に、ＡＮＤゲートがＯＲゲートで置き換えられても終了状態の解釈が反転されず、リセット値も反転されなければ、＄ＧＣに集合された状態は、タイルのいずれか（すべてではなく）がローカルに集合された状態１で抜け出たかどうかを記録することになる。別の実施例では、グローバル終了状態＄ＧＣは、３値状態：全てのタイルのローカル集合された終了状態＄ＬＣは状態１であって、全てのタイルのローカル集合された終了状態＄ＬＣは状態０であった、又はタイルのローカルに集合された終了状態＄ＬＣはミックスされた、を表す２ビットからなっていてもよい。別のより複雑な実施例として、タイル４のローカル終了状態及びグローバルに集合された終了状態は、それぞれが２ビット以上からなっていてもよく、例えば、タイル４のアウトカムにおける信頼度を表すために使用することができる。例えば、個々のタイルのローカルに集合された終了状態＄ＬＣは、個別のタイル４の結果における統計的確率的信頼度の尺度を表すことができ、グローバルアグリゲーションロジック４０は、ハードウェア内における個々の信頼レベルの統計集約を実行するために、より複雑な回路に置き換えてもよい。
【０１０３】
前述したように、実施形態では、チップ２の複数のインスタンスを互いに接続して、複数のチップ２にわたるさらに大きなタイル４の配列を形成することができる。これは、図１２に図示されている。チップ２のいくつか又は全てが同じＩＣパッケージに実装されてもよく、チップ２のいくつか又は全てが異なるＩＣパッケージに実装されてもよい。チップ２は、外部相互接続７２によって（図７に示す外部リンク８を介して）互いに接続されている。外部交換周辺装置７２は、異なるチップ上のタイル４間でデータを交換するための通り道（conduit）を提供するとともに、異なるチップ２上でタイル４間のバリア同期を実行し、異なるチップ２上でタイル４のローカル終了状態を集合するハードウェアサポートも提供する。
【０１０４】
実施形態では、ＳＹＮＣ命令は、そのモードオペランドのさらに可能な少なくとも１つの値をとり、外部の、すなわちチップ間同期：ＳＹＮＣ  ｚｏｎｅ＿ｎを指定することができ、ここではｚｏｎｅ＿ｎは外部同期ゾーンを表す。外部相互接続７２は、図１１に関連して説明されたものと同様のハードウェアロジックを含むが、外部のチップ間スケールである。そのオペランドで指定された２つ以上のチップ２の外部同期ゾーンでＳＹＮＣ命令が実行されると、これにより、外部相互接続７２内のロジックは、内部相互接続３４に関して説明したものと同じような方法で動作するが、指定された同期ゾーン内における複数の異なるチップ２上のタイル４にわたって動作する。
【０１０５】
換言すれば、外部ＳＹＮＣに応答して、外部同期ゾーン内の全てのチップ２で全てのタイル４がそれらの計算段階５２を完了し、同期要求を提出するまで、スーパーバイザ命令の発行が一時停止される。さらに、外部相互接続７２内のロジックは、当該ゾーン内の複数のチップ２にわたって、これらのタイル４の全てのローカル終了状態を集合する。外部同期ゾーン内の全てのタイル４が同期要求を行うと、外部相互接続７２は同期肯定応答をタイル４に戻して通知し、当該全てのタイル４のグローバルコンセンサスレジスタ（＄ＧＣ）４２にクロスチップグローバル集合終了状態を記憶する。上記の同期肯定応答に応答して、ゾーン内における全てのチップ２のタイル４は、スーパーバイザのために命令発行を再開する。
【０１０６】
実施形態では、相互接続７２の機能性は、チップ２内に実装されてもよく、すなわち、チップ間の有線接続のみが必要となるようにロジックがチップ２に分散されてもよい（図１１及び図１２は概略図である）。
【０１０７】
前述の同期ゾーン内の全てのタイル４は、それぞれの個別のＳＹＮＣ命令のモードオペランドを介して同じ同期ゾーンを示すようにプログラムされている。実施形態では、外部相互接続周辺装置７２の同期ロジックは、プログラミングエラー又は他のエラー（メモリパリティエラーなど）に起因しない場合、一部又は全てのタイル４が肯定応答を受信しないように構成されており、従って、システムは次の外部バリアで停止し、中央演算処理ユニットＣＰＵ（例えば、ホスト）がデバッグ又はシステム回復のために介入することを可能にする。他の実施形態では、同期ゾーンが一致しない場合にエラーが発生する。しかし、好ましくはコンパイラが、同じゾーン内のタイルが全て、時間関連で同一な正しい同期ゾーンを示すように構成されている。
【０１０８】
図１３は、内部（オンチップ）同期と外部（チップ間）同期の両方を含む例示的なＢＳＰプログラムフローを示す。図示のように、内部交換機５０（同一チップ２上のタイル４間のデータの）を外部交換機５０’（異なるチップ２上のタイル４間のデータの）から分離することが好ましい。この理由の１つは、グローバル同期によって画定される複数のチップ間にわたってのグローバルな交換が、単なるオンチップ同期及び交換の場合よりもレイテンシ及び負荷分散の複雑さの面でより高価になる可能性があるためである。別の考えられる理由は、内部（オンチップ）相互接続３４を介したデータの交換を時間決定論的にすることができるが、実施形態では外部相互接続７２を介したデータの交換は非時間決定論的であり得る。このようなシナリオでは、外部の同期及び交換プロセスが内部同期と交換を「汚染」しないように、内部交換と外部交換を分離すると有益なことがある。
【０１０９】
従って、このような分離を達成するために、実施形態では、プログラムは、次の順番で、すなわち（ｉ）第１の計算段階、次いで（ｉｉ）内部バリア同期３０、次いで（ｉｉｉ）内部交換段階５０、次いで（ｉｖ）外部バリア同期８０、次いで（ｖ）外部交換段階５０’からなる同期シーケンス、交換段階及び計算段階を行うように配列されている。図１３のチップ２ＩＩを参照されたい。外部バリア８０は、プログラムが内部交換５０の後に外部交換５０’にのみ進むように、内部交換５０の後に課される。また、図１２のチップ２Ｉに関して示されているように、任意選択で、内部交換（ｉｉｉ）と外部バリア（ｉｖ）との間に計算段階が含まれてもよいことに留意されたい。全体的なシーケンスは、プログラムによって実行され（例えば、コンパイラによって生成される）、内部同期及び交換は、別のチップ２上のいかなるタイル又は他のエンティティに拡張されない。シーケンス（ｉ）〜（ｖ）（ｉｉｉとｉｖとの間の前述した任意の計算段階を伴う）は、一連の全体的反復で繰り返されてもよい。反復ごとに、外部同期＆交換に先立って、内部計算、同期及び交換（ｉ）〜（ｉｉｉ）の複数のインスタンスが存在してもよい。
【０１１０】
外部交換５０の間、通信は外部のみに限定されず、一部のタイルは単に内部交換を行うことができ、いくつかは外部交換を行うことができ、またいくつかはその両方を行うことができることに留意されたい。また、図１３に示すように、任意な所与のＢＳＰスーパーステップにおいて、ヌル計算段階５２又はヌル交換段階５０を有することが一般に可能であることに留意されたい。
【０１１１】
いくつかの実施形態では、図１３に示すように、いくつかのタイル４は、計算段階中にローカル入出力を実行してもよく、例えば、ホストとデータを交換してもよい。
【０１１２】
図１４に示すように、実施形態では、ＳＹＮＣ命令のモードを使用して、複数の異なる可能な外部同期ゾーン、例えば、ｚｏｎｅ＿１又はｚｏｎｅ＿２のうちの１つを指定することができる。実施形態では、これらは異なる階層に対応する。すなわち、各上位階層９２（例えば、ゾーン２）は、少なくとも１つの下位階層の２つ以上のゾーン９１Ａ、９１Ｂを包含する。実施形態では、２つの階層しか存在しないが、より多くの入れ子レベルは除外されない。ＳＹＮＣ命令のオペランドが外部同期ゾーンの下位階層（ＳＹＮＣ  ｚｏｎｅ＿１）に設定されている場合、ＳＹＮＣが実行されたタイルと同じ下位階層の外部同期ゾーン内においてチップ２上のタイル４に対して上記の同期及び集合動作が実行される。これに反して、ＳＹＮＣ命令のオペランドが外部同期ゾーンの上位階層（ＳＹＮＣ  ｚｏｎｅ＿２）に設定されている場合、ＳＹＮＣが実行されたタイルと同じ高位階層の外部同期ゾーン内において、全てのチップ２上の全てのタイルに対して上記の同期及び集合動作が自動的に実行される。実施形態では、同期ゾーンの最高位階層は全てのチップを包含し、すなわち、それはグローバル同期を実行するために使用される。複数の下位階層ゾーンが使用される場合、ＢＳＰは、各ゾーン内のチップ（複数可）２上におけるタイル４の群間で内部的に適用されてもよいが、各ゾーンは、グローバル同期が実行されるまで、互いに非同期に動作してもよい。
【０１１３】
他の実施形態では、ＳＹＮＣ命令のモードによって指定することができる同期ゾーンは、性質上階層的であることが必須ではないことに留意されたい。一般に、ＳＹＮＣ命令は、任意な種類の群に対応するモードを備えていてもよい。例えば、モードは、非階層群のみ、又は階層群と１つ以上の非階層群（少なくとも１つの群が別の群内に完全に入れ子にされていない）の混合から選択することができる。これにより、プログラマ又はコンパイラにとっては有利なことに、コード密度を最小限にして、互いに非同期である内部同期群の様々なレイアウト間で選択する柔軟性が可能となる。
【０１１４】
選択された同期群９１、９２の間で同期を実現するための例示的な機構が、図１６に示されている。図示されているように、外部相互接続７２内の外部同期ロジック７６は、それぞれのチップ２に関連するそれぞれの同期ブロック９５を含む。各同期ブロック９５は、それぞれのゲーティングロジックと、それぞれの同期アグリゲータとからなっている。ゲーティングロジックは、デイジーチェーントポロジーでチップ２を相互接続して、同期及び終了状態集合を目的とし、同期及び終了状態情報を以下に従って伝搬するハードウェア回路からなっている。同期アグリゲータは、同期要求（Ｓｙｎｃ＿ｒｅｑ）及び終了状態を以下に従って集合するように構成されたハードウェア回路からなっている。
【０１１５】
各チップ２に関連するそれぞれの同期ブロック９５は、そのチップ２によって生成された同期要求（Ｓｙｎｃ＿ｒｅｑ）及びそのチップ２の終了状態を検出することができるように、それぞれのチップ２に接続され、同期肯定応答（Ｓｙｎｃ＿ａｃｋ）及びグローバル終了状態をそれぞれのチップ２に送信することができる。各チップ２に関連するそれぞれの同期ブロック９５はまた、４本の同期ワイヤ９６の束を含む外部同期インターフェースを介してチップ２のうちの少なくとも１つの他の同期ブロック９５に接続されているが、その詳細は後述して説明する。これはチップ・ツー・チップ・リンク８の１つの部分であってもよい。異なるカード上のチップ２間リンクの場合、インターフェース８は、例えば、ＰＣＩインターフェースからなっていてもよく、４つの同期ワイヤ９６は、ＰＣＩインターフェースの４本のワイヤを再使用することによって実装することができる。チップの同期ブロック９５のいくつかは、２つの隣接するチップ２の同期ブロック９５に接続され、各接続は４本の同期ワイヤ９６のそれぞれのインスタンスを介してなされる。このようにして、チップ２は、それらの同期ブロック９５を介して１つ以上のデイジーチェーンに接続することができる。これにより、同期要求、同期肯定応答、終了状態の集合実行、及びグローバル終了状態がチェーンの上下に伝搬されることが可能になる。
【０１１６】
動作中、各同期群９１、９２について、その群内のチップ２の１つに関連する同期ブロック９５が、同期及び終了状態集合目的のためのマスターとして設定され、群内の残りは、この目的のためにスレーブとなる。各スレーブ同期ブロック９５は、各同期群９１、９２（すなわち、マスターに向かう方向）の同期要求、同期肯定応答及び終了状態を伝搬する必要がある方向（例えば、左又は右）で構成される。実施形態では、これらの設定は、ソフトウェアによって構成可能であり、例えば、初期構成段階では、システムの後続動作を通して構成が設定されたままである。例えば、これはホストプロセッサによって構成してもよい。あるいは、構成がハードワイヤードである可能性は排除されない。いずれにしても、異なる同期群９１、９２は異なるマスターを有することができ、一般に、所与のチップ２（もっと厳密に言うと、その同期ブロック９５）が、所与のチップ２が１つの群のマスターであり、それがメンバーである別の群のマスターではなく、あるいは、複数の群のマスターになることができる。
【０１１７】
例えば、実例として、図１６のシナリオの例を考察する。チップ２ＩＶの同期ブロック９５が、所定の同期群９１Ａのマスターとして設定されている実施例とする。同期ブロック９５及びワイヤ９６を介して最終的にチップ２ＩＶに接続されたチップ２のチェーン内における第１のチップ２Ｉを考察する。第１のチップ２Ｉ上における現行の計算段階の全てのワーカースレッドがＥＸＩＴ命令を実行し、全ての（参加している）タイル４上のスーパーバイザが全て同期群９１Ａを指定するＳＹＮＣ命令を実行した場合、第１のチップ２Ｉは同期準備信号をその各関連の同期ブロック９５へ送る。チップ２Ｉはまた、そのチップレベルの集合された終了状態（各チップ２Ｉ上における全ての相伴タイル上で終了中の全てワーカーの集合体）をその各同期ブロック９５に出力する。それに応答して、第１のチップ２Ｉの同期ブロック９５は、チェーン内において次のチップ２ＩＩの同期ブロック９５に同期要求（Ｓｙｎｃ＿ｒｅｑ）を伝搬する。また、第１のチップ２Ｉの終了状態をこの次のチップ２ＩＩの同期ブロック９５に伝搬する。この第２のチップ２ＩＩの同期ブロック９５は、それ自身の（参加している）タイル４のスーパーバイザが全て、同期群９１Ａを指定するＳＹＮＣ命令を実行して、第２のチップ２ＩＩに同期準備を知らせるまで待機する。その時初めて、第２のチップの同期ブロック９５は、チェーン内における次の（第３の）チップ２ＩＩＩの同期ブロック９５に同期要求を伝搬させ、また、第１のチップ２Ｉの終了状態の実行集合を第２のチップ２ＩＩのものとともに伝搬する。第２のチップ２ＩＩが第１のチップ２Ｉの前に同期準備完了となった場合、第２のチップ２ＩＩの同期ブロック９５は、第３のチップ２ＩＩＩの同期ブロック９５に同期要求を伝搬する前に、第１のチップ２Ｉが同期要求の信号を送るのを待つ。第３のチップ２ＩＩＩの同期ブロック９５も同様に動作し、今度は第２のチップ２ＩＩからの実行中の集合された終了状態を集合して、次に移るための次の集合体を取得する等々である。これは、マスター同期ブロック、この実施例では、チップ２ＩＶのマスター同期ブロックに向かって継続する。
【０１１８】
次に、マスターの同期ブロック９５は、受信した実行中の集合体及びそれ自身のチップ２ＩＶの終了状態に基づいて、全ての終了状態のグローバル集合体を特定する。このグローバル集合体は、チェーンに沿って全てのチップ２に、同期肯定応答（Ｓｙｎｃ＿ａｃｋ）とともに戻される。
【０１１９】
上記の実施例のように一方の端にあるのとは対照的に、マスターがチェーンに沿って途中に存在する場合、同期状態情報及び終了状態情報は、マスターのどちらかの側で、マスターに向かって両側で反対方向に伝搬する。この場合、マスターは、両側からの同期要求が受信された時点でのみ、同期肯定応答及びグローバル終了状態を発行する。例えば、チップ２ＩＩＩが群９２のマスターである場合を考察する。さらに、実施形態では、チップ２のいくつかの同期ブロック９５は、３つ以上の他のチップ２の同期ブロックに接続することができ、従って、マスターに向かってチェーンの複数のブランチを創出する。各チェーンは上記のように動作し、マスターは、全てのチェーンからの同期要求が受信された後にのみ、同期肯定応答及びグローバル終了状態を発行する。そして／又は、チップ２のうちの１つ又は複数は、ホストプロセッサ、ネットワークカード、記憶装置又はＦＰＧＡのような外部リソースに接続することも考えられる。
【０１２０】
実施形態では、同期及び終了状態情報のシグナリングは、以下のように実施される。各対のチップ２間の４本の同期ワイヤ９６の束は、２対のワイヤ、第１の対９６＿０及び第２の対９６＿１からなっている。各対は、同期要求ワイヤのインスタンスと同期肯定応答ワイヤのインスタンスとを含む。値０の実行中の集合された終了状態を通知するために、送信チップ２の同期ブロック９５は、同期要求（Ｓｙｎｃ＿ｒｅｑ）を送るときに第１のワイヤ対９６＿０の同期要求ワイヤを使用し、あるいは、値１の実行中の集合体を通知するために、同期ブロック９５は、同期要求を送るときに第２のワイヤ対９６＿１の同期要求ワイヤを使用する。値０のグローバルに集合された終了状態を通知するために、送信チップ２の同期ブロック９５は、同期肯定応答（Ｓｙｎｃ＿ａｃｋ）を通知するときに第１のワイヤ対９６＿０の同期肯定応答ワイヤを使用し、あるいは、値１のグローバル集合体を通知するために、同期ブロック９５は、同期肯定応答（Ｓｙｎｃ＿ａｃｋ）を通知するときに第２のワイヤ対９６＿１の同期要求ワイヤを使用する。
【０１２１】
上記は、同期状態と終了状態情報を伝搬するメカニズムに過ぎないことに留意されたい。実際のデータ（コンテンツ）は、例えば、図１６を参照して後述するように、別のチャネルによって送信される。さらに、これは一実施例に過ぎず、本明細書に開示されたその機能性の仕様が与えられれば、当業者は、開示された同期及び集合機能性を実現するための他の回路を構築できることが理解されよう。例えば、同期ロジック（図１８の９５）は、代わりに専用配線の代替として相互接続３４、７２を介して搬送されるパケットを使用することができるであろう。例えば、Ｓｙｎｃ＿ｒｅｑ及び／又はＳｙｎｃ＿ａｃｋは、それぞれ、１つ又は複数のパケットの形態で送信することができるであろう。
【０１２２】
異なる可能なモードでのＳＹＮＣ命令の機能性を以下に要約する。
【０１２３】
ＳＹＮＣタイル（ローカル、オンタイルバリア同期を実行）
・スーパーバイザランモードは、実行中からワーカーの終了を待機中に移行する。
・全てのワーカースレッドが非アクティブになるまで、スーパーバイザスレッドに対して命令発行を中断する。
・全てのワーカースレッドが非アクティブである場合、集合されたワーカーの終了状態は、ローカルコンセンサスレジスタ（＄ＬＣ）３８を介して利用可能となる。
【０１２４】
ＳＹＮＣチップ（内部のオンチップバリア同期を実行）
・スーパーバイザランモードは、実行中からワーカーの終了を待機中に移行する。
・全てのワーカースレッドが非アクティブになるまで、スーパーバイザスレッドに対して命令発行を中断する。
・全てのワーカースレッドが非アクティブの場合：
−  集合されたローカルワーカーの終了状態は、ローカルコンセンサスレジスタ（＄ＬＣ）３８を介して利用可能となる。
−  内部同期参加が交換ファブリック３４に通知される
−  スーパーバイザは、タイル４が交換ファブリック３４からの内部同期肯定応答を受信するまで、非アクティブのままである。
−  システム全体の終了ステータスは、グローバルコンセンサスレジスタ（＄ＧＣ）４２で更新される。
【０１２５】
ＳＹＮＣ  ｚｏｎｅ＿ｎ（ゾーンｎ間で外部バリア同期を実行）
・スーパーバイザ実行モードは、実行中からワーカーの終了を待機中に移行する。
・全てのワーカースレッドが非アクティブになるまで、スーパーバイザスレッドに対する命令発行を中断する。
・全てのワーカースレッドが非アクティブの場合：
−  集合されたローカルワーカーの終了状態は、ローカルコンセンサスレジスタ（＄ＬＣ）３８を介して利用可能となる。
−  外部同期参加は外部システム、例えば、上述の外部相互接続７２における同期ロジックに通知される。
−  スーパーバイザは、タイル４が外部システム７２からの外部同期肯定応答を受信するまで、中断されたままである
システム全体の終了ステータスは、グローバルコンセンサスレジスタ（＄ＧＣ）４２で更新される。
【０１２６】
前述したように、すべてのタイル４が必然的に同期に参加する必要はない。説明した実施形態では、参加するタイル群は、同期命令のモードオペランドによって設定することができる。しかし、これはあらかじめ定義されたタイル群の選択のみを可能にする。本明細書では、タイル単位で同期参加を選択できることが望ましいことも認識されている。従って、実施形態では、どの個々のタイル４がバリア同期に参加するかを選択するための代替的又は追加の機構が提供される。
【０１２７】
特に、これは、ＳＹＮＣ命令の代わりに１つ又はいくつかのタイル４によって実行されるプロセッサ命令セット内で追加タイプの命令を提供することによって達成される。この命令は、「不参加（abstain）」命令、又は「ＳＡＮＳ」命令（自動非参加同期開始（start automatic non-participatory sync））と呼ばれる。実施形態では、ＳＡＮＳはスーパーバイザスレッドが使用するために確保されている。実施形態では、ＳＡＮＳは単一の即値オペランドを取る。すなわち、ＳＡＮＳ  ｎ＿ｂａｒｒｉｅｒｓ。
【０１２８】
ＳＡＮＳ命令の挙動は、それが実行されるタイルを現行のバリア同期に参加させないものであるが、指定された同期群内のすべてのタイルがＳＹＮＣになるまで待機している他のタイルを保持する（holding up）ことはない。実際には、「私なしで続行せよ」と命令する。ＳＡＮＳ命令が実行されると、ＳＡＮＳ命令のオペコードは、実行ステージ１８における実行ユニット内のロジックをトリガして、同期要求信号（Ｓｙｎｃ＿ｒｅｑ）のインスタンスを内部及び／又は外部同期コントローラ３６、７６（モードに応じて）に送信する。実施形態では、ＳＡＮＳによって生成された同期要求は、ＳＡＮＳを実行したタイル４を包含する任意の同期群９１、９２に、すなわち、このローカルチップ内のタイル４が次に使用しているどの同期群（それらは同期群で一致しなければならないが）に対しても適用され、ＳＡＮＳを実行したものからのＳｙｎｃ＿ｒｅｑは常に有効である。
【０１２９】
従って、同期コントローラロジック３６、７６及び同期群内の他のタイル４の観点からすれば、ＳＡＮＳ命令を実行するタイル４は、ＳＹＮＣ命令を実行するタイル４とまったく同じように現れ、同期バリア及び同期ロジック３６、７６からの同期肯定応答信号（Ｓｙｎｃ＿ａｃｋ）の送信を保持することはない。すなわち、ＳＹＮＣの代わりにＳＡＮＳを実行するタイル４は、当該タイルがさもなければメンバーである任意な同期群に関与するいかなる他のタイル４も保持又は停止させることはない。ＳＡＮＳによって実行されるハンドシェイクは、すべての同期群９１、９２に対して有効である。
【０１３０】
しかし、ＳＹＮＣ命令とは異なり、ＳＡＮＳ命令は、同期ロジック３６、７６からの同期肯定応答信号（Ｓｙｎｃ＿ａｃｋ）を待機するようにスーパーバイザ命令の発行を一時停止させることはない。代わりに、個別のタイルは、ＳＹＮＣ命令を実行した他のタイル４間で行われている現行のバリア同期によって阻害されずに継続することができる。このように、同期を模倣するが待機しないことにより、ＳＡＮＳ命令は、そのタイル４が１つ又は複数のタスク処理を続行しながら、一方で他のタイル４は依然として同期することを可能にする。
【０１３１】
オペランドｎ＿ｂａｒｒｉｅｒｓは、「ポステッド（posted）」同期の数、すなわち、タイルが参加しないであろう将来の同期点（バリア）の数を指定する。代替的に他の実施形態では、ＳＡＮＳ命令がこのオペランドを取り込まず、代わりに、ＳＡＮＳ命令の各実行が１度限りの不参加のみを引き起こすことは除外されない。
【０１３２】
ＳＡＮＳ命令によって、特定のタイル４は、ＢＳＰ動作スケジュールの直接範囲外のタスクを実行する役割を果たしてもよい。例えば、タイル４の大部分が一次計算タスク（複数可）で占有されている間に、ホストメモリへの及び／又はホストメモリからのデータ転送を開始（及び処理）するために、チップ２内に少数のタイル４を割り当てることが望ましい場合がある。このようなシナリオでは、一次計算に直接関与していないタイル４は、自動的な非参加同期機能（ＳＡＮＳ）を使用して、一定の時間帯、同期メカニズムから効果的に切断されると宣言することができる。この特徴を使用する場合、タイル４は、積極的に（すなわちＳＹＮＣ命令の実行を介して）同期準備ができていることを知らせる必要はなく（同期ゾーンのいずれかに対しても）、実施形態では集合された終了ステータスにいかなる寄与もさせない。
【０１３３】
ＳＡＮＳ命令は、それが実行されるタイル４がタイル間同期（又は、それらが同期にも関与する場合は、他の外部リソースとの同期）に積極的に関与しないようにする期間を開始又は延長する。この期間中、このタイル４は、すべてのゾーン内で、同期の準備ができたことを自動的に知らせ、また、実施形態では、グローバル集合コンセンサス＄ＧＣに全く寄与させない。この期間は、このタイル４によって自動的にいくつの将来の同期点が通知されるかを示す符号なし即値オペランド（ｎ＿ｂａｒｒｉｅｒｓ）として表すことができる。ＳＡＮＳの実行時に、オペランドで指定された値ｎ＿ｂａｒｒｉｅｒｓは、それぞれのタイル４のカウントダウンレジスタ＄ＡＮＳ＿ＤＣＯＵＮＴに記憶される。これは、今後追加されるＳｙｎｃ＿ｒｅｑの数を追跡するために使用されるアーキテクチャ状態である。自動非参加型同期メカニズムが現在非アクティブである場合、準備の最初のアサーション（同期要求、Ｓｙｎｃ＿ｒｅｑ）が直ちに実行される。その後のアサーション（assertion）は、前の同期が完了すると（すなわち、同期確認のアサート、Ｓｙｎｃ＿ａｃｋ）、バックグラウンドで行われる。自動非参加同期機構が現在アクティブな場合、カウントダウン・カウンタ・レジスタ＄ＡＮＳ＿ＤＣＯＵＮＴは自動的に更新され、同期肯定応答信号が未確認のまま残らないようになる。自動非参加型同期機構は、専用のハードウェアロジック、好ましくは各タイル４内のそのインスタンスに実装されるが、他の実施形態では、タイル群又は全タイルに対して中央で実装される可能性があることは排除されない。
【０１３４】
終了状態の挙動に関しては、実際には実装に応じていくつかの可能性がある。実施形態では、グローバルに集合された終了状態を得るために、同期ロジック３６、７６は、ＳＹＮＣ命令を実行した特定の同期群内のそれらのタイル４からローカル終了状態のみを集合するが、ＳＡＮＳ命令を実行したそれら（不参加のタイル又は複数のタイル）からは集合しない。その代わりに、グローバルに集合された終了状態は、ＳＹＮＣを実行した同期群内のすべてのタイル４及びＳＡＮＳを実行したそれらのもの（参加しているタイルと不参加のタイル４の両方）からローカル終了状態を集合することによって得られる。後者の場合、グローバルアグリゲーションのための不参加タイル４によって出力されたローカル終了状態は、ＳＹＮＣ命令と同様に（ローカルコンセンサスレジスタ＄ＬＣ３８の説明を参照）、ＳＡＮＳ実行時におけるそのタイルのワーカーの実際にローカルに集合された終了状態であってもよい。あるいは、不参加タイル４によって出力されたローカル「終了状態」は、終了状態がバイナリである実施形態では、デフォルト値、例えば真値（例えば、論理１）であってもよい。これにより、あらゆる偽ローカル終了状態がグローバル終了状態を偽にする実施形態では、不参加タイル４がグローバル終了状態を妨げることが阻止される。
【０１３５】
グローバル終了状態の復帰に関しては、残っているタイルがグローバル集合体を生成するためのローカル終了状態を提出するかどうかにかかわらず、そして、その値が実際の値であったか、デフォルト値であったかにかかわらず、これには２つの可能性が存在する。すなわち、１つの実施形態では、相互接続３４、７２内の同期ロジック３６、７６によって生成されたグローバル集合終了状態は、ＳＹＮＣ命令を実行した参加しているタイル４のグローバルコンセンサスレジスタ＄ＧＣ４２にのみ記憶され、代わりにＳＡＮＳ命令を実行した不参加のタイル４のレジスタには記憶されない。実施形態では、それどころかデフォルト値が、ＳＡＮＳを実行したタイル４（複数可）のグローバルコンセンサスレジスタ＄ＧＸ４２に記憶される（不参加のタイルに）。例えば、このデフォルト値は真であり得るもので、例えばバイナリグローバル終了状態の場合には、論理１である。しかし、別の実施形態では、同期ロジック３６、７６によって生成された実際のグローバル集合体は、ＳＹＮＣ命令を実行した参加タイル４と、代わりにＳＡＮＳ命令を実行した不参加タイル４の両方のグローバルコンセンサスレジスタ＄ＧＣ４２に記憶される。従って、群内のすべてのタイルは、引き続きグローバルに集合された終了状態にアクセスできる。
【０１３６】
図１５は、本明細書で開示されるプロセッサアーキテクチャの応用例、すなわち機械知能への適用例を示す。
【０１３７】
機械知能の分野の当業者にはよく知られているように、機械知能は、機械知能アルゴリズムが知識モデルを学習する学習段階から始まる。このモデルは、相互接続されたノード（すなわち頂点）１０２とエッジ（すなわち、リンク）１０４のグラフからなっている。グラフ内の各ノード１０２は、１つ又は複数の入力エッジ及び１つ又は複数の出力エッジを有する。ノード１０２のいくつかの入力エッジのいくつかは、ノードのいくつかの他の出力エッジであり、それにより、ノードを一緒に接続してグラフを形成する。さらに、１つ又は複数のノード１０２の１つ又は複数の入力エッジが全体としてグラフへの入力を形成し、１つ又は複数のノード１０２の出力エッジの１つ又は複数が全体としてグラフの出力を形成する。時には、所与のノードが、グラフへの入力、グラフからの出力、及び他のノードへの接続など、これらの全てを有している場合もある。各エッジ１０４は、値又はより頻繁にテンソル（ｎ次元行列）を伝達し、これらは入力エッジ及び出力エッジでノード１０２に且つノードから提供される入力及び出力をそれぞれ形成する。
【０１３８】
各ノード１０２は、その１つ又は複数の入力エッジで受信されたその１つ又は複数の入力の関数を表し、この関数の結果は１つ又は複数の出力エッジに提供される出力である。各関数は、１つ又は複数の個別のパラメータ（必ずしも乗算型重みである必要はないが、時には重みとも呼ばれる）によってパラメータ化される。一般に、異なるノード１０２によって表される関数は、異なる形態の関数であってもよく、及び／又は異なるパラメータによってパラメータ化されてもよい。
【０１３９】
さらに、各ノード関数の１以上のパラメータの各々は、それぞれのエラー値によって特徴付けられる。さらに、それぞれの条件は、各ノード１０２のパラメータ内のエラーに関連付けされてもよい。単一のパラメータによってパラメータ化された関数を表すノード１０２については、条件は単純な閾値であってもよく、すなわち、エラーが指定された閾値内にある場合に条件が満たされるが、エラーが閾値を超えている場合には満たされない。２つ以上の個別のパラメータによってパラメータ化されたノード１０２については、許容可能なエラーレベルに達したそのノード１０２に対する条件がより複雑であり得る。例えば、条件は、そのノード１０２の各パラメータがそれぞれの閾値内にある場合にのみ満たすことができる。別の実施例として、結合されたメトリックは、同じノード１０２に対する異なるパラメータにおけるエラーを組み合わせて定義され、結合されたメトリックの値が指定された閾値内にあるという条件で満たすことができるが、さもなければ、結合されたメトリックの値が閾値を超えている場合（メトリックの定義に応じてその逆も可）、条件は満足されない。条件が何であっても、これは、ノードのパラメータにおけるエラーが一定のレベル又は受容度以下になるかどうかの尺度を与える。一般に、任意の適切なメトリックを使用してもよい。条件又はメトリックは、全てのノードについて同じであってもよく、ノードの各々について異なるものであってもよい。
【０１４０】
学習段階では、アルゴリズムは経験データ、すなわちグラフへの入力の異なる可能な組み合わせを表す複数のデータポイントを受信する。より多くの経験データが受信されるにつれて、アルゴリズムは、経験データに基づいてグラフ内の様々なノード１０２のパラメータを徐々に調整して、パラメータのエラーを最小限に抑えるように試行する。目標は、グラフの出力が所与の入力に対する所望の出力に可能な限り近づくようにパラメータの値を探し出すことである。グラフ全体がこのような状態に向かうにつれて、グラフは収束すると言われる。適切な収束度の後に、グラフを使用して、予測又は推論を実行する、すなわち、いくつか所与の入力に対するアウトカムを予測するか、又はいくつか所与の出力についての原因を推測することができる。
【０１４１】
学習段階は、さまざまな可能な形態をとることができる。例えば、教師付きアプローチでは、入力経験データはトレーニングデータ、すなわち既知の出力に対応する入力の形をとる。各データポイントで、アルゴリズムは、出力が与えられた入力の既知の出力にさらに近づくようにパラメータを調整することができる。その後の予測段階では、グラフを使用して、入力クエリーを近似予測出力に（又は推論する場合、その逆も可）マッピングすることができる。他のアプローチも可能である。例えば、教師なしのアプローチでは、入力データごとに参照アウトカムの概念がなく、代わりに機械知能アルゴリズムが出力データ内で独自の構造を識別するために残される。あるいは、補強アプローチでは、アルゴリズムは、入力経験データ内の各データポイントに対して少なくとも１つの可能な出力を試行し、この出力が正か負か（そして、潜在的にそれが正又は負である可能性の度合い）、例えば、勝ち負け、報酬又は罰、又はそのようなものを通知される。多くの試行を経て、アルゴリズムは、ポジティブなアウトカムをもたらすであろう入力を予測し得るように、グラフのパラメータを徐々に調整することができる。グラフを学習するための様々なアプローチ及びアルゴリズムは、多分、機械学習の当業者には周知であると思われる。
【０１４２】
本明細書に開示された技術の例示的な適用によれば、各ワーカースレッドは、機械知能グラフにおいてノード１０２のそれぞれ個別の１つに関連付けられた計算を実行するようにプログラムされる。この場合、ノード１０２間のエッジ１０４の少なくとも一部は、スレッド間のデータの交換に対応し、一部は、タイル間の交換を伴い得る。さらに、ワーカースレッドの個別の終了状態は、個別のノード１０２がそのノードのパラメータの収束のために個別の条件を満たしているかどうか、すなわち、エラー空間内の許容可能なレベル又は領域内に収まる１つのパラメータ又は複数のパラメータにエラーを有しているかどうかを表すためにプログラマによって使用される。例えば、これは、個々の終了状態の各々が個々のビットであり、集合された終了状態が個々の終了状態のＡＮＤ（又は０が正であるとみなされる場合には同等にＯＲ）の場合、あるいは、個々の終了状態がすべて真であるか、偽又はミックスであるかを表す三値である場合の実施形態の一使用例である。従って、終了状態レジスタ３８内の単一のレジスタ値を調べることによって、プログラムはグラフ全体又は少なくともグラフのサブ領域が許容可能な程度に収束したかどうかを特定することができる。
【０１４３】
これの別の変形として、集合体が個々の信頼値の統計的集合体の形態をとる実施形態を使用することができる。この場合、各個々の終了状態は、それぞれのスレッドによって表されるノードのパラメータが許容エラーに達したという確信度（例えば、百分率のように）を表す。次いで、集合された終了状態を使用して、グラフ又はグラフのサブ領域が許容可能な程度に収束したかどうかに関する全体的な信頼度を特定することができる。
【０１４４】
マルチタイル配列６の場合、各タイルはグラフのサブグラフを実行する。各サブグラフは、１つ以上のスーパーバイザスレッドからなるスーパーバイザサブプログラムと、ワーカーのいくつか又は全てがコードレットの形態をとるワーカースレッドのセットとを含む。
【０１４５】
そのような適用、又は実際には、グラフ内の各ノードを表すために各ワーカースレッドが使用されるグラフベースの適用では、各ワーカーに含まれる「コードレット」は、持続状態及び１つの頂点の入力及び／出力で動作するソフトウェア手順として定義することができ、ここでコードレットは：
・１つのワーカースレッドレジスタコンテキストで起動され、「実行（ｒｕｎ）」命令を遂行するスーパーバイザスレッドによって１つのバレルスロットで実行され、
・他のコードレット又はスーパーバイザとの通信なしで完了し（コードレットが終了したときのスーパーバイザへの返信を除く）、
・「実行」命令によって提供されるメモリポインタを介して、頂点の持続状態と、そのバレルスロットに固有なメモリ内の非持続的な作業領域とにアクセスし、そして、
・その最後の命令として「ＥＸＩＴ」を実行すると、使用していたバレルスロットがスーパーバイザに返され、終了命令で指定された終了状態がスーパーバイザで可視なタイルのローカル終了状態に集合される。
【０１４６】
グラフ（又はサブグラフ）を更新するとは、エッジによって定義される因果関係と一致する順序で、各構成要素の頂点を一度更新することを意味する。頂点を更新するとは、頂点状態でコードレットを実行することを意味する。コードレットは、頂点の更新手順であって、通常、１つのコードレットは多くの頂点に関連付けられている。スーパーバイザは頂点ごとに１つのＲＵＮ命令を実行する。そのような各命令は頂点状態アドレス及びコードレットアドレスを指定する。
【０１４７】
上記の実施形態はほんの一例として記載されていることが理解されよう。
【０１４８】
例えば、終了状態集合機構の適用可能性は、スーパーバイザスレッドに対して別個のコンテキストが提供されているか、スーパーバイザスレッドがスロット内で動作してからそのスロットをワーカーに放棄する上述のアーキテクチャに限定されない。例えば、別の構成では、スーパーバイザはそれ自身の専用スロット内で動作してもよい。
【０１４９】
さらに、「スーパーバイザ」及び「ワーカー」という用語は、明示的に記載されている特定の責任を意味するものではなく、特に、スーパーバイザスレッドがワーカーにタイムスロットを放棄する上述のスキームに必ずしも限定されるなどするものではない。一般に、ワーカースレッドは、何らかの計算タスクが割り当てられているスレッドを参照することがある。スーパーバイザは、１つ以上のスレッドのアウトカムに応じて、ワーカースロットにワーカーを割り当て、及び／又は複数のスレッド間でバリア同期を実行し、及び／又は依存する任意の制御フロー操作（分岐など）を実行することなど、動作に対して責任を負うスレッドを管理又は調整するようなものを表してもよい。
【０１５０】
インターリーブされたタイムスロット等のシーケンスを参照する場合、これは必ずしも参照されるシーケンスが全ての可能なスロット又は利用可能なスロットを構成することを意味するものではない。例えば、当該シーケンスは、全ての可能なスロット又は現在アクティブなスロットのみであってもよい。スケジュールされたシーケンスに現在含まれていない他の潜在的なスロットが存在する可能性が必ずしも排除される訳ではない。
【０１５１】
本明細書で使用するタイルという用語は、必ずしも特定の形態（topography）などに限定されるものではなく、一般には、同様のモジュールの配列に、典型的には少なくともそのうちのいくつかは同じチップ（すなわち、同じダイ）上にある処理ユニット１０及び対応するメモリ１１を含む任意の処理リソースのモジュラーユニットを指してもよい。
【０１５２】
さらに、本開示の範囲は、時間決定性内部相互接続又は非時間決定性外部相互接続に限定されない。本明細書で開示される同期及び集合メカニズムは、完全に時間決定論性な構成、又は完全に非時間決定論性な構成で使用することもできる。
【０１５３】
さらに、本明細書において、タイル群又は複数のタイルなどの間で同期又は集合を行うことについて言及される場合、これは、明示的に記載しない限り、チップ上の全てのタイル又はシステム内の全てのタイルを必ずしも指す必要はない。例えば、ＳＹＮＣ及びＥＸＩＴ命令は、所与のチップ上のタイル４の特定のサブセット及び／又は所与のシステム内のチップ２のサブセットに関してのみ同期及び集合を実行するように設定することができる一方、所与のチップ上のいくつかの他のタイル４、及び／又は所与のシステム内のいくつかの他のチップは、所与のＢＳＰ群に参加しなくてもよく、手元の群によって実行されている計算とは無関係ないくつかの完全に別個のタスクセットにも使用される可能性がある。
【０１５４】
また、ＳＹＮＣ命令の特定のモードについて説明したが、本開示の範囲は、より一般的には、そのようなモードに限定されない。例えば、上述したモードのリストは必ずしも網羅的ではない。すなわち、他の実施形態では、ＳＹＮＣ命令はより少ないモードを有していてもよく、例えば、ＳＹＮＣが外部同期の異なる階層レベルをサポートする必要はなく、あるいは、オンチップ同期とチップ間同期を区別する必要はない（すなわち、タイル間モードでは、オンチップであるかオフチップであるかにかかわらず常に全てのタイルに関連して動作する）。さらに別の実施形態では、ＳＹＮＣ命令は、オペランドのようなモードを全くとる必要はない。例えば、実施形態では、同期及び終了状態集合体の異なるレベルのために、ＳＹＮＣ命令の異なるバージョン（異なるオペコード）を提供することができる（オンタイル同期及びタイル間、オンチップ同期のための異なるＳＹＮＣ命令のような）。あるいは、他の実施形態では、専用のＳＹＮＣ命令は、タイル間同期のためにのみ提供されてもよい（必要に応じて、汎用ソフトウェアで実行されるスレッド間のタイル間同期を残して）。
【０１５５】
さらに、同期ゾーンは、階層的（すなわち、互いに入れ子にされたもの）に限定されず、他の実施形態では、選択可能な同期ゾーンは、１つ又は複数の非階層群で構成され又は含んでいてもよい（その群のすべてのタイルは、単一で他の選択可能な群の中に入れ子になっていない）。
【０１５６】
さらに、上述の同期方式は、実施形態において、マルチタイルプロセッサ以外の外部リソースの参加を排除するものではなく、例えば、ホストプロセッサなどのＣＰＵプロセッサ、又は１つ又は複数のネットワークカード、ストレージデバイス、及び／又はＦＰＧＡなどのプロセッサではない１つ又は複数のコンポーネントであってもよい。例えば、いくつかのタイルは、これらの転送がそのタイルの計算負担を形成する外部システムとのデータ転送に従事することを選択することができる。この場合、転送は次のバリアの前に完了する必要がある。場合によっては、タイルの終了状態は、外部リソースとの通信結果に依存してもよく、このリソースは、代理的に終了状態に影響を及ぼしてもよい。代替的に又は追加的に、マルチタイルプロセッサ以外のリソース、例えば、ホスト又は１つ以上のＦＰＧＡを同期ネットワーク自身に組み込むこともあり得る。すなわち、バリア同期が満たされ、タイルが次の交換段階に進むためには、この／これらの追加リソースからＳｙｎｃ＿ｒｅｑなどの同期信号が必要となる。さらに、実施形態では、集合されたグローバル終了状態は集合体に、例えば、ＦＰＧＡから外部リソースの終了状態を含み得る。
【０１５７】
開示された技術の他の応用及び変形は、本明細書の開示が与えられると当業者には明らかになるであろう。本開示の範囲は、記載された実施形態によって制限されるのではなく、添付の特許請求の範囲によってのみ限定される。
【図１】
2019079528.tif 000003
【図２】
2019079528.tif 000004
【図３】
2019079528.tif 000005
【図４】
2019079528.tif 000006
【図５】
2019079528.tif 000007
【図６】
2019079528.tif 000008
【図７】
2019079528.tif 000009
【図８】
2019079528.tif 000010
【図９】
2019079528.tif 000011
【図１０】
2019079528.tif 000012
【図１１】
2019079528.tif 000013
【図１２】
2019079528.tif 000014
【図１３】
2019079528.tif 000015
【図１４】
2019079528.tif 000016
【図１５】
2019079528.tif 000017
【図１６】
2019079528.tif 000018
【外国語明細書】
2019079528000001.pdf