(57)【要約】  ホストと、ホストに対する作業アクセラレータとして動作するためのサブシステムとのインタフェースを取り、事前コンパイルデータ交換同期点にサブシステムが到達したときに、サブシステムへの及びサブシステムからのデータのバッチの転送を可能にするゲートウェイ。ゲートウェイは、サブシステムによって処理されることがホストにより決定されたデータを記憶システムから受信し、各事前コンパイルデータ交換同期点におけるサブシステムへの転送のためのデータの利用可能性を示すクレジットの数を格納し、サブシステムがデータ交換同期点に到達したときにサブシステムから同期要求を受信し、クレジットの数がゼロでないと判断すると、サブシステムに同期確認応答を送信し、受信されたデータをサブシステムに転送するように構成される。
2021529488.tif 000002
【特許請求の範囲】
【請求項１】
ホストと、前記ホストに対する作業アクセラレータとして動作するためのサブシステムとのインタフェースを取り、前記サブシステムの演算段階と交換段階との間のバリアとなる事前コンパイルデータ交換同期点に前記サブシステムが到達したときに、前記サブシステムへの及び前記サブシステムからのデータのバッチの転送を可能にするゲートウェイであって、
前記サブシステムによって処理されることが前記ホストにより決定されたデータを記憶システムから受信し、前記ゲートウェイに関連付けられたメモリに前記データを格納し、
各事前コンパイルデータ交換同期点における前記サブシステムへの転送のためのデータの利用可能性を示すクレジットの数を格納し、
前記サブシステムがデータ交換同期点に到達したときに前記サブシステムから同期要求を受信し、
前記クレジットの数がゼロでないと判断すると、
前記サブシステムに同期確認応答を送信し、
前記サブシステムと、前記ゲートウェイに関連付けられた前記メモリとの間でデータのバッチを転送させるように構成される、
ゲートウェイ。
【請求項２】
前記サブシステムと、前記ゲートウェイに関連付けられた前記メモリとの間での前記データのバッチの転送が実行されると、前記クレジットの数を減少させるように構成される、請求項１に記載のゲートウェイ。
【請求項３】
前記記憶システムと接続されたデータ接続を含み、
前記記憶システムは、ホストシステムのメモリ及びネットワーク接続記憶装置のうちの少なくとも１つである、請求項１又は２に記載のゲートウェイ。
【請求項４】
前記データを前記サブシステムに書き込むことにより、前記データのバッチを前記サブシステムに転送するように構成されたデータムーバエンジンを含む、請求項３に記載のゲートウェイ。
【請求項５】
（ｉ）前記サブシステムからの読み取り要求に応答し、前記ゲートウェイに関連付けられた前記メモリから前記サブシステムに前記データを転送する動作、及び
（ｉｉ）前記サブシステムから書き込み要求を受信し、前記サブシステムから前記メモリに前記データを転送する動作、
のうちの少なくとも１つを実行するように構成される、請求項１又は２に記載のゲートウェイ。
【請求項６】
前記サブシステムに接続され、前記読み取り要求を前記ゲートウェイに伝えるように構成された周辺コンポーネント相互接続を含む、請求項５に記載のゲートウェイ。
【請求項７】
前記ゲートウェイに関連付けられた前記メモリにおいてデータが前記サブシステムへの転送のために利用可能になったときに、前記クレジットの数を増加させるように構成されたメモリ管理エンジンを含む、請求項１〜６のいずれか一項に記載のゲートウェイ。
【請求項８】
前記データ接続は、前記記憶システムと接続され、
前記記憶システムからの前記データの受信は、前記ホストから、前記ゲートウェイに関連付けられた前記メモリへの前記データのＲＤＭＡ書き込みを受信することを含む、請求項３に記載のゲートウェイ。
【請求項９】
前記ホストから受信されたコマンドに応答して前記クレジットの数が増加される、請求項７又は８に記載のゲートウェイ。
【請求項１０】
データ接続は、ネットワーク接続記憶装置と接続するように構成され、
前記クレジットの数の増加は、前記記憶システムから前記ゲートウェイに関連付けられた前記メモリへの前記データの受信により発生する、請求項３、７又は８のいずれか一項に記載のゲートウェイ。
【請求項１１】
前記データ交換同期点において前記サブシステムにバッチで転送されるデータの量を識別する作業記述子を格納するように構成され、
前記クレジットの数の増加は、前記作業記述子によって識別された前記データの量がサブシステムへの転送のために利用可能になったときにおける単一のクレジットの前記クレジットの数への追加を含む、請求項１〜１０のいずれか一項に記載のゲートウェイ。
【請求項１２】
前記データ交換同期点において前記サブシステムから前記ゲートウェイにバッチで転送されるデータの量を識別する作業記述子を格納するように構成され、
前記サブシステムから前記ゲートウェイへの前記データのバッチの転送が実行されたときに、前記クレジットの数を減少させるように構成される、請求項１〜１１のいずれか一項に記載のゲートウェイ。
【請求項１３】
バッチにおける前記データの量は、前記サブシステムにより、次の演算段階のために前記交換段階において交換されることが予想されるデータの量に対応する、請求項１１に記載のゲートウェイ。
【請求項１４】
前記サブシステムに転送するための次のデータのバッチを識別するために、前記ゲートウェイに格納された命令のセットにアクセスし、前記同期確認応答の送信後、前記サブシステムへの転送のために、前記メモリからゲートウェイ転送メモリに前記次のデータのバッチを移動させるように構成される先読みエンジンを含む、請求項１〜１３のいずれか一項に記載のゲートウェイ。
【請求項１５】
前記サブシステムから結果データを受信し、
前記ゲートウェイに関連付けられた前記メモリに前記結果データを格納するように構成される、請求項１〜１４のいずれか一項に記載のゲートウェイ。
【請求項１６】
前記ゲートウェイに関連付けられた前記メモリから前記ホストに前記結果データを転送し、
前記ゲートウェイに関連付けられた前記メモリから前記ホストに前記データを転送したときに、前記ホストにおける利用可能な空きメモリを示すクレジットの第２の数を減少させるように構成される、請求項１５に記載のゲートウェイ。
【請求項１７】
ホストと、前記ホストに対する作業アクセラレータとして動作するためのサブシステムとのインタフェースを、前記サブシステムの演算段階と交換段階との間のバリアとなる事前コンパイルデータ交換同期点に前記サブシステムが到達したときに、前記サブシステムへの及び前記サブシステムからのデータのバッチの転送を可能にするゲートウェイを使用して取る方法であって、
前記サブシステムによって処理されることが前記ホストにより決定されたデータを記憶システムから受信し、前記ゲートウェイに関連付けられたメモリに前記データを格納することと、
各事前コンパイルデータ交換同期点における前記サブシステムへの転送のためのデータの利用可能性を示すクレジットの数を格納することと、
前記サブシステムがデータ交換同期点に到達したときに前記サブシステムから同期要求を受信することと、
前記クレジットの数がゼロでないと判断すると、
前記サブシステムに同期確認応答を送信することと、
前記サブシステムと、前記ゲートウェイに関連付けられた前記メモリとの間でデータのバッチを転送させることと、を含む、
方法。
【請求項１８】
請求項１７に記載の方法をゲートウェイに実行させる、一時的又は非一時的媒体上に格納されたコンピュータ可読命令を含むコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、ホストと、作業アクセラレータとして動作するためのサブシステムとのインタフェースを取るためにコンピュータシステムで使用するためのゲートウェイに関し、特に、サブシステムへのデータの転送を制御するためのクレジット制御メカニズムの使用に関する。
【背景技術】
【０００２】
複雑な又は高ボリュームのアプリケーションに対するデータ処理に関連して、作業アクセラレータは、一定のデータの処理がホストシステムからオフロードされるサブシステムであり得る。そのような作業アクセラレータは、特定のタイプの処理を実行するための専用ハードウェアを有し得る。
【０００３】
例として、そのような専用アクセラレータサブシステムを役立てることができるコンピューティングの分野の１つは、機械知能において見いだされる。機械知能分野の当業者によく知られるように、機械知能アルゴリズムは、複数の相互接続ノードのグラフによって表すことができる「知識モデル」への反復更新の実行に基づく。各ノードの実装は、データの処理を伴い、グラフの相互接続は、ノード間で交換されるデータに対応する。典型的には、各ノードの処理の少なくともいくつかは、グラフの他のノードのいくつか又はすべてから独立して行うことができ、従って、グラフが大きければ、マルチスレッディングが実行される機会が大きくなる。従って、機械知能アプリケーション専用の作業アクセラレータは、大規模なマルチスレッディングを含み得る。並列処理の一形態は、同じチップ（すなわち同じダイ）上の複数のタイルの配列を含むプロセッサによって達成することができ、各タイルは、それ自体の別個のそれぞれの処理ユニット及びメモリ（プログラムメモリ及びデータメモリを含む）を含む。従って、プログラムコードの別個の部分を異なるタイル上で並列動作させることができる。タイルは、オンチップ相互接続を介して共に接続され、それによりタイル間でのデータの交換が可能になる。そのようなアクセラレータは、提供されるデータセットの並列処理を実行するために、ホストシステムに対するサブシステムとして機能することができる。
【０００４】
一般に、異なるタイル上で動作しているプログラムの部分間に依存性が存在し得る。従って、依存するデータの前に動作している１つのタイル上のコードの断片が別のタイル上のコードの別の断片によって利用可能になることを防ぐための技術が必要とされる。これを達成するための多くの可能なスキームが存在し、それらのスキームの１つは、本明細書では例として「ＢＳＰ（ｂｕｌｋ  ｓｙｎｃｈｒｏｎｏｕｓ  ｐａｒａｌｌｅｌ、バルク同期並列）」として説明されている。ＢＳＰによれば、各タイルは、演算段階と交換段階とを交互サイクルで実行する。演算段階中、各タイルは、タイル上で局所的に１つ又は複数の演算タスクを実行するが、他のいかなるタイルともその演算の結果を通信しない。交換段階では、各タイルは、グループ内の１つ若しくは複数の他のタイルに、及び／又はグループ内の１つ若しくは複数の他のタイルから、先行する演算段階からの演算の１つ又は複数の結果を交換することが認められているが、次の演算段階に進むことはない。さらに、ＢＳＰ原理によれば、バリア同期は、演算段階から交換段階に移行するか若しくは交換段階から演算段階に移行するか又はその両方の接合点に設けられる。すなわち、（ａ）グループ内のいずれかのタイルが次の交換段階に進むことを認める前に、すべてのタイルがそれらのそれぞれの演算段階を完了する必要があるか、（ｂ）グループ内のいずれかのタイルが次の演算段階に進むことを認める前に、グループ内のすべてのタイルがそれらのそれぞれの交換段階を完了する必要があるか、又は（ｃ）その両方のいずれかである。いくつかのシナリオでは、グループ内の他のタイルとの通信を伴わない限り、演算を実行しているタイルは、他のシステムリソース（ネットワークカード又は記憶ディスクなど）と通信することができる。
【０００５】
交換段階中、データ交換は、アクセラレータ内部で（すなわちタイル間で）行われるのみならず、いくつかの状況ではアクセラレータと外部記憶装置（例えば、ホストシステム）との間で行う必要もあり得る。サブシステムが作業アクセラレータとして動作する場合、そのサブシステムは、（例えば、ホストシステムから）提供されるデータセットを処理するように構成される。データセットは、有利には、バリア同期を表し得る適切な事前コンパイルデータ交換同期点においてアクセラレータへの提供が可能となるように回収されるべきである。
【０００６】
サブシステムを（直接又は間接的に）共に接続することによってサブシステムを拡大する際に、システムの異なる要素が互いに先に動作する可能性があるという問題が起こり得る。これにより、データを提供するための装置がアクセラレータより遅れた場合、システムのアクセラレータによって必要とされるデータが利用可能でないという事態が生じ得る。
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本発明は、外部記憶装置からアクセラレータにデータを提供し作業アクセラレータとして動作するサブシステムを拡大するためにそれらを相互接続するために使用可能なゲートウェイの概念を使用している。アクセラレータは、交換段階においてゲートウェイからデータを受信し、それに続く演算段階においてデータを演算する。ゲートウェイのいくつかの形態では、ゲートウェイ自体がデータのアクティブプロセッサであり、そのデータフローを自律的に管理する。ゲートウェイは、外部記憶装置と１つ又は複数のアクセラレータとの間の仲介装置として動作する。ゲートウェイは、外部記憶装置からアクセラレータに伝達するためにデータを一時的に格納するためのローカルメモリを有する。これにより、近々行われる演算段階においてアクセラレータが処理する必要があるデータの提供において、ゲートウェイがアクセラレータより遅れないことをどのように保証するかという課題が提起される。
【課題を解決するための手段】
【０００８】
第１の態様によれば、ホストと、ホストに対する作業アクセラレータとして動作するためのサブシステムとのインタフェースを取り、サブシステムの演算段階と交換段階との間のバリアとなる事前コンパイルデータ交換同期点にサブシステムが到達したときに、サブシステムへの及びサブシステムからのデータのバッチの転送を可能にするゲートウェイが提供される。
ゲートウェイは、サブシステムによって処理されることがホストにより決定されたデータを記憶システムから受信し、ゲートウェイに関連付けられたメモリに前記データを格納し、各事前コンパイルデータ交換同期点におけるサブシステムへの転送のためのデータの利用可能性を示すクレジットの数を格納し、サブシステムがデータ交換同期点に到達するときにサブシステムから同期要求を受信し、クレジットの数がゼロでないと判断すると、サブシステムに同期確認応答を送信し、サブシステムと、ゲートウェイに関連付けられたメモリとの間でデータのバッチを転送させるように構成される。
【０００９】
いくつかの実施形態では、ゲートウェイは、サブシステムと、ゲートウェイに関連付けられたメモリとの間でのデータのバッチの転送が実行されると、クレジットの数を減少させるように構成される。クレジットは、通過したバリア毎にデクリメントされてもよい。通過したバリアは、ゲートウェイからアクセラレータへのデータ転送（例えば、データムーバ命令に応答して）又はアクセラレータからゲートウェイへのデータ転送（例えば、ＰＣＩｅインタフェースであり得るインタフェースによる書き込みを介して）であり得る。
【００１０】
いくつかの実施形態では、ゲートウェイは、記憶システムと接続するように構成されたデータ接続を含む。記憶システムは、ホストシステムのメモリ及びネットワーク接続記憶装置の少なくとも１つである。
【００１１】
いくつかの実施形態では、ゲートウェイは、データをサブシステムに書き込むことにより、データのバッチをサブシステムに転送するように構成されたデータムーバエンジンを含む。
【００１２】
いくつかの実施形態では、ゲートウェイは、以下のうちの少なくとも１つを実行するように構成される。
（ｉ）サブシステムからの読み取り要求に応答し、ゲートウェイに関連付けられたメモリからサブシステムにデータを転送する動作、及び
（ｉｉ）サブシステムから書き込み要求を受信し、前記サブシステムからメモリにデータを転送する動作。
【００１３】
いくつかの実施形態では、ゲートウェイは、サブシステムに接続され、読み取り要求をゲートウェイに伝えるように構成された周辺コンポーネント相互接続を含む。
【００１４】
いくつかの実施形態では、ゲートウェイは、ゲートウェイに関連付けられたメモリにおいてデータが利用可能になったときに、クレジットの数を増加させるように構成されたメモリ管理エンジンを含む。
【００１５】
いくつかの実施形態では、データ接続は、記憶システムと接続され、記憶システムからのデータの受信は、ホストから、ゲートウェイに関連付けられたメモリへのデータのＲＤＭＡ書き込みを受信することを含む。
【００１６】
いくつかの実施形態では、ホストから受信されたコマンドに応答してクレジットの数が増加される。
【００１７】
いくつかの実施形態では、データ接続は、ネットワーク接続記憶装置と接続するように構成され、
クレジットの数の増加は、記憶システムからゲートウェイに関連付けられたメモリへのデータの受信により発生する。
【００１８】
いくつかの実施形態では、ゲートウェイは、データ交換同期点においてサブシステムにバッチで転送されるデータの量を識別する作業記述子を格納するように構成され、
クレジットの数の増加は、作業記述子によって識別されたデータの量がサブシステムへの転送のために利用可能になったときにおける、単一のクレジットのクレジットの数への追加を含む。
【００１９】
いくつかの実施形態では、ゲートウェイは、データ交換同期点においてサブシステムからゲートウェイにバッチで転送されるデータの量を識別する作業記述子を格納するように構成され、
ゲートウェイは、サブシステムからゲートウェイへのデータのバッチの転送がされたときに、クレジットの数を減少させるように構成される。
【００２０】
いくつかの実施形態では、バッチにおけるデータの量は、サブシステムにより、次の演算段階のために交換段階において交換されることが予想されるデータの量に対応する。
【００２１】
いくつかの実施形態では、ゲートウェイは、サブシステムに転送するための次のデータのバッチを識別するために、ゲートウェイに格納された命令のセットにアクセスし、同期確認応答の送信後、サブシステムへの転送のために、メモリからゲートウェイ転送メモリに次のデータのバッチを移動させるように構成される先読みエンジンを含む。
【００２２】
いくつかの実施形態では、ゲートウェイは、サブシステムから結果データを受信し、ゲートウェイに関連付けられたメモリに前記結果データを格納するように構成される。
【００２３】
いくつかの実施形態では、ゲートウェイは、ゲートウェイに関連付けられたメモリからホストに結果データを転送し、ゲートウェイに関連付けられたメモリからホストにデータを転送したときに、ホストにおける利用可能な空きメモリを示すクレジットの第２の数を減少させるように構成される。
【００２４】
第２の態様によれば、ホストと、ホストに対する作業アクセラレータとして動作するためのサブシステムとのインタフェースを、サブシステムの演算段階と交換段階との間のバリアとなる事前コンパイルデータ交換同期点にサブシステムが到達したときに、サブシステムへの及びサブシステムからのデータのバッチの転送を可能にするゲートウェイを使用して取る方法が提供される。
方法は、サブシステムによって処理されることがホストにより決定されたデータを記憶システムから受信し、ゲートウェイに関連付けられたメモリに前記データを格納することと、各事前コンパイルデータ交換同期点におけるサブシステムへの転送のためのデータの利用可能性を示すクレジットの数を格納することと、サブシステムがデータ交換同期点に到達したときにサブシステムから同期要求を受信することと、クレジットの数がゼロでないと判断すると、サブシステムに同期確認応答を送信することと、サブシステムと、ゲートウェイに関連付けられたメモリとの間でデータのバッチを転送させることとを含む。
【００２５】
第３の態様によれば、第２の態様の方法をゲートウェイに実行させる、一時的又は非一時的媒体上に格納されたコンピュータ可読命令を含むコンピュータプログラムが提供される。
【００２６】
本発明をよりよく理解するため及び本発明をどのように実行に移すことができるかを示すため、ここで、例示として添付の図を参照する。
【図面の簡単な説明】
【００２７】
【図１】複数のタイルを含むプロセッサチップの概略ブロック図である。
【図２】バルク同期並列（ＢＳＰ）演算モデルの概略図である。
【図３】ＢＳＰモデルの別の概略図である。
【図４】アクセラレータとゲートウェイとの間の同期要求／確認応答の交換の概略図である。
【図５】複数のプロセッサチップのシステムの別の概略図である。
【図６】ホストとの同期を伴うプログラムフローを概略的に示す。
【図７】アクセラレータ、ゲートウェイ及びホストを含むシステムを概略的に示す。
【図８】ゲートウェイを通した異なるデータ経路の概略図である。
【図９】ゲートウェイを使用するアクセラレータ及びホストの集合体を概略的に示す。
【図１０】ゲートウェイを通したデータフローの概略図である。
【図１１】アクセラレータ、ゲートウェイ及びホストを含むシステムの概略図である。
【図１２】複数のアクセラレータ及びゲートウェイを含むマシンの概略図である。
【図１３】複数のマシンを含むポッドの概略図である。
【図１４】データの配備及び演算を行う方法の例を示す。
【図１５】３つのゲートウェイ間の同期要求及び確認応答の交換の概略図である。
【発明を実施するための形態】
【００２８】
本出願の実施形態は、ホストと、ホストに対する作業アクセラレータとして動作するためのサブシステムとのインタフェースを取るためのゲートウェイに関する。サブシステムは、説明全体を通して「アクセラレータ」と呼ぶことができる。ゲートウェイは、サブシステムによって得られる事前コンパイルデータ交換同期点において、アクセラレータへのデータのバッチの転送を可能にする。これらの事前コンパイルデータ交換同期点の各々は、サブシステムの演算段階と交換段階の間のバリアとなる。
【００２９】
ゲートウェイは、外部記憶装置からデータを受信し、同期点においてデータがアクセラレータに伝達される前にゲートウェイメモリにそのデータを一時的に格納するように構成される。このデータは、メモリ管理エンジンによって行われる処理により、外部記憶装置からゲートウェイメモリに転送される。ゲートウェイは、メモリ管理エンジンによって行われる処理の完了に応答してインクリメントされたクレジットのセットを格納する。従って、クレジットのセットは、アクセラレータに転送する必要がある任意のデータの、ゲートウェイメモリにおける利用可能性を示す。アクセラレータがデータ同期点において同期要求をゲートウェイに送信すると、ゲートウェイは、クレジットの数がゼロでない場合、要求の確認応答のみを行い、同期点において必要な任意のデータをアクセラレータに送信する。従って、必要なデータを外部記憶装置から回収する際にゲートウェイがアクセラレータより遅れた場合、同期確認応答は、アクセラレータにおいて受信されず、アクセラレータは、停止し、従ってアクセラレータが先に起動することが阻止される。
【００３０】
以下の説明は、本出願の様々な実施形態をさらに詳細に説明する。本出願は、ホストシステムに対する作業アクセラレータとして動作するためのサブシステム及び複数のそのようなサブシステムの組合せに関する。サブシステムは、主に繰り返し処理を対象とする大量のデータを必要とするプロセスを動作させているホストによって割り当てられたデータセット（作業）において、既定の処理ステップを実行するためにアクセラレータとして動作する。各サブシステムは、いわゆる知能処理ユニット（ＩＰＵ）又は任意のクラスのアクセラレータ（ＸＰＵ）であり得る。本明細書で説明される技術は、その内容が参照により本明細書に組み込まれる、本発明者らの先行する米国特許出願公開第１５／８８５９２５号明細書で説明されるＩＰＵで使用することができるが、いかなるアクセラレータにも適用することができる。より詳細に説明されるように、いくつかのアクセラレータは、アクセラレータマシン又は設備を形成するために組み合わせることができる。いくつかのアクセラレータ設備は、筐体内で組み合わせることができる。複数の筐体はグループにまとめられてもよいし、ラックに配置されていてもよい。結果として得られるアクセラレータの組合せは、並列処理を実行するための大量の処理能力を有するシステムをもたらし得る。これは、特に、人工知能応用におけるニューラルネットワーク処理の実装に有益である。本明細書で提示される原理は、潜在的に単一のラックを超えて拡大するために使用することもできる。
【００３１】
本出願は、そのようなアクセラレータの有効性を高める上で多くの利点を有する新規のゲートウェイに関する。ゲートウェイは、アクセラレータによる処理のためのデータセットを提供する１つ又は複数のホストシステムからのアクセラレータの分解を可能にする。これは、いくつかの利点を有する。第１に、１つのホストあたりのアクセラレータの数をユーザ設定できるようにすることができ、ホストの物理的容量を超えて増やすことができる。第２に、アクセラレータＩ／Ｏをホストから分離することができ、それによりアクセラレータの数の関数としてＩ／Ｏ容量を拡大することができる。第３に、分解により、複数のホストは、アクセラレータリソースセットを使用することができ、アクセラレータリソースセットは、これらのリソース及び関連ホストのライフサイクル管理をサポートする明確に定義されたＡＰＩを通して、ホストへの要望に応じて、割り当てられ且つグループにまとめられる。
【００３２】
各アクセラレータは、単一チッププロセッサであり得る。図１は、単一チッププロセッサ２（すなわち単一のダイ）を示し、単一チッププロセッサ２は、複数のプロセッサタイル４のアレイ６と、タイル４間を接続するオンチップ相互接続３４とを含む。チップ２は、それ自体の単一チップ集積回路パッケージ上に単独で実装することも、同じＩＣパッケージにおいてパッケージ化された複数のダイの１つとして実装することもできる。また、オンチップ相互接続は、タイル４が互いにデータを交換できるようにするため、本明細書では「交換ファブリック」３４と呼ぶこともできる。各タイル４は、ローカル命令メモリから命令（コード）を実行し、ローカルデータメモリのデータを取り扱うことができる処理ユニットである。タイル４は、バレルスレッド処理ユニット１０及びメモリ１１のそれぞれの例を含み得る。例えば、例示として、チップ２は、数百程度のタイル４又はさらに１０００を超えるタイル４を含み得る。完全を期すため、「アレイ」は、本明細書で言及される場合、必ずしもタイル４の特定の次元数又は物理的なレイアウトを意図するとは限らないことも留意されたい。
【００３３】
各チップ２は、１つ又は複数の外部リンク８も含み、それにより、チップ２は、異なるチップ上の１つ又は複数の他の外部のプロセッサ（例えば、同じチップ２の１つ又は複数の他の例）に接続することができる。これらの外部リンク８は、同じＩＣパッケージ若しくはカード上又は異なるカード上のチップ２の１つ又は複数の他の例に共に接続するためのチップ間リンクとして動作することができる。チップ２の複数の例は、チップ間リンクによってカードに共に接続することができる（後に説明される図１２に示されるように）。また、チップは、チップをゲートウェイに接続するコネクタ９も有し、それについては、後に詳細に説明する。すべてのアクセラレータがゲートウェイコネクタ９を有する必要はないが、少なくともいくつかは、本明細書で説明される目的のためにゲートウェイコネクタ９を有する必要があることに留意されたい。構成の一例では、チップ２は、チップ２によって処理される入力データの形態において、ホストによって割り当てられたゲートウェイから作業を受信する。ホストへの言及は、代わりに、ネットワーク接続記憶装置（ＮＡＳ）などのオフチップ記憶システムへの言及を意図し得ることに留意されたい。ゲートウェイは、ホスト又はＮＡＳからのデータを１つ又は複数のアクセラレータに提供できるようにし、１つ又は複数のアクセラレータは、単一チッププロセッサ２として又は複数の単一チッププロセッサ２として設計され、複数の相互接続カード上に配列される可能性がある。ゲートウェイは、後に詳述されるように、アクセラレータとホストとの間の中継及び分解を可能にする。
【００３４】
相互接続３４は、アレイ６の異なるプロセッサタイル４がチップ２上で互いに通信することを可能にするように構成される。本発明者らの先行する特許出願で説明されるＩＰＵでは、アクセラレータ２上のタイル４間の通信は、時間決定論的に起こる。しかし、他の形態のタイル間交換も可能である。アレイ６の異なるタイル４上で動作するプログラムの部分間に依存性が存在し得る。すなわち、１つのタイル上の処理データは、別のタイルからの結果に依存し得る（例えば、別のタイルが依存する結果を提供することができる）。従って、依存するデータの前に動作している１つのタイル４上のコードの断片が別のタイル４上のコードの別の断片によって利用可能になることを防ぐための技術が必要とされる。
【００３５】
ＡＩ及びデータサイエンスの並列プログラミングモデルは、通常、３段階（演算、バリア及び交換）反復実行モデルに従う。すなわち、それは、アクセラレータ間及び各アクセラレータとホストとの間のデータ整合性を提供するため、アクセラレータへの及びアクセラレータからのデータ転送が、通常、バリア依存であることを示している。典型的に使用されるデータ整合性モデルは、バルク同期並列（ＢＳＰ）、ステイル同期並列（ＳＳＰ）及び非同期である。
【００３６】
ＳＳＰでは、複数のワーカースレッドのうち比較的速いワーカースレッドは、最も遅いワーカースレッドよりクロックサイクル数の分だけ先行して動作することができる。ワーカースレッドは、様々なタイムスタンプを有する共有パラメータに対して行われた更新を見ることができる。例えば、クロックｔのワーカーは、ｔ−Δのタイムスタンプを有するそれらの更新に至るまでのワーカーからのすべての更新を見ることができる。ＢＳＰは、Δ＝０の特別な事例であるため、ワーカーは、互いに先に動作を行うことができない。
【００３７】
非同期データ整合性モデルでは、共有パラメータは、いかなるときでも読み取ること及び／又は書き込むことができる。
【００３８】
本明細書で説明される本発明の実施形態は、ＢＳＰモデルを使用するが、代替として他の同期モデルを利用できることが明らかであろう。
【００３９】
図２及び３を参照すると、ＢＳＰ交換スキームの実装形態が示されており、各タイル４は、演算段階３３と交換段階３２とを交互サイクルで実行し、演算段階３３と交換段階３２とは、タイル間において、バリア同期３０によって一方の側と他方の側が分離されている。図２及び３によって示される例では、バリア同期は、各演算段階３３とそれに続く交換段階３２との間に設けられる。演算段階３３中、各タイル４は、タイル上で局所的に１つ又は複数の演算タスクを実行するが、他のいかなるタイル４ともこれらの演算の結果を通信しない。交換段階３２では、各タイル４は、１つ若しくは複数の他のタイルに、且つ／又は１つ若しくは複数の他のタイルから、先行する演算段階からの演算の１つ又は複数の結果を交換することが認められているが、そのタスクが依存性を有するデータを他のタイル４から受信するまで新しい演算を実行しない。また、先行する演算段階において演算されたもの以外、いかなるデータも他のタイルに送信しない。交換段階において内部の制御関連処理などの他の処理を実行できることは、除外されない。また、演算を実行しているタイル４は、演算段階３３中、同期しているグループ内の他のタイル４との通信を伴わない限り、同期しているタイル４のアレイの外部のゲートウェイと通信できることにも留意されたい。タイルグループの外部の通信は、ＢＳＰメカニズムを任意に利用することができるが、代替として、ＢＳＰを利用せずに、それ自体の他の何らかの同期メカニズムを代わりに使用することができる。
【００４０】
ＢＳＰ原理によれば、バリア同期３０は、演算段階３３から交換段階３２に移行する接合点若しくは交換段階３２から演算段階３３に移行する接合点又はその両方に設けられる。すなわち、（ａ）グループ内のいずれかのタイルが次の交換段階３２に進むことを認める前に、すべてのタイル４がそれぞれの演算段階３３を完了する必要があるか、（ｂ）グループ内のいずれかのタイルが次の演算段階３３に進むことを認める前に、グループ内のすべてのタイル４がそれぞれの交換段階３２を完了する必要があるか、又は（ｃ）これらの両方の条件が実施されるかのいずれかである。３つのすべての変形形態では、段階を交互に行うのは、個々のプロセッサであり、同期を行うのは、アセンブリ全体である。次いで、一続きの交換及び演算段階は、複数の繰り返しにわたって繰り返すことができる。ＢＳＰ用語では、交換段階と演算段階との各繰り返しは、「スーパーステップ」と呼ばれる場合がある（ただし、文献上、必ずしも用語が一貫して使用されるわけではなく、個々の交換段階及び演算段階の各々が個別にスーパーステップと呼ばれる場合がある一方、本明細書で採用される用語のように、交換段階と演算段階とが共にスーパーステップと呼ばれる場合があることに留意されたい）。
【００４１】
また、同じチップ２又は異なるチップ上のタイル４の複数の異なる独立したグループの各々は、互いに非同期的に動作する別個のＢＳＰグループを形成することができ、演算、同期及び交換のＢＳＰサイクルは、所定の各グループ内でのみ課された状態であり、各グループが他のグループから独立して動作を行う（すなわち、マルチタイルアレイ６は、各々が他のグループから独立して非同期的に動作する複数の内部同期するグループを含み得る（後により詳細に論じる））ことは、除外されないことにも留意されたい。いくつかの実施形態では、後により詳細に論じるように、同期と交換との階層的分類がある。
【００４２】
図３は、（ａ）演算段階３３から交換段階３２へのバリア同期（上記を参照されたい）を課す例において、アレイ６のタイルのいくつか又はすべてのグループ４ｉ、４ｉｉ、４ｉｉｉ間で実施されるようなＢＳＰ原理を示す。この構成では、一部のタイル４は、演算３３を開始できるのに対して、他のタイルは、依然として交換している状態であることに留意されたい。
【００４３】
本明細書で開示される実施形態によれば、このタイプのＢＳＰは、バリア同期を実行するための機械語命令に追加の特別な専用の機能（すなわち同期（ｓｙｎｃ）命令）を組み込むことによって容易にすることができる。同期命令は、タイルのメモリに格納されたデータを同期させるためにデータを交換する交換段階を始めるために、タイルのプロセッサ上で実行することができる。
【００４４】
同期命令は、同期モードを定義するオペランドを有する。そのようなモードの１つは、タイル間モード同期チップであり、データ交換のためにチップ上のすべてのタイルが同期バリアに達するようにするものである。各タイルは、事前決定論的時間に基づくコンパイルプロトコルに従って実行されるため、これは、各タイルに対する命令がコンパイルされる際にコンパイラによって管理される。
【００４５】
既に述べたように、単一のアクセラレータと比べて改善された処理能力を有するアクセラレータマシン１６１を生成するために、いくつかのアクセラレータ（例えば、ＩＰＵ）を組み合わせることが可能である。そのようなアクセラレータマシン１６１は、図１２に示されている。アクセラレータマシン１６１は、アレイ状に接続された複数の（この例では４つの）アクセラレータ１６２を含み、各アクセラレータは、リンク８によってその近隣のアクセラレータに接続される。また、マシン１６１は、マシン１６１を１つ又は複数のホスト（図示せず）に接続するように構成された２つのゲートウェイ１６３も含む。各ゲートウェイ１６３は、ゲートウェイリンク９を介して４つのアクセラレータ１６２の２つに接続される。
【００４６】
さらに詳細に説明されるように、ゲートウェイ１６３は、データ交換同期点に続く交換段階において、それらの接続されたアクセラレータ１６２とデータを交換することができる。データ交換同期点は、アクセラレータ上で動作している事前コンパイルされたコードの一部である同期命令の実行の結果としてトリガされる。データ交換同期点が始まった時点で、タイルのプロセッサ上で同期命令を実行することができる。アクセラレータ１６２の１つ又は複数のタイルによる１つ又は複数の同期命令の実行により、１つ又は複数のタイルによって１つ又は複数の同期要求が発行される。これらの同期要求は、アクセラレータ１６２によって集約され、次いで、アクセラレータ１６２は、集約した同期要求をその関連ゲートウェイ１６３に発行する。ゲートウェイは、複数のゲートウェイ及びアクセラレータから同期ゾーンを形成できるように、ゲートウェイとアクセラレータとの間で同期信号を送信するために接続することができる。同期信号の機能の１つは、ＢＳＰモデルの交換段階におけるゲートウェイ１６３と関連アクセラレータ１６２との間のデータ交換を容易にすることであるが、他の非データ関連の用途を有する。各ゲートウェイ１６３は、ローカルメモリを有し、データ交換同期点においてアクセラレータに送信されるデータを得て（ホスト、リモート記憶装置又は別のゲートウェイから）、格納するように構成される。データは、アクセラレータ１６２からの同期要求前にローカルメモリに格納され、その結果、アクセラレータにいつでも転送できる状態にある。ゲートウェイの機能の１つは、アクセラレータがそれを必要とするときに、要求されたデータをアクセラレータに供給することである。データは、ゲートウェイにより、後に論じるような異なるメカニズムによってホスト又はリモート記憶装置から得ることができる。
【００４７】
また、各ゲートウェイ１６３は、他のゲートウェイとデータを交換するようにも構成される。ゲートウェイ１６３は、アクセラレータ１６２に送信されるデータのコピーを他のゲートウェイに分配することができる。次いで、これらの他のゲートウェイ１６２は、接続されているアクセラレータ１６２にデータを分配することができる。従って、データのコピーを受信する他のゲートウェイ１６２は、記憶装置（例えば、ホスト又はリモート記憶装置）からデータを独立して得る必要がなく、それにより複数のゲートウェイによる記憶装置からの冗長データの回収を防ぐことができる。これについては、後により詳細に説明する。その上、後により詳細に説明されるように、ゲートウェイ１６３は、複数の異なるタイプのデータ転送を可能にするように構成される。ゲートウェイ１６３は、他のゲートウェイとデータを交換するように構成される。ゲートウェイ１６３は、結合されている１つ又は複数のアクセラレータ１６２とデータを交換するように構成される。ゲートウェイ１６３は、１つ又は複数のホスト（図示せず）とデータを交換するように構成される。
【００４８】
図４を参照すると、アクセラレータ５１の１つ又は複数のタイル５３が同期要求をゲートウェイ５２に発行する例において、同期要求／確認応答メカニズムがどのように機能するかの例が示されている。
【００４９】
ゲートウェイ５２は、近々行われる同期に対する同期ゾーンを表すレジスタ５９を含む。レジスタ５９は、ゲートウェイ５２の共有レジスタブロック（ＳＲＢ）において実装することができる。バリア同期前に、アクセラレータ５１のタイル５３は、近々行われる同期に対してアクセラレータ５１のタイル５３が属する同期ゾーンの通知３２を送信するように構成される。アクセラレータ５１のタイル５３の多くは同じ同期ゾーンに属することができるため、アクセラレータ５１は、通知３２を書き込むために特定の同期ゾーンに属するタイルを指名する。同期ゾーンは、いずれのタイルが同期に共に関与するかを示す。いくつかの例では、同期ゾーンは、同じチップ上のタイル５３のみを含み得、その例では、ゲートウェイは関与しないことが理解できる。他の例では、同期ゾーンは、異なるチップ上のタイル５３を含む外部の同期であり得る。いくつかの例では、同期ゾーンは、異なるアクセラレータ上のタイルを含む。いくつかの例では、同期ゾーンは、ゲートウェイ、ホスト及び／又はリモート記憶装置を含む。
【００５０】
本明細書では、同期ゾーンの通知はアクセラレータ５１からゲートウェイ５２に送信されるものとして提示されているが、他のいくつかの実施形態では、通知は、ゲートウェイ５２によって決定され、レジスタ５９に格納されるものであり得る。ゲートウェイ５２は、その事前コンパイルされたコードに基づいて、この決定を自律的に行うことができる。他のいくつかの実施形態では、通知は、アクセラレータ５１から受信される同期要求５６の一部として提供することも、同期要求がアサート（ａｓｓｅｒｔ）される前に提供される帯域外（例えば、ＰＣＩｅ書き込み）同期情報の一部として提供することもできる。
【００５１】
データ交換同期点は、アクセラレータ５１のタイル５３上で動作しているコードの事前コンパイルされた同期命令の結果としてトリガされる。データ交換同期点が始まった時点で、１つ又は複数のタイル５３のプロセッサ上で１つ又は複数の同期命令を実行することができる。同期命令を実行する各タイルは、同期要求を送信し、同期要求は、アクセラレータ５１の同期論理５４で受信される。同期論理５４は、これらの同期要求５５を集約し、集約した同期要求５６をゲートウェイ５２に送信する。
【００５２】
ゲートウェイ５２は、アクセラレータ５１から同期要求５６を受信し、同期バリアの通過を認めることができる。これは、同期要求５６に応答して、同期確認応答５７をアクセラレータ５１に送信することを伴う。同期バリアの通過を認めることにより、アクセラレータ５１のタイル５３は、互いにデータを交換できるようになり、いくつかの状況では、ゲートウェイ５２自体とデータを交換できるようになる。ゲートウェイ５２とのデータ交換は、ホスト（図示せず）からゲートウェイ５２において受信されたデータをアクセラレータ５１の１つ又は複数のタイル５３に転送することを伴い得る。ゲートウェイ５２とのデータ交換は、別のゲートウェイ（図示せず）からゲートウェイ５２において受信されたデータをアクセラレータの１つ又は複数のタイル５３に転送することを伴い得る。他のゲートウェイから受信されたデータは、別のアクセラレータからのものであり得る。これは、ゲートウェイを介してアクセラレータ間のデータ交換を達成することができるメカニズムの１つである。他のゲートウェイから受信されたデータは、別のホストからのものであり得る。別のメカニズムは、ゲートウェイの設備を通して、ゲートウェイ間のファブリックポートを介して、ゲートウェイに接続されたアクセラレータが別のゲートウェイに接続された別のアクセラレータに直接書き込めるようにするものである。これを達成するため、アクセラレータ／ゲートウェイ（すなわち筐体／グループ／ラックなど）の各分類のすべての記憶場所は、単一のグローバルアドレス空間の一部を形成する。
【００５３】
ゲートウェイ５２は、（ｉ）ゲートウェイ−アクセラレータ、（ｉｉ）ゲートウェイ−外部及び（ｉｉｉ）ゲートウェイ−ゲートウェイの３つのデータ交換境界を有する。これらの境界は、異なる要件を有するので、異なるプロトコルによって管理される。しかし、それらの境界は、アクセラレータ５１が要求する（すなわち同期している）際にアクセラレータ５１データがゲートウェイメモリにおいて利用可能であるが、ゲートウェイ５２に対するデータを格納するゲートウェイメモリがオーバーフローしないように調整しなければならない。
【００５４】
既に述べたように、同期前に、アクセラレータのタイル５３のグループに対する同期ゾーンに関する通知は、レジスタ５９に格納される。いくつかの実施形態では、このレジスタ５９への書き込み５０は、ゲートウェイ５２に同期要求５６を発行する前に行われる。タイルは、前の交換段階の終了時又は対応する同期が行われる交換段階に先行する演算ステップの開始時に通知を送信することができる。各同期バリアに対して、レジスタ５９への別個の書き込み５０が行われる。同期要求５６を受信次第、ゲートウェイ５２は、同期要求に対応する通知をレジスタ５９から消費するように構成される。ゲートウェイ５２は、同期要求５６に対応する通知がレジスタ５９に書き込まれている場合にのみ、同期要求に対する確認応答５７をアクセラレータ５１に送信するように構成される。換言すれば、ゲートウェイ５２は、最後のバリア以降に値がリフレッシュされている場合にのみ、同期要求に対する確認応答５７をアクセラレータ５１に送信する。
【００５５】
例えば、演算段階が終了するまでアクセラレータの１つ又は複数のタイル５３がそれらの同期ゾーンを決定できないことを理由に、レジスタ５９への同期ゾーンの通知の書き込みの遅延が存在する場合、同期要求は、同期ゾーンの対応する表示でレジスタが更新される前に受信することができる。この例では、ゲートウェイ５２は、レジスタが同期ゾーンの対応する表示を受信するまで確認応答５７の送信を待つ。従って、システムは、レジスタ５９のリフレッシュを待つ間、小さい待機を被ることになり得る。
【００５６】
ゲートウェイ５２は、レジスタ５９に格納された同期ゾーンの通知を使用して、同期確認応答５７を生成し、正しいタイル、チップ及び／又はアクセラレータに送信する。例えば、同期ゾーンの表示が、同期ゾーンがアクセラレータ５１を含み、加えてさらなるアクセラレータ（図示せず）を含む場合、ゲートウェイ５２は、同期要求の受信に応答して同期確認応答をアクセラレータ５１及びさらなるアクセラレータに送信する。ゲートウェイ５２は、レジスタ５９から同期ゾーンの通知を読み取ることができ、この通知に応じて相応に同期確認応答又は要求５７を伝播することができる。
【００５７】
レジスタ５９に格納された同期ゾーンの通知は、ゲートウェイ５２自体からのデータ転送が同期の一部として必要であるか否かの通知を含む。この通知は、レジスタ５９に格納された同期ゾーンの通知から暗黙的に得ることができる。データ転送が必要であるとゲートウェイ５２が決定した場合、ゲートウェイ５２は、同期バリアの通過を認めるか否かを決定するためにクレジット（ｃｒｅｄｉｔ）制御メカニズムを適用する。データ転送が必要ないとゲートウェイ５２が決定した場合、ゲートウェイ５２は、クレジット制御メカニズムを適用することなく、同期確認応答５７をアクセラレータ５１に送信する。クレジット制御メカニズムに対して、ゲートウェイ５２の記憶装置（後に説明するローカル同期バリアモジュール（ＬＳＢＭ））において利用可能な第１のクレジットセット（ＥＳＰ（交換同期点）クレジットと呼ばれる）の１つ又は複数が存在する場合、ゲートウェイ５２は、同期要求５６の受信に応答して同期バリアの通過を認めるように構成され、それは、アクセラレータ５１に同期確認応答５７を送信し、ゲートウェイメモリ（図４には図示せず）からアクセラレータ５１に同期のデータを転送することによって行われる。利用可能なＥＳＰクレジットがゼロである場合、ゲートウェイ５２は、同期要求５６に対する確認応答５７を行わず、ゲートウェイメモリ（図４には図示せず）からアクセラレータ５１にデータを転送しないので同期が停止する。このクレジット制御メカニズム（以下でより詳細に説明する）は、ＢＳＰプロトコルでゲートウェイ５２とアクセラレータ５１とが互いに同期し続けられるようにする。
【００５８】
いくつかの実施形態では、ゲートウェイ５２及びアクセラレータ５１は、各々が事前コンパイルされたコードを含み、それにより、ゲートウェイ５２は、正しい時点でアクセラレータ５１に必要なデータを提供することができる。
【００５９】
アクセラレータ５１の同期ロジック５４が同期要求５６を送信した後、同期ロジック５４は、ゲートウェイ５２からの同期確認応答（ｓｙｎｃ＿ａｃｋ）５７を待つ。アクセラレータ５１の同期ロジック５４がゲートウェイ５２から同期確認応答５７を受信すると、同期ロジック５４は、同期要求５５を発行したタイル５３に同期確認応答信号５７（ｓｙｎｃ＿ａｃｋ）を返信する。同期を要求したすべてのタイル５３は、外部の同期ロジック５４から同期確認応答５８（ｓｙｎｃ＿ａｃｋ）が返信されるまで自動的に一時停止される。同期確認応答５８に応答して、タイル５３は、スーパーバイザに対する命令発行を再開する（すなわち、タイル５３は、演算段階に再び入る）。
【００６０】
実際のデータ（コンテンツ）は、同期要求５５／５６及び同期確認応答５７／５８に対する異なるチャネルにより、アクセラレータタイル５３とゲートウェイ５２との間で送信することができる。さらに、当業者は、本明細書で開示されるその機能の仕様を考慮して、開示される同期及び集約機能を実装するために異なるタイプの回路を構築できることを理解するであろう。例えば、同期ロジック５４は、同期要求５６及び同期確認応答５７／５８を送信するための専用配線を使用することができる。代わりに、同期ロジック５４は、専用配線の代替として、相互接続上で運ばれるパケットを使用することができる。例えば、同期要求５５／５６及び／又は同期確認応答５７／５８の各々は、１つ又は複数のパケットの形態で送信することができる。例えば、同期要求５５／５６及び／又は同期確認応答５７／５８の各々は、１つ又は複数のパケットの形態で送信することができる。
【００６１】
図５を参照すると、同期ゾーンの概念がより詳細に示されている。図５に示されるように、実施形態では、ゲートウェイ５２のレジスタ５９に書き込まれる同期ゾーンの通知は、複数の異なる可能な外部の同期ゾーン（例えば、ゾーン１又はゾーン２）の１つを指定するために使用することができる。実施形態では、これらの同期ゾーンは、異なる階層レベルに対応する。すなわち、より高い階層レベル９２（例えば、ゾーン２）の各々は、少なくとも１つのより低い階層レベルの２つ以上のゾーン９１Ａ、９１Ｂを包含する。例として図９を使用すると、ゲートウェイの一番左の２つのゲートウェイ及びアクセラレータは、２つのゲートウェイの１つがマスタである同期ゾーン０を有し得る。同様に、一番右の２つのゲートウェイ及びアクセラレータは、２つのゲートウェイの１つがマスタである同期ゾーン０を有し得る。次いで、さらに、図全体である同期ゾーン１が存在し得る（次いで、任意のゲートウェイを同期マスタとして指名することができる）。次いで、プログラムにより、同期のいくつかの階層が利用できるようになる。
１．内部アクセラレータのみの同期  −  同じアクセラレータ上のタイルを同期することができる
２．ＩＰＵ＋ゲートウェイのみの（データ）同期  −  単一のアクセラレータがゲートウェイに同期を要求する（例えば、データの交換を調整するため）
３．一番左の同期ゾーン０（各ゲートウェイにおけるクレジットあり／なし）
４．一番右の同期ゾーン０（各ゲートウェイにおけるクレジットあり／なし）
５．同期ゾーン１（各ゲートウェイにおけるクレジットあり／なし）
【００６２】
通知は、同期に対するゲートウェイの関与（すなわちデータがゲートウェイ５２とアクセラレータ５１との間で転送される予定であること）を示すことができる。通知は、ゲートウェイ５２以外のさらなるゲートウェイの関与を示すことができ、アクセラレータ５１は、ゲートウェイ５２を介してさらなるゲートウェイと通信することができる。従って、対応する同期命令が実行されると、この同期命令を実行するタイル５３は、ゲートウェイ５２とのデータ転送を介してホスト６３と同期する。さらなるゲートウェイの関与が示される例では、アクセラレータ５１からの同期要求を、上流のさらなるゲートウェイに渡すことができる（ゲートウェイ５２において受信された他の同期要求と集約された後）。ゲートウェイ５２は、さらなるゲートウェイからの同期確認応答を待ってから、同期確認応答をアクセラレータに提供する。このシナリオについては、後に図８に関してより詳細に説明する。
【００６３】
外部の同期ゾーンを示すレジスタ５９内の通知に応答して、ゲートウェイ５２は、同期確認応答５７を外部の同期ゾーンのアクセラレータに送信する。アクセラレータの専用ハードウェアである同期ロジック５４は、ゲートウェイから同期確認応答（ｓｙｎｃ＿ａｃｋ）５７を受信し、通知されたグループのタイル４に同期確認応答５８を送信する。同期ロジック５４は、以前にそのゾーンのすべてのタイル４から同期要求（ｓｙｎｃ＿ｒｅｑ）５５が受信されている場合にのみ（ただし、グローバル同期でなければ、そのゾーン外の他の任意のタイルを待たない）、信号伝達された同期ゾーンのタイルに同期確認応答信号５８（ｓｙｎｃ＿ａｃｋ）を返信する。
【００６４】
他の実施形態では、レジスタ５９内の通知によって指定することができる同期ゾーンは、本質的に、階層的なものに限定されないことに留意されたい。一般に、レジスタ５９内の通知には、いかなる種類の分類にも対応するモードを提供することができる。例えば、モードは、非階層的グループのみの中からの選択又は階層的分類と１つ又は複数の非階層的グループ（少なくとも１つのグループは、別のグループ内に完全にはネストされていない）とが混じり合ったものの中からの選択を可能にすることができる。これにより、有利には、プログラマ又はコンパイラは、最小コード密度で、より広範な同期が必要とされるまで、互いに非同期動作することができる内部同期グループの異なるレイアウトから選択できるという柔軟性を有し得る。
【００６５】
既に説明したように、一部の同期バリアは、アクセラレータのタイルをホストからのデータと同期することを伴うのに対して、他の同期バリアは、そうではない。その例は、グローバル同期ゾーン９２に対して、図６に概略的に示されている。システムは、Ｎ個の同期バリア８０を通過して、Ｎ個のスーパーステップを実行することができ、その後、同様にホスト６３との同期を必要とするバリア９０が課される。ホスト６３との同期バリア９０では、ホスト６３からゲートウェイ５２に転送されているデータは、ゲートウェイ５２からアクセラレータ５１に転送される。Ｎ個の同期バリアは、関連同期グループ９２のすべての（休止していない）タイル４から同期要求を必要とするが、ホスト６３からは必要としない。後続の同期バリア８０は、同期グループ９２のすべての（休止していない）タイル４から同期要求を必要とする。その上、同期バリア８０を通過するには、ゲートウェイは、特定のバリアを通過するために十分な数のＥＳＰクレジットを格納する必要がある。このバリア９０後、ゲートウェイと１つ又は複数のタイル４との間で交換５０”を実行することができる（例えば、１つ又は複数のタイル４が演算結果をホスト６３に報告するため）。
【００６６】
ここで、図７を参照すると、ホスト６３がどのようにアクセラレータ５１との相互作用及びデータ交換を行うかがさらに詳細に示されている。ホスト６３は、アクセラレータ５１が処理するためのデータを提供するように構成される。アクセラレータ５１は、データを処理し、処理の結果をホスト６３に伝達するように構成される。ゲートウェイ５２は、データ交換のためのホスト６３とアクセラレータ５１との間の管理形式でのデータのストリーミングを担う。例では、アクセラレータ５１は、先行図を参照して上記で説明されるようなＩＰＵであり得る。しかし、ゲートウェイ５２は、ホスト６３と他のタイプのアクセラレータ５１とのインタフェースを取るために使用可能であり得る。
【００６７】
交換同期点を通じたホスト６３とゲートウェイ５２とアクセラレータ５１との間のデータ同期により、ゲートウェイデータ整合性及びＩ／Ｏ処理の即応性が保証される。ゲートウェイ５２とアクセラレータ５１との間のデータの利用可能性は、ＥＳＰクレジットのクレジットメカニズムを介して取り扱われる。１つのクレジットは、１つのＥＳＰの通過を可能にする。ＥＳＰ前のゲートウェイメモリ１１４の準備は、「事前作業」命令を実行しているゲートウェイ５２によって取り扱われる。ＥＳＰ後のデータの取り扱いは、「事後作業」命令を実行することによって実行される。後に説明するＰＰＥ実行エンジン１２３は、事前及び事後作業命令を実行する。
【００６８】
図７に示されるように（また図５も参照すると）、ゲートウェイ５２は、少なくとも１つの「ローカル同期伝播モジュール」（ＬＳＰＭ）１１７及び少なくとも１つの「ローカル同期バリアモジュール」（ＬＳＢＭ）１１８を含む。ＬＳＢＭ  １１８は、ＰＰＥに対するある種のプロキシと考えることができ、データのバッチを処理するためにアクセラレータ上で動作しているプログラムをホストから分離できるようにする。アクセラレータ５１／ゲートウェイ５２同期は、ゲートウェイ５２にデータを提供する際、ホスト６３活動と非同期で動作することができる。ＬＳＢＭ  １１８は、上記で論じられるＥＳＰクレジットを格納するように構成される。ＬＳＢＭは、ＬＳＰＭ  １１７にアクセス可能である。
【００６９】
ＬＳＢＭ  １１８は、ＬＳＢＭ  １１８がＰＰＥに対するプロキシとして動作するように配列されたそれぞれの同期グループ９２にホスト６３が参加できるように構成されたハードウェア回路を含む。ゲートウェイの関与を伴う同期である場合、タイル４によって出力された同期要求５６は、ゲートウェイ５２のＬＳＰＭ  １１７とＬＳＢＭ  １１８の両方を使用するのに対して、ゲートウェイ５２とアクセラレータ５１との間のデータ転送を伴わない同期に対する同期要求５６は、ＬＳＰＭ  １１７によって受信され、ＬＳＢＭ  １１８が関与することなく要求側のタイルに返信される。従って、タイル４は、実行するプログラムにより、いつ（あるとすれば）アクセラレータ５１がＬＳＢＭ  １１８を介してゲートウェイと相互作用する必要があるかを決定する。
【００７０】
アクセラレータ５１がゲートウェイと相互作用する必要がある場合、ＬＳＢＭ  １１８は、同期要求５６を受信した際に同期バリアの通過を認めるように構成され、ゼロより大きいＥＳＰクレジットの数が提供される。同期バリアの通過を認めることは、同期確認応答（図示せず）を生成し、この同期確認応答をアクセラレータ５１に送信することを伴う。
【００７１】
上記で説明されるように、ゲートウェイ５２は、自身とアクセラレータ５１との間のインタフェースと関連付けられたクレジットセットを格納する。これらのクレジットは、本説明では交換同期点（ＥＳＰ）クレジットと呼ばれる。しかし、当業者であれば、この名称は、便宜上、クレジットを識別するためにのみ使用され、クレジットの本質に関する制限を含意しないことを理解するであろう。また、ＥＳＰクレジットは、１つのバリアに対してデータ交換処理を実行するか否かを制御するため、バリアクレジットとも呼ぶことができる。
【００７２】
同期要求５６が受信され、レジスタ５９内の対応する表示が、ゲートウェイとのデータ転送が必要とされるようなものであるとき、ＬＳＢＭ  １１８のＥＳＰクレジットの数がゼロである場合、ＬＳＰＭ  １１７は、同期バリアの通過を認めず、従って、ＥＳＰクレジットの数がゼロより大きくなるまで、グループ９２のタイル４が再び動作を続行することを認めない。ＥＳＰクレジットの生成は、交換同期点においてアクセラレータ５１に転送するためのデータがゲートウェイ５２で利用可能になった際に達成することができる。いくつかの例では、このデータは、ホスト６３又はネットワーク接続若しくは他の外部記憶装置から転送された結果として利用可能になり得る。他の例では、このデータは、別のゲートウェイから転送された結果として利用可能になり得る。他のゲートウェイから受信されたデータは、別のアクセラレータ又は別のホスト若しくはリモート記憶装置からのデータであり得る。
【００７３】
いくつかの実施形態では、ゲートウェイ５２によって保持される複数のＥＳＰクレジットセットが存在し得る。異なる同期グループに対して、異なるクレジットセットが存在し得る。この例では、ある同期グループに対応する同期要求５６は、ゲートウェイ５２に要求の確認応答を行わせるのに対して（そのグループに対するＥＳＰクレジットの数がゼロではない場合）、別の同期グループに対応する同期要求５６は、ゲートウェイ５２に要求の確認応答を行わせないことがある（そのグループに対するＥＳＰクレジットの数がゼロである場合）。また、ゲートウェイ５２と通信するように構成された異なるアクセラレータに対しても、異なるクレジットセットが存在し得る。図１２に示されるように、各ゲートウェイ１６３は、２つのアクセラレータ１６２と通信するように構成され、従って、ゲートウェイ５２は、各アクセラレータ１６２に対する２つのＥＳＰクレジットセットを格納することができる。各アクセラレータ１６２がゲートウェイデータ転送を必要とする２つの可能な同期グループを有する場合、合計で４つのクレジットセットが各ゲートウェイ１６３によって保持されることになる。
【００７４】
同期グループのタイル４は、ゲートウェイに全く従うことなく（同期要求がＬＳＰＭ  １１７に転送され、ＬＳＰＭ  １１７によって確認応答が行われて）同期されたＮ個のバリアを通して動作を続行することができ、その後、タイル４は、ＬＳＢＭ  １１８を介してゲートウェイと同期しなければならない（次いで、ゲートウェイに及び／又はゲートウェイからデータを交換することができる）。例えば、図６を参照されたい。
【００７５】
上記で説明されるように、タイル４上で動作しているソフトウェアは、同期に対してゲートウェイの関与が必要であるか否かに関する通知を送信することにより（通知は、同期要求に含めることも、別々に送信することもできる）、ゲートウェイとの同期を要求するようにプログラムされる。この通知は、ゲートウェイ５２のレジスタ５９に格納される。そのような実施形態では、上記で説明されるクレジット制御メカニズムは、ＬＳＢＭ  １１８のみにより、ゲートウェイの関与（ホストの代わりにＬＳＰＭ  １１８による同期確認応答のプロキシ付与（ＬＳＢＭ）であるか、又は場合によりＬＳＰＭ  １１８へのより多くのＥＳＰクレジットの明示的な付与である任意の所定のバリアに対するゲートウェイの「関与」）を必要とするものとしてマークされた同期に対応するバリアに対して適用される。実施形態では、ゲートウェイの関与は、レジスタ５９に格納された同期ゾーン表示の異なる変形形態ごとに選択される。すなわち、各同期グループ９１、９２に対して、同期ゾーン表示が取り入れることができる２つの変形形態（ｚｏｎｅ＿１＿ｈｏｓｔ、ｚｏｎｅ＿１＿ｎｏ＿ｈｏｓｔ及びｚｏｎｅ＿２＿ｈｏｓｔ、ｚｏｎｅ＿２＿ｎｏ＿ｈｏｓｔ）が効果的に存在する。タイルの実行単位は、ゲートウェイ関与マーカーの信号伝達を同期ロジック５４に相応に行わせるように構成される。しかし、他の実施形態では、ゲートウェイの関与を要求するために他のメカニズムを実装できることは、除外されず、さらにゲートウェイの関与が配線接続される（従って常に課される）ことも除外されない。
【００７６】
実施形態では、ゲートウェイによって実行されるバリアの準備は、モデル学習における次の段階のためにアクセラレータ５１によって必要とされる経験データセットなど、アクセラレータ５１によってフェッチされるデータの準備を含み得る。これに関連して、準備は、記憶ディスク又は他の媒体からのデータのフェッチ、アクセラレータ５１上で動作している訓練アルゴリズムによって必要とされる形態でのデータのフォーマット又は画像データの解凍を含み得る。加えて、バリアの準備は、アクセラレータ５１によって生成された出力データを消費することを含み得る。後に論じるように、この準備のいくつか又はすべては、ゲートウェイ５２で実施することができる。最低でも、ゲートウェイ５２は、記憶ディスク又は他の媒体とアクセラレータ５１との間の通路にある。
【００７７】
ＬＳＢＭ  １１８への同期要求５６を処理要素からネットワーク（若しくはＰＣＩｅ）パケットとして伝達すること及び／又は同期確認応答５７をネットワーク（若しくはＰＣＩｅ）パケットとして返信することができる。一般に、ゲートウェイは、同期の階層レベルのいずれか１つ又は複数に関与し得る。
【００７８】
一般に、ＥＳＰクレジットの概念は、本明細書で開示される例示的なアーキテクチャのみならず、いかなるマルチタイルアーキテクチャにも適用可能であり得る。また、それは、必ずしもＢＳＰ用途の関連に限定されるわけではない。開示される技術は、ＢＳＰなどの単一のランデブーポイントを採用するシステムとの特定の相乗効果を有するか、又はホスト若しくは他の外部世界のシステムと対象のマシンとの間の別個のランデブーポイントの数が１つのみ若しくは非常に少ない数（例えば、ＣＳＰとは対照的に）のランデブーに限定される場合、システムとの特定の相乗効果を有する。それにもかかわらず、本開示の適用性は、この点において絶対的に制限されるものではない。いかなるシステム又は用途においても、レイテンシの節約は、ゲートウェイの関与なしでタイルが指定の数の同期バリアを通過できるようにすることによって達成することができ、従ってマルチタイルサブシステムがゲートウェイと相互作用しなければならない回数が低減され、従ってそうすることに対する遅延ペナルティを招く回数が低減される。
【００７９】
その上、カード間又はホスト６３とのＰＣＩｅインタフェースの観点から実施形態を例示してきたが、これは、限定されず、他のタイプのインタフェース（例えば、イーサネット）を使用することができる。
【００８０】
その上、実装形態は、ホストシステム６３とアクセラレータ５１との間の通信を同期する（そうでなければ非同期動作することになる）ことに限定されない。実施形態では、ゲートウェイ５２は、２つの独立したＢＳＰ間又は他の並列処理サブシステム間（内部同期動作するが、互いに対して非同期動作するもの）の同期に対して採用することができる。ゲートウェイ５２は、同期グループのサイズをはるかに大きいサイズに増大することができ、それらのより大きいグループに対するより効率的なツリー構造を可能にする。
【００８１】
ゲートウェイ５２で受信されたデータのバッチは、メモリ１１４に格納される。メモリ１１４は、ゲートウェイ５２による使用のために確保されるローカルメモリ（例えば、ＤＲＡＭ）である。同期要求５６に応答して、データは、ゲートウェイ５２によってメモリ１１４から回収され、アクセラレータ５１に転送することができる。経路１１６は、データの各バッチのフローを示す。データの各バッチは、一定の期間（バッチごとに異なり得る）中、メモリ１１４に保持されることに留意されたい。その期間は、バッチがゲートウェイ５２に入る時点及びバッチがアクセラレータ５１にプッシュされる時点に依存し、これらの時点は、必ずしも関連するとは限らない。
【００８２】
ＬＳＰＭ  １１７は、メモリ１１４からアクセラレータ５１への又はアクセラレータ５１からメモリ１１４へのデータの転送のタイミングをゲートウェイ５２に示すように構成することができる。これにより、ＬＳＰＭ  １１７は、ゲートウェイメモリ１１４のオーバーフローを防ぐために、アクセラレータ６１からメモリ１１４へのデータの転送に対する適切なタイミングを決定付けることができる。
【００８３】
その上、ゲートウェイメモリ１１４のオーバーフローを回避するため、ホスト／リモート記憶装置からゲートウェイメモリ１１４へのデータのフローが管理される。
【００８４】
図７では、アクセラレータ５１によって処理するためのデータは、ホスト６３からゲートウェイ５２に転送され、ゲートウェイ５２は、そのデータをローカルメモリ１１４に格納する。データは、ゲートウェイ５２によってＲＤＭＡリードを介してプルすることも、ホスト６３によって行われるＲＤＭＡライトを介してゲートウェイ５２に書き込むこともできる。
【００８５】
図１１を参照すると、ゲートウェイ５２によってネットワーク接続記憶装置１５１からデータ１１６が回収される代替のスキームが示されている。ネットワーク接続記憶装置１５１は、本明細書ではリモート記憶装置とも呼ばれる。図１１では、図１１の要素と同様の要素は、同様の参照番号で示している。
【００８６】
図１１では、ホスト６３は、記述子１１９をゲートウェイ５２に送信する。記述子１１９は、ゲートウェイ５２がアクセス可能なネットワーク接続記憶装置１５１の場所を特定する。ゲートウェイ５２は、記述子１１９を参照してデータフェッチ命令を実行する際、ネットワーク接続記憶装置１５１からデータ１１６を回収する。次いで、ゲートウェイ５２は、アクセラレータ５１にデータを転送する前にメモリ１１４にデータ１１６を格納する。
【００８７】
いくつかの実施形態では、ホスト６３からゲートウェイ５２に記述子１１９を転送する代わりに、ゲートウェイ５２によって格納される事前コンパイルされたコードが記述子を含む。この例では、ゲートウェイ５２は、ホストが介入することなくリモート記憶装置１５１からデータを自律的に回収する。その用途のいくつかの例では、ゲートウェイ５２は、外部のホスト６３が不要となるようにスタンドアロン設備として機能するシステムオンチップ（ＳｏＣ）を含む。アプリケーションスタック全体は、ＳｏＣ上又はより広範なシステムのＳｏＣの１つにおいて直接動作する。ゲートウェイ５２は、外部のホスト６３プロセッサと相互作用する第１のモードと、そのような外部のホスト６３が不要である第２のモードとで動作するように構成可能である。ゲートウェイ５２の残りの部分（例えば、図８に関して説明されるストリーミングエンジン）は、これらのモードのいずれのモードでゲートウェイ５２が動作するように構成されているにかかわらず、同じ機能を実行する。
【００８８】
図８を参照すると、ゲートウェイ５２がより詳細に示されている。図８は、ゲートウェイ５２を通してデータが取る様々な経路を示す。
【００８９】
図８は、アクセラレータ５１によって処理するためのデータ１２０がどのようにホスト６３又はリモート記憶装置１５１からメモリ１１４に転送されるかを示す。既に述べたように、いくつかの例では、データ１２０は、ホスト６３からゲートウェイ５２に転送される。他の例では、データ１２０は、ゲートウェイ５２によって行われたリモート記憶装置１５１からの読み取り要求に応答して、ローカル又はリモート記憶装置１５１（例えば、ネットワーク接続記憶装置）から受信される。ゲートウェイ５２は、ＲＤＭＡを介してリモート記憶装置１５１からデータ１２０を回収する。データ１２０は、データセンタポートを介して受信される。加えて、ゲートウェイ５２は、データの回収のみならず、ホスト６３／リモート記憶装置１５１へのデータの書き込み（図示せず）も行う。データの書き込みは、データセンタポートを介して行われる。交換段階中、データは、ゲートウェイメモリ１１４からアクセラレータ５１に転送することができる。
【００９０】
交換段階中にゲートウェイメモリ１１４からアクセラレータ５１にデータを転送する代わりに又はそれに加えて、データは、アクセラレータ５１からゲートウェイ５２に転送することができる。アクセラレータ５１は、データパケットの形態でデータをゲートウェイ５２に送信するように構成され、各データパケットは、アドレスを示すヘッダを含む。ゲートウェイ５２は、データパケットのアドレスを使用して、それらのデータパケットをどこに送信するかを決定する。例えば、データパケットは、ローカルメモリ１１４に格納することができる。データパケットは、さらなるゲートウェイ１２８に送信することができる。データパケットは、さらなるゲートウェイ１２８に接続されたアクセラレータに発送することができる。データパケットは、ホスト６３／リモート記憶装置１５１に送信することができる。
【００９１】
データ１２０は、ストリーミングエンジン１２４（アクセラレータ５１に伝達するためにメモリ１１４からのデータ１２１の回収も担う）の制御下において、ゲートウェイ５２をトラバースしてメモリ１１４に到達する。ストリーミングエンジン１２４は、データストリーミング処理の実行を行う。データのバッチに対するこれらの処理は、作業記述子（ＷＤ）によって指定することができる。ストリーミングエンジン１２４は、２つの実行エンジン及びコードメモリ（図示せず）を含む。実行エンジンの一方は、データムーバエンジン（ＤＭＥ）１２２であり、他方は、事前／事後作業エンジン（ＰＰＥ）１２３である。それらのエンジンは、コンパイラによって生成される実行可能イメージとしてコードメモリにロードされた命令を実行する。ストリーミングエンジン１２４は、ＤＭＥ  １２２による実行のための作業命令のセット及びＰＰＥ  １２３による実行のための作業命令のセットを有する。ＤＭＥ及びＰＰＥに対する命令のセットは、コンパイル時のセットアップとしてＷＤによって調整される。単一のデータ交換同期点に対するこれらの命令は、単一のＷＤにまとめることができる。ＤＭＥ  １２４は、実行可能イメージのＤＭＥセクションに見られる特定のＤＭＥ命令によって実行される。ＤＭＥ  １２４は、所定のＥＳＰに関連するデータムーバ（ＤＭＯＶ）命令のセットにナビゲートするためにＷＤを使用する。ＰＰＥ  １２３は、実行可能イメージのＰＰＥセクションに見られる特定のＰＰＥ命令によって実行される。ＰＰＥ  １２３は、所定のＥＳＰに関連する事前／事後作業命令のセットにナビゲートするためにＷＤを使用する。
【００９２】
ＰＰＥの事前作業は、アクセラレータ５１とのデータ交換前に準備が整っていなければならない。ＷＤのＰＰＥの事後作業は、交換が完了した後にのみ開始することができる。データ交換は、同期要求５６の確認応答が行われ、アクセラレータ５１とストリーミングエンジン１２４との両方に信号伝達された直後に起こる。この要求／確認応答は、「交換同期点」（ＥＳＰ）を信号伝達する。
【００９３】
ストリーミングエンジン１２４は、異なるデータストリーミングモデルをサポートする。
【００９４】
すべてのモデルは、ホストがＥＳＰクレジットの消費を厳重に制御することができる構成をサポートする。この構成は、ホスト６３と、ゲートウェイ５２と、アクセラレータ５１との間のＩ／Ｏ処理の調整及びゲートウェイメモリ１１４を利用しない他のアクセラレータレベルのＩ／Ｏメカニズムのためにこれが必要な場合にアクセラレータ５１を停止するためのメカニズムをサポートする。それは、ブレークポイントの設定又はアクセラレータの完全なファブリックのシングルステッピングのために使用されるメカニズムでもあり得る。ホスト６３からの厳重なフロー制御下で任意のモデルを起動する際、ホスト６３によって付与されたＥＳＰクレジットは、ＰＰＥスケジューラにより、「ＥＳＰクレジットレジスタ」（ＬＳＢＭ  １１８の一部）に転送される。ＥＳＰクレジットレジスタは、ゲートウェイ５２ハードウェア及びファームウェアによって読み取ること／書き込むことができる。
【００９５】
ストリーミングエンジン１２４によってサポートされる第１のストリーミングモデルは、「アドバンスドゲートウェイ（ＧＷ）プッシュ」と呼ばれる。アドバンスドＧＷプッシュでは、ＰＰＥ  １２３は、外部記憶装置及びゲートウェイ（ＧＷ）メモリ１１４から／外部記憶装置及びゲートウェイ（ＧＷ）メモリ１１４にデータをストリーミングする一方、ＤＭＥ  １２２は、アクセラレータ５１にデータをプッシュする。その実行は、ゲートウェイによって保持されるコンパイルされた実行可能イメージからの命令に基づく。ストリーミングエンジン１２４に対する実行可能イメージの生成は、アクセラレータコンパイラと統合される。コンパイラは、２つの関連するコンパイルされたコードシーケンス又は実行可能イメージを生成する。これらの第１のものは、アクセラレータ５１上で実行される一方、第２のものは、ゲートウェイ上で実行される。いくつかの実施形態では、ホスト６３は、コンパイルされたコードシーケンスをアクセラレータ５１及びゲートウェイ５２に提供することができる。
【００９６】
「ゲートウェイプッシュモデル」は、ゲートウェイ５２がデータをプッシュする際に使用されるモデルである。このモデルは、ゲートウェイが合意時点において（合意ＥＳＰにおいて）アクセラレータ５１にデータをプッシュする点で「ゲートウェイプルモデル」（以下で論じる）と異なる。この一般的なプッシュモデルは、並列プログラミングのための異なるタイプのメモリコンシステンシプロトコル又はブリッジングモデルをサポートすることができる。その例は、バルク同期並列（ＢＳＰ）、ステイル同期並列（ＳＳＰ）及び非同期並列を含む。
【００９７】
アドバンスドゲートウェイ（ＧＷ）プッシュモデルは、プッシュされるデータ入力（アクセラレータに対する）の利用可能性及びアクセラレータ５１にデータを出力するためのゲートウェイ５２のデータバッファの利用可能性を制御するためのクレジットメカニズムを使用する。ゲートウェイ５２は、データムーバ命令（ＤＭＥ  １２２がアクセラレータ５１にデータをプッシュする）と、外部ノード（ホスト、ＮＡＳ又は他のゲートウェイ）によってデータを転送するための事前／事後作業エンジン命令との両方を実行する。ＰＰＥ  １２３は、外部のＩ／Ｏボトルネックが原因でアクセラレータ入力データが利用可能ではない場合、ＥＳＰクレジットの欠如を通してＤＭＥ  １２２を効果的に停止することを担う。また、外部のＩ／Ｏボトルネックが原因でアクセラレータ出力データ（リモートホスト／記憶装置向けの）がゲートウェイ５２メモリ１１４に蓄積している際にも同様の停止が必要である。
【００９８】
このモデルにより、アクセラレータ５１へのプッシュが起こる前に、ＧＷメモリ１１４から高速ゲートウェイ転送メモリ１２７（例えば、ＳＲＡＭ）へのデータのプリフェッチが可能になるため、このモデルにより、ゲートウェイ５２は、より低い遅延でデータを伝達することができる。また、プルは、往復移動を必要とする（すなわち、プルは、読み取り要求に応答して読み取り要求を実施した後、データ返信を行う必要がある）ため、プッシュは、本質的に、プルより低い遅延の処理である。他方では、プッシュは、単にデータの転送を伴う。
【００９９】
アドバンスドゲートウェイプッシュモデルの別の利点は、アクセラレータ５１が、データのプルに対して貴重な演算リソースを投入せず、代わりにゲートウェイＤＭＥ  １２２にデータ移動をオフロードすることで利益を得ることである。
【０１００】
上記で説明されるメモリコンシステンシモデル（ＢＳＰ、ＳＳＰ、非同期など）は、プッシュモデルと組み合わせることができる。次いで、アクセラレータ５１のランタイムは、外部のバリアがＤＭＥ  １２２及びＰＰＥ  １２３データ移動をトリガすることを確認しなければならなくなる。プッシュ処理の例では、ＥＳＰクレジットは、ゲートウェイ５２によって１つずつデクリメントされる。
【０１０１】
第２のストリーミングモデルは、アドバンスドアクセラレータプルと呼ばれる。このストリーミングモデルでは、ＰＰＥ  １２３は、外部記憶装置から／外部記憶装置にゲートウェイメモリ１１４にデータをストリーミングする。次いで、アクセラレータ５１は、ＰＣＩｅ読み取り処理を介してゲートウェイ５２からデータをプルする。ＰＰＥ  １２３実行は、コードメモリ内の実行可能イメージからの命令に基づく。
【０１０２】
このモデルでは、ＤＭＥ  １２２は、使用不能になり、上記で説明される処理を実行しない。他方では、ＰＰＥ  １２３は、アクティブ状態であり、外部記憶装置から「プル要求」（すなわち読み取り要求）を発行することにより、データを得てメモリ１１４に格納する。次いで、アクセラレータ５１は、事前に定義されたＥＳＰにおいてメモリ１１４からデータをプルする。アドバンスドアクセラレータプルモデルは、ＤＭＯＶ命令なしで、事前／事後作業命令を含む実行可能イメージを利用する。ホスト６３は、ＥＳＰクレジットメカニズムを介してアクセラレータ５１を同期させ、その結果、アクセラレータ５１は、予期されるＥＳＰにおいて、ゲートウェイメモリ１１４で準備された有効データをプルする。
【０１０３】
また、このモデルの場合、ＰＰＥ  １２３は、外部のＩ／Ｏボトルネックが原因でアクセラレータ５１入力データが利用可能ではない場合、ＬＳＰＭの停止（クレジットメカニズムを介して）を担う。また、外部のＩ／Ｏボトルネックが原因でアクセラレータ５１の出力データ（リモートホスト／記憶装置向けの）がゲートウェイメモリ１１４に蓄積している際にも同様の停止を実行することができる。
【０１０４】
第３のストリーミングモデルは、単純アクセラレータプルと呼ばれる。このストリーミングモデルでは、ホスト６３は、ゲートウェイメモリ１１４に／ゲートウェイメモリ１１４からデータをストリーミングする。アクセラレータ５１は、ＰＣＩｅ読み取り処理を介してゲートウェイ５２からデータをプルする。ゲートウェイ５２は、この例では、ＰＰＥ命令を実行せず、代わりにホスト６３又はＮＡＳとゲートウェイ５２との間の事前に定義されたＩ／Ｏスキームのスレーブである。
【０１０５】
このモデルでは、ゲートウェイメモリ１１４は、メモリ領域として機能し、ホスト６３は、そのコンテンツを制御する。メモリ１１４にデータをロードするためにゲートウェイ５２で実行される命令は、存在しない。その上、ＤＭＥ  １２２は、使用不能になり、命令を実行しない。ＰＰＥ  １２３は、命令を実行しないが、依然としてデータがいつ利用可能であるかをアクセラレータ５１が見出せるように、ホスト６３によって与えられたＥＳＰクレジットを更新するためにプロキシとして機能している。
【０１０６】
データのストリーミングのために割り当てられたゲートウェイメモリ１１４は、あたかもそれがＰＣＩｅ接続メモリであるかのようにホスト６３によって維持され、その唯一の違いは、ＰＣＩｅの代わりにＲＤＭＡが使用されることである。
【０１０７】
上記で説明されるストリーミングプッシュモデルでは、ゲートウェイ５２は、オンチップストリーミングバッファとしてゲートウェイメモリ１１４を使用することによってアクセラレータメモリアクセス遅延を隠す。ストリーミングエンジン１２４の全体的な利益は、データ移動をアクセラレータ演算とオーバーラップさせ、タイミングを合わせたプッシュ処理前にゲートウェイ５２のメモリ１１４にプリロードできることである。アドバンスドＧＷプッシュモデルは、アクセラレータリソースを確保する（そうでなければＤＭＡ処理のために使用される）という追加の利益を有する。
【０１０８】
ゲートウェイ５２におけるデータストリーミング処理の実行は、ストリーミングエンジン１２４によって行われ、ストリーミングエンジン１２４は、処理モデルに応じて、ゲートウェイ５２命令セットのすべて又はサブセットを動作させる。命令は、実行可能イメージとしてゲートウェイメモリ１１４にロードされる。ストリーミングエンジン１２４に対する実行可能イメージの生成は、コンパイラがアクセラレータ５１及びゲートウェイ５２上で起動するための関連コードを生成する特定のアクセラレータ／ゲートウェイコンパイラ環境と統合される。
【０１０９】
ストリーミングエンジン１２４は、最適な性能を提供する方法でデータＩ／Ｏがアクセラレータに供給されることを保証するために協働するハードウェアコンポーネントとソフトウェアコンポーネントとのセットを含むように見える。ゲートウェイ５２又はストリーミングエンジン１２４の処理モデルに応じて、ストリーミングエンジン１２４は、「ちょうどよい時間」に（すなわち次のアクセラレータ演算ステップへの条件付きのエントリポイントを表す計画されたデータ交換段階で）データをプッシュすることも、アクセラレータ５１が同じ「ちょうどよい時間」にプルできるようにゲートウェイメモリ１１４においてデータを利用可能にすることもできる。データ交換段階前のゲートウェイメモリ１１４における関連データの準備は、ゲートウェイストリーミングエンジン１２４によって実行される事前にスケジューリングされたデータストリーミング命令を介して行われる。加えて、プッシュモデルは、データ交換段階中の遅延低減のために、ゲートウェイメモリ１１４からゲートウェイ転送メモリ１２７（例えば、ＳＲＡＭ）にデータをプリフェッチすることができる。「ちょうどよい時間」にゲートウェイメモリ１１４にデータをもたらすという概念は、ゲートウェイメモリ１１４が、アクセラレータ演算アルゴリズムによって必要とされるすべてのデータを保持できるほど十分に大きくない例に対して役立つ。
【０１１０】
ＰＰＥエンジンは、所定のＥＳＰに関連する事前作業（ＰＲＥ）及び事後作業（ＰＯＷ）命令のセットにナビゲートするためにＷＤを使用する。「事前」及び「事後」という用語は、アクセラレータ若しくは他のターゲットとのＷＤのデータ交換段階前に処理が発生するか、又はアクセラレータ若しくは他のターゲットとのＷＤのデータ交換段階後に処理が発生するかを示す。ＰＲＷ命令は、ホスト６３からゲートウェイメモリ１１４にデータをもたらすか（例えば、ホスト６３、リモート記憶装置１５１又はさらなるゲートウェイ１２８から）又は１つ若しくは複数のＤＭＯＶプッシュ命令に対する準備としてゲートウェイメモリ１１４にデータをもたらすというその主要な役割を有する。「事後作業」は、ＧＷメモリ１１４からデータを出す（例えば、ホスト６３又はリモート記憶装置１５１に）というその主要な役割を有する。ＰＰＥ命令は、ＰＰＥ特有のイメージのセクションに位置する。
【０１１１】
ＤＭＥ  １２２は、上記で説明されるように、「ゲートウェイプッシュ」処理モデルではアクティブ状態である。プッシュモデルでは、ＤＭＥ  １２２は、所定のＥＳＰに関連するデータムーバ（ＤＭＯＶ）命令のセットにナビゲートするためにＷＤを使用する。ＤＭＯＶ命令は、アクセラレータに向けてデータをプッシュする。ＷＤ及びＤＭＥ関連命令は、ＤＭＥ特有のイメージのセクションに位置する。ゲートウェイ５２の物理的なＤＤＲメモリ内のイメージから得られるＤＭＥ命令は、ＤＭＯＶ命令の一部としてＤＭＥのＤＭＡマシンによって実行されるＤＭＡ記述子リストに変換される。ＤＭＥ  １２２は、アクセラレータ５１とのデータの各バッチの交換サイズの完全な制御を可能にする中断基準によって制御される、いくつかの計画されたデータ交換に対してＤＭＡ記述子を準備する。
【０１１２】
ＤＭＥ  １２２は、アクセラレータメモリに及びアクセラレータメモリからデータをストリーミングするように設計された高レベルのプログラマブルマルチチャネルＤＭＡマシンを使用する。ＤＭＥ  １２２は、ロード分散を使用して１つ又は２つの高速データバス上で単一のアクセラレータ５１へのデータのストリーミングをサポートする。アクセラレータ５１がデータロードシーケンスにとらわれない場合、ロード分散は、ローカルＤＭＥ決定によって達成され、実行可能イメージに見られる情報によって制御されない。
【０１１３】
ＷＤに対するすべての事前作業関連命令及びこのＷＤに対する終了基準を有するすべての事後作業命令が完了すると、ＷＤは、「いつでも実行できる状態にある」（又は準備が十分整った）と考えられる。その時点で初めて、ＷＤに対するＥＳＰクレジットがＬＳＢＭ  １１８内のＥＳＰクレジットセットに追加される。
【０１１４】
「交換の終了」基準が満たされると、ＷＤは、「完了した」とみなされる。すべての配備オペレーション（ＤＭＯＶ）が完了し、アクセラレータ５１から受信されたすべての出力データが、予期される出力サイズと等しいと決定されるのはこのときである。予期される出力サイズは、ＷＤに示される。
【０１１５】
ゲートウェイ５２には、ＷＤの準備が十分整った際にＰＰＥ  １２３がＤＭＥ  １２２に信号伝達する方法が必要であり、これは、ＥＳＰクレジットをＤＭＥ  １２２に追加することによって行われる（これは、ＷＤクレジット又は交換クレジットと呼ぶこともできる）。ＤＭＥ  １２２前にいくつかのＷＤを動作させているＰＰＥ  １２３エンジンは、いくつかのＥＳＰクレジットを追加することができる。これにより、アクセラレータは、各ＥＳＰにおいてＰＰＥ作業の完了を待つ必要がなくなる。最適には、アクセラレータを停止することなく、バリアを通過できるように、各ＥＳＰ移行時、ＥＳＰクレジットは、既に利用可能であるべきである。
【０１１６】
１つのクレジットは、アクセラレータ５２との第１のデータ交換のためにすべてのデータを転送するＤＭＥ  １２２の能力を表す。ＰＰＥ  １２３は、ＰＰＥが次の順次ＥＳＰに対してデータプリフェッチを完了する（すなわち事前作業を完了する）度に新しいクレジットを追加することにより、ＥＳＰクレジットをインクリメントする。ＰＰＥ  １２３による外部ノードからのデータのプリロードがＥＳＰまでに完了しなかった場合、ＤＭＥ  １２２は、そのＥＳＰクレジットがゼロであることを見出し、ＰＰＥ  １２３がクレジットカウントをインクリメントするまで実行が停止される。データの欠如による１つのアクセラレータ５１の停止は、同期起動している（すなわち同じバリア同期ネットワークを共有している）連携するアクセラレータの完全なセットを効果的に停止することになる。
【０１１７】
各ＤＭＯＶ命令は、ＤＭＥ  １２２により、ＤＭＡ処理としてハードウェアにおいて実行される。これらのＤＭＯＶ命令は、ゲートウェイプッシュモデルが適用される際に実行される。ＤＭＯＶ命令は、参照データバッファ（ゲートウェイメモリ１１４内の）に存在するデータをその送信先に移動する。その送信先は、通常、アクセラレータ５１のメモリ場所であるが、他の送信先もサポートされる。
【０１１８】
データのストリーミングは、ＥＳＰごとに一括されるため、ＤＭＥ  １２２は、ゲートウェイメモリ１１４から必要な数のバッファが転送されると、データ転送を中断する。１つのＥＳＰバッチあたりで交換されるバイト数は、１）ストリーミングエンジン１２４のプッシュ処理と、２）ゲートウェイメモリ１１４への書き込みとの両方に対するパラメータフィールドにより、ＷＤに示される。プッシュすべきバイト数は、同じＷＤに対してスケジューリングされたすべてのバッファのバイト数と等しいことが予期される。不一致があれば、これは、例外状況を招く。
【０１１９】
ＤＭＥ  １２２は、メモリ管理ユニット（ＭＭＵ）のサポートなしでメモリ１１４からデータを回収するために物理メモリアドレスを使用するように構成される。
【０１２０】
ゲートウェイ５２にデュアルバスを介して接続されるアクセラレータ５１の場合、いずれのバスにデータを向けるべきかを示すための情報は、ＤＭＯＶにない。ＤＭＥ  １２２は、２つのバス上で送信されるトラフィックの均衡を保つためにバスの選択を制御する。
【０１２１】
ＤＭＯＶは、ゲートウェイメモリ１１４内の事前に初期化されたデータバッファにリンクすることができ、従って、この事例では、関連事前作業命令をバッファに充填する必要はない。
【０１２２】
代わりに、単一のＤＭＯＶ（メモリ１１４内の単一のメモリデータバッファを用いる）は、データ収集処理のために事前作業命令のセットにリンクすることができる。そのような参照事前作業命令の各々は、異なるオフセットで特定の送信元及び場所から同じデータバッファにデータをもたらし、それにより収集処理が形成される。事前作業命令は、データを準備する対象となるＤＭＯＶと同じＷＤでスケジューリングされる。単一の事前作業処理は、いくつかのＤＭＯＶオペレーションによってプッシュされるデータを提供することができる。
【０１２３】
事前／事後作業エンジン命令セットは、ソフトウェアにおいて実装される事前／事後作業エンジンによって実行される。所定のＥＳＰに関連する「事前作業」を実行する必要があり、所定のＥＳＰに関連する「事後作業」を実行する必要がある。
【０１２４】
ＰＰＥによる命令の自律的実行は、「ゲートウェイプッシュ」及び「アドバンスドアクセラレータプル」処理モデルで実施することができる。ＰＰＥ  １２３は、ゲートウェイ外部メモリ／記憶装置１１４に／ゲートウェイ外部メモリ／記憶装置１１４からデータを移動するために、ＲＤＭＡ、ＮＦＳ、ＮＶＭｏＦ、ｉＳＣＳＩ又は他の任意のサポートされたファイルアクセスプロトコルを使用する。ストリーミング処理の実行は、実行可能イメージの「事後／事前作業セクション」に見られるＰＰＥ命令によって直接制御される。ＰＰＥ  １２３は、イメージファイルから命令を取り入れて、これらの命令をローカル／リモート記憶装置の処理に変換するソフトウェアベースのストリーミングプロセッサと見なすことができる。これらの転送は、ゲートウェイメモリ１１４と外部メモリ／記憶装置との間のものである。
【０１２５】
ＰＰＥ  １２３は、ＤＭＥ  １２２と並列実行され、ＤＭＥ  １２２は、ＰＰＥ  １２３の結果に依存するため、ＰＰＥ  １２３は、ＤＭＥ  １２２によって実行されるデータムーバ処理がスケジューリングされる前にその作業を終わらせなければならない。これは、実行可能イメージにおいて、作業記述子を使用して、同じデータ交換同期点に属するＤＭＥ  １２２及びＰＰＥ  １２３命令をまとめることによって対処される。
【０１２６】
各ＰＲＷ命令は、外部記憶装置からデータを回収し、ＰＲＷ命令が指し示す（ゲートウェイメモリ１１４内の）事前コンパイルされたデータバッファにデータを格納する。ＰＲＷ命令は、データの送信元に応じて異なる変数に入る。これらの変数は、外部のＩ／Ｏオペレーションを詳述する異なるパラメータセットを必要とする。これらの詳細は、実行開始前に、ゲートウェイ制御チャネルを介して制御プレーンによってセットアップされた参照Ｉ／Ｏテンプレートにおいて調べられる。
【０１２７】
コンパイラは、ＰＲＷ命令によって参照されるバッファのためのメモリ１１４の領域を事前に割り当てる。これらのバッファは、ＰＲＷ命令が実行される際に外部記憶装置から回収されたデータを格納するために使用される。
【０１２８】
ＥＳＰクレジットセットは、ＰＰＥ  １２３により、各ＷＤに対して、このＷＤに対してスケジューリングされたすべての事前作業関連命令が完了した際、以前のすべてのＷＤに対してスケジューリングされたすべての事前作業関連命令も完了しており、且つこのＷＤに対する終了基準を有するすべての事後作業関連命令も完了している場合にのみインクリメントされる。
【０１２９】
ＰＲＷ命令は、データの送信元／送信先に応じて異なる変数に入る。
【０１３０】
ＰＲＷ命令の実行順番は、実行可能イメージにおいて示される順番である。しかし、ＰＲＷ命令のより小さいバッチは、リモート場所からのＩ／Ｏ性能を最適化するために並列処理される。１つ又は複数のＷＤからの１つ又は複数のＰＲＷ命令は、データが必要な際にＷＤ前に実行される。これは、ＷＤによって消費されるデータ「パイプライン」を充填するために必要である。ゲートウェイ５２は、事前作業のための並列実行エンジンを有し、それによりデータ「パイプライン」を充填するこの事前作業を行うことができる。
【０１３１】
ＰＲＷ命令に対する完了順番は、実行可能イメージの命令の順番と同じでない場合がある。しかし、データは、最終的に順序要件なしでゲートウェイメモリ１１４に行き着くため、そのような順不同の完了は、問題ではない。アクセラレータ５１へのこのデータの配備順序に関して言えば、ＤＭＥ  １２２は、命令順番が実行可能イメージによって表現されているものであることを保証する。
【０１３２】
ＰＲＷ命令は、常に終了基準を有する。ＰＲＷ命令は、ＧＷ  ５２により、アクセラレータ５１によって供給データが必要とされる所定のＷＤ前に、ときが来れば完了するようにスケジューリングされる。終了基準は、ＰＲＷ命令が含まれるＷＤによって表される。ＷＤまでにデータを供給することができない事例では、データ交換段階は、データが利用可能になるまで遅延される。これにより、データが利用可能になるまでアクセラレータ５１の演算段階が効果的に停止される。そのような停止の発生は、カウントされ、そのようなモニタリングからのフィードバックは、ゲートウェイ及び／又はコンパイラを最適化する上で役立つ。
【０１３３】
ＰＯＷ命令は、所定のＥＳＰに関連する「事後作業」を行う。その主要な機能は、ゲートウェイメモリ１１４から外部記憶装置（例えば、ホスト６３又はリモート記憶装置１５１）にデータを移動することである。ゲートウェイメモリ１１４に格納されるデータは、アクセラレータ５１から受信したデータである。ＰＯＷ命令は、データの送信先に応じて異なる変数に入る。これらの変数は、外部のＩ／Ｏオペレーションを詳述する異なるパラメータセットを必要とする。
【０１３４】
ＰＯＷ命令を動作対象のメモリ１１４内のデータバッファにリンクするかどうかは、コンパイラ次第である。
【０１３５】
事後作業の場合、結果は、アクセラレータ５１に伝達されず、代わりにホスト６３、リモート記憶装置１５１又はゲートウェイメモリ１１４に格納されるため、命令は、順不同に実行することができ、純データの書き込み順番に関連する暗黙の意味は存在しない。
【０１３６】
ＰＯＷ命令は、常に必須開始基準を有し、必須開始基準は、命令を実行できる最も早い時点を表す。必須開始点より後に命令を実行することはできるが、必須開始点より前に実行することはできない。従って、ＰＯＷ命令は、所定のＷＤで開始するためにトリガされる。このトリガＷＤは、ＰＯＷ命令が含まれるＷＤとして表される。前のＷＤの完了時、アクセラレータ５１は、ＰＯＷ命令のバッファへの書き込みを終えていなければならない。
【０１３７】
異なるタイプのＰＯＷ命令が存在する。第１のタイプのＰＯＷ命令は、ローカルＧＷメモリ１１４からリモート記憶装置１５１にデータを移動することを伴う。これは、ホスト６３により、制御チャネルを介して送信された命令（例えば、記述子１１９）によって構成することができる。第２のタイプのＰＯＷ命令は、ローカルゲートウェイメモリ１１４からホスト６３にデータを移動することを伴う。これも、ホスト６３により、制御チャネルを介して送信された命令によって構成することができる。第３のタイプのＰＯＷ命令は、ゲートウェイメモリ１１４に格納されたデータの操作を伴う。
【０１３８】
また、ＰＯＷ命令は、ＰＯＷ命令のパラメータによって表される任意の終了基準も有し得る。この任意の終了基準は、以下の用途を有し得る。第１に、この任意の終了基準は、事前作業命令が、その一部であるＷＤによって暗黙的に与えられたその終了基準を有するのとほぼ同じ方法で、ＰＯＷ命令が特定のＷＤに対するデータを準備できるようにすることができる。第２に、ゲートウェイコンパイラが、外部ノードにエクスポートするためにＰＯＷ命令によって使用された「出力」バッファを再利用している例では、未保存のデータを依然として保持しているバッファをアクセラレータ５１による上書きから保護することが重要である。この例では、プログラムは、すべてのＰＯＷがバッファのフラッシュを完了するまで、中断点としてＤＭＥ命令ストリームにおけるいわゆる指定実行バリア（ＮＥＢ）命令を出すことにより、バッファを保護することができ、従って再利用のため及びより多くのアクセラレータ５１出力オペレーションのためにバッファを確保することができる。これらのＮＥＢ命令については、後に説明する。
【０１３９】
ＰＯＷ命令がその終了基準を満たすことができない場合、ＰＰＥ  １２３は、ローカルＤＭＥ  １２２を一時停止し、結果的に、すべてのアクセラレータは、同じ同期レベルで同期することになる。ＰＰＥ  １２３は、ＰＯＷ命令を構文解析し、終了基準を見出す。同じ中断基準を有するか、異なる中断基準を有するか又は中断基準を有さないＰＯＷ命令がいくつかあり得る。
【０１４０】
上記で述べたように、コンパイラは、所定の実行時点に中断／通過「実行バリア」を設けることができる。（ＮＥＢ）命令は、完了時にＮＥＢＣに信号伝達するように指示されたオブジェクトから多くの完了レポートを収集する指定「実行バリア」完了（ＮＥＢＣ）オブジェクトを指す（例えば、ＰＯＷ命令）。
【０１４１】
ＮＥＢ命令は、常にＷＤに属している（すなわちＷＤに包含されている）。ＮＥＢ命令は、３つのすべての命令ストリーム（ＤＭＥ、ＰＰＥ＿ＰＲＥ及びＰＰＥ＿ＰＯＳＴ）に挿入することができる。
【０１４２】
「中断」状態は、ＷＤの命令の実行を進行させないためのＤＭＥ／ＰＰＥへの中断信号を表す。他の可能な状態は、「通過」であり、それにより、ＤＭＥ／ＰＰＥは、ＷＤのそれらの命令の実行を進行させることができ、従ってＮＥＢ命令を通過させる。状態は、この終了基準にリンクされたすべての命令がＮＥＢＣオブジェクトの「ｃｏｍｐｌｅｔｉｏｎｓ＿ｓｅｅｎ」カウンタをインクリメントすることによって完了を報告すると、「中断」から「通過」に変化する。
【０１４３】
「実行バリア」の概念は、バルク同期並列（ＢＳＰ）メモリコンシステンシモデルにおいてバリアを制御するために使用することができるＥＳＰ同期プリミティブと混同してはならない。いくつかの例では、ＮＥＢ命令挿入点は、アクセラレータプログラムに対する特定のＥＳＰと相関性があるが、そのような直接的な要件はない。ＮＥＢは、すべての種類の同期に対する一般的な中断点として使用することができる。
【０１４４】
ＮＥＢ命令の使用の第１の例を提供することができ、第１の例では、ＮＥＢ命令は、ＤＭＥ命令ストリームの開始時にＷＤに挿入される。ＮＥＢは、ＤＭＥ命令を実行するための前提条件を表す。前提条件は、ＰＯＷ命令を介して外部ノード（例えば、ホスト６３又はリモート記憶装置１５１）へのアクセラレータ出力バッファ（又はリングバッファ充填閾値）のフラッシュを制御するために使用される。ＥＳＰクレジットセットは、ＮＥＢ前提条件が満たされるまで且つＰＲＷ命令が完了するまでインクリメントされない。これは、利用可能なＥＳＰクレジットが存在しなければ、ＤＭＥによってＷＤをキャッシュすることはできるが、さらなる実行が行われないことを意味する。ＰＰＥ  １２２がＰＲＷ命令の実行を完了すると、ＰＰＥ  １２２は、最初に、ＷＤ内のすべてのＮＥＢ命令が「通過」状態であるかどうかをチェックする。すべてのＮＥＢ命令が「通過」状態であり、且つクレジットを与えるための他のすべての前提条件が満たされている場合、クレジットは、インクリメントされる。ＤＭＥ実行エンジンは、ＮＥＢ命令が中断状態であることを認識した場合、例外を発生させる。この例外は、「中断」状態であるにもかかわらず、ＰＰＥが間違ってクレジットを追加したか、又はＤＭＥ／ＰＰＥ実装において何らかの発生条件があることを示す。
【０１４５】
ＮＥＢ命令の使用の第２の例を提供することができ、第２の例では、ＮＥＢ命令は、ゲートウェイ５２からホスト６３へのデータエクスポートのフロー制御を行うために事後作業命令ストリームに挿入される。この事例では、ホスト６３は、ＮＥＢＣの状態を制御する。このモデルでは、ホストは、ＰＰＥ  １２３がホスト６３にデータを転送するためにＰＯＷ命令を実行できるか否かを制御し、従ってＮＥＢ命令を通過させる。これは、状態を「通過」状態に設定するために、「リンクされた」ＮＥＢＣオブジェクトの状態に対する更新を提供するホストによって制御される。ホストは、リンクされたすべてのＰＯＷ命令が完了した場合にのみ、「通過」状態に設定することができる。
【０１４６】
終了基準は、常に命令ストリームのＮＥＢの「次の発生」時に設けられる。「次の発生」は、ＰＯＷの実行に関連するものであると理解されたい。
【０１４７】
ＮＥＢ命令の使用の第３の例を提供することができ、第３の例では、ＮＥＢ命令は、ホスト６３から供給されるデータインポートのフロー制御を行うために事前作業命令ストリームに挿入される。この例では、ホスト６３は、ＮＥＢＣの状態を制御する。このモデルでは、ホストは、ＰＰＥ  １２３がホスト６３又はリモート記憶装置１５１からメモリ１１４にデータを転送するためにＰＲＷ命令を実行できるか否かを制御し、従ってＮＥＢ命令を通過させる。これは、状態を「通過」状態に設定するために、「リンクされた」ＮＥＢＣオブジェクトの状態に対する更新を提供するホスト６３によって制御される。
【０１４８】
ＮＥＢＣオブジェクトは、常に、プログラム実行の開始時に中断状態に初期化される。ＮＥＢ後に次の命令を開始する際にも同じ再初期化が実行される。状態を「中断」に設定すると、「ｃｏｍｐｌｅｔｉｏｎｓ＿ｓｅｅｎ」もゼロに設定される。
【０１４９】
ＤＭＥの例では、ＤＭＥ  １２２自体は、ＮＥＢが依然として見られないその実行にこれまで入ったことがなく、ＮＥＢ命令が見られるまでに、リンクされたすべての命令が完了した場合、「ｃｏｍｐｌｅｔｉｏｎｓ＿ｓｅｅｎ」は、「ｅｘｐｅｃｔｅｄ＿ｃｏｍｐｌｅｔｉｏｎｓ」と同一であり、状態は、「通過」とみなされ、従って待つことなく実行が続行される。そうでなければ、ＤＭＥ  １２２は、リンクされたすべての命令が完了するまで待つ。
【０１５０】
ゲートウェイ５２には、１つのアクセラレータ５１に対してストリーミングエンジン１２４が１つあり、各ストリーミングエンジン１２４は、説明してきた様々なモードで起動することができる。
【０１５１】
ファブリックにわたって利用可能となるいくつかのストリーミングエンジンの例がある。１つのアクセラレータ５１に対してストリーミングエンジン１２４が１つあり、各ストリーミングエンジン１２４は、イメージを実行している。各ストリーミングエンジン１２４は、１つ又は複数の高速バス（例えば、ＰＣＩｅ  Ｇｅｎ４）を介してアクセラレータ５１にデータを供給する。
【０１５２】
ストリーミングエンジン１２４を使用して実装することができる複数の異なる可能なストリーミングフローがある。例えば、第１の可能なストリーミングフローでは、ゲートウェイ５２は、アクセラレータ５１へのデータのストリーミングを可能にすることができる。このデータのストリーミングは、データを提供するように構成されたさらなるアクセラレータによって開始することができる。代わりに、データのストリーミングは、ゲートウェイ５２のＤＭＥ  １２２によって開始することができ、ＤＭＥ  １２２は、メモリ１１４からアクセラレータ５１にデータを転送するための命令を実行する。そのようなデータは、ホスト６３又はリモート記憶装置１５１からゲートウェイ５２において受信されたものであり得る。
【０１５３】
第２の可能なストリーミングフローでは、ゲートウェイ５２は、リモートアクセラレータへのデータのストリーミングを可能にすることができる。アクセラレータ５１は、グローバルアドレス空間においてリモートアクセラレータを識別するアドレスを有するパケットをゲートウェイ５２に提供することができる。ゲートウェイ５２は、リモートアクセラレータに伝達するために、このアドレスを使用してデータパケットをさらなるゲートウェイ１２８に転送するように構成される。
【０１５４】
第３の可能なストリーミングフローでは、ゲートウェイ５２は、ローカルゲートウェイメモリ１１４へのデータのストリーミングを可能にすることができる。これは、ローカルゲートウェイオフロードの結果であり得る。メモリ１１４へのデータの転送は、ＥＳＰにおけるアクセラレータ５１からのものであり得る。メモリ１１４へのデータの転送は、ローカルＲＤＭＡ又はホストＲＤＭＡの結果であり得る。データは、外部記憶装置（ホスト６３、ＮＡＳ  １５１又はさらなるゲートウェイ１２８など）からメモリ１１４に転送することができる。そのような外部記憶装置からのメモリ１１４へのデータの転送は、ＰＰＥ  １２３によって行われる事前作業の一部である。
【０１５５】
第４の可能なストリーミングフローでは、ゲートウェイ５２は、さらなるゲートウェイ１２８のメモリへのデータのストリーミングを可能にすることができる。データ転送は、ゲートウェイ５２自体によって開始することができる。データ転送は、アクセラレータ５１によって開始することができ、アクセラレータ５１は、グローバルアドレス空間においてさらなるゲートウェイ１２８を識別するアドレスを有するパケットをゲートウェイ５２に提供する。さらなるゲートウェイ１２８へのデータの転送は、ゲートウェイメモリ１１４からデータをプルするためにさらなるゲートウェイ１２８によって実行された事前作業命令の結果であり得る。
【０１５６】
第５の可能なストリーミングフローでは、ゲートウェイ５２は、リモート記憶装置１５１へのデータのストリーミングを可能にすることができる。データは、ＲＤＭＡ、ネットワークファイルシステム（ＮＦＳ）プロトコル、ファブリック上の不揮発性メモリ（ＮＶＭｏＦ）及びインターネットスモールコンピュータシステムインタフェース（ｉＳＣＳＩ）プロトコルの１つ又は複数によってゲートウェイメモリ１１４からリモート記憶装置１５１に転送される。データ転送は、ゲートウェイによって開始される。リモート記憶装置１５１へのこの転送は、ＰＰＥ  １２３による事後作業命令の実行から生じ得る。
【０１５７】
第６の可能なストリーミングフローでは、ゲートウェイ５２は、ホスト６３へのデータのストリーミングを可能にすることができる。データは、ゲートウェイメモリ１１４からピンホストメモリ又はＲＤＭＡアクセス可能ホストメモリに転送される。ホスト６３へのこの転送は、ＰＰＥ  １２３による事後作業命令の実行から生じ得る。
【０１５８】
第７の可能なストリーミングフローでは、ゲートウェイ５２は、１つ又は複数のリモートＮＦＳサーバからのデータのストリーミングを可能にすることができる。これらのサーバからのデータ転送は、ゲートウェイ５２によって送信された要求に応答して起こり得る。
【０１５９】
先に述べたように、ＡＩ及びＨＰＣに対する並列プログラミングモデルは、通常、３段階（演算、バリア及び交換（データ転送、収集及びブロードキャスト））反復実行モデルに従う。すなわち、それは、アクセラレータが、通常、事前コンパイル済みデータ交換同期点におけるアクセラレータへの／アクセラレータからのデータ転送及び／又はアクセラレータの要求時に実行される収集を必要とすることを示唆している。要求は、同期点を表し、同期点は、アクセラレータ５１が利用可能なデータの処理を完了し、いくつかのデータのエクスポート及びいくつかのデータのインポートを必要としている時点である。ゲートウェイ５２は、アクセラレータ交換要求の確認応答の直後にそのデータ移動をスケジューリングする。
【０１６０】
ゲートウェイストリーミングエンジン１２４は、データ移動を最適化し、従って、データバッファ「オブジェクト」が、データ保持における重要な役割を果たす。実行中に（ゲートウェイメモリ１１４内の）バッファにポインタを渡すことにより、システムは、処理中にゼロコピーセマンティックを実装する。データバッファは、ロードされたイメージにおいて事前に初期化されるか又はＰＰＥ  １２３によって充填される。両方の例では、メモリ１１４内のバッファへの参照は、ＤＭＥ  １２２により、ＥＳＰにおいてアクセラレータ５１にデータを転送するために使用することができる。
【０１６１】
データが既に準備されており、且つロードされた実行可能イメージに埋め込まれている際など、アクセラレータデータを準備するために必要な事前作業が存在しない例があり得る。そのような例では、ＰＰＥ  １２３は、ＤＭＥ  １２２にＥＳＰクレジットをポストすることを担う。
【０１６２】
アクセラレータ５１に向かうデータ移動がない（例えば、アクセラレータ出力データのみである）ＥＳＰも存在し得、そのような例でも、ＰＰＥ  １２３は、ＤＭＥ  １２２にＥＳＰクレジットをポストすることを担う。この例では、ＰＰＥ  １２３は、近々到来するＥＳＰ中にアクセラレータ５１に向かうデータ移動がないと決定することに応答して、近々到来するＥＳＰに対してＥＳＰクレジットをインクリメントする。
【０１６３】
ＥＳＰクレジットを追加するのは、常にＰＰＥ  １２３である。
【０１６４】
事前作業命令に対してのみの場合：ＷＤの事前作業が、前に発行されたＷＤの事前作業と比べて、定刻前に完了した場合、ＷＤの事前作業が完了した際、事前作業完了情報をキューイングし、前のすべてのＷＤの取り扱いが終わった後にＥＳＰクレジットの数を増加する設計が必要である。
【０１６５】
アクセラレータデータインポート（すなわちゲートウェイ５２からアクセラレータ５１へのデータ転送）の場合、ＷＤは、交換中にどの程度のバイト数を両方向において（すなわちアクセラレータ５１とゲートウェイ５２との間で）転送するかを記述する。プッシュモデルのアクセラレータ５１は、同じ情報でコンパイルされており、従ってこの交換に対してすべての予期データがいつ受信されるかを知っており、すべてのデータが受信された直後に演算段階を開始する。プルモデルでは、アクセラレータ５１は、ゲートウェイ５２からのデータの読み取りを中断することにより、交換をいつ終えるかを制御する。
【０１６６】
アクセラレータデータエクスポートの場合：アクセラレータ５１は、そのコンパイルされたコードから、所定のＥＳＰに対してどの程度のデータをゲートウェイ５２に送信するかを知っており、ゲートウェイ５２は、ＷＤからこの情報を読み取ることによってどの程度の数が予期されるかを知っている。
【０１６７】
ゲートウェイ５２がアクセラレータ５１から予期されたバイト数を受信すると、ゲートウェイ５２は、次のＷＤの実行に移る。次のＷＤを実行する際、ゲートウェイ５２は、ゲートウェイメモリ１１４内のデータに対するローカルオペレーションを含む事後作業を実行することができる。加えて又は代替として、ゲートウェイ５２は、その最終的な送信先にデータを転送するために事後作業を実行することができる。代わりに、ゲートウェイ５２は、事後作業を実行しなくともよい。例えば、ゲートウェイ５２は、ゲートウェイメモリ１１４にデータをとどまらせ、メモリ１１４が後のリードバックのためのアクセラレータ外データキャッシュとして機能するようにすることができる。次のＷＤを実行する際、ゲートウェイ５２は、次のＥＳＰ前に完了する必要がある事前作業を実行することができる。加えて又は代替として、ゲートウェイ５２は、次のＥＳＰ後に実行すべきＤＭＯＶ命令を実行することができる。利用可能なＥＳＰクレジットが存在する場合、ＤＭＯＶ命令は、ＥＳＰ前にゲートウェイ転送メモリ１２７にデータをプリロードするために使用される。ＥＳＰクレジットが存在しない場合、ＤＭＥ  １２２は、ＥＳＰクレジットを待ち、ＥＳＰクレジットが利用可能になると、プリロードを実行する。
【０１６８】
ＰＰＥ命令（すなわち事後作業（ＰＯＷ）及び事前作業（ＰＲＷ）命令）が、記憶装置ノード上で既に利用可能であると知られている静的データのターゲットとしてリモート記憶装置１１４を捉えている場合、ゲートウェイがデータに直接アクセスするための記憶装置プロトコルをサポートしている限り、そのノードとのデータ同期は、不要である。
【０１６９】
ホスト６３のメモリは、ゲートウェイ５２及びアクセラレータ５１に転送しているデータ量と比べて小さく、従って、ホスト６３は、データを「断片ずつ」そのメモリに持っていく必要がある。この「断片ずつ」という本質により、ＲＤＭＡ読み取りを開始したゲートウェイ５２（ゲートウェイデータインポート）に対してデータがいつ利用可能になるかを制御するゲートウェイ５２とホスト６３との間の同期メカニズムが必要とされる。同様に、ＲＤＭＡ書き込みを開始したゲートウェイ５２（ゲートウェイデータエクスポート）に対して、同様の同期が必要である。全ＡＩ設備に対する課題は、ゲートウェイ／アクセラレータへの及びゲートウェイ／アクセラレータからのデータストリーミングを継続的に有することであり、従って、そのような同期メカニズムは、ＡＩ性能にとって不可欠である。システムには、これを大規模なＡＩファブリックに拡大するために、最小オーバーヘッドを有するよく設計されたソリューションが必要である。
【０１７０】
ストリーミングエンジン１２３は、ゲートウェイとホストとの間でデータを移動するためのいくつかのオペレーションモードを有する。
【０１７１】
第１のオペレーションモードでは、ストリーミングエンジン１２４は、ホスト６３からのコマンドの下でホスト６３のスレーブとして起動する。第２のオペレーションモードでは、ストリーミングエンジン１２４は、そのコードメモリに格納された事前コンパイルされた命令に基づいて実行する。
【０１７２】
第１のオペレーションモードでは、ストリーミングエンジン１２４は、ホスト６３のスレーブとして動作し、ホスト６３の制御下でデータをメモリ１１４に格納するオペレーション及びアクセラレータ５１に伝達するために前記データをメモリ１１４から回収する処理を実行する。
【０１７３】
第２のオペレーションモードでは、ストリーミングエンジン１２４は、アクセラレータ及びゲートウェイから構成される完全なシステムのコードを生成するために使用されるコンパイラから得られた事前コンパイルされた実行可能ファイルに応じて、ホスト６３又はリモート記憶装置１５１からデータをプリフェッチする。コンパイラは、（アクセラレータ５１に伝達されるデータをフェッチする）ゲートウェイ５２及び（データを処理する）アクセラレータ５１に対するコードを生成するために使用されるため、ホスト６３、ゲートウェイ５２及びアクセラレータ５１は、互いに同期して動作することができる。ゲートウェイ５２のファイルは、アクセラレータ５１によって必要とされるデータを予測し、そのデータをメモリ１１４に格納することにより、関連する演算段階前に配備するためにそのデータを準備する。ゲートウェイ５２は、コンパイラによって生成されたコードに応じて、適切な時点において、アクセラレータ５１に転送するためのデータを準備する。ＤＭＥ  １２２は、アクセラレータ５１からの同期要求５６に応答して、アクセラレータ５１にとって完全に正確な時点において、遅延が最適化された方法でそのデータをアクセラレータ５１に転送する。ＤＭＥ  １２２は、遅延を最適化して伝達するために、アクセラレータ５１の近くに位置する。
【０１７４】
第３のオペレーションモードでは、アクセラレータ５１は、次のＮ個のバリア前に、対応するＮ個のバリアに対してメモリ１１４からアクセラレータ５１に転送するためにどのようなデータを準備するかをゲートウェイ５２に知らせる。このオペレーションモードでは、アクセラレータコンパイラは、将来的なＩ／Ｏオペレーションを予見することができ、従ってゲートウェイ５２がデータ伝達のための十分な時間を有するように、ゲートウェイ５２へのそのようなコマンドをスケジューリングすることができる。
【０１７５】
コンパイラは、アクセラレータ５１によって実行されるコンピュータコード命令のセットを生成する。これらのコンピュータコード命令のセットは、実行可能イメージと呼ぶことができる。いくつかの実施形態では（例えば、上記で説明される第２のオペレーションモードでは）、コンパイラは、ゲートウェイ５２によって遂行されるストリーミングエンジンデータ移動／処理コマンドの関連セットを生成することもできる。
【０１７６】
コンパイラは、１つのストリーミングエンジンあたり１つの実行可能イメージを生成する。実行可能イメージは、アクセラレータから見えるような平坦な連続するＸＰＵ仮想アドレス（ＸＶＡ）空間を参照する。このＸＶＡ空間は、内部アクセラレータメモリのみならず、同じＸＶＡ空間にメモリ管理ユニット（ＭＭＵ）マッピングを介してマッピングされた「ストリーミングエンジンサンドボックス」メモリもカバーする。また、実行イメージは、ストリーミングエンジン１２２がアクセス可能な必要なホストメモリをカバーする「ホストサンドボックス」仮想アドレス（ＨＳＶＡ）空間も参照する。このＨＳＶＡ空間は、ＧＷ処理モデル（「ＧＷプッシュモデル」及び「アドバンスドＸＰＵプルモデル」）に関連する。
【０１７７】
これらの２つの仮想アドレス空間（ＸＶＡ及びＨＳＶＡ）内では、コンパイラは、ストリーミングエンジン１２２、アクセラレータ５１及びホスト６３によって必要とされるバッファリソース及びアドレス可能な要素の存在を定義することを担う。
【０１７８】
また、コンパイラは、適切と思われる際及び限られたゲートウェイメモリ１１４が原因で必要とされる際のＷＤの反復間及びシーケンス間のメモリ１１４内のゲートウェイバッファの再利用を定義することも担う。バッファ再利用最適化は、十分なメモリがゲートウェイ５２に割り当てられている限り不要である。
【０１７９】
２つ以上のアクセラレータと通信するように構成されたゲートウェイ５２の場合、アクセラレータが、他のアクセラレータに割り当てられたストリーミングエンジンサンドボックス（ｓａｎｄｂｏｘ）にアクセスすることは、現在可能ではない。これは、各アクセラレータ内部にセットアップされたＭＭＵ又はアクセラレータサポートチップによって強制される。異なるアクセラレータのＸＶＡ空間は、物理的なゲートウェイメモリではオーバーラップしない。ストリーミングエンジンは、それらの別個の「ＸＰＵサンドボックス」において動作し、すべてのアクセスは、それ自体のサンドボックス内にとどまるよう強制するランタイムである。アクセラレータのオンボードＭＭＵにより、これらのストリーミングエンジン間で共有される共通のメモリ領域を構築することが可能であり得る。
【０１８０】
図７に示されるアクセラレータへのデータの転送を再び参照すると、いくつかの例では、ゲートウェイ５２は、ホスト６３又はリモート記憶装置１５１からデータを受信し、アクセラレータ５１に転送するために高速ゲートウェイ転送メモリ１２７において利用可能にする前に、そのデータをメモリ１１４に格納する。ＤＭＥ  １２２は、ＤＭＥ命令に応じて、メモリ１１４から高速ゲートウェイ転送メモリ１２７にプリロードする。ゲートウェイ転送メモリ１２７のコンテンツは、ハンドシェイク要求の完了に応答して、アクセラレータ５１に転送される。このゲートウェイ転送メモリ１２７へのプリロードは、上記で説明されるプッシュモデルにおいて使用される。いくつかの例では、ゲートウェイ転送メモリ１２７のプリロードは、ＥＳＰクレジットの数がゼロより大きい場合にのみ行われる。
【０１８１】
図１４を参照すると、データの準備と、ゲートウェイ５２とアクセラレータ５１との間でのそのデータの交換と、このデータの処理とがどのように関連するかが示されている。準備及び配備段階は、ゲートウェイ５２によって実行され、演算段階は、アクセラレータ５１によって実行される。データは、関連演算段階前にゲートウェイ５２によって準備される。データは、アクセラレータ５１のできる限り近くに格納される。アクセラレータ５１がデータを受け入れることができ、同期要求５６をゲートウェイ５２に送信することによってそれを示すと、ゲートウェイ５２は、外部への依存性なしで、アクセラレータ５１にリンクされたポートの全容量を使用してデータを配備する。配備されたデータがアクセラレータ５１によって処理されるにつれて、ゲートウェイ５２は、次のデータ配備段階を準備する。エンジンは、すべての利用可能なゲートウェイデータセンタポートにわたってその処理を拡大する。
【０１８２】
ゲートウェイ５２は、ホスト６３又はリモート記憶装置１５１からデータを受信し、追加のゲートウェイによって必要とされるデータの格納及び拡張を実行することができる。このデータは、追加のゲートウェイに転送することができる。次いで、追加のゲートウェイに転送されたデータは、それらの追加のゲートウェイと関連付けられたアクセラレータに提供することができる。これは、ボトルネックの回避に役立てることができる。例えば、各ゲートウェイが独立してリモート記憶装置１５１からデータを回収する代わりに、またそれによりリモート記憶装置１５１へのアクセス時にボトルネックが生じるため、１つのゲートウェイ５２がリモート記憶装置１５１からデータを回収し、前記データを複数のゲートウェイに提供することができる。これにより、リモート記憶装置１５１にアクセスする際のボトルネックの問題に対処することができる。
【０１８３】
ゲートウェイ５２がホスト６３又はリモート記憶装置１５１からデータを受信すると、アクセラレータ５１にこのデータを提供する前に、ゲートウェイ５２は、データを処理する。この処理は、ストリーミングエンジン１２４によって行うことができる。処理は、データ増大（ノイズ注入）、解凍、復号（例えば、ＪＰＥＧフォーマット画像及びＨ２６４フォーマット映像などの画像及び映像データの復号）の１つ又は複数を含み得る。この処理は、上記で論じられる単純アクセラレータプルモデルでは行われない。
【０１８４】
メモリ使用量を最小限に維持するため、データは、ゲートウェイ５２にロードする際に圧縮され、アクセラレータ５１に伝達する前の可能な最も遅い時点で解凍される。ゲートウェイ５２は、特定のタイプの圧縮のための遅延最適化ハードウェア解凍エンジン（図示せず）を提供することができる。加えて、解凍は、任意の圧縮アルゴリズムに対するサポートを広げるために、ゲートウェイソフトウェアにおいて実施することができる。
【０１８５】
ゲートウェイ５２においてデータ増大（例えば、ノイズ注入）を実行することにより、オリジナルのデータは、そのオリジナルのフォーマットで一度格納し、一度フェッチすることができる。次いで、そのデータは、ゲートウェイ５２により、各複製コピーに異なる増大設定を適用して複数のアクセラレータに対して複製することができる。ゲートウェイ５２は、ハードウェアにおいて増大方法のセットを提供し、ゲートウェイソフトウェアが前記増大に対する異なるアルゴリズムを実施する能力を提供する。
【０１８６】
一実施形態では、ストリーミングエンジン１２４は、２つのデータ加速機能を提供する。ストリーミング機能は、複製機能と、複製及び転置機能とを提供する。これにより、訓練データを１つのゲートウェイから他の多くのゲートウェイに対して複製することができ、従ってＩ／Ｏ接続性のニーズが低減される。
【０１８７】
データは、ホスト６３又はリモート記憶装置１５１からゲートウェイ５２において受信され、ＰＰＥ  １２３によってメモリ１１４に格納される（経路１２０をトラバースした後）。ＤＭＥ  １２２は、メモリ１１４から経路１２１に沿って送信される予定のデータを回収し、データをアクセラレータ５１に送信する。データは、メモリ１１４から示されるアクセラレータポートを介してアクセラレータ５１に送信される。経路１２１に沿ったデータ転送は、既に説明したように、同期信号によってトリガされる。
【０１８８】
ゲートウェイ５２は、アクセラレータ５１へのデータの提供（経路１２１上でのデータの転送を伴う）をホスト６３又はリモート記憶装置１５１からのデータの回収と分離できるようにする。換言すれば、ゲートウェイ５２は、アクセラレータ５１によって実行される演算前に、ホスト６３又はリモート記憶装置１５１からのデータの転送を進められるようにする。
【０１８９】
図８は、ゲートウェイ５２とさらなるゲートウェイとの間のデータの交換を可能にする２つのさらなるデータ経路を示す。ゲートウェイ５２は、さらなるゲートウェイ１２８（示されるファブリックポートによってゲートウェイ５２に結合される）を介してアクセラレータ５１（示されるアクセラレータポートによってゲートウェイ５２に結合される）とさらなるアクセラレータ（図示せず）との間でデータを転送することができる経路１２５を含む。ゲートウェイ５２及びさらなるゲートウェイ１２８は、この経路１２５上のスイッチとして動作し、アクセラレータ間のデータ交換ファブリックの拡張を可能にする。さらなるゲートウェイ１２８は、接続されるさらなるホストに／ホストからデータを転送するように構成することができる。この経路１２５に沿ったデータ転送は、ユニキャスト（すなわち、データは、単一のアクセラレータに向けられる）、ブロードキャスト（データは、指定されたアクセラレータに向けられることなく送信される）及びマルチキャスト（データは、複数の指定されたアクセラレータに向けられる）であり得る。ブロードキャストモードでは、ファブリックポート上で送信されるパケットは、マルチキャストグループＩＤを含む。各ゲートウェイは、各マルチキャストグループＩＤに対する送信先のリストを含む表を有する。ゲートウェイがそのようなパケットを受信すると、ゲートウェイは、パケットに含まれるマルチキャストグループＩＤに対応する送信先のリストを表で調べ、それらの送信先にパケットを送信する。
【０１９０】
一実施形態では、ＸＰＵポートは、特殊なデータ移動能力を提供するカスタムルートコンプレックス実装形態である。ゲートウェイメモリ１１４に／ゲートウェイメモリ１１４からパケットを転送することに加えて、ＸＰＵポートは、ファブリックポートへの／ファブリックポートからのピアツーピア能力も提供する。リモートアクセラレータへのメモリ空間マッピングをターゲットとするパケットは、ＸＰＵポートで検出され、適切なファブリックポートに向けられる。受信側のファブリックポートは、正しい送信先のアクセラレータポートにパケットを向ける。また、ゲートウェイは、１つのファブリックポートから別のファブリックポートにパケットを転送することもできる。これにより、任意の大規模なファブリックのトラバースが可能になる。この方法では、ゲートウェイファブリックを通して、完全なアクセラレータ間交換が可能になる。
【０１９１】
また、図８は、ゲートウェイ５２とさらなるゲートウェイとの間でデータを交換するためのデータ経路１２６も示す。データ経路１２６は、ゲートウェイ５２とさらなるゲートウェイ１２８との間の同期及び管理メッセージの交換のために使用される。加えて、データ経路１２６は、ゲートウェイ５２と関連付けられたメモリ１１４と、さらなるゲートウェイ１２８と関連付けられたメモリとの間でデータを交換するために使用される。データ経路１２６を介して交換されるデータは、事前作業命令がＰＰＥ  １２３によって実行される際、事前作業の一部として交換される。
【０１９２】
データは、ＰＰＥ  １２３による事前作業命令の実行に応答して、さらなるゲートウェイ１２８のメモリからメモリ１１４に転送することができる。次いで、このデータは、（例えば、アクセラレータからのＰＣＩｅ読み取り処理による又はＤＭＥ  １２２によるＤＭＯＶ命令の実行による）近々到来するＥＳＰにおけるアクセラレータ５２への転送のために、メモリ１１４において利用可能になる。ＰＰＥ  １２３がそのメモリ１１４へのデータ転送のための事前作業命令の実行を完了すると、ＰＰＥ  １２３は、そのＥＳＰクレジットセットをインクリメントする。
【０１９３】
先に述べたように、同期ゾーン／グループは、複数のゲートウェイを含み得る。そのような例では、関連アクセラレータ５１から受信される同期要求の代わりに又は同期要求のみならず、ゲートウェイ５２において、さらなるゲートウェイ１２８からの同期要求も受信することができる。この例では、この他のゲートウェイ１２８は、「下流ゲートウェイ」と呼ぶことができる。
【０１９４】
ここで、図１５を参照すると、さらなるゲートウェイ１２８と連通するゲートウェイ５２に加えて、第３のゲートウェイ１５２が示されている。さらなるゲートウェイ１２８から同期要求１２９が受信されると、ゲートウェイ５２が同期マスタではない（すなわち、ゲートウェイ５２は、同期スレーブである）例では、ゲートウェイ５２は、上流の第３のゲートウェイに同期要求１５３を送信することにより、同期バリアの通過を認めることができる。同期要求１２９は、最初に、ローカルアクセラレータ（例えば、アクセラレータ５１）から受信された１つ又は複数の同期要求（例えば、同期要求５６）と集約することができる。この例では、上流の第３のゲートウェイに送信されるのは、この集約された同期要求１５３である。
【０１９５】
代わりに、例えば他のゲートウェイ１２８から同期要求１２９が受信したときにゲートウェイ１５２がゲートウェイ５２の同期ゾーンに接続されていない場合、ゲートウェイ５２がマスタゲートウェイである場合には、ゲートウェイ５２は、さらなるゲートウェイ１２８に同期確認応答１５４を送信することにより、同期バリアの通過を認めることができる。ゲートウェイ１２８がマスタゲートウェイである例では、構成された下流のすべてのゲートウェイから同期要求が受信された場合に、ローカルアクセラレータ（例えば、アクセラレータ５１）から受信された同期要求の確認応答も（例えば、確認応答１５５を送信することによって）行われる。
【０１９６】
ゲートウェイ５２によって保持されるＬＳＢＭ  １１８内のＥＳＰクレジットは、ゲートウェイ５２とさらなるゲートウェイ１２８との間で転送する同期要求を制御するために使用することができる。同期要求１５５をゲートウェイ５２に送信するローカルアクセラレータ（例えば、アクセラレータ５１）によってゲートウェイの関与が通知されている例では、アクセラレータ５１とゲートウェイ５２との間のバリアと同様に、ＥＳＰクレジットは、ゲートウェイ５２とさらなるゲートウェイ１２８との間で転送する同期要求を制御するためにのみ使用される。この通知は、先に説明したように、レジスタ５９に格納することができる。同期要求１２９を受信した際、ゲートウェイの関与が示されていない場合、同期要求１５３が上流に送信され、同期確認応答１５４が返信されると、同期バリアを通過したことになる。
【０１９７】
アクセラレータ５１によるゲートウェイの関与が通知されていると仮定すると、ゲートウェイ５２が同期マスタゲートウェイではない（すなわち同期スレーブゲートウェイである）場合、アクセラレータ５１と関連付けられたＥＳＰクレジットの数がゼロではなくゲートウェイ５２が下流のゲートウェイ１２８から同期要求１２９を受信した場合、上流へのバリアを通過する。同期要求１２９は、アクセラレータ５１からの同期要求５６と集約され、上流のゲートウェイ１５２に送信される同期要求１５３を形成する。同期チェーンの各ＬＳＢＭ  １１８内のＥＳＰクレジットは、ゲートウェイの関与を必要とする同期のために同期要求１５３に対応する同期確認応答１５６を受信次第、デクリメントされる。
【０１９８】
アクセラレータ５１によるゲートウェイの関与が示されていると仮定すると、ゲートウェイ５２が同期マスタゲートウェイである場合、アクセラレータ５１と関連付けられたＥＳＰクレジットの数がゼロではなく、ゲートウェイ５２が下流のゲートウェイから同期要求１２９を受信した場合、ゲートウェイ５２は、下流のゲートウェイ１２８及びそれ自体のストリーミングエンジン１２４に同期確認応答１５４を送信する。同期確認応答が受信され次第、ストリーミングエンジン１２４は、ＬＳＢＭ  １１８によって保持されるＥＳＰクレジットの数をデクリメントする。
【０１９９】
このように、ゲートウェイ５２のＬＳＰＭ  １１７は、ＬＳＢＭ  １１８内にＥＳＰクレジットがない場合、他のゲートウェイ（すなわちＬＳＰＭ）への同期要求の伝播を阻止することができる。これにより、同期マスタによって確認応答が最終的に生成された際、すべてのアクセラレータがそれらのスーパーステップの実行を同時に開始することが保証される。
【０２００】
ゲートウェイ５２は、複数のインタフェース（例えば、アクセラレータ５１とのインタフェース、さらなるゲートウェイ１２８とのインタフェース、第３のゲートウェイ１５２とのインタフェース）を含む。ゲートウェイ５２は、同期目的のためにこれらのインタフェースの各々の方向性（すなわちさらなるゲートウェイ１２８などのエンティティがゲートウェイ５２の上流にあるか又は下流にあるか）を示すレジスタを含む。従って、レジスタは、ゲートウェイ５２が下流のエンティティから同期要求を受信することに応答して、ゲートウェイ５２によっていずれのインタフェースに同期要求を送信するかを示す。いずれのインタフェースも同期要求を送信するためのものではないことをレジスタが示す例では、これは、ゲートウェイ５２が同期マスタであることを示す。この例では、ゲートウェイ５２は、同期要求を受信したすべてのインタフェース上において同期確認応答を送信する。
【０２０１】
ゲートウェイ５２がスレーブゲートウェイとして機能する例では、ゲートウェイ５２は、関連付けられたアクセラレータ（例えば、アクセラレータ５１）から１つ又は複数の同期要求を受信することができる。これらの同期要求は、ゲートウェイ５２によって集約され、次いで、ゲートウェイ５２は、それらの同期要求を上流のさらなるゲートウェイ１２８に渡す（同期要求の受信源であるゲートウェイの関与を通知する各ローカルアクセラレータに対してＥＳＰクレジットが利用可能であると仮定する）。さらなるゲートウェイ１２８もスレーブであると仮定すると、そのさらなるゲートウェイは、その要求と、それ自体のローカルアクセラレータからのすべての同期要求とを収集し、次いで新しい集約された同期要求を次のゲートウェイに転送する（同期要求の受信源であるゲートウェイの関与を通知する各ローカルアクセラレータに対してＥＳＰクレジットが利用可能であると仮定する）。これは、同期ネットワークにわたって並列に起こる。最終的に、マスタゲートウェイは、すべての下流のゲートウェイ及びそれ自体の関連アクセラレータから同期要求を受信する。次いで、その時点で初めて同期が完了し、マスタゲートウェイによって同期確認応答が生成され（同期要求の受信源であるゲートウェイの関与を通知する各ローカルアクセラレータに対してＥＳＰクレジットが利用可能であると仮定する）、同期要求の受信源である下流のエンティティ（すなわちローカルアクセラレータ又は下流のゲートウェイ）に送信される。同期確認応答を受信する下流の各ゲートウェイは、同期要求の受信源であるエンティティに同期確認応答を送信する。
【０２０２】
既に述べたように、同期要求は、複数のローカルアクセラレータ（例示的なアクセラレータ５１のみならず）からゲートウェイ５２において受信することができる。各アクセラレータは、異なるＥＳＰクレジットセットと関連付けられる。同期要求の受信源である各アクセラレータに対するすべてのＥＳＰクレジットがゼロではない（及びゲートウェイ関与を示す）場合にのみ、ゲートウェイ５２は、集約された同期要求を上流に渡すか（スレーブである場合）又は同期要求の確認応答を行う（マスタである場合）。
【０２０３】
以前に述べたように、アクセラレータ５１への同期確認応答の送信に続いて、ゲートウェイ５２は、アクセラレータ５１とデータを交換するように構成される。
【０２０４】
図１０を参照すると、ストリーミングエンジン１２４によって実装されるゲートウェイ機能が示されている。ＰＰＥ  １２３は、ＤＭＥ  １２２と並列実行するが、ＤＭＥ  １２２は、ＰＰＥ  １２３の結果に依存するため、ＰＰＥ  １２３は、ＤＭＥ処理がスケジューリングされる前にその結果を提供する必要がある。これは、事前コンパイルされた実行可能イメージにおいて又はアクセラレータ５１からゲートウェイ５２に伝達されたコマンドのユーザプログラムシーケンシングを通して取り扱われる。
【０２０５】
図１０に示されるように、ＰＰＥ  １２３とネットワークスタック１４１との間に位置するモジュール１４２（ＧＤｘＳＭモジュールとして示される）がある。ＧＤｘＳＭモジュール１４２は、２つのモジュール（すなわちＧＷデータインポート同期モジュール（ＧＤＩＳＭ）及びＧＷデータエクスポート同期モジュール（ＧＤＥＳＭ））を含む。両方のモジュールは、ゲートウェイとホストとの間のＩ／Ｏバッファ要素の同期を取り扱う。
【０２０６】
同期は、フロー制御され、ＧＷデータ整合性及び交換同期点（ＥＳＰ）におけるＩ／Ｏ処理の即応性を保証する。
【０２０７】
第１のクレジットセット（既に詳細に論じている）は、ＥＳＰクレジットである。ＥＳＰクレジットは、アクセラレータ５１とゲートウェイ５２との間又はゲートウェイ５２とさらなるゲートウェイ１２８との間の同期バリアの通過を管理する。ＥＳＰクレジットを使用すると、バリアクレジットメカニズムは、ゲートウェイ５２とアクセラレータ５１との間のデータの転送を制御するために使用される。１つのＥＳＰクレジットの利用可能性は、１つのバリアに対してデータ交換処理を実行できることを含意する。
【０２０８】
第２のクレジットセットは、（ホスト６３、リモート記憶装置１５１又はさらなるゲートウェイ１２８から）ゲートウェイ５２へのデータの転送を管理する。これらのクレジットは、ＧＤｘＳＭ  １４２によって格納される。より具体的には、これらのクレジットは、ＧＢｘＳＭ  １４２のＧＤＩＳＭに格納される。第２のクレジットセットは、ＧＤＩＳＭクレジットと呼ぶことができる。当業者であれば、「ＧＤＩＳＭクレジット」という用語が単なる名称であり、クレジットがそれらの本質においてこの名称によって制限されないことを理解するであろう。
【０２０９】
ゲートウェイ５２は、利用可能なＧＤＩＳＭクレジットの数がゼロではないことを決定することに応答して、ホスト６３、リモート記憶装置１５１又はさらなるゲートウェイ１２８からデータを回収するために事前作業命令を実行する。利用可能なＧＤＩＳＭクレジットがゼロであるとゲートウェイ５２が決定した場合、ゲートウェイ５２は、データを回収しない。ホスト６３は、命令を送信するためのＲＤＭＡを使用してＧＤＩＳＭクレジットを更新／インクリメントするための命令を送信する。ストリーミングエンジン１２４がＲＤＭＡ書き込みを介してホスト６３からＧＤＩＳＭクレジットレジスタへの更新に関する通知を受けると、ストリーミングエンジン１２４は、クレジットレジスタを相応に更新する。ゲートウェイ５２は、ＰＰＥ  １２３によって事前作業を完了することに応答して、格納されたＧＤＩＳＭクレジットの数をデクリメントする。事前作業は、外部記憶装置からゲートウェイ５２にデータを転送することである。
【０２１０】
ＧＤＩＳＭクレジット制御メカニズムは、事前作業（ＰＲＷ）命令の実行が早過ぎないようにすることができる。ＧＤＩＳＭは、現在実行しているＥＳＰ前に事前作業（ＰＲＷ）エンジンがどの程度の数のＷＤの作業を行うことができるかを制御する。
【０２１１】
ホスト６３は、ゲートウェイのグループのＧＤＩＳＭクレジットに対して同じクレジット更新を実行するように構成することができる。クレジット更新は、信頼できるブロードキャストを行うために、ＲＤＭＡを使用して及びＲＤＭＡの上でプロトコルを使用して実行される。これは、同期グループが複数のゲートウェイを含む事例において必要であり得る。この事例では、ゲートウェイのグループは、同じ数の利用可能なＧＤＩＳＭクレジットを有する必要があり得、そうでなければアクセラレータの１つが停止し、それによって他のすべてのアクセラレータが停止される。
【０２１２】
いくつかの例では、ＧＤＩＳＭクレジットは、ゲートウェイからホストへのデータの転送を制御するためにも使用される。ゲートウェイ５２から外部記憶装置（例えば、ホスト６３、リモート記憶装置１５１）へのデータの転送を制御するため、外部記憶装置からゲートウェイ５２へのデータの転送のために使用されるものと同じＧＤＩＳＭクレジットセット（すなわち上記で説明される第２のセット）を使用することができる。ゲートウェイ５２が外部記憶装置にデータを送信することに応答して、インポートクレジットとエクスポートクレジットとの両方を表すこれらのＧＤＩＳＭクレジットは、ＰＰＥ  １２３がＷＤ内のそのコマンドを完了するとデクリメントされる。ゲートウェイ１２８は、ＧＤＩＳＭクレジットの数がゼロではない場合にのみ、外部記憶装置にデータを送信する。
【０２１３】
この方法では、ＧＤＩＳＭクレジットは、ＰＲＷ命令のみならずＰＯＷ命令をも抑制するために使用することができる。ＧＤＩＳＭクレジットの数がゼロではない場合、ＰＯＷ命令を実行することはできない。ＧＤＩＳＭクレジットが外部記憶装置へのデータの転送と、外部記憶装置からのデータの転送との両方を制御する例では、所定のＥＳＰに対してすべてのＰＯＷ命令及びＰＲＷ命令が完了した際にのみ、単一のＧＤＩＳＭクレジットが消費される。
【０２１４】
いくつかの例では、第３のクレジットセットは、ゲートウェイ５２からホスト６３又はリモート記憶装置１５１へのデータの転送を管理する。これらのクレジットは、ＧＤｘＳＭ  １４２によって格納される。より具体的には、これらのクレジットは、ＧＢｘＳＭ  １４２のＧＤＥＳＭに格納される。第３のクレジットセットは、ＧＤＥＳＭクレジットと呼ぶことができる。当業者であれば、「ＧＤＥＳＭクレジット」という用語が単なる名称であり、クレジットがそれらの本質においてこの名称によって制限されないことを理解するであろう。
【０２１５】
ゲートウェイ１２８は、ＧＤＥＳＭクレジットの数がゼロではない場合にのみ、外部記憶装置にデータを送信する。ゲートウェイ５２が外部記憶装置にデータを送信することに応答して、ＧＤＥＳＭクレジットは、デクリメントされる。この方法では、ＧＤＥＳＭクレジットは、ＰＯＷ命令を抑制するために使用することができる。ＧＤＥＳＭクレジットの数がゼロではない場合、ＰＯＷ命令を実行することはできない。ゲートウェイ５２は、ＰＯＷ命令の完了に応答して、ＧＤＥＳＭクレジットの数をデクリメントする。
【０２１６】
ホスト６３は、命令を送信するためのＲＤＭＡを使用してＧＤＩＳＭクレジットを更新／インクリメントするための命令を送信する。ストリーミングエンジン１２４がＲＤＭＡライトを介してホスト６３からＧＤＩＳＭクレジットレジスタへの更新に関する通知を受けると、それに従って、ストリーミングエンジン１２４はクレジットレジスタを更新する。
【０２１７】
ＧＤＩＳＭクレジットとＥＳＰクレジットとの間に関係がある。ＧＤＩＳＭクレジットは、１つのスーパーステップに対してホストメモリからゲートウェイメモリ１１４にデータを転送する許可をゲートウェイ５２に与える。ゲートウェイ５２がこのスーパーステップに対するデータをそのメモリ１１４にロードすると、ゲートウェイ５２は、ＧＤＩＳＭクレジットをデクリメントし、ＥＳＰクレジットに１つのクレジットを追加する。ここで、ＬＳＰＭ  １１７及び／又はＬＳＢＭ  １１８はＥＳＰクレジットの数＞０の場合に同期要求の確認応答を行うため、アクセラレータ５１がこのデータに対してプル（任意のプルモデルによるプルを含む）を実行するか、又はゲートウェイ５２がアクセラレータ５１へのデータのプッシュ（任意のプッシュモデルによるプッシュ）を行うことができる。
【０２１８】
図９を参照すると、複数のアクセラレータ１３１、複数のゲートウェイ１３２及び複数のホスト１３３を含むシステム１３０の例が示されている。ゲートウェイ１３２は、互いに通信し合うため、ゲートウェイ１３２は、集合的にイーサネットネットワーク１３４を形成する。ゲートウェイ１３２間の通信は、アクセラレータとホストとの分解を可能にする。換言すれば、システム１３０内のホスト１３３のすべては、いずれのアクセラレータ１３１とも通信することができる。
【０２１９】
図９では、各ゲートウェイ１３２がそれぞれの通信対象のホスト１３３と関連付けられることが示されているが、いくつかの実施形態では、１つのゲートウェイに対して１つのホストが関連付けられるとは限らない。いくつかの実施形態では、図９に示されるゲートウェイ１３２の１つのみがホスト１３３と直接通信することができる。その１つのホスト１３３は、複数のゲートウェイ１３４を制御することができる。ホストに結合されたゲートウェイは、ホストから残りのゲートウェイ１３４にデータを分配することができる。代わりに、複数のゲートウェイ１３４は、リモート記憶装置１５１からデータを回収することができる。
【０２２０】
１つのゲートウェイ１３４のみがホスト１３３と通信する例では、その１つのゲートウェイ１３４は、複数のゲートウェイ１３４のうち、ネットワークインタフェースデバイスを含む唯一のゲートウェイ１３４であり得る。これは、残りのゲートウェイを構築するために必要なコンポーネントの数を低減することにより、コストを低減するという利点を有する。残りのゲートウェイがホストにデータを提供する際、残りのゲートウェイは、ホストと通信するためのネットワークインタフェースデバイスを含むゲートウェイにそのデータを提供する前に、最初にデータに対するデータ拡張オペレーションを実行することができる。
【０２２１】
いくつかの実施形態では、システム１３０に外部のホスト１３３が存在せず、むしろ、ホストシステムは、１つ又は複数のゲートウェイ１３４上で起動する。この事例では、コンパイラは、ゲートウェイ１３４上で起動する。
【０２２２】
いくつかの例では、ゲートウェイ１３２は、ホスト１３３からデータを受信し、このデータを１つ又は複数の他のゲートウェイ１３２に分配する。他の例では、ゲートウェイ１３２のサブセットは、１つ又は複数のホスト１３３からデータを受信し、受信データを１つ又は複数の他のゲートウェイに分配する。１つ又は複数の他のゲートウェイ１３２の各々は、分配データをその関連アクセラレータ１３１に提供することができる。そうすることにより、すべてのゲートウェイ１３２がホスト１３３からデータを受信する必要がなくなる。この事例では、すべてのゲートウェイに全帯域幅を提供する必要がなくなるため、この方法は、コストを低減することができる。また、この方法は、効率を高めることもできる。いくつかの例では、アクセラレータのグループ内の各アクセラレータ１３１は、同一のデータを受信して処理する。この例では、データは、ホスト１３３から一度フェッチするのみでよい。従って、ゲートウェイ１３２は、ホスト１３３から前記データを受信し、このデータのコピーを１つ又は複数のゲートウェイ１３２に分配し、１つ又は複数のゲートウェイ１３２の各々は、それらの関連アクセラレータ１３１にデータを分配するように構成される。従って、ホスト１３３から同じデータを複数回フェッチする必要がないため、効率に対する利得が実現される。加えて、これは、ゲートウェイによるデータ回収のためのリモート記憶装置１５１の使用と組み合わせることができる。回収のためのリモート記憶装置１５１の使用は、コスト低減を達成できること及びゲートウェイが全帯域幅を有し得ることを意味する。ホストは、記憶装置記述子を多くのゲートウェイに送信することができ、多くのゲートウェイは、これらの記述子に基づいて並列に動作し、１つのゲートウェイに対して独立したネットワーク接続上でリモート記憶装置１５１からデータをプル／プッシュすることができる。この技術は、ゲートウェイの数の関数としてＩ／Ｏを拡大する。
【０２２３】
いくつかの例では、ゲートウェイ１３２から１つ又は複数の他のゲートウェイ１３２に分配されたデータは、１つ又は複数の他のゲートウェイ１３２において修正される。例えば、１つ又は複数の他のゲートウェイ１３２は、１つ又は複数の他のゲートウェイ１３２に対するデータ拡張を適用する。このデータ拡張は、それぞれのゲートウェイにおいてＤＭＥによって実行される。１つ又は複数の他のゲートウェイ１３２の各々が受信したデータを修正すると、１つ又は複数の他のゲートウェイ１３２の各々は、修正データをその関連アクセラレータ１３１にプッシュする。
【０２２４】
事前コンパイルされたゲートウェイソフトウェアは、いずれのアクセラレータ５２が、いずれのホストから、ゲートウェイ１３２によってメモリ１１４に保持されたいずれのデータを得るかを指定する。アクセラレータコードのコンパイラは、アクセラレータ間で作業を配分するためにアクセラレータ間でどのようにデータを配分するかを決定する。ゲートウェイ１３２は、各アクセラレータに向けて有する２つのＰＣＩｅポートにわたるＩ／Ｏトラフィックの負荷平衡を保つ。
【０２２５】
システムのゲートウェイ層及びアクセラレータ層は、システムの拡大が可能な方法で複製される。図１２を参照すると、複数のアクセラレータ１６２及び複数のゲートウェイ１６３を含む装置１６１の例が示されている。装置１６１は、マシン１６１と呼ばれる。マシン１６１は、４つのアクセラレータ１６２及び２つのゲートウェイ１６３を含む。また、ゲートウェイ１６３の各々は、１つ又は複数のホスト（図示せず）にも結合される。
【０２２６】
図１３を参照すると、図１２に示されるような複数のマシン１６１を含む装置１７０の例が示されている。複数のマシン１６１は、クラスタ１７１と呼ばれる装置１７１を形成するように配列される。各クラスタ１７１は、最大で４つのマシン１６１を含む。複数のクラスタ１７１は、ポッド１７１と呼ばれる装置１７０を形成するように配列される。各ポッド１７１は、最大で３２個のマシン１６１を含む。この方法でシステムを拡大することにより、結果として得られるポッド１７１は、１２８個のアクセラレータを含み、１６ＰＦＬｏｐｓ及び８ＴＢのＤＲＡＭを有するシステムが生じる。
【０２２７】
図１２及び１３によって示されるこのモデルでは、各ゲートウェイ１６３は、アクセラレータ１６２の２つ以上のグループ間の低遅延ブリッジを提供し、それにより、アクセラレータ１６２は、あたかも同じ内部ファブリック上で接続されるかのように異なるゲートウェイ１６３に取り付けて、互いに通信することができる。パケットは、アクセラレータ１６２からゲートウェイ１６３のＸＰＵポート（図８に示される）において受信される。リモートアクセラレータにマッピングするメモリ空間をターゲットとするパケットは、ＸＰＵポートで検出され、ゲートウェイ１６３の適切なファブリックポート（図８に示される）に向けられる。適切なアクセラレータポートで受信されたパケットは、適切なゲートウェイに転送される。そこから、ゲートウェイは、パケットによってターゲットとされたメモリ空間によって示されるリモートアクセラレータにパケットを転送する。
【０２２８】
各ゲートウェイ１６３は、ＰＣＩｅポートを含む。これらのＰＣＩｅポートの４つは、アクセラレータ１６２に及びアクセラレータ１６２からパケットを渡すように構成される。各ＰＣＩｅポート（図１２に示される）は、異なるアクセラレータ特有のプロトコルを使用するように構成することができる。次いで、カスタムゲートウェイトランザクション層は、そのプロトコルとゲートウェイ内部プロトコルの変換を行う。カスタムゲートウェイ層は、アドレスマップを実装しており、収集及びブロードキャスト／マルチキャストオフロードサポートを提供する。各ゲートウェイ１６３は、アドレスマッピングスキームを提供し、すべての参加アクセラレータ１６２をグローバルアドレス空間に開放する。アクセラレータ１６２からゲートウェイ１６３において受信されたパケットは、ゲートウェイＩＤを含み、それによりパケットがルーティングされる送信先ゲートウェイが識別される。
【０２２９】
グローバルアドレス空間は、ポッド１７０に属するすべてのアクセラレータ１６２及びすべてのゲートウェイ１６３のメモリリソースを包含する。アクセラレータは、グローバルアドレス空間のアドレスを指定するパケットを発送することができる。アドレスの一部は、ターゲットゲートウェイのリソースを選択するために使用される。アドレスの一部は、アドレスされているゲートウェイを識別するために使用される。他の一部は、ゲートウェイメモリ又は関連アクセラレータのタイルメモリのメモリのアドレスを識別するために使用される。アクセラレータのタイルメモリは、タイルインデックス及びメモリオフセットによってアドレス可能である。アドレスは、データパケットのデータが格納されるアクセラレータ内の場所を識別するために、このタイルインデックス及びメモリオフセットを含み得る。
【０２３０】
パケットが受信されると、アドレスにおけるゲートウェイの識別は、このゲートウェイのグローバルＩＤと比較される。マッチすれば、要求は、このゲートウェイに属するリソース（ローカルアクセラレータ又はローカルメモリ）をターゲットとする。そうでなければ、アドレスの一部は、ルーティングテーブルにインデックスを付けるために使用される。ルーティングテーブルのコンテンツは、システムのターゲットポートを示す。パケットをどこにルーティングするかを決定するため、アドレスの一部のビットは、ゲートウェイルーティングテーブルと照合させる。
【０２３１】
進入パケットパイプラインは、必要な機能を実装するために必要なパイプライン段階以外にはバッファリングなしのカットスルーパイプラインであることが意図される。パケットは、最初に、マルチキャスト／ブロードキャスト、収集及びユニキャスト／メモリ書き込みなど、タイプ別に分類される。次いで、これらのパケットは、処理のために個々のブロックに分けられる。ゲートウェイ５２は、ユニキャストパケットを処理するためのユニキャストモジュールと、マルチキャスト分類テーブルとを含み得る。ユニキャストパケットルーティングテーブルは、ゲートウェイ５２により、ユニキャストパケット（すなわち単一のアクセラレータに向けられたもの）のルーティングを実行するために使用される。受信アドレスは、復号され、選択されたビットは、送信先を決定するために使用される。これは、２ステッププロセスであり、最初にゲートウェイＩＤビットを使用して、このパケットがこのゲートウェイをターゲットとするかどうかを判断する。このパケットがこのゲートウェイをターゲットとしない場合、ゲートウェイＩＤビットを使用して、ルーティングテーブル（このパケットに対する出力ファブリックポートを返すもの）にインデックスを付ける。
【０２３２】
パケットがゲートウェイ５２をターゲットとしている場合、パケットアドレスのローカルアドレスビットを使用して、複数の領域からなるローカルゲートウェイベースアドレスレジスタ（ＢＡＲ）のセット（すなわちゲートウェイメモリに対して１つのＢＡＲ及び各アクセラレータポートに対して１つのＢＡＲ）を調べる。パケットがゲートウェイメモリ（例えば、メモリ１１４）に格納するためのものであることをローカルアドレスビットが示す場合、パケットは、ゲートウェイメモリに対するＢＡＲのアドレスに従ってゲートウェイメモリに格納される。パケットがアクセラレータに伝達するためのものであることをローカルアドレスビットが示す場合、パケットは、ゲートウェイ５２のＤＭＥ  １２２に転送される。そこから、データパケットは、関連アクセラレータポートに対するＢＡＲのアドレスに従ってアクセラレータに転送することができる。
【０２３３】
マルチキャスト／ブロードキャストサービスを指定するパケットは、マルチキャストグループテーブルで処理される。各ファブリックポートは、各グループに対するコピーを得るポート（ブロードキャストを含む）のリストを伴うそれ自体の表を有する。送信先の３つのセットがある。第１に、パケットがゲートウェイと同じｖＦａｂｒｉｃに属する場合且つその場合に限り、パケットは、ローカルアクセラレータに送信される。第２に、すべての受信ブロードキャスト／マルチキャストパケットは、転送しなければならないかどうかを確かめるために、ファブリックテーブルと照合してチェックされる。第３に、コピーがローカルＤＲＡＭに送信される。送信先ポートベクトルが構築された時点で、ベクトル及びパケットは、スイッチ相互接続に転送され、スイッチ相互接続は、複製サービスを提供する。
【図１】
2021529488.tif 000003
【図２】
2021529488.tif 000004
【図３】
2021529488.tif 000005
【図４】
2021529488.tif 000006
【図５】
2021529488.tif 000007
【図６】
2021529488.tif 000008
【図７】
2021529488.tif 000009
【図８】
2021529488.tif 000010
【図９】
2021529488.tif 000011
【図１０】
2021529488.tif 000012
【図１１】
2021529488.tif 000013
【図１２】
2021529488.tif 000014
【図１３】
2021529488.tif 000015
【図１４】
2021529488.tif 000016
【図１５】
2021529488.tif 000017
【国際調査報告】
2021529488.tif 000018
2021529488.tif 000019
2021529488.tif 000020