(57)【要約】【課題】コンピュータのデータ交換を提供する。【解決手段】コンピュータは、入力インタフェースおよび出力インタフェースを有する複数の処理装置と、出力ワイヤセットによって処理装置の各々に接続可能であり、対応する入力ワイヤによって処理装置の各々に接続可能なスイッチング構造とを含む。処理装置は列状に配置され、各列はベース処理装置と複数の処理装置とを有する。処理装置は、送信時刻に受信処理装置向けのデータパケットを接続ワイヤの出力セットに送信する。データパケットは、受信処理装置の送信先識別子を有さないが、送信時刻に対する既定の遅延で受信処理装置において受信される。既定の遅延は、送信処理装置と受信処理装置との間の交換経路に依存する。ある列の任意の送信処理装置と受信処理装置との間の交換経路は、他の列の送信処理装置と受信処理装置との間の交換経路と同じ遅延を有する。【選択図】図１５
2020102185.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータであって、
各々が入力ワイヤセットを有する入力インタフェースと出力ワイヤセットを有する出力インタフェースとを有する複数の処理装置と、
対応する前記出力ワイヤセットによって前記処理装置の各々に接続され、その関連処理装置によって制御可能なスイッチング回路を介して、対応する前記出力ワイヤセットによって前記処理装置の各々に接続可能であり、対応する入力ワイヤによって前記処理装置の各々に接続可能なスイッチング構造と
を含み、
前記処理装置は列状に配置され、各列は、前記スイッチング構造に最も近いベース処理装置と、前記列の方向のそれぞれの位置において互いに隣接する複数の処理装置とを有し、少なくとも１つの処理装置は、前記処理装置間のデータの交換を実装するため、送信時刻に受信処理装置向けのデータパケットを接続ワイヤの出力セットに送信するように構成され、前記データパケットは、前記受信処理装置の送信先識別子を有さず、前記送信時刻に対する既定の遅延で前記受信処理装置において受信されることになっており、前記既定の遅延は、前記送信処理装置と前記受信処理装置との間の交換経路に依存し、前記列のそれぞれの位置における任意の対の送信処理装置と受信処理装置との間の前記交換経路は、他の前記列の対応する位置における各対の送信処理装置と受信処理装置との間の前記交換経路と同じ遅延を有する、コンピュータ。
【請求項２】
物理的な前記交換経路は、前記列のそれぞれの処理装置から前記列の前記ベースまで延在する経路コンポーネントを含む、請求項１に記載のコンピュータ。
【請求項３】
前記スイッチング構造は、複数の交換ワイヤグループを含み、各グループは、それぞれの列の処理装置の前記出力ワイヤに接続されたワイヤを有する、請求項１または２に記載のコンピュータ。
【請求項４】
前記列のうちの第１の列は、それぞれのワイヤグループから第１の物理的な距離だけ離間され、前記列のうちの第２の列は、対応するワイヤグループから第２の物理的な距離だけ離間され、前記第２の物理的な距離は、前記第１の物理的な距離より大きく、補償遅延が前記第１の列と前記対応する第１のワイヤグループとの間で列からスイッチング構造へのパスコンポーネントにおいて提供されることで、前記第１の列の前記列からスイッチング構造へのパス遅延が、前記第２の列の前記列からスイッチング構造へのパス遅延と同じとなる、請求項３に記載のコンピュータ。
【請求項５】
前記補償遅延は、前記第１の列の各処理装置の前記接続ワイヤの出力セットに配置された出力補償遅延回路を含む、請求項４に記載のコンピュータ。
【請求項６】
前記補償遅延は、前記第１の列の各タイルに対する前記入力ワイヤセットに配置された入力補償遅延回路を含む、請求項４または５に記載のコンピュータ。
【請求項７】
各処理装置から対応するスイッチング回路まで延在するワイヤのスイッチング制御セットのスイッチング補償遅延を含み、前記スイッチング遅延補償は、前記入力遅延補償回路と前記スイッチング制御遅延補償との総和が各列に対して同じであるように決定される、請求項６に記載のコンピュータ。
【請求項８】
前記スイッチング構造は、第１の方向に延在し、各列は、前記第１の方向に垂直な第２の方向に延在する、請求項１〜７のいずれか一項に記載のコンピュータ。
【請求項９】
前記スイッチング構造から離れるように逆方向に延在する、前記スイッチング構造の一方の側に配置されたｎ個の列と、前記スイッチング構造の他方の側に配置されたｎ個の列とを含む、請求項１〜８のいずれか一項に記載のコンピュータ。
【請求項１０】
ｎは８である、請求項９に記載のコンピュータ。
【請求項１１】
前記スイッチング構造の前記一方の側に配置された前記ｎ個の列の各々は、前記スイッチング構造の最初の半分のワイヤグループと関連付けられ、前記スイッチング構造の前記他方の側に配置された前記ｎ個の列の各々は、前記スイッチング構造の残りの半分のワイヤグループと関連付けられる、請求項３または９に記載のコンピュータ。
【請求項１２】
前記交換経路は、前記ベース処理装置から前記それぞれの処理装置の前記列に沿った距離に基づいて列ベースからタイルへのパスコンポーネントを含む、請求項１〜１１のいずれか一項に記載のコンピュータ。
【請求項１３】
各処理装置は、交換コードを含むローカルプログラムを保持する命令ストレージと、前記ローカルプログラムを実行するように構成された実行ユニットと、データを保持するためのデータストレージとを有し、前記列のうちの１つの第１の位置の処理装置の前記交換コードは、別の列の同じ位置の処理装置の前記交換コードと同じである、請求項１〜１２のいずれか一項に記載のコンピュータ。
【請求項１４】
前記交換コードは、前記送信時刻に前記データパケットを同じ列の受信処理装置に送信させるＳＥＮＤ命令を含む、請求項１３に記載のコンピュータ。
【請求項１５】
演算段階と交換段階との間で切り替えるように前記コンピュータを制御するために同期信号を生成するように動作可能な同期モジュールを含み、前記処理装置は、共通のクロックに従ってそれらのローカルプログラムを実行するように構成され、前記ローカルプログラムは、前記少なくとも１つの処理装置が前記交換段階において前記データパケットを送信するように構成される、請求項１３または１４に記載のコンピュータ。
【請求項１６】
前記同期信号は、それぞれの同期遅延ステージを介して各列で受信されることで、前記コンピュータの各処理装置で同時に受信される、請求項１５に記載のコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コンピュータのデータ交換に関する。具体的には、本開示は、複数の処理装置を備え、データが送信処理装置と受信処理装置との間の交換経路を介して処理装置間で交換される、コンピュータに関する。排他的にではないが、特に、本開示は、バルク同期並列（ＢＳＰ）演算プロトコルを動作させ、それにより、グループ内の処理装置のいずれかが交換段階に進むことができる前に、処理装置の各グループが演算段階を完了しなければならず、データが交換経路にわたって交換される、コンピュータに関する。
【背景技術】
【０００２】
演算における並列処理は、異なる形態を取る。プログラムフラグメントは、並行に（時間的には重なり合うが、実行リソースを共有し得る）または並列に（異なるリソース上でできる限り同時に実行する）実行するように編成することができる。
【０００３】
演算における並列処理は、複数の相互接続プロセッサタイルのアレイ、マルチスレッド処理装置、または、各タイルがマルチスレッド処理装置を含むマルチタイルアレイによってなど、多くの方法で達成することができる。
【０００４】
同じチップ（または同じ集積回路パッケージ内の複数のチップ）上に複数のタイルのアレイを含むプロセッサによって並列処理が達成される際、各タイルは、ローカルメモリ（プログラムメモリおよびデータメモリを含む）を備えた別個のそれぞれの処理装置を含む。従って、プログラムコードの別個の部分を異なるタイル上で並列に実行することができる。タイルは、オンチップ相互接続を介して共に接続され、それにより、異なるタイル上で実行されるコードをタイル間で通信することが可能になる。いくつかの場合、各タイル上の処理装置は、バレルスレッド処理装置（または他のマルチスレッド処理装置）の形態を取ることができる。各タイルは、１組のコンテキストおよび実行パイプラインを有し得、その結果、各タイルは、複数の交互に起こるスレッドを並行に実行することができる。
【０００５】
一般に、アレイの異なるタイル上で実行しているプログラムの部分間には依存性が存在し得る。従って、依存するデータの前に実行しているタイル上のコードの断片が別のタイル上のコードの別の断片によって利用可能になることを防ぐための技法が必要とされる。これを達成するための可能なスキームは多数存在するが、本明細書における対象のスキームは、「バルク同期並列」（ＢＳＰ）として知られている。ＢＳＰによれば、各タイルは、演算段階と交換段階を交互に実行する。演算段階の間、各タイルは、各タイル上で局所的に１つまたは複数の演算タスクを実行するが、他のいかなるタイルともその演算の結果を通信することはない。交換段階では、各タイルは、グループ内の１つもしくは複数の他のタイルにおよび／またはグループ内の１つもしくは複数の他のタイルから、先行する演算段階からの演算の１つまたは複数の結果を交換することは認められているが、そのタイルがその交換段階を終了するまでは新しい演算段階を開始することはない。さらに、ＢＳＰ原理のこの形態によれば、バリア同期は、演算段階から交換段階に移行するか、交換段階から演算段階に移行するかまたはその両方の時点で行われる。すなわち、（ａ）グループ内のいずれかのタイルが次の交換段階に進むことを認める前に、すべてのタイルがそれぞれの演算段階を完了する必要があるか、（ｂ）グループ内のいずれかのタイルが次の演算段階に進むことを認める前に、グループ内のすべてのタイルがそれらのそれぞれの交換段階を完了する必要があるか、または、（ｃ）その両方のいずれかである。本明細書で使用される場合は、「演算段階と交換段階との間」という記載は、これらのすべてのオプションを包含する。
【０００６】
マルチスレッドおよび／またはマルチタイル並列処理の使用例は、機械知能において見られる。機械知能分野の当業者によく知られているように、機械知能アルゴリズムは、知識モデルを生成し、知識モデルを使用して学習および推論アルゴリズムを実行することが可能である。知識モデルおよびアルゴリズムを組み込んだ機械知能モデルは、複数の相互接続ノードからなるグラフとして表すことができる。各ノードは、その入力の関数を表す。ノードは、グラフへの入力を受信するものもあれば、１つまたは複数の他のノードからの入力を受信するものもある。いくつかのノードの出力活性化は、他のノードの入力を形成し、いくつかのノードの出力は、グラフの出力を提供し、グラフへの入力は、いくつかのノードへの入力を提供する。さらに、各ノードにおける関数は、１つまたは複数のそれぞれのパラメータ（例えば、重み）によってパラメータ化される。学習段階の間、その目的は、グラフが全体として、可能な入力の範囲に対する所望の出力を生成するように、経験に基づく入力データセットに基づいて、様々なパラメータに対する値を見出すことである。この学習を行うための様々なアルゴリズムは、確率的勾配降下法に基づく誤差逆伝播アルゴリズムなど、当技術分野において知られている。複数の反復にわたり、パラメータは、それらの誤差を減少するように徐々に調節され、グラフは、解に向けて収束する。次いで、後続の段階では、学習済みのモデルを使用して、指定された入力セットに与えられる出力の予測を行うこと、指定された出力セットに与えられる入力（原因）に関する推論を行うこと、または、それに対して他の内観分析形態を実行することができる。
【０００７】
各ノードの実装形態は、データの処理を伴い、グラフの相互接続は、ノード間で交換されるデータに相当する。典型的には、各ノードの処理の少なくともいくつかは、グラフの他のノードのいくつかまたはすべてから独立して実行することができ、従って、大きなグラフほど、莫大な並列処理の機会に触れることになる。
【発明の概要】
【課題を解決するための手段】
【０００８】
高度に分散された並列機械が、機械知能モデルの演算のための適切な機械構造である。
【０００９】
本開示で利用される知識モデルの因子は、グラフの概して静的な性質である。すなわち、ノードの構造およびノードを含むグラフの構造は、通常は、機械知能アルゴリズムの実行の間に変化することはない。本発明者らは、機械知能モデルの演算を最適化するために、ある特定の時間決定論的保証を行う機械を製作した。これにより、コンパイラは、時間決定論的に、ノードにわたって作業を区分化してスケジューリングすることができる。知識モデルに基づいて作業負荷を処理するように最適化されたコンピュータのコード利用における有意な最適化のために以下で説明される実施形態において利用されるのが、この時間決定論である。
【００１０】
本発明の態様は、
各々が入力ワイヤセットとの入力インタフェースおよび出力ワイヤセットとの出力インタフェースを有する多数の処理装置と、
それぞれの出力ワイヤセットによって処理装置の各々に接続されたスイッチング構造であって、その関連処理装置によって制御可能なスイッチング回路を介して、それぞれの出力ワイヤセットによって処理装置の各々に接続可能なおよびそれぞれの入力ワイヤによって処理装置の各々に接続可能な、スイッチング構造と
を含む、コンピュータであって、
処理装置は列状に配置され、各列は、スイッチング構造に最も近いベース処理装置と、列の方向にそれぞれの位置において互いに隣接する複数の処理装置とを有し、処理装置間のデータの交換を実装するため、少なくとも１つの処理装置は、送信時刻に受信処理装置向けのデータパケットを接続ワイヤのその出力セットに送信するように構成され、データパケットは、受信処理装置の送信先識別子を有さないが、送信時刻に対する既定の遅延で受信処理装置において受信されることになっており、既定の遅延は、送信処理装置と受信処理装置との間の交換経路に依存し、ある列のそれぞれの位置における任意の対の送信処理装置と受信処理装置との間の交換経路が、他の列の対応するそれぞれの位置における各対の送信処理装置と受信処理装置との間の交換経路と同じ遅延を有する、コンピュータを提供する。
【００１１】
物理的な交換経路は、列のそれぞれの処理装置から列のベースまで延在する経路コンポーネントを含んでもよい。
【００１２】
スイッチング構造は、多数の交換ワイヤグループを含んでもよく、各グループは、各それぞれの列の処理装置の出力ワイヤに接続されたワイヤを有する。
【００１３】
一実施形態では、列のうちの第１の列は、それぞれのワイヤグループから第１の物理的な距離だけ離間され、列のうちの第２の列は、その対応するワイヤグループから第２の物理的な距離だけ離間され、第２の物理的な距離は、第１の物理的な距離より大きい。補償遅延は、第１の列と対応する第１のワイヤグループとの間で列からスイッチング構造へのパスコンポーネントにおいて提供することができ、それにより、第１の列の列からスイッチング構造へのパス遅延は、第２の列の列からスイッチング構造へのパス遅延と同じである。
【００１４】
補償遅延は、第１の列の各処理装置の接続ワイヤの出力セットに配置された出力補償遅延回路を含んでもよい。
【００１５】
それに加えてまたはその代替として、補償遅延は、第１の列の各タイルに対する入力ワイヤセットに配置された入力補償遅延回路を含んでもよい。
【００１６】
コンピュータは、各処理装置からその対応するスイッチング回路まで延在するワイヤのスイッチング制御セットのスイッチング補償遅延をさらに含んでもよく、スイッチング遅延補償は、入力遅延補償回路とスイッチング制御遅延補償との総和が各列に対して同じであるように決定される。
【００１７】
いくつかの実施形態では、スイッチング構造は、第１の方向に延在し、各列は、第１の方向に垂直な第２の方向に延在する。
【００１８】
コンピュータは、スイッチング構造から離れるように逆方向に延在する、スイッチング構造の一方の側に配置されたｎ個の列と、スイッチング構造の他方の側に配置されたｎ個の列とを含んでもよい。あるアーキテクチャでは、ｎは８である。
【００１９】
スイッチング構造の一方の側に配置されたｎ個の列の各々は、スイッチング構造の最初の半分のそれぞれのワイヤグループと関連付けることができ、スイッチング構造の他方の側に配置されたｎ個の列の各々は、スイッチング構造の残りの半分のそれぞれのワイヤグループと関連付けることができる。
【００２０】
交換経路は、ベース処理装置からそれぞれの処理装置の列に沿った距離に基づいて列ベースからタイルへのパスコンポーネントを含んでもよい。
【００２１】
各処理装置は、交換コードを含むローカルプログラムを保持する命令ストレージと、ローカルプログラムを実行するように構成された実行ユニットと、データを保持するためのデータストレージとを有するように構成することができ、列のうちの１つの第１の位置の処理装置の交換コードは、別の列の同じそれぞれの位置の処理装置の交換コードと同じである。
【００２２】
いくつかの実施形態では、交換コードは、送信時刻にデータパケットを同じ列の受信処理装置に送信させるＳＥＮＤ命令を含む。
【００２３】
コンピュータは、演算段階と交換段階との間で切り替えるようにコンピュータを制御するために同期信号を生成するように動作可能な同期モジュールを含んでもよく、処理装置は、共通のクロックに従ってそれらのローカルプログラムを実行するように構成され、ローカルプログラムは、少なくとも１つの処理装置が交換段階においてデータパケットを送信するように構成される。
【００２４】
同期信号は、それぞれの同期遅延段を介して各列で受信することができ、その結果、同期信号は、コンピュータの各処理装置で同時に受信される。これは、ｎ個の列のグループに対して生成された交換コードを別の同様の逆の「極」（北または南）を有するグループに再配置する際に有益である。同期信号における遅延を達成するための代替の手法は、交換コードの直前に遅延命令を追加することである。
【００２５】
交換経路が任意の列にそれぞれ配置された処理装置に対して同じ待ち時間を有することを保証することにより、任意の列の同様の列内交換に対して、同じ交換コードを使用することができる。この文脈では、交換コードは、命令のシーケンスを含み、命令のシーケンスは、処理装置からデータを送信させ、受信処理装置におけるデータの受信を管理する。これらの命令は、送信タイルにおけるＳＥＮＤ命令および受信タイルにおけるスイッチング回路に対する制御命令を含む。それに加えて、受信タイルにおけるメモリポインタ命令が存在してもよい。このメモリポインタ命令は、実際には、メモリへのロードを命令することはないが（メモリへのロードは明示的な命令なしで起こる）、受信側でデータがロードされるメモリのアドレスを設定することができる。
【００２６】
それに加えて、いくつかの列間データ交換に対して同じ交換コードの使用を可能にするために、さらなる遅延補償を導入することができる。コンピュータの送信および受信タイルのある組合せがそれらの交換経路にわたって同じ待ち時間を呈するように、異なるパスコンポーネントに対する遅延補償セットを選択することが可能である。
【００２７】
ここでの課題は、列のタイルに対する交換コードが、各メッセージに対する送信タイルと各受信タイルとの間の待ち時間を認識するようにコンパイルされることであることに留意されたい。同じコードは、対応する複数対のタイルに対して待ち時間が同じ場合にのみ、列内または列間交換において使用することができる。この文脈では、「対応する」は、他の列において相応に配置されたタイルを意味する。
【００２８】
一構成では、スイッチング構造は、コンピュータが具体化されるチップにわたって延在し、ある列セットは、隣り合わせで配置されてスイッチング構造の一方の側から垂直に延在し、別の列セットは、隣り合わせで配置されてスイッチング構造の他方の側から垂直に（ただし、逆方向に）延在する。そのような方法で、列のアレイが形成される。参照を容易にするため、スイッチング構造の一方の側の列は、アレイの北の部分（北の列）を指し、構造の他方の側の列は、アレイの南の部分（南の列）を指す。アレイの北または南の部分のある複数対の列のそれぞれの位置の処理装置が同じ交換コードを利用できるように遅延補償を導入することは可能である。
【００２９】
別の例では、送信処理装置がアレイの北の部分の列にあり、受信処理装置がアレイの南の部分の列にある際（またはその逆も同様）は、いくつかの複数対の列は、遅延補償の使用を通じて、同じ交換コードを共有することができる。
【００３０】
本発明をより良く理解するため、および、本発明をどのように実行に移すことができるかを示すため、ここでは、例示として、以下の図面を参照する。
【図面の簡単な説明】
【００３１】
【図１】単一チッププロセッサのアーキテクチャを概略的に示す。
【図２】スイッチング構造に接続されたタイルの概略図である。
【図３】ＢＳＰプロトコルを示す図である。
【図４】時間決定論的交換における２つのタイルを示す概略図である。
【図５】時間決定論的交換を示す概略タイミング図である。
【図６】機械知能グラフの一例である。
【図７】時間決定論的プログラムを生成するためのコンパイラの動作を示す概略アーキテクチャである。
【図８】時間決定論的アーキテクチャにおいて使用可能な異なる命令の命令フォーマットを示す。
【図９】時間決定論的アーキテクチャにおいて使用可能な異なる命令の命令フォーマットを示す。
【図１０】時間決定論的アーキテクチャにおいて使用可能な異なる命令の命令フォーマットを示す。
【図１１】時間決定論的アーキテクチャにおいて使用可能な異なる命令の命令フォーマットを示す。
【図１２】送信命令において使用可能な制御フィールドの例を示す。
【図１３】スイッチング構造上の２つのタイル間の通信の例を示す。
【図１４】アーキテクチャの概略図である。
【図１５】アーキテクチャの概略図である。
【図１６】タイル識別子におけるビットを示す。
【図１７】補償遅延の１セットの例を示す表である。
【図１８】タイル間の遅延の一例を示す表である。
【図１９】交換コードの再利用の例を示す。
【図１９Ａ】交換コードの再利用の例を示す。
【図２０】交換コードの再利用の別の例を示す
【図２０Ａ】交換コードの再利用の別の例を示す。
【発明を実施するための形態】
【００３２】
本開示は、時間決定論的プロセッサの複数の部分における共通の交換コードの使用を可能にするために利用することができる遅延補償メカニズムについて記載する。図１は、単一チッププロセッサ２のアーキテクチャを概略的に示す。プロセッサは、本明細書では、機械知能アプリケーションへのその適応性を示すため、ＩＰＵ（知能処理装置）と呼ばれる。コンピュータでは、単一チッププロセッサは、後に論じられるように、チップ上のリンクを使用して共に接続し、コンピュータを形成することができる。本説明は、単一チッププロセッサ２のアーキテクチャに焦点を置く。プロセッサ２は、タイルと呼ばれる複数の処理装置を含む。一実施形態では、アレイ６ａ、６ｂ、６ｃ、６ｄに編成された１２１６個のタイルが存在する。プロセッサは、東および西の領域ならびに北および南の領域を有するものと見なすことができる。６ａは「北東アレイ」と呼ぶことができ、６ｂは「南東アレイ」と呼ぶことができ、６ｃは「南西アレイ」と呼ぶことができ、６ｄは「北西アレイ」と呼ぶことができる。説明される例では、各アレイは、７６個のタイルからなる４つの列を有する（実際には、一般に、冗長性目的のために８０個のタイルが存在する）。本明細書で説明される概念を多くの異なる物理的なアーキテクチャまで拡張できることが理解されよう（本明細書では、理解の助けになるように１つの例を提供する）。チップ２は、チップ２の「西」のエッジに配置された２つのチップ・ツゥー・ホストリンク８ａ、８ｂおよび４つのチップ・ツゥー・チップリンク３０ａ、３０ｂを有する。チップ２は、チップ２によって処理される入力データの形態で、カード・ツゥー・ホストリンクのうちの１つを介してチップに接続されたホスト（図示せず）から作業を受け取る。チップは、チップの「東」側に沿って配置されたさらなる６個のチップ・ツゥー・チップリンク３０ａ、３０ｂによってカードに共に接続することができる。ホストは、ホストアプリケーションからの作業負荷に応じて、本明細書で説明されるような単一チッププロセッサ２または複数の相互接続された単一チッププロセッサ２のグループとして設計されたコンピュータにアクセスすることができる。
【００３３】
チップ２は、チップ活動のタイミングを制御するクロック３を有する。クロックは、チップの回路およびコンポーネントのすべてに接続される。チップ２は、すべてのタイルおよびリンクが接続ワイヤセットによって接続される時間決定論的スイッチング構造３４（switching fabric 34）を含み、スイッチング構造は、ステートレスである（すなわち、プログラム可視状態を有さない）。接続ワイヤの各セットは、末端が固定される。ワイヤは、パイプライン型である。この実施形態では、１セットは、３２個のデータワイヤおよび制御ワイヤ（例えば、有効ビット）を含む。各セットは、３２ビットデータパケットを運ぶことができるが、本明細書では、「パケット」という用語は、１つまたは複数の有効ビットを有するデータ（場合により、本明細書では、データアイテムと呼ばれる）を表すビットのセットを示すことに留意されたい。「パケット」は、意図する受信者を一意に識別できるようにする送信先識別子を有するヘッダも、パケット終了情報も有さない。代わりに、各パケットは、数値または論理値のタイルへの入力またはタイルからの出力を表す。しかし、パケットは、スイッチング構造３４を通じる少なくとも１つの移動方向を示すヘッダを含んでもよい。各タイルは、ローカルメモリを有する（後に説明する）。タイルはメモリを共有しない。スイッチング構造は、後に説明されるように、マルチプレクサおよびタイルのみに接続される接続ワイヤのクロスセットを構成し、いかなるプログラム可視状態も保持しない。スイッチング構造は、ステートレスであると見なされ、いかなるメモリも使用しない。タイル間のデータ交換は、本明細書で説明されるように、時間決定論的に実施される。パイプライン型の接続ワイヤは、次のストアにリリースする前にクロックサイクルの間にデータを保持する一連の一時的なストア（例えば、ラッチまたはフリップフロップ）を含む。ワイヤに沿った移動時間は、これらの一時的なストアによって決定され、各ストアは、任意の２つのポイント間のパスにおける時間のクロックサイクルを使い果たす。
【００３４】
各列は、後に説明されるように、交換ワイヤのそれぞれのグループと関連付けられる。物理的により近いワイヤのグループを使用する列は、列間交換に対して、離れて位置するワイヤのグループを使用する列より低い待ち時間を有する。図２は、本開示の実施形態による、例示的なタイル４を示す。タイルでは、複数のスレッドは、単一の実行パイプラインを通じてインタリーブ（interleave）される。タイル４は、各々が対応するスレッドの状態を表すように構成された多数のコンテキスト２６と、複数のスレッドに共通の共有命令メモリ１２と、複数のスレッドに共通の共有データメモリ２２と、複数のスレッドに共通の共有実行パイプライン１４、１６、１８と、共有パイプラインを通じてインターリーブされるように複数のスレッドを実行するようにスケジューリングするためのスレッドスケジューラ２４とを含む。スレッドスケジューラ２４は、図では、時間スロットＳ０…Ｓ５のシーケンスによって概略的に表されているが、実際には、それらの時間スロットに関連してスレッドのプログラムカウンタを管理するハードウェアメカニズムである。実行パイプラインは、フェッチステージ１４と、復号ステージ１６と、実行ユニット（ＥＸＵ）およびロード／ストアユニット（ＬＳＵ）を含む実行ステージ１８とを含む。コンテキスト２６の各々は、対応するスレッドのプログラム状態を表すためのレジスタＲ０、Ｒ１…のセットを含む。
【００３５】
フェッチステージ１４は、スレッドスケジューラ２４の制御の下、実行される命令を命令メモリ１２からフェッチするために接続される。スレッドスケジューラ２４は、以下でより詳細に論じられるように、各時間スロットにおいて実行するためにローカルプログラムから命令をフェッチするようにフェッチステージ１４を制御するように構成される。
【００３６】
フェッチステージ１４は、時間スロットに現在割り当てられているスレッドの各々のプログラムカウンタ（ＰＣ）へのアクセスを有する。所定のスレッドに対し、フェッチステージ１４は、スレッドのプログラムカウンタによって示されるように、命令メモリ１２の次のアドレスからそのスレッドの次の命令をフェッチする。本明細書で言及される場合は、命令は、オペコードおよび０またはそれ以上のオペランドで構成される機械語命令（すなわち、コンピュータの命令セットの基本命令のうちの１つのインスタンス）を意味することに留意されたい。また、各タイルにロードされるプログラムは、サポートされている機械知能モデルのグラフに基づいて作業を割り当てるためにプロセッサまたはコンパイラによって決定されることにも留意されたい。
【００３７】
次いで、フェッチステージ１４は、フェッチした命令を復号のために復号ステージ１６に渡し、次いで、復号ステージ１６は、命令を実行するために、命令において指定された現在のコンテキストの任意のオペランドレジスタの復号済みのアドレスと共に、復号済みの命令の表示を実行ステージ１８に渡す。
【００３８】
本例では、スレッドスケジューラ２４は、ラウンドロビンスキームに従ってスレッドをインターリーブし、それにより、スキームの各ラウンド内では、ラウンドは、時間スロットＳ０、Ｓ１、Ｓ２、Ｓ３のシーケンスに分割され、各時間スロットは、それぞれのスレッドを実行するためのものである。典型的には、各スロットは、プロセッササイクル１つ分の長さであり、異なるスロットは、均等にサイズ指定される（ただし、すべての可能な実施形態において必ずしもそうであるとは限らない）。次いで、このパターンは繰り返され、各ラウンドは、時間スロットの各々の対応するインスタンスを含む（実施形態では、毎回同じ順番であるが、この場合も、すべての可能な実施形態において必ずしもそうであるとは限らない）。従って、本明細書で言及される場合は、時間スロットは、シーケンスにおいて繰り返される割り当てられた場所であり、シーケンスの所定の繰り返しにおける時間スロットの特定のインスタンスではないことを意味することに留意されたい。示される実施形態では、８つの時間スロットが存在するが、他の数も可能である。各時間スロットは、実行スレッドのコンテキストを管理するために、ハードウェアリソース（例えば、レジスタ）と関連付けられる。
【００３９】
ＳＶとラベル付けされたコンテキスト２６のうちの１つは、「スーパーバイザ」（ＳＶ）の状態を表すための特別な機能のために確保され、スーパーバイザの仕事は、「ワーカー」スレッドの実行を調節することである。スーパーバイザは、並列に実行することができる１つまたは複数のスーパーバイザスレッドとして編成されたプログラムとして実装することができる。また、スーパーバイザスレッドは、後に説明されるように、バリア同期の実行に対する責任を有してもよいか、あるいは、タイル上またはタイル外のデータ交換ならびにローカルメモリへのおよびローカルメモリからのデータ交換に対する責任を有してもよい。その結果、スーパーバイザスレッドは、演算の合間にワーカースレッド間で共有することができる。スーパーバイザスレッドは、交換コードを実装し、交換コードは、タイル上またはタイル外のデータ交換に関与する命令である。スレッドスケジューラ２４は、プログラムが全体として始まると、スーパーバイザスレッドを時間スロットのすべてに割り当てる（すなわち、従って、スーパーバイザＳＶは、すべての時間スロットＳ０…Ｓ５において実行し始める）ことによって開始するように構成される。しかし、スーパーバイザスレッドには、後続のある時点で（すぐにまたは１つもしくは複数のスーパーバイザタスクを実行した後に）、実行しているスロットの各々をワーカースレッドＣ０、Ｃ１のそれぞれに一時的に委ねる（relinquish）ためのメカニズムが提供される（Ｃ０、Ｃ１は、ワーカースレッドが割り当てられているスロットを示す）。このことは、スーパーバイザスレッドが委託（relinquish）命令（本明細書では例示として「ＲＵＮ」と呼ばれる）を実行することによって達成される。実施形態では、この命令は、命令メモリ１２のワーカースレッドのアドレスと、データメモリ２２のそのスレッドに対するいくつかのデータのアドレスとの２つのオペランドを取る。
ＲＵＮ  ｔａｓｋ＿ａｄｄｒ，ｄａｔａ＿ａｄｄｒ
【００４０】
各ワーカースレッドは、コードレットであり、コードレットは、グラフの頂点を表し、アトミックに実行することを意図する。それは、起動時に利用可能な消費されるすべてのデータであり、終了するまで他のスレッドには見えない生成されるすべてのデータである。それは、完全に終了するまで実行される（誤差条件を除いて）。データアドレスは、コードレットによる動作の基となるいくつかのデータを指定することができる。あるいは、委託命令は、コードレットのアドレスを指定する単一のオペランドのみを取ることができ、データアドレスをコードレットのコードに含めることも、単一のオペランドがコードレットおよびデータのアドレスを指定するデータ構造を指し示すこともできる。コードレットは、並列にかつ互いに独立して実行することができる。
【００４１】
いずれにせよ、この委託命令（「ＲＵＮ」）は、現在の時間スロット（すなわち、この命令が実行される時間スロット）を、オペランドによって指定されたワーカースレッドに委ねるように、スレッドスケジューラ２４に作用する。委託命令では、委ねられるものが、この命令が実行される時間スロットであることは暗黙的であることに留意されたい（機械語命令の文脈では、暗黙的であるということは、オペランドがこれを指定する必要がないということ、すなわち、オペコード自体から暗黙のうちに理解されていることを意味する）。従って、渡されるスロットは、スーパーバイザが委託命令を実行するスロットである。あるいは、言い換えれば、スーパーバイザは、スーパーバイザが渡すものと同じ空間において実行している。スーパーバイザは、「この時間スロットでこのコードレットを実行せよ」と指令し、次いで、それ以降は、そのスロットは、関連ワーカースレッドによって（一時的に）所有される。スーパーバイザがスロットを使用する際、スーパーバイザは、そのスロットと関連付けられたコンテキストを使用せず、それ自体のコンテキストＳＶを使用することに留意されたい。
【００４２】
スーパーバイザスレッドＳＶは、ワーカースレッドのそれぞれに、すべてのスロットＣ０、Ｃ１を渡すために、時間スロットの各々において同様の動作を実行する。最後のスロットに対して動作が終了した時点で、スーパーバイザは、動作しているスロットを有さないため、動作を一時停止する。スーパーバイザは、そのすべてのスロットを渡さず、スーパーバイザ自体が動作するためにいくつかのスロットを保持できることに留意されたい。
【００４３】
コードレットを実行する時間であるとスーパーバイザスレッドが決定すると、スーパーバイザスレッドは、委託命令（「ＲＵＮ」）を使用して、「ＲＵＮ」命令を実行するスロットにこのコードレットを割り当てる。
【００４４】
スロットＣ０、Ｃ１のワーカースレッドの各々は、その１つまたは複数の演算タスクの実行に進む。そのタスクの終了時には、ワーカースレッドは、実行している時間スロットをスーパーバイザスレッドに返す。
【００４５】
この動作は、ワーカースレッドが終了命令（「ＥＸＩＴ」）を実行することによって達成される。一実施形態では、ＥＸＩＴ命令は、終了時にそれぞれのコードレットの状態を示すためにプログラマにとって望ましい目的のために使用される、少なくとも１つのオペランド、好ましくは、単一のオペランド（終了状態（例えば、２進値））のみを取る。
ＥＸＩＴ  ｅｘｉｔ＿ｓｔａｔｅ
【００４６】
一実施形態では、ＥＸＩＴ命令は、実行される時間スロットがスーパーバイザスレッドに返されるように、スケジューラ２４に作用する。次いで、スーパーバイザスレッドは、１つまたは複数の後続のスーパーバイザタスク（例えば、ワーカースレッド間のデータの交換を容易にするために、バリア同期および／またはメモリのデータの移動）を実行すること、ならびに／あるいは、新しいワーカースレッド（Ｗ４など）を問題のスロットに割り当てるために、別の委託命令の実行を続行することができる。従って、この場合もやはり、命令メモリ１２のスレッドの総数は、いかなる時間においてもバレルスレッド処理装置１０がインターリーブできる数より大きいものであってもよいことに留意されたい。命令メモリ１２からのどのワーカースレッドＷ０…Ｗｊをプログラム全体のどの段において実行するかをスケジューリングすることは、スーパーバイザスレッドＳＶの役割である。
【００４７】
別の実施形態では、ＥＸＩＴ命令は、終了状態を定義する必要はない。
【００４８】
この命令は、実行される時間スロットがスーパーバイザスレッドに返されるように、スレッドスケジューラ２４に作用する。次いで、スーパーバイザスレッドは、１つまたは複数のスーパーバイザの後続のタスク（例えば、バリア同期および／またはデータの交換）を実行すること、ならびに／あるいは、別の委託命令の実行を続行することなどができる。
【００４９】
上記で簡単に述べられているように、データはチップのタイル間で交換される。各チップは、演算段階および交換段階を含むバルク同期並列プロトコルを動作させる。プロトコルは、例えば、図３に示されている。図３の左側の図は、演算段階を表し、演算段階では、各タイル４は、ステートフルコードレットがローカルメモリ（１２、２２）上で実行される段階にある。図３では、タイル４は、円状に配置されて示されているが、これは、単なる例示を目的とし、実際のアーキテクチャを反映するものではない。
【００５０】
演算段階の後には、同期があり、矢印３０によって示されている。この同期を達成するため、プロセッサの命令セットにＳＹＮＣ（同期）命令が提供される。ＳＹＮＣ命令は、現在実行しているすべてのワーカーＷがＥＸＩＴ命令によって終了するまで、スーパーバイザスレッドＳＶを待機させるという効果を有する。実施形態では、ＳＹＮＣ命令は、オペランド（実施形態では、その唯一のオペランド）としてモードを取り、そのモードは、ＳＹＮＣを、同じプロセッサモジュール４（例えば、同じタイル）上で局所的に実行しているそれらのワーカースレッドのみに関連して局所的にのみ動作させるか、または、代わりに、複数のタイルにわたってもしくは複数のチップにわたって動作させるかを指定する。
ＳＹＮＣ  ｍｏｄｅ  ／／  ｍｏｄｅ∈｛ｔｉｌｅ，ｃｈｉｐ，ｚｏｎｅ＿１，ｚｏｎｅ＿２｝
【００５１】
ＢＳＰ自体は、当技術分野で知られている。ＢＳＰによれば、各タイル４は、交互サイクルにおいて演算段階５２および交換（場合により、通信またはメッセージ通過と呼ばれる）段階５０を実行する。演算段階および交換段階は、命令を実行するタイルによって実行される。演算段階５２の間、各タイル４は、タイル上で局所的に１つまたは複数の演算タスクを実行するが、他のいかなるタイル４ともこれらの演算の結果を通信することはない。交換段階５０では、各タイル４は、グループ内の１つもしくは複数の他のタイルにおよび／または１つもしくは複数の他のタイルから、先行する演算段階からの演算の１つまたは複数の結果を交換（通信）することは認められているが、依然として、別のタイル４に対して実行されたタスクへの潜在的な依存性を有するかまたは別のタイル４に対するタスクが潜在的に依存性を有し得る新しい演算を実行することはない（内部制御関連動作などの他の動作を交換段階において実行できることは除外されない）。さらに、ＢＳＰ原理によれば、バリア同期は、演算段階５２から交換段階５０に移行する時点、交換段階５０から演算段階５２に移行する時点またはその両方の時点で行われる。すなわち、（ａ）グループ内のいずれかのタイルが次の交換段階５０に進むことを認める前に、すべてのタイル４がそれらのそれぞれの演算段階５２を完了する必要があるか、（ｂ）グループ内のいずれかのタイルが次の演算段階５２に進むことを認める前に、グループ内のすべてのタイル４がそれらのそれぞれの交換段階５０を完了する必要があるか、または、（ｃ）これらの条件の両方が実施される。次いで、交換および演算段階のこのシーケンスは、複数の繰り返しにわたって繰り返すことができる。ＢＳＰ専門用語では、交換段階と演算段階の各繰り返しは、本明細書では、「スーパーステップ」と呼ばれ、ＢＳＰのいくつかの以前の説明における使用と一致する。本明細書では、「スーパーステップ」という用語は、当技術分野では、場合により、交換段階および演算段階の各々を示すために使用されるということが知られている。
【００５２】
実行段１８の実行ユニット（ＥＸＵ）は、ＳＹＮＣ命令のオペコードに応答して、オンチップ（タイル間）オペランドによって適格化されると、アレイ６のすべてのタイル４がワーカーの実行を終了するまで、「ＳＹＮＣチップ」が実行されたスーパーバイザスレッドを一時停止させるように構成される。この動作は、次のＢＳＰスーパーステップへのバリアを実装するために使用することができる（すなわち、チップ２上のすべてのタイル４がバリアを通過した後、全体としてのクロスタイルプログラムは、次の交換段階５０に進行することができる）。
【００５３】
各タイルは、その同期状態を同期モジュール３６に示す。各タイルがデータを送信する準備が整ったことが確立された時点で、同期プロセス３０は、システムが交換段階（図３の右側に示されている）に入るようにする。この交換段階では、データ値は、タイル間（実際には、メモリからメモリへのデータ移動におけるタイルのメモリ間）を移動する。交換段階では、タイルプログラム間の並列処理障害を引き起こし得る演算は存在しない。交換段階では、各データは、送信タイルから１つまたは複数の受信タイルに向かってタイルを出る接続ワイヤに沿って移動する。各クロックサイクルでは、データは、パイプライン方式で、そのパスに沿って（ストアからストアに）一定の距離を移動する。データがタイルから発行される際、データには、受信タイルを識別するヘッダは発行されない（ただし、データは、スイッチング構造３４を通じる少なくとも１つの移動方向を示すヘッダを含んでもよい）。代わりに、受信タイルは、ある時刻にある送信タイルからデータが来るであろうことを知っている。従って、本明細書で説明されるコンピュータは、時間決定論的なものである。各タイルは、プログラマまたはコンパイラによって割り当てられているプログラムを処理する。プログラマまたはコンパイラ機能は、ある時刻に特定のタイルによって何が送信されるか、および、ある時刻に受信タイルによって何を受信する必要があるかに関する知識を有する。この動作を達成するため、ＳＥＮＤ命令は、各タイル上でプロセッサによって実行されるローカルプログラムに含められ、ＳＥＮＤ命令の実行の時間は、コンピュータの他のタイル上で実行されている他の命令のタイミングに対して事前に決定される。この動作については、後により詳細に説明するが、最初に、受信タイルが既定の時刻にデータを受信することができるメカニズムについて説明する。各タイル４は、それ自体のマルチプレクサ２１０と関連付けられる。従って、チップは、１２１６個のマルチプレクサを有する。各マルチプレクサは、１２１６個の入力を有し、各入力は、３２ビット幅（任意に、３２ビット幅にいくつかの制御ビットを加えたもの）である。各入力は、スイッチング構造３４の接続ワイヤ１４０ｘ  ｉｎのそれぞれのセットに接続される。また、スイッチング構造の接続ワイヤは、各タイルから接続ワイヤ２１８のデータ出力セット（後に説明するブロードキャスト交換バス）にも接続され、１２１６セットの接続ワイヤが存在し、それらの接続ワイヤは、この実施形態では、チップを横断する方向に延在する。例示し易いように、ボールド体の単一のワイヤセット１４０ｓｃが、南アレイ６ｂにおいて、図２には示されていないタイルから来るデータ出力ワイヤ２１８ｓに接続されるように示されている。このワイヤセットは、多くのセットのクロスワイヤ１４００〜１４０１２１５のうちの１つであることを示すため、１４０ｘとラベル付けされている。ここでは、図２から分かるように、マルチプレクサ２１０が２２０ｘとラベル付けされた入力に切り替わると、クロスワイヤ１４０ｘに接続され、南アレイ６ｂからのタイル（図２には示さず）のデータ出力ワイヤ２１８ｓに接続されることが理解されよう。マルチプレクサがある時���にその入力（２２０ｓｃ）に切り替わるように制御される場合は、接続ワイヤ１４０ｘのセットに接続されたデータ出力ワイヤ上で受信されるデータは、ある時刻にマルチプレクサ２１０の出力２３０に現れる。そのデータは、その後、ある遅延でタイル４に到達し、その遅延は、タイルからのマルチプレクサの距離に依存する。マルチプレクサはスイッチング構造の一部を形成するため、タイルからマルチプレクサへの遅延は、タイルの場所に応じて異なり得る。スイッチングを実装するため、タイル上で実行されるローカルプログラムは、そのタイルと関連付けられたマルチプレクサが、タイルでの特定のデータの受信が予期される時刻に先がけてある時刻にその入力に切り替わるように制御するために、マルチプレクサ制御信号２１４を発行させるスイッチ制御命令（ＰＵＴｉ）を含む。交換段階では、マルチプレクサが切り替えられ、パケット（データ）は、スイッチング構造を使用してタイル間で交換される。この説明から、スイッチング構造が状態を有さない（各データの移動は、各マルチプレクサの入力が切り替わるべき特定のワイヤセットによって事前に決定される）ことは明確である。
【００５４】
ＳＥＮＤ命令は、データが送信タイルから１つまたは複数の受信タイルまでスイッチング構造３４に沿って移動する少なくとも１つの方向の表示を含む。単一のタイルＴから単一のタイルＴに送信されるデータは、交換構造３４に沿って２つの固定方向のうちの１つに移動することができ、その方向は、これらの２つの通信タイルインスタンスの識別子に依存する。タイルアーキテクチャは、送信者によって観測されるような交換方向を記載し、すべての送信命令は、１対の構成フラグを使用して、移動方向（東および／または西）を示す。実行されたすべてのＳＥＮＤ命令に対して東有効フラグと西有効フラグの両方を設定することは、機能的に有効である（実際に、２つ以上の受信タイルが存在し、それらの受信者が異なる転送方向を必要とする際に必要である）。しかし、すべての受信タイルが厳密に送信タイルの東または西である事例では、関連方向フラグのみを設定することにより、電力最適化の利用が可能になる。
【００５５】
図１３を参照すると、スイッチング構造３４を通じたデータの移動方向を制御するために少なくとも１つの方向の表示をどのように使用できるかが示されている。
【００５６】
送信タイル１３１０のプロセッサが送信命令を実行すると、送信命令によって提供された少なくとも１つの方向の表示が、スイッチング構造に送信するために、データに挿入されてもよい。その表示は、データのヘッダに挿入することができる。この例では、受信タイル１３２０は、送信タイル１３１０から第２の方向に位置するものとして示されている。従って、少なくとも１つの方向の表示は、データがスイッチング構造３４を通じて第２の方向に送信されるという表示を含む。この例では、送信タイル１３１０からスイッチング構造３４に沿って第１の方向に位置付けられたた受信タイルは存在しないため、少なくとも１つの方向の表示は、データがスイッチング構造３４を通じて第１の方向に送信されないという表示を含む。送信タイル１３１０のプロセッサは、送信命令の実行に応答して、送信時刻に、スイッチング構造３４の接続ワイヤ１３３０にデータを送信するように構成することができる。接続ワイヤ１３３０上には、次のストアにリリースする前にクロックサイクルの間にデータを保持する一連の一時的なストア１３４０ａ、１３４０ｂ、１３４０ｃ、１３４０ｄ、１３４０ｅ、１３４０ｆ（例えば、ラッチまたはフリップフロップ）が存在する。一時的なストアの各々は、一時的なストアを通過して接続ワイヤ１３３０の下流までデータを送信すべきか否かを判断するため、適切な処理回路を含むことも、適切な処理回路と関連付けることもできる。
【００５７】
データが一時的なストアのうちの１つに到達すると、少なくとも１つの方向の表示は、一時的なストアを通じてデータの送信が許可されるか、または、スイッチング構造に沿ってさらに先への送信を阻止／防止すべきかを判断するために評価される。例えば、接続ワイヤ１３３０上のデータが一時的なストア１３４０ａに到達すると、データは第１の方向に送信するためのものか否かに関する表示がチェックされる。この例では、データは受信タイル１３２０に伝達するために第２の方向にのみ送信するためのものであるため、データは、一時的なストア１３４０ａを越えて通過することが防止される。
【００５８】
他方では、データが一時的なストア１３４０ｃに到達すると、データは第２の方向に送信するためのものか否かに関する表示がチェックされる。この例では、この表示は肯定されるため、データは、接続ワイヤ１３３０に沿って一時的なストア１３４０ｃを通じて送信される。一時的なストア１３４０ｄ、１３４０ｅ、１３４０ｆにおいて同じチェックを実行し、結論に達することができる。これにより、データがそのタイル１３２０の入力マルチプレクサ１３５０を介して受信タイル１３２０に到達することが保証される。
【００５９】
従って、スイッチング構造の構成は、データの送信用に示された１つまたは複数の方向に沿ってのみデータを通過させ、スイッチング構造にわたってデータの送信用に示されていない方向へのデータの送信を防止するように構成される。これは、特定のデータを受信することになっているタイルが存在しないスイッチング構造の部分へのデータの送信を低減することによって電力最適化を可能にするという利点を有する。逆方向性は、タイル交換方向に当てはまらなくともよい。例えば、タイル１３１０が、タイル１３２０に伝達するために第２の方向への送信は認められているが第１の方向への送信は認められていないという表示を有するデータのすべてを送信している場合は、これは、タイル１３２０がタイル１３１０に伝達するためにデータを送信する際、データが、第１の方向への送信は認められているが第２の方向への送信は認められていないという表示を含まなければならないことを示唆しない。それは、例えば、タイル１３２０が、スイッチング構造上で第２の方向と第１の方向の両方において送信が行われるべきであるという表示を有するデータをタイル１３１０に送信する場合である。
【００６０】
交換段階では、すべてのタイルからすべてのタイルへの通信が可能である。交換段階は、複数のサイクルを有することができる。各タイル４は、独自の入力マルチプレクサ２１０の制御を有する。チップの他の任意のタイルからまたは接続リンクのうちの１つからの受信トラフィックを選択することができる。マルチプレクサは、「ヌル」入力を受信する（すなわち、その特定の交換段階において他の任意のタイルからの入力がない）ように設定できることに留意されたい。その選択は、交換段階内でサイクルごとに変更することができ、全体を通じて一定である必要はない。データは、選択されたリンクに応じて、チップ上で、チップからチップへまたはチップからホストへ交換することができる。本出願は、主に、チップ上のタイル間通信に関係がある。チップ上における同期を実行するため、チップ上においてタイルのすべてから同期コントローラ３６に少数のパイプライン信号が提供され、同期コントローラからすべてのタイルにパイプラインｓｙｎｃ−ａｃｋ信号が戻される。一実施形態では、パイプライン信号は、１ビット幅のデイジーチェーン方式のＡＮＤ／ＯＲ信号である。タイル間の同期が達成されるメカニズムの１つは、上記で言及されるかまたは以下で説明されるＳＹＮＣ命令である。他のメカニズムを利用することができるが、重要なことは、チップの演算段階とチップの交換段階との間（図３）ですべてのタイルを同期できることである。ＳＹＮＣ命令は、タイル４上の専用同期論理および同期コントローラ３６においてトリガ予定の後続の機能をトリガする。同期コントローラ３６は、ハードウェア相互接続３４に実装されてもよいし、または、示されるように、別個のオンチップモジュールにおいて実装されてもよい。オンタイル同期論理と同期コントローラ３６の両方の機能は、ＳＹＮＣ命令が実行されると、さらなる命令がそうするように実行されることなく、残りの機能が進むよう、専用ハードウェア回路において実装される。
【００６１】
最初に、オンタイル同期ロジックは、問題のタイル４上のスーパーバイザに対する命令発行を自動的に一時停止させる（スーパーバイザの命令の発行の中断をフェッチステージ１４およびスケジューラ２４に行わせる）。ローカルタイル４上のすべての顕著なワーカースレッドがＥＸＩＴを実行した時点で、同期ロジックは、「ｓｙｎｃ＿ｒｅｑ」という同期要求を同期コントローラ３６に自動的に送信する。次いで、ローカルタイル４は、スーパーバイザ命令発行を一時停止させた状態で待ち続ける。また、アレイ６の他の各タイル４（各々は、同期ロジックのインスタンスを含む）上でも同様のプロセスが実装される。従って、ある時点では、現在の演算段階５２のすべての最終的なワーカーがアレイ６のすべてのタイル４上でＥＸＩＴを実行した時点で、同期コントローラ３６は、アレイ６のすべてのタイル４からそれぞれの同期要求（ｓｙｎｃ＿ｒｅｑ）を受信していることになる。次いで、同じチップ２上のアレイ６のすべてのタイル４からｓｙｎｃ＿ｒｅｑを受信することに応答して、同期コントローラ３６は、「ｓｙｎｃ＿ａｃｋ」という同期確認信号をタイル４の各々の同期ロジックに送り返す。この時点までは、タイル４の各々は、そのスーパーバイザ命令発行が一時停止されており、同期確認信号（ｓｙｎｃ＿ａｃｋ）を待っている状態である。ｓｙｎｃ＿ａｃｋ信号を受信した時点で、タイル４の同期ロジックは、そのタイル４上のそれぞれのスーパーバイザスレッドに対するスーパーバイザ命令発行の一時停止を自動的に解除する。次いで、スーパーバイザは、後続の交換段階５０において相互接続３４を介して他のタイル４とのデータ交換を自由に進めることができる。
【００６２】
好ましくは、ｓｙｃｎ＿ｒｅｑおよびｓｙｎｃ＿ａｃｋ信号は、相互接続３４によって各タイル４を同期コントローラ３６に接続する１つまたは複数の専用同期ワイヤを介して、同期コントローラへのおよび同期コントローラからの送信および受信のそれぞれが行われる。
【００６３】
ここでは、タイルの接続構造をより詳細に説明する。
【００６４】
各タイルは、３つのインタフェース、すなわち、
スイッチング構造３４からタイル４にデータを渡すｅｘｉｎインタフェース２２４と、
ブロードキャスト交換バス２１８上でタイルからスイッチング構造にデータを渡すｅｘｏｕｔインタフェース２２６と、
タイル４からそのマルチプレクサ２１０に制御ｍｕｘ信号２１４（ｍｕｘ選択）を渡すｅｘｍｕｘインタフェース２２８と
を有する。
【００６５】
個々のタイルの各々が、正しいデータを送信および受信するために、適切な時刻にＳＥＮＤ命令およびスイッチ制御命令を実行することを保証するため、プログラマまたはコンパイラによって、個々のプログラムをコンピュータの個々のタイルに割り当てる交換スケジューリング要件を満たす必要がある。この機能は、以下の交換タイミング（ＢＮＥＴ）パラメータを知っている必要がある交換スケジューラによって実行される。パラメータを理解するため、図２の簡略化バージョンが図４に示されている。また、図４は、受信タイルおよび送信タイルも示す。
【００６６】
Ｉ．各タイルの相対的なＳＹＮＣ確認遅延ＢＮＥＴ＿ＲＳＡＫ（ＴＩＤ）。ＴＩＤは、後に説明するＴＩＬＥ＿ＩＤレジスタに保持されたタイル識別子である。このパラメータは、常に０以上であるサイクル数であり、各タイルが最先の受信タイルに対して同期コントローラ３６からａｃｋ信号をいつ受信するかを示す。このパラメータは、タイルＩＤから計算することができ、タイルＩＤは、チップ上におけるそのタイルの特定の場所を示し、従って、物理的な距離を反映することに留意されたい。図４は、１つの送信タイル４Ｔおよび１つの受信タイル４Ｒを示す。原寸に比例しておらず、概略的にのみ示されているが、タイル４Ｔは、同期コントローラにより近く示され、タイル４Ｒは、同期コントローラからより離れて示されており、同期確認遅延は、タイル４Ｒに対するものよりタイル４Ｔに対するものの方が短いという結果を伴う。特定の値は、同期確認遅延に対して各タイルと関連付けられる。これらの値は、例えば、遅延表に保持することも、タイルＩＤに基づいて毎回オンザフライで計算することもできる。
【００６７】
ＩＩ．交換ｍｕｘ制御ループ遅延ＢＮＥＴ＿ＭＸＰ（受信タイルのＴＩＤ）。このパラメータは、タイルの入力ｍｕｘ選択を変更する命令（ＰＵＴｉ−ＭＵＸｐｔｒ）の発行と、同じタイルが新しいｍｕｘ選択の結果としてメモリに格納された交換データのためのロード命令（仮定）を発行できる最も早い時点との間のサイクル数である。図４を見ると、この遅延は、受信タイル４Ｒのｅｘｍｕｘインタフェース２２８Ｒからそのマルチプレクサ２１０Ｒへの制御信号の遅延と、マルチプレクサの出力からデータ入力ｅｘｉｎインタフェース２２４までのラインの長さとを含む。
【００６８】
ＩＩＩ．タイル間の交換遅延ＢＮＥＴ＿ＴＴ（送信タイルのＴＩＤ、受信タイルのＴＩＤ）。このパラメータは、１つのタイル上で発行されているＳＥＮＤ命令と、受信タイルがそれ自体のメモリの送信値を指し示すロード命令（仮定）を発行できる最も早い時点との間のサイクル数である。このパラメータは、既に論じられているような表にアクセスすることによってまたは計算によって、送信および受信タイルのタイルＩＤから決定されている。再び図４を見ると、この遅延は、その交換バス２１８Ｔに沿って送信タイル４Ｔのそのｅｘ＿ｏｕｔインタフェース２２６Ｔからスイッチング構造３４にデータを移動し、次いで、受信タイル４Ｒにおける入力ｍｕｘ  ２１０Ｒを介して受信タイルのｅｘ＿ｉｎインタフェース２２４Ｒにデータを移動するのに要する時間を含む。
【００６９】
ＩＶ．交換トラフィックメモリポインタ更新遅延ＢＮＥＴ＿ＭＭＰ（）。このパラメータは、タイルの交換入力トラフィックメモリポインタを変更する命令（ＰＵＴｉ−ＭＥＭｐｔｒ）の発行と、同じタイルが新しいポインタの結果としてメモリに格納された交換データのためのロード命令（仮定）を発行できる最も早い時点との間のサイクル数である。このパラメータは、固定された少数のサイクルである。メモリポインタについては未だ論じていないが、図２において２３２で示されている。メモリポインタは、データメモリ２２へのポインタとして動作し、ｅｘ＿ｉｎインタフェース２２４からの受信データをどこに格納するかを示す。このメモリポインタについては、後により詳細に説明する。
【００７０】
交換構造に沿った東方に向かう遅延ＢＮＥＴ＿ＥＡＳＴ（ＴＩＤｓ，ＴＩＤｒ）。このパラメータは、交換構造に沿った送信タイルから受信タイルへの遅延である。
【００７１】
以下では、スーパータイルについて言及している。各スーパータイルは、４つのタイルを含み、各タイルは、図１６に示されるような識別子を有する。本明細書で説明されるように、タイル識別子は、５ビットスーパータイルＩＤ、４ビット列ＩＤおよび２ビットタイルＩＤの形態である。
【数１】
2020102185.tif 000003
【００７２】
これらの遅延に寄与するパスコンポーネントおよびそれらの定義は、以下に示すようになる。
【数２】
2020102185.tif 000004
【００７３】
図５は、交換タイミングをより詳細に示す。図５の左側は、０〜３０のＩＰＵクロックサイクルである。送信タイル４Ｔの動作は、０〜９のＩＰＵクロックサイクルで起こり、送信命令（ＳＥＮＤ  Ｆ３）の発行から始まる。１０〜２４のＩＰＵクロックサイクルでは、データがスイッチング構造３４を通じて輸送される。
【００７４】
ＩＰＵクロックサイクル１１の受信タイル４Ｒを見ると、ＰＵＴｉ−ＭＸｐｔｒ（Ｆ３）というタイル入力ｍｕｘ選択を変更するＰＵＴｉ命令が実行されている。図５では、このＰＵＴｉ命令は、「ＰＵＴｉ  ＩＮＣＯＭＩＮＧ  ＭＵＸ（Ｆ３）」とラベル付けされている。
【００７５】
サイクル１８では、ＰＵＴｉ−ＭＥＭｐｔｒ（Ｆ３）というメモリポインタ命令が実行されており、それにより、ＩＴＵクロックサイクル２５におけるロード命令が可能になる。図５では、このＰＵＴｉ命令は、「ＰＵＴｉ  ＩＮＣＯＭＩＮＧ  ＡＤＲ（Ｆ３）」とラベル付けされている。
【００７６】
送信タイル４Ｔでは、ＩＰＵクロックサイクル１、３および５は、「Ｔｒａｎｓｐｏｒｔ（）」とマーク付けされている。これは、ＳＥＮＤ命令の発行と、ｅｘｏｕｔインタフェースＦ４、Ｅ１、Ｅ３などにおけるＳＥＮＤ命令のデータの出現との間の内部タイル遅延である。ｅｘｏｕｔインタフェースに輸送中の先のＳＥＮＤ命令のデータを表す。ＩＰＵクロックサイクル２は、ＳＥＮＤ命令に対するアドレス形成ＥＯに割り当てられている。これは、ＥＯがフェッチされる対象となる場所であり、その送信先アドレスではないことに留意されたい。ＩＰＵクロックサイクル４では、メモリからＥ２をフェッチするために、メモリマクロが実行される。ＩＰＵクロックサイクル６では、Ｅ４に対するパリティチェックが実行される。ＩＰＵクロックサイクル７では、Ｅ５を送信するために、ＭＵＸ出力命令が実行される。ＩＰＵクロックサイクル８では、Ｅ６が符号化され、ＩＰＵクロックサイクル９では、Ｅ７が出力される。
【００７７】
交換構造３４では、１０〜２４のＩＰＵクロックサイクルは、「交換パイプステップ（exchange pipe stage）」とラベル付けされている。各サイクルでは、データは、パイプラインに沿って「１ステップ」移動する（一時的なストア間）。
【００７８】
サイクル２５〜２８は、受信タイル４Ｒにおける、ｅｘｉｎインタフェースにおけるデータの受信と（実行用Ｍｅｍ  Ｍａｃｒｏ（Ｅ２）を参照）の間の遅延を示し、サイクル２５〜２９は、ｅｘｉｎインタフェースにおけるデータの受信とメモリへのデータのロード（ＬＤ用Ｍｅｍ  Ｍａｃｒｏ（Ｅ２）を参照）との間の遅延を示す。他の機能は、その遅延で実行することができる（Ｅａｒｌｉｅｓｔ  ＬＤ（Ｆ３）、Ｒｅｇ  ｆｉｌｅ  ｒｄ（Ｆ４）、ｆｏｒｍ  ａｄｄｓ（ＥＯ）、Ｔｒａｎｓｐｏｒｔ（Ｅ１）を参照）。
【００７９】
簡単に言えば、送信タイル４Ｔにおけるプロセスの出力であるデータ（例えば、Ｆ３）に基づいて動作することを受信タイル４Ｒのプロセッサが望む場合は、送信タイル４Ｔは、ある時刻（例えば、図５では、ＩＰＵクロックサイクル０）にＳＥＮＤ命令［ＳＥＮＤ（Ｆ３）］を実行しなければならず、受信タイルは、送信タイルにおけるＳＥＮＤ命令［ＳＥＮＤ（Ｆ３）］の実行に対してある時刻にスイッチ制御命令ＰＵＴｉ  ＥＸＣＨ  ＭＸｐｔｒを実行しなければならない（ＩＰＵクロックサイクル１１のように）。これにより、受信タイルで実行されているコードレットでの使用のためにＩＰＵサイクル２５におけるロード［ｅａｒｌｉｅｓｔ  ＬＤ（Ｆ３）］に間に合うようにデータが受信タイルに到達することが保証される。
【００８０】
受信タイルにおける受信プロセスは、命令ＰＵＴｉ  ＭＥＭｐｔｒと同様のメモリポインタの設定を伴う必要はないことに留意されたい。代わりに、各データがｅｘｉｎインタフェース２２４において受信された後、メモリポインタ２３２（図２）は自動的にインクリメントされる。次いで、受信データは、次の利用可能なメモリ場所にロードされる。しかし、メモリポインタを変更する能力により、受信タイルは、データが記入されるメモリ場所を変更することができる。これはすべて、正しく通信できるように個々のタイルに個々のプログラムを記入するコンパイラまたはプログラマによって決定することができる。これにより、内部交換（チップ上の内部交換）のタイミングが完全に時間決定論的なものとなる。この時間決定論は、交換スケジューラによって、交換シーケンスを高度に最適化するために使用することができる。
【００８１】
図１４および１５を参照すると、プロセッサチップ２上の列のレイアウトの例が示され、チップ上のタイル４の構成がより詳細に示されている。各タイル４は、スーパータイル６１と呼ばれる４つのタイルのセットの一部である。各スーパータイル６１は、４つのタイル４を含む。簡単にするため、図１５に示されるスーパータイル６１のほんの少数のみが、それらの構成タイルに分けて示されている。
【００８２】
各スーパータイル６１は、列６２ｎと呼ばれるタイルのサブシステムの一部である。従って、各タイル４もまた、列６２ｎの一部である。一実施形態では、各列６２は、２０個のスーパータイル６１を含み、ＳＴ０〜ＳＴ１９の番号が付けられている（合計で８０個のタイル）。
【００８３】
上記で説明されるように、各タイル４は、３２ビット入力接続２１７および３２ビット出力接続２１８を有する。言及されるように、タイル４は、ある時刻にある送信タイルからデータが来るであろうことを知っており（タイル用にコンパイルされた命令のシーケンスにおいて定義されているため）、ある時刻に、送信タイルの出力２１８に接続された接続ワイヤ１４０のセットに接続された入力に切り替わるようにマルチプレクサを制御するために、ＰＵＴｉ−ＭＵＸｐｔｒという命令を実行する。これにより、受信タイルがデータの受信を予期している時刻にマルチプレクサ２１０の出力２３０にデータが現れることが保証される。
【００８４】
マルチプレクサ２１０は、制御ライン２１４上でマルチプレクサ制御信号を受信し、マルチプレクサ制御信号は、そのマルチプレクサがどこを「指し示す」べきか（すなわち、その時刻に送信が予期されるタイルを「リスン（listen）する」ため、そのマルチプレクサが交換構造３４上のクロスワイヤのどのセットに接続すべきか）を示す一意タイル識別子を識別する。
【００８５】
本明細書で説明される構成では、各列のタイル用のマルチプレクサは、４０セットの交換クロスワイヤのバンドルに接続される。各セットは、交換構造上の３２ビットデータの搬送を許可する。図１４にさらに示されるように、セットは、２つに分割され、東および西と呼ばれる（列のどちらの側にマルチプレクサが接続されるかに応じて）。図１４は、列の西側のスーパータイルＳＴ２に接続された２つのマルチプレクサと、列の東側のスーパータイルＳＴ３に接続された２つのマルチプレクサとを示す。列の西側では、２つのマルチプレクサは、スーパータイルＳＴ２の２つのタイルに接続されるように示されている。分かり易くするため、図１４では、他のマルチプレクサまたは接続ラインを示していないが、列の側の各スーパータイルに２つのマルチプレクサが存在し、合計で東側に２０個のマルチプレクサおよび西側に２０個のマルチプレクサが存在することが理解されよう。各マルチプレクサは、交換構造３４の交換クロスワイヤの１２８０セットのうちのいずれかへの接続が可能であるべきである。いくつかのチップでは、単に１２１６個の交換クロスワイヤが必要であるが、他のチップでは、すべての１２８０セットがアクティブであってもよい。効率的に修理を実装できるように、１２１６通りのマルチプレクサを実装するため、各マルチプレクサ２１０は、３２個の４０通りのマルチプレクサスライスを含み、それらは、図１２に示されている。マルチプレクサスライスは、１２１０−０、１２１０−１…１２１０−３１とラベル付けされる。３２という数は、各交換構造に接続されたアレイの半列の数と整合させるために選ばれている。特定のプロセッサアーキテクチャにおいて列の数は変化し得るため、この数は変化し得ることに留意されたい。しかし、好ましい実施形態では、半列当たり１つのｎ通りのマルチプレクサスライスが存在する。マルチプレクサ２１０は、ライン２１４上でＭＵＸ制御信号を受信する復号ブロック１２２０を含む。言及されるように、復号ブロックは、ＭＵＸ制御ライン２１４上で送信タイルの一意タイル識別子を受信する。復号ブロック１２２０は、タイル識別子の列識別子ビットに基づいて、３２個のマルチプレクサスライスのうちの１つを選択する。次いで、タイル識別子の最下位ビットは、そのマルチプレクサスライスの入力の東のセットを選択するかまたは入力の西のセットを選択するかを示す（送信タイルが送信列の東側にあるかまたは西側にあるかに応じて）。次いで、タイル識別子のビットを識別するスーパータイルを使用して、マルチプレクサ２１０の東または西のスライスの２０個の入力のうちの１つを選択する。そういう意味で、以前に説明されるように、時間決定論的に、受信タイルにおける送信タイルからのメッセージの受信が予期される時刻に、特定の入力が選択される。
【００８６】
図１５にさらに示されるように、列ベース（column-base）補償遅延は、同様の列内交換およびいくつかの同様の列間交換パターンに対する同一交換コードの使用を可能にするために導入することができる。この文脈では、交換コードは、命令のシーケンスを含み、命令のシーケンスは、交換段階に関与し、タイル間のデータの交換を管理する。交換コードは、少なくともＳＥＮＤ命令およびスイッチ制御命令を含む。それに加えて、交換コードは、受信データがロードされるアドレスを決定することができるメモリポインタ命令を含んでもよい。列ベース補償遅延は、タイル間の交換経路の関連パスコンポーネントの各々に導入される遅延回路を形成するための遅延段の数を選択することによって導入することができる。以前の論考から明らかであるように、交換経路は、以下のコンポーネントを含む。
【００８７】
列の処理装置から列のベースにデータを伝播するのに要する時間であるタイルから列ベースへの遅延がある。この遅延は、列内のタイルの位置に依存する（列のベースからより離れたタイルの方が長い）。タイルから列ベースへの遅延は、列内のタイルの位置によって固定され、各列に配置されたタイルのすべてに対して同じである。
【００８８】
列ベース補償遅延は、タイルから交換構造に出力を搬送する出力パス２１８への補償の導入を可能にする。この補償は、示される出力ラインの各々においてブロック３１８によって示されている。理論上、遅延回路は、出力パス２１８のどこにでも位置してもよいが、実際には、出力ラインに対する列ベース補償遅延は、チップ上の列ベースとスイッチング構造との間の空間において遅延ステージのセットとして容易に実装できることが理解されよう。図１５は、基本的な概念を示すための高度な概略図である。
【００８９】
列ベースから交換バスへの遅延は、データが列ベース（列ベース補償遅延段から）とその列と関連付けられた交換バスワイヤのグループとの間の距離を横断するのに要する時間である。図１５から、この遅延は東の列に対して大きいことが分かるが、その理由は、東の列が、西の列よりさらに「南」の交換バスワイヤを使用するためであることに留意されたい。実際に、北の列の各々は、交換構造の中間ポイントへの交換バスワイヤのそれぞれの隣接グループ（南の方に移動する）に接続された出力ワイヤを有する。逆に、南の列の各々は、それぞれの隣接グループ（北の方に移動する）に接続された出力ワイヤを有する。
【００９０】
受信タイル（同じ列または別の列のものであり得る）によって正しい時刻に捕捉されるようにデータが伝播する間、交換構造に沿って遅延がある。タイルがそれ自体にメッセージを送信する際は、交換構造遅延が水平に均等に存在し得ることに留意されたい。
【００９１】
次いで、さらなる列ベース補償遅延を受信タイルの入力側に導入することができる。これは、図１５において、マルチプレクサ２１０の出力の遅延回路３１７として示されている。この場合もやはり、交換ワイヤのグループから最も東側のそれらの列への固有のパス遅延は、最も西側のものより大きいことに気付くであろう。しかし、入力パスに導入される補償遅延は、交換ＭＵＸ制御ループ遅延ＢＮＴ＿ＭＸＰにも影響を及ぼすことに留意されたい。交換ＭＵＸ制御ループ遅延ＢＮＴ＿ＭＸＰに影響が及ばないことを保証するため、この遅延は、遅延回路３１４によって示されるように、ＭＵＸ制御ライン２１４における対応する遅延補償によって補償する必要がある。
【００９２】
次いで、データが列ベース（列ベース補償遅延の出力から）から列のそれぞれのタイルに伝播する間、パスコンポーネント遅延がある。これは、列のタイルの位置に基づく。
【００９３】
交換パスには２つのさらなる遅延があり、その遅延は、タイル自体の内部のものである。送信プロセスの開始時には、ＳＥＮＤ命令の実行とタイルのＥＸ＿ＯＵＴインタフェースへのデータの到達との間の遅延がある。この遅延は、すべてのタイルに対して同一である。
【００９４】
それに加えて、タイルにおけるデータの受信と仮定としてロードすることができる最初の時刻との間の遅延がある。この遅延は、すべてのタイルに対して同一である。
【００９５】
各補償遅延は、プロセッサが最初にセットアップされる際に選択することができる複数の遅延ステージを含む。一実施形態によれば、遅延は、コンピュータの製造時に設計することができる。別の実施形態では、遅延ステージは、コンピュータのそれぞれのタイルにコードがロードされる前に、柔軟に（例えば、遅延段間のバイパスを使用することによって）選択可能なものであってもよい。
【００９６】
補償なしでは、列ｎの列内のタイル間の交換は、それより西の列のものより長くなるが、それは、北／南の方向への交換構造の横断に要する時間に起因する。一実装形態によれば、目的は、列内のタイル間の交換遅延ＢＮＥＴ＿ＴＴが列識別子に依存しないことを保証することである。これは、異なる列がすべて、時間決定論的に同じ交換コードを実行できることを意味する。
【００９７】
これを達成するため、送信および受信タイルが同じ列にある際は、出力パス上の列ベース補償遅延と列ベースから交換バスへの遅延との総和が一定になるように設定される。以前に説明されるように、列ベースから交換バスへの遅延は、列識別子に応じて変化するが、これは、列ベース補償遅延によって対応することができる。
【００９８】
それに加えて、交換バスから列ベースへの遅延と入力側の列ベース補償遅延との総和もまた、一定の値に設定することができる。すなわち、上記で説明されるように、交換バスから列ベースへの遅延は、列識別子に応じて変化するが、これは、入力側の補償遅延によって補償することができる。
【００９９】
各列に対してこれらの２つの総和に対する同じ一定の値を利用することにより、列内のタイル間の遅延は、列識別子に依存しない。
【０１００】
別の実装形態（最初のものと同じアーキテクチャにおいて実装することができる）では、列間のタイル間の遅延もまた、いくつかの規則性を有し、補償遅延は、ある交換パターンに対して交換コードを再利用できるように設計することができる。
【０１０１】
一事例では、送信タイルと受信タイルが両方とも北の列または南の列に位置する際は、タイル間遅延は、（ＴＩＤｒ．ｃｏｌｕｍｎ＿ｉｄＭＯＤ  ８）ＴＩＤｓ．ｃｏｌｕｍｎ＿ｉｄ  ＭＯＤ８）の関数である。例えば、列１と列４との間のトラフィックに対する交換コードは、列２と列５との間の同様の交換パターンに対して再利用することができ、交換トランザクションの方向と物理的な距離の両方を確保する。
【０１０２】
第２の事例では、送信タイルが北の列にあり、受信タイルが南の列にある際（またはその逆も同様）は、タイル間遅延は、（ＴＩＤｒ．ｃｏｌｕｍｎ＿ｉｄＭＯＤ  ８）−−（ＴＩＤｓ．ｃｏｌｕｍｎ＿ｉｄＭＯＤ８）の関数である。例えば、列０と列１３との間のトラフィックに対する交換コードは、列１と列１２との間の同様の交換パターンに対して再利用することができ、各交換トランザクションの方向と物理的な距離の両方を確保する。
【０１０３】
これは、相対的な送信および受信列識別子に依存するタイル間遅延のコンポーネントが存在することを理解することによって達成することができる。
ＡＢＳ（交換構造に沿った東方に向かう遅延ＴＩＤｓ，ＴＩＤｒ）の総和＋交換バスから列ベースへの遅延（ＴＩＤｓ，ＴＩＤｒ）＋列ベース補償遅延（ＴＩＤｒ）
【０１０４】
第１の項ＡＢＳは、物理的な列分離の関数であり、ＡＢＳ（Ｃｏｌｕｍｎ＿Ｐｏｓｉｔｉｏｎ＿Ｅａｓｔ（ＴＩＤｓ）−Ｃｏｌｕｍｎ＿Ｐｏｓｉｔｉｏｎ＿Ｅａｓｔ（ＴＩＤｒ））である。
【０１０５】
これは、次のように簡略化される。
【数３】
2020102185.tif 000005
第２の項の対の総和は、次のように簡略化される。
2020102185.tif 000006
簡略化された遅延公式は、以下の通りである。
【数４】
2020102185.tif 000007
【数５】
2020102185.tif 000008
【０１０６】
図１７に示される表（表Ｉ）は、補償遅延ステージの数の一例を示す。これらは、北アレイの第１の列（列０）およびｎ番目の列（列ｎ）に対して遅延補償回路内の数値によって、図１５の図に示されている。すなわち、この例によれば、列０の場合は、タイルから交換構造への遅延回路３１８は、３つの遅延ステージを含む。交換構造からタイルへの遅延補償３１７は、７つのステージを含む。これは、列０の場合と列ｎの場合において入力データが交換バスを横断する（この事例では、北の方向）のに要する時間の差を反映することに留意されたい。列０の場合は、スイッチ制御ライン２１４上の補償遅延はない。しかし、上記で説明される理由のため、交換ＭＵＸ制御ループ遅延に影響が及ばないような状態を維持するため、列ｎからのスイッチ制御ラインに対して７つのステージの遅延がある。
【０１０７】
図１８に示される表では、具体的な任意の例のうちの１つが例示として与えられている。この例では、送信タイル１１８６は、列０にあり、スーパータイル番号１８であり、受信タイル１１５３は、列８にあり、スーパータイル番号１８である。この事例では、ｎ＝７である（交換構造のそれぞれの側には８つの列）。これは、特に長いタイル間の遅延を例示する。具体的な例に見られるように、発信パスにおける列ベース補償遅延は、３つのステージの遅延補償を含み、表Ｉのタイルから交換構造への列ベース補償遅延と一致する。その上、受信側での列ベース補償遅延は７であり、これは、表Ｉの交換構造からタイルへの補償遅延段と一致する。表Ｉは、本明細書で既に論じている他の遅延パラメータと共に補償遅延を考慮して、任意の対の送信および受信タイルに対するタイル間の遅延を決定するために利用できることが容易に理解されよう。次いで、この表は、それぞれの列のタイルに対してコードがコンパイルされる際に時間決定論的交換のタイミングを決定するために利用することができる。図１８では、交換構造に沿った遅延は、東方に向かって定義され、従って、西の遅延は負で示される（例えば、−４３）ことに留意されたい。
【０１０８】
１つの列（または列グループ）用に特にコンパイルされた交換コードを、異なる列（または列グループ）のそれぞれのタイル上で変更しないまま、実行することを可能にするために、いくつかの実施形態において考慮する必要がある別の因子がある。そのような実施形態では、交換コードが生成される際、受信マルチプレクサをプログラムするために使用される命令は、ポインタ（ｔｉｌｅＩＤ）を明示的に表す。従って（例えば）、列内交換コードシーケンスが異なる列において実行される場合は、受信マルチプレクサ設定は、新しい列のそれぞれのタイルに属するバスの代わりに、オリジナルの列からの交換バスを指し示すことになる。このことは、ＣＯＬＵＭＮ＿ＯＦＦＳＥＴレジスタ（図２に示されるタイルのコンテキストステータスレジスタにある）を非ゼロ値にプログラムすることによって解決することができる。これにより、そのタイルのマルチプレクサに送信される直前に、そのようなすべてのｉｎｃｏｍｉｎｇ＿ｍｕｘポインタが（暗黙的に）修正される。例えば、列０のタイル用にコンパイルされた列内交換コードシーケンスを取り入れ、列０の代わりに列１のタイルにおいて実行するには、列１のすべてのタイルは、交換コードのその一部を実行する前に、そのＣＯＬＵＭＮ＿ＯＦＦＳＥＴレジスタを「１」にプログラムしなければならない。北の列用にコンパイルされたコードを南の列において実行するには（またはその逆も同様）、「北」と「南」の概念は、ＣＯＬＵＭＮ＿ＯＦＦＳＥＴレジスタにおいて特別なビットを設定することによって交換される。これは、すべての非マルチキャスト送信命令に対しておよび６４ビット幅受信に対して重要である。列のトポロジ的に同様のグループ間の交換コードの再利用を容易にするためのマルチプレクサ制御のメカニズムについては、以下で説明する。
【０１０９】
例えば、図１９には、異なる形で網掛けされた３つの列からなる４つのグループが示されている。示される列からなる４つのグループは、｛１，２，１１｝、｛４，５，８｝、｛９，１０，３｝、｛１２，１３，０｝である。これらの特定のグループは、このメカニズムの柔軟性を示すためだけに選ばれているが、他のオプションも可能である。グループのうちの１つのタイル用に交換コードが生成されており、他のグループにおいて同じコードを再利用することができると想定する。この想定を可能にするため、コンテキストステータスレジスタ＄ＩＮＣＯＭＩＮＧ＿ＭＵＸ内のｃｏｌｕｍｎ＿ｉｄフィールドは、各タイルのハードウェアメカニズムによって暗黙的に調整される。各タイルプロセッサのハードウェアは、方程式１のように、＄ＩＮＣＯＭＩＮＧ＿ＭＵＸ（ビット［５：２］）のｃｏｌｕｍｎ＿ｉｄフィールドを修正する。
ｍｏｄｉｆｉｅｄ＿ｃｏｌｕｍｎ＿ｉｄ［３：０］−ＭＯＤ（＄ＩＮＣＯＭＩＮＧ＿ＭＵＸ［５：２］＋（（＄ＩＮＣＯＭＩＮＧ＿ＭＵＸ［５：２］＜８）？＄ＣＯＬＵＭＮ＿ＯＦＦＳＥＴ［３：０］：−＄ＣＯＬＵＭＮ＿ＯＦＦＳＥＴ［３：０］），１６）
【０１１０】
ｍｏｄｉｆｉｅｄ＿ｃｏｌｕｍｎ＿ｉｄは、＄ＩＮＣＯＭＩＮＧ＿ＭＵＸ［５：２］の代わりに、交換ハードウェアによって使用される。＄ＩＮＣＯＭＩＮＧ＿ＭＵＸの他のフィールドは、未変更のままである。その上、交換ハードウェアは、＄ＣＯＬＵＭＮ＿ＯＦＦＳＥＴ［４］＝＝１の場合は、非マルチキャストＳＥＮＤのＥ／Ｗ方向性を逆にする。パケットは、送信列に対して受信タイルが位置する方向を示す方向ビットＥＶまたはＷＶを含んでもよい。我々の以前の特許出願［ＰＷＦ  Ｒｅｆ：４０９３６４ＧＢ］において説明されるように、これらの方向ビットは、パケットが交換構造に沿って不要に送信されることを防止するために使用することができる。交換コードを再利用するため、ＥＶおよびＷＶビット（命令の即値ビットからまたは送信アドレスコンテキストステータスレジスタのアドレスビットから）は、＄ＣＯＬＵＭＮ＿ＯＦＦＳＥＴ［４］＝＝１の際は、交換構造に送られる前に交換される。
【０１１１】
＄ＣＯＬＵＭＮ＿ＯＦＦＳＥＴ［４：０］の値は、再利用された交換コードを実行する前に方程式２の値に記入されるコンテキストステータスレジスタ値である。
＄ＣＯＬＵＭＮ＿ＯＦＦＳＥＴ［３：０］−（ｃｏｍｐｉｌｅｄ＿ｃｏｌｕｍｎ＿ｉｄ＜８）？ＭＯＤ（ｍｏｄｉｆｉｅｄ＿ｃｏｌｕｍｎ＿ｉｄ−ｃｏｍｐｉｌｅｄ＿ｃｏｌｕｍｎ＿ｉｄ，１６）：ＭＯＤ（ｃｏｍｐｉｌｅｄ＿ｃｏｌｕｍｎ＿ｉｄ−ｍｏｄｉｆｉｅｄ＿ｃｏｌｕｍｎ＿ｉｄ，１６）
【０１１２】
「ｃｏｍｐｉｌｅｄ＿ｃｏｌｕｍｎ＿ｉｄ」は、交換コードがコンパイルされた対象である特定のグループ内の任意の列のｃｏｌｕｍｎ＿ｉｄである。「ｍｏｄｉｆｉｅｄ＿ｃｏｌｕｍｎ＿ｉｄ」は、その列グループにおいて「ｃｏｍｐｉｌｅｄ＿ｃｏｌｕｍｎ＿ｉｄ」と同じ位置の列のｃｏｌｕｍｎ＿ｉｄである。＄ＣＯＬＵＭＮ＿ＯＦＦＳＥＴ［４］の値は、タイルの列極位置（北／南）が、交換コードがもともとコンパイルされた対象であるタイルの列極位置と同じであるかどうかを示すことに留意されたい。方程式１および２は、図１９Ａに示されるスキーマを提供するために、図１９の例に適用される。
【０１１３】
図２０および２０Ａには、別の例が示されている。
【０１１４】
図６は、本明細書で開示されるプロセッサアーキテクチャのアプリケーション（すなわち、機械知能へのアプリケーション）の例を示す。
【０１１５】
以前に言及されるようにおよび機械知能分野の当業者によく知られているように、機械知能は、機械知能アルゴリズムが知識モデルを学習する学習段階から始まる。モデルは、相互接続ノード１０２およびリンク１０４のグラフ６０として表すことができる。ノードおよびリンクは、頂点およびエッジと呼ぶことができる。グラフの各ノード１０２は、１つまたは複数の入力エッジと、１つまたは複数の出力エッジとを有し、ノード１０２のいくつかの入力エッジは、他のノード１０２のいくつかの出力エッジであり、それにより、ノードが互いに接続され、グラフが形成される。さらに、ノード１０２のうちの１つまたは複数の入力エッジは、グラフ全体への入力を形成し、ノード１０２のうちの１つまたは複数の出力エッジは、グラフ全体の出力を形成する。各エッジ１０４は、値（一般にテンソル（ｎ次元行列）の形態である）を伝達し、これらは、ノード１０２の入力エッジに提供される入力、及び、ノード１０２の出力エッジから提供される出力を形成する。
【０１１６】
各ノード１０２は、その１つまたは複数の入力エッジにおいて受信される１つまたは複数の入力の関数を表し、この関数の結果は、１つまたは複数の出力エッジにおいて提供される出力である。これらの結果は、場合により、活性化（activation）と呼ばれる。各関数は、１つまたは複数のパラメータ（重みと呼ばれる場合もあるが、必ずしも乗法重みである必要はない）によってパラメータ化される。一般に、異なるノード１０２によって表される関数は、関数の異なる形態であることおよび／または異なるパラメータによってパラメータ化することが可能である。
【０１１７】
さらに、各ノードの関数の１つまたは複数のパラメータの各々は、それぞれの誤差値によって特徴付けられる。その上、それぞれの誤差条件は、各ノード１０２のパラメータの誤差と関連付けることができる。単一の誤差パラメータによってパラメータ化された関数を表すノード１０２の場合、誤差条件は、簡単な閾値であってもよく、すなわち、誤差条件は、誤差が指定閾値内にある場合に満たされるが、誤差が閾値を超える場合には満たされない。複数のそれぞれのパラメータによってパラメータ化されたノード１０２の場合、そのノード１０２に対する誤差条件は、より複雑なものであってもよい。例えば、誤差条件は、そのノード１０２のパラメータの各々がそれぞれの閾値内に収まる場合にのみ満たされてもよい。別の例として、同じノード１０２に対する異なるパラメータの誤差を組み合わせた組合せ計量を定義することができ、誤差条件は、組合せ計量の値が指定閾値内に収まるという条件で満たされるが、そうでなければ、誤差条件は、組合せ計量の値が閾値を超える場合は満たされない（あるいは、計量の定義に応じて、その逆も同様である）。誤差条件が何であれ、ノードのパラメータの誤差が許容度の一定のレベルまたは程度を下回るかどうかの尺度が得られる。
【０１１８】
学習段階では、アルゴリズムは、経験データ（すなわち、グラフへの入力の異なる可能な組合せを表す複数のデータポイント）を受信する。多くの経験データが受信されるにつれて、アルゴリズムは、パラメータの誤差の最小化するために、経験データに基づいて、グラフの様々なノード１０２のパラメータを段階的に調節する。目標は、グラフの出力が所望の結果にできる限り近くなるようなパラメータの値を見出すことである。グラフが全体としてそのような状態に向かう傾向となったときに、計算は収束すると言える。
【０１１９】
例えば、教師ありアプローチ（supervised approach）では、入力経験データは、訓練データ（すなわち、既知の出力に対応する入力）の形態を取る。各データポイントを用いると、アルゴリズムは、出力が所定の入力に対する既知の出力により密接に整合するように、パラメータを調節することができる。後続の予測段階では、グラフは、入力クエリを近似予測出力にマッピングするために使用することができる（または、推論する場合は、その逆も同様である）。また、他の手法も可能である。例えば、教師なしアプローチ（unsupervised approach）では、１つの入力データ当たり１つの参照結果という概念は存在せず、代わりに、機械知能アルゴリズムは、出力データにおけるそれ自体の構造の識別を任される。あるいは、強化学習アプローチ（reinforcement approach）では、アルゴリズムは、入力経験データの各データポイントに対して少なくとも１つの可能な出力を試し、この出力が、正か否か（および、潜在的には、正または否の度合い）（例えば、勝つか負けるか、利益か損失かまたは同様のもの）が知らされる。多くの試行にわたり、アルゴリズムは、正の結果をもたらす入力を予測することができるように、グラフのパラメータを段階的に調節することができる。グラフを学習するための様々な手法およびアルゴリズムは、機械学習分野の当業者に知られている。
【０１２０】
本明細書で開示される技法の例示的なアプリケーションによれば、各ワーカースレッドは、機械知能グラフのノード１０２の個々のノードのそれぞれと関連付けられた演算を実行するようにプログラムされる。この事例では、ノード１０２間のエッジ１０４は、スレッド間のデータの交換に相当するものもあれば、タイル間の交換に関与するものも少なくともいくつかあり得る。
【０１２１】
図７は、コンパイラ７０の機能を示す概略図である。コンパイラは、グラフ６０を受信し、グラフの関数を多様なコードレットにコンパイルし、それらのコードレットは、図７の７２とラベル付けされたローカルプログラムに含められる。各ローカルプログラムは、コンピュータの特定のタイルにロードされるように設計される。各プログラムは、ワーカースレッド７２ａ、７２ｂ・・・を形成する１つまたは複数のコードレットと、各々が命令のシーケンスから形成される１つのスーパーバイザサブプログラム７３とを含む。コンパイラは、時間内に互いにリンクされる（すなわち、時間決定論的である）ように、プログラムを生成する。これを行うため、コンパイラは、以前に説明したタイル識別子を含むタイルデータ７４にアクセスし、タイル識別子は、ローカルプログラムを生成するためにコンパイラが理解する必要があるタイルの場所ひいては遅延を示す。遅延については、上記で既に言及しており、タイルデータに基づいて演算することができる。あるいは、タイルデータは、これらの遅延がルックアップテーブルを通じて利用可能なデータ構造を組み込むことができる。スーパーバイザプログラムは、交換段階におけるデータの交換を管理する交換コードを含む。
【０１２２】
ここでは、本明細書で定義されるコンピュータアーキテクチャに対する命令セットの一部として開発されている命令の説明に進む。図８は、３２ビットのＳＥＮＤ命令を示す。ＳＥＮＤ命令は、タイルメモリからのデータ送信を示す。ＳＥＮＤ命令は、タイルのｅｘｏｕｔインタフェースにおいて、タイルのローカルメモリ２２の特定のアドレスで格納された１つまたは複数のデータを送信させる。各データ（命令の「アイテム」と呼ばれる）は、１または複数ワード長である。ＳＥＮＤ命令は、送信機能を実装するために、１つまたは複数のワードに基づいて動作する。ＳＥＮＤ命令は、オペコード８０と、メッセージカウントを示すフィールド８２と、ＳＥＮＤアドレスから１つまたは複数のパケットの形態で送信されるアイテムの数が示されるアドレスフィールド８４とを有する。フィールド８４は、アイテムの送信元となるローカルメモリのアドレスを定義し、アイテムは、ベースアドレスレジスタに格納されたベース値に加えられる即値の形態である。また、ＳＥＮＤ命令は、ワードサイズを示す送信制御フィールド８６（ＳＣＴＬ）も有し、ワードサイズは、４および８バイトのうちの１つとして選択される。パケットは、その中に送信先識別子を有さない。言い換えれば、アイテムを受信する受信タイルは、命令において一意に識別されない。送信機能は、送信アドレスからの指定数のデータアイテムをローカルメモリからアクセスさせ、次のクロックサイクルで送信するためにタイルのｅｘ＿ｏｕｔインタフェースに配置させる。ＳＥＮＤ命令の別の変形形態では、アイテムの送信元となるアドレスは、暗黙的であってもよい（すなわち、ベースアドレスレジスタのベース値および発信デルタレジスタのデルタ値から取り入れられる）。デルタ値は、以前のＳＥＮＤ命令の情報に基づいて設定することができる。意図する受信タイルの一意識別子の代わりに、コンパイラは、本明細書で既に説明されているように、データ（データアイテム）を受信するために、正しい受信タイルが正しい時刻にそのローカルマルチプレクサを切り替えるように構成した。意図する受信タイルは、いくつかの事例では、送信タイル自体であってもよいことに留意されたい。
【０１２３】
図１２を参照すると、送信命令に組み込むことができる送信制御フィールド８６（ＳＣＴＬ）の例が示されている。ＳＣＴＬ  ８６は、ワードサイズ１２２の表示を含み、その表示は、３２または６４ビットのワードサイズの値を示す。また、ＳＣＴＬ  ８６は、以前に説明されたように、スイッチング構造３４に沿ってデータを通過／送信させる少なくとも１つの方向の表示１２４も含む。少なくとも１つの方向の表示１２４は、データが送信タイルからスイッチング構造３４に沿って第１の方向に送信されるか否かに関する表示１２６と、データが送信タイルからスイッチング構造３４に沿って第２の方向に送信されるか否かに関する表示１２８とを含む。表示１２６および１２８の各々は、単一ビットで表すことができる。
【０１２４】
送信命令が実行されると、少なくとも１つの方向の表示１２４をデータに含めることができ、次いで、データは、スイッチング構造上で送信される。
【０１２５】
送信タイルから第１の方向に位置する１つまたは複数の受信タイルにデータを送信するという送信命令が発行された場合は、少なくとも１つの方向の表示１２４は、データが送信タイルから第１の方向に送信されるという表示１２６を含むことができる。送信タイルから第２の方向に位置するデータを受信するためのタイルが存在しない場合は、少なくとも１つの方向の表示１２４は、データが送信タイルから第２の方向に送信されないという表示１２８を含むことができる。この事例では、データは、スイッチング構造３４によって、第１の方向にのみ渡され、第２の方向に渡されることが防止される。いくつかの例では、データは、データを受信することになっている少なくとも１つのｍｕｘの所まで送信することのみ行うことができる。この事例では、データは、スイッチング構造３４に沿って、第１の方向に、データを受信することになっている少なくとも１つのｍｕｘを越えてさらに先に送信されることはない。
【０１２６】
送信タイルから第２の方向に位置する１つまたは複数の受信タイルにデータを送信するという送信命令が発行された場合は、少なくとも１つの方向の表示１２４は、データが送信タイルから第２の方向に送信されるという表示１２８を含むことができる。送信タイルから第１の方向に位置するデータを受信するためのタイルが存在しない場合は、少なくとも１つの方向の表示１２４は、データが送信タイルから第１の方向に送信されないという表示１２６を含むことができる。この事例では、データは、スイッチング構造３４によって、第２の方向にのみ渡され、第１の方向に渡されることが防止される。いくつかの例では、データは、データを受信することになっている少なくとも１つのｍｕｘの所まで送信することのみ行うことができる。この事例では、データは、スイッチング構造３４に沿って、第２の方向に、データを受信することになっている少なくとも１つのｍｕｘを越えてさらに先に送信されることはない。
【０１２７】
複数の受信タイルに送信するという送信命令が発行され、複数の受信タイルのうちの少なくとも１つが、送信タイルから第１の方向に位置し、複数の受信タイルのうちの少なくとも１つが、送信タイルから第２の方向に位置する場合は、少なくとも１つの方向の表示１２４は、データが送信タイルから第１の方向に送信されるという表示１２６と、データが送信タイルから第２の方向に送信されるという表示１２８とを含むことができる。この事例では、データは、スイッチング構造３４に沿って第１の方向および第２の方向に送信される。
【０１２８】
いくつかの事例では、少なくとも１つの方向の表示１２４は、データが第１の方向に送信されないという表示１２６と、データが第２の方向に送信されないという表示１２８とを含むことができる。この事例では、タイルのプロセッサの送信命令の実行に応答して、データは送信されない。いくつかの事例では、そのような送信命令の実行により例外（exception）を発生させてもよい。
【０１２９】
データに挿入される少なくとも１つの方向の表示が、データが第１の方向および第２の方向に送信されるという表示を含む事例では、スイッチング構造は、両方の方向にデータを渡すように構成することができる。伝達が意図されているタイルのｍｕｘにデータが到達した時点で、この事例では、ｍｕｘにおいて阻止されることなく、通り抜けてスイッチング構造を先に進む。
【０１３０】
データに挿入される少なくとも１つの方向の表示が、第１の方向および第２の方向のうちの１つにのみ送信されるという表示を含む事例では、スイッチング構造は、受信タイルの第１のｍｕｘに示される１つの方向にのみデータを渡すように構成することができる。データは、第１のｍｕｘを通り抜けてスイッチング構造に沿って通過することが阻止されてもよい。
【０１３１】
従って、複数の受信タイルにデータを送信するため、それらの受信タイルがすべて送信タイルから同じ方向にある場合であっても、送信タイルは、データが第１の受信ｍｕｘにおいて阻止されないように、データが第１の方向および第２の方向に送信されるという表示をデータに挿入するように構成することができる。
【０１３２】
上記で説明されるように、データを受信するために正しい時刻に正しい受信タイルがそのローカルマルチプレクサを切り替えることを保証するため、スイッチ制御機能が提供される。図９は、この機能を実行するＰＵＴｉ−ＭＵＸ命令を示す。オペコードフィールド９０は、命令をＰＵＴｉ−ＭＵＸ命令として定義する。遅延期間は、遅延即値９２によって指定することができる。この遅延値は、操作なし（ｎｏ  ｏｐ）命令を置き換えるために使用することができ、コード圧縮を最適化するための方法である。この命令は、実行されると、ｉｎｃｏｍｉｎｇ＿ｍｕｘフィールド９８において、いずれのマルチプレクサ２１０の入力を他のタイルから送信されたアイテムのために「リスン」するよう設定するかを定義する。コンパクト性を持たせるため、このｍｕｘ制御機能は、図１０に示されるように、単一の命令において、上記で定義される送信機能と組み合わせることができる。同じタイル上において単一の実行サイクルで実行することができることを除いて、タイルを送信タイルとして動作させる送信命令と、タイルが受信タイルとして動作している際の機能であるスイッチ制御機能との間の関係はないことに留意されたい。
【０１３３】
図１０は、「マージ（merge）」命令の例である。この文脈では、「マージ」命令は、１つのタイル上において同時に（１つの実行サイクルにおいて）実行することができる２つ以上の機能を定義する命令を意味する。
【０１３４】
図１０は、「マージ」送信命令の形態を示し、送信機能は、タイルにおいてレジスタに保持された状態を修正することができる第２の機能と組み合わされる。機能の１つは、そのタイルで受信されたデータに対するメモリポインタを変更することである。別の機能は、受信ＭＵＸを設定することである。ＰＵＴｉ＿ＭＥＭｐｔｒ機能は、タイルによって受信された次のデータがロードされるローカルメモリのメモリ場所の識別を可能にする。この機能は、専用「受信」命令によって実行することができるが、その機能は、データの受信を可能にするためのものではなく、メモリポインタを修正するためのものである。実際に、タイルでデータを受信するために特定の命令を実行する必要はない。ｅｘｉｎインタフェースに到達したデータは、ｅｘｉｎインタフェースの制御の下でメモリポインタによって識別された次のメモリ場所にロードされる。図１０の命令は、オペコードフィールド１００と、送信アイテム数フィールド１０２とを含む。受信状態修正フィールド１０６の即値は、フィールド１０４によって指定される交換構成状態レジスタに記入される。一形態では、状態修正フィールド１０６は、メモリポインタが設定される受信アドレスを計算するための受信デルタを記入することができる。別の形態では、交換構成状態は、マルチプレクサ入力を設定する受信ＭＵＸ値で記入される。
【０１３５】
この形態の「マージ」命令の場合、送信機能は、命令において暗黙的である１つまたは複数のレジスタに格納された値から決定された送信アドレスを使用する。例えば、送信アドレスは、ベースレジスタおよびデルタレジスタから決定することができる。
【０１３６】
図１１は、交換命令（ＥＸＣＨ）と呼ばれる「倍幅（double width）」命令を示す。この命令は、タイルメモリで示されたアドレスからデータ送信を開始し、受信交換構成状態（データを受信するためのマルチプレクサおよび／またはメモリポインタ）を設定する。ＥＸＣＨ命令は、命令の直後のメモリ場所に位置するインライン３２ビットペイロードが直後に続くという点で独特である。ＥＸＣＨ命令は、交換命令ＥＸＣＨを示すオペコードフィールド１１０を有する。ペイロードは「共発行（ｃｏｉｓｓｕｅ）」フラグ１１９を有する。
【０１３７】
ＥＸＣＨ命令は、受信フォーマットデータ幅（３２ビットまたは６４ビット）を指定する単一ビットを有するフォーマットフィールド１１２を含む。データ幅は、マルチプレクサラインの設定（単独で設定されているかまたは対で設定されているか）に関わり合いがある。アイテムフィールド１１４は、交換命令によって送信させられるアイテムの数を定義する。これらのアイテムは、図９の送信命令のように、フィールド１１６の即値を使用して計算された送信アドレスから送信される。このフィールドの値は、ベースレジスタの値に加えられる。
【０１３８】
参照符号１１８は、送信データのワードサイズを定義する制御フィールドを示す。ペイロードは、図９に関連して上記で説明されたように、受信マルチプレクサに対するスイッチ制御を行うスイッチ制御フィールド１２０を含む。符号１２２は、図１０の命令に関連して上記で説明されたように、受信データが格納されるアドレスを計算するための受信デルタを定義するペイロードのフィールドを示す。図１１の６４ビット幅の交換命令ＥＸＣＨは、すべてのクロックサイクルで実行することができ、
・  特定のアドレスからの送信
・  受信ｍｕｘの更新
・  受信アドレスの更新
を同時に可能にする。
【０１３９】
従って、いかなる交換スケジュールも単一の命令において符号化することができる。図８、９および１０の命令は、同様の機能を実行するが、３２ビット長しかないため、各タイルのローカルメモリの交換コードのサイズを最小化するために使用することができる。特定のコンテキストにおいてどの命令を使用するかについての決定は、ローカルプログラム７２に対するコードレットを構築する際にコンパイラ７０で行われる。
【０１４０】
以下は、上記の命令をサポートするためのキーレジスタおよびそれらのセマンティクス（semantics）のリストである。これらのレジスタは、各タイルのレジスタファイルの一部からのものである。
【０１４１】
【表１】
2020102185.tif 000009
ＩＮＣＯＭＩＮＧ＿ＤＥＬＴＡおよびＩＮＣＯＭＩＮＧ＿ＭＵＸレジスタは、タイルの交換状態の一部を形成することに留意されたい。
【０１４２】
本明細書では、機械学習のための知識モデルの文脈において特に効果的な新しいコンピュータパラダイムにおける処理装置の使用を最適化するための技法について説明してきた。ＢＳＰパラダイムの交換段階のような時間決定論を利用して非常に大量のデータを効率的に処理するアーキテクチャが提供される。特定の実施形態について説明してきたが、本明細書の本開示が与えられれば、開示される技法の他の応用形態および変形形態が当業者には明らかになるであろう。
【符号の説明】
【０１４３】
２  プロセッサ
３  クロック
４  タイル
６  アレイ
８ａ  ホストリンク
８ｂ  ホストリンク
１２  命令メモリ
１４  フェッチ段
１６  復号段
１８  実行段
２２  データメモリ
２４  スレッドスケジューラ
２６  コンテキスト
３０  同期
３０ａ  チップリンク
３０ｂ  チップリンク
３４  スイッチング構造
３６  同期モジュール
５０  交換段階
５２  演算段階
６０  グラフ
６１  スーパータイル
６２  列
７０  コンパイラ
７２  ローカルプログラム
７３  スーパーバイザサブプログラム
７４  タイルデータ
８０  オペコード
８２  メッセージカウントフィールド
８４  アドレスフィールド
８６  送信制御フィールド
９０  オペコードフィールド
９２  遅延即値
９８  ｉｎｃｏｍｉｎｇ＿ｍｕｘフィールド
１００  オペコードフィールド
１０２  アイテム数フィールド
１０２  ノード
１０４  エッジ
１０４  リンク
１０６  受信状態修正フィールド
１１０  オペコードフィールド
１１２  フォーマットフィールド
１１４  アイテムフィールド
１１６  フィールド
１１８  制御フィールド
１１９  共発行フラグ
１２０  スイッチ制御フィールド
１２２  ペイロードのフィールド
１２２  ワードサイズ
１２４  方向表示
１２６  第１の方向表示
１２８  第２の方向表示
１４０  接続ワイヤ
２１０  マルチプレクサ
２１４  ＭＵＸ制御ライン
２１７  入力
２１８  出力
２２０  入力
２２４  ｅｘｉｎインタフェース
２２６  ｅｘｏｕｔインタフェース
２２８  ｅｘｍｕｘインタフェース
２３０  出力
２３２  メモリポインタ
３１４  遅延回路
３１７  遅延回路
３１８  遅延回路
１３１０  送信タイル
１３２０  受信タイル
１３３０  接続ワイヤ
１３４０  一時的なストア
１３５０  入力マルチプレクサ
【図１】
2020102185.tif 000010
【図２】
2020102185.tif 000011
【図３】
2020102185.tif 000012
【図４】
2020102185.tif 000013
【図５】
2020102185.tif 000014
【図６】
2020102185.tif 000015
【図７】
2020102185.tif 000016
【図８】
2020102185.tif 000017
【図９】
2020102185.tif 000018
【図１０】
2020102185.tif 000019
【図１１】
2020102185.tif 000020
【図１２】
2020102185.tif 000021
【図１３】
2020102185.tif 000022
【図１４】
2020102185.tif 000023
【図１５】
2020102185.tif 000024
【図１６】
2020102185.tif 000025
【図１７】
2020102185.tif 000026
【図１８】
2020102185.tif 000027
【図１９】
2020102185.tif 000028
【図１９Ａ】
2020102185.tif 000029
【図２０】
2020102185.tif 000030
【図２０Ａ】
2020102185.tif 000031
【外国語明細書】
2020102185000001.pdf