11

Infiniband ネットワークで接続されたマルチコア コンピューターがいくつかあります。リモートのアトミック操作を使用して、共有メモリのプールで低レイテンシの計算を行いたいと考えています。私はRDMAが進むべき道であることを知っています。各ノードで、データ共有用のメモリ領域 (および保護ドメイン) を登録します。

オンライン RDMA の例は、多くの場合、シングルスレッド サーバーとシングルスレッド クライアント間の単一の接続に焦点を当てています。ここで、各 Infiniband ノードでマルチスレッド プロセスを実行したいと考えています。以下の点が非常に気になります...

  1. 合計で n ノードと m スレッドのクラスターの場合、各ノードでいくつのキュー ペアを準備する必要がありますか? 具体的には、同じノード上の複数のスレッドが同じキュー ペアを共有できますか?

  2. 各ノードでいくつの完了キューを準備する必要がありますか? 各ノードでリモートの読み取り/書き込み/cas 操作を発行する複数のスレッドを用意します。共通の完了キューを共有すると、完了イベントが混同されます。スレッドに独自の個別の完了キューがある場合、実際には多数の完了キューが存在します。

  3. このソフトウェアを作成する代わりに、既存のライブラリを使用することをお勧めしますか? (うーん、それとも私が書いてオープンソースにするべきですか? :-)

親切な提案をありがとうございます。

4

1 に答える 1

9

少なくとも Linux では、InfiniBand 動詞ライブラリは完全にスレッドセーフです。そのため、マルチスレッド アプリで必要な数のキュー ペア (QP) を使用できます。複数のスレッドが作業要求を 1 つの QP に安全にポストできますが、もちろん未処理の追跡を確認する必要があります。独自のアプリケーションで行うリクエストなどは、スレッドセーフです。

各送信キューと各受信キュー (QP は実際にはキューのペアであることを思い出してください:) が単一の完了キュー (CQ) に関連付けられていることは事実です。したがって、各スレッドに独自の CQ を持たせたい場合、各スレッドには作業を送信するための独自の QP が必要です。

一般に、QP と CQ は実際には限られたリソースではありません。1 つのノードに数百または数千のリソースを問題なく簡単に配置できます。そのため、使用しているキューの絶対数についてあまり気にせずにアプリを設計できます。これは、スケーラビリティについて心配する必要がないと言っているわけではありません。たとえば、多数の受信キューとキューごとの多数のバッファがある場合、受信バッファリングで大量のメモリを占有する可能性があるため、最終的には共有受信キュー (SRQ) を使用する必要があります。

IB を使用するミドルウェア ライブラリは多数あります。おそらく MPI (例: http://open-mpi.org/ ) が最もよく知られているものであり、再発明に取り掛かる前に評価する価値があるでしょう。MPI 開発者は、IB/RDMA の効率的な使用に関する多くの研究も公開しています。これは、独自のシステムを構築することを決定した場合に検討する価値があるでしょう。

于 2012-02-27T19:16:37.457 に答える