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