(57)【要約】【課題】計算段階と交換段階とを切り替えるために同期信号を生成するように動作可能な同期モジュールを備えるコンピュータに関する。【解決手段】コンピュータの処理ユニットは共通のクロックに従ってそれらのローカルプログラムを実行するように構成され、ローカルプログラムは交換段階において送信命令を実行して送信時間にデータパケットを接続ワイヤの出力セットに送信し、データパケットは少なくとも１つの受信側処理ユニットに宛てられているが通信先識別子を有しておらず、所定のスイッチ時間において、受信側処理ユニットは、そのローカルプログラムからのスイッチ制御命令を実行してそのスイッチング回路を制御して、ワイヤのその入力セットをスイッチングファブリックに接続し、受信時間においてデータパケットを受信し、送信時間、スイッチ時間及び受信時間は、同期信号に関して共通クロックによって管理される。【選択図】図１
2019079529.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータであって、
各々がローカルプログラムを保持する命令記憶装置を有する複数の処理ユニットと、前記ローカルプログラムを実行する実行ユニットと、データを保持するデータ記憶装置と、一組の入力ワイヤを有する入力インターフェースと、一組の出力ワイヤを有する出力インターフェースと、
前記出力ワイヤの個別のセットによって前記処理ユニットの各々に接続され、各処理ユニットによって制御可能なスイッチング回路を介して、個別の前記入力ワイヤによって前記処理ユニットの各々に接続可能なスイッチングファブリックと、
前記コンピュータを制御して計算段階と交換段階とを切り替えるために同期信号を生成するように動作可能な同期モジュールと、
を備え、
前記処理ユニットは、共通のクロックに従ってそれらのローカルプログラムを実行するように構成され、前記ローカルプログラムは、前記交換段階において、少なくとも１つの処理ユニットがそのローカルプログラムから送信命令を実行して送信時間にデータパケットを接続ワイヤのその出力セットに送信するものであり、前記データパケットは、少なくとも１つの受信側処理ユニットに宛てられているが、所定のスイッチ時間において、通信先識別子を有しておらず、
前記受信側処理ユニットは、そのローカルプログラムからのスイッチ制御命令を実行してそのスイッチング回路を制御して、ワイヤのその入力セットを前記スイッチングファブリックに接続し、受信時間において前記データパケットを受信し、前記送信時間及びスイッチ時間と受信時間は、前記同期信号に関して前記共通クロックによって管理されるコンピュータ。
【請求項２】
前記送信命令は、前記データパケットが送信されるべき前記データ記憶装置内の位置を識別する送信アドレスを明示的に定義する、請求項１に記載のコンピュータ。
【請求項３】
前記送信命令には明示的に送信アドレスが定義されておらず、前記データパケットは、前記送信命令によって暗黙的に定義されたレジスタで定義された送信アドレスから送信される、請求項１に記載のコンピュータ。
【請求項４】
前記ローカルプログラムは、前記暗黙のレジスタ内で前記送信アドレスを更新するための送信アドレス更新命令を含む、請求項３に記載のコンピュータ。
【請求項５】
前記送信時間は、前記命令が実行される前記送信時間に後続する既知のクロックサイクル数である、請求項１〜４のいずれか１項に記載のコンピュータ。
【請求項６】
前記スイッチング回路は、その処理ユニットに接続された出力ワイヤの出口セットと、前記スイッチングファブリックに接続された入力ワイヤの複数のセットとを有するマルチプレクサを備え、
前記入力ワイヤの複数のセットのうちの１つが、前記処理ユニットによって制御されるように選択される、請求項１〜５のいずれか１項に記載のコンピュータ。
【請求項７】
前記受信側処理ユニットは、前記データパケットを受信し、メモリポインタによって識別されるメモリ位置でそれを前記データ記憶装置にロードするように構成される、請求項１〜６のいずれか１項に記載のコンピュータ。
【請求項８】
前記メモリポインタは、各データパケットが前記データ記憶装置にロードされた後に自動的にインクリメントされる、請求項７に記載のコンピュータ。
【請求項９】
前記受信側処理ユニットの前記ローカルプログラムは、前記メモリポインタを更新するメモリポインタ更新命令を含む、請求項７に記載のコンピュータ。
【請求項１０】
前記送信命令は、送信されるべきデータパケットの数を識別し、各データパケットは、異なる送信時間に紐付けられる、請求項１〜９のいずれか１項に記載のコンピュータ。
【請求項１１】
前記入力ワイヤのセットの１つは、ヌル入力に接続される、請求項６に記載のコンピュータ。
【請求項１２】
前記受信側処理ユニットは、より早い時間に送信命令を実行した前記処理ユニットと同じ処理ユニットであり、これにより、同じ前記処理ユニットがデータパケットを送信し、後にそのデータパケットを受信するように構成される、請求項１〜１１のいずれか１項に記載のコンピュータ。
【請求項１３】
複数の処理ユニットは、個別のデータパケットを送信するために個別の送信命令を実行するように構成され、前記データパケットのうちの少なくともいくつかは、いずれの受信側処理ユニットにも向けられない、請求項１〜１２のいずれか１項に記載のコンピュータ。
【請求項１４】
前記処理ユニットの少なくとも２つは送信ペアで協同し、第１のデータパケットは接続ワイヤのその出力セットを介して前記ペアの第１処理ユニットから送信され、第２のデータパケットは前記ペアの前記第２処理ユニットの接続ワイヤの前記出力セットを介して前記ペアの前記第１処理ユニットから送信されて、ダブル幅伝送を行う、請求項１〜１３のいずれか１項に記載のコンピュータ。
【請求項１５】
少なくとも２つの前記処理ユニットが受信ペアとして動作し、前記ペアの各処理ユニットは、そのスイッチング回路を制御して、ワイヤのその個別の入力セットをスイッチングファブリックに接続し、送信ペアの個別のタイルから個別のデータパケットを受信する、請求項１〜１４のいずれか１項に記載のコンピュータ。
【請求項１６】
ローカルプログラムを保持する命令記憶部を各々が有する複数の処理ユニットと、前記ローカルプログラムを実行する実行ユニットと、データを保持するためのデータ記憶装置と、入力ワイヤのセットを有する入力インターフェース及び出力ワイヤのセットを有する出力インターフェースと、前記出力ワイヤの個別のセットによって前記処理ユニットの各々に接続され、各処理ユニットによって制御可能なスイッチング回路を介して、それらの個別の入力ワイヤによって前記処理ユニットの各々に接続可能なスイッチングファブリックと、前記コンピュータを制御して計算段階と交換段階とを切り替えるため同期信号を生成するように動作可能な同期モジュールとを備えるコンピュータにおける関数を計算する方法であって、
前記処理ユニットが共通クロックに従って前記計算段階でそれらのローカルプログラムを実行し、ここで、前記交換段階において、少なくとも１つの処理ユニットがそのローカルプログラムからの送信命令を実行して送信時間にデータパケットを接続ワイヤの出力セットに送信し、前記データパケットは少なくとも１つの受信側処理ユニットに宛てられているが、通信先識別子を有しておらず、
所定のスイッチ時間において、前記受信側処理ユニットがそのローカルプログラムからのスイッチ制御命令を実行して前記スイッチング回路を制御し、ワイヤの入力セットを前記スイッチングファブリックに接続して受信時間に前記データパケットを受信し、
前記送信時間、スイッチ時間、及び受信時間は、前記同期信号に関して前記共通クロックによって管理される、方法。
【請求項１７】
前記は、複数の相互接続されたノードを含む前記静的なグラフの形態で提供され、各ノードは前記ローカルプログラムのコードレットによって実装される、請求項１６に記載の方法。
【請求項１８】
前記計算段階では、各コードレットは結果を生成するためにデータ処理し、前記結果のいくつかは後続の計算段階には必要とされず、いずれの受信側処理ユニットによっても受信されない、請求項１７に記載の方法。
【請求項１９】
前記交換段階では、前記データパケットが前記スイッチングファブリック及びスイッチング回路を介して処理ユニット間で送信される、請求項１６〜１８のいずれか１項に記載の方法。
【請求項２０】
各処理ユニットは、自体の計算段階が完了したことを前記同期モジュールに示し、前記交換段階を開始するために、すべての処理ユニットが自体の計算段階が完了したことを示すと、前記同期信号が前記同期モジュールによって生成される、請求項１６〜１９のいずれか１項に記載の方法。
【請求項２１】
前記グラフは機械学習機能を表す、請求項１７に記載の方法。
【請求項２２】
前記交換段階では、データパケットは一連の一時記憶装置を介して、パイプライン方式で前記スイッチングファブリックを通過して送信され、各記憶装置が前記共通クロックの１サイクル分のデータパケットを保持する、請求項１６〜２１に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、複数のタイルを含むプロセッサにおいて、複数の異なるタイルのワークロード（workload）を同期させることに関し、各タイルはローカルメモリを有する処理ユニットからなる。特に、本開示は、バルク同期並列（ＢＳＰ）コンピューティングプロトコルに関し、これにより、群内のタイルのいずれかが交換段階に進むことができる前に、タイル群の各々が計算段階を完了しなければならない。
【背景技術】
【０００２】
コンピューティングの並列性は、さまざまな形態をとる。プログラムフラグメントは、同時に実行するように（時間的に重複しているが実行リソースを共有してもよい）、あるいは異なるリソース上でできる限り同時に実行する並列に編成することができる。
【０００３】
コンピューティングにおける並列性は、複数の相互接続されたプロセッサタイルのアレイ、又はマルチスレッド処理ユニット、又は実際には各タイルがマルチスレッド処理ユニットを備えるマルチタイルアレイなどの多数の方法で達成することができる。
【０００４】
同じチップ（又は同じ集積回路パッケージ内のチップ）上に複数のタイルのアレイを含むプロセッサによって並列性が達成される場合、各タイルは、ローカルメモリ（プログラムメモリ及びデータメモリを含む）を有するそれ自体の別個なそれぞれの処理ユニットメモリを備える。その結果、プログラムコードの別個な部分を異なるタイル上で同時に実行することができる。タイルは、タイル間で通信するために異なるタイル上でコードを実行することを可能にするオンチップ相互接続を介して互いに接続される。場合によっては、各タイル上の処理ユニットは、バレルスレッド処理ユニット（又は他のマルチスレッド処理ユニット）の形態をとってもよい。各タイルは複数のインターリーブされたスレッドを同時に実行できるように、１組のコンテキスト及び実行パイプラインを有していてもよい。
【０００５】
一般に、アレイの異なるタイル上で動作するプログラムの部分間には依存関係が存在することがある。従って、そのコードが依存しているデータに先んじて実行されているあるタイル上のあるコードが、他のタイル上の別のコードによって利用可能にされるのを防ぐ技術が必要となる。これを達成するための多くの可能なスキームが存在するが、ここで対象となるスキームは「バルク同期並列（ＢＳＰ）」として知られている。ＢＳＰによれば、各タイルは交互に計算段階と交換段階を実行する。計算段階では、各タイルは１つ以上の計算タスクをタイル上でローカルに実行するが、その計算結果をタイルの他のものと通信しない。交換段階では、各タイルは、前の計算段階からの計算の１つ以上の結果を、群内の１つ以上の他のタイルに交換することが許可されるが、そのタイルが交換段階を終了するまで、未だ新しい計算段階を開始しない。さらに、ＢＳＰ原理のこの形態によれば、バリア同期は、計算段階から交換段階へ、又は交換段階から計算段階へ、又はその両方へと遷移する時点に置かれる。すなわち、（ａ）群内のいずれかが次の交換段階に進むことが許可される前に、全てのタイルがそれぞれの計算段階を完了する必要があるか、（ｂ）群内のいずれかのタイルが次の計算段階に進むことが許可される前に、群内の全てのタイルがそれぞれの交換段階を完了する必要があるか、（ｃ）これらの両方である。本明細書で使用される場合、「計算段階と交換段階との間」という語句は、これらのすべての選択肢を包含する。
【０００６】
マルチスレッド及び／又はマルチタイル処理の使用例は、機械知能に見られる。機械知能の当業者によく知られているように、機械知能アルゴリズムは「知識モデルを生成することができる」、知識モデルを使用して学習アルゴリズムと推論アルゴリズムを実行する。知識モデル及びアルゴリズムを組み込んだ機械知能モデルは、複数の相互接続されたノードのグラフとして表すことができる。各ノードは、その入力の関数を表す。いくつかのノードはグラフへの入力を受け取り、あるものは１つ以上の他のノードからの入力を受信する。いくつかのノードの出力活性化は他のノードの入力を形成し、いくつかのノードの出力はグラフの出力を提供し、グラフへの入力はいくつかのノードへの入力を提供する。さらに、各ノードにおける機能は、１つ又は複数の個別のパラメータ、例えば、重量など１つ又は複数のパラメータによってパラメータ化される。学習段階では、経験的な入力データのセットに基づいて、グラフ全体が可能な入力の範囲に対して所望の出力を生成するように、様々なパラメータの値を探し出す。確率的勾配降下法に基づく誤差逆伝搬法など、これを行うための様々なアルゴリズムが当技術分野で知られている。複数の反復にわたって、パラメータは徐々にそれらの誤差を減少させるように調整され、結果としてグラフは解に向かって収束する。次に後段では、学習されたモデルを使用して、入力の指定されたセットが与えられた出力の予測を行い、あるいは、出力の指定されたセットが与えられた入力（原因）についての推論を行うことができ、あるいは、それに対して他の内観的な形態の分析を行うことができる。
【０００７】
各ノードの実装はデータ処理を含むことがあり、グラフの相互接続はノード間で交換されるデータに対応する。典型的には、各ノードの処理の少なくともいくつかは、グラフ内のノードのいくつか又はすべてとは独立して実行することが可能であり、従って、大きなグラフは、膨大な並列処理の機会を顕在化させる。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上述したように、知識モデルを表す機械知能モデル及び知識モデルが学習と推論のためにどのように使用されるかに関するアルゴリズム情報は、一般に、複数の相互接続されたノードのグラフによって表すことができ、各ノードはデータに対する処理要求を有する。グラフの相互接続は、ノード間で交換されるべきデータを示し、その結果、ノードで実行されるプログラムフラグメント間の依存関係を引き起こす。一般に、ノードでの処理は別のノードとは独立して実行することができるため、大きなグラフは膨大な並列処理を顕在化させる。高度に分散された並列マシンは、そのような機械知能モデルの計算に適したマシン構造である。この機能により、マシンは特定の時間決定論的保証を行うように設計することができる。
【０００９】
本開示で利用される知識モデルの要素は、グラフの一般的に静的性質である。すなわち、グラフを含むノード及びグラフの構造は、通常、機械知能アルゴリズムの実行中には変化しない。本発明者らは、機械知能モデルに対する計算を最適化するために一定の時間決定論的保証を行うマシンを作製した。これにより、コンパイラは、決定的に時間をかけてノード間で作業を分割しスケジュールすることができるようになる。知識モデルに基づいて作業負荷を処理するように最適化されたコンピュータを設計する際の重要な最適化については、以下に説明する実施形態で利用されるのがこの時間決定論である。
【課題を解決するための手段】
【００１０】
本発明の一態様によれば、各々がローカルプログラムを保持する命令記憶装置を有する複数の処理ユニットと、ローカルプログラムを実行する実行ユニットと、データを保持するデータ記憶装置と、一組の入力ワイヤを有する入力インターフェースと、一組の出力ワイヤを有する出力インターフェースと、出力ワイヤの個別のセットによって処理ユニットの各々に接続され、各処理ユニットによって制御可能なスイッチング回路を介して、個別の入力ワイヤによって処理ユニットの各々に接続可能なスイッチングファブリックと、コンピュータを制御して計算段階と交換段階とを切り替えるために同期信号を生成するように動作可能な同期モジュールとを備え、処理ユニットは、共通のクロックに従ってそれらのローカルプログラムを実行するように構成され、ローカルプログラムは、交換段階において、少なくとも１つの処理ユニットがそのローカルプログラムから送信命令を実行して送信時間にデータパケットを接続ワイヤのその出力セットに送信するものであり、データパケットは、少なくとも１つの受信側処理ユニットに宛てられているが、通信先識別子を有しておらず、所定のスイッチ時間において、受信側処理ユニットは、そのローカルプログラムからのスイッチ制御命令を実行してそのスイッチング回路を制御して、ワイヤのその入力セットをスイッチングファブリックに接続し、受信時間においてデータパケットを受信し、送信時間及びスイッチ時間と受信時間とは、同期信号に関して共通クロックによって管理されるコンピュータが提供される。
【００１１】
本発明の別の態様は、ローカルプログラムを保持する命令記憶部を各々が有する複数の処理ユニットと、ローカルプログラムを実行する実行ユニットと、データを保持するためのデータ記憶装置と、入力ワイヤのセットを有する入力インターフェース及び出力ワイヤのセットを有する出力インターフェースと、出力ワイヤの個別のセットによって処理ユニットの各々に接続され、各処理ユニットによって制御可能なスイッチング回路を介して、それらの個別の入力ワイヤによって処理ユニットの各々に接続可能なスイッチングファブリックと、コンピュータを制御して計算段階と交換段階とを切り替えるため同期信号を生成するように動作可能な同期モジュールとを備えるコンピュータにおける関数を計算する方法であって、処理ユニットが共通クロックに従って計算段階でそれらのローカルプログラムを実行し、ここで、交換段階において、少なくとも１つの処理ユニットがそのローカルプログラムからの送信命令を実行して送信時間にデータパケットを接続ワイヤのその出力セットに送信し、データパケットは、少なくとも１つの受信側処理ユニットに宛てられているが、通信先識別子を有しておらず、所定のスイッチ時間において、受信側処理ユニットがそのローカルプログラムからのスイッチ制御命令を実行してスイッチング回路を制御し、ワイヤのその入力セットをスイッチングファブリックに接続して受信時間にデータパケットを受信し、送信時間と、スイッチ時間、及び受信時間は、同期信号に関して共通クロックによって管理されることからなる方法が提供される。
【００１２】
原理的には、同期信号は、スイッチを計算段階から交換段階に、又は交換段階から計算段階に制御するために生成されることがあり得る。しかしながら、本明細書で定義される時間決定論的アーキテクチャでは、同期信号が生成されて交換段階を開始することが好ましい。一実施形態では、各処理ユニットは、自体の計算段階が完了したことを同期モジュールに指示し、交換段階を開始するために、すべての処理ユニットが自体の計算段階が完了したことを示すと、同期信号が同期モジュールによって生成される。
【００１３】
送信時間は、時間決定論的交換が適切に完了することを可能にするために予め決定されるべきである。送信命令が実行される時刻が既知であることを前提として、これは送信命令が実行された時間後に既知のクロックサイクル数で判定することができる。あるいは、送信時間は、送信命令の実行された後の既知の時間から、何らかの他の方法で判定される既知の遅延でもあり得る。重要なことは、送信時間が意図された受信側処理ユニットの受信時間に対して既知であることである。
【００１４】
送信命令の特徴は、送信命令が、データパケットが送信されるデータ記憶装置内の位置を識別する送信アドレスを明示的に定義することを含むことができることである。あるいは、送信命令に明示的には送信アドレスが定義されておらず、送信命令によって暗黙的に定義されたレジスタで定義された送信アドレスからデータパケットが送信される。ローカルプログラムは、暗黙のレジスタ内で送信アドレスを更新するための送信アドレス更新命令を含むことができる。
【００１５】
本明細書に記載の実施形態では、スイッチング回路は、その処理ユニットに接続された出力ワイヤのセットと、スイッチングファブリックに接続された入力ワイヤの複数のセットとを有するマルチプレクサを備え、これにより、入力ワイヤの複数のセットのうちの１つが、処理ユニットによって制御されるように選択される。各セットは３２ビットからなり得る。６４ビットデータを利用する場合、１対のマルチプレックスを処理ユニットに接続して一緒に制御することができる。
【００１６】
記載された実施形態では、受信側処理ユニットは、データパケットを受信し、メモリポインタによって識別されるメモリ位置でデータ記憶装置にロードするように構成される。メモリポインタは、各データパケットがデータ記憶装置にロードされた後に自動的にインクリメントされ得る。あるいは、受信側処理ユニットのローカルプログラムは、メモリポインタを更新するメモリポインタ更新命令を含むことができる。
【００１７】
送信命令は、送信されるべきデータパケットの数を識別するように構成されてもよく、各データパケットは、これらが処理ユニットから連続的に送信されるため、異なる送信時間に紐付けられる。
【００１８】
マルチプレクサへの入力ワイヤのセットの１つは、ヌル入力に接続されるように制御することができる。これは、さもなければその処理ユニットに到達するデータを無視するために使用されることもあり得る。
【００１９】
特定のデータパケットを受信することを意図された受信側処理ユニットは、より早い時間に送信命令を実行したものと同じ処理ユニットであってもよく、これにより、同じ処理ユニットはデータパケットを送信し、後にそのデータパケットを受信するように構成されている。処理ユニットの「自分自身に送信する」ことの目的は、他の処理ユニットから受信したデータでインターリーブされた着信データのそのメモリ内おける配列を遵守することである。いくつかの実施形態では、少なくとも２つの処理ユニットが送信ペアで協働し、第１のデータパケットがそのペアの第１の処理ユニットから接続ワイヤのその出力セットを介して送信され、第２のデータパケットは、ペアの第１の処理ユニットから、ペアの第２の処理ユニットの接続ワイヤの出力セットを介して送信され、ダブル幅の伝送を行う。いくつかの実施形態では、処理ユニットの少なくとも２つは受信ペアとして動作し、ペアの各処理ユニットはそのスイッチング回路を制御して、ワイヤの個別のその入力セットをスイッチングファブリックに接続し、送信ペアの個別のタイルから個別のデータパケットを受信する。
【００２０】
複数の処理ユニットは、個別のデータパケットを送信するために個別の送信命令を実行するように構成されてもよく、データパケットのうちの少なくともいくつかは、いずれの受信側処理ユニットにも向けられない。
【００２１】
計算されている関数は、複数の相互接続されたノードを含む静的グラフの形態で提供されてもよく、各ノードはローカルプログラムのコードレット（codelet）によって実装される。コードレットは、グラフ内の頂点（ノード）を定義し、実行のアトミックスレッドと看做すことができる（後述の説明を参照）。計算段階では、各コードレットは結果を生成するためにデータ処理してもよく、その結果の一部は後続の計算段階には必要とされず、いずれの受信側処理ユニットによっても受信されない。それらは効果的に破棄されるが、積極的な破棄動作にする必要はない。交換段階では、データパケットは、スイッチングファブリック及びスイッチング回路を介して処理ユニット間で送信される。交換段階では、いくつかの命令が交換段階を実装するためにローカルプログラムから実行されることに留意されたい。これらの命令には、送信命令が含まれる。計算段階は計算の責任を負う一方、同期が維持されるようにこれらの関数にはローカルプログラムのタイミングに依存するデータが含まれていないという条件で、交換段階中にいくつかの計算関数又は論理関数を含めることが可能である。
【００２２】
本明細書で説明する時間決定論的アーキテクチャは、グラフが機械知能機能を表す状況において特に有用である。
【００２３】
スイッチングファブリックは、交換段階において、データパケットが、一連の一時記憶装置を介してパイプライン形式でデータパケットが伝送され、一時記憶装置の各々が共通クロックの１サイクル分のデータパケットを保持するように構成することができる。
【００２４】
本発明をよりよく理解し、どのように実施することができるかを示すために、以下の図面を例として参照する。
【図面の簡単な説明】
【００２５】
【図１】単一チッププロセッサのアーキテクチャを概略的に示す。
【図２】スイッチングファブリックに接続されたタイルの概略図である。
【図３】ＢＳＰプロトコルを示す図である。
【図４】時間決定論的交換における２つのタイルを示す概略図である。
【図５】時間決定論的交換を示す概略タイミング図である。
【図６】機械知能グラフの一実施例である。
【図７】時間決定論的プログラムを生成するためのコンパイラの動作を示す概略アーキテクチャである。
【図８】時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマットを示す。
【図９】時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマットを示す。
【図１０】時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマットを示す。
【図１１】時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマットを示す。
【図１２】送信ペアとして動作する２つのタイルの概略図である。
【図１３】受信ペアとして動作する２つのタイルの概略図である。
【発明を実施するための形態】
【００２６】
図１は、単一チッププロセッサ２のアーキテクチャを概略的に示す。プロセッサは、本明細書では、インテリジェンス処理ユニット(Intelligence Processing Unit)と呼ばれ、機械知能アプリケーションへの適応性を示す。コンピュータでは、チップ上のリンクを使用して、後述して説明するように、単一チッププロセッサを互いに接続してコンピュータを形成することができる。本明細書では、単一チッププロセッサ２のアーキテクチャに焦点を当てている。プロセッサ２は、タイルと呼ばれる複数の処理ユニットを備える。一実施形態では、アレイ６ａ、６ｂに編成された１２１６個のタイルが存在し、これらは本明細書において「ノース」及び「サウス」と称される。記述された実施例では、各アレイは７６個のタイルを８列有している（実際には、冗長目的のために一般に８０個のタイルが配列されている）。本明細書で説明される概念は、多数の異なる物理的アーキテクチャに拡張され、理解を支援するためにここでは１つの実施例が示されていることが理解されよう。チップ２は、２つのチップ対ホストリンク８ａ、８ｂと、チップ２の「ウエスト」エッジ上に配置された４つのチップ対チップリンク３０ａ、３０ｂと、を有する。チップ２は、チップ２によって処理されるべき入力データの形態でカード−ホスト間リンクの１つを介してチップに接続されたホスト（図示せず）からワーク（work）を受け取る。チップは、チップの「イースト」側に沿って配置されたさらに６つのチップ間リンク３０ａ、３０ｂによって、カードに一緒に接続することができる。ホストは、ホストアプリケーションからのワークロード（workload）に応じて、本明細書で説明されるような単一チッププロセッサ２又は複数の相互接続された単一チッププロセッサ２のグループとして構築されたコンピュータにアクセスすることができる。
【００２７】
チップ２は、チップ動作のタイミングを制御するクロック３を有する。クロックは、チップ回路及びコンポーネントのすべてに接続されている。チップ２は、全てのタイルとリンクが接続ワイヤのセットによって接続された時間決定性スイッチングファブリック３４を含む。スイッチングファブリックはステートレスであり、すなわちプログラム可視状態を有しない。接続ワイヤの各セットは、端部から端部まで固定されている。ワイヤはパイプライン化されている。この実施形態では、１セットは３２本のデータワイヤと制御ワイヤからなっており、例えば有効ビットである。各セットは３２ビットのデータパケットを運ぶことができるが、ここでは、「パケット」という用語は、１つ又は複数の有効ビットを有するデータ（本明細書ではデータアイテムと称することもある）を表すビットのセットを意味することに留意されたい。「パケット」は、意図された受信側を一意に識別できるヘッダ又は任意な形式の宛先識別子を持たず、パケット終端情報を有しない。その代わりに、それぞれがタイルに入力又はタイルから出力される数値又は論理値を表す。各タイルはそれ自体のローカルメモリを有している（後述する）。タイルはメモリを共有しないのである。スイッチングファブリックは、後述するように、マルチプレクサ及びタイルにのみ接続される十字セットの接続ワイヤを構成し、プログラムの可視状態を保持しない。スイッチングファブリックはステートレスと看做され、メモリを使用しない。タイル間のデータ交換は、本明細書で説明するように時間決定論的ベースで行われる。パイプライン接続ワイヤは、一連のテンポラリストア、例えば、次の記憶装置に解放する前にクロックサイクルのためにデータを保持するラッチ又はフリップフロップである。ワイヤに沿った移動時間は、これらのテンポラリストアによって判定され、各自が任意な２つのポイント間のパスでクロックサイクルの時間を使い切る。
【００２８】
図２は、本開示の実施形態による例示的なタイル４を示す。タイルでは、複数のスレッドが１つの実行パイプラインを経由してインターリーブされる。タイル４は、それぞれが複数のスレッドの異なる個別のスレッドの状態を表すように構成された複数のコンテキスト２６と、複数のスレッドに共通な共有命令メモリ１２と、複数のスレッドにも共通な共有データメモリ２２と、複数のスレッドにも同様に共通な共有実行パイプライン１４、１６、１８と、インターリーブされた方法で共有パイプラインを介して実行するために複数のスレッドをスケジューリングするためのスレッドスケジューラ２４とを含む。スレッドスケジューラ２４は、タイムスロットＳ０・・・Ｓ５のシーケンスによって図に概略的に示されているが、実際には、それらのタイムスロットに関連してスレッドのプログラムカウンタを管理するハードウェア機構である。実行パイプラインは、フェッチステージ１４、デコードステージ１６、実行ユニット（ＥＸＵ）及びロード／ストアユニット（ＬＳＵ）を備える実行ステージ１８からなる。コンテキスト２６の各々は、それぞれのスレッドのプログラム状態を表すレジスタＲ０、Ｒ１１・・・のセットを含む。
【００２９】
フェッチステージ１４は、スレッドスケジューラ２４の制御下で、命令メモリ１２から実行されるフェッチ命令に接続されている。スレッドスケジューラ２４は、フェッチステージ１４を制御して、以下でより詳細に説明するように、各タイムスロットにおける実行のためにローカルプログラムから命令をフェッチするように構成される。
【００３０】
フェッチステージ１４は、現在タイムスロットに割り当てられている各スレッドのプログラムカウンタ（ＰＣ）にアクセスする。所与のスレッドの場合、フェッチステージ１４は、スレッドのプログラムカウンタによって示されるように、そのスレッドの次の命令を命令メモリ１２の次のアドレスからフェッチする。本明細書で言及される命令は、機械コード命令、すなわち、オペコード及び０又はそれ以上のオペランドで構成された、コンピュータ命令セットにおける基本命令の１つのインスタンスを意味することに留意されたい。各タイルにロードされるプログラムは、サポートされている機械知能モデルのグラフに基づいて作業を割り当てるプロセッサ又はコンパイラによって判定されることにも留意されたい。
【００３１】
次に、フェッチステージ１４は、フェッチした命令をデコードするためにデコードステージ１６に渡し、次にデコードステージ１６は、命令内で指定した現在のコンテキストの任意のオペランドレジスタのデコードしたアドレスと共に、命令が実行されるように、デコードした命令の指示を実行ステージ１８に渡す。
【００３２】
この実施例では、スレッドスケジューラ２４は、ラウンドロビン方式に従ってスレッドをインターリーブし、これにより、スキームの各ラウンド内で、ラウンドはタイムスロットＳ０、Ｓ１、Ｓ２、Ｓ３のシーケンスに分割され、それぞれが個別のスレッドを実行する。典型的には、各スロットは１プロセッササイクル長であり、異なるスロットは均一に形成される（すべての可能な実施形態において必ずしもそうであるとは限らないが）。その後、このパターンは繰り返され、各ラウンドは各タイムスロットの個別のインスタンスを含む（ある実施形態では毎回同じ順序であるが、必ずしも全ての可能な実施形態でそうであるとは限らない）。従って、本明細書で言及されるタイムスロットは、シーケンスの所与の反復におけるタイムスロットの特定なインスタンスではなく、シーケンスにおける反復割り当てされた場所を意味することに留意されたい。図示の実施形態では、８つのタイムスロットが存在するが、他の数も可能である。各タイムスロットは、ハードウェアリソース、例えば、レジスタに紐付けられ、実行中のスレッドのコンテキストを管理する。
【００３３】
ＳＶとラベル付けされたコンテキスト２６のうちの１つには、「ワーカー」スレッドの実行を調整することがそのジョブである「スーパーバイザ」（ＳＶ）の状態を表すために特別な機能が確保されている。スーパーバイザは、同時に実行することができる１つ以上のスーパーバイザスレッドとして編成されたプログラムとして実装することができる。スーパーバイザスレッドは、後述するバリア同期を実行する役割を担うこともあり、あるいは、タイルをオンオフするとともにローカルメモリの内外でデータ交換の責任を負い、計算の間にワーカースレッド間で共有することができるようになる。スレッドスケジューラ２４は、全体としてプログラムが起動すると、すべてのタイムスロットにスーパーバイザスレッドを割り当てることによって開始されるように、すなわち、スーパーバイザＳＶが全タイムスロットＳ０〜Ｓ５で実行を開始するように構成される。しかし、スーパーバイザスレッドには、後続のある時点（１つ又は複数のスーパーバイザタスクを実行すると直ぐに又は直後に）で、実行中の各スロットを一時的にワーカースレッドＣ０、Ｃ１に放棄し、これらにはワーカースレッドが割り当てられたスロットを意味するメカニズムが具備される。これは、スーパーバイザスレッドが本明細書における一例として「ＲＵＮ」と呼ばれる放棄命令を実行することによって達成される。実施形態では、この命令は、命令メモリ１２内のワーカースレッドのアドレスと、データメモリ２２内のそのスレッドのためのいくつかのデータのアドレスとの２つのオペランドを取る。すなわち、ＲＵＮ  ｔａｓｋ＿ａｄｄｒ，ｄａｔａ＿ａｄｄｒ。
【００３４】
各ワーカースレッドは、グラフの頂点を表し、アトミックに実行するためのコードレットである。すなわち、それが消費する全てのデータが起動時に使用可能となり、生成するすべてのデータは、終了するまで他のスレッドには見えない。これは完了するまで実行される（但し、エラー条件を除く）。データアドレスは、コードレットによって処理されるいくつかのデータを指定してもよい。あるいは、放棄命令は、コードレットのアドレスを指定する単一のオペランドのみを取り、データアドレスをコードレットのコードに含めてもよいし、又は、単一のオペランドがコードレット及びデータのアドレスを指定するデータ構造を指し示してもよい。コードレットは、互いに同時に独立して実行してもよい。
【００３５】
いずれにせよ、この放棄命令（「ＲＵＮ」）はスレッドスケジューラ２４上で動作し、現行タイムスロット、すなわち、この命令が実行されるタイムスロットをオペランドによって指定されたワーカースレッドに放棄する。放棄命令では、放棄されるのがこの命令が実行されたタイムスロットであることが暗示されていることに留意されたい（機械語命令の文脈において暗示とは、これを指定するためにオペランドを必要としないことを意味し、オペコード自体から暗黙に理解されるということである）。従って、手放されたスロットは、スーパーバイザが放棄命令を実行したスロットである。別の言い方をすれば、スーパーバイザはそれが手放されるのと同じスペースで実行している。スーパーバイザは「このタイムスロットでこのコードレットを実行する」と言うと、その時点以降、スロットが関連するワーカースレッドによって（一時的に）所有される。スーパーバイザがスロットを使用する場合、スーパーバイザはそのスロットに紐付けられるコンテキストを使用せず、それ自体のコンテキストＳＶを使用することに留意されたい。
【００３６】
スーパーバイザスレッドＳＶは、タイムスロットの各々において同様な動作を実行して、全てのそのスロットＣ０、Ｃ１をワーカースレッドの異なる個別のものに放棄する。最後のスロットでこれが実行されると、スーパーバイザは実行すべきスロットを持たないため、実行を一時停止する。スーパーバイザはすべてのスロットを手放さず、それ自体のためにいくつかを保持していてもよいことに留意されたい。
【００３７】
スーパーバイザスレッドは、コードレットを実行するタイミングであると判断すると、放棄命令（ＲＵＮ）を使用して、このコードレットを、これが「ＲＵＮ」命令を実行するスロットに割り当てる。
【００３８】
スロットＣ０、Ｃ１内の各ワーカースレッドは、１つ又は複数の計算タスクの実行へと進む。そのタスクの終了時に、ワーカースレッドは、実行中のタイムスロットをスーパーバイザスレッドに手渡す。
【００３９】
これは、終了命令（「ＥＸＩＴ」）を実行するワーカースレッドによって達成される。一実施形態では、ＥＸＩＴ命令は、終了時に個別のコードレットの状態を示すためにプログラマが所望する任意の目的に使用される少なくとも１つのオペランド、好ましくは単一のオペランド、終了状態（例えば２進値）をとる。
【００４０】
ＥＸＩＴ  ｅｘｉｔ＿ｓｔａｔｅ
【００４１】
一実施形態では、ＥＸＩＴ命令は、これが実行されるタイムスロットがスーパーバイザスレッドに戻されるように、スケジューラ２４に作用する。その後、スーパーバイザスレッドは、１つ以上のその後のスーパーバイザタスクを実行することができる（例えば、バリア同期及び／又はワーカースレッド間のデータ交換を容易にするためにメモリ内でのデータ移動）、及び／又は、別の放棄命令を実行し続けて、当該スロットに新しいワーカースレッド（Ｗ４など）を割り当てる。従って、命令メモリ１２内のスレッドの総数は、バレルスレッド処理ユニット１０がどの時点においてもインターリーブすることができる数よりも大きくてもよいことに再度留意されたい。スーパーバイザスレッドＳＶの役割は、プログラム全体のどの段階で命令メモリ１２からワーカースレッドＷ０・・・Ｗｊのどれを実行するかをスケジュールすることである。
【００４２】
別の実施形態では、ＥＸＩＴ命令は終了状態を定義する必要はない。
【００４３】
この命令は、スレッドスケジューラ２４に作用し、これが実行されるタイムスロットがスーパーバイザスレッドに戻されるようになる。その後、スーパーバイザスレッドは、１つ又は複数のスーパーバイザ後続タスク（例えば、バリア同期及び／又はデータ交換）を実行し、及び／又は別の放棄命令を実行し続けること等々が可能となる。
【００４４】
簡単に上述したように、データはチップ内のタイル間で交換される。各チップは、計算段階及び交換段階を含むバルク同期並列プロトコルを動作させる。このプロトコルは、例えば図３に示されている。図３の左側の図は、ステートフルコードレットがローカルメモリ（１２、２２）上で実行する段階に各タイル４が置かれている計算段階を表している。図３では、タイル４が円に配列されて示されているが、これは説明のためにのみ描かれたものであって、実際のアーキテクチャを反映していない。
【００４５】
計算段階の後、矢印３０によって示される同期が存在する。これを達成するために、プロセッサの命令セットにＳＹＮＣ（同期）命令が提供される。ＳＹＮＣ命令は、現在実行中のすべてのワーカーＷがＥＸＩＴ命令によって終了するまでスーパーバイザスレッドＳＶを待機させる効果を有している。実施形態では、ＳＹＮＣ命令は、オペランド（実施形態ではその唯一のオペランド）としてモードをとり、モードはＳＹＮＣが、同じプロセッサモジュール４上、例えば、同じタイル上でローカルに動作するそれらのワーカースレッドのみに対してローカルにのみ動作するか、あるいは、代わりに複数のタイルに又は複数のチップにわたって適用するかどうかを指定する。
【００４６】
ＳＹＮＣ  ｍｏｄｅ／／ｍｏｄｅ  ∈  ｛ｔｉｌｅ，  ｃｈｉｐ，  ｚｏｎｅ＿１，  ｚｏｎｅ＿２｝
【００４７】
ＢＳＰそれ自体は当技術分野で公知である。ＢＳＰによれば、各タイル４は、交互サイクルにおいて、計算段階５２及び交換（時には、通信又はメッセージパッシングと呼ばれる）段階５０を実行する。計算段階及び交換段階は、タイル実行命令によって実行される。計算段階５２の間に、各タイル４は、タイル上でローカルに１つ以上の計算タスクを実行するが、これら計算の結果をタイル４の他のものと通信しない。交換段階５０において、各タイル４は、群内におけるタイルの１つ以上の他のタイルへ、及び／又は１つ以上の他のタイルから、前段の計算段階からの１つ以上の計算結果を交換（通信）することを許可されが、別のタイル４上で実行されるタスクに潜在的な依存性を有するか、又は、別のタイル４上のタスクが潜在的に依存性を有する可能性のある新たな計算をまだ実行しない（交換段階において内部統制関連作業のような他の作業が行われることを排除するものではない）。さらに、ＢＳＰの原理によれば、バリア同期は、計算段階５２から交換段階５０へ、又は交換段階５０から計算段階５２へ、あるいは、その両方へ移行する分岐に置かれる。すなわち、（ａ）群内のいずれかが次の交換段階５０に進むことが許可される前に、全てのタイル４がそれぞれの計算段階５２を完了する必要があるか、（ｂ）群内のいずれかのタイルが次の計算段階５２に進むことが許可される前に、群内の全てのタイル４がそれぞれの交換段階５０を完了することが要求されるか、（ｃ）これらの条件の両方が実行されるかのいずれかである。交換及び計算段階のこのシーケンスは、複数回にわたって繰り返されてもよい。ＢＳＰ用語では、交換段階と計算段階の各繰り返しは、本明細書では「スーパーステップ」と称するが、ＢＳＰのいくつかの既存の記述で使用されているものと一致している。本明細書では、用語「スーパーステップ」は、交換段階及び計算段階のそれぞれを示すために当技術分野で使用される場合もあることに留意されたい。
【００４８】
実行ステージ１８の実行ユニット（ＥＸＵ）は、ＳＹＮＣ命令のオペコードに応答して、オンチップ（タイル間）オペランドによって修飾されたときに、アレイ６内の全てのタイル４がワーカーの実行を終了するまで、「ＳＹＮＣ  ｃｈｉｐ」が実行されたスーパーバイザスレッドに一時停止されるよう命じる。これは、次のＢＳＰスーパーステップへのバリアを実装するために使用でき、すなわち、チップ２上の全てのタイル４がバリアを通過した後、全体としてクロスタイルプログラムは次の交換段階５０に進むことができる。
【００４９】
各タイルは、その同期状態を同期モジュール３６に指示する。各タイルがデータを送信する準備が整うと、同期プロセス３０は、システムに図３の右側に示される交換段階に入らせる。この交換段階では、データ値がタイル間で移動する（実際には、メモリ間のデータ移動ではタイルのメモリ間で移動するが）。交換段階では、タイルプログラム間における同時処理ハザードを引き起こす可能性のある計算は存在しない。交換段階では、各データは、送信タイルから１つ又は複数の受信側タイルに向かってタイルを抜け出ていく接続ワイヤに沿って移動する。各クロックサイクルでは、データはパイプライン方式でそのパス（ストアからストアへ）に沿って一定の距離を移動する。タイルからデータが発行されると、受信側タイルを識別するヘッダを伴っては発行されない。代わりに、受信側タイルは、特定の時間に特定の送信タイルからのデータを予期していることが分かっている。従って、本明細書に記載のコンピュータは時間決定論的である。各タイルは、プログラマによって、又はコンパイラの演習によって割り当てられたプログラムを操作し、ここで、プログラマ又はコンパイラ機能は、特定の時間において特定のタイルによって何が送信されるのか、特定の時間において受信側のタイルによって受信される必要があるものについて把握している。これを達成するために、各タイルのプロセッサによって実行されるローカルプログラムにＳＥＮＤ命令が含まれ、ここでは、ＳＥＮＤ命令の実行時間は、コンピュータ内の他のタイル上で実行されている他の命令のタイミングに対して予め定められている。これについては後述してより詳細に説明するが、先ず、受信側タイルが所定の時間にデータを受信できるメカニズムについて説明する。各タイル４は、それ自体のマルチプレクサ２１０に紐付けられており、従って、チップは１２１６個のマルチプレクサを有する。各マルチプレクサは１２１６個の入力を持ち、各入力は３２ビット幅である（必要に応じていくつかの制御ビットを加えたもの）。各入力は、スイッチングファブリック３４内の接続ワイヤ１４０x inの個別のセットに接続される。スイッチングファブリックの接続ワイヤはまた、各タイル（後述する放送交換バス）からの接続ワイヤ２１８のデータアウトセットに接続されているので、この実施形態では、チップを横切る方向に延在する１２１６セットの接続ワイヤが存在する。例示を容易にするために、サウスアレイ６ｂにおいて図２には示されていないタイルからのデータアウトワイヤ２１８ｓに接続された単一の誇張したワイヤセット１４０ｓが示されている。このワイヤセットは、それがクロスワイヤ１４０0〜１４０1215の多数のセットの１つであることを示すために１４０xとラベル付けされている。図２に示すように、マルチプレクサ２１０が２２０xとラベル付けされた入力に切り替えられたとき、クロスワイヤ１４０xに接続され、結果的にサウスアレイ６ｂからタイル（図２には示されていない）のデータアウトワイヤ２１８sに接続されることとなるのが理解されよう。ある時点でマルチプレクサがその入力（２２０sc）に切り替わるように制御されている場合、接続ワイヤ１４０ｘのセットに接続されたデータアウトワイヤ上で受信されたデータは、ある時点でマルチプレクサ２１０の出力２３０に現出するであろう。その後、タイル４に到達すると、その遅延はタイルからのマルチプレクサの距離に依存する。マルチプレクサがスイッチングファブリックの一部を形成するため、タイルからマルチプレクサへの遅延は、タイルの位置に応じて変化し得る。スイッチングを実装するために、タイル上で実行されるローカルプログラムには、マルチプレクサ制御信号２１４を発行させ、そのタイルに紐付けられたマルチプレクサを制御して、特定のデータがタイルで受信されると予期される時間よりも前の一定時間において入力を切り替えるスイッチ制御命令（ＰＵＴｉ）が含まれる。交換段階では、マルチプレクサが切り替えられ、スイッチングファブリックを使用してタイル間でパケット（データ）が交換される。この説明から、スイッチングファブリックは状態を有さないことが明らかであり、各データの移動は、各マルチプレクサの入力が切り替えられる特定のワイヤセットによって予め定められる。  
【００５０】
交換段階では、すべてのタイルとすべてのタイル通信が有効となる。交換段階は複数のサイクルを有することができる。各タイル４は、それ自体の固有の入力マルチプレクサ２１０の制御を有する。チップ内の他のタイル、又は接続リンクの１つからの入トラフィックを選択できる。マルチプレクサが「ヌル」入力、つまり、その特定の交換段階における他のタイルからの入力を受信しないように設定することが可能であることに留意されたい。選択は、交換段階内でサイクルごとに変更することができ、それは全体を通して一定である必要はない。データは、選択されたリンクに応じて、チップ上で交換することも、チップ間で交換することも、チップとホスト間で交換してもよい。本出願は、主としてチップ上のタイル間通信に関するものである。チップ上で同期を実行するために、少数のパイプライン信号がすべてのタイルからチップ上の同期コントローラ３６に供給され、パイプライン同期信号が同期コントローラからすべてのタイルに送信される。一実施形態では、パイプライン信号は、１ビット幅のデイジーチェーンＡＮＤ／ＯＲ信号である。タイル間の同期化が達成される１つの機構は、上述のＳＹＮＣ命令であるか、又は以下で説明される。他のメカニズムを利用してもよいが、重要なのは、すべてのタイルをチップの計算段階とチップの交換段階（図３）で同期させることができることである。ＳＹＮＣ命令は、以下の機能性のタイル４上の専用同期ロジック及び同期コントローラ３６内での始動をトリガする。同期コントローラ３６は、ハードウェア相互接続３４内に、又は図示のように別個のオンチップモジュール内に実装してもよい。オンタイル同期ロジックと同期コントローラ３６の両方のこの機能性は専用ハードウェア回路に実装され、一担ＳＹＮＣチップが実行されると、残りの機能性はそれを実行するさらなる命令を実行することなく進行する。
【００５１】
先ず、オンタイル同期ロジックは、当該タイル４上のスーパーバイザに対する命令発行を自動的に一時停止させる（フェッチステージ１４及びスケジューラ２４にスーパーバイザの発行命令を中断させる）。一旦ローカルタイル４上のすべての未処理のワーカースレッドがＥＸＩＴを実行すると、同期ロジックは自動的に同期化要求「Ｓｙｎｃ＿ｒｅｑ」を同期コントローラ３６に送る。次に、ローカルのタイル４は、スーパーバイザ命令の発行が一時停止した状態で待機し続ける。アレイ６内の他のタイル４（それぞれが同期ロジックのそれ自体のインスタンスを含む）の各々にも同様なプロセスが実行される。従って、ある時点で、現行の計算段階５２における最終ワーカーがアレイ６内のすべてのタイル４上を抜け出ると、同期コントローラ３６はアレイ６内のすべてのタイル４から個別の同期要求（Ｓｙｎｃ＿ｒｅｑ）を受信することになる。その時初めて、同じチップ２上のアレイ６内のすべてのタイル４からＳｙｎｃ＿ｒｅｑを受信することに応答して、同期コントローラ３６は同期肯定応答信号「Ｓｙｎｃ＿ａｃｋ」を各タイル４上の同期ロジックに送り返す。この時点まで、タイル４の各々は、同期肯定応答信号（Ｓｙｎｃ＿ａｃｋ）を待機しているスーパーバイザ命令の発行を一時停止させていた。Ｓｙｎｃ＿ａｃｋ信号を受信すると、タイル４内の同期ロジックは、自動的に、そのタイル４上の個別のスーパーバイザスレッドについてのスーパーバイザ命令発行を解除する。その後、スーパーバイザは、後続の交換段階５０において相互接続３４を介して他のタイル４とのデータ交換を自由に進めることができる。
【００５２】
好ましくは、Ｓｙｃｎ＿ｒｅｑ及びＳｙｎｃ＿ａｃｋ信号は、各タイル４を相互接続３４内の同期コントローラ３６に接続する１つ又は複数の専用同期ワイヤを介して、同期コントローラとの間でそれぞれ送受信される。
【００５３】
次に、タイルの接続構造についてより詳細に説明する。
各タイルには３つのインターフェース：
スイッチングファブリック３４からタイル４にデータを送るｅｘｉｎインターフェース２２４と、
ブロードキャスト交換バス２１８を介してタイルからスイッチングファブリックにデータを送る出力インターフェース２２６と、
タイル４からそのマルチプレクサ２１０へ制御マルチプレクサ信号２１４（ｍｕｘ−ｓｅｌｅｃｔ）を送るｅｘｍｕｘインターフェース２２８と、
を有する。
【００５４】
個々のタイルがＳＥＮＤ命令を実行し、適切な時間に制御命令を切り替えて正しいデータを送受信するためには、交換スケジューリングの要件は、個々のプログラムをコンピュータの個々のタイルに割り当てるプログラマ又はコンパイラによって満たされる必要がある。この機能は、以下の交換タイミング（ＢＮＥＴ）パラメータを認識する必要がある交換スケジューラによって遂行される。パラメータを理解するために、図２の簡略版を図４に示す。同様に図４は、送信タイルだけでなく受信タイルも示している。
【００５５】
Ｉ．各タイルの相対ＳＹＮＣ肯定応答遅延、ＢＮＥＴ＿ＲＳＡＫ（ＴＩＤ）。ＴＩＤは、後述するＴＩＬＥ＿ＩＤレジスタに保持されるタイル識別子である。これは、各タイルが同期制御コントローラ３６から最も早い受信タイルに対してＡＣＫ信号を受信する時を示す常に０より大きいか同等のサイクル数である。タイルＩＤがそのタイルのチップ上の特定の位置を示し、従って物理的な距離を反映していることに注目し、タイルＩＤから計算することができる。図４は、１つの送信タイル４T及び１つの受信タイル４Rを示す。模式的で縮尺通りではないが、タイル４Tは同期コントローラの近傍に示され、タイル４Ｒは遠くに存在するように示されており、同期肯定応答遅延がタイル４Rに対してよりもタイル４Ｔには短くなる結果となる。同期肯定応答遅延のために、各タイルに特定の値が紐付けさせられることもある。これらの値は、例えば遅延テーブルに保持することもできるし、タイルＩＤに基づきオンザフライで毎回計算することもできる。
【００５６】
ＩＩ．交換マルチプレクサ制御ループ遅延、ＢＮＥＴ＿ＭＸＰ（受信タイルのＴＩＤ）。これは、タイルの入力マルチプレクサの選択を変更させる命令（ＰＵＴｉ−ＭＵＸｐｔｒ）の発行と、同一のタイルが新たなマルチプレクサ選択の結果としてメモリに記憶された交換データの（仮定の）ロード命令を発行することがあり得る最も早い時点間のサイクル数である。図４を見ると、この遅延は、受信側タイル４Rのｅｘｍｕｘインターフェース２２８Rからそのマルチプレクサ２１０Rへの制御信号の遅延と、マルチプレクサの出力からデータ入力ｅｘｉｎインターフェース２２４へのラインの長さからなる。
【００５７】
ＩＩＩ．タイル間交換遅延、ＢＮＥＴ＿ＴＴ（送信タイルのＴＩＤ、受信タイルのＴＩＤ）。これは、１つのタイルで発行されたＳＥＮＤ命令と、受信タイルがそれ自体のメモリ内の送信値を指す（仮定の）ロード命令を発行することがあり得る最も早い時点間のサイクル数である。これは、既に説明したようなテーブルにアクセスするか、又は計算によって、送信及び受信タイルのタイルＩＤから判定されている。再び図４を見ると、この遅延は、データが送信タイル４Tからｅｘ＿ｏｕｔインターフェース２２６Tからスイッチングファブリック３４へ、その交換バス２１８Ｔに沿って移動し、次に受信タイル４Rの入力マルチプレクサ２１０Rを介して受信タイルのｅｘ＿ｉｎインターフェース２２４Rへ移動するのに費やす時間を含む。
【００５８】
ＩＶ．交換トラフィックメモリポインタ更新遅延、ＢＮＥＴ＿ＭＭＰ（）。これは、タイルの交換入力トラフィックメモリポインタを変更させる命令（ＰＵＴｉ−ＭＥＭｐｔｒ）の発行と、新たなポインタの結果としてメモリに記憶された交換データのために、その同じタイルが（仮定の）ロード命令を発行することがあり得る最も早い時点間のサイクル数である。これは僅かで固定されたサイクル数である。メモリポインタは未だ議論されていないが、図２に符号２３２で示されている。これは、データメモリ２０２へのポインタとして機能し、ｅｘ＿ｉｎインターフェース２２４からの着信データがどこに記憶されるべきかを示す。これについては、後述して詳しく説明する。
【００５９】
図５は交換タイミングをより詳細に示す。図４の左側には、０〜３０のＩＰＵクロックサイクルが示されている。送信タイル４Ｔに対する動作は、送信命令（ＳＥＮＤ  （Ｆ３））の発行から開始され、ＩＰＵクロックサイクル０〜９の間で発生する。ＩＰＵクロックサイクル１０〜２４では、データはスイッチングファブリック３４を通過してパイプライン方式で実行される。
【００６０】
ＩＰＵクロックサイクル１１内の受信タイル４Rを見ると、タイル入力マルチプレクサ選択：ＰＵＴｉ−ＭＸｐｔｒ（Ｆ３）を変更するＰＵＴｉ命令が実行される。図５では、このＰＵＴｉ命令は「ＰＵＴｉ  ＩＮＣＯＭＩＮＧ  ＭＵＸ（Ｆ３）」と表示されている。
【００６１】
サイクル１８では、メモリポインタ命令ＰＵＴｉ−ＭＥＭｐｔｒ（Ｆ３）が実行され、ＩＴＵクロックサイクル２５内のロード命令を可能にさせる。図５では、このＰＵＴｉ命令には「ＰＵＴｉ  ＩＮＣＯＭＩＮＧ  ＡＤＲ（Ｆ３）」というラベル付けがされている。
【００６２】
送信タイル４Ｔ上では、ＩＰＵクロックサイクル１、３及び５が「ＴＲＡＮＳＰＯＲＴ（  ）」とマークされる。これは、ＳＥＮＤ命令の発行とｅｘｏｕｔインターフェースＦ４、Ｅ１、Ｅ３などにおけるＳＥＮＤ命令のデータの発現との間の内部タイル遅延であり、ｅｘｏｕｔインターフェースへの転送における前のＳＥＮＤ命令からのデータを示す。ＩＰＵクロックサイクル２は、ＳＥＮＤ命令に対するアドレスＥＯを形成するために割り当てられる。これは、その宛先アドレスではなくＥＯがフェッチされるべき場所であることに留意されたい。ＩＰＵクロックサイクル４では、メモリマクロがＥ２をメモリからフェッチするために実行される。ＩＰＵクロックサイクル６では、パリティチェックがＥ４に対して実行される。ＩＰＵクロックサイクル７では、Ｅ５を送信するためにＭＵＸ出力命令が実行される。ＩＰＵクロックサイクル８では、Ｅ６が符号化され、ＩＰＵクロックサイクル９では、Ｅ７が出力される。
【００６３】
スイッチングファブリック３４において、ＩＰＵクロックサイクル１０から２４に至るまでは、「ＥＸＣＨＡＮＧＥ  ＰＩＰＥＳＴＡＧＥ」とラベル付けされている。各サイクルで、データはパイプラインに沿って（テンポラリストア間で）「ワンステップ」移動する。
【００６４】
サイクル２５〜２８は、ｅｘｉｎインターフェース（Ｍｅｍ  Ｍａｃｒｏ（Ｅ２）  ｆｏｒ  Ｅｘｃを参照）でデータを受信する間の受信側タイル４Ｒ上における遅延を示す一方、サイクル２５〜２９は、ｅｘｉｎインターフェースでデータを受け取り、ＬＤのためにそれをメモリ（Ｍｅｍ  Ｍａｃｒｏ（Ｅ２）を参照）にロードするまでの間の遅延を示す。その遅延で他の機能を実行することができる  −  Ｅａｒｌｉｅｓｔ  ＬＤ（Ｆ３）、Ｒｅｇ  ｆｉｌｅ  ｒｄ（Ｆ４）、Ｆｏｒｍ  ａｄｄｒ（ＥＯ）、ＴＲＡＮＳＰＯＲＴ（Ｅ１）を参照のこと。
【００６５】
単純に言えば、受信タイル４Rのプロセッサが送信タイル４T上のプロセス出力であったデータ（例えばＦ３）に作用したい場合、送信タイル４ＴはＳＥＮＤ命令［ＳＥＮＤ（Ｆ３）］をある決まった時間に（例えば、図５のＩＰＵクロックサイクル０に）実行しなければならず、受信タイルは送信タイル上のＳＥＮＤ命令［ＳＥＮＤ（Ｆ３）］の実行に対してある時間だけスイッチ制御命令ＰＵＴｉ  ＥＸＣＨ  ＭＸｐｔｒ（ＩＰＵクロックサイクル１１におけるように）を実行する必要がある。これにより、受信側タイルで実行されているコードレットで使用するために、データが受信側タイルに確実に到達して［Ｅａｒｌｉｅｓｔ  ＬＤ（Ｆ３）］がＩＰＵサイクル２５でロードされることが保証される。
【００６６】
受信側タイルにおける受信プロセスは、命令ＰＵＴｉ  ＭＥＭｐｔｒのようにメモリポインタを設定する必要はないことに留意されたい。代わりに、メモリポインタ２３２（図２）は、各データがｅｘｉｎインターフェース２２４で受信された後に自動的にインクリメントする。受信したデータは、次に使用可能なメモリ位置にロードされる。しかし、メモリポインタを変更する能力により、受信側タイルは、データが書き込まれるメモリ位置を変更することができる。これらすべては、それらが適切に通信するように、個々のプログラムを個々のタイルに書き込むコンパイラ又はプログラマによって判定することができる。これにより、内部交換（チップ上の相互交換）のタイミングが完全に時間決定論的になる。この時間決定論は、交換スケジューラによって交換シーケンスを高度に最適化するために使用することができる。
【００６７】
図６は、本明細書で開示されるプロセッサアーキテクチャの応用例、すなわち機械知能へのアプリケーションを示す。
【００６８】
前述したように、機械知能の当業者には周知のように、機械知能は機械知能アルゴリズムが知識モデルを学習する学習段階から始まる。このモデルは、相互接続されたノード１０２及びリンク１０４のグラフ６０として表すことができる。ノード及びリンクは、頂点及び辺と呼ぶこともある。グラフ内の各ノード１０２は、１つ以上の入力エッジと１つ以上の出力エッジとを有し、いくつかのノード１０２の入力エッジのいくつかは、他のいくつかのノードの出力エッジであり、これにより、ノードを相互接続してグラフを形成する。さらに、１つ又は複数のノード１０２の１つ又は複数の入力エッジが全体としてグラフへの入力を形成し、１つ又は複数のノード１０２の出力エッジの１つ又は複数が、全体としてグラフの出力を形成する。各エッジ１０４は、テンソル（ｎ次元行列）の形態で共通に値を通信し、これらは入力エッジ及び出力エッジ上でノード１０２へ提供され且つノード１０２から提供される入力及び出力を形成する。
【００６９】
各ノード１０２は、その１つ又は複数の入力エッジで受信されたその１つ又は複数の入力の関数を表し、この関数の結果は１つ又は複数の出力エッジに提供される出力である。これらの結果は、アクティベーションと呼ばれることもある。各関数は、１つ又は複数のそれぞれのパラメータ（必ずしも乗算型重みである必要はないが、時には重みとも呼ばれる）によってパラメータ化される。一般に、異なるノード１０２によって表される機能は、異なる形態の機能であってもよく、及び／又は異なるパラメータによってパラメータ化されてもよい。
【００７０】
さらに、各ノードの機能の１つ又は複数のパラメータの各々は、個別のエラー値によって特徴付けられる。加えて、それぞれのエラー状態は、各ノード１０２のパラメータ内のエラーに関連する可能性がある。単一のエラーパラメータによってパラメータ化された機能を表すノード１０２については、エラー状態は単純な閾値であってもよく、すなわち、エラーが指定された閾値内にあればエラー状態が満たされているが、エラーが閾値を超えていれば満たされていない。２つ以上の個別のパラメータによってパラメータ化されたノード１０２について、そのノード１０２のエラー状態はより複雑であり得る。例えば、エラー状態は、そのノード１０２の各パラメータが個別の閾値内にある場合にのみ満たされ得る。別の実施例として、結合されたメトリックは、同じノード１０２に対する異なるパラメータのエラーを組み合わせて定義することができ、結合されたメトリックの値が指定された閾値内にあるという条件の下でエラー状態が満たされてもよく、しかし、そうでなければ結合されたメトリックの値が閾値を超えている場合（又はメトリックの定義に応じてその逆の場合）、エラー状態は満たされない。エラー状態が何であっても、これは、ノードのパラメータ内のエラーが一定のレベル又は受容度以下になるかどうかの尺度を与える。
【００７１】
学習段階では、アルゴリズムは経験データ、すなわち、グラフへの入力の異なる可能な組み合わせを表す複数のデータポイントを受け取る。より多くの経験データが受信されるにつれて、アルゴリズムは、経験データに基づいてグラフ内の様々なノード１０２のパラメータを徐々に調整して、パラメータの誤差を最小限に抑えるようにする。目標は、グラフの出力が所望の結果に可能な限り近づくようなパラメータ値を探し出すことである。グラフ全体がこのような状態に向かうにつれて、計算は収束すると言われる。
【００７２】
例えば、教師付きアプローチでは、入力経験データはトレーニングデータ、すなわち既知の出力に対応する入力の形をとる。各データポイントで、アルゴリズムは、出力が所与の入力に対して既知の出力にさらに近づくようにパラメータを調整することができる。その後の予測段階では、グラフを使用して、入力クエリーを近似予測出力に（又は推論する場合にはその逆で）マッピングすることができる。他のアプローチも可能である。例えば、教師なしアプローチでは、入力データごとに参照結果の概念がなく、代わりに機械知能アルゴリズムが出力データ内でそれ自体の構造を識別するために残される。あるいは、補強手法では、アルゴリズムは、入力経験データ内の各データポイントに対して少なくとも１つの可能な出力を試行し、この出力が正か負か（そして潜在的にそれが正又は負である度合い）、例えば、勝利又は敗北、報酬又は罰、又はそのようなものを通知される。多くの試行を経て、アルゴリズムは、ポジティブなアウトカムをもたらすかもしれない入力を予測し得るように、グラフのパラメータを徐々に調整することができる。グラフを学習するための様々なアプローチ及びアルゴリズムは、多分、機械学習の当業者には周知であると思われる。
【００７３】
本明細書に開示された技術の例示的な適用によれば、各ワーカースレッドは、機械知能グラフにおいてノード１０２のそれぞれ個別の１つに紐付けられた計算を実行するようにプログラムされる。この場合、ノード１０２間のエッジ１０４は、スレッド間のデータの交換に対応し、少なくともその一部は、タイル間の交換を伴い得る。
【００７４】
図７は、コンパイラ７０の機能を示す概略図である。コンパイラは、このようなグラフ６０を受け取り、グラフ内の関数を多数のコードレットにコンパイルし、これらのコードレットは、図７の７２とラベル付けされたローカルプログラムに収容される。各ローカルプログラムは、コンピュータの特定のタイルにロードされるように設計されている。各プログラムは、それぞれが一連の命令で形成された１つ以上のコードレット７２ａ、７２ｂ・・・とスーパーバイザサブプログラム７３とを含む。コンパイラは、プログラムが時間内に互いにリンクされるように、すなわち時間決定論的であるように、プログラムを生成する。これを行うために、コンパイラは、タイルの位置、これにより、ローカルプログラムを生成するためにコンパイラが理解する必要がある遅延を示すタイル識別子を含むタイルデータ７４にアクセスする。遅延は既に上述した通りであり、タイルデータに基づいて計算することができる。あるいは、タイルデータは、これらの遅延がルックアップテーブルを介して利用可能なデータ構造を組み込むことができる。
【００７５】
ここで、本明細書で定義されるコンピュータアーキテクチャのための命令セットの一部として開発された新規命令の説明を続ける。図８は、３２ビットのＳＥＮＤ命令を示している。ＳＥＮＤ命令は、タイルメモリからのデータ送信を示す。これは、タイルのローカルメモリ２２内で特定のアドレスに記憶された１つ以上のデータを、タイルの外部インターフェースで送信させる。各データ（命令内の「アイテム（item）」と呼ばれる）は、１つ以上のワード長であってもよい。ＳＥＮＤ命令は、１ワード又は複数ワードに作用して送信機能を実装する。ＳＥＮＤ命令は、オペコード８０、メッセージカウント、アドレスフィールド８４に示されるＳＥＮＤアドレスから１つ以上のパケットの形式で送信されるアイテムの数を示すフィールド８２を有する。フィールド８４は、ローカルメモリ内のどのアドレスからアイテムが送信されるかを、ローカルアドレスレジスタに記憶されたベース値に加算される即値の形態で定義する。また、ＳＥＮＤ命令は、４及び８バイトのうちの１つとして選択されたワードサイズを示す送信制御フィールド８６（ＳＣＴＬ）を有する。パケットに通信先識別子はない。つまり、アイテムを受け取る受信側タイルは、命令で一意に識別されない。送信機能は、送信アドレスからの指定された数のデータアイテムがローカルメモリからアクセスされ、次のクロックサイクルで送信されるべきタイルのｅｘ＿ｏｕｔインターフェースに置かれる。ＳＥＮＤ命令の別の変形例では、アイテムが送信されるアドレスが暗黙的となる可能性があり、ベースアドレスレジスタのベース値と、出力デルタレジスタのデルタ値とから得られる。デルタ値は、前回のＳＥＮＤ命令の情報に基づいて設定することができる。意図された受信側タイルの一意識別子の代わりに、コンパイラは、正しい受信側タイルが、本明細書で既に説明したように、正しい時間にそのローカルマルチプレクサを切り替えてデータ（データ項目）を受信するように構成する。意図された受信側タイルは、場合によっては送信タイル自体であってもよいことに留意されたい。
【００７６】
この目的のために、上述したようにスイッチ制御機能が設けられている。図９は、この機能を実行するＰＵＴ−ｉ−ＭＵＸ命令を示している。オペコードフィールド９０は、命令をＰＵＴｉ−ＭＵＸ命令として定義する。遅延時間は、遅延即値９２によって指定することができる。この遅延値は、「ｎｏ  ｏｐ」命令を置き換えるために使用することができ、コード圧縮を最適化する方法である。この命令は、実行されると、マルチプレクサ２１０のどの入力が別のタイルから送られたアイテムのために「リスンする（listen）」ように設定されるべきであるかを、ｉｎｃｏｍｉｎｇ＿ｍｕｘフィールド９８で定義する。コンパクト化のため、図１０に示すように、このマルチプレクサ制御機能を、上記で定義した送信機能と結合して単一命令とすることもあり得る。タイルを送信タイルとして動作させる送信機能と、タイルが受信側タイルとして動作しているときの機能であるスイッチ制御機能との間には接続が存在せず、それ以外の場合は、同一タイル上で単一の実行サイクルで遂行されることに留意されたい。
【００７７】
図１０は、「マージ」命令の実施例である。この文脈において、「マージ」命令は、１つのタイル上で（１実行サイクルにおいて）同時に実行され得る２つ以上の機能を定義する命令を意味する。
【００７８】
図１０は、「マージ」送信命令の一形態を示し、ここで送信機能は、タイルにおけるレジスタに保持された状態を変更することができる第２の機能と組み合わせられる。１つの機能は、そのタイルで受信したデータのメモリポインタを変更することである。別の機能は、着信ＭＵＸを設定することである。ＰＵＴｉ＿ＭＥＭｐｔｒ機能により、タイルによって受信された次のデータがロードされるべきローカルメモリ内のメモリ位置を識別できる。この機能は、専用の「受信」命令によって実行できるが、その機能はデータの受信を有効にするのではなく、メモリポインタを変更することである。実際に、タイルでデータを受信するために特定の命令を実行する必要はない。ｅｘｉｎインターフェースに到達するデータは、ｅｘｉｎインターフェースの制御下で、メモリポインタによって識別される次のメモリ位置にロードされることになる。図１０の命令は、オペコードフィールド１００と、送信されるアイテム数フィールド１０２とを有する。着信状態変更（incoming state modification）フィールド１０６の即値は、フィールド１０４によって指定される交換構成状態レジスタに書き込まれる。１つの形態では、状態変更フィールド１０６は、メモリポインタが設定される受信アドレスを計算するための入力デルタを書き込むことができる。別の形態では、交換構成状態は、マルチプレクサ入力を設定する着信ＭＵＸ値で書き込まれる。
【００７９】
この形式の「マージ」命令の場合、送信関数は、命令に暗黙的である１つ又は複数のレジスタに記憶された値から判定される送信アドレスを使用する。例えば、送信アドレスは、ベースレジスタ及びデルタレジスタから判定することができる。
【００８０】
図１１は、交換命令（ＥＸＣＨ）と呼ばれる「ダブル幅」命令を示している。この命令は、タイルメモリ内の指定されたアドレスからのデータ送信を開始し、着信交換構成状態（incoming exchange configuration state）（データを受信するためのマルチプレクサ及び／又はメモリポインタ）を設定する。ＥＸＣＨ命令は、インライン３２ビットペイロードがこの命令の直後に続き、この命令の直後のメモリ位置に配置されるという点でユニークである。ＥＸＣＨ命令は、交換命令ＥＸＣＨを示すオペコードフィールド１１０を有する。ペイロードは、「ｃｏｉｓｓｕｅ」フラグ１１９を有する。
【００８１】
ＥＸＣＨ命令は、着信フォーマットデータ幅（３２ビット又は６４ビット）を指定する単一ビットを有するフォーマットフィールド１１２を含む。データ幅は、後述するように、マルチプレクサラインの設定に影響を与える可能性がある。アイテムフィールド１１４は、交換指示によって送信されるアイテム数を定義する。これらのアイテムは、図９の送信命令のようにフィールド１１６の即値を使用して計算された送信アドレスから送信される。このフィールドの値はベースレジスタの値に加算される。
【００８２】
参照符号１１８は、送信データのワードサイズを定義する制御フィールドを示す。ペイロードは、図９に関連して上述したように、入力マルチプレクサのスイッチ制御を行うスイッチ制御フィールド１２０を含む。符号１２２は、図１０の命令に関連して上述したように、着信データが記憶されるアドレスを計算するための着信デルタを定義するペイロードのフィールドを示す。図１１の６４ビット幅交換命令ＥＸＣＨは、クロックサイクルごとに実行することができ、従って、同時に：
・特定のアドレスからの送信、
・着信マルチプレクサの更新、
・受信アドレスの更新、
の実行を可能にする。
【００８３】
このようにして、任意の交換スケジュールを単一の命令で符号化することができる。図８、図９及び図１０の命令は同様の機能を果たすが、各タイルのローカルメモリ内の交換コードのサイズを最小限に抑えるために３２ビットの長さしか使用できない。特定のコンテキストにおいてどの命令を使用するかについての決定は、ローカルプログラム７２のためのコードレットを構築するときにコンパイラ７０で行われる。
【００８４】
上記の命令をサポートするための重要なレジスタとそのセマンティクスのリストを続けて記載する。これらのレジスタは、これらは各タイルのレジスタファイルの一部から記録する。
【００８５】
【表１】
2019079529.tif 000003
ＩＮＣＯＭＩＮＧ＿ＤＥＬＴＡとＩＮＣＯＭＩＮＧ＿ＭＵＸレジスタは、タイルの交換状態の一部を形成することに留意されたい。
【００８６】
ここからは図１２及び図１３を参照して、組み合わされた交換リソースをより有効に使用するためにタイルの物理的なペアが協働することができることが特徴であるタイルペアリングを説明する。タイルペアリングは、近傍の伝送バスを借用することによって単一タイルの伝送帯域幅を倍増させるために使用することもでき、あるいは、近隣の受信されたバス及び関連する着信マルチプレクサを共有することによってタイルペア内の両方のタイルの受信帯域幅を２倍にすることもできる。
【００８７】
図１２は、ダブル幅伝送を実行するためのタイルペアにおけるタイルに紐付けられたロジックを示す。ダブル幅伝送は、ＳＥＮＤの持続時間中に隣接の発信交換リソースを借用することによって達成される。隣接タイルは、この時間中にそれ自体のデータ伝送を実行することができない。ＳＥＮＤ命令は、シングル又はダブル幅のデータ転送を実行することができるとともに、転送幅はレジスタ内の値又は即値フィールドにより特定される。幅は、このフィールドが０の値を有する場合には３２ビット（１ワード）として指示でき、又は、このフィールドが１の値を有する場合には６４ビット（２ワード）として指示できる。他の論理的定義も可能である。指定された幅は、チップ４上のレジスタからタイルのＥｘＯｕｔインターフェース２２６内の制御ストア（store）１２００に渡される。図１２は、そのような２つのペアのタイルＴＩＤ００とＴＩＤ０１を示している。ＥｘＯｕｔインターフェース２２６は、最下位ワード（ＬＳＷ）及び最上位ワード（ＭＳＷ）を収容するためのバッファを有する。この文脈において、各ワードは３２ビットである。最下位ワードは、幅制御マルチプレクサ１２０２の入力に直接接続される。マルチプレクサの出力は、交換バス３４の対応するクロスワイヤに接続され、クロスワイヤはその特定のタイルの出力ワイヤに対応する。送信幅が３２ビットに設定されている場合、幅制御マルチプレクサ１２０２は、ペアになったタイルの個別のＬＳＷからの入力を受信するように設定され、これにより、ペアのタイルが個別の３２ビットワードを同時に送信することが可能となる。
【００８８】
ペアの１つのメンバーが６４ビットワードを送信したい場合、隣接するタイルの幅制御マルチプレクサ１２０２は、送信タイルからの最上位ワード出力を受信し、それをマルチプレクサの出力に渡すように設定される。これにより、送信タイルからの６４ビット出力の最上位ワードが、隣接するタイルに紐付けされた交換バスのクロスワイヤ上に置かれる（この時点で一切の送信が抑制される）。明確にするために、送信タイルＴＩＤ００のストア１２００内で幅制御フラグからのＭＵＸ制御ラインは、隣接する（非送信の）タイルＴＩＤ０１のマルチプレクサ１２０２の制御入力に接続されて示されている。同様に、隣接するタイルＴＩＤ０１は、その制御ストア１２００からそのペアになったタイルの幅制御マルチプレクサ１２０２の入力に接続されたＭＵＸ制御ラインも有するが、明瞭化のためこれは図１２には示されていない。
【００８９】
ここで、図１３を参照して、ペアになったタイルを使用するダブル幅受信を説明する。図１３のペアになったタイルはＴＩＤ０３及びＴＩＤ０４とラベル付けされているが、ＴＩＤ００のようなタイルが例えばＴＩＤ０３に示された機能性を有することもあり得るように、この機能性をダブル幅送信機能性と組み合わせて使用できることは容易に理解されるであろう。ダブル幅の受信は、転送中に隣接の着信交換リソースを共有することで達成される。ダブル幅の受信用に設定されている場合、タイルペア内の各タイルは、着信データのサンプリング又は無視を選択できる。どちらもサンプリングを選択すると、両方のタイルが同じ着信データを見る。ダブル幅受信は、着信データが３２ビットか６４ビットかを識別する前述のＩＮＣＯＭＩＮＧ＿ＦＯＲＭＡＴ値を介して隣接タイルが連携した状態で有効になる。タイルペアの一次タイルの入力マルチプレクサ２１０の値は、送信タイルのタイルＩＤに設定されなければならない。タイルペア内の二次タイルの入力マルチプレクサ２１０の「リスン（listen）入力」は、送信ペア内の他のタイルのタイルＩＤに設定されなければならない。この場合、厳密に言えば、送信タイルペア（例えばＴＩＤ０１）の「送信」タイルは実際には送信していないが、タイルＴＩＤ００の交換リソースを使用する最上位ワードを提供していた。したがって、受信タイルペアのタイルの入力マルチプレクサ２１０は、送信ペアのダブル幅送信出力の個々のワードが配置されるクロスワイヤにそれぞれ接続されなければならない。
【００９０】
尚、いくつかの実施形態では、着信マルチプレクサ２１０が交換の個別のクロスワイヤを同時にリスン（listen）するように切り替えられたとしても、交換と個々のタイルとの間における移動の異なるレイテンシに起因して、これは必ずしも入来値が受信タイルペアのタイルで同時に受信されることを意味するものではない。このように、受信ペアのタイルにおいて考慮すべき３つの可能性がある。
【００９１】
第１の可能性では、Ｅｘｉｎインターフェースの２つの着信バスは独立して取り扱われる（タイルペアのいずれのタイルもダブル幅受信に参加していない）。
【００９２】
第２の可能性によれば、ローカル着信交換バスは、ダブル幅アイテムの初期コンポーネントを転送するために使用されている（そして、そのコンポーネントは今や遅延されるはずである）。これは、隣接のバスが同じダブル幅アイテムの非初期コンポーネントを転送するために使用されるであろうことを暗示する。
【００９３】
第３の可能性によれば、ローカル着信交換バスは、ダブル幅アイテムの非初期コンポーネントを転送するために使用されている。これは、隣接のバスが同じダブル幅アイテムの初期コンポーネントを転送するために使用されたことを暗示する（そしてその結果、隣接のバス上で初期データコンポーネントは遅延したはずだった）。
【００９４】
図１３は、マルチプレクサ１３０２及び１３０４を使用するこれらのシナリオを扱う回路１３００を示す。回路１３００は、受信タイルペアの各タイルの入力に複製されるが、明瞭化のためＴＩＤ０３の入力にのみ示されていることに留意されたい。
【００９５】
マルチプレクサの制御は、レジスタからＥｘｉｎインターフェース２２４に供給される着信フォーマット制御からのものである。タイルＴＩＤ０３が３２ビットモードで動作する場合、マルチプレクサ１３０２がパイプラインステージ１３０６及び制御バッファ１３０８を介して、図１３のマルチプレクサの上位入力で３２ビットワードを通過するように制御する。
【００９６】
受信タイルが対として動作している場合、マルチプレクサ１３０２は、その上位入力をブロックし、下位入力からの最下位ワードをパイプラインステージ１３０６に通過させるように制御される。次のサイクルで、パイプラインステージ１３０６を介してクロックされた最下位ワードとともに、最上位ワードは、マルチプレクサ１３０４を介して制御バッファ１３０８に渡されるように選択される。制御バッファ１３０８は、６４ビットワードを受信するか否かを決定することができる。ロジックに従って、６４ビットワードは、隣接するタイル（ＴＩＤ０４）において同時に受信されることに留意されたい。状況によっては、両方のタイルが同じ６４ビット値を読み込むことを欲する場合があるが、他の状況ではタイルの１つがこれを無視する可能性がある。
【００９７】
６４ビット転送のＬＳＷ及びＭＳＷが、それらのペアになった受信タイルで同時に受信され得る場合、パイプラインステージ１３０６の相対遅延が必要とされないであろう実施形態が存在し得ることに留意されたい。
【００９８】
本明細書では、機械学習のための知識モデルの文脈において特に有効な新規なコンピュータパラダイムを説明してきた。非常に大量のデータを効率的に処理するためのＢＳＰパラダイムの交換段階におけるような時間決定論を利用するアーキテクチャが提供される。特定の実施形態について説明してきたが、開示された技術の他の適用及び分散は、一旦開示聴聞を受ければ当業者には明らかになるであろう。本開示の範囲は、記載された実施形態によって制限されるのではなく、添付の特許請求の範囲によってのみ限定される。
【図１】
2019079529.tif 000004
【図２】
2019079529.tif 000005
【図３】
2019079529.tif 000006
【図４】
2019079529.tif 000007
【図５】
2019079529.tif 000008
【図６】
2019079529.tif 000009
【図７】
2019079529.tif 000010
【図８】
2019079529.tif 000011
【図９】
2019079529.tif 000012
【図１０】
2019079529.tif 000013
【図１１】
2019079529.tif 000014
【図１２】
2019079529.tif 000015
【図１３】
2019079529.tif 000016
【外国語明細書】
2019079529000001.pdf