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