IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザイリンクス インコーポレイテッドの特許一覧

特表2024-517706SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ
<>
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図1
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図2
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図3
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図4
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図5
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図6
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図7
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図8
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図9
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図10A
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図10B
  • 特表-SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ 図10C
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-23
(54)【発明の名称】SMARTNICにおけるネットワーク接続型MPI処理アーキテクチャ
(51)【国際特許分類】
   G06F 13/12 20060101AFI20240416BHJP
   G06F 13/28 20060101ALI20240416BHJP
   G06F 13/38 20060101ALI20240416BHJP
【FI】
G06F13/12 330A
G06F13/28 310A
G06F13/38 330Z
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023565613
(86)(22)【出願日】2022-03-16
(85)【翻訳文提出日】2023-10-25
(86)【国際出願番号】 US2022020476
(87)【国際公開番号】W WO2022235337
(87)【国際公開日】2022-11-10
(31)【優先権主張番号】17/307,747
(32)【優先日】2021-05-04
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591025439
【氏名又は名称】ザイリンクス インコーポレイテッド
【氏名又は名称原語表記】XILINX INCORPORATED
(74)【代理人】
【識別番号】110001195
【氏名又は名称】弁理士法人深見特許事務所
(72)【発明者】
【氏名】チョン,グアンウェン
(72)【発明者】
【氏名】フー,チェンチェン
(72)【発明者】
【氏名】ブレブナー,ゴードン・ジョン
(57)【要約】
本明細書の実施形態は、ハードウェア計算エンジン(1つ以上のアクセラレータを含み得る)に依存するCPU中心のソリューションにおけるデータコピーオーバーヘッドを低減するSmartNICにおけるインターフェースシェルを説明する。インターフェースシェルは、CPUの関与なしにタグマッチング及びアドレス変換をオフロードする。更に、インターフェースシェルは、計算エンジンが、余分なデータコピーなしに、すなわち、最初にデータをCPUのメモリにコピーすることなしに、ネットワークから直接メッセージを読み出すことを可能にする。
【特許請求の範囲】
【請求項1】
ネットワークインターフェースカード(NIC)であって、
回路を備えるメッセージパッシングインターフェース(MPI)シェルを備え、前記回路は、
ネットワークから受信されたパケットをスニフしてMPIメッセージを識別することと、
前記MPIメッセージに含まれるデータを、中央処理装置(CPU)であって、前記CPUは、前記NICと同じ計算ノードに配置される、CPUに対応するメモリに最初にコピーすることなく、処理のために前記MPIメッセージに含まれる前記データを計算回路に転送することと、を行うように構成されている、NIC。
【請求項2】
前記MPIシェルは、CPUの関与なしに前記MPIメッセージに含まれる前記データについてタグマッチング及びアドレス変換を実施するよう構成され、前記MPIシェルは、
前記MPIメッセージに対応するパケットを入力として受信し、アドレスルックアップ要求を生成するように構成されたタグマッチャと、
前記タグマッチャから前記アドレスルックアップ要求を受信し、前記CPU又は前記アドレス変換器内に配置されたメモリマネージャのいずれかから割り当てられたアドレスを生成するように構成されたアドレス変換器と、
前記MPIメッセージを識別するために前記ネットワークから受信された前記パケットをスニフし、前記MPIメッセージに対応する前記パケットについてのメタデータであって、前記メタデータは、前記アドレスルックアップを生成するために前記タグマッチャによって使用される情報を含む、メタデータを生成するように構成されたパケット分類器と、
前記アドレス変換器から前記アドレスを受信し、前記MPIメッセージ内の前記データを、前記計算回路と共有されるターゲットメモリ内の前記アドレスに記憶するように構成されたデータムーバと、
ローカルメモリとインターコネクトとに結合されたメモリコントローラを備えるデータコントローラであって、前記データコントローラは、前記データムーバの出力に結合され、前記インターコネクトは、前記MPIシェルと前記CPUとの間のインターフェースとして機能する、データコントローラと、を更に備える、請求項1に記載のNIC。
【請求項3】
NICであって、
ハードウェア計算回路と、
回路を備えるMPIシェルと、を備え、前記回路は、
ネットワークから受信されたパケットをスニフしてMPIメッセージを識別することと、
前記MPIメッセージに含まれるデータを処理のために前記計算回路に転送することと、
前記MPIメッセージに含まれる前記データを処理するように前記計算回路に命令する命令を、前記NICの外部のCPUから受信することと、を行うように構成されている、NIC。
【請求項4】
NICであって、
回路を備えるインターフェースシェルを備え、前記回路は、
ネットワークから受信されたパケットをスニフして、メッセージを使用してタスクが分散計算システム内のノード間で伝送される前記分散計算システムに対応するメッセージを識別することと、
前記メッセージに含まれるデータを、中央処理装置(CPU)であって、前記CPUは、前記NICと同じ計算ノードに配置される、CPUに対応するメモリに最初にコピーすることなく、処理のために前記メッセージに含まれる前記データをハードウェア計算回路に転送することと、を行うように構成されている、NIC。
【請求項5】
前記計算回路は、前記NIC内に配置されている、請求項1、3又は4に記載のNIC。
【請求項6】
前記計算回路及び前記インターフェースシェルは、前記NIC内の同じ集積回路上に配置されている、請求項4に記載のNIC。
【請求項7】
前記インターフェースシェルは、CPUの関与なしに前記メッセージに含まれる前記データについてタグマッチング及びアドレス変換を実施するように構成されている、請求項4に記載のNIC。
【請求項8】
前記インターフェースシェルは、前記メッセージに含まれる前記データを処理するように前記計算回路に命令する命令を前記CPUから受信するように構成されている、請求項4に記載のNIC。
【請求項9】
前記計算回路及び前記MPIシェルは、前記NIC内の同じ集積回路上に配置されている、請求項1及び3に記載のNIC。
【請求項10】
前記MPIシェルは、CPUの関与なしに、前記MPIメッセージに含まれる前記データについてタグマッチング及びアドレス変換を実施するよう構成されている、請求項1及び3に記載のNIC。
【請求項11】
前記MPIシェルは、
前記MPIメッセージに対応するパケットを入力として受信し、アドレスルックアップ要求を生成するように構成されたタグマッチャと、
前記タグマッチャから前記アドレスルックアップ要求を受信し、前記CPU又は前記アドレス変換器内に配置されたメモリマネージャのいずれかから割り当てられたアドレスを生成するように構成されたアドレス変換器と、を更に備える、請求項10に記載のNIC。
【請求項12】
前記MPIシェルは、
前記MPIメッセージを識別するために前記ネットワークから受信された前記パケットをスニフし、前記MPIメッセージに対応する前記パケットについてのメタデータであって、前記メタデータは、前記アドレスルックアップを生成するために前記タグマッチャによって使用される情報を含む、メタデータを生成するように構成されたパケット分類器を更に備える、請求項11に記載のNIC。
【請求項13】
前記MPIシェルは、
前記アドレス変換器から前記アドレスを受信し、前記MPIメッセージに含まれる前記データを、前記計算回路と共有されるアドレスターゲットメモリに記憶するように構成されたデータムーバを更に備える、請求項12に記載のNIC。
【請求項14】
前記MPIシェルは、CPUの関与なしに前記MPIメッセージに含まれる前記データについてタグマッチング及びアドレス変換を実施するよう構成され、前記MPIシェルは、
前記MPIメッセージに対応するパケットを入力として受信し、アドレスルックアップ要求を生成するように構成されたタグマッチャと、
前記タグマッチャから前記アドレスルックアップ要求を受信し、前記CPU又は前記アドレス変換器内に配置されたメモリマネージャのいずれかから割り当てられたアドレスを生成するように構成されたアドレス変換器と、
前記MPIメッセージを識別するために前記ネットワークから受信された前記パケットをスニフし、前記MPIメッセージに対応する前記パケットについてのメタデータであって、前記メタデータは、前記アドレスルックアップを生成するために前記タグマッチャによって使用される情報を含む、メタデータを生成するように構成されたパケット分類器と、
前記アドレス変換器から前記アドレスを受信し、前記MPIメッセージ内の前記データを、前記計算回路と共有されるターゲットメモリ内の前記アドレスに記憶するように構成されたデータムーバと、
ローカルメモリとインターコネクトとに結合されたメモリコントローラを備えるデータコントローラであって、前記データコントローラは、前記データムーバの出力に結合され、前記インターコネクトは、前記MPIシェルと前記CPUとの間のインターフェースとして機能する、データコントローラと、を更に備える、請求項3に記載のNIC。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の例は、概して、スマートネットワークインターフェースカード(SmartNIC)のためのメッセージパッシングインターフェース(MPI)シェルに関する。
【背景技術】
【0002】
データ及びスケールアウトワークロード/アプリケーションの膨張は、現代のデータセンタに拡張性及び性能の課題をもたらしている。現代のアプリケーションに低レイテンシ、高スループット、及び低電力消費を実現するために、データセンタは、しばしば、それらのコンピューティングタスクを分散及びネットワーク化された設定に置いている。例えば、データセンタは、ネットワークを介して接続された複数のノードを含むことができ、アーキテクチャ内の各ノードは、マルチコア中央処理装置(CPU)と、ASIC(特定用途向け集積回路)、FPGA(フィールドプログラマブルゲートアレイ)、又はGPU(グラフィックス処理ユニット)の形態のハードウェアアクセラレータとを有するホストを含む。
【0003】
MPIは、科学コンピューティング、遺伝コンピューティング、及び機械学習などの種々のドメインにわたる多くの分散アプリケーションにおいて広く展開されている。それは、数十年の間、並列及び分散コンピューティングを開発するための事実上のプログラミングモデルであった。MPIは、ポイントツーポイント通信並びに集合的及び同期動作などの種々のプリミティブを提供する。ノード間のデータ通信(送信/受信)は、ネットワークを介して行われる。計算がアクセラレータにオフロードされる従来のMPIアプリケーションでは、ネットワークから受信されたデータは、まずホストのメモリに記憶され、その後、PCIe(Peripheral Component Interconnect Express)バスを介して計算加速のためにアクセラレータのメモリ(以下、デバイスメモリと称する)にコピーされる。計算後、結果は通常、ホストのメモリに再びコピーされる。複数のデータコピーのオーバーヘッドにより、このCPU中心のソリューションではシステム性能が著しく低下し、大きなレイテンシを被る。別の言い方をすれば、ネットワークを介して別のノードからタスクを受信するとき、受信ノード上のCPUは、最初にデータを処理し、次いで、ノード内のアクセラレータに対応するメモリにデータを送らなければならない。終了すると、アクセラレータは、ノードが処理されたデータを要求側ノードに最終的に伝送する前に、データをCPUのメモリに返信する。したがって、MPI環境においてアクセラレータを使用することは、データがCPUのためのメモリとアクセラレータとの間で伝送されるため、大幅なオーバーヘッドが生成する可能性がある。
【発明の概要】
【0004】
一実施形態は、ネットワークから受信したパケットをスニフしてメッセージパッシングインターフェース(MPI)メッセージを識別し、MPIメッセージに含まれるデータを中央処理装置(CPU)に対応するメモリに最初にコピーすることなく、MPIメッセージに含まれるデータを処理のために計算回路に転送するように構成された回路を含むMPIシェルを含むネットワークインターフェースカード(NIC)を説明する。また、CPUは、NICと同じ計算ノードに配置される。
【0005】
本明細書で説明される別の実施形態は、ハードウェア計算回路と、ネットワークから受信されたパケットをスニフしてMPIメッセージを識別し、MPIメッセージに含まれるデータを処理のために計算回路に転送し、計算回路にMPIメッセージに含まれるデータを処理するように命令する命令をNICの外部のCPUから受信するように構成された回路を備えるMPIシェルとを含むNICである。
【0006】
本明細書で説明される別の実施形態は、ネットワークから受信されたパケットをスニフして、メッセージを使用して分散計算システム内のノード間でタスクが伝送される分散計算システムに対応するメッセージを識別し、メッセージに含まれるデータをCPUに対応するメモリに最初にコピーすることなく、処理のためにメッセージに含まれるデータをハードウェア計算回路に転送するように構成された回路を備えるインターフェースシェルを含むNICである。また、CPUは、NICと同じ計算ノードに配置される。
【0007】
上記の特徴が詳細に理解され得るように、上記で簡潔に要約されたより具体的な説明が、例示的な実装形態を参照することによって行われ得、それらの実装形態のうちのいくつかが添付の図面に示される。しかしながら、添付の図面は、典型的な例示の実装形態のみを示しており、したがって、その範囲を限定するものと見なされるべきではないことに留意されたい。
【図面の簡単な説明】
【0008】
図1】一例による、MPIシェルを含むSmartNICを有する並列計算システムを示す。
図2】一例による、並列計算システムにおけるノードのブロック図である。
図3】一例による、MPIシェルのブロック図である。
図4】一例による、MPIシェル内のパケット分類器を示す。
図5】一例による、MPIシェル内のタグマッチャを示す。
図6】一例による、MPIシェル内のアドレス変換器を示す。
図7】一例による、MPIシェル内のデータムーバを示す。
図8】一例による、MPIシェル内の計算エンジンを示す。
図9】一例による、MPIシェル内のデータコントローラを示す。
図10A】一例による、MPIシェルを異なるSmartNIC実装形態に統合することを示す。
図10B】一例による、MPIシェルを異なるSmartNIC実装形態に統合することを示す。
図10C】一例による、MPIシェルを異なるSmartNIC実装形態に統合することを示す。
【発明を実施するための形態】
【0009】
様々な特徴が、図面を参照して以下に記載される。図面は縮尺どおりに描かれている場合もあるし、描かれていない場合もあり、同様の構造又は機能の要素は図面全体を通して同様の参照番号によって表されていることに留意されたい。図面は、特徴の説明を容易にすることのみを意図していることに留意されたい。それらは、明細書の網羅的な説明として、又は特許請求の範囲に対する限定として特徴付けられていない。加えて、図示された例は、示された全ての態様又は利点を有する必要はない。特定の実施例に関連して説明される態様又は利点は、必ずしもその実施例に限定されず、そのように例解されていない場合、又はそのように明示的に説明されていない場合であっても、任意の他の実施例において実施することができる。
【0010】
本明細書の実施形態は、ハードウェアアクセラレータに依存するCPU中心のソリューションにおけるデータコピーオーバーヘッドを低減するSmartNICにおけるMPIシェルを説明する。MPIシェルは、CPUの関与なしにタグマッチング及びアドレス変換をオフロードする。更に、MPIシェルは、アクセラレータが、余分なデータコピーなしに、すなわち、最初にデータをCPUのメモリにコピーすることなしに、ネットワークから直接メッセージを読み出すことを可能にする。更に、MPIシェルは、MPIプログラミングモデルがSmartNICを有するネットワーク中心のデータセンタアーキテクチャを包含することを可能にし、MPIシェルは、アプリケーションにおける大規模な変更なしに既存のMPIライブラリにシームレスに統合されることができ、MPIシェルは、データ計算を可能な限り近くに(例えば、SmartNIC上のコンピュータエンジン又はアクセラレータに)もたらして、高性能、低レイテンシ、及び低電力消費を達成する。
【0011】
一実施形態では、SmartNIC及び計算エンジンは、FPGAベースのSmartNICデバイスなどの単一のデバイス上に設計することができる。この種のデータセンタアーキテクチャは、高速(40Gbps~200Gbps)ネットワークをターゲットとし、その分散型適応コンピューティング機能により改善された計算能力を提供する。データセンタアーキテクチャの固有の異種性、スケーラビリティ、及び効率により、データセンタアーキテクチャは、高性能、低レイテンシ、及び低電力消費を要求する現代の分散システムアプリケーションを厳密に包含する。
【0012】
図1は、一例による、MPIシェルを含むSmartNICを有する計算システム100を示している。図示のように、計算システム100(例えば、並列計算システム)は、ネットワーク150(例えば、ローカルアクセスネットワーク(LAN))を介してインターコネクトされた複数のノード105を含む。各ノード105は、CPU 110及びSmartNIC 115を含むことができるが、ノード105は、複数のCPU(複数のコアを含むことができる)及び複数のSmartNIC 115を含み得る。一実施形態では、ノード105はMPIを使用して通信するが、本明細書で説明される実施形態は、タスクがノード105間で伝送される任意の分散計算システムを含むように拡張することができる。
【0013】
ノード105Aにおいて、CPU 110は、SmartNIC 115に依存してネットワーク150と通信し、したがって他のノード105と通信する。SmartNIC 115は、SmartNIC 115がシステム100内の他のノード105からノード105Aに伝送されたデータを「スニフ」又は「インターセプト」することを可能にするMPIシェル120を含む。このデータをCPU 110に対応するメモリ(例えば、RAM)に記憶する代わりに、CPU 110は、MPIシェル120に、代わりに統合計算エンジン125(計算回路とも称され、1つ以上のユーザ定義ハードウェアアクセラレータを含み得る)を用いてこのデータを処理するよう命令してよい。処理されると、CPU 110は、ネットワーク150を使用して処理されたデータを別のノード105に伝送するようにSmartNIC 115に指示することができる。したがって、データ(受信されたデータ及び処理されたデータの両方)は、決してCPU 110のメモリに記憶される必要はない。したがって、データ書き込み/読み出しプロセスは、CPU及びその対応するメモリ複合体をバイパスする。
【0014】
一実施形態では、計算エンジン125は、SmartNIC 115とは別個である。その場合、MPIシェル120は、依然として、MPIメッセージを処理のために計算エンジン125に直接提供し、処理されたデータを計算エンジン125から受信し、CPU 110のメモリコンプレックスをバイパスしながら、処理されたデータをシステム100内の異なるノード105に転送することができる。CPU 110は、MPIシェル120を使用してこのプロセスを制御することができるが、MPIメッセージは、別個の計算エンジン125に到達するためにCPU 110を通って流れる必要はない。
【0015】
MPIシェル120及び計算エンジン125は、SmartNIC 115内のハードウェア(例えば、回路)である。一実施形態では、MPIシェル120及び計算エンジン125は、SmartNICのFPGAのプログラマブルロジックに実装される。別の実施形態では、MPIシェル120及び計算エンジン125は、ASIC又はシステムオンチップ(SoC)に実装される。その場合、MPIシェル120及び計算エンジン125を形成する回路は強化される。いずれの場合も、MPIシェル120は、SmartNIC 115内の集積回路に実装されてもよく、一方、計算エンジン125は、SmartNIC 115上の同じ集積回路又は異なる集積回路に実装されてもよく、SmartNIC 115とは別に実装されてもよい。
【0016】
図2は、一例による、並列計算システムにおけるノードのブロック図である。一実施形態では、図2は、図1のノード105内の構成要素を示している。この例では、ノード105は、MPIアプリケーション205、MPIライブラリ210、及びドライバ250を含む、CPU 110によって実行されるソフトウェアを含む。これらのドライバ250は、ネットワークスタック215、カーネルドライバ217、及びMPIシェルランタイム220を含む。MPIアプリケーション205は、科学コンピューティングアプリケーション、遺伝コンピューティングアプリケーション、又は機械学習/人口知能アプリケーションなどの任意のアプリケーションを含み得る。MPIライブラリ210は、MPIアプリケーション205が分散コンピューティング環境(例えば、図1の計算システム100)を利用することを可能にする。MPIライブラリ210は、分散コンピューティング環境内のノード間のポイントツーポイント通信並びに集合的動作及び同期動作を可能にすることができる。
【0017】
ドライバ250は、MPIアプリケーション205及びライブラリ210がSmartNIC 115と通信することを可能にする。ネットワークスタック215及びカーネルドライバ217は、本明細書の実施形態を実施するために変更又は更新される必要はない。しかしながら、MPIシェルランタイム220は、CPU 110及びCPU 110上で実行されるソフトウェア(例えば、MPIアプリケーション205)が、SmartNIC 115内のMPIシェル120を制御し、通信することを可能にする新たなドライバ250である。一実施形態では、MPIシェルランタイム220は、デバイスメモリ管理と、CPU 110とMPIシェル120との間の通信(例えば、後述するように計算エンジン125を制御すること)とに用いられるソフトウェアライブラリである。デバイスメモリ(すなわち、計算エンジン125によって使用されるローカルメモリ)のメモリ管理のために、MPIシェルランタイム220は、ハードウェアプロセスのためにデバイスメモリに物理的に配置されたメッセージバッファを割り当て、ハードウェアプロセスがそのライフサイクルを終了したときにバッファの割り当てを解除する。これは、固定サイズブロック割り当て、バディーメモリ割り当て、及びスラブ割り当てのような種々のメモリ管理アルゴリズムで実装することができる。MPIシェルランタイム220は、MPIシェル120とは別個のものとして示されているが、MPIシェルの一部と見なすことができ、ランタイム220はシェルのソフトウェア部分であり、シェルのハードウェア部分はSmartNIC 115に配置される。
【0018】
SmartNIC 115は、CPU 110で実行されるソフトウェアとインターフェースするSmartNICダイレクトメモリアクセス(DMA)サブシステム225と、SmartNICメディアアクセス制御(MAC)サブシステム230とを含む。以下の説明では、概して、SmartNIC 115と同じノード内のCPU 110、及びCPU 110によって実行されるソフトウェアを含むことができる「ホスト」に言及する。
【0019】
典型的なMPIの実装形態に焦点を当てると、MPI規格は概して、送信者(例えばMPI_send)と受信者(MPI_rcv)とを含む両側通信を使用する。送信者では、第1のノード内のCPUが、TCP/IP、RoCE(Remote Direct Memory Access over Converged Ethernet)、又はiWARPなどのトランスポートプロトコルを使用して通信チャネルを介して送信するためのヘッダ及びデータを有するメッセージを準備し、通信チャネルを介して受信者にメッセージを伝送する。受信者では、第2のノード内のCPUが、通信チャネルからメッセージヘッダ及びデータを抽出し、それらを一時バッファに記憶し、タグマッチングと称される動作を実施して、着信メッセージが受信者によってポストされた受信要求とマッチングするかどうかをチェックし、メッセージを宛先受信バッファにコピーする。
【0020】
ノードがSmartNIC 115に統合されたMPIシェル120を有する場合、MPIプロセスは、ハードウェアプロセスとソフトウェアプロセスとに分離することができる。ハードウェアプロセスは、そのプロセスを実施するハードウェア計算エンジン125がSmartNICにあるか又はそれに取り付けられていることを示し、一方、ソフトウェアプロセスは、CPU 110においてのみ実施される従来のMPIプロセスである。各プロセスは、その識別子として固有の番号、ランクを有する。ソフトウェアプロセスとハードウェアプロセスとの間の任意の両側通信に関して、以下のように4つの例に分類することができる。
【0021】
例A:送信者及び受信者がソフトウェアプロセスである場合、システムは、いかなる変更もなしに、上述の従来のMPI通信フローを活用する。すなわち、通信は、シェル120の影響を受けることなく、MPIシェル120を通過する。
【0022】
例B:送信者がソフトウェアプロセスであるが、受信者がハードウェアプロセスである場合、システムは、上述の従来のMPI送信動作を何ら変更することなく活用する。しかし、受信者側では、MPIシェル120は、SmartNIC MACサブシステム230から直接、ハードウェアプロセスに関連するメッセージのパケットをスニフ/フィルタリングし、デバイスメモリ(すなわち、ローカルアクセラレータ又は計算エンジンメモリ)に配置された宛先受信バッファにデータを記憶する。タグマッチング及びアドレス変換は、CPUの関与なしにMPIシェル120にオフロードされる(以下でより詳細に説明される)。メッセージが完全に受信され、デバイスメモリに記憶されると、MPIシェル120は、受信者のホスト(例えば、CPU 110で実行されるMPIアプリケーション205)に通知する。全てのメッセージが準備されると、ホストは、メッセージアドレスを引数として有する計算コマンドを、計算のために特定のハードウェア計算エンジン125に発行する。計算エンジン125は、次いで、そのデバイスメモリからメッセージを読み取り、計算を開始し、適用可能な場合、結果をデバイスメモリにライトバックし、終了後、ホスト(例えば、MPIアプリケーション205)に通知する。
【0023】
例C:送信者がハードウェアプロセスであるが、受信者がソフトウェアプロセスである場合、受信者において、受信動作は、上述した従来のMPI受信動作と同じである。しかし、送信者では、ホストは、SmartNIC DMAサブシステム225を使用して、メッセージがデバイスメモリに記憶されている場合、SmartNIC 115内の伝送(TX)ロジックにメッセージアドレスを通知する。次いで、TXロジックは、MPIシェル内のデータコントローラ(図3及び図9で詳細に説明する)を介してメッセージを読み出し、データをリモート受信者に送信する。メッセージがホスト側メモリに記憶されている場合、送信動作は従来のMPI動作と同じである。
【0024】
例D:送信者と受信者の両方がハードウェアプロセスである場合、受信者では、例Bで述べた動作に従う。送信者では、例Cで述べた動作に従う。
【0025】
図3は、一例による、MPIシェル120のブロック図である。特に、図3は、SmartNICに存在するMPIシェル120の部分を示している。図示されていないが、MPIシェル120は、ホスト(例えば、図2のMPIシェルランタイム220)で実行されるMPIシェルランタイム(例えば、ソフトウェアドライバ)を含み得る。
【0026】
MPIシェル120のハードウェアは、データコントローラ305と、データムーバ320と、アドレス変換器325と、タグマッチャ330と、パケット分類器335と、計算エンジン125とを含む。これらのハードウェア要素(例えば、回路)の各々は、以下の図においてより詳細に説明される。しかしながら、簡単な導入として、パケット分類器335は、MPIメッセージに関連する受信パケットをフィルタリング(又は識別)し、それらのパケットのメタデータを生成する。次いで、このメタデータは、MPIシェル120内の下流のハードウェア要素によって使用される。図示されていないが、パケット分類器335は、図2のSmartNIC MACサブシステム230からパケットを受信することができ、それは次にネットワークからパケットを受信する。
【0027】
タグマッチャ330は、ソースプロセスからの着信メッセージを、宛先プロセスにポストされた受信要求とマッチングさせる。アドレス変換器325は、着信MPIメッセージパケットについてメモリ(例えば、SmartNIC内のローカルメモリ)内の宛先アドレスを計算し、メッセージの準備完了を追跡する。データムーバ320は、AXIS(Advanced eXtensible Interface Streaming)プロトコルの形式のパケットをAXIプロトコルの形式のデータに変換し、MPIメッセージが完全に受信されたときに、ローカルホスト(例えば、ローカルCPU及びMPIアプリケーション)に割り込み又はプル信号を発行する。データコントローラ305は、MPIシェル120内の種々のハードウェア要素がSmartNIC内のメモリを共有及びアクセスするためのアービトレーションを実施する。計算エンジン125は、MPIメッセージ内のデータに対して任意のアクセラレータ機能を実施することができる。上述したように、計算エンジン125は、プログラム可能な又は強化されたロジックを使用して実装することができる。
【0028】
図4は、一例による、MPIシェル120内のパケット分類器335を示している。パケット分類器335は、パーサ405及びマッチングテーブル410を含む。概して、パケット分類器335は、MPI通信に関連するパケットをフィルタリングし、それらのパケットのメタデータを生成する。更に、図2のMPIシェルランタイム220内のテーブル構成は、パケット分類器335内のマッチングテーブル410内のエントリを書き込み、削除することができる。
【0029】
パーサ405は、着信パケットから情報を抽出する。情報は、メッセージヘッダ、パケットシーケンス番号、ペイロード長、及びフローIDを含み得る。一実施形態では、メッセージヘッダは、<ranksrc,rankdst,tag,context_id,opcode,message length(msg_len)>を含み、opcodeは、送信、受信、プット、及びゲットオペレーションなどのMPIオペレーションを識別するために使用される。ranksrc及びrankdst信号は、それぞれ、ソースプロセス及び宛先プロセスの一意の識別子である。フローIDは、パケットを分類するために使用され、フローIDの一例は、<IP送信元アドレス、IP宛先アドレス、プロトコル、送信元ポート、宛先ポート>で設計することができる。
【0030】
マッチングテーブル410は、パーサ405から導出されたフローID(fid)を入力として受け取り、fidに対応するフローのMPI通信情報を検索する。MPI通信情報は、ranksrc、rankdst、tag、context_idで定義される。マッチングテーブル410のエントリは、ホスト及びそのリモートピアがそれらのMPIハンドシェイクプロセスを終了したときに、ホスト(例えば、ローカルCPU)によって更新又は書き込まれる。更新/書き込み動作は、AXI-Liteインターフェースを使用して実装され得る。マッチングテーブル410は、ハッシングバイナリ/ターナリ/セミターナリアドレッサブルメモリ(BCAM/TCAM/STCAM)などを使用して実装することができる。
【0031】
パケット分類器335は、<ranksrc,rankdst,tag,context_id,opcode,msg_len,pkt_seq,payload_len,drop>を含むmetadatapcを出力し、ここで、ドロップ信号は、ルックアップ要求からのミス信号であり、マッチングテーブル410に出力される。すなわち、ドロップは、マッチングテーブル410がパーサ405から受信されたfidに対応するフローを見つけることができなかったときにハイとなる。ドロップ信号がハイであるとき、対応するパケットはSmartNICによってドロップされる。
【0032】
図5は、一例による、MPIシェル120内のタグマッチャ330を示している。タグマッチャ330は、ソースプロセスからの送信動作を宛先プロセスからの受信要求とマッチングさせる。図5に示されるように、タグマッチャ330は、2つのルックアップテーブル、すなわち、受信後(post_recv)マッチングテーブル505及び予期せぬメッセージ(unexpected_msg)マッチングテーブル510を含む。post_recvマッチングテーブル505は、unexpected_msgテーブル510内にマッチする要素を見つけることができないローカルホストからの受信要求を記憶するために使用され、unexpected_msgマッチングテーブル510は、post_recvマッチングテーブル505内にマッチするエントリを見つけることができない送信者からの到着メッセージを記憶する。テーブル505及び510は、ハッシング、トライベースの方法、TCAM、及び他の範囲探索技術を用いて実装され得る。
【0033】
タグマッチャ330の入力は、ホストからの受信要求(recv_req)、metadatapc、及びパケットである。パケットが送信者からのメッセージの第1のセグメントである場合、metadatapcは、<ranksrc,rankdst,context_id,tag>を有するメッセージヘッダを含む。タグマッチャ330の出力は、パケット、メモリ割り当て要求(alloc_reqpr)、アドレス更新要求(addr_udum)、及び複数のアドレスルックアップ要求(addr_lppr,addr_lpnon_hdr and addr_lpum)を含む。
【0034】
addr_lppr信号は、送信者からのターゲットメッセージのパケットが、ホストがその対応する受信要求recv_reqをポストした後に到着したことを示している。更に、addr_lppr信号は、それらのパケットについてpost_recvマッチングテーブル内にエントリが存在することを示している。
【0035】
addr_lpum信号は、タグマッチャ330が対応するメッセージをunexpected_msgマッチングテーブル510に記録した後に、ホストによってポストされた受信要求が到着したことを示している。
【0036】
addr_lpnon_hdr信号は、そのペイロードにメッセージヘッダ情報を含まない送信者からのメッセージの連続パケットのメモリ位置を要求するために使用される。この信号は、<ranksrc,rankdst,tag,payload length(payload_len),packet sequence number(pkt_seq)>を含む。
【0037】
alloc_reqpr信号は、送信者からのターゲットメッセージのパケットが、ホストが受信要求をポストする前に到着し、予期しないメッセージを記憶するためにメモリ空間を割り当てる必要があるときを示している。この信号は、<ranksrc,rankdst,tag,message length(mlen),packet sequence number(pkt_seq)>を含む。
【0038】
addr_udum信号は、<ranksrc,rankdst,tag,ホストによって割り当てられたアドレス(addr),mlen>を含む受信要求である。この信号は、unexpected_msgマッチングテーブル510又はpost_recvマッチングテーブル505のいずれにも見つからないホストからポストされる。この信号は、MPIシェル内のアドレス変換器(例えば、図3のアドレス変換器325)に、この受信要求のためにホストによって割り当てられたメモリアドレス/空間を通知する。
【0039】
パケット分類器からパケットを受信すると、タグマッチャ330は、これがMPIメッセージの第1のパケットであるかどうかを判定するために、metadatapcを使用してpost_recvマッチングテーブル505内でルックアップを実施する。post_recvテーブル505のエントリのキー(Kpr)は、<ranksrc,rankdst,context_id,tag>を含む。ルックアップの結果がヒットである場合、対応するエントリがpost_recvテーブル505から削除され、タグマッチャ330は、アドレスルックアップ要求(addr_lppr)をMPIシェル内のアドレス変換器に発行して、このパケットのメモリ位置を取得する。そうでない場合、タグマッチャ330は、unexpected_msgマッチングテーブル510を更新し、タグマッチャ330がpost_recvテーブル505内でマッチングを見つけることができなかったため、このメッセージに関するメモリ割り当て要求(alloc_reqpr)をアドレス変換器に発行する。受信されたパケットがメッセージのヘッダを含まない(例えば、MPIメッセージ内の第1のパケットではない)場合、タグマッチャ330は、アドレスルックアップ要求(addr_lpnon_hdr)をアドレス変換器に発行して、このパケットのメモリ位置を取得する。
【0040】
送信者からのMPI送信動作は、受信者からのMPI受信動作と対にされる。受信者がMPI受信動作(MPI_recv)を呼び出すと、ホストは受信要求(recv_req)をタグマッチャ330に通知する。受信要求は、<ranksrc,rankdst,context_id,tag,base_addr,mlen>を含むことができ、base_addrは、メッセージのためにホストによって割り当てられたデバイスメモリのベースアドレスである。次に、タグマッチャ330は、<ranksrc,rankdst,context_id,tag>を含むキー(Kum)を受信要求から抽出し、unexpected_msgマッチングテーブル510を検索(ルックアップ)して、受信された予期しないメッセージが存在するか否かをチェックする。ルックアップがヒットした場合、予期せぬメッセージに対応するエントリは、予期せぬ_msgテーブル510から削除され、タグマッチャ330は、アドレスルックアップ要求(addr_lpum)をアドレス変換器に発行する。そうでない場合、タグマッチャ330は、メッセージに関連するベースアドレスを更新するために、アドレス更新要求(addr_udum)をアドレス変換器に送信する。これはマッチしない受信要求であるため、タグマッチャ330は、受信された要求を含めるためにpost_recvマッチングテーブル505に新しいエントリを書き込む。
【0041】
図6は、一例による、MPIシェル内のアドレス変換器325を示している。アドレス変換器325は、着信メッセージパケットのデバイスメモリ内の宛先アドレスを計算し、メッセージの準備を追跡するために使用される。アドレス変換器325は、アドレステーブル605と、シーケンス範囲(seq_range)テーブル610と、ステータスマネージャ615と、メモリマネージャ620とを含む。両テーブル605、610は、ターゲットメッセージのパケットに対して割り当てられたメモリアドレスを記録するのに使用される。
【0042】
一実施形態では、アドレステーブル605の各エントリは、キー(Kat)及び値(Vat)を含み、Katは、<ranksrc,rankdst,tag>を有し、Vatは、メッセージに割り当てられたベースアドレス(addrat)、mlen、メッセージ配信の状況を照会するのに使用されるインデックス(idx)、及びメッセージヘッダを含むMPIメッセージの第1のパケットのパケットシーケンス番号(pkt_base_seq)を含む。
【0043】
seq_rangeテーブル610は、テーブル605と同様のキー値構造を有する。異なる点は、seq_rangeテーブル610において、キー(Ktsr)がパケットシーケンス範囲(pkt_seq_range)を記述するフィールドを含むことである。pkt_seq_range信号は、(メッセージの第1のパケットのpkt_base_seq、pkt_base_seq+mlen)を含むタプルである。
【0044】
アドレステーブル605は、図5のタグマッチャ330から、対応する受信要求がポストされたメッセージのマッチングした着信パケットのaddr_lppr、又は対応する予期しないメッセージが到着したポストされたマッチングした受信要求のaddr_lpumのいずれかを、ルックアップ要求の入力として受信する。addr_lpprのルックアップがヒットした場合、アドレステーブル605は、pkt_seq_rangeを有するキー値ペア(Ktsr、Vtsr)を生成し、それをseq_rangeテーブル610に書き込む。一方、アドレス変換器325は、そのpkt_seq_range及び受信されたバイト(payload_len)を用いてステータスマネージャ615内のidx番目のレジスタを更新し、新しいベースメモリアドレスaddr’at=(addrat+pkt_seq-pkt_base_seq)を計算し、ここでaddrat及びpkt_base_seqはVatからのものであり、pkt_seqはaddr_lpprからのものである。計算されたメモリアドレス(addr’at)は、次に、受信された対応するパケットを記憶するために、データムーバ(図7に詳細に示される)に送信される。
【0045】
対照的に、addr_lpumについてのルックアップがヒットした場合、要求はポストされた受信からのものであり、その予期しないメッセージが受信されているため、アドレステーブル605はseq_rangeテーブル610を更新しない。このシナリオでは、アドレステーブル605は、タグマッチャがこのメッセージに対する受信要求をホストから受信したことをステータスマネージャ615内のidx番目のレジスタに通知するだけである。アドレステーブル605は、MPI_ANY_SOURCE及びMPI_ANY_TAGなどのワイルドカード探索をサポートし得、TCAM又はSTCAMを用いて実装され得る。
【0046】
seq_rangeテーブル610は、ルックアップのための入力としてメッセージヘッダを有さないメッセージの着信パケットについてタグマッチャからaddr_lpnon_hdr<ranksrc,rankdst,tag,payload_len,pkt_seq>)を受信する。ranksrc、rankdst、タグ探索とは別に、seq_rangeテーブル610はまた、addr_lpnon_hdr要求の範囲探索動作を行い、そのpkt_seqがいずれかのエントリのpkt_seq_range内に入るかどうかを検査する。ルックアップがヒットした場合、アドレステーブル605は、新しいベースメモリアドレスaddr’tsr=(addrtsr+pkt_seq-pkt_base_seq)を計算し、ここで、addrtsr及びpkt_base_seqはVtsrからのものであり、pkt_seqはaddr_lpnon_hdrからのものである。計算されたメモリアドレスaddr’tsrは、次に、対応する受信パケットを記憶するためにデータムーバに送信される。また、アドレス変換器325は、受信したバイト数(payload_len)でステータス管理部615のidx番目のレジスタを更新する。seq_rangeテーブル610は、ワイルドカード及び範囲探索要件を有し、TCAMを用いて実装され得る。
【0047】
ステータスマネージャ615は、各メッセージの伝送ステータスを追跡する。一実施形態では、ステータスマネージャ615は、レジスタのセット及びレジスタアロケータを有する。レジスタのセットは、<ranksrc,rankdst,tag,addr(ホスト又はメモリマネージャ620のいずれかから割り当てられたアドレス),mlen,受信バイト(recv_bytes),パケットシーケンス範囲(pkt_seq_range),rr_recved>などの情報をメッセージについて記録することができ、ここで、rr_recvedは、タグマッチャがこのメッセージについてホストから受信要求(recv_req)を受信し、ホストがメッセージを待っていることを示すレディ信号である。
【0048】
レジスタアロケータは、アイドルレジスタのプールを管理し、alloc_reqpr又はaddr_udum要求ごとにアイドルプールから新しいレジスタを割り当て、レジスタにアクセスするために他の構成要素にポインタ(idx)を出力することができる。idx番目のレジスタがmlenに等しいrecv_bytesを有し、rr_recvedがハイにアサートされるとき、これは、対応するメッセージが完全に受信され、マッチングした受信要求が発見され、ホストが読み出す準備ができていることを示す。次に、ステータスマネージャ615は、<ranksrc,rankdst,tag,addr>を含むレディ信号(msg_ready)をデータムーバに対して生成し、「削除」信号を発行して、アドレステーブル605及びseq_rangeテーブル610内の対応するエントリを除去する。
【0049】
一実施形態では、メモリマネージャ620は、着信する予期しないメッセージのためにメモリ空間を割り当て、アドレステーブル605のための更新要求を生成する。メモリマネージャ620は、割り当てられたメモリブロックとそれらの間の空きメモリ空間とを追跡する。メモリマネージャ620は、固定サイズブロック割り当て、バディーメモリ割り当て、及びスラブ割り当てのような種々のメモリ管理アルゴリズムで実装することができる。メモリマネージャ620は、alloc_reqpr信号(<ranksrc,rankdst,tag,mlen,pkt_seq>)を入力とし、alloc_reqprからメッセージ長(mlen)に応じて割り当てられた物理メモリアドレス(addrmm)を生成する。次いで、割り当てられたaddrmmは、受信された対応するパケットを記憶するためにデータムーバに送信される。メモリアドレスはまた、メッセージステータスクエリ及び更新のために、(idx,addrmm)を介してステータスマネージャ615内のidx番目のレジスタに記録される。また、メモリマネージャ620は、キーバリューペア(Kat=<ranksrc,rankdst,tag>,Vat=<addrmm,mlen,idx,pkt_seq>)を含む更新要求を生成し、アドレステーブル605に書き込む。
【0050】
アドレス変換器325は、タグマッチャからaddr_udum信号を受信すると、アドレステーブル605のエントリを書き込み/更新する。addr_udumは、ホストが新しい受信要求をポストし、タグマッチ内のunexpected_msgテーブル内に、ポストされた受信要求とマッチする予期せぬメッセージが存在しないことを示す。addr_udum信号は、タグマッチャで説明したように、<ranksrc,rankdst,tag,addr,mlen>を含む。addr_udum信号内のベースアドレス(addr)は、タグを有するranksrcからrankdstへの専用メッセージを記憶するために、ホストによって割り当てられる。次に、キー値ペア(Kat=<ranksrc,rankdst,tag>,Vat=<addr,mlen,idx,pkt_seq=none>)を含む更新要求が、状態マネージャ615からのaddr_udum及びidxを用いて生成され、アドレステーブル605に書き込まれる。
【0051】
図7は、一例による、MPIシェル内のデータムーバ320を示している。データムーバ320は、AXIS-to-AXIブリッジ705及びメッセージレディ(msg_rdy)FIFO 710を含む。AXIS-to-AXIブリッジ705は、AXI-ストリーミングプロトコル形態のパケットデータ(例えば、AXIS_data)をAXIプロトコル形態のデータ(例えば、AXI_data)に変換する。次に、変換されたデータは、メモリコントローラを介してデバイスメモリに書き込まれる。AXIS_dataの対応するベースアドレス(アドレス)は、図6に示されるアドレス変換器から取得され、SmartNIC内のローカルメモリ内のその宛先メモリ位置を示す。
【0052】
msg_rdy FIFO 710は、メッセージのレディステータスを記憶する。これらのレディステータスは、ソースプロセス及び宛先プロセスの識別子(ranksrc及びrankdst)、タグ、及びメッセージがデバイスメモリに完全に書き込まれ、読み出す準備ができていることを示すデバイスメモリ内のそのアドレスを含み得る。msg_rdy FIFO 710の空信号は、メモリマップされたレジスタを介して、PCIe/ホストの割り込みシステム又はプルシステムのいずれかに接続され得る。割り込みシステムに接続されている場合、msg_rdy FIFOが空でないとき、データムーバ320は割り込みシステムをトリガし、それに応じてホストに割り込みを処理させる。プリングシステムと接続される場合、データムーバ320は、msg_rdy FIFO 710が要素を記憶したときに、レディ信号を専用のメモリマップレジスタに書き込む。ホストは、専用メモリマップレジスタの値を周期的/絶えずチェックし、それに応じてイベントを処理することができる。
【0053】
図8は、一例による、MPIシェル内の計算エンジン800を示している。この例では、計算エンジン800は、1つ以上のハードウェアアクセラレータを形成し得る複数のカーネル(カーネル0~n)を収容する。各カーネルは、制御FIFO 805及びステータスFIFO 810を含む。制御FIFO 805は、ホストから制御メッセージを受信する。これらの制御メッセージは、<ワークロードの一意のID,アドレス引数の数(N),引数0のアドレス,引数1のアドレス,...,引数Nのアドレス>を含み得る。ワークロードを有するカーネルを開始するために、ホストは、AXI-Liteインターフェースを介して制御FIFO 805に制御メッセージを発行することができる。制御FIFO 805が内部に要素を有すると、カーネルは、FIFO 805から制御メッセージを取得し、実行を開始することができる。制御メッセージによって提供されるベースアドレスを用いて、カーネルは、AXIインターフェースを用いてデバイスメモリ内に記憶されたデータを読み出すことができる。カーネルは、複数のAXIインターフェースをサポートして、そのメモリアクセス帯域幅を増加させることができる。カーネルはまた、AXI-Liteインターフェースを介してホストにアクセス可能なメモリマップされたレジスタを有し得る。
【0054】
カーネルが実行を終了すると、カーネルはそのステータスFIFO 810に完了信号を書き込む。ステータスFIFOの空信号は、メモリマップレジスタを介してPCIe/ホストの割り込みシステム又はプルシステムのいずれかに接続することができる。割り込みシステムを有する設計の場合、ステータスFIFO 810が空でないとき、カーネルは割り込みシステムをトリガし、それに応じてホストに割り込みを処理させる。プルシステムを有する設計の場合、カーネルは、ステータスFIFOが要素を有するときに、専用のメモリマップレジスタに完了信号を書き込む。ホストは、専用メモリマップレジスタの値を周期的に又は絶えずチェックし、「完了」ステータスを検出すると、それに応じてイベントを処理することができる。
【0055】
計算エンジン800がプログラマブルロジックを使用して実装される場合、カーネルは、高レベル合成(HLS)又はレジスタ転送レベル(RTL)コーディングのいずれかを使用して設計され得る。しかしながら、別の実施形態では、計算エンジン800は、ASIC又はSoCなどの強化された回路で実装されてもよい。
【0056】
図9は、一例による、MPIシェル内のデータコントローラ305を示している。データコントローラ305は、種々の接続されたモジュール/構成要素のためのメモリアクセスチャネルを提供する。データコントローラ305は、AXIインターコネクト315及び1つ又は複数のメモリコントローラ310(この例では複数のメモリコントローラが示されている)を含む。メモリコントローラ310は、SmartNIC内のデバイスメモリにアクセスする。データムーバ及び計算エンジン、SmartNIC又はトランスポート層オフロードエンジンの接続されたホスト及び送信ロジックを含むモジュール及び構成要素は、AXIプロトコルを活用するAXIインターコネクト315を介したメモリアクセスのためにメモリコントローラを共有することができる。AXIインターコネクト315は、MPIシェルとホスト(例えば、CPU)との間のインターフェースとして機能する。
【0057】
ホストとハードウェアアクセラレータとの間の通信は、メッセージの準備ができたときのホスト上の割り込み又はプル動作(図7でデータムーバ320を用いて説明される)、アクセラレータを開始するためのホストからの制御メッセージ、及びアクセラレータがその実行を終了したときのホスト上の割り込み又はプル動作(図8で計算エンジン125を用いて言及される)を含む。
【0058】
更に、制御レジスタアクセスは、アクセラレータ内のスカラ引数、エラー情報、又は受信されたメッセージの数、ドロップされたメッセージの数、利用可能なアクセラレータの数、及びサポートされるアクセラレータのタイプなどの統計を収集するために、MPIシェル内のメモリマップされたレジスタを構成するか又は読み出すために使用される。
【0059】
更に、MPI_bcast、MPI_gather、MPI_scatter、及びMPI_reduceなどの集合的動作は全て、MPI_send及びMPI_recvにおける動作に基づく。MPIシェルを有するシステムは、いかなる変更もなしにこれらの集合的な動作をサポートすることもできる。更に、MPI_reduce及びMPI_allreduceなどのreduce関連演算は、MPI_max、MPI_min、MPI_sum、MPI_and、及びMPI_orなどのcompute演算を含む。これらの予め定義された計算動作は、MPIシェル内のアクセラレータに実装することができる。
【0060】
図10A図10Cは、一例による、MPIシェルを異なるSmartNIC実装形態に統合することを示している。ネットワーク中心のデータセンタ内のノードは、通常、マルチコアCPUを有するホストと、ネットワークに接続するSmartNICとして機能するデバイスとを含む。デバイスは、ASIC(特定用途向け集積回路)SmartNIC又はプログラマブルSmartNICのいずれかであり得る。スニファとして機能するMPIシェルは、種々のSmartNICシステムと統合することができる。図10A図10Cは、プログラマブルSmartNICにおけるMPIシェル統合の3つの例を示している。
【0061】
図10Aの第1の例は、基本SmartNICに統合されたMPIシェルを有するシステムアーキテクチャを示している。この例で使用される通信チャネルは、TCP/IPプロトコルである。システムは、SmartNICにおけるTCP接続、再伝送、輻輳制御、TCP伝送及びTCP ACKなどのTCP/IP制御のためにそのホストを活用する。より詳細には、このシステム内のホストは、MPIライブラリ、TCP/Ipなどのネットワーキングスタック、そのSmartNIC接続を制御するカーネルドライバ、及びMPIシェルランタイムを担当する。MPIライブラリ210は、MPIプロセス管理、ポイントツーポイントメッセージング制御、集合的動作、及び同期などの種々の機能を含む。MPIシェルは、既存のネットワークフローを中断することなくスニファとして機能し、計算エンジン125に送信されるターゲットメッセージからのパケットのみを処理する。
【0062】
ネットワークから受信されたパケット(M-RX)は、パケット分類器335に到達する前に、SmartNIC MACサブシステム230内の受信経路(D-RX)にリダイレクトすることができる。ハードウェアプロセス(すなわち、計算エンジン125)に送信されるメッセージの場合、MPIシェルは、受信された全てのTCPパケットを肯定応答するためにホストに依存する。
【0063】
送信動作に関して、メッセージデータがデバイスメモリ内に存在する場合、ホストは、(1)ヘッダ、メッセージデータのアドレス、及びダミーデータを有するメッセージを構築し、(2)通常のTCP送信動作を介してメッセージを送信する。パーサ1005は、この種のメッセージを検出する。次いで、パーサ1005は、セグメンテーションオフロードエンジン1010をトリガして、実際のメッセージパケットを送信するためにデバイスメモリからデータを読み出す。
【0064】
図10Bは、TCPオフローディングエンジン(TOE)を有するSmartNICに統合されたMPIシェルを有するシステムアーキテクチャを示している。この統合は図10Aの統合と同様である。このシステムは、2組のTCP管理を維持し、一方は、ソフトウェアプロセスのために従来のCPUベースのTCP/IPスタックを使用し、他方は、ハードウェアプロセスのためにTOEを活用する。
【0065】
ネットワーク(M-RX)から受信されたパケットは、パケット分類器335によって生成された結果に従って、D-RXを介してホストに、又はTOE受信(TOE RX)エンジン1025にリダイレクトされる。送信動作のために、TOE伝送(TOE TX)エンジン1015は、デバイスメモリからメッセージデータを読み取り、それをアービタ1020を介してリモートピアに送出することができる。
【0066】
図10Cは、RoCE RXエンジン1040、RoCE TXエンジン1030、及びアービタ1035を有するSmartNICに統合されたMPIシェルを有するシステムアーキテクチャを示している。接続は、図10A及び図10Bの接続と非常に類似しており、したがって、詳細には説明されない。
【0067】
前述では、本開示において提示される実施形態が参照される。しかしながら、本開示の範囲は、特定の記載された実施形態に限定されない。代わりに、説明される特徴及び要素の任意の組み合わせは、異なる実施形態に関連するか否かにかかわらず、企図される実施形態を実装及び実践するために企図される。更に、本明細書に開示される実施形態は、他の可能な解決策又は従来技術に勝る利点を達成し得るが、特定の利点が所与の実施形態によって達成されるか否かは、本開示の範囲を限定するものではない。したがって、前述の態様、特徴、実施形態、及び利点は、単に例示的なものであり、特許請求の範囲に明示的に記載されている場合を除き、添付の特許請求の範囲の要素又は限定とは見なされない。
【0068】
当業者によって理解されるように、本明細書に開示される実施形態は、システム、方法、又はコンピュータプログラム製品として具現化され得る。したがって、態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、又は本明細書では全て一般に「回路」、「モジュール」、若しくは「システム」と呼ばれ得るソフトウェア態様とハードウェア態様とを組み合わせた実施形態の形態をとり得る。更に、態様は、コンピュータ可読プログラムコードが具現化された1つ以上のコンピュータ可読媒体において具現化されたコンピュータプログラム製品の形態をとり得る。
【0069】
1つ以上のコンピュータ可読媒体の任意の組み合わせを利用し得る。コンピュータ可読媒体は、コンピュータ可読信号媒体又はコンピュータ可読記憶媒体であり得る。コンピュータ可読記憶媒体は、例えば、電子、磁気、光学、電磁気、赤外線、若しくは半導体のシステム、装置、若しくはデバイス、又は前述の任意の好適な組み合わせであり得るが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例(非網羅的なリスト)は、1つ以上のワイヤを有する電気接続、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(random access memory、RAM)、読み取り専用メモリ(read-only memory、ROM)、消去可能プログラマブル読み取り専用メモリ(erasable programmable read-only memory、EPROM又はフラッシュメモリ)、光ファイバ、ポータブルコンパクトディスク読み取り専用メモリ(portable compact disc read-only memory、CD-ROM)、光記憶デバイス、磁気記憶デバイス、又は前述の任意の好適な組み合わせを含む。本明細書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、又はデバイスによって、又はそれに関連して使用するためのプログラムを含むか、又は記憶することができる任意の有形媒体である。
【0070】
コンピュータ可読信号媒体は、例えば、ベースバンドにおいて、又は搬送波の一部として、コンピュータ可読プログラムコードが具現化された伝搬データ信号を含み得る。そのような伝搬信号は、電磁気、光学、又はそれらの任意の好適な組み合わせを含むが、それらに限定されない、種々の形態のうちのいずれかをとり得る。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、又はデバイスによって、又はそれに関連して使用するためのプログラムを通信、伝搬、又は移送することができる任意のコンピュータ可読媒体であり得る。
【0071】
コンピュータ可読媒体上に具現化されたプログラムコードは、ワイヤレス、ワイヤライン、光ファイバケーブル、RFなど、又は前述の任意の好適な組み合わせを含むが、それらに限定されない、任意の適切な媒体を使用して伝送され得る。
【0072】
本開示の態様の動作を実行するためのコンピュータプログラムコードは、例えば、Java(登録商標)、Smalltalk、C++などのオブジェクト指向プログラミング言語、及び「C」プログラミング言語又は同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで書き込まれ得る。プログラムコードは、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロンソフトウェアパッケージとして、ユーザのコンピュータ上で部分的に、リモートコンピュータ上で部分的に、又はリモートコンピュータ若しくはサーバ上で完全に実行し得る。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(local area network、LAN)若しくは広域ネットワーク(wide area network、WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続され得るか、又は外部コンピュータ(例えば、インターネットサービスプロバイダを使用するインターネットを介して)に接続され得る。
【0073】
本開示の態様は、本開示に提示された実施形態による方法、装置(システム)、及びコンピュータプログラム製品のフロー図説明及び/又はブロック図を参照して以下に記載されている。フロー図説明及び/又はブロック図の各ブロック、並びにフロー図説明及び/又はブロック図におけるブロックの組み合わせは、コンピュータプログラム命令によって実装することができることが理解されよう。これらのコンピュータプログラム命令は、コンピュータ又は他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フロー図及び/又はブロック図のブロックで指定された機能/行為を実装するための手段を作成するような機械をもたらすように、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能なデータ処理装置のプロセッサに提供され得る。
【0074】
これらのコンピュータプログラム命令はまた、コンピュータ可読記憶媒体に記憶された命令が、フロー図及び/又はブロック図のブロックで指定された機能/行為の態様を実装する命令を含む製造物品を生成するように、コンピュータ、プログラマブルデータ処理装置、及び/又は他のデバイスに、特定の方法で機能するように指示することができる、コンピュータ可読記憶媒体に記憶され得る。
【0075】
コンピュータプログラム命令はまた、コンピュータ、他のプログラマブルデータ処理装置、又は他のデバイスにロードされて、一連の動作ステップを、コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行させて、コンピュータ実装プロセスを生成し得、そのため、コンピュータ、又は他のプログラマブル装置上で実行される命令は、フロー図及び/又はブロック図のブロックに指定される機能/行為を実装するためのプロセスを提供する。
【0076】
図中のフロー図及びブロック図は、本発明の様々な実施例によるシステム、方法、及びコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能、及び動作を例解する。これに関して、フロー図又はブロック図の各ブロックは、指定された論理機能を実装するための1つ以上の実行可能命令を含む、命令のモジュール、セグメント、又は部分を表し得る。いくつかの代替的な実装形態では、ブロックに記載されている機能は、図に記載された順序から外れて発生する場合がある。例えば、連続して示される2つのブロックは、実際には実質的に同時に実行され得るか、又はブロックは、関与する機能に応じて、逆の順序で実行され得る。ブロック図及び/又はフロー図例解図の各ブロック、並びにブロック図及び/又はフロー図例解図におけるブロックの組み合わせは、指定された機能若しくは行為を実行するか、又は専用ハードウェアとコンピュータ命令との組み合わせを行う、専用ハードウェアベースのシステムによって実装することができることにも留意されたい。
【0077】
上記は特定の例を対象とするが、他の例及び更なる例が、その基本的な範囲から逸脱することなく考案され得、その範囲は、以下の「特許請求の範囲」によって決定される。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10A
図10B
図10C
【国際調査報告】