(57)【要約】コンピュータ通信ネットワークを介してデータを送信するための方法、デバイス及びシステムが開示されている。通信コマンドのキューは、中央処理装置（ＣＰＵ）を使用して事前に生成され、ネットワークインタフェースコントローラ（ＮＩＣ）のデバイスメモリに記憶することができる。その後、グラフィックス処理装置（ＧＰＵ）がリモートＧＰＵと通信するためのデータを有する場合、ＧＰＵは、事前に生成されたコマンドによってバッファ内の位置が示される送信バッファにデータを記憶することができる。次に、ＧＰＵは、データが準備できていることをインタフェースデバイスに知らせることができ、事前に生成されたコマンドの実行をトリガして、データを送信する。【選択図】図２
2019532427.tif 000002
【特許請求の範囲】
【請求項１】
データを送信する方法であって、
インタフェースデバイスによって、事前に生成されたネットワークコマンドを中央処理装置から受信することと、
前記インタフェースデバイスによって、データがメモリ内で準備できていることを示す信号をグラフィックス処理装置から受信することと、
前記インタフェースデバイスによって、前記信号に基づいて、前記事前に生成されたネットワークコマンドを実行し、ネットワークを介して前記データをターゲットデバイスに送信することと、を含む、
方法。
【請求項２】
前記事前に生成されたネットワークコマンドは、ｐｕｔコマンドを含む、
請求項１の方法。
【請求項３】
前記信号は、カウンタ変数の値の変化を示している、
請求項１の方法。
【請求項４】
前記事前に生成されたネットワークコマンドは、カウンタ変数の閾値を含む、
請求項１の方法。
【請求項５】
前記事前に生成されたネットワークコマンドは、前記メモリ内のアドレスへのポインタを含む、
請求項１の方法。
【請求項６】
前記事前に生成されたネットワークコマンドは、前記ターゲットデバイスを示す情報を含む、
請求項１の方法。
【請求項７】
前記情報は、メタデータを含む、
請求項６の方法。
【請求項８】
前記インタフェースデバイスは、ネットワークインタフェースコントローラ（ＮＩＣ）を備える、
請求項１の方法。
【請求項９】
データを送信するデバイスであって、
事前に生成されたネットワークコマンドを中央処理装置から受信するように構成された受信機回路であって、データがメモリ内で準備できていることを示す信号をグラフィックス処理装置から受信するように構成された受信機回路と、
前記信号に基づいて、前記事前に生成されたネットワークコマンドを実行するように構成されたプロセッサ回路と、
前記事前に生成されたネットワークコマンドに基づいて、ネットワークを介して前記データをターゲットデバイスに送信するように構成された送信機回路と、を備える、
デバイス。
【請求項１０】
前記事前に生成されたネットワークコマンドは、ｐｕｔコマンドを含む、
請求項９のデバイス。
【請求項１１】
前記信号は、カウンタ変数の値の変化を示している、
請求項９のデバイス。
【請求項１２】
前記事前に生成されたネットワークコマンドは、カウンタ変数の閾値を含む、
請求項９のデバイス。
【請求項１３】
前記事前に生成されたネットワークコマンドは、前記メモリ内のアドレスへのポインタを含む、
請求項９のデバイス。
【請求項１４】
前記事前に生成されたネットワークコマンドは、前記ターゲットデバイスを示す情報を含む、
請求項９のデバイス。
【請求項１５】
前記情報は、メタデータを含む、
請求項１４のデバイス。
【請求項１６】
前記インタフェースデバイスは、ネットワークインタフェースコントローラ（ＮＩＣ）を備える、
請求項９のデバイス。
【請求項１７】
データを送信するシステムであって、
中央処理装置（ＣＰＵ）と、
グラフィックス処理装置（ＧＰＵ）と、を備え、
前記ＣＰＵは、複数の事前に生成されたネットワークコマンドを生成するように構成された処理回路と、前記事前に生成されたネットワークコマンドをインタフェースデバイスに送信するように構成された送信機回路と、を備え、
前記ＧＰＵは、ネットワークを介してターゲットデバイスに送信するためのデータを生成するように構成された処理回路と、前記データをバッファに記憶するように構成された記憶回路と、前記データが前記バッファに記憶されたことを前記インタフェースデバイスに知らせるように構成された送信機回路と、を備え、
前記インタフェースデバイスは、前記事前に生成された複数のネットワークコマンドのうち１つのネットワークコマンドを実行する、
システム。
【請求項１８】
前記ＣＰＵ及び前記ＧＰＵは、単一のダイ上に配置されている、
請求項１７のシステム。
【請求項１９】
前記ＣＰＵ及び前記ＧＰＵは、同じパッケージ内に配置されている、
請求項１７のシステム。
【請求項２０】
前記インタフェースデバイスは、ネットワークインタフェースコントローラ（ＮＩＣ）を備える、
請求項１７のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年１０月１８日に出願された米国特許出願第１５／２９７，０７９号の利益を主張し、この内容は、本明細書に十分に記載されているかのように、言及したことによって本明細書に組み込まれる。
【０００２】
（政府の権利）
本発明は、アメリカ合衆国エネルギー省により授与された、ローレンス・バークレー国立研究所とのデザインフォワード２システム統合プロジェクト（Design Forward 2 System Integration Project）（主契約番号ＤＥ−ＡＣ０２−０５ＣＨ１１２３１、外注番号７２１６３３８）に基づく政府支援を受けてなされたものである。政府は、本発明に関して一定の権利を有する。
【背景技術】
【０００３】
ダイレクトメモリアクセス（ＤＭＡ）は、中央処理装置（ＣＰＵ）によって実行される個々の読み出し／書き込み動作を伴うことなく、特定の周辺ハードウェアがコンピュータシステムのメインメモリに直接アクセスすることができる技術である。このような周辺ハードウェアは、グラフィックスプロセッサ（ＧＰＵ）、ネットワークインタフェースコントローラ（ＮＩＣ）又は他の種類の入出力（Ｉ／Ｏ）デバイス等の他のデバイスを含むことができる。
【０００４】
リモートダイレクトメモリアクセス（ＲＤＭＡ）は、１つのコンピュータ又は処理デバイスが、何れのコンピュータのＣＰＵ又はオペレーティングシステムも関与することなく、ネットワークを介して別のコンピュータ又は処理デバイスのメインメモリにアクセスすることができる技術である。ＤＭＡ及びＲＤＭＡの両者は、メインメモリとハードウェアサブシステムとの間、又は、２つのコンピュータシステムのメインメモリの間のデータ転送中に、ＣＰＵが他の機能を実行するのを可能にするという利点を有することができる。また、ＤＭＡ及びＲＤＭＡの両者は、ＣＰＵからのより多くの介入を必要とする技術よりもデータ転送速度を増加させるという利点を有することができ、バッファリングを減少又は排除することができる。
【０００５】
ＧＰＵは、通常、ネットワークデバイスを制御することができない。分散したＧＰＵ間での通信には、ＣＰＵベースの通信ライブラリ又はＣＰＵ上で実行される他のソフトウェアが必要となる場合がある。ＧＰＵを用いて読み出し及び書き込み要求パケットやｐｕｔ及びｇｅｔコマンド等の通信ネットワークコマンドを構築すると、この動作が本質的にシリアルであり、ＧＰＵ全体で効果的に並列化できないことから、パフォーマンスが低下する。
【０００６】
添付の図面と共に例として与えられる以下の説明から、より詳細な理解が得られるであろう。
【図面の簡単な説明】
【０００７】
【図１】１つ以上の開示された実施形態を実施可能な例示的なデバイスのブロック図である。
【図２】例示的なトポロジを示すシステム図である。
【図３】図２の例示的なトポロジ及び／又は図１の例示的なデバイスを使用可能な例示的な方法を示すフローチャートである。
【図４】図２の例示的なトポロジ及び／又は図１の例示的なデバイスのＧＰＵを使用可能な例示的な方法を示すフローチャートである。
【図５】図２の例示的なトポロジ及び／又は図１の例示的なデバイスのＮＩＣを使用可能な例示的な方法を示すフローチャートである。
【図６】図２の例示的なトポロジ及び／又は図１の例示的なデバイスのＣＰＵを使用可能な例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【０００８】
マルチノードＧＰＵクラスタは、接続されている各コンピュータに１つ以上のＧＰＵが含まれるコンピュータクラスタである。ＧＰＵクラスタの様々な動作は、クラスタの異なるノード内のＧＰＵが使用するために、クラスタ内の１つのＧＰＵの出力のＲＤＭＡ通信を必要とする場合がある。ＧＰＵは、現在、ＣＰＵ上で実行されているクリティカルパスソフトウェアの支援がなければＲＤＭＡ通信を供給することができず、通信ネットワークコマンドを効率的に生成することができない。その結果、ＧＰＵ間のＲＤＭＡは、通常、非効率的であり、通信を開始するためにＣＰＵを必要とする。ＲＤＭＡの１つの潜在的な利点は、他のタスクのためにＣＰＵを解放することであることから、これは望ましくない場合がある。
【０００９】
したがって、ＣＰＵを使用して通信コマンドパケットのキューを事前に生成することによってこれらの欠点に対処する、２つのＧＰＵ間のＲＤＭＡの方法を本明細書で説明する。その後、ＧＰＵがリモートＧＰＵと通信するためのデータを有する場合、ＧＰＵは、事前に生成されたコマンドによってバッファ内の位置が示される、システムメモリ又はローカルＧＰＵメモリの一部等の送信バッファにデータを記憶することができる。次に、ＧＰＵは、データがバッファ内で準備できていることをインタフェースデバイスに知らせることができ、事前に生成されたコマンドの実行をトリガして、データを送信する。このようにして、ＧＰＵは、通信コマンドを生成する必要がなく、ＣＰＵは、通信動作のクリティカルパス中にコマンドを生成する必要がない。
【００１０】
いくつかの実施形態は、データを送信する方法を提供する。インタフェースデバイスは、事前に生成されたネットワークコマンドを中央処理装置（ＣＰＵ）から受信することができる。インタフェースデバイスは、データがメモリ内で準備できていることを示す信号をグラフィックス処理装置（ＧＰＵ）から受信することができる。インタフェースデバイスは、信号に基づいて、事前に生成されたネットワークコマンドを実行し、ネットワークを介してデータをターゲットデバイスに送信することができる。
【００１１】
いくつかの実施形態では、事前に生成されたネットワークコマンドは、ｐｕｔコマンドを含む。信号は、カウンタ変数の値の変化を示すことができる。事前に生成されたネットワークコマンドは、メモリ内のアドレスへのポインタを含むことができる。事前に生成されたネットワークコマンドは、ターゲットデバイスを示す情報を含むことができる。事前に生成されたネットワークコマンドは、リモートｐｕｔ動作を開始するのに必要な信号数を示す閾値を含むことができる。情報は、メタデータを含むことができる。インタフェースデバイスは、ネットワークインタフェースコントローラ（ＮＩＣ）を含むことができる。
【００１２】
いくつかの実施形態は、データを送信するデバイスを提供する。デバイスは、事前に生成されたネットワークコマンドを中央処理装置から受信するように構成された受信機回路を含むことができる。受信機回路は、データがメモリ内で準備できていることを示す信号をグラフィックス処理装置から受信するように構成されてもよい。デバイスは、信号に基づいて、事前に生成されたネットワークコマンドを実行するように構成されたプロセッサ回路を含むことができる。デバイスは、事前に生成されたネットワークコマンドに基づいて、ネットワークを介してデータをターゲットデバイスに送信するように構成された送信機回路を含むことができる。
【００１３】
いくつかの実施形態では、事前に生成されたネットワークコマンドは、ｐｕｔコマンドを含む。信号は、カウンタ変数の値の変化を示すことができる。事前に生成されたネットワークコマンドは、メモリ内のアドレスへのポインタを含むことができる。事前に生成されたネットワークコマンドは、ターゲットデバイスを示す情報を含むことができる。情報は、メタデータを含むことができる。インタフェースデバイスは、ネットワークインタフェースコントローラ（ＮＩＣ）を含むことができる。
【００１４】
いくつかの実施形態は、データを送信するシステムを提供する。システムは、１つ以上の中央処理装置（ＣＰＵ）と、１つ以上のグラフィックス処理装置（ＧＰＵ）と、を含むことができる。ＣＰＵは、複数の事前に生成されたネットワークコマンドを生成するように構成された処理回路と、事前に生成されたネットワークコマンドをインタフェースデバイスに送信するように構成された送信機回路と、を含むことができる。ＧＰＵは、ネットワークを介してターゲットデバイスに送信するためのデータを生成するように構成された処理回路と、データをバッファに記憶するように構成された記憶回路と、データがバッファに記憶されたことをインタフェースデバイスに知らせるように構成された送信機回路と、を含むことができ、これにより、インタフェースデバイスは、複数の事前に生成されたネットワークコマンドのうち１つのネットワークコマンドを実行する。
【００１５】
いくつかの実施形態では、ＣＰＵ及びＧＰＵは、単一のダイ上に配置されている。ＣＰＵ及びＧＰＵは、同じパッケージ内に配置することができる。インタフェースデバイスは、ネットワークインタフェースコントローラ（ＮＩＣ）を含むことができる。
【００１６】
図１は、１つ以上の開示された実施形態を実施可能な例示的なデバイス１００のブロック図である。デバイス１００は、例えば、コンピュータ、ゲームデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話又はタブレットコンピュータを含む。デバイス１００は、プロセッサ１０２と、メモリ１０４と、ストレージ１０６と、１つ以上の入力デバイス１０８と、１つ以上の出力デバイス１１０と、を含む。また、デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４をオプションで含むことができる。デバイス１００は、図１に示されていない追加のコンポーネントを含んでもよいことを理解されたい。
【００１７】
プロセッサ１０２は、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、同じダイ上に配置されたＣＰＵ及びＧＰＵ、又は、１つ以上のプロセッサを含むことができ、各プロセッサコアはＣＰＵ又はＧＰＵとすることができる。メモリ１０４は、プロセッサ１０２と同じダイ上に配置されてもよいし、プロセッサ１０２とは別に配置されてもよい。メモリ１０４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ若しくはキャッシュ等の揮発性又は不揮発性メモリを含むことができる。
【００１８】
ストレージ１０６は、例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスク若しくはフラッシュドライブ等の固定又は取り外し可能なストレージデバイスを含むことができる。入力デバイス１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、バイオメトリックスキャナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含むことができる。出力デバイス１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバック装置、１つ以上のライト、アンテナ又はネットワーク接続（例えば、無線ＩＥＥＥ８０２信号を送信及び／若しくは受信するための無線ローカルエリアネットワークカード）を含むことができる。
【００１９】
入力ドライバ１１２は、プロセッサ１０２及び入力デバイス１０８と通信し、プロセッサ１０２が入力デバイス１０８から入力を受信することを可能にする。出力ドライバ１１４は、プロセッサ１０２及び出力デバイス１１０と通信し、プロセッサ１０２が出力デバイス１１０に出力を送信することを可能にする。入力ドライバ１１２及び出力ドライバ１１４は、オプションのコンポーネントであり、デバイス１００は、入力ドライバ１１２及び出力ドライバ１１４が存在しない場合であっても同様に動作することに留意されたい。
【００２０】
図２は、ＧＰＵリモート通信の態様を示す例示的なトポロジ２００を示すシステム図である。トポロジ２００は、ＣＰＵ２１０と、ＧＰＵ２２０と、システムメモリ２３０と、ＮＩＣ２４０と、ローカル相互接続２５０と、コンピュータ通信ネットワーク２６０と、を含む。
【００２１】
ＣＰＵ２１０は、任意の適切な汎用処理装置又はプロセッサコアを含む。ＧＰＵ２２０は、任意の適切なグラフィックス処理装置又はグラフィックスプロセッサコアを含む。ＣＰＵ２１０及びＧＰＵ２２０は、別々のダイ又はパッケージ上に配置することができ、又は、アクセラレーテッド処理ユニット（ＡＰＵ）内等の同じダイ上のコアとすることができる。ＣＰＵ２１０及びＧＰＵ２２０は、例えば、プロセッサ１０２（図１に関連して示され説明されている）として単一のダイ上に実装することができる。
【００２２】
システムメモリ２３０は、ランダムアクセスメモリ（ＲＡＭ）等の任意の適切な非一時的なコンピュータ可読メモリを含む。システムメモリ２３０は、例えば、メモリ１０４（図１に関連して示され説明されている）として実装することができる。システムメモリ２３０は、ローカル相互接続２５０を介してＣＰＵ２１０及びＣＰＵ２２０と通信する。ローカル相互接続２５０は、ＰＣＩｅ（Peripheral Component Interconnect Express）バス等のように、コンピュータ内の周辺デバイスを相互接続するための任意の適切なバス又は他の媒体を含むことができる。
【００２３】
ネットワーク２６０は、ＲＤＭＡを使用して、ＩｎｆｉｎｉＢａｎｄネットワーク及び／又はインターネット若しくはその任意の部分等のように、リモートシステムと通信するための任意の適切なコンピュータ通信ネットワークを含む。この例では、ＲＤＭＡターゲットは、別のＧＰＵを含むシステム内のメモリとすることができる。また、ＲＤＭＡターゲットは、ＧＰＵ２２０からの出力データの任意の使用者とすることができる。
【００２４】
ＮＩＣ２４０は、ローカル相互接続２５０に接続されており、ローカル相互接続２５０を介して、ＣＰＵ２１０、ＧＰＵ２２０及びシステムメモリ２３０のためにネットワーク２６０との通信を提供する。例示的なトポロジ２００は、これらの通信にＮＩＣを利用する。ネットワーク２６０への通信は、他の適切なＩ／Ｏデバイスによっても提供することができる。ＮＩＣ２４０は、デバイスメモリ２４５を含む。
【００２５】
ＣＰＵ２１０は、１つ以上のリモートｐｕｔコマンド２１５を生成し、これらを、ローカル相互接続２５０を介してＮＩＣ２４０のデバイスメモリ２４５に記憶する。この例では、リモートｐｕｔコマンド２１５は、ＮＩＣ２４０のデバイスメモリ２４５に記憶されている。また、リモートｐｕｔコマンドは、システムメモリ２３０等の任意の適切なメモリに記憶することもできる。この例及び本明細書の他の例では、リモートｐｕｔコマンドが使用されている。一括動作（collective operations）、リモートｇｅｔコマンド、及び、送受信の双方のペアを含むがこれらに限定されない、トリガされたセマンティクスをサポートする他のネットワークメッセージ又は通信動作も使用することができる。リモートｐｕｔコマンド２１５は、ＲＤＭＡターゲット宛先、及び、送信用データに関する情報を含む。例えば、リモートｐｕｔコマンド２１５’は、データがＮＩＣによってターゲットに適切に送信されるようにＲＤＭＡターゲット宛先を指定するメタデータ２１６’を含む。また、メタデータ２１６’は、（本明細書でさらに説明するように）ｐｕｔコマンド２１５’のトリガ条件に関するカウンタ値又は他の情報を含むことができ、他の情報を含むこともできる。リモートｐｕｔコマンド２１５’は、システムメモリ２３０内の送信バッファ２３５内のアドレス又はアドレス範囲を指すバッファポインタ２１７’も含む。
【００２６】
また、各リモートｐｕｔコマンド２１５は、トリガに関連付けられており、これにより、ＮＩＣ２４０は、コマンドをいつ実行するかを決定することができる。この例では、リモートｐｕｔコマンド２１５’は、カウンタ値２１８’に関連付けられている。リモートｐｕｔコマンド２１５’’は、バッファポインタ２１７’’及びメタデータ２１６’’と同様に、異なるカウンタ値２１８’’と関連付けることができる。この例では、カウンタ値がトリガとして使用されている。トリガは、デバイスメモリ２４５又はシステムメモリ２３０内のフラグ又は他のレジスタをＧＰＵが設定する等のように、任意の適切な所定のイベントであってもよく、これは、所望の実装に応じて、キュー内の所望の保留中のｐｕｔコマンド又は次の保留中のｐｕｔコマンドに対応する。
【００２７】
いくつかの実装では、ＣＰＵ２１０は、ターゲットを示すメタデータ、ソースを示すポインタ、メッセージを送信する前に待機するトリガの数を示す閾値、及び／又は、ネットワークメッセージをリモートターゲットに送信するのに必要な他のプロトコル固有情報を含むことができるリモートｐｕｔコマンド２１５を事前に生成する。このコマンドパケットは、コマンドインタフェースを介してＮＩＣに通信することができ、内部ＮＩＣメモリ又はグローバルシステムメモリに記憶することができる。ＮＩＣは、カウンタを、ローカルメモリのプール又はグローバルシステムメモリから各メッセージに割り当てて、ＧＰＵから受信したトリガの数を追跡することができる。
【００２８】
ＧＰＵ２２０は、その動作中にカーネルを実行し、ネットワーク２６０を介してリモートＧＰＵに転送するためのデータを生成することができる。このようなデータが利用可能になると、ＧＰＵ２２０は、当該データをシステムメモリ２３０の送信バッファ２３５に書き込む。この例では、送信バッファは、システムメモリに実装されている。送信バッファは、ＧＰＵ２２０のローカルメモリ等の任意の適切なメモリに実装することができ、これは、特定の実施形態でのかかるメモリの利用可能性に依存する場合がある。
【００２９】
送信バッファ２３５内のデータがＮＩＣ２４０に見えるようになった後、ＧＰＵ２２０は、１つの保留中のｐｕｔコマンド２１５を実行するための信号をＮＩＣ２４０に送る。ＧＰＵは、適切なメモリフェンスを使用して、全ての変更データが送信バッファにフラッシュされ、ＮＩＣから見えるようにすることができる。この例では、ＧＰＵ２２０は、ｐｕｔコマンド２１５’’に関連するカウンタ値２１８’’をデクリメントするための信号をＮＩＣ２４０に送る動作を実行する。動作は、グローバルアトミックメモリ更新、メモリマップドレジスタ書き込み、又は、他の適切なトリガメカニズムとすることができる。カウンタ変数は、デバイスメモリ２４５又は他の適切な位置に記憶することができる。例えば、デクリメント後のカウンタ２１８’’の現在の値が、保留中のリモートｐｕｔコマンド２１５’’のメタデータ２１６’’に含まれる閾値と一致する場合、ＮＩＣ２４０は、リモートｐｕｔコマンド２１５’’を実行し、バッファポインタ２１７’’によって示された送信バッファ２３５内の位置に存在するデータを、ネットワーク２６０を介して、メタデータ２１６’’によって示されたＲＤＭＡターゲットに送信する。
【００３０】
ＮＩＣをトリガするＧＰＵの１つの可能な実装形態は、以下の表１の疑似コードによって示される。
【表１】
2019532427.tif 000003
【００３１】
表１の擬似コードは、グローバルアトミックを使用して、ＧＰＵによってＮＩＣのためのｐｕｔ動作をアクティブにする。この例では、ＮＩＣがメモリアドレスをポーリングする必要がなく、メモリ値が変化したときに通知を受信することができる場合、ＮＩＣは、ｍｗａｉｔのようなセマンティクスを使用して、カウンタを効率的に待機することができる。これは、ＮＩＣキャッシュとＧＰＵキャッシュとの間のキャッシュラインの制御の不要な転送を回避するという利点を有することができる。この例では、統一されたＨＳＡのようなアドレス空間を想定している。
【００３２】
ＮＩＣをトリガするＧＰＵの別の可能な実施形態は、以下の表２の疑似コードによって示される。
【表２】
2019532427.tif 000004
【００３３】
表２の疑似コードは、ローカルＬＤＳ同期とグローバルフラグとを用いた２段階の通知を使用する。このアプローチは、グローバルシグナルへの書き込みによって単一のワークアイテムにメッセージをトリガさせる前に、ローカルカウンタを使用してワークグループ内で同期する。このアプローチは、制御分岐の影響を受ける可能性がある。また、このアプローチは、単純なメモリマップドドアベルレジスタとして実装することができるフラグを使用して、ＮＩＣの設計を簡素化する。
【００３４】
図３は、ＧＰＵリモート通信の態様を示す例示的な方法３００を示すフローチャートであり、例えば、例示的なトポロジ２００及び／又は例示的なデバイス１００を使用することができる。
【００３５】
ステップ３１０では、コンピュータシステムのＣＰＵ（ＣＰＵ２１０等）は、例えばリモートｐｕｔコマンド等（リモートｐｕｔコマンド２１５等）の１つ以上の通信コマンドを生成し、これらのコマンドを、ＮＩＣ（例えば、ＮＩＣ２４０等）又は他のインタフェースデバイス上のキューに記憶する。各通信コマンドは、送信バッファへのポインタを含む。この例では、送信バッファは、コンピュータシステムのシステムメモリ（システムメモリ２３０等）の一部である。送信バッファは、他の実施形態では、ＧＰＵローカルメモリ又は別のメモリの一部とすることもできる。
【００３６】
ステップ３２０では、コンピュータシステムのＧＰＵ（ＧＰＵ２２０等）は、別のコンピュータシステムのＧＰＵと通信するためのデータを生成する。例えば、ＧＰＵは、リモートＧＰＵが使用するデータを生成するカーネルを実行することができる。ステップ３３０では、ＧＰＵは、生成されたデータを送信バッファに記憶する。ステップ３４０では、ＧＰＵは、送信バッファ内でデータが準備できていることをＮＩＣに知らせる。この例では、ＧＰＵは、ＮＩＣのデバイスメモリ又はシステムメモリ等のメモリに記憶されているカウンタ変数をデクリメントすることによって、データを送信する準備ができていることを知らせる。他の実施形態では、ＧＰＵは、ＮＩＣのデバイスメモリ又はメインシステムメモリ内のレジスタの値を設定すること等によって、他の任意の適切な方法で送信バッファ内でデータが準備できていることをＮＩＣ又は他のインタフェースデバイスに知らせることができる。
【００３７】
ステップ３５０では、インタフェースデバイスは、ＧＰＵからの信号に基づいて、１つの通信コマンドを実行する。例えば、信号が、事前に生成されたｐｕｔコマンドに関連するデクリメントされたカウンタ変数である場合、インタフェースデバイスは、カウンタ変数を、通信コマンドに含まれる閾値と比較することができる。カウンタ変数が複数のコマンドのうち１つのコマンドに記憶された閾値の値と一致する場合、ＮＩＣは、当該コマンドを実行する。通信コマンドを実行することによって、ＮＩＣは、送信バッファ内のデータ（例えば、通信コマンド内のポインタによって示された位置に存在する）を、コンピュータ通信ネットワークを介して、通信コマンド内で指定されたターゲット（例えば、リモートＧＰＵのメモリ）に送信することができる。
【００３８】
ステップ３１０では、ステップ３２０〜３５０が順次示されていることに留意されたい。また、ＣＰＵによる通信コマンドの生成は、他のステップの前及び他のステップとは無関係に、任意の適切なタイミングで生じる場合がある。これには、ＲＤＭＡ動作のクリティカルパスからＣＰＵを削除するという利点がある。
【００３９】
図４は、ＧＰＵリモート通信の態様を示す例示的な方法４００を示すフローチャートであり、例えば、例示的なトポロジ２００及び／又は例示的なデバイス１００のＧＰＵを使用することができる。
【００４０】
ステップ４１０では、ＧＰＵ（ＧＰＵ２２０等）は、カーネルを実行し、コンピュータ通信ネットワークを介してリモートメモリ位置に送信するためのデータを生成する。リモートメモリ位置は、リモートＧＰＵのデバイスメモリ、リモートＧＰＵにアクセス可能なリモートデバイスのシステムメモリ、又は、任意の適切なＲＤＭＡターゲットであってもよい。
【００４１】
データが利用可能であるという条件４２０（例えば、ＧＰＵがカーネル又は特定のワークグループの実行を完了し、リモートメモリに送信するためのデータを生成した）では、ステップ４３０において、ＧＰＵは、データを送信バッファに書き込む。この例では、送信バッファは、システムメモリに実装されている。送信バッファは、ＧＰＵのデバイスメモリ等の任意の適切なメモリにも実装することができる。ステップ４４０では、ＧＰＵは、本明細書に記載されたもの等の任意の適切なシグナリング技術を使用して、コンピュータ通信ネットワークを介して送信バッファ内のデータをリモートＧＰＵ又は他のターゲットに送信するように、インタフェースデバイスをトリガする。例えば、ＧＰＵは、カウンタ変数をデクリメントして、デクリメントされたカウンタ変数と一致した関連する閾値を有する、事前に記憶されたリモートｐｕｔコマンドを実行するように、インタフェースデバイスに信号を送ってもよい。
【００４２】
図５は、ＧＰＵリモート通信の態様を示す例示的な方法５００を示すフローチャートであり、例えば、例示的なトポロジ２００及び／又は例示的なデバイス１００のＮＩＣを使用することができる。
【００４３】
ＮＩＣが事前に生成されたリモートｐｕｔコマンドをＣＰＵから受信したという条件５１０では、ステップ５２０において、ＮＩＣは、リモートｐｕｔコマンドをデバイスメモリに記憶する。そうでない場合又はリモートｐｕｔコマンドを記憶した後、ＮＩＣは、データ準備完了信号（データが準備できていることを示す信号）をＧＰＵから受信したかどうかを判別する。例えば、ＮＩＣは、システムメモリ内のカウンタ変数の値（ＧＰＵがデクリメントすることができる）を１つ以上のリモートｐｕｔコマンドの閾値と比較してもよいし、ＧＰＵによって設定可能なフラグ又はドアベルバッファの値をテストしてもよい。ＧＰＵから準備完了信号を受信したという条件５３０では、対応する事前に記憶されたｐｕｔコマンドがローカルデバイスメモリに記憶されていると仮定すると、ＮＩＣは、事前に記憶されたリモートｐｕｔコマンドを実行して、リモートｐｕｔコマンドのポインタによって示されたアドレスに存在する送信バッファに記憶されたデータを、コンピュータ通信ネットワークを介して、ＧＰＵメモリ、システムメモリ又は他の適切なＲＤＭＡターゲット等のリモートシステムのメモリに送信する。次に、ＮＩＣは、ＧＰＵからの新たな準備完了信号又はＣＰＵからの事前に生成された通信コマンドの監視を再開することができる。
【００４４】
図５に示すように、ステップ５１０及び５２０は、必ずしもステップ５３０，５４０と順次実行されるわけではない。例えば、ステップ５２０で通信コマンドを記憶した後、ＮＩＣは、ステップ５１０で事前に生成された追加のｐｕｔコマンドを受信することなく、ステップ５３０でＧＰＵからの準備完了信号を無期限に監視することができる。したがって、ＣＰＵによる通信コマンドの生成は、他のステップの前及び他のステップとは無関係に、任意の適切なタイミングで生じる場合がある。これには、ＲＤＭＡ動作のクリティカルパスからＣＰＵを削除するという利点がある。
【００４５】
図６は、ＧＰＵリモート通信の態様を示す例示的な方法６００を示すフローチャートであり、例えば、例示的なトポロジ２００及び／又は例示的なデバイス１００のＣＰＵを使用することができる。
【００４６】
ステップ６１０では、ＧＰＵの出力に対する将来の通信パターンが決定又は予測される。ステップ６２０では、ＣＰＵは、通信パターンに基づいて、１つ以上の通信コマンドを生成する。通信コマンドは、例えばリモートｐｕｔコマンドとすることができ、ＧＰＵからのデータを記憶する送信バッファへのポインタ、データの宛先を示す情報、及び、場合によってはカウンタ値又は他のトリガ情報を含むことができる。ステップ６３０では、ＣＰＵは、通信コマンドを、ＮＩＣのデバイスメモリ又は他の適切なメモリに記憶するために、ＮＩＣ又は他の適切なインタフェースデバイスに送信する。
【００４７】
本明細書における開示に基づいて多くの変形が可能であることを理解されたい。上記では、特徴及び要素が特定の組み合わせで説明されているが、各特徴又は要素は、他の特徴及び要素無しに単独で使用されてもよいし、他の特徴及び要素を伴って又は伴わずに様々な組み合わせで使用されてもよい。
【００４８】
提供された方法は、汎用コンピュータ、プロセッサ又はプロセッサコアで実施されてもよい。適切なプロセッサには、例として、汎用プロセッサ、専用プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連する１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）回路、他のタイプの集積回路（ＩＣ）、及び／又は、ステートマシンが含まれる。このようなプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令（このような命令は、コンピュータ可読媒体に記憶することが可能である）の結果及びネットリストを含む他の中間データを用いて製造プロセスを構成することによって製造され得る。このようなプロセスの結果は、実施形態の形態を実施するプロセッサを製造するために半導体製造プロセスにおいて使用されるマスクワークであってもよい。
【００４９】
本明細書で提供された方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア又はファームウェアで実施されてもよい。非一時的なコンピュータ可読記憶媒体の例には、例えば読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク、リムーバブルディスク等の磁気媒体、光磁気記憶媒体、例えばＣＤ−ＲＯＭディスク及びデジタル多用途ディスク（ＤＶＤ）等の光学媒体が含まれる。
【図１】
2019532427.tif 000005
【図２】
2019532427.tif 000006
【図３】
2019532427.tif 000007
【図４】
2019532427.tif 000008
【図５】
2019532427.tif 000009
【図６】
2019532427.tif 000010
【国際調査報告】
2019532427.tif 000011
2019532427.tif 000012