(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-12-23
(45)【発行日】2025-01-07
(54)【発明の名称】ネットワーク上におけるホストとアクセラレータとの間の通信
(51)【国際特許分類】
G06F 9/52 20060101AFI20241224BHJP
【FI】
G06F9/52 150A
(21)【出願番号】P 2023502602
(86)(22)【出願日】2020-12-22
(86)【国際出願番号】 EP2020087563
(87)【国際公開番号】W WO2022012770
(87)【国際公開日】2022-01-20
【審査請求日】2023-03-10
(32)【優先日】2020-07-14
(33)【優先権主張国・地域又は機関】GB
(73)【特許権者】
【識別番号】518371892
【氏名又は名称】グラフコアー リミテッド
【氏名又は名称原語表記】Graphcore Limited
【住所又は居所原語表記】11-19 Wine Street,Bristol,BS1 2PH,United Kingdom
(74)【代理人】
【識別番号】100169904
【氏名又は名称】村井 康司
(74)【代理人】
【識別番号】100221372
【氏名又は名称】岡崎 信治
(72)【発明者】
【氏名】オラ トルドゥバッケン
(72)【発明者】
【氏名】ウェイ リン グウェイ
【審査官】漆原 孝治
(56)【参考文献】
【文献】米国特許出願公開第2020/0012537(US,A1)
【文献】国際公開第2020/007738(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/52
(57)【特許請求の範囲】
【請求項1】
複数のサブシステムの各々において実行されるローカルプログラムに従ってホストシステムに対するワークアクセラレータとして動作するする複数のサブシステムとネットワークを介して接続されるように構成されたホストシステムであって、
前記ホストシステムは、少なくとも1つのプロセッサと、コンピュータ可読命令を格納する少なくとも1つのメモリとを含み、
前記ホストシステムの少なくとも1つのプロセッサは、ローカルプログラムのセットをコンパイルするために前記コンピュータ可読命令を実行するように構成され、各ローカルプログラムは、複数のサブシステムのうちの1つにおいて実行されるものであり、ソースコードをコンパイルするステップは、同期グループのセットを定義することを含み、各同期グループは、前記サブシステムの少なくともいくつかを含み、
各ローカルプログラムは、
前記サブシステムの少なくとも1つのプロセッサによって実行される際に、前記サブシステムの複数の演算フェーズのうちの1つ又は複数の間に演算動作を実行するための演算命令セットと、
前記サブシステムの少なくとも1つのプロセッサによって実行される際に、前記ローカルプログラムの実行における事前に定義された時点において複数のバリア同期を実行するためのデータ転送命令セットを含み、前記バリア同期の少なくともいくつかは、前記同期グループのうちの1つの間で定義され、前記バリア同期の少なくとも1つは、ホストの関与を必要とする同期であり、ホストの関与を必要とする同期に続いて、
データ転送のイニシエーターが前記サブシステムによってホストシステムに提供されることに応答して、前記サブシステムと前記ホストシステムとの間でデータ交換が実行され、
ホストシステムの少なくとも1つのプロセッサは、
受信されたデータ転送のイニシエーターの各々に応答して、
前記イニシエーターの提供元である前記サブシステムのうちの1つと前記ネットワーク上でデータを交換するように構成される、
ホストシステム。
【請求項2】
前記
イニシエーターの提供元である前記サブシステムのうちの1つとの前記ネットワーク上でのデータの交換が、リモートダイレクトメモリアクセスを使用して行われる、請求項1に記載のホストシステム。
【請求項3】
前記サブシステムと前記ホストシステムとの間のデータ伝送は、RDMAを用いて実行される、請求項1又は2に記載のホストシステム。
【請求項4】
前記
イニシエーターの提供元である前記サブシステムのうちの1つと前記ネットワーク上でデータを交換するステップは、
ホストシステムのバッファの少なくとも一部を、
前記イニシエーターの提供元である前記サブシステムのうちの1つがアクセスすることができるネットワークインタフェースデバイスのバッファの少なくとも一部と同期させることを含む、請求項1~3のいずれか一項に記載のホストシステム。
【請求項5】
受信されたデータ転送のイニシエーターの各々は、前記ホストシステムと
識別子の提供元である前記サブシステムのうちの前記1つとの間のストリームの識別子を含み、
前記識別子の提供元である前記サブシステムのうちの1つと前記ネットワーク上でデータを交換する前記ステップは、それぞれの識別されたストリームに属するデータを送信する及び/又は受信することを含む、請求項1~4のいずれか一項に記載のホストシステム。
【請求項6】
前記ホストシステムのバッファの少なくとも一部は、識別されたストリームと関連付けられたバッファの一部を含み、
受信されたデータ転送のイニシエーターの各々は、前記ホストシステムと識別子の提供元である前記サブシステムのうちの前記1つとの間のストリームの識別子を含み、
前記識別子の提供元である前記サブシステムのうちの1つがアクセスすることができるネットワークインタフェースデバイスのバッファの少なくとも一部が、識別されたストリームと関連付けられたバッファの一部を含む、請求項
4に記載のホストシステム。
【請求項7】
前記
イニシエーターの提供元である前記サブシステムのうちの1つと前記ネットワーク上でデータを交換する前記ステップは、
前記
イニシエーターの提供元である前記サブシステムの前記ローカルプログラムにおいて定義される複数のバリア同期のうちの1つの前に、そのサブシステムがアクセスすることができるネットワークインタフェースデバイスにデータを送信することと、
前記
イニシエーターの提供元である前記サブシステムの前記ローカルプログラムにおいて定義される複数のバリア同期のうちの前記1つに続いて、そのサブシステムがアクセスすることができる前記ネットワークインタフェースデバイスからデータを受信することと、
を含む、請求項1~6のいずれか一項に記載のホストシステム。
【請求項8】
前記ホストシステムの少なくとも1つのプロセッサは、前記ローカルプログラムの各々を前記ネットワーク上でそれぞれのサブシステムに発送することを行わせるように構成される、請求項1~7のいずれか一項に記載のホストシステム。
【請求項9】
ホストシステムとネットワークを介して接続されるように構成されたサブシステムであって、
前記サブシステムの少なくとも1つのプロセッサ上で実行されるローカルプログラムに従って前記ホストシステムに対するワークアクセラレータとして動作するように構成され、
前記ネットワーク上で前記ホストシステムから前記ローカルプログラムを受信するように構成されたインタフェースを含み、
前記ローカルプログラムは、
同期グループのセットの表示であって、前記同期グループの少なくともいくつかが、前記サブシステム及びホストに対するアクセラレータとして動作するための1つ又は複数のさらなるサブシステムを含む、同期グループのセットの表示と、
少なくとも1つのプロセッサによって実行される際に、前記サブシステムの複数の演算フェーズのうちの1つ又は複数の間に複数の演算動作を実行するための演算命令セットと、
少なくとも1つのプロセッサによって実行される際に、それぞれのローカルプログラムの実行における事前に定義された時点において複数のバリア同期を実行するためのデータ転送命令セットと、を含み、
前記バリア同期の少なくともいくつかは、前記同期グループのうちの1つのサブシステム間で定義され、前記バリア同期の少なくとも1つが、ホストの関与を必要とする同期であり、ホストの関与を必要とする同期に続いて、前記サブシステムによって前記ホストシステムにデータ転送の
イニシエーターを送信することに続いて、前記ネットワーク上で
、データ転送のイニシエーターの送信元であるサブシステムと前記ホストシステムとの間でデータ交換が実行される、
サブシステム。
【請求項10】
前記サブシステムと前記ホストシステムとの間の前記データ交換は、リモートダイレクトメモリアクセスを使用して行われる、請求項9に記載のサブシステム。
【請求項11】
前記サブシステムと前記ホストシステムとの間のデータ交換は、RDMAを用いて実行される、請求項9又は10に記載のサブシステム。
【請求項12】
前記サブシステムと前記ホストシステムとの間のデータ交換は、
少なくとも1つのプロセッサがサブシステム用のネットワークインタフェースデバイスのバッファとのデータ交換を行わせることを含み、
前記バッファの少なくとも一部は、前記ホストシステムの前記バッファの少なくとも一部と同期される、請求項9~11のいずれか一項に記載のサブシステム。
【請求項13】
データ転送の前記
イニシエーターは、前記サブシステムと前記ホストシステムとの間のストリームの識別子を含み、
前記サブシステムと前記ホストシステムとの間のデータ交換は、それぞれの識別されたストリームに属するデータを交換することを含む、請求項9~12のいずれか一項に記載のサブシステム。
【請求項14】
ネットワークインタフェースデバイスのバッファの少なくとも一部が、識別されたストリームと関連付けられたバッファの一部を含む、請求項12に従属する時に請求項13に記載のサブシステム。
【請求項15】
前記サブシステムと前記ホストシステムとの間のデータ交換が、
前記
イニシエーターの送信元である前記サブシステムの前記ローカルプログラムにおいて定義される複数のバリア同期のうちの1つの前に、そのサブシステムがアクセスすることができるネットワークインタフェースデバイスにデータを送信することと、
前記
イニシエーターの送信元である前記サブシステムの前記ローカルプログラムにおいて定義される複数のバリア同期のうちの1つに続いて、そのサブシステムがアクセスすることができる前記ネットワークインタフェースデバイスからデータを受信することと、
を含む、請求項9~14のいずれか一項に記載のサブシステム。
【請求項16】
前記インタフェースは、前記ネットワーク上で前記ホストシステムから前記ローカルプログラムを受信するように構成される、請求項9~15のいずれか一項に記載のサブシステム。
【請求項17】
ホストシステムにおいて実施される方法であって、
複数のサブシステムの各々において実行されるローカルプログラムに従って前記ホストシステムに対するワークアクセラレータとして動作する複数のサブシステムとネットワークを介して接続することを含み、
複数のサブシステムのうちの1つにおいて実行されるローカルプログラムのセットをコンパイルすることを含み、
ソースコードをコンパイルするステップは、少なくともいくつかのサブシステムを含む同期グループのセットを定義することを含み、
各ローカルプログラムは、
前記サブシステムの少なくとも1つのプロセッサによって実行される際に、前記サブシステムの複数の演算フェーズのうちの1つ又は複数の間に演算動作を実行するための演算命令セットと、
前記サブシステムの少なくとも1つのプロセッサによって実行される際に、前記ローカルプログラムの実行における事前に定義された時点において複数のバリア同期を実行するためのデータ転送命令セットを含み、前記バリア同期の少なくともいくつかは、前記同期グループのうちの1つのサブシステム間で定義され、前記バリア同期の少なくとも1つは、ホストの関与を必要とする同期であり、ホストの関与を必要とする同期に続いて、データ転送の
イニシエーターが前記サブシステムによって前記ホストシステムに提供されることに応答して、前記サブシステムと前記ホストシステムとの間でデータ交換が実行され、
受信されたデータ転送のイニシエーターの各々に応答して、
前記イニシエーターの提供元である前記サブシステムのうちの1つと前記ネットワーク上でデータを交換することを含む、
方法。
【請求項18】
ホストシステムの少なくとも1つのプロセッサに請求項17に記載の方法を実行させるコンピュータプログラム。
【請求項19】
ホストシステム用のサブシステムにおいて実施される方法であって、
ホストシステムとネットワークを介して接続することと、
前記ネットワーク上で前記ホストシステムからローカルプログラムを受信することと、
前記サブシステムの少なくとも1つのプロセッサ上で実行され、前記サブシステム及びホストに対するアクセラレータとして動作するための1つ又は複数のさらなるサブシステムを含む同期グループのセットの表示を含むローカルプログラムに従って、前記ホストシステムに対するワークアクセラレータとして動作することと、
前記サブシステムの複数の演算フェーズのうちの1つ又は複数の間に演算動作を実行するために前記ローカルプログラムの演算命令を実行することと、
前記ローカルプログラムの実行における事前に定義された時点において、前記同期グループのうちの1つのサブシステム間で定義されホストの関与を必要とする同期である複数のバリア同期を実行するために、前記ローカルプログラムのデータ転送命令を実行することと、
ホストの関与を必要とする同期に続いて、前記サブシステムによって前記ホストシステムにデータ転送の
イニシエーターを送信することに続いて、前記ネットワーク上で
、データ転送のイニシエーターの送信元であるサブシステムと前記ホストシステムとデータ交換を実行することと、
を含む、方法。
【請求項20】
サブシステムの少なくとも1つのプロセッサに請求項19に記載の方法を実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本出願は、ネットワーク上で通信するホストシステムと処理ユニットに関する。
【背景技術】
【0002】
複雑な又は大量のアプリケーションに対するデータ処理の文脈では、ワークアクセラレータは、あるデータの処理がホストシステムからオフロードされたサブシステムであり得る。そのようなワークアクセラレータは、特定のタイプの処理の実行に特化したハードウェアを有し得る。
【0003】
例として、そのような特化したアクセラレータサブシステムが有用であり得るコンピューティングの一分野は、機械知能において見られる。機械知能の分野の当業者によく知られているように、機械知能アルゴリズムは、複数の相互接続ノードのグラフによって表すことができる「知識モデル」の反復更新の実行を中心とする。各ノードの実装は、データの処理を伴い、グラフの相互接続は、ノード間で交換されるデータに相当する。典型的には、各ノードの処理の少なくともいくつかは、グラフの他のノードのいくつか又はすべてから独立して行うことができ、従って、大規模なグラフは、マルチスレッディングの絶好の機会に触れる。従って、機械知能アプリケーションに特化したワークアクセラレータは、膨大なマルチスレッディングを含み得る。並列処理の一形態は、同じチップ(すなわち、同じダイ)上に複数のタイルの配列を含むプロセッサによって達成することができ、各タイルは、別個の処理ユニット並びにメモリ(プログラムメモリ及びデータメモリを含む)を含む。従って、プログラムコードの別個の部分は、異なるタイル上で並列に実行できる。タイルは、オンチップ相互接続部を介して互いに接続され、それにより、タイル間でのデータの交換が可能になる。そのようなアクセラレータは、提供されるデータセットの並列処理を実行するために、ホストシステム用のサブシステムとして機能し得る。
【0004】
一般に、異なるタイル上で実行されているプログラムの部分間の依存性が存在し得る。従って、先に実行されているあるタイル上のコード片の依存データが、別のタイル上の別のコード片によって利用できるようになるのを防ぐための技法が必要とされる。これを達成するための可能なスキームが多く存在し、本明細書では、その1つであるバルク同期並列(「BSP」)が例として説明される。BSPによれば、各タイルは、交互サイクルで演算フェーズと交換フェーズを実行する。演算フェーズの間、各タイルは、タイル上で局所的に1つ又は複数の演算タスクを実行するが、他のいかなるタイルともその演算の結果を通信することはない。交換フェーズでは、各タイルは、先行する演算フェーズからの演算の1つ又は複数の結果をグループの1つ又は複数の他のタイルと交換できるが、次の演算フェーズには未だ進まない。さらに、BSP原理によれば、バリア同期は、演算フェーズから交換フェーズに移行する接合点、交換フェーズから演算フェーズに移行する接合点又はその両方に配置される。すなわち、(a)グループのいずれかのタイルが次の交換フェーズに進めるようになる前に、すべてのタイルがそれらのそれぞれの演算フェーズを完了する必要があるか、(b)グループのいずれかのタイルが次の演算フェーズに進めるようになる前に、グループのすべてのタイルがそれらのそれぞれの交換フェーズを完了する必要があるか、又は、(c)その両方であるかのいずれかである。いくつかのシナリオでは、演算を実行しているタイルは、グループの他のタイルとの通信を伴わない限り、ネットワークカード又は記憶ディスクなどの他のシステム資源と通信することができる。
【0005】
交換フェーズの間、データ交換は、アクセラレータ内で内部的に(すなわち、タイル間で)起こるのみならず、いくつかの状況では、アクセラレータとさらなるアクセラレータとの間又はアクセラレータとホストシステムとの間で起こる必要もあり得る。サブシステムがワークアクセラレータとしての働きをする際、サブシステムは、(例えば、ホストシステムから又は拡張システムの記憶装置の別の形態から)提供されるデータセットを処理するように構成される。
【発明の概要】
【発明が解決しようとする課題】
【0006】
ホストから1つ又は複数のサブシステムに作業負荷を提供するため、ホストは、PCIeインタフェース上でそれらのサブシステムにローカル接続することができる。これにより、低いレイテンシでのホストと1つ又は複数のサブシステムとの間のデータ転送が可能になる。しかし、問題の1つは、PCIe接続上でホストが直接接続することができるサブシステムの数が限られるということである。従って、より大規模なアプリケーションを実行するためにサブシステムの数の拡大を試みる上で、それらのサブシステムとホストとの間のデータ交換を達成する方法に問題があるため、いくつかの課題が提示される。
【課題を解決するための手段】
【0007】
より大規模なアプリケーションを処理するには、ワークアクセラレータとしての働きをすることができるさらに多くのアクセラレータサブシステムをホストに互いに接続することが望ましい。これを達成するための提案の1つは、ネットワーク上でホストをアクセラレータサブシステムに接続することである。ホストデバイスがサブシステムによって実行された演算からの結果を受信する動作と、それに応答して、さらなる作業負荷をサブシステムに提供する動作との間には遅延がある。これは特に、それらの作業負荷が他のサブシステムによって出力された結果に依存し得る際に当てはまる。いくつかの事例では、ホストは、あるサブシステムから結果を受信し、別のサブシステムに結果を提供しなければならない。
【0008】
第1の態様によれば、1つ又は複数のサブシステムの各々において実行されるローカルプログラムに従ってホストシステムに対するワークアクセラレータとして動作する複数のサブシステムとネットワークを介して接続されるように構成されたホストシステムであって、ホストシステムは、少なくとも1つのプロセッサと、コンピュータ可読命令を格納する少なくとも1つのメモリとを含み、ホストシステムの少なくとも1つのプロセッサは、ローカルプログラムのセットをコンパイルするためにコンピュータ可読命令を実行するように構成され、各ローカルプログラムは、1つ又は複数のサブシステムの各々において実行されるものであり、ソースコードをコンパイルするステップは、同期グループのセットを定義することを含み、各同期グループは、サブシステムの少なくともいくつかを含み、各ローカルプログラムは、それぞれのサブシステムの少なくとも1つのプロセッサによって実行される際に、サブシステムの複数の演算フェーズのうちの1つ又は複数の間に演算動作を実行するための演算命令セットと、サブシステムの少なくとも1つのプロセッサによって実行される際に、ローカルプログラムの実行における事前に定義された時点において複数のバリア同期を実行するためのデータ転送命令セットを含み、バリア同期の少なくともいくつかの各々は、同期グループのうちの1つの間で定義され、バリア同期の少なくとも1つは、ホストの関与を必要とする同期であり、ホストの関与を必要とする同期に続いて、データ転送のイニシエーターがそれぞれのサブシステムによってホストシステムに提供されることに応答して、それぞれのサブシステムとホストシステムとの間でデータ交換が実行され、ホストシステムの少なくとも1つのプロセッサは、データ転送の受信されたイニシエーターの各々に応答して、識別子の提供元であるサブシステムのうちの1つとネットワーク上でデータを交換するように構成される、ホストシステムが提供される。
【0009】
ホスト上で同期動作を定義し、次いで、その情報をサブシステムに提供することにより、ホストは、大多数のサブシステムへのサービス提供を行うことができる。同期動作の定義は、同期バリアが生じる同期グループの定義と、プログラム実行の間のホストとのデータ交換が起こる時点の定義とを含む。サブシステム間の同期動作を定義することにより、ホストとの必要な交換を最小限に抑えながら、大多数のサブシステムを接続することができる。
【0010】
いくつかの実施形態では、識別子の提供元であるサブシステムのうちの1つとのネットワーク上でのデータの交換は、リモートダイレクトメモリアクセスを使用して行われる。
【0011】
いくつかの実施形態では、ネットワークは、イーサネット(登録商標)ネットワークである。
【0012】
いくつかの実施形態では、識別子の提供元であるサブシステムのうちの1つとネットワーク上でデータを交換するステップは、ホストシステムのバッファの少なくとも一部を、識別子の提供元であるサブシステムのうちの1つがアクセスすることができるネットワークインタフェースデバイスのバッファの少なくとも一部と同期させることを含む。
【0013】
いくつかの実施形態では、データ転送の受信されたイニシエーターの各々は、ホストサブシステムと識別子の提供元であるサブシステムのうちの1つとの間のストリームの識別子を含み、識別子の提供元であるサブシステムのうちの1つとネットワーク上でデータを交換するステップは、それぞれの識別されたストリームに属するデータを送信する及び/又は受信することを含む。
【0014】
いくつかの実施形態では、ホストシステムのバッファの少なくとも一部は、識別されたストリームと関連付けられたバッファの一部を含み、識別子の提供元であるサブシステムのうちの1つがアクセスすることができるネットワークインタフェースデバイスのバッファの少なくとも一部は、識別されたストリームと関連付けられたバッファの一部を含む。
【0015】
いくつかの実施形態では、識別子の提供元であるサブシステムのうちの1つとネットワーク上でデータを交換するステップは、識別子の提供元であるサブシステムのローカルプログラムにおいて定義される複数のバリア同期のうちの1つの前に、そのサブシステムがアクセスすることができるネットワークインタフェースデバイスにデータを送信することと、識別子の提供元であるサブシステムのローカルプログラムにおいて定義される複数のバリア同期のうちの1つに続いて、そのサブシステムがアクセスすることができるネットワークインタフェースデバイスからデータを受信することを含む。
【0016】
いくつかの実施形態では、ホストシステムの少なくとも1つのプロセッサは、ローカルプログラムの各々をネットワーク上でそれぞれのサブシステムに発送することを行わせるように構成される。
【0017】
第2の態様によれば、ホストシステムとネットワークを介して接続されるように構成されたサブシステムであって、サブシステムの少なくとも1つのプロセッサ上で実行されるローカルプログラムに従ってホストシステムに対するワークアクセラレータとして動作するように構成され、ネットワーク上でホストシステムからローカルプログラムを受信するように構成されたインタフェースを含み、ローカルプログラムは、同期グループのセットの表示であって、同期グループの少なくともいくつかが、サブシステム及びホストに対するアクセラレータとして動作するための1つ又は複数のさらなるサブシステムを含む、同期グループのセットの表示と、少なくとも1つのプロセッサによって実行される際に、サブシステムの複数の演算フェーズのうちの1つ又は複数の間に複数の演算動作を実行するための演算命令セットと、少なくとも1つのプロセッサによって実行される際に、それぞれのローカルプログラムの実行における事前に定義された時点において複数のバリア同期を実行するためのデータ転送命令セットと、を含み、バリア同期の少なくともいくつかは、同期グループのうちの1つのサブシステム間で定義され、バリア同期の少なくとも1つは、ホストの関与を必要とする同期であり、ホストの関与を必要とする同期に続いて、サブシステムによってホストシステムにデータ転送のイニシエーターを送信することに続いて、ネットワーク上でサブシステムとホストシステムとの間でデータ交換が実行される、サブシステムが提供される。
【0018】
いくつかの実施形態では、サブシステムとホストシステムとの間のデータ交換は、リモートダイレクトメモリアクセスを使用して行われる。
【0019】
いくつかの実施形態では、ネットワークは、イーサネット(登録商標)ネットワークである。
【0020】
いくつかの実施形態では、サブシステムとホストシステムとの間のデータ交換は、少なくとも1つのプロセッサがサブシステム用のネットワークインタフェースデバイスのバッファとのデータ交換を行わせることを含み、バッファの少なくとも一部は、ホストシステムのバッファの少なくとも一部と同期される。
【0021】
いくつかの実施形態では、データ転送のイニシエーターは、サブシステムとホストサブシステムとの間のストリームの識別子を含み、サブシステムとホストシステムとの間のデータ交換は、それぞれの識別されたストリームに属するデータを交換することを含む。
【0022】
いくつかの実施形態では、ネットワークインタフェースデバイスのバッファの少なくとも一部は、識別されたストリームと関連付けられたバッファの一部を含む。
【0023】
いくつかの実施形態では、サブシステムとホストシステムとの間のデータ交換は、識別子の送信元であるサブシステムのローカルプログラムにおいて定義される複数のバリア同期のうちの1つの前に、そのサブシステムがアクセスすることができるネットワークインタフェースデバイスにデータを送信することと、識別子の送信元であるサブシステムのローカルプログラムにおいて定義される複数のバリア同期のうちの1つに続いて、そのサブシステムがアクセスすることができるネットワークインタフェースデバイスからデータを受信することとを含む。
【0024】
いくつかの実施形態では、インタフェースは、ネットワーク上でホストシステムからローカルプログラムを受信するように構成される。
【0025】
第3の態様によれば、ホストシステムにおいて実施される方法であって、1つ又は複数のサブシステムの各々において実行されるローカルプログラムに従ってホストシステムに対するワークアクセラレータとして動作する複数のサブシステムとネットワークを介して接続することを含み、1つ又は複数のサブシステムの各々において実行されるローカルプログラムセットをコンパイルすることを含み、ソースコードをコンパイルするステップは、少なくともいくつかのサブシステムを含む同期グループのセットを定義することを含み、各ローカルプログラムは、サブシステムの少なくとも1つのプロセッサによって実行される際に、サブシステムの複数の演算フェーズのうちの1つ又は複数の間に演算動作を実行するための演算命令セットと、サブシステムの少なくとも1つのプロセッサによって実行される際に、ローカルプログラムの実行における事前に定義された時点において複数のバリア同期を実行するためのデータ転送命令セットと、を含み、バリア同期の少なくともいくつかは、同期グループのうちの1つのサブシステム間で定義され、バリア同期の少なくとも1つは、ホストの関与を必要とする同期であり、ホストの関与を必要とする同期に続いて、データ転送のイニシエーターがそれぞれのサブシステムによってホストシステムに提供されることに応答して、それぞれのサブシステムとホストシステムとの間でデータ交換が実行され、データ転送の受信されたイニシエーターの各々に応答して、識別子の提供元であるサブシステムのうちの1つとネットワーク上でデータを交換することを含む、方法が提供される。
【0026】
第4の態様によれば、ホストシステムの少なくとも1つのプロセッサに第3の態様による方法を実行させるコンピュータプログラムが提供される。
【0027】
第5の態様によれば、第4の態様によるコンピュータプログラムを格納する非一時的なコンピュータ可読媒体が提供される。
【0028】
第6の態様によれば、ホストシステム用のサブシステムにおいて実施される方法であって、ホストシステムとネットワークを介して接続することと、ネットワーク上でホストシステムからローカルプログラムを受信することと、サブシステムの少なくとも1つのプロセッサ上で実行され、サブシステム及びホストに対するアクセラレータとして動作するための1つ又は複数のさらなるサブシステムを含む同期グループのセットの表示を含むローカルプログラムに従って、ホストシステムに対するワークアクセラレータとして動作することと、サブシステムの複数の演算フェーズのうちの1つ又は複数の間に演算動作を実行するためにローカルプログラムの演算命令を実行することと、ローカルプログラムの実行における事前に定義された時点において、同期グループのうちの1つのサブシステム間で定義されホストの関与を必要とする同期である複数のバリア同期を実行するために、ローカルプログラムのデータ転送命令を実行することとを含み、ホストの関与を必要とする同期に続いて、サブシステムによってホストシステムにデータ転送のイニシエーターを送信することに続いて、ネットワーク上でそれぞれのサブシステムとホストシステムとの間でデータ交換が実行される、方法が提供される。
【0029】
第7の態様によれば、サブシステムの少なくとも1つのプロセッサに第6の態様による方法を実行させるコンピュータプログラムが提供される。
【0030】
第8の態様によれば、第7の態様によるコンピュータプログラムを格納する非一時的なコンピュータ可読媒体が提供される。
【0031】
本発明をより良く理解するため及び本発明をどのように実施できるかを示すため、ここでは、例として、添付の図を参照する。
【図面の簡単な説明】
【0032】
【
図1】複数のタイルを含むプロセッサチップの概略ブロック図である。
【
図2】バルク同期並列(BSP)演算モデルの概略図である。
【
図5】外部同期のための同期要求及び確認応答の交換の概略図である。
【
図6B】ホスト同期プロキシを伴うプログラムフローを概略的に示す。
【
図7】ネットワークを介してホストシステムと通信する2つのアクセラレータ及び1つのゲートウェイの概略図である。
【
図8】ネットワークを介してホストシステムと通信するさらに多くのアクセラレータ及びゲートウェイの概略図である。
【
図9】アクセラレータサブシステムとホストとの間でデータ交換が実行されるシステムのさらなる概略図である。
【
図10】ゲートウェイを介するホストとアクセラレータとの間のメッセージの交換を示すメッセージシーケンス図である。
【発明を実施するための形態】
【0033】
この出願は、処理ユニット上での実行のためにホストシステムがローカルプログラムセットのコンパイル及び転送を行う方法及びシステムに関する。処理ユニットは、互いに同期し、コンパイル済みのコードに挿入された事前に定義された時点において、ホストとデータを交換する。実施形態が実装される処理ユニットの例を最初に説明する。
【0034】
図1を参照すると、
図1は、例示的な処理ユニット2を示している。この例示的な処理ユニット2は、マルチタイル処理ユニット2である。処理ユニット2は、その内容が参照により組み込まれる、我々の先の米国特許出願第16/538980号明細書で説明されている知能処理ユニット(IPU)であり得る。IPUの各々は、別個の集積回路上に形成される。
【0035】
処理ユニット2は、複数のプロセッサタイル4のアレイ6と、タイル4間を接続する相互接続部34とを含む。処理ユニット2は、同じICパッケージにパッケージ化された複数のダイのうちの1つとして単独で実装することができる。相互接続部34は、本明細書では、タイル4がデータを交換できるようにするためのものであるため、「交換ファブリック」34と呼ぶこともできる。各タイル4は、実行ユニット及びメモリのそれぞれのインスタンスを含む。例えば、例示として、処理ユニット2は、何百ものタイル4又は千をも超えるタイル4を含み得る。完全を期すため、本明細書で言及される「アレイ」は、必ずしも特定の次元数又は物理的なレイアウトのタイル4を含意するとは限らないことも留意されたい。
【0036】
実施形態では、各処理ユニット2は、1つ又は複数の外部のリンク8も含み、処理ユニット2を1つ又は複数の他の処理ユニット(例えば、同じ処理ユニット2の1つ又は複数の他のインスタンス)に接続できるようにする。これらの外部のリンク8は、処理ユニット2をホストシステムに接続するための1つ又は複数の処理ユニット・ホスト間リンク、並びに/或いは、同じICパッケージ若しくはカード上の又は異なるカード上の処理ユニット2の1つ又は複数の他のインスタンスとまとめて接続するための1つ又は複数の処理ユニット間リンクのうちの1つ又は複数を含み得る。処理ユニット2は、処理ユニット2が処理するアプリケーションデータという形態で、ホストからワークを受信する。
【0037】
相互接続部34は、アレイ6の異なるタイル4が互いに通信できるように構成される。しかし、同じタイル4上のスレッド間の依存性が潜在的に存在するのと同様に、アレイ6の異なるタイル4上で実行されるプログラムの部分間の依存性も存在し得る。従って、先に実行されているあるタイル4上のコード片の依存データが、別のタイル4上の別のコード片によって利用できるようになるのを防ぐための技法が必要とされる。これは、データ一貫性モデルを使用して達成される。
【0038】
AI及びデータ科学の並列プログラミングモデルは、通常、演算、バリア及び交換の3フェーズの反復実行モデルに従う。その意味は、プロセッサへの及びプロセッサからのデータ転送が、通常、プロセッサ間及び各プロセッサと外部の記憶装置との間のデータ一貫性を提供するためにバリア依存性を有するというものである。典型的に使用されるデータ一貫性モデルは、バルク同期並列(BSP)、ステイル同期並列(SSP)及び非同期である。本明細書で説明される処理ユニット2はBSPモデルを使用するが、代替の形態として他の同期モデルを利用できることが明らかであろう。
【0039】
図2及び3を参照すると、
図2及び3は、BSP交換スキームの実装形態を示しており、各タイル4は、交互サイクルで演算フェーズ33と交換フェーズ32を実行し、演算フェーズ33と交換フェーズ32は、タイル間でバリア同期30によって相互に分離される。
図2及び3によって示される事例では、バリア同期は、各演算フェーズ33とそれに続く交換フェーズ32との間に配置される。演算フェーズ33の間、各タイル4は、タイル上で局所的に1つ又は複数の演算タスクを実行するが、他のいかなるタイル4ともこれらの演算の結果を通信することはない。交換フェーズ32では、各タイル4は、先行する演算フェーズからの演算の1つ又は複数の結果を1つ又は複数の他のタイル4と交換できるが、そのタスクが依存性を有するデータを他のタイル4から受信するまで、新しい演算を実行することはない。また、先行する演算フェーズにおいて演算されたもの以外のデータを他のタイル4に送信することもない。交換フェーズ32において内部制御関連動作などの他の動作を実行できることも除外されない。タイルグループの外部との通信は、BSPメカニズムを任意に利用できるが、代替として、BSPを利用せずに、それ自体の他の何らかの同期メカニズムを代わりに使用することができる。
【0040】
BSP原理によれば、バリア同期30は、演算フェーズ33から交換フェーズ32に移行する接合点、交換フェーズ32から演算フェーズ33に移行する接合点又はその両方に配置される。すなわち、(a)グループのいずれかのタイルが次の交換フェーズ32に進めるようになる前に、すべてのタイル4がそれらのそれぞれの演算フェーズ33を完了する必要があるか、(b)グループのいずれかのタイルが次の演算フェーズ33に進めるようになる前に、グループのすべてのタイル4がそれらのそれぞれの交換フェーズ32を完了する必要があるか、又は、(c)これらの条件の両方が実施されるかのいずれかである。3つのすべての変形形態では、フェーズを交互に行うのは個々のタイルであり、同期するのはアセンブリ全体である。次いで、交換フェーズと演算フェーズのシーケンスは、複数の繰り返しにわたって繰り返すことができる。BSPの専門用語では、交換フェーズ及び演算フェーズの各繰り返しは、「スーパーステップ」と呼ばれる場合がある(ただし、文献上では、専門用語が常に一貫して使用されるとは限らないことに留意されたい。すなわち、個々の交換フェーズ及び演算フェーズの各々が個別にスーパーステップと呼ばれる場合があるのに対して、本明細書で採用される専門用語のように、交換フェーズ及び演算フェーズが合わせてスーパーステップと呼ばれる場合もある)。
【0041】
また、同じ処理ユニット2又は異なる処理ユニット上のタイル4の複数の異なる独立したグループの各々は、互いに非同期的に動作する別個のそれぞれのBSPグループを形成することができ、演算、同期及び交換のBSPサイクルは所定の各グループ内でのみ課されるが、各グループは他のグループから独立してそれを行うことは除外されないことにも留意されたい。すなわち、マルチタイルアレイ6は、複数の内部同期グループを含み得、各々は、他のそのようなグループから独立して及び非同期的に動作する(後にさらに詳細に論じられる)。いくつかの実施形態では、後にさらに詳細に論じられるように、同期及び交換の階層的分類がある。
【0042】
図3は、(a)演算フェーズ33から交換フェーズ32へのバリア同期(上記を参照)が課される事例における、アレイ6のタイルのいくつか又はすべてのグループ4i、4ii、4iiiの間で実装されるようなBSP原理を示す。この配列では、いくつかの他のタイルが依然として交換を行っている間に、いくつかのタイル4が演算33を開始できることに留意されたい。
【0043】
BSPモデルは、処理ユニット2上のタイル4間でのデータの交換のために使用される。我々の先の出願である米国特許出願第16/538980号明細書に示されるように、処理ユニット2のタイル4間の通信は時間決定論的に起こり、データパケットはヘッダなしで送信される。それに加えて、BSPモデルは、処理ユニット2間のデータの交換のために使用することもできる。
【0044】
実施形態では、処理ユニット2の複数のインスタンスは、互いに接続して、複数の処理ユニット2に広がるさらに大きなタイル4のアレイを形成することができる。このように互いに接続された処理ユニット2は、データを交換するために、互いのバリア同期に参加することができる。単一の処理ユニット2上のタイル4間でのみ起こるバリア同期は、内部(チップ上)同期と呼ばれる。他方では、処理ユニット2間で起こるバリア同期は、外部(チップ間)同期と呼ばれる。
【0045】
図4を参照すると、
図4は、内部同期と外部同期の両方を伴う例示的なBSPプログラムフローを示している。示されるように、フローは、(同じチップ2上のタイル4間のデータの)内部交換50及び(異なるチップ2上のタイル4間のデータの)外部交換50’を含む。
図4のプログラムフローは、第1の処理ユニット2i及び第2の処理ユニット2iiに対するプログラムフローを示す。
【0046】
図4に示されるように、(同じチップ2上のタイル4間のデータの内部交換50を含む)内部BSPスーパーステップは、(異なるチップ2上のタイル4間のデータの外部交換50’を含む)外部同期及び交換から分離しておく。
【0047】
プログラムは、(i)第1の演算フェーズ、次いで、(ii)内部バリア同期30、次いで、(iii)内部交換フェーズ50、次いで、(iv)外部バリア同期80、次いで、(v)外部交換フェーズ50’の順番で含む、同期、交換フェーズ及び演算フェーズのシーケンスを実行するように配列することができる。外部バリア80は、内部交換フェーズ50の後に課され、その結果、プログラムは、内部交換50の後にのみ外部交換50’に進む。また、
図4のチップ2Iに関して示されるように、内部交換(iii)と外部バリア(iv)との間に演算フェーズを任意に含めることができることにも留意されたい。
【0048】
このシーケンス全体は、(例えば、コンパイラによってそのように生成されている)プログラムによって実施される。実施形態では、プログラムは、タイル4によって実行されるSYNC命令によってこのような働きをするようにプログラムされる。内部同期及び交換は、別のチップ2上の任意のタイル又は他のエンティティまで及ぶことはない。(iiiとivとの間の前述の任意の演算フェーズを伴う)シーケンス(i)~(v)は、一連の全反復において繰り返すことができる。反復ごとに、外部同期及び交換の前に、内部演算、同期及び交換(i)~(iii)の複数のインスタンスが存在し得る。すなわち、(i)~(iii)の複数のインスタンス(その順番を保って)、すなわち、複数の内部BSPスーパーステップは、(iv)~(v)、すなわち、外部同期及び交換の前に実施することができる。また、いずれのタイル4もその各々は内部同期及び交換(ii)~(iii)のそれら自体のインスタンスを他のタイル4と並行して実行できることにも留意されたい。
【0049】
従って、BSPサイクル全体(i)~(v)につき、サイクル(ii)~(iii)の少なくとも一部が存在し得、同期は、内部でのみ(すなわち、チップ上でのみ)実行されるという制約を受ける。
【0050】
外部交換50’の間、通信は外部のみに限られないことに留意されたい。すなわち、いくつかのタイルは、単に、内部交換を実行することができ、いくつかのタイルは、外部交換のみを実行することができ、いくつかのタイルは、それらを混ぜ合わせて実行することができる。
【0051】
また、
図4に示されるように、いくつかのタイル4は、演算フェーズの間、ローカル入力/出力を実行することができる。例えば、それらのタイル4は、ホスト又は他のタイプの外部の記憶装置とデータを交換することができる。
【0052】
また、
図4に示されるように、一般に、任意の又はすべてのタイルが任意の所定のBSPスーパーステップにおいてヌル演算フェーズ52又はヌル交換フェーズ50を有することが可能であることにも留意されたい。
【0053】
図4に示される同期バリアの各々は、同期要求及び確認応答の伝送の交換が完了した時点で、タイル4によって通過される。内部バリア同期の場合、処理ユニット2の各タイル4は、内部バリア同期に達した時点で、相互接続部34の内部同期コントローラ36(
図1を参照)に内部同期要求を送信する。内部同期コントローラ36が、処理ユニット2の一部であるタイル4のすべてから同期要求を受信すると、同期コントローラ36は、タイル4の各々に同期確認応答を返す。同期確認応答を受信次第、タイル4の各々は、交換フェーズに入り、タイル4間のデータ交換が起こる。この技法は、タイルのいずれかが交換フェーズに進めるようになる前に、各タイル4がバリアに達しなければならないことを保証する。
【0054】
外部バリア同期の場合、同期要求及び確認応答の交換は、同期グループと呼ばれる処理ユニット2のグループ間で行われる。外部バリア同期に対する同期要求及び確認応答の交換に続いて、処理ユニット2は、交換フェーズの間、データを交換する。
【0055】
処理ユニット2上のタイル4の各々は、外部バリア同期に達した時点で、処理ユニット2と関連付けられた外部同期ロジック(
図1では図示せず)に外部同期要求を発行する。外部同期ロジックが処理ユニット2上のタイル4のすべてから同期要求を受信した時点で、外部同期ロジックは、それらの同期要求の確認応答を行うか、又は、別の処理ユニット2と関連付けられた外部同期ロジックに同期要求を伝播する。同期要求に応答して別の処理ユニット2の外部同期ロジックによって取られる措置は、論理が同期グループのマスタとして定義されるか又はそのグループの伝播ノードとして定義されるかに依存する。伝播ノードは、受信したそれらの同期要求を同期グループに対して定義されたマスタに向けて伝播する。同期マスタは、同期グループの一部である処理ユニット2の各々に対する外部同期要求を受信した時点で、同期グループの他の処理ユニット2の各々と関連付けられた外部同期ロジックに同期確認応答を返す。また、同期マスタは、それ自体の処理ユニット2のタイル4の各々にも同期確認応答を返す。同期グループの他の処理ユニット2の各外部同期ロジック(すなわち、伝播ノード)は、同期確認応答を受信次第、その処理ユニット2のタイル4に同期確認応答を返す。
【0056】
図5を参照すると、
図5は、処理ユニット2間のデータの交換のために外部バリア同期に対して実行される同期要求の交換の例を示している。示されるシステム500は、同期グループの一部である3つの処理ユニット2a、2b、2c(総称で処理ユニット2と呼ばれる)を含む。3つの処理ユニット2の各々は、別個の集積回路510a、510b、510c(総称でチップ510と呼ばれる)に属する。チップ510の各々は、グローバル同期周辺機器(GSP)520と呼ばれる外部同期ロジック520を含む。いくつかの事例では、外部同期ロジック520は、チップ外(例えば、ゲートウェイデバイス上)に位置し得る。
【0057】
タイル4の各々がバリアに達すると、タイル4は、関連付けられたGSP 520に同期要求を発行する。
図5では、簡単にするため、関連付けられたGSP 520に同期要求を送信するものとして、各処理ユニット2のタイル4は1つしか示されていないが、実践では、チップ上のすべてのタイル4がGSP 520に同期要求を発行することになる。いくつかの実施形態では、各同期要求は、バリア同期のために使用される同期グループの表示を含み、GSP 520は、要求の表示に従って、受信した同期要求の伝播及び/又は確認応答を行う。他の実施形態では、GSP 520への同期要求の書き込みに先行して、近々行われるバリア同期のために使用される同期グループの関連付けられた処理ユニット2のノミネートされたタイル4からの書き込みが起こる。同期グループの表示は、GSP 520の構成設定を選択するために使用される。GSP 520は、バリア同期に達すると、選択された構成設定に従って、受信した同期要求の伝播及び/又は確認応答を行う。
【0058】
この例では、GSP 520a、520cは、伝播ノードとして構成される。処理ユニット2のすべてのタイル4から同期要求を受信した後、GSP 520a、520cの各々は、同期グループに対して定義された同期マスタ(すなわち、GSP 520b)に向けて上流に同期要求を伝播する。GSP 520bは、GSP 520a、520cから及び関連付けられた処理ユニット2bのすべてのタイル4から同期要求を受信した後、処理ユニット2bのタイル4に向けて及びGSP 520a、520cに向けて下流に同期確認応答を発行する。GSP 520a、520cは、それぞれの処理ユニット2a、2cのタイル4に同期確認応答を発行することによって、受信した確認応答に応答する。
【0059】
同期確認応答を受信することに応答して、タイル4は、バリア同期を通過し、交換フェーズの間に同期グループの他の処理ユニット2とデータを交換する。この異なる処理ユニット2間のデータの交換は、我々の先の出願である米国特許出願第15/886065号明細書で説明されるように、非時間決定論的に行われる。
【0060】
各外部バリア同期におけるデータの交換に対しては、異なる同期グループを定義することができる。これらの同期グループは、処理ユニット上で実行するローカルプログラムにプログラムされる。タイル4は、バリア同期において同期要求を生成するために同期命令を実行する。同期命令は、オペランドとして同期グループを取り入れ、どの処理ユニット2間で各同期が起こるかを制御する。
【0061】
図6Aを参照すると、
図6Aは、複数の異なる可能な外部同期グループ(例えば、グループ_1又はグループ_2)を示している。実施形態では、これらは、異なる階層レベルに相当する。すなわち、より高い階層レベル92(例えば、グループ2)の各々は、少なくとも1つ低い階層レベルの2つ以上のグループ91A、91Bを包含する。実施形態では、2つの階層レベルしか存在しないが、より多くの入れ子レベルが存在することは除外されない。バリア同期を開始するため、処理ユニット2のタイル4の実行ユニットは、SYNC命令を実行する。SYNC命令のオペランドは、同期グループを示す。SYNC命令のオペランドが外部同期グループのより低い階層レベル(SYNCグループ_1)に設定される場合は、SYNCが実行されたタイルと同じ低いレベルの外部同期グループにおいてのみ、チップ2上のタイル4に関連して、上記で説明される同期及び集計動作が実行される。他方では、SYNC命令のオペランドが外部同期グループのより高い階層レベル(SYNCグループ_2)に設定される場合は、SYNCが実行されたタイルと同じ高いレベルの外部同期グループにおいて、すべてのチップ2上のすべてのタイル4に関連して、上記で説明される同期及び集計動作が自動的に実行される。
【0062】
オペランドとして外部同期グループを有するSYNC命令のオペコードに応答して、その同期グループの各タイル4は、オペランドによって指定された同期レベルを関連付けられたGSP 520に信号伝達することを行わせる。これに応答して、GSP 520は、信号伝達されたグループのタイル4の間でのみ実行するように、同期要求(sync_req)及び確認応答(sync_ack)のプロセスを行う。
【0063】
他の実施形態では、SYNC命令のモードによって指定することができる同期グループは、本質的に階層的であるとは限らないことに留意されたい。一般に、SYNC命令には、いかなる種類のグループにも対応するモードを提供することができる。例えば、モードは、非階層的なグループの中からのみ又は階層的なグループと1つ又は複数の非階層的なグループとを混ぜ合わせたもの(少なくとも1つのグループは、別のものの中に完全にネストされるというわけではない)から、選択を可能にすることができる。これにより、有利には、プログラマ又はコンパイラが、最小コード密度で、互いに非同期である内部同期グループの異なるレイアウト間で選択する上での柔軟性が可能になる。
【0064】
処理ユニット2間での交換のために提供される外部バリア同期に加えて、外部バリア同期は、処理ユニット2とホストシステムとの間でデータを交換するために実行することができる。そのようなデータは、処理ユニット2による処理のためにホストシステムによって提供されるアプリケーションデータを含み得る。データは、ホストシステムに提供される処理ユニット2による処理の結果を含み得る。このタイプのバリア同期は、ホストの関与を伴うバリア同期と呼ばれる。
【0065】
ホストの関与を伴うバリア同期と他のバリア同期との関係は、
図6Bに示されている。この図は、例示的な処理ユニット2が参加したバリア同期を示す。処理ユニット2は、ホストからの同期確認応答を必要とするバリア90が課される前に、P個のバリア同期80に参加することができる。P個のバリア同期は、関連同期グループのすべての(休止していない)タイル4からの同期要求を必要とする。後続のバリア同期90は、処理ユニット2のすべての(休止していない)タイル4からの同期要求を必要とし、特定のバリアを通過する許可をホストが以前に示していることを必要とする。バリア90の後、ホストと処理ユニット2の1つ又は複数のタイル4(例えば、演算結果をホストに報告するための1つ又は複数のタイル4)との間で交換50”を実行することができる。
【0066】
このバリア同期及び関連付けられたデータ交換は、処理ユニット2とホストシステムとの間を接続するためのネットワークインタフェースデバイスを使用して行われる。ネットワークインタフェースデバイスは、ゲートウェイデバイスであると説明されているが、別のタイプのネットワークインタフェースデバイスでもあり得る。ゲートウェイデバイスは、参照により組み込まれる、先の米国特許出願第16/235109号明細書で詳細に説明されている。
【0067】
図7を参照すると、
図7は、データ処理システム700の例を示しており、処理ユニット2は、
ゲートウェイ710を介して
ホストシステム720と通信するように構成される。この例では、単一の
ゲートウェイ710が2つの処理ユニット2とネットワーク740を介して接続するように構成される。しかし、他の実施形態では、そのような
ゲートウェイ710の各々は、異なる数(例えば、1つ)の処理ユニット2とネットワーク740を介して接続することができる。
【0068】
ホストシステム720は、各処理ユニット2と関連付けられたバッファ725を含む。バッファ725の各々は、ゲートウェイ710上に関連付けられたバッファ730を有する。ゲートウェイ710上のバッファ730は、ホスト720上の関連付けられたバッファ725のミラーである。読み取り及び書き込み要求は、ホストバッファ725のデータをゲートウェイバッファ730のデータと同期させるために、ネットワーク740上で発行される。読み取り及び書き込み要求は、RDMA読み取り及び書き込み要求であり得る。1つ又は複数のRDMAコントローラ735は、RDMA読み取り/書き込みをゲートウェイ710に発行してバッファ725とバッファ730との間のデータ転送を行うために、ホスト720に存在する。同様に、RDMAコントローラ736は、バッファ730とバッファ725との間のデータ転送を行うために、ゲートウェイ710に存在する。RDMA交換は、ネットワーク740上で起こる。実施形態では、ネットワーク740は、イーサネット(登録商標)ネットワーク740である。この事例では、データは、RDMAオーバーコンバージドイーサネット(RoCE:RDMA over Converged Ethernet)を介してネットワーク740上で送信される。
【0069】
本明細書で論じられる主要な例はRoCEを介してデータを送信するものであるが、他の例では、異なるネットワーク化技術を使用することができる。例えば、データは、通常のイーサネット(登録商標)上でデータプレーン開発キット(DPDK)を使用して、ネットワーク740上で送信することができる。しかし、RDMAの使用は、低レイテンシという利点を有する。RDMA以外の異なるプロトコルが使用される実施形態では、
図7及び9に示される
RDMAコントローラ735、736は、説明されるデータ転送動作を実行するために使用される他のタイプの処理回路であり得る。
【0070】
処理ユニット2は、それらの割り当てられたプログラムの事前に定義された時点において、ゲートウェイ710上のそれらの関連付けられたメモリ730とデータを交換するために、バリア同期を開始するように構成される。そのような事前に定義されたバリア同期では、処理ユニット2の一方又は両方は、ゲートウェイ710の関連付けられた外部同期ロジック745に同期要求を送信する。外部同期ロジック745は、ローカル同期伝播モジュール(LSPM)745として示されている。同期要求を受信次第、各LSPM 745は、同期要求の確認応答を行うように構成される。処理ユニット2は、そのような同期確認応答を受信次第、ゲートウェイ710上のその関連付けられたメモリ730とのデータ交換を実行する。メモリ730は、処理ユニット2のメモリにマッピングされたメモリであり得る。この事例では、処理ユニット2は、メモリ730からのデータの送信及び受信を行うために、メモリマップドI/O(MMIO)読み取り/書き込みを発行する。交換フェーズの間、処理ユニット2は、先行する演算フェーズにおいて生成されたその処理の結果をメモリ730に送信したり、後続の演算フェーズで処理するためにメモリ730から作業負荷を受信したりすることができる。同期要求、確認応答及びデータ交換は、処理ユニット2とゲートウェイ710との間のPCIeリンク上で行われる。
【0071】
図7では、ホスト720と通信するものとして、処理ユニット2は2つしか示されていないが、本発明の実施形態は、大多数の処理ユニットがホスト720と通信することを可能にする。
図8を参照すると、
図8は、単一のホスト720と通信する多数の処理ユニット2を含むシステム800の例を示している。処理ユニット2は、各々がホスト720によって提供されるローカルプログラムを実行することによって、共に、分散型アプリケーションを実行するように構成される。処理ユニットは、バッファ730を介してホストとデータを交換し、ローカルプログラムの事前に定義された同期時点において他の処理ユニットとデータを交換する。処理ユニット2間のデータ交換は、処理ユニット2間のPCIeリンクを介して又はゲートウェイ710間のPCIeリンクを介して起こり得る。ゲートウェイ710とホスト720との間のデータ交換は、ネットワーク740上の接続を介して起こる。各処理ユニット2に対して、別個の接続が存在する。これらの接続の各々は、RDMA接続であり得る。
【0072】
図9を参照すると、
図9は、ホストシステム720と処理ユニット2のうちの1つとの間の対話をさらに詳細に示している。ここでは、プログラムのコンパイル及び処理ユニット2への提供並びにプログラムの実行から生じる後続のデータ交換について説明する。
【0073】
示されるように、ホスト720は、処理ユニット2上で実行させるためにプログラムのセットをコンパイルするように構成された少なくとも1つのプロセッサ910を含む。アプリケーションに対してソースコードから生成されたローカルプログラムを合わせて、コンパイル済みのアプリケーションとなる。プログラムの各々は、実行可能なイメージの形態を取る。少なくとも1つのプロセッサ910は、ソースコードセットを受信し、コンパイラプログラムに基づいて、ソースコードからローカルプログラムのセットを生成する。コンパイルプロセスは、別個のローカルプログラムを生成し、処理ユニット2にわたってそれらを割り当てることを含む。ローカルプログラムを生成するためのコンパイルプロセスの一部として、少なくとも1つのプロセッサ910は、交換同期時点のセットを各ローカルプログラムに挿入する。ローカルプログラムの実行におけるこれらの時点の各々では、それぞれの処理ユニット2は、バリア同期に参加するように構成される。バリア同期のいくつかは、上記で説明されるような内部バリア同期である。バリア同期のいくつかは、アプリケーションを実行することに関与する1つ又は複数の他の処理ユニット2とデータを交換するための外部バリア同期である。バリア同期のいくつかは、付属のゲートウェイ710を介してホスト720とデータを交換するための外部バリア同期である。
【0074】
ホスト720が処理ユニット2用にローカルプログラムをコンパイルした後、プログラムは、制御プログラムバッファ920に格納される。ホストは、各処理ユニット2に対してそのような制御プログラムバッファを個別に有する。制御プログラムバッファ920に関するコメントは、これらの他の制御プログラムバッファに等しくうまく当てはまる。ホスト720とゲートウェイ710との間でデータを交換するために使用されるバッファ725、730と同様に、バッファ920及びバッファ930は、互いのミラーである。ローカルプログラムは、ネットワーク740上で、1つ又は複数の書き込みにおいて、バッファ920からバッファ930に転送される。この転送は、ネットワーク740上で、1つ又は複数のRDMA書き込みにおいて、バッファ920からバッファ930にローカルプログラムを転送するように構成された1つ又は複数のRDMAコントローラ736によって、行うことができる。処理ユニット2は、制御プログラムバッファ930からプログラムを読み取るために、ゲートウェイ710に読み取りを発行するように構成される。処理ユニット2は、そのような読み取りを実行するための少量の二次ブートローダコードを含む。読み取りは、MMIO読み取りである。
【0075】
処理ユニット2がバッファ930からローカルプログラムをロードした時点で、処理ユニット2は、プログラムを実行する。作業負荷を処理するため、プログラムは、最初に、それらの作業負荷をホスト720から受信しなければならない。ホスト720は、その実行の間、プログラムによって必要とされる作業負荷を格納する。ホスト720は、処理ユニット2が利用できるようになる前に、これらの作業負荷をバッファ725に格納する。データ(作業負荷を含む)は、異なるストリームに分割され、処理ユニット2は、そのローカルプログラムの実行における異なる条件の結果に応じて、読み取り及び書き込み対象のストリームを選択することができる。
【0076】
各ストリームは、例えば、処理ユニット2が多数の処理ユニット2上で実行されている機械学習又は機械知能アルゴリズムへの入力として使用するためにホストサブシステム720から処理ユニット2に送信されている、画像シーケンス(個々の静止画像若しくは映像フレーム)、1つ若しくは複数の音声サンプルの音声ストリーム又は他の任意の経験データシーケンス(例えば、オンラインショッピング習慣など)を含み得る。例えば、これは、ストリーミングデータに基づいてニューラルネットワークを訓練するため、又は、既に訓練済みのニューラルネットに基づくデータから推論するためのものであり得る。例では、ストリームが処理ユニット2からホストサブシステム720への方向である場合、ストリームは、処理ユニット2上で実行されている訓練済みのニューラルネットなどの機械知能アルゴリズムから生じた推論のストリームを含み得る。
【0077】
バッファ725、730は、複数の異なるストリームのデータの転送に備えて格納するために使用されるマルチストリームバッファ725、730である。また、バッファ725、730は、双方向性でもあり、各ストリームのデータは、各バッファ725、730からの書き込みと読み取りの両方を行うことができる。処理ユニット2は、ストリームの識別子をゲートウェイに供給することによって、異なるストリームから選択的に読み取り/書き込みを行うことができる。ローカルプログラムが処理ユニット2にロードされた後、処理ユニット2は、このプログラムを実行して、処理ユニット2への読み取り対象のストリームの識別子の書き込みを発行する。ストリームの識別子は、バッファ725、730のインデックス又はアドレスのうちの1つ又は複数を含む。ストリームの識別子は、ストリームを明示的に識別するというよりむしろ、
図9に示されるバッファ725、730のメモリ領域(その各々は、ストリームのうちの1つと関連付けられる)のうちの1つを識別することができる。ゲートウェイ710は、ストリームの識別子を受信し、その識別子は、ストリームIDストア940に一時的に格納される。ゲートウェイ710は、ストリームの識別子を受信することに応答して、ネットワーク740上で、その識別子をホスト720に書き込む。識別子の受信に応答して、ホスト720は、ネットワーク740上で、バッファ725から識別されたストリームのデータをバッファ730に書き込む。次いで、処理ユニット2は、そのデータをバッファ730から読み取る。
【0078】
バッファ730から作業負荷を得た後、処理ユニット2は、そのローカルプログラムに従ってその作業負荷を処理する。その実行の間のある時点において、処理ユニット2は、ストリームの表示を書き込み、その表示は、近々行われるバリア同期に続く交換フェーズにおいて読み取り又は書き込みが行われる。この書き込みは、処理ユニット2の演算フェーズの間又は先の交換フェーズの間に行うことができる。その後、プログラムの実行の間に、同期バリアに達する。この時点では、処理ユニット2は、
図7に関して上記で説明される同期要求/確認応答手順を実行する。この手順に続いて、処理ユニット2は、バッファ730からの読み取り及び書き込みを行う。その際、
処理ユニット2は、提供されたストリームの表示によって識別されたストリームに対応するバッファのメモリ領域からの読み取り及び書き込みを行う。そのストリームへのデータ書き込みに応答して、ゲートウェイ710は、バッファ725にデータを書き込む。従って、交換フェーズの間、ホスト720は、処理ユニット2から作業負荷データの処理の結果を受信し、処理ユニット2は、ホスト720からさらなる作業負荷データを受信する。
【0079】
図10を参照すると、
図10は、ホスト720とゲートウェイ710と処理ユニット2との間のメッセージの交換を示すメッセージシーケンス図を示している。
図10に示されるように、ステップ1では、処理ユニット2は、ストリームの識別子をゲートウェイに書き込む。ゲートウェイは、このストリーム識別子を受信し、それをホスト720に書き込む。ステップ2では、ストリームIDの受信に応答して、ホスト720は、作業負荷をゲートウェイ710に書き込む。示されるように、バリア同期は、処理ユニット2によって達する。バリア同期に続いて、処理ユニット2は、ステップ2においてホスト720から提供された作業負荷をゲートウェイ710から読み取る。また、ステップ3では、処理ユニット2は、先の作業負荷の処理から得られた結果を書き込む。
【0080】
ステップ4では、処理ユニット2は、ステップ3において処理ユニット2によって書き込まれたストリームの識別子をゲートウェイ710に書き込む。ストリーム識別子の受信に応答して、ゲートウェイ710は、ステップ3において処理ユニット2によって書き込まれたデータをホストに書き込む。
【0081】
そのデータ交換に続いて、処理ユニット2は、さらなる演算フェーズに進む。
図10に示されるデータ交換のためのプロセスは、多数回実行することができる。
【0082】
図10では、
ゲートウェイ710と
ホストシステム720との間のデータ転送を開始するために処理ユニット2が制御メッセージMemWrを送信しているが、他の実施形態では、
ホストシステム720が、バッファ725とバッファ730を定期的に同期させることによって、このデータ転送を開始することができる。
【0083】
図11を参照すると、
図11は、本出願の実施形態による例示的な方法1100を示している。この図は、ホストと、ネットワークインタフェースデバイス(すなわち、上記の実施形態で説明されるゲートウェイ)と、各々がローカルプログラムを実行することによってアプリケーションを走らせるように構成された処理ユニットとを含むシステムによって実行される方法1100の概要を提供する。
【0084】
S1110では、ホストは、ローカルプログラムを処理ユニットに転送する。
【0085】
S1120では、各処理ユニットは、指定ストリームからの作業負荷データの要求を発行する。各処理ユニットによって指定されるストリームは、その処理ユニットに割り当てられたローカルプログラムに依存する。要求は、指定ストリームと共に、ネットワークインタフェースデバイスを介してホストに提供される。
【0086】
S1130では、要求の各々の受信に応答して、ホストは、識別されたストリームからのデータを書き込む。ホストは、処理ユニットへの伝達のために、このデータをネットワークインタフェースデバイスに書き込む。処理ユニットは、ネットワークインタフェースデバイスメモリからデータを読み取る。
【0087】
S1140では、処理ユニットは、S1130において受信した作業負荷データを使用して計算を実行するために、演算フェーズの間、演算を実行する。実行される計算は、各処理ユニットに提供されるローカルプログラムで指定されている。
【0088】
S1150では、処理ユニットは、S1140の間のそれらのデータ処理の結果を交換し合う。このステップは、処理ユニットの同期グループ間でバリア同期を使用して実行される。そのようなバリア同期の時間及び同期グループの定義は、処理ユニットの各々に提供されるローカルプログラムで指定されている。
【0089】
S1150におけるそのような外部バリア同期の各々に続いて、方法は、S1140に戻り、さらなるコンピュータフェーズの間にさらなる計算が実行される。
【0090】
ローカルプログラムの実行における後の時点では、処理ユニットは、S1160に進み、ホストとデータ転送を開始するためのプロセスが始まる。このステップは、S1140又はS1150とオーバーラップし得る。
【0091】
S1160では、処理ユニットは、ネットワークインタフェースデバイスを介して、ストリーム識別子をホストに提供する。
【0092】
S1170では、ホストは、識別されたストリームのデータをネットワークインタフェースデバイスに書き込む。
【0093】
S1180では、事前にコンパイル済みの同期バリアに続いて、処理ユニットは、ネットワークインタフェースデバイスから/への、識別されたストリームのデータの読み取り及び書き込みを行う。ネットワークインタフェースデバイスは、データをホストに書き込む。
【0094】
各処理ユニットがステップS1140~S1180を同時に実行する必要はなく、1つ又は複数の他処理ユニット2がS1180のホストとのデータの交換を行っている間に、いくつかの処理ユニット2は、S1140の演算又はS1150のデータの交換を行うことができる。S1150においてバリア同期が処理ユニット2のグループ間で行われる時以外は、処理ユニットは、互いに非同期的に動作する。各処理ユニットによって実行されるようなステップの順序及びタイミングは、ホストによって処理ユニットに割り当てられているローカルプログラムに依存する。