JP6797879B2 - 命令セット - Google Patents

命令セット Download PDF

Info

Publication number
JP6797879B2
JP6797879B2 JP2018197183A JP2018197183A JP6797879B2 JP 6797879 B2 JP6797879 B2 JP 6797879B2 JP 2018197183 A JP2018197183 A JP 2018197183A JP 2018197183 A JP2018197183 A JP 2018197183A JP 6797879 B2 JP6797879 B2 JP 6797879B2
Authority
JP
Japan
Prior art keywords
instruction
processing unit
data
computer program
tile
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2018197183A
Other languages
English (en)
Other versions
JP2019079525A (ja
Inventor
クリスチャン ノウルズ サイモン
クリスチャン ノウルズ サイモン
ジョン ペルハム ウィルキンソン ダニエル
ジョン ペルハム ウィルキンソン ダニエル
ルーク サウスウェル オズボーン リチャード
ルーク サウスウェル オズボーン リチャード
グラハム アレクサンダー アラン
グラハム アレクサンダー アラン
フィリックス スティーブン
フィリックス スティーブン
マングナル ジョナサン
マングナル ジョナサン
レイシー デイヴィッド
レイシー デイヴィッド
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Graphcore Ltd
Original Assignee
Graphcore Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Graphcore Ltd filed Critical Graphcore Ltd
Publication of JP2019079525A publication Critical patent/JP2019079525A/ja
Application granted granted Critical
Publication of JP6797879B2 publication Critical patent/JP6797879B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17312Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17337Direct connection machines, e.g. completely connected computers, point to point communication networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/456Parallelism detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)
  • Executing Machine-Instructions (AREA)

Description

本開示は、複数のタイルを備えるプロセッサにおいて複数の異なるタイルのワークロードを同期させることに関し、各タイルはローカルメモリを有する処理ユニットを備える。特に、本開示は、バルク同期並列(BSP)計算プロトコルに関し、それによって、各グループのタイルが交換段階に進む前に、各グループのタイルは計算段階を完了しなければならない。
コンピューティングにおける並列処理はさまざまな形式を取る。プログラムフラグメントは、同時に実行されるように(時間的に重なり合うが実行リソースを共有することが可能)、又はできる限り同時に異なるリソース上で実行されるように並行して実行されるように編成され得る。
コンピューティングにおける並列化は、複数の相互接続されたプロセッサタイルのアレイ、マルチスレッド処理ユニット、又は実際に各タイルがマルチスレッド処理ユニットを含むマルチタイルアレイなど、いくつかの方法で達成することができる。
同じチップ(又は同じ集積回路パッケージ内のチップ)上に複数のタイルのアレイを含むプロセッサによって並列処理が達成される場合、各タイルは、ローカルメモリ(プログラムメモリ及びデータメモリを含む)を有するそれ自体の別々の処理ユニットを含む。したがって、プログラムコードの別々の部分を異なるタイルで同時に実行することができる。タイルは、異なるタイル上で実行されるコードがタイル間で通信することを可能にするオンチップ相互接続を介して互いに接続される。場合によっては、各タイル上の処理ユニットは、バレルスレッド処理ユニット(又は他のマルチスレッド処理ユニット)の形態を取り得る。各タイルは、各タイルが複数のインターリーブスレッドを同時に実行できるように、一組のコンテキスト及び実行パイプラインを有することができる。
一般に、配列内の異なるタイルで実行されているプログラムの部分間には依存関係が存在する可能性がある。したがって、あるタイル上のコードが依存しているデータよりも先に実行しているコードが別のタイル上の別のコードに利用可能となるのを防ぐための技術が必要とされる。これを達成するためのいくつかの可能な方式があるが、本開示で注目する方式は「バルク同期並列」(BSP)として知られている。BSPによれば、各タイルは、計算段階と交換段階とを交互に実行する。計算段階の間、各タイルは1つ以上の計算タスクをタイル上で局所的に実行するが、その計算の結果を他のどのタイルとも通信しない。交換段階では、各タイルは、前の計算段階からの計算の1つ又は複数の結果をグループ内の1つ又は複数の他のタイルと交換することが許可されるが、そのタイルが交換段階を終了するまでは新しい計算段階を開始しない。さらに、この形態のBSP原理によれば、バリア同期は、計算段階から交換段階への移行、又は交換段階から計算段階への移行、又はその両方の時点で行われる。すなわち、(a)グループ内のいずれかが次の交換段階に進むことが許可される前に、すべてのタイルがそれぞれの計算段階を完了することが要求される、又は (b)グループ内のタイルが次の計算段階に進むことを許可される前に、そのグループ内のすべてのタイルがそれぞれの交換段階を完了することを要求される、又は(c)これら両方が要求される。本明細書で使用する「計算段階と交換段階との間」は、これらすべての選択肢を包含する。
マルチスレッド及び/又はマルチタイル並列処理の使用例は機械知能に見られる。機械知能の当業者にはよく知られているように、機械知能アルゴリズムは「知識モデルを生成する」ことができ、そして知識モデルを使用して学習及び推論アルゴリズムを実行することができる。知識モデルとアルゴリズムを組み込んだ機械知能モデルは、相互接続された複数のノードのグラフとして表すことができる。各ノードはその入力の機能を表わす。いくつかのノードはグラフへの入力を受け取り、いくつかのノードは1つ以上の他のノードから入力を受け取る。いくつかのノードの出力活性が他のノードの入力となり、いくつかのノードの出力がグラフの出力となり、グラフへの入力がいくつかのノードへの入力となる。さらに、各ノードにおける機能は、1つ又は複数のそれぞれのパラメータ(例:重みなど)によって、パラメータ化される。学習段階の間、その目的は、一連の経験的な入力データに基づいて、グラフが全体として可能な入力の範囲に対して所望の出力を生成するように様々なパラメータの値を見つけることである。確率的勾配降下法に基づく逆伝搬アルゴリズムなど、これを行うための様々なアルゴリズムが当技術分野において知られている。 複数の反復にわたって、パラメータはそれらの誤差を減少させるように徐々に調整されるため、グラフは解に向かって収束する。次の段階では、学習されたモデルを使用して、指定された入力セットがあれば出力を予測する、又は、指定された出力セットがあれば入力(原因)を推測することができる。あるいはそのセットに対して他の内省的な形式の分析を実行することができる。
各ノードの実装はデータの処理を含み、グラフの相互接続はノード間で交換されるべきデータに対応する。典型的には、各ノードの処理の少なくともいくつかは、グラフ内のノードのいくつか又は他のすべてとは無関係に実行することができ、したがって大きなグラフは巨大な並列処理の機会をもたらす。
上述のように、知識モデルを表す機械知能モデル、及びその知識モデルが学習及び推論にどのように使用されるかについてのアルゴリズム情報は、概して、各ノードがデータに対する処理要件を有する複数の相互接続ノードのグラフによって表すことができる。グラフの相互接続は、ノード間で交換されるデータを示し、その結果、ノードで実行されるプログラムフラグメント間に依存関係を生じさせる。一般に、あるノードでの処理は別のノードとは無関係に実行できるため、大きなグラフでは大きな並列処理が見られる。高度に分散された並列マシンは、そのような機械知能モデルの計算に適したマシン構造である。この特徴により、特定の決定論的時間保証(time deterministic guarantees)をするようにマシンを設計することができる。
本開示において利用する知識モデルの1ファクタは、グラフのほぼ静的な性質(generally static nature)である。つまり、グラフを構成するノード及びグラフの構造は、通常、機械知能アルゴリズムの実行中には変化しない。本発明者らは、機械知能モデルにおける計算を最適化するために特定の決定論的時間保証をする機械を完成した。これにより、コンパイラは決定論的時間な方法にてノード間でワーク(work)を分割してスケジュールすることができる。知識モデルに基づいてワークロード(workload)を処理するように最適化されたコンピュータを設計する際の重要な最適化のために以下に説明される実施形態において利用されるのが、この時間決定論である。
本発明の一態様によれば、コンピュータプログラムを保持する命令ストレージと、コンピュータプログラムを実行するための実行装置と、データを保持するデータストレージとを有する、処理ユニット上で実行される一連の命令を含むコンピュータプログラムが提供され、このコンピュータプログラムは、1つ又は複数のコンピュータ実行可能命令を含み、実行されると、
宛先識別子を持たないが所定の送信時間に送信される受信側処理ユニット宛てのデータパケットを、その処理ユニットに接続された1組の接続ワイヤで送信させる送信機能と、
実行されると、その処理ユニットにスイッチング回路を制御させて、所定の受信時間にデータパケットを受信するために処理ユニットの1組の接続ワイヤをスイッチングファブリックに接続させる切り替え制御機能と、を実装する。
2つの別々の命令、すなわち送信命令と切り替え制御命令があり得る。送信命令は、データパケットが命令ストレージのどの位置から送信されるかを定義することにより送信アドレスを定義できるとの特徴を有することができる。あるいは、送信命令は、送信アドレスを明示的に定義せず、送信アドレスが保持されているレジストリを暗示的に定義する。この送信命令は、送信されるべきいくつかのパケットを定義することができ、各パケットは異なる送信時間に紐付けられる。コンピュータプログラムは、暗黙的に定義されたレジスタ内の送信アドレスを更新するためのさらなる命令を含むことができる。
このコンピュータプログラムは、メモリポインタ更新機能を定義する少なくとも1つのさらなる命令を含むことができる。この機能は、受信側処理ユニットで受信されたデータパケットを記憶するためにデータストレージ内のメモリ位置を識別するメモリポインタを更新する。
本明細書に記載の命令セットによる1つのアーチファクト(artefact)は、マージ命令を含むことができる点である。 マージ命令は、処理ユニットが単一実行サイクル内で送信ユニット及び受信ユニットとして動作できるように、送信処理ユニット及び受信側処理ユニットの機能をマージする。この1つのマージ命令は、送信機能を切り替え制御機能とマージする。別のマージ命令は、送信機能をメモリポインタ更新機能とマージする。さらなるマージ命令は、3つの機能すべてが単一実行サイクルで達成されることができるように、送信機能、切り替え制御機能及びメモリポインタ更新機能をマージする。
命令は、実行ユニットのフェッチステージのビット幅と一致する第1のビット幅で発行できる。 2つの機能をマージするマージ命令も、第1のビット幅となり得る。 3つの機能をマージするマージ命令を実装する1つの方法は、同じく第1ビット幅のオペランドを識別するための第1ビット幅の命令に対するものである。オペランドは切り替え制御機能とメモリポインタ更新機能とを実装する。あるいは、3つの機能をマージする命令を、実行ユニットのフェッチステージのビット幅の2倍であるが、発行後は単一命令として扱われる第2のビットとしてもよい。
マージ命令のフォーマットは一般的なフォーマットであってよく、オペコード部分はそれが送信機能をメモリポインタ更新機能又は切り替え制御機能とマージするかどうかを指定する。交換状態は、オペコード部分に応じて、切り替え制御機能に関する情報又はメモリポインタ更新機能に関する情報を保持することができる。
コンピュータプログラムは、処理ユニットの計算段階が完了しているときに指示を生成する同期命令を含むことができる。これにより、コンピュータプログラムは、処理ユニットが計算段階と交換段階とを有するバリア同期プロトコルの一部を形成する状況で動作することが可能になる。この送信命令は交換段階で実行可能である。
このコンピュータプログラムを、送信不可能なコンピュータ可読媒体に格納することができる。あるいは、送信可能な信号として実装することができる。
本発明の別の態様は、命令ストレージと、コンピュータプログラムを実行するように構成された実行ユニットと、データを保持するデータストレージとを備え、その命令ストレージは上記のようにコンピュータプログラムを保持する処理ユニットを含む。
本発明の別の態様は、統合パッケージ内に1つ又は複数のダイを含むコンピュータを含み、このコンピュータは複数の処理ユニットを含み、各処理ユニットはコンピュータプログラムを保持する命令ストレージ、データを保持するコンピュータプログラム、及びデータストレージを実行するように構成された実行ユニットを備え、各処理ユニット用の命令ストレージは、上で定義したようにコンピュータプログラムを保持する。
本発明の一態様によれば、コンピュータ化機能を提供するために複数のプログラムを生成するコンピュータ実装方法が提供される。コンピュータの処理ユニットで実行される各プログラムは、ローカルプログラムを保持する命令ストレージをそれぞれ有する複数の処理ユニットと、そのローカルプログラムを実行する実行ユニットと、データを保持するデータストレージと、各処理ユニットの出力インターフェースに接続され、各処理ユニットによって制御可能なスイッチング回路によって各処理ユニットの入力インターフェースに接続可能なスイッチングファブリックと、同期信号を生成するように動作可能な同期モジュールとを含む。この方法は、一連の実行可能命令を比較する各処理ユニット用のローカルプログラムを生成することと、各処理ユニットについて、各ローカルプログラムの命令の実行の相対時間を決定することとを含み、これにより、1つの処理ユニットに割り当てられたローカルプログラムは、宛先識別子はないが受信側処理ユニットに宛てられた少なくとも1つのデータパケットを、同期信号に対して所定の遅延をもって、所定の送信時間に送信するための送信命令を実行するようにスケジュールされ、受信側処理ユニットに割り当てられたローカルプログラムは、受信時にそのデータパケットを受信するために、その処理ユニットワイヤをスイッチングファブリックに接続するようにスイッチング回路を制御するための切り替え制御命令を、所定の切り替え時間に実行するようにスケジュールされる。
このようにして、上記方法を実装するコンパイラは、時間決定論的な方法で動作するように設計されているコンピュータ内のそれぞれの処理ユニット(タイル)にそれぞれのローカルプログラムを自動的に割り当てることができる。このコンピュータの例は本明細書に記載され、IPU [知能処理ユニット]と呼ばれる。さらに、出願番号[PWF整理番号:408525及び408527]を参照し、この出願内容を参照により本明細書に援用する。
この方法は、上記方法ステップを実行するように動作可能なプロセッサを有し、コンピュータ化機能を表す固定グラフ構造と、所定の送信時間及び所定の切り替え時間を各処理ユニットについて決定できるようにする遅延を保持するテーブルとを受信するように接続されるコンパイラによる実装に適している。
送信時間及び切り替え時間は同期信号に対するものであり、絶対時間を示すものではないことを理解されたい。この同期信号は、各計算段階の後に交換段階が続くBSPプロトコルにおける交換段階の開始を示すことができる。
記載された実施形態では、すべての時間はプロセッサクロックによって支配されるIPUプロセッサクロックサイクルで測定されるので、遅延を、同期信号に続くIPUクロックサイクルの所定数として測定される間隔として決定することができる。時間決定論的IPUプロセッサチップの動作において、同期イベントはチップ上の特定の物理的位置で発生し、次に確認応答(acknowledgement)がサイクル内の固定遅延ですべての処理ユニット(タイル)に送信される。したがって、各タイルは異なる時間にその確認応答(独自の同期信号)を受信するが、その時点までに同期イベントが発生したサイクル数を知るので、その同期信号の受信時間を他のタイルが後続の送信を実行する時間の基準として効果的に使用することができる。ただし、タイルがそれ自体の同期要求及び同期イベントを実行してからの合計遅延は、データ依存であるため、コンパイラ、したがってタイルプログラムに知られることはない。実際には、プロセッサクロックは特に規則的である必要はなく、その速度は電力消費を抑えるために動的に変更することができるため、プロセッサクロックは絶対時間を維持できない場合がある。 重要なのは、コンピュータのすべての部分が同じ同期プロセッサクロックで制御されており、これにより、同じクロックサイクル数を数えるということだけである。重要なのは、絶対時間ではなく、相対遅延/時間である。
ローカルプログラムでは、送信命令は交換段階の一部を形成できる。切り替え制御命令もまた交換段階の一部を形成することができる。各ローカルプログラムは、計算段階を実装するためにデータに対して計算を実行するための命令も含むことができる。
ローカルプログラムを実行することを意図したコンピュータでは、処理ユニットは互いに対して固定の位置関係を有することができ、上記決定ステップは、コンピュータ内の処理ユニットの各ペア間の位置関係に基づいて固定遅延を決定することを含む。すなわち、各ペアは、送信命令を実行するようにスケジュールされた1つの処理ユニットと、切り替え制御命令を含むようにスケジュールされた別の処理ユニットとを含むことになる。これは、お互いに同時に送受信するペアになる可能性がある。
処理ユニット間の固定位置関係は、行と列のアレイを含むことができ、各処理ユニットはそのアレイ内のその位置を識別する識別子を有する。
単一の処理ユニット上の各ローカルプログラムは、送信命令と切り替え制御命令(switch control instruction)とを含むことができることが理解されよう。状況によっては、処理ユニットに対する切り替え制御命令は、より早い時間に同じ処理ユニット上で送信命令によって送信されたデータパケットを受信するように設定することができる。
別の一態様は、コンピュータ化機能を提供するために複数のプログラムを生成する方法を実行するようにプログラムされたプロセッサを有するコンパイラを提供する。各プログラムは、ローカルプログラムを保持する命令ストレージをそれぞれ有する複数の処理ユニットと、そのローカルプログラム実行する実行ユニットと、データを保持するデータストレージと、各処理ユニットの出力インターフェースに接続され、各処理ユニットによって制御可能なスイッチング回路によって各処理ユニットの入力インターフェースに接続可能なスイッチングファブリックと、同期信号を生成するように動作可能な同期モジュールと、同期信号を生成するように動作可能な同期モジュールとを含むコンピュータの処理ユニットで実行され、上記方法は、
一連の実行可能命令を含む各処理ユニット用のローカルプログラムを生成することと、
各処理ユニットについて、各ローカルプログラムの命令の実行の相対時間を決定することと、を含み、これにより、1つの処理ユニットに割り当てられたローカルプログラムは、宛先識別子はないが受信側処理ユニットに宛てられた少なくとも1つのデータパケットを、同期信号に対して所定の遅延をもって、所定の送信時間に送信するための送信命令を実行するようにスケジュールされ、受信側処理ユニットに割り当てられたローカルプログラムは、受信時にそのデータパケットを受信するために、その処理ユニットワイヤをスイッチングファブリックに接続するようにスイッチング回路を制御するための切り替え制御命令を、所定の切り替え時間に実行するようにスケジュールされる。
このコンパイラは、コンピュータ化機能を表す固定グラフ構造と、コンピュータ化機能を表す固定グラフ構造と、所定の送信時間及び所定の切り替え時間を各処理ユニットについて決定できるようにする遅延を保持するテーブルとを受信するように接続される。
以下に説明する実施形態では、スイッチング回路は、その処理ユニットに接続された1組の出力ワイヤとそのスイッチングファブリックに接続可能な複数組の入力ワイヤとを有するマルチプレクサを備える。このマルチプレクサは、それらの処理ユニットに関してコンピュータ上の所定の物理的位置に配置されている。上記決定ステップは、所定の物理的位置及び結果として生じる転送時間に基づいて、切り替え制御命令がマルチプレクサに到達するための固定遅延、及びマルチプレクサからその処理ユニットの入力インターフェースに到達する出力データパケットを決定することを含み得る。ここで重要なことは、送信命令に対して、データパケットを受信側処理ユニットのローカルメモリにロードすることができる正確な時間を決定することである。
各ローカルプログラムは、処理ユニットでの計算段階が完了したことを同期モジュールに示す同期命令を含むことができる。上記決定ステップは、各処理ユニットについて、チップ上の同期イベント間の固定遅延を決定し、同期イベントが発生したという確認応答を処理ユニットに返送することを含むことができる。時間決定論的機械では、コンパイラは、スーパーバイザがその次の命令を実行してからの遅延を知ることができない。なぜなら、それは同期に参加する他のタイルのデータに依存するからである。コンパイラが知っておくべきことは、オンチップ同期イベント(常に同期を実行した後しばらくしてから発生する)から各タイルでの次のスーパーバイザ命令の実行までの一連の遅延である。確認応答(sync_ack)信号は、スーパーバイザが同期に続いて命令を実行する少し前の一定時間にタイルに到着している。
上記決定ステップは、遅延についての情報を保持するルックアップテーブルにアクセスして、所定の送信時間及び所定の切り替え時間を決定することを可能にすることを含むことができる。あるいは、この遅延を、コンピュータのアーキテクチャに関する情報に基づいてコンパイラによって計算してもよい。
この方法は、コンピュータ化機能が機械学習機能であり、固定グラフ構造がそのような機能を表す場合の使用に特に適している。固定グラフ構造は複数のノードを含むことができ、各ノードはローカルプログラム内のコードレット(codelet)によって表される。理解されているように、コードレットは一連の命令である。各ローカルプログラムは複数のコードレットを含むことができ、これらのコードレットは、同じ処理ユニット上で実行されたとしてもグラフの同じノードを表す必要はない。
別の態様は、非一時的媒体に記録されるコンピュータプログラムであって、コンパイラのプロセッサによって実行されるとコンピュータ化機能を提供するために複数のプログラムを生成する方法を実装するコンピュータ可読命令を含むコンピュータプログラムを提供する。各プログラムは、ローカルプログラムを保持する命令ストレージをそれぞれ有する複数の処理ユニットと、そのローカルプログラムを実行する実行ユニットと、データを保持するデータストレージと、各処理ユニットの出力インターフェースに接続され、各処理ユニットによって制御可能なスイッチング回路によって各処理ユニットの入力インターフェースに接続可能なスイッチングファブリックと、同期信号を生成するように動作可能な同期モジュールとを備えるコンピュータの処理ユニットで実行される。この方法は、
一連の実行可能命令を含む各処理ユニット用のローカルプログラムを生成することと、
各処理ユニットについて、各ローカルプログラムの命令の実行の相対時間を決定することと、を含み、これにより、1つの処理ユニットに割り当てられたローカルプログラムは、宛先識別子はないが受信側処理ユニットに宛てられた少なくとも1つのデータパケットを、同期信号に対して所定の遅延をもって、所定の送信時間に送信するための送信命令を実行するようにスケジュールされ、受信側処理ユニットに割り当てられたローカルプログラムは、受信時にそのデータパケットを受信するために、その処理ユニットワイヤをスイッチングファブリックに接続するようにスイッチング回路を制御するための切り替え制御命令を、所定の切り替え時間に実行するようにスケジュールされる。
別の態様は、ローカルプログラムを保持する命令ストレージ、そのローカルプログラムを実行する実行装置、及びデータを保持するデータストレージをそれぞれ有する複数の処理ユニットと、一組の入力ワイヤを有する入力インターフェース及び一組の出力ワイヤを有する出力インターフェースと、各組の出力ワイヤによって各処理ユニットに接続され、各処理ユニットによって制御可能なスイッチング回路を介して各入力ワイヤによって各処理ユニットに接続可能であるスイッチングファブリックと、計算段階と交換段階とを切り替えるためにコンピュータを制御する同期信号を生成するように動作可能な同期モジュールと、を備えるコンピュータを提供する。この処理ユニットは、共通のクロックに従ってそれらのローカルプログラムを実行するように構成され、ローカルプログラムは、交換段階において、少なくとも1つの処理ユニットがそのローカルプログラムからの送信命令を実行して送信時にデータパケットをその接続ワイヤの出力セットに送信するようになっており、データパケットは、少なくとも1つの受信側処理ユニット宛であるが宛先識別子を有さず、受信側処理ユニットは、所定の切り替え時に、そのローカルプログラムからの切り替え制御命令を実行して、受信時にデータパケットを受信するために、そのスイッチング回路を制御してその入力セットのワイヤをスイッチングファブリックに接続して、受信時にデータパケットを受信し、その送信時、及びスイッチ時及び受信時は、同期信号に関して共通クロックによって支配される。
いくつかの実施形態では、送信命令は、そこからデータパケットが送信されることになるデータストレージ内の位置を識別する送信アドレスを明示的に定義する。
いくつかの実施形態では、送信命令には送信アドレスが明示的に定義されず、データパケットは、送信命令によって暗黙的に定義されたレジスタに定義された送信アドレスから送信される。
いくつかの実施形態では、ローカルプログラムは、暗黙レジスタ内の送信アドレスを更新するための送信アドレス更新命令を含む。
いくつかの実施形態では、送信時間は、命令が実行される送信時間後の既知数のクロックサイクルである。
いくつかの実施形態では、スイッチング回路は、その処理ユニットに接続された出力ワイヤの出口の組と、スイッチングファブリックに接続された複数組の入力ワイヤとを有するマルチプレクサを備え、複数組の入力ワイヤのうちの1組が、処理ユニットによる制御に従って選択される。
いくつかの実施形態では、受信側処理ユニットは、データパケットを受信し、それをメモリポインタによって識別されたメモリ位置でデータストレージにロードするように構成される。
いくつかの実施形態では、メモリポインタは、各データパケットがデータストレージにロードされた後に自動的にインクリメント(increment)される。
いくつかの実施形態では、受信側処理ユニットのローカルプログラムは、メモリポインタを更新するメモリポインタ更新命令を含む。
いくつかの実施形態では、送信命令は送信されるべきいくつかのデータパケットを識別し、各データパケットは異なる送信時間に紐付けられる。
いくつかの実施形態では、入力ワイヤの複数組のうちの1組は、ヌル入力に接続されている。
いくつかの実施形態では、受信側処理ユニットは、時間的に前に送信命令を実行した処理ユニットと同じ処理ユニットであるため、同じ処理ユニットが、データパケットを送信し、時間的に後でそのデータパケットを受信するように構成される。
いくつかの実施形態では、複数の処理ユニットが、それぞれのデータパケットを送信するためにそれぞれの送信命令を実行するように構成され、このデータパケットのうちの少なくともいくつかは、どの受信側処理ユニットをも宛先としていない。
別の態様は、コンピュータにおいて機能を計算する方法を提供する。この方法は、複数の処理ユニットであって、各ユニットが、ローカルプログラムを保持する命令ストレージ、そのローカルプログラムを実行するための実行ユニット、データを保持するデータストレージ、一組の入力ワイヤを有する入力インターフェース、及び一組の出力ワイヤを有する出力インターフェースを含む処理ユニットと、その出力ワイヤの各組によって各処理ユニットそれぞれに接続され、各処理ユニットによって制御可能なスイッチング回路を介してそれぞれの入力ワイヤによって各処理ユニットに接続可能なスイッチングファブリックと、計算段階と交換段階とを切り替えるためにコンピュータを制御する同期信号を生成するように動作可能な同期モジュールとを含む。この方法において、処理ユニットは、共通のクロックに従って計算段階においてそのローカルプログラムを実行し、交換段階にて、少なくとも1つの処理ユニットが、そのローカルプログラムからの送信命令を実行して、送信時にデータパケットをその接続ワイヤの出力セットに送信し、このデータパケットが少なくとも1つの受信側処理ユニット宛てであるが宛先識別子を持たず、その受信側処理ユニットは、所定の切り替え時に、そのローカルプログラムからの切り替え制御命令を実行してスイッチング回路を制御して、その入力ワイヤセットをスイッチングファブリックに接続し、受信時にデータパケットを受信し、その送信時及びスイッチ時は、同期信号に関して共通クロックによって支配される。
いくつかの実施形態では、複数の機能が、複数の相互接続されたノードを含む静的グラフの形態で提供され、各ノードはローカルプログラムのコードレットによって実装される。
いくつかの実施形態では、各コードレットの計算段階はデータを処理して結果を生成し、結果のいくつかは後続の計算段階には必要ではなく、受信側処理ユニットによって受信されない。
いくつかの実施形態では、交換段階において、データパケットは、スイッチングファブリック及びスイッチング回路を介して処理ユニット間で送信される。
いくつかの実施形態では、各処理ユニットは、それ自体の計算段階が完了したことを同期モジュールに示し、すべての処理ユニットがそれら自体の計算段階が完了したことを示すと、同期モジュールによって同期信号が生成され、交換段階を開始する。
いくつかの実施形態では、グラフは機械学習機能を表す。
いくつかの実施形態では、交換段階において、データパケットは、一連の一時的記憶機構(temporary stores)を介してパイプライン方式でスイッチングファブリックを介して送信される。各記憶機構は共通クロックの1サイクルの間データパケットを保持するものである。
本発明をよりよく理解するために、また本発明をどのように実施することができるかを示すために、例として以下の図面を参照する。
シングルチッププロセッサのアーキテクチャを概略的に示す。 スイッチングファブリックに接続されたタイルの概略図。 BSPプロトコルを示す図。 時間決定論的交換における2つのタイルを示す概略図。 時間決定論的交換を示す概略タイミング図。 機械知能グラフの一例。 時間決定論的プログラムを生成するためのコンパイラの動作を示す概略アーキテクチャ。 時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマット。 時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマット。 時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマット。 時間決定論的アーキテクチャで使用可能な異なる命令の命令フォーマット。
図1は、シングルチッププロセッサ2のアーキテクチャを概略的に示している。このプロセッサは、本明細書ではIPU(インテリジェンスプロセッシングユニット)と呼ばれ、機械知能アプリケーションに対するその適応性を示している。コンピュータでは、シングルチッププロセッサは、後述するように、チップ上のリンクを使用して互いに接続してコンピュータを形成することができる。本説明は、シングルチッププロセッサ2のアーキテクチャに焦点を合わせる。プロセッサ2は、タイルと呼ばれる複数の処理ユニットを備える。一実施形態では、本明細書で「ノース(north)」及び「サウス(south)」と呼ぶアレイ6a、6bに編成された1216個のタイルがある。説明する例では、各アレイは76個のタイルからなる8つの列を有する(実際には通常、冗長用に通常80個のタイルがある)。本明細書に記載された概念は、多数の異なる物理的アーキテクチャに及ぶことが理解されよう。ここには理解を助けるために一例が与えられている。チップ2は、チップ2の「ウエスト(west)」エッジに配置された2つのチップ−ホスト間リンク8a、8b及び4つのチップ−チップ間リンク30a、30bを有する。チップ2は、チップ2によって処理されるべき入力データの形でカード−ホスト間リンクの1つを介してチップに接続されているホスト(図示せず)からワーク(work)を受け取る。チップは、チップの「イースト(east)」側に沿って配置された別の6つのチップ間リンク30a、30bによって一緒にカードに接続することができる。ホストは、ホストアプリケーションからのワークロード(workload)に応じて、本明細書に記載のシングルチッププロセッサ2又は複数の相互接続されたシングルチッププロセッサ2のグループとして設計されたコンピュータにアクセスすることができる。
チップ2はチップ動作のタイミングを制御するクロック3を有する。このクロックはチップの回路とコンポーネントとのすべてに接続されている。チップ2は、すべてのタイル及びリンクが接続ワイヤの複数組によって接続されている時間決定論的スイッチングファブリック34を含む。このスイッチングファブリックはステートレスである。すなわちプログラム可視状態を有さない。接続ワイヤの各組は、端と端とが固定されている。ワイヤはパイプライン化されている。この実施形態では、1組は32本のデータ線と、有効ビットなどの制御線とを含む。各組は32ビットのデータパケットを搬送することができる。ここで、「パケット」という語は、場合によって1つ又は複数の有効ビットを含む、データを表す複数ビットの組(本明細書ではデータアイテムと呼ぶことがある)を示す。「パケット」は、意図された受信者を一意に識別することを可能にするヘッダも、いかなる形式の宛先識別子も持たず、パケット終了情報も持たない。代わりに、パケットはそれぞれ、タイルへの入力又はタイルからの出力の数値又は論理値を表す。各タイルには独自のローカルメモリがある(後述)。タイルはメモリを共有しない。スイッチングファブリックは、後述するようにマルチプレクサ及びタイルにのみ接続されている接続ワイヤのクロスセットを構成し、プログラムの可視状態を保持しない。スイッチングファブリックはステートレスと見なされ、メモリを一切使用しない。タイル間のデータ交換は、本明細書に記載されているように時間決定論的基準で行われる。パイプライン接続ワイヤは、一連の一時的な記憶、例えば、データを次の記憶に解放する前に、そのデータをクロックサイクルの間保持するラッチ又はフリップフロップを含む。ワイヤに沿った移動時間はこれらの一時的な記憶によって決定され、それぞれが任意の2点間の経路内のクロックサイクルの時間を使いきる。
図2は、本開示の実施形態による例示的なタイル4を示す。このタイルでは、複数のスレッドが単一の実行パイプラインを介してインターリーブされている。タイル4は、複数のスレッドのうち異なるそれぞれ1つの状態をそれぞれが表すように配置された複数のコンテキスト26と、その複数のスレッドに共通の共有命令メモリ12と、その複数のスレッドに共通の共有データメモリ22と、これもその複数のスレッドに共通の共有実行パイプライン14、16、18と、インターリーブ方式で共有パイプラインを介して実行するために、その複数のスレッドをスケジューリングするためのスレッドスケジューラ24とを含む。スレッドスケジューラ24は、一連のタイムスロットS0・・・S5によって概略的に図に表されているが、実際には、タイムスロットに関連してスレッドのプログラムカウンタを管理するハードウェアメカニズムである。この実行パイプラインは、フェッチステージ14と、デコードステージ16と、実行ユニット(EXU)及びロード/ストアユニット(LSU)を含む実行ステージ18とを含む。各コンテキスト26は、各スレッドのプログラム状態を表すためのそれぞれの組のレジスタR0、R1、・・・を含む。
フェッチステージ14は、スレッドスケジューラ24の制御下で、命令メモリ12から実行される命令をフェッチするように接続されている。スレッドスケジューラ24は、以下により詳細に説明するように、フェッチステージ14を制御して、各タイムスロットで実行するためにローカルプログラムから命令をフェッチするように構成される。
フェッチステージ14は、現在タイムスロットに割り当てられているスレッドそれぞれのプログラムカウンタ(PC)にアクセスすることができる。所与のスレッドについて、フェッチステージ14は、スレッドのプログラムカウンタによって示されるように、命令メモリ12内の次のアドレスからそのスレッドの次の命令をフェッチする。 尚、本明細書で言う命令は、機械コード命令、すなわち、オペコードとゼロ個以上のオペランドとから構成されるコンピュータの命令セットの基本命令のうちの1つのインスタンスを意味する。各タイルにロードされるプログラムは、サポートされている機械知能モデルのグラフに基づいて作業を割り当てるようにプロセッサ又はコンパイラによって決定されることにも留意されたい。
次に、フェッチステージ14が、フェッチした命令をデコードするためにデコードステージ16に渡すと、次にデコードステージ16が、その命令が実行されるように、その命令内で指定した現在のコンテキストの任意のオペランドレジスタのデコード済みアドレスと共に、デコードした命令の指示(indication)を実行ステージ18に渡す。
この例では、スレッドスケジューラ24は、ラウンドロビン方式に従ってスレッドをインターリーブし、それにより、その方式の各ラウンド内で、そのラウンドは、それぞれが各スレッドを実行するように、タイムスロットのシーケンスS0、S1、S2、S3に分割される。通常、各スロットは1プロセッササイクル長であり、別々のスロットは均等なサイズとされる(ただし、可能な全実施形態において必ずそうとは限らない)。そしてこのパターンが繰り返され、各ラウンドは各タイムスロットそれぞれのインスタンスを含む(実施形態では毎回同じ順序であるが、これも、可能な全実施形態において必ずそうとは限らない)。したがって、本明細書で言うタイムスロットは、シーケンスの所与の繰り返しにおけるタイムスロットの特定のインスタンスではなく、シーケンス内の繰り返し割り当てられた場所を意味することに留意されたい。図示の実施形態では、8つのタイムスロットがあるが、他の数も可能である。各タイムスロットは、実行スレッドのコンテキストを管理するため、レジスタなどのハードウェアリソースに関連付けられている。
SVとラベル付けされたコンテキスト26のうちの1つは、「ワーカー」スレッドの実行を調整する機能を有する「スーパーバイザ」(SV)の状態を表すための特別な機能用に予約されている。スーパーバイザは、同時に実行することができる1つ又は複数のスーパーバイザスレッドとして編成されたプログラムとして実装することができる。このスーパーバイザスレッドはまた、後で説明するバリア同期の実行を担当しても、計算間でワーカースレッド間で共有できるようにタイル内外ならびにローカルメモリの内外のデータ交換を担当してもよい。スレッドスケジューラ24は、プログラム全体としての起動時に、スーパーバイザスレッドをすべてのタイムスロットに割り当てることから始めるように構成されている。すなわち、スーパーバイザSVは、すべてのタイムスロットS0・・・S5において動作し始める。しかし、スーパーバイザスレッドは、その後のある時点で(すぐに又は1つ又は複数のスーパーバイザタスクを実行した後に)、それが実行している各スロットを一時的に、ワーカースレッドが割り当てられているスロットを示すそれぞれのワーカースレッドC0、C1に放棄するための機構を備える。これは、ここでは例として「RUN」と呼ばれる放棄命令を実行するスーパーバイザスレッドによって達成される。実施形態では、この命令は2つのオペランド、すなわち命令メモリ12内のワーカースレッドのアドレスと、データメモリ22内のそのスレッドに関するいくつかのデータのアドレスとをとる。
RUN task_addr, data_addr
各ワーカースレッドは、グラフ内の頂点を表し、アトミックに実行することを目的としたコードレットである。すなわち、それが消費する全データは起動時には利用できるようになっており、それが作り出す全データは終了するまで他のスレッドには見えない。これは(エラー状態を除いて)完了するまで実行される。データアドレスは、コードレットによって作用されるべきいくつかのデータを指定することができる。あるいは、その放棄命令は、コードレットのアドレスを指定する単一のオペランドのみを取り、そのデータアドレスを、コードレットのコードに含めることができる。又は、単一オペランドが、コードレットとデータのアドレスを指定するデータ構造を指すことも可能である。コードレットは、同時にかつ互いに無関係に実行可能である。
いずれにせよ、この放棄命令(「RUN」)は、現在のタイムスロット、すなわちこの命令が実行されるタイムスロットをオペランドによって指定されたワーカースレッドに放棄するようにスレッドスケジューラ24に作用する。放棄されているのはこの命令が実行されるタイムスロットであることが放棄命令に暗黙的に含まれていることに留意されたい。 (機械語命令の文脈における暗黙的とは、これを指定するためにオペランドを必要としない、命令コード自体から暗黙的に理解されることを意味する)。したがって、渡される(given away)スロットは、スーパーバイザが放棄命令を実行するスロットである。別の言い方をすれば、スーパーバイザはそれが放出したものと同じスペースで実行している。スーパーバイザは「このタイムスロットでこのコードレットを実行する」と言うと、それ以降はそのスロットは関連するワーカースレッドによって(一時的に)所有される。尚、スーパーバイザがスロットを使用するとき、スーパーバイザはそのスロットに紐付けられたコンテキストを使用せず、独自のコンテキストSVを使用する。
スーパーバイザスレッドSVは、各タイムスロットにおいて同様の動作を実行し、そのすべてのスロットC、C1をワーカースレッドのそれぞれに渡す。最後のスロットでこれが実行されると、スーパーバイザは実行するスロットがないため、実行を一時停止する。尚、スーパーバイザはそのスロットをすべて渡すのではなく、スーパーバイザ自体の実行用にいくつか保持しておくことができる。
スーパーバイザスレッドは、コードレットを実行する時が来たと判断すると、放棄命令(「RUN」)を使用して、このコードレットを「RUN」命令を実行するスロットに割り当てる。
スロットC、C1内の各ワーカースレッドは、その1つ又は複数の計算タスクを実行し始める。そのタスクの終了時、このワーカースレッドは、スーパーバイザスレッドまで戻っているタイムスロットをスーパーバイザスレッドに引き渡す。
これは、ワーカースレッドが終了命令(「EXIT」)を実行することによって実現される。一実施形態では、EXIT命令は、終了時にそれぞれのコードレットの状態を示すためにプログラマによって望まれる任意の目的のために使用される少なくとも1つのオペランド、好ましくは単一のオペランド、出口状態(例えば2進値)のみをとる。
EXIT exit_state
一実施形態では、EXIT命令は、それが実行されるタイムスロットがスーパーバイザスレッドに返されるようにスケジューラ24に作用する。その後、スーパーバイザスレッドは1つ以上の後続のスーパーバイザタスク(例えば、ワーカースレッド間のデータ交換を容易にするためのバリア同期及び/又はメモリ内のデータの移動)を実行、及び/又は対象スロットに新しいワーカースレッド(W4など)を割り当てるために別の放棄命令を実行し続けることができる。したがって、命令メモリ12内のスレッドの総数は、バレルスレッド処理ユニット10が一度にインターリーブすることができる数よりも多くなり得ることに再び留意されたい。スーパーバイザスレッドSVの役割は、命令メモリ12からのどのワーカースレッドW・・・Wjをプログラム全体のどの段階で実行すべきかをスケジュールすることである。
別の実施形態では、EXIT命令は終了状態を定義する必要はない。
この命令は、それが実行されるタイムスロットがスーパーバイザスレッドに戻されるようにスレッドスケジューラ24に作用する。その後、スーパーバイザスレッドは、1つ又は複数のスーパーバイザ後続タスク(例えば、バリア同期及び/又はデータ交換)を実行し、かつ/又は別の放棄命令などを実行し続けることができる。
簡単に上述したように、データはチップ内のタイル間で交換される。各チップは、計算段階と交換段階とを含むバルク同期パラレルプロトコルを操作する。このプロトコルは、例えば図3に示す。図3の左側の図は、各タイル4が、ステートフルコードレットがローカルメモリ(12、22)上で実行される段階にある計算段階を表す。図3では、タイル4は円形に配置されて示されているが、これは説明目的のためだけであり、実際のアーキテクチャを反映するものではない。
計算段階の後、矢印30で示した同期がある。これを実現するために、SYNC(同期)命令がプロセッサの命令セットに用意されている。SYNC命令は、EXIT命令によって現在実行中のすべてのワーカーWが終了するまでスーパーバイザスレッドSVを待機させる効果を有する。実施形態ではSYNC命令はオペランドとしてモードを取る(実施形態ではその唯一のオペランド)。このモードは、SYNCが同じプロセッサモジュール4上でローカルに実行されているワーカースレッドのみに関してローカルにのみ動作するかどうか、又はそうではなくて、複数のタイルか複数のタイルかにまたがって適用するのかを指定する。
SYNCmode//mode∈{tile,chip,zone_1,zone_2}
BSP自体は当技術分野において公知である。BSPによれば、各タイル4は交互のサイクルで計算段階52及び交換(時々通信又はメッセージパッシングと呼ばれる)段階50を実行する。この計算段階及び交換段階は、タイル実行命令によって実行される。計算段階52の間、各タイル4は1つ又は複数の計算タスクをタイル上で局所的に実行するが、その計算結果を他のタイル4とは通信しない。交換段階50において、各タイル4は、前の計算段階からの計算の1つ又は複数の結果をグループ内の1つ又は複数の他のタイルとの間で交換(通信)することを許可されるが、他のタイル4上で実行されたタスクに対して潜在的な依存関係を有する新しい計算、又は他のタイル4上でのタスクが潜在的に依存関係を有し得る新しい計算を実行していない(これは内部制御関連操作などの他の操作が交換段階で行われ得ることを排除するものではない)。さらに、BSP原理によれば、バリア同期は、計算段階52から交換段階50に移行する時点、又は交換段階50から計算段階52に移行する時点、又はその両方で行われる。すなわち、(a)グループ内のいずれかが次の交換段階50に進むことを許可される前に、すべてのタイル4がそれぞれの計算段階52を完了することが要求される、又は(b)グループ内のタイル4が次の計算段階52に進むことを許可される前に、グループ内のすべてのタイル4はそれぞれの交換段階50を完了することが要求される、又は(c)これらの条件の両方が求められる。この一連の交換段階及び計算段階は、その後、複数の反復にわたって繰り返すことができる。BSP用語では、交換段階及び計算段階の各繰り返しを、BSPのいくつかの以前の説明における使用法と同様、ここでは「スーパーステップ」と呼ぶ。尚、用語「スーパーステップ」は、交換段階及び計算段階のそれぞれを示すために当技術分野において時々使用される。
実行ステージ18の実行ユニット(EXU)は、SYNC命令のオペコードに応答して、オンチップ(タイル間)オペランドによって承認されると、アレイ6内のすべてのタイル4がワーカーを実行し終えるまで「SYNC」が実行されたスーパーバイザスレッドを停止させるように構成されている。これは次のBSPスーパーステップへのバリアを実装するために使用されることができる、すなわちチップ2上のすべてのタイル4がバリアを通過した後、クロスタイルプログラムは全体として次の交換段階50へ進むことができる。
各タイルはその同期状態を同期モジュール36に示す。各タイルがデータを送信する準備が整ったことが確認されると、同期プロセス30は、システムを図3の右側に示される交換段階に入らせる。この交換段階では、データ値がタイル間(実際にはメモリ間データ移動におけるタイルのメモリ間)を移動する。交換段階では、タイルプログラム間で並行性の問題を引き起こす可能性のある計算はしない。 交換段階では、各データは、それがタイルを出る接続ワイヤに沿って送信タイルから1つ又は複数の受信側タイルに移動する。各クロックサイクルで、データはその経路に沿って(ストアからストアへ)一定距離をパイプライン方式で移動する。データがタイルから発行される場合、受信側タイルを識別するヘッダは付けられずに発行される。代わりに、受信側タイルは、特定時点に特定の送信側タイルからのデータを予想していることを理解している。したがって、本明細書に記載のコンピュータは時点決定式である。各タイルは、プログラマ又はコンパイラ実習によって割り当てられたプログラムを操作する。プログラマ又はコンパイラ機能は、特定のタイルによって特定時点で何が送信されるのか、及び特定時点に受信者のタイルが何を受信する必要があるのかを認識している。これを達成するために、SEND命令が、各タイル上でプロセッサによって実行されるローカルプログラムに含まれ、このSEND命令の実行時点は、コンピュータ内の他のタイル上で実行される他の命令のタイミングに対して予め決定される。これについては後でさらに詳細に説明するが、最初に、受信側タイルが所定の時点にデータを受信することができるメカニズムについて説明する。各タイル4はそれ自体のマルチプレクサ210と紐付けられる。従って、チップは1216個のマルチプレクサを有する。各マルチプレクサは1216個の入力を有し、各入力は32ビット幅(さらに任意選択で数個の制御ビット)である。各入力はスイッチングファブリック34内の接続ワイヤ140xのそれぞれのセットに接続されている。スイッチングファブリックの接続ワイヤは、各タイルからのデータ出力接続ワイヤの1組218(後述のブロードキャスト交換バス)にも接続されているので、この実施形態ではチップを横切る方向に延びる1216組の接続ワイヤがある。 説明を簡単にするために、サウスアレイ6bにおいて、図2には示されていないタイルから来る、単一組のワイヤ140scがデータ出力ワイヤ218sに接続されて示されている。この一組のワイヤは、140xとラベル付けされて、複数組のクロスワイヤ1400〜1401215のうちの1つであることを示している。ここで図2から分かるように、マルチプレクサ210がサウスアレイ6bからラベル220xの入力に切り替えられると、クロスワイヤ140xに接続し、したがってタイルのデータ出力ワイヤ218sに接続することになる(図2には図示せず)。マルチプレクサが、特定の時点でその入力(220sc)に切り替わるように制御されている場合、接続ワイヤ140xの組に接続されているデータ出力ワイヤ上で受信されるデータは、特定の時点でマルチプレクサ210の出力230に現れる。これはその後、タイルからマルチプレクサまでの距離に応じた一定の遅延でタイル4に到達する。このマルチプレクサはスイッチングファブリックの一部を形成するので、タイルからマルチプレクサへの遅延はタイルの位置によって異なる。この切り替えを実装するために、タイル上で実行されるローカルプログラムは切り替え制御命令(PUTi)を含む。この命令は、マルチプレクサ制御信号214を発行させてそのタイルに紐付けられているマルチプレクサを制御して、特定データがそのタイルで受信されると予想される時間に先立つ特定時間にその入力を切り換えるものである。交換段階では、マルチプレクサが切り替えられ、パケット(データ)がスイッチングファブリックを使用してタイル間で交換される。この説明から明らかなように、スイッチングファブリックは状態を持たず、各データの移動は、各マルチプレクサの入力が切り替えられる特定の組のワイヤによって予め決定される。
交換段階では、全タイル対全タイル通信が可能になる。この交換段階は複数のサイクルを持つことができる。各タイル4はそれ自体の固有の入力マルチプレクサ210を制御する。チップ内の他のタイルから、又は接続リンクの1つからの入トラフィックを選択できる。尚、マルチプレクサが「null」入力を受信するように設定されている可能性がある。つまり、その特定の交換段階では、他のタイルからの入力は受信されない。
選択は交換段階内でサイクルごとに変わる可能性があり、ずっと一定である必要はない。選択されたリンクに応じて、データはチップ上で、又はチップからチップへ、又はチップからホストへと交換され得る。本願は、主にチップ上のタイル間通信に関する。チップ上で同期を実行するために、少数のパイプライン信号がチップ上の同期コントローラ36に供給され、パイプライン同期肯定応答信号が同期コントローラからすべてのタイルにブロードキャスト(broadcast)される。一実施形態では、パイプライン信号は、1ビット幅のデイジーチェーンのAND/OR信号である。タイル間の同期が達成される1つのメカニズムは、上述した又は以下に説明するSYNC命令である。他のメカニズムを利用してもよい。重要なのは、すべてのタイルをチップの計算段階とチップの交換段階の間で同期できることである(図3)。SYNC命令は、タイル4上の専用同期ロジック内及び同期コントローラ36内でトリガされるべき以下の機能をトリガする。同期コントローラ36は、ハードウェア相互接続部34内に、又は図示のように別個のオンチップモジュール内に実装することができる。タイル上同期ロジック(on-tile sync logic)及び同期コントローラ36の両方のこの機能は、SYNCチップが実行されると残りの機能がこれを実行するための追加命令が実行されることなく進むように、専用のハードウェア回路で実装される。
第1に、タイル上同期ロジックは、対象タイル4上のスーパーバイザに対する命令発行を自動的に一時停止させる(フェッチステージ14及びスケジューラ24にスーパーバイザの命令発行を中断させる)。ローカルタイル4上のすべての発行済み(outstanding)のワーカースレッドが終了(EXIT)を実行すると、同期ロジックは自動的に同期リクエスト「sync_req」を同期コントローラ36に送信する。ローカルタイル4は、スーパーバイザ命令の発行が一時停止した状態で待機を続ける。同様のプロセスが、アレイ6内の他の各タイル4(それぞれが同期ロジックのそれ自体のインスタンスを含む)に対しても実装される。したがって、ある時点で、現在の計算段階52内のすべての最終ワーカーがアレイ6内のすべてのタイル4で終了(EXIT)すると、同期コントローラ36は、アレイ6内のすべてのタイル4からそれぞれの同期要求(sync_req)を受け取る。同じチップ2上のアレイ6内のすべてのタイル4からsync_reqを受信したことに応答して、このとき初めて、同期コントローラ36は同期肯定応答信号「sync_ack」を各タイル4上の同期ロジックに送り返す。この時点まで、タイル4はそれぞれ、同期肯定応答信号(sync_ack)を待ちながらスーパーバイザ命令発行を一時停止させている。sync_ack信号を受信すると、タイル4内の同期ロジックは、そのタイル4上の各スーパーバイザスレッドに対するスーパーバイザ命令発行の一時停止を自動的に解除する。その後、スーパーバイザは、後続の交換段階50において、相互接続部34を介して他のタイル4とデータを交換することを自由に進めることができる。
好ましくは、sync_req信号及びsync_ack信号は、相互接続部34内の各タイル4を同期コントローラ36に接続する1つ又は複数の専用同期ワイヤを介して、同期コントローラとの間でそれぞれ送受信される。
ここでタイルの接続構造についてさらに詳細に説明する。
各タイルには3つのインターフェースがある。
スイッチングファブリック34からタイル4へデータを渡すexinインターフェース224と、
ブロードキャスト交換バス218を介してデータをタイルからスイッチングファブリックに渡すexoutインターフェース226と、
制御マルチプレクサ信号214(mux−select)をタイル4からそのマルチプレクサ210に渡すexmuxインターフェース228と、がある。
個々のタイルが、正しいデータを送受信するために適切な時点でSEND命令及び切り替え制御命令を確実に実行するためには、個々のプログラムをコンピュータ内の個々のタイルに割り当てるプログラマ又はコンパイラによって、交換スケジュール要件が満たされる必要がある。この機能は、以下の交換タイミング(BNET)パラメータを認識する必要がある交換スケジューラによって実行される。これらのパラメータを理解するために、図2の簡略版を図4に示す。図4はまた、受信側タイルと送信側タイルを示している。
I.各タイルの相対同期確認応答遅延、BNET_RSAK(TID)
TIDは、後述するTILE_IDレジスタに保持されているタイル識別子である。これは、各タイルが最も早い受信タイルに対して同期コントローラ36からack信号をいつ受信するかを示す、常に0個以上の複数のサイクル数である。これは、タイルIDから計算することができ、そのタイルIDはそのタイルのチップ上の特定の位置を示し、したがって物理的距離を反映するものである。 図4は、1つの送信タイル4Tと1つの受信タイル4Rを示す。概略的にのみ示し、縮尺通りではないが、タイル4Tは同期コントローラにより近く示され、タイル4Rはより遠くに示されているので、同期確認遅延(sync acknowledgement delay)はタイル4Rに対するよりもタイル4Tに対してより短くなる。この同期確認遅延について、特定の値が各タイルに紐付けられる。これらの値は、例えば遅延テーブルに保持することができ、あるいはタイルIDに基づいて毎回その場で計算することができる。
II.交換マルチプレクサ制御ループ遅延、BNET_MXP(受信タイルのTID)
これは、タイルの入力マルチプレクサの選択を変更する命令(PUTi−MUXptr)を発行してから、その新たなマルチプレクサの選択の結果としてメモリに格納された交換データのために同じタイルが(仮想)ロード命令を発行することができる最も早い時点までのサイクル数である。図4を見ると、この遅延は、受信側タイル4Rのexmuxインターフェース228Rからそのマルチプレクサ210Rに到達する制御信号の遅延と、マルチプレクサの出力からデータexinインターフェース224までのラインの長さとを含む。
III.タイルからタイルへの交換遅延、BNET_TT(送信タイルのTID、受信タイルのTID)
これは、1つのタイルでSEND命令が発行されてから、受信側のタイルがそれ自体のメモリ内の送信値を指す(仮想)ロード命令を発行することができる最も早い時点までのサイクル数である。これは、既に説明したようにテーブルにアクセスすることによって、又は計算によって、送信側タイル及び受信側タイルのタイルIDから決定されている。再び図4を見ると、この遅延は、データが、交換ファブリック218Tに沿ってそのex_outインターフェース226Tからスイッチングファブリック34に、次いで受信タイル4Rのex_inにて入力マルチプレクサ210Rから受信タイルのインターフェース224Rまで、送信タイル4Tから移動するのにかかる時間を含む。
IV.交換トラフィックメモリポインタ更新遅延、BNET_MMP()
これは、タイルの交換入力トラフィックメモリポインタを変更する命令(PUTi−MEMptr)を発行してから、その新たなポインタの結果としてその同じタイルがメモリに記憶された交換データの(仮想)ロード命令を発行できる最短時点までのサイクル数である。これは、小さな固定数のサイクルである。このメモリポインタを、まだ議論していないが、図2に参照符号232として示す。これは、データメモリ202へのポインタとして機能し、ex_inインターフェース224から入ってくるデータがどこに記憶されるべきかを示す。これについては後で詳しく説明する。
図5は交換のタイミングをより詳細に示す。図5の左側には、0〜30のIPUクロックサイクルがある。送信命令の発行から始めて、送信タイル4Tに対する動作がIPUクロックサイクル0〜9の間に発生する(SEND F3)。IPUクロックサイクル10から〜24では、データはスイッチングファブリック34を介する経路を通過する。
IPUクロックサイクル11において受信タイル4Rを見ると、タイル入力マルチプレクサの選択を変えるPUTi命令、すなわちPUTi ? MXptrが実行される(F3)。図5では、このPUTi命令に「PUTi INCOMING MUX(F3)」としてラベル付けされている。
サイクル18において、メモリポインタ命令、PUTi ? MEMptr(F3)が実行され、ITUクロックサイクル25におけるロード命令を可能にする。図5において、このPUTi命令は「PUTi INCOMING ADR(F3)」としてラベル付けされている。
送信タイル4では、IPUクロックサイクル1、3、及び5が「TRANSPORT( )」とマークされている。これは、SEND命令の発行と、以前のSEND命令からexoutインターフェースへの転送中のデータを示すexoutインターフェースF4、E1、E3などへのSEND命令のデータの出現との間の内部タイル遅延である。IPUクロックサイクル2は、SEND命令用のアドレスEOを形成するために割り当てられる。尚、これはEOがフェッチされてくる場所であり、宛先アドレスではない。IPUクロックサイクル4において、メモリからE2をフェッチするためにメモリマクロが実行される。IPUクロックサイクル6では、E4でパリティチェックが実行される。IPUクロックサイクル7では、MUX出力命令が実行されてE5が送信される。IPUクロックサイクル8では、E6がエンコードされ、IPUクロックサイクルE7で出力される。
スイッチングファブリック34では、IPUクロックサイクル10〜24は「交換パイプステージ」とラベル付けされている。各サイクルで、データはパイプラインに沿って(一時記憶装置間で)「1ステップ」移動する。
サイクル25〜28は、exinインターフェースでデータを受信する間の受信側タイル4R上の遅延を示す(ExcについてはMem Macro(E2)参照)。一方、サイクル25〜29日は、exinインターフェースでデータを受信してからLDに対してメモリ(Mem Macro(E2)参照)にロードするまでの遅延を示す。他の機能はその遅延で実行することができる。EARLIEST LD(F3)、Reg file rd(F4)、Form addr(E0)、Transport(E1)を参照。
簡単に言えば、受信側タイル4Rのプロセッサが、送信側タイル4Tに対するプロセスの出力であるデータ(例えばF3)に作用したい場合、送信タイル4TTは、ある時点(例えば、図5のIPUクロックサイクル0)でSEND命令[SEND(F3)]を実行しなければならない。そして受信側タイルは、送信側タイルでのSEND命令の実行[SEND(F3)]の実行から一定時間までに(IPUクロックサイクル11におけるように)切り替え制御命令PUTi EXCH MXptrを実行しなければならない。これにより、受信側タイルで実行されているコードレットで使用するためにデータがIPUサイクル25においてロードされるべき[EARLIEST LD(F3)]時間内に、当該データを確実に受信タイルに到着させることができる。
受信側タイルにおける受信プロセスは、命令PUTi MEMXptrの場合のようにメモリポインタを設定することを含む必要はないことに留意されたい。代わりに、メモリポインタ232(図2)は、各データがexinインターフェース224で受信された後に自動的にインクリメントする。受信したデータは、次に利用可能な次のメモリ位置にロードされる。しかし、メモリポインタを変更する機能により、受信側タイルはデータが書き込まれるメモリ位置を変更することができる。このすべては、正しく通信するように個々のプログラムを個々のタイルに書き込むコンパイラ又はプログラマによって決定され得る。これは内部交換(チップ上の相互交換)のタイミングが完全に時間決定論的になるという結果になる。この時間決定論性は、交換シーケンスを非常に最適化するために交換スケジューラによる使用が可能である。
図6は、ここに開示したプロセッサアーキテクチャの応用例、すなわち機械知能への応用を示す。
前述のように、そして機械知能の分野の当業者にはよく知られているように、機械知能は、機械知能アルゴリズムが知識モデルを学習する学習段階から始まる。このモデルは、相互接続されたノード102及びリンク104のグラフ60として表すことができる。ノード及びリンクは頂点及び辺と呼ばれることがある。グラフ内の各ノード102は1つ又は複数の入力エッジ及び1つ又は複数の出力エッジを有し、いくつかのノード102のいくつかの入力エッジはいくつかの他のノードの出力エッジであるため、ノードを互いに接続するとこのグラフが形成される。さらに、1つ又は複数のノード102の1つ又は複数の入力エッジが全体としてグラフへの入力を形成し、1つ又は複数のノード102の1つ又は複数の出力エッジが全体としてグラフの出力を形成する。各エッジ104は、一般にテンソル(n次元行列)の形の値を伝達し、これらはそれぞれノード102との間で入力エッジ及び出力エッジ上に提供される入力及び出力を形成する。
各ノード102は、その入力エッジ(単数又は複数)で受け取られたときのその1つ又は複数の入力の機能を表し、この機能の結果は、出力エッジ(単数又は複数)に提供される単数又は複数の出力である。これらの結果はアクティベーションと呼ばれることがある。各機能は、1つ以上のそれぞれのパラメータによってパラメータ化される(必ずしも乗算型の重みである必要はないが、重みと呼ばれることがある)。一般に、異なるノード102によって表される機能は、異なる形式の機能であり得、及び/又は異なるパラメータによってパラメータ化され得る。
さらに、各ノードの機能の1つ又は複数のパラメータのそれぞれは、それぞれの誤差値によって特徴付けられる。さらに、それぞれのエラー状態は、各ノード102のパラメータ(単数又は複数)内のエラー(単数又は複数)に関連付けられてもよい。単一のエラーパラメータによってパラメータ化された機能を表すノード102の場合、そのエラー条件は単純な閾値でよい。すなわち、エラーが指定の閾値内にある場合は、エラー条件は満たされるが、エラーが閾値を超える場合は満たされない。2つ以上のそれぞれのパラメータによってパラメータ化されたノード102については、そのノード102のエラー状態はより複雑になる可能性がある。例えば、この場合のエラー状態は、そのノード102の各パラメータがそれぞれの閾値内にある場合にのみ満たされ得る。別の例として、同じノード102に対する異なるパラメータ内のエラーを組み合わせて組み合わせメトリックを定義することができ、この組み合わせメトリックの値が特定の閾値内に収まるという場合はエラー条件を満たすことができるが、組み合わせメトリックの値がその閾値を超えると(又はメトリックの定義に応じてその逆)エラー条件を満たされない。どのようなエラー状態でも、これが、そのノードのパラメータ(単数又は複数)におけるエラーが特定のレベル又は許容度を下回っているかどうかの尺度になる。
学習段階において、そのアルゴリズムは経験データ、すなわちグラフへの入力の異なる可能な組み合わせを表す複数のデータ点を受け取る。より多くの経験データが受信されるにつれて、そのアルゴリズムは、パラメータ内のエラーを最小化しようとして、その経験データに基づいてグラフ内の様々なノード102のパラメータを徐々に調整する。その目標は、グラフの出力が可能な限り望ましい結果に近くなるように、パラメータの値を見つけることである。グラフ全体としてこのような状態に近づくにつれて、計算は収束すると言われている。
例えば、教師付きアプローチでは、入力経験データは訓練データ、すなわち既知の出力に対応する入力の形態をとる。各データポイントで、そのアルゴリズムは、その出力が与えられた入力に対する既知の出力によりよく一致するように、パラメータを調整することができる。その後の予測段階では、このグラフを使用して入力クエリを近似予測出力にマッピングすることができる(推論を行う場合はその逆)。他の方法も可能である。例えば、教師なしアプローチでは、入力データごとの基準結果の概念はなく、代わりに機械知能アルゴリズムを使用して出力データ内の独自の構造を識別する。あるいは強化アプローチでは、アルゴリズムは入力経験データ内の各データポイントについて少なくとも1つの可能な出力を試し、この出力が正であるか負であるか、例えば勝つか負けるか、報酬を与えるか罰するか、又はその類似内容(そして潜在的にそれが正又は負である程度)を知らされる。多くの試行にわたって、アルゴリズムはグラフのパラメータを徐々に調整して、肯定的な結果につながる入力を予測できるようになる。こうしたグラフを学習するための様々な手法及びアルゴリズムは、機械学習の当業者であれば知ることができるであろう。
本明細書に開示される技術の例示的な応用によれば、各ワーカースレッドは、機械知能グラフ内のノード102のそれぞれ個々の1つに関連する計算を実行するようにプログラムされている。この場合、ノード102間のエッジ104は、スレッド間のデータ交換に対応し、その少なくともいくつかは、タイル間の交換を含み得る。
図7は、コンパイラ70の機能を示す概略図である。このコンパイラは、グラフ60を受け取ると、グラフ内の複数の機能を多数のコードレットにコンパイルする。このコードレットは図7の72とラベル付けされたローカルプログラムに含まれる。各ローカルプログラムは、コンピュータの特定のタイルにロードされるように設計されている。各プログラムは、1つ又は複数のコードレット72a、72b・・・と、それぞれ一連の命令からなるスーパーバイザーサブプログラム73とを含む。このコンパイラは、プログラム同士が時間で互いにリンクされるように、つまり時間決定論的であるように、プログラムを生成する。これを行うために、コンパイラはタイルデータ74にアクセスする。タイルデータ74は、タイルの位置、したがってローカルプログラムを生成するためにコンパイラが理解する必要がある遅延を示すタイル識別子を含む。この遅延は既に上述した通りであり、タイルデータに基づいて計算することができる。あるいは、タイルデータは、これらの遅延がルックアップテーブルを通じて利用可能であるデータ構造を組み込むことができる。
ここで、ここに定義されたコンピュータアーキテクチャ用の命令セットの一部として開発された新規の命令の説明をする。図8に32ビットのSEND命令を示す。SEND命令は、タイルメモリからのデータ送信を示す。これにより、タイルのローカルメモリ22内の特定のアドレスに格納されている1つ又は複数のデータがタイルのexoutインターフェースに送信される。各データ(命令では「アイテム」と呼ばれる)は、1ワード以上の長さになり得る。SEND命令は、送信機能を実装するために1ワード又は複数ワードに作用する。SEND命令は、オペコード80と、メッセージカウントを示すフィールド82と、アドレスフィールド84に示される送信アドレスからの1つ又は複数のパケットの形で送信されるアイテムの数とを有する。フィールド84は、ベースアドレスレジスタに記憶されたベース値に加算される即値の形でそこからアイテムが送られるべきローカルメモリ内のアドレスを定義する。SEND命令はまた、4バイト又は8バイトのうちの1つとして選択されたワードサイズを示す送信制御フィールド86(SCTL)を有する。パケットはその中に宛先識別子を有していない。言い換えれば、アイテムを受信することになっている受信側タイルは命令において一意的に識別されない。送信機能は、送信アドレスからの指定された数のデータアイテムをローカルメモリからアクセスされるようにし、タイルのex_outインターフェースに配置して次のクロックサイクルで送信されるようにする。SEND命令の他の変形では、アイテムのSEND送信アドレスはベースアドレスレジスタのベース値と出力デルタレジスタのデルタ値から取得して、暗黙的に指定できる。このデルタ値は、前のSEND命令内の情報に基づいて設定することができる。意図された受信側タイルの固有の識別子の代わりに、コンパイラは、正しい受信側タイルが、本明細書で既に説明したように、データ(データアイテム)を受信するために正しい時にそのローカルマルチプレクサ(単数又は複数)を切り替えるように配置する。尚、意図された受信側タイルは、場合によっては送信側タイルそのものであり得る。
このために、上述のように切り替え制御機能が提供される。図9は、この機能を実行するPUT−i−MUX命令を示す。オペコードフィールド90は命令をPUT?i?MUX命令として定義する。遅延期間は、遅延即時値92によって指定することができる。この遅延値は、「no op」命令を置き換えるために使用することができ、コード圧縮を最適化するための方法である。この命令は、実行されると、INCOMING_MUXフィールド98において、マルチプレクサ210のどの入力が他のタイルから送信されたアイテムを「聞く(listen)」ように設定されるべきかを定義する。簡潔さのために、このマルチプレクサ制御機能は、図10に示すように、上記で定義した送信機能を有する単一の命令に結合され得る。尚、タイルを送信側タイルとして機能させる送信機能と、タイルが受信側タイルとして機能しているときの機能である切り替え制御機能との間には、同じタイルに対する単一の実行サイクルで実行することができること以外に関係はない。
図10は、「マージ」命令の一例である。これに関して、「マージ」命令とは、1つのタイル上で同時に(1実行サイクル中に)実行され得る2つ以上の機能を定める命令を意味する。
図10は、「マージ」送信命令の形態を示し、送信機能は、タイルのレジスタに保持されている状態を修正することができる第2の機能と組み合わされる。1つの機能はそのタイルで受信されたデータに対するメモリポインタを変えることである。もう1つの機能は、着信(incoming)MUXを設定することである。PUTi_MEMptr機能により、タイルによって受信される次のデータがロードされるべきローカルメモリ内のメモリ位置を識別できる。この機能は、専用の「受信」命令によって実行できるが、その機能はデータの受信を可能にするのではなく、メモリポインタを変更することである。事実、タイルでデータを受信するために特定の命令を実行する必要はない。exinインターフェースに到着したデータは、exinインターフェースの制御下で、メモリポインタによって識別される次のメモリ位置にロードされる。図10の命令は、オペコードフィールド100と送信されるべきアイテム数フィールド102とを有する。着信状態修正(state modification)フィールド106内の即値は、フィールド104によって指定された交換構成状態(exchange configuration state)レジスタに書き込まれる。一形態では、状態修正(state modification)フィールド106は、メモリポインタが設定されるべき受信アドレスを計算するための着信デルタを書き込むことができる。別の形態では、交換構成状態は、マルチプレクサ入力を設定する着信MUX値と共に書き込まれる。
この形式の「マージ」命令の場合、送信機能は、命令に暗黙的に含まれる1つ又は複数のレジスタに格納されている値から決定される送信アドレスを使用する。例えば、この送信アドレスをベースレジスタとデルタレジスタから決定することができる。
図11は、交換命令(EXCH)と呼ばれる「倍幅(double width)」命令を示す。この命令は、タイルメモリ内の指示されたアドレスからデータ送信を開始し、着信交換構成状態(データを受信するためのマルチプレクサ及び/又はメモリポインタ)を設定する。EXCH命令は、命令の直後にメモリ位置に配置されたインライン32ビットペイロードが直後に続くという点でユニークである。EXCH命令は、交換命令EXCHを示すオペコードフィールド110を有する。ペイロードは「共発行(coissue)」フラグ119を有する。
EXCH命令は、着信のフォーマットデータ幅(32ビット又は64ビット)を指定する単一ビットを有するフォーマットフィールド112を含む。このデータ幅は、マルチプレクサライン(単独で設定されているかペアで設定されているかにかかわらず)の設定に影響する可能性がある。アイテムフィールド114は、交換命令によって送信させられるアイテムの数を定義する。これらのアイテムは、図9の送信命令のように、即値フィールド116を使用して計算された送信アドレスから送信される。このフィールドの値はベースレジスタの値に加算される。
参照符号118は送信データのワードサイズを定義する制御フィールドである。ペイロードは、図9に関連して上述したように、入力マルチプレクサ用のスイッチ制御を行うスイッチ制御フィールド120を含む。符号122は、図10の命令に関連して上述したように、着信データが記憶されるべきアドレスを計算するための着信デルタを定義するペイロードのフィールドを示す。図11の64ビット幅の交換命令EXCHは、各クロックサイクルで実行することができ、したがって同時の
・特定アドレスからの送信
・着信マルチプレクサの更新
・着信アドレスの更新
を許可する。
したがって、どの交換スケジュールも単一の命令でエンコードすることができる。図8、9及び10の命令は同様の機能を実行するが、32ビット長しかないため、各タイルのローカルメモリ内の交換コードのサイズを最小にするために使用することができる。どの特定のコンテキストでどの命令を使用するかについての決定は、ローカルプログラム72用のコードレットを構築するときにコンパイラ70で行われる。
下記は、上記の命令をサポートするためのキーレジスタとそれらのセマンティクスのリストである。これらは各タイルのレジスタファイルの一部から登録される。
Figure 0006797879
尚、INCOMING_DELTA及びINCOMING_MUXレジスタは、タイルの交換状態の一部を形成する。
本明細書では、機械学習のための知識モデルの分野において特に効果的な新しいコンピュータパラダイムについて説明した。BSPパラダイムの交換段階におけるように時間決定論性を利用して非常に大量のデータを効率的に処理するアーキテクチャが提供される。特定の実施形態を説明したが、本開示のヒアリングが与えられれば、開示された技術の他の用途及び変形が当業者には明らかになるであろう。本開示の範囲は、記載された実施形態によって限定されず、添付の特許請求の範囲によってのみ限定される。

Claims (18)

  1. コンピュータプログラムであって、前記コンピュータプログラムを保持する命令ストレージと、前記コンピュータプログラムを実行するための実行装置と、データを保持するためのデータストレージとを有する処理ユニット上で実行するための一連の命令を含み、さらに、実行されると、
    宛先識別子を持たずに所定の送信時間に送信される、受信側処理ユニット宛のデータパケットを、前記処理ユニットに接続された1組の接続ワイヤで送信させる送信機能と、
    所定の受信時間にデータパケットを受信するために、前記処理ユニットにスイッチング回路を制御させて前記処理ユニットの1組の接続ワイヤをスイッチングファブリックに接続させる切り替え制御機能と、
    を実装する1つ又は複数のコンピュータ実行可能命令を含む、コンピュータプログラム。
  2. 前記1つ又は複数の命令は、切り替え制御命令と、前記データパケットがそこから送信されるべき命令ストレージ内の位置を定義する送信アドレスを定義する送信命令とを含む、請求項1に記載のコンピュータプログラム。
  3. 前記送信命令は、送信されるべきいくつかのデータパケットを定義し、各パケットは異なる所定の送信時間に紐付けられる、請求項2に記載のコンピュータプログラム。
  4. 前記送信命令は送信アドレスを明示的には定義しないが、送信アドレスが保持されるレジスタを暗黙的に定義する、請求項2に記載のコンピュータプログラム。
  5. 暗黙的に定義されたレジスタ内の送信アドレスを更新するためのさらなる命令を含む、請求項4に記載のコンピュータプログラム。
  6. 少なくとも1つのさらなる命令が、前記処理ユニットで受信された前記データパケットを格納するために前記データストレージ内のメモリ位置を識別するメモリポインタを更新するメモリポインタ更新機能を定義する、請求項1〜5のいずれか1項に記載のコンピュータプログラム。
  7. 前記1つ又は複数の命令が、単一の実行サイクルで前記送信機能及び前記切り替え制御機能をマージするマージ命令であり、前記処理ユニットは、データパケットを送信し、異なるデータパケットを別の処理ユニットから受信するためにそのスイッチング回路を制御するように動作するように構成される、請求項1に記載のコンピュータプログラム。
  8. 前記少なくとも1つのさらなる命令が、前記送信機能及び前記メモリポインタ更新機能をマージするマージ命令である、請求項6に記載のコンピュータプログラム。
  9. 前記マージ命令は一般的フォーマットで構成されており、該フォーマットが送信機能を前記メモリポインタ更新機能又は前記切り替え制御機能とマージするかどうかを指定するオペコード部分を有する、請求項又は8に記載のコンピュータプログラム。
  10. 前記1つ又は複数の命令が、単一の実行サイクルで前記送信機能、切り替え制御機能、及びメモリポインタ更新機能をマージする単一命令である、請求項6に記載のコンピュータプログラム。
  11. 各1つ又は複数の命令が、実行ユニットのフェッチステージのビット幅と一致する第1のビット幅を有する、請求項1〜10のいずれか1項に記載のコンピュータプログラム。
  12. 各1つ又は複数の命令が、実行ユニットのフェッチステージのビット幅と一致する第1のビット幅を有し、
    前記送信機能、切り替え制御機能及びメモリポインタ更新機能をマージする前記命令は、前記実行ユニットの前記フェッチステージの前記ビット幅の2倍である第2のビット幅を有する、請求項10に記載のコンピュータプログラム。
  13. 各1つ又は複数の命令は、実行ユニットのフェッチステージのビット幅と一致する第1のビット幅を有し
    前記第1のビット幅の命令は、前記第1のビット幅のオペランドを識別し、前記オペランドは前記切り替え制御機能とメモリポインタ更新機能とを実装する、請求項10に記載のコンピュータプログラム。
  14. 前記処理ユニットの計算段階が完了したときに指示を生成する同期命令を含む、請求項1〜13のいずれか1項に記載のコンピュータプログラム。
  15. 送信不可能なコンピュータ可読媒体に記録されている、請求項1〜14のいずれか1項に記載のコンピュータプログラム。
  16. 送信可能な信号の形態である、請求項1〜15のいずれか1項に記載のコンピュータプログラム。
  17. 命令ストレージと、コンピュータプログラムを実行するように構成された実行ユニットと、データを保持するデータストレージとを含む処理ユニットであって、前記命令ストレージが、1つ又は複数のコンピュータ実行可能命令を含むコンピュータプログラムを保持し、前記命令が、前記実行ユニットによって実行されると、
    宛先識別子を持たずに所定の送信時間に送信される、受信側処理ユニット宛のデータパケットを、前記処理ユニットに接続された1組の接続ワイヤで送信させる送信機能と、
    所定の受信時間にデータパケットを受信するために、前記処理ユニットにスイッチング回路を制御させて前記処理ユニットの1組の接続ワイヤをスイッチングファブリックに接続させる切り替え制御機能と、
    を実装する処理ユニット。
  18. 1つ又は複数のダイを統合パッケージに含むコンピュータであって、複数の処理ユニットを含み、各処理ユニットは、コンピュータプログラムを保持する命令ストレージと、前記コンピュータプログラムを実行するように構成された実行装置と、データを保持するデータストレージとを含み、 前記各処理ユニット用の命令記憶装置は、1つ又は複数のコンピュータ実行可能命令を含むコンピュータプログラムを保持し、前記命令は実行されると、
    宛先識別子を持たずに所定の送信時間に送信される、受信側処理ユニット宛のデータパケットを、前記処理ユニットに接続された1組の接続ワイヤで送信させる送信機能と、
    所定の受信時間にデータパケットを受信するために、前記処理ユニットにスイッチング回路を制御させて前記処理ユニットの1組の接続ワイヤをスイッチングファブリックに接続させる切り替え制御機能と、
    を実装する、コンピュータ。
JP2018197183A 2017-10-20 2018-10-19 命令セット Active JP6797879B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1717299.0A GB2569275B (en) 2017-10-20 2017-10-20 Time deterministic exchange
GB1717299.0 2017-10-20

Publications (2)

Publication Number Publication Date
JP2019079525A JP2019079525A (ja) 2019-05-23
JP6797879B2 true JP6797879B2 (ja) 2020-12-09

Family

ID=60481878

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2018197183A Active JP6797879B2 (ja) 2017-10-20 2018-10-19 命令セット

Country Status (8)

Country Link
US (2) US11321272B2 (ja)
EP (1) EP3474152B1 (ja)
JP (1) JP6797879B2 (ja)
KR (1) KR102178190B1 (ja)
CN (1) CN109697082B (ja)
CA (1) CA3021414C (ja)
GB (1) GB2569275B (ja)
TW (1) TWI713913B (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2580165B (en) 2018-12-21 2021-02-24 Graphcore Ltd Data exchange in a computer with predetermined delay
GB201904263D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer
US11704270B2 (en) 2019-03-27 2023-07-18 Graphcore Limited Networked computer with multiple embedded rings
GB201904265D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A partitionable networked computer
GB201904266D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with embedded rings
GB201904267D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with multiple embedded rings
KR20220006122A (ko) 2020-03-26 2022-01-14 그래프코어 리미티드 토로이드 컴퓨터 네트워크에 대한 링 임베딩
GB202010839D0 (en) * 2020-07-14 2020-08-26 Graphcore Ltd Variable allocation
US11070621B1 (en) * 2020-07-21 2021-07-20 Cisco Technology, Inc. Reuse of execution environments while guaranteeing isolation in serverless computing
CN113254376B (zh) * 2021-06-09 2021-12-17 广州朗国电子科技股份有限公司 一种一体机兼容集控指令的处理方法、系统、设备、存储介质

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5434861A (en) 1989-02-02 1995-07-18 Pritty; David Deterministic timed bus access method
US5734826A (en) 1991-03-29 1998-03-31 International Business Machines Corporation Variable cyclic redundancy coding method and apparatus for use in a multistage network
US5408646A (en) * 1991-03-29 1995-04-18 International Business Machines Corp. Multipath torus switching apparatus
KR100304063B1 (ko) 1993-08-04 2001-11-22 썬 마이크로시스템즈, 인코포레이티드 2지점간상호접속통신유틸리티
GB2303274B (en) 1995-07-11 1999-09-08 Fujitsu Ltd Switching apparatus
US6128307A (en) * 1997-12-01 2000-10-03 Advanced Micro Devices, Inc. Programmable data flow processor for performing data transfers
US6876652B1 (en) * 2000-05-20 2005-04-05 Ciena Corporation Network device with a distributed switch fabric timing system
US20040172631A1 (en) 2001-06-20 2004-09-02 Howard James E Concurrent-multitasking processor
US7100021B1 (en) 2001-10-16 2006-08-29 Cisco Technology, Inc. Barrier synchronization mechanism for processors of a systolic array
US9479464B1 (en) * 2002-08-27 2016-10-25 Hewlett Packard Enterprise Development Lp Computer system and network interface with hardware based packet filtering and classification
US7894480B1 (en) * 2002-08-27 2011-02-22 Hewlett-Packard Company Computer system and network interface with hardware based rule checking for embedded firewall
JP2005032018A (ja) 2003-07-04 2005-02-03 Semiconductor Energy Lab Co Ltd 遺伝的アルゴリズムを用いたマイクロプロセッサ
CN1842770A (zh) * 2003-08-28 2006-10-04 美普思科技有限公司 一种在处理器中挂起和释放执行过程中计算线程的整体机制
US7904905B2 (en) 2003-11-14 2011-03-08 Stmicroelectronics, Inc. System and method for efficiently executing single program multiple data (SPMD) programs
JP4204522B2 (ja) * 2004-07-07 2009-01-07 株式会社東芝 マイクロプロセッサ
US7394288B1 (en) * 2004-12-13 2008-07-01 Massachusetts Institute Of Technology Transferring data in a parallel processing environment
US7818725B1 (en) 2005-04-28 2010-10-19 Massachusetts Institute Of Technology Mapping communication in a parallel processing environment
US7577820B1 (en) 2006-04-14 2009-08-18 Tilera Corporation Managing data in a parallel processing environment
US8194690B1 (en) * 2006-05-24 2012-06-05 Tilera Corporation Packet processing in a parallel processing environment
JP5055942B2 (ja) 2006-10-16 2012-10-24 富士通株式会社 計算機クラスタ
US7958333B2 (en) * 2007-05-30 2011-06-07 XMOS Ltd. Processor with memory access stage adapted to fetch an instruction of a thread when no memory access operation is detected
GB2471067B (en) 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
CN101667451B (zh) * 2009-09-11 2012-05-09 西安电子科技大学 高速数据交换接口的数据缓存器及其数据缓存控制方法
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
US20110258421A1 (en) * 2010-04-19 2011-10-20 International Business Machines Corporation Architecture Support for Debugging Multithreaded Code
US8374182B2 (en) * 2010-08-13 2013-02-12 Juniper Networks, Inc. Virtual local area network (VLAN)-based membership for multicast VLAN registration
JP5568048B2 (ja) 2011-04-04 2014-08-06 株式会社日立製作所 並列計算機システム、およびプログラム
WO2012138950A2 (en) * 2011-04-07 2012-10-11 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
JP2013069189A (ja) 2011-09-26 2013-04-18 Hitachi Ltd 並列分散処理方法および並列分散処理システム
CN103186977B (zh) * 2011-12-30 2016-02-03 无锡华润矽科微电子有限公司 微处理器中实现遥控信号发射指令控制的电路结构
US8990497B2 (en) 2012-07-02 2015-03-24 Grayskytech, LLC Efficient memory management for parallel synchronous computing systems
US9116738B2 (en) * 2012-11-13 2015-08-25 International Business Machines Corporation Method and apparatus for efficient execution of concurrent processes on a multithreaded message passing system
US9733847B2 (en) 2014-06-02 2017-08-15 Micron Technology, Inc. Systems and methods for transmitting packets in a scalable memory system protocol
GB2522290B (en) * 2014-07-14 2015-12-09 Imagination Tech Ltd Running a 32-bit operating system on a 64-bit machine
US20160164943A1 (en) 2014-12-05 2016-06-09 Qualcomm Incorporated Transport interface for multimedia and file transport
TWI580199B (zh) 2015-12-18 2017-04-21 瑞昱半導體股份有限公司 接收裝置及其封包處理方法
JP6450330B2 (ja) 2016-02-03 2019-01-09 日本電信電話株式会社 並列計算処理装置および並列計算処理方法
GB201717295D0 (en) * 2017-10-20 2017-12-06 Graphcore Ltd Synchronization in a multi-tile processing array
US10963003B2 (en) * 2017-10-20 2021-03-30 Graphcore Limited Synchronization in a multi-tile processing array

Also Published As

Publication number Publication date
GB2569275B (en) 2020-06-03
US20220253399A1 (en) 2022-08-11
CA3021414A1 (en) 2019-04-20
EP3474152B1 (en) 2024-01-31
GB201717299D0 (en) 2017-12-06
US20190121777A1 (en) 2019-04-25
KR102178190B1 (ko) 2020-11-12
TW201923560A (zh) 2019-06-16
CA3021414C (en) 2021-08-10
US11321272B2 (en) 2022-05-03
GB2569275A (en) 2019-06-19
CN109697082B (zh) 2023-07-14
CN109697082A (zh) 2019-04-30
TWI713913B (zh) 2020-12-21
EP3474152A1 (en) 2019-04-24
JP2019079525A (ja) 2019-05-23
KR20190044572A (ko) 2019-04-30

Similar Documents

Publication Publication Date Title
JP6797878B2 (ja) コンパイル方法
JP6797879B2 (ja) 命令セット
JP6722251B2 (ja) マルチタイル処理アレイにおける同期化
US10963003B2 (en) Synchronization in a multi-tile processing array
US11416440B2 (en) Controlling timing in computer processing
US10817459B2 (en) Direction indicator
US11176066B2 (en) Scheduling messages

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190218

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200130

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200218

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200514

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20201027

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20201118

R150 Certificate of patent or registration of utility model

Ref document number: 6797879

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250