問題タブ [infiniband]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - python rdma "Hello World"
このプログラムは、Infiniband プログラミングの最初の試みです。私はこのライブラリを使用しています:
https://github.com/jgunthorpe/python-rdma
私はおそらく非常に面白いことを間違っています。「Hello, World」という一連のバイトをマルチキャスト アドレスに送信しようとしています。
これは私が得る出力です:
c - rdma 接続マネージャー ドライバー パターン
アプリケーションにインフィニバンド ドライバーの OFED 3.18r2 実装を使用しています。特に、rdma 接続マネージャーのラッパー関数を使用しています。内部で何が起こっているのかをよりよく理解するために、私はソースコードを見ることに慣れています。こうやってパターンみたいなのが出てくるんだけど理解できない。例を挙げましょう。rdma 接続マネージャー関数は cma.c にあります。rdma_listen 呼び出しの例を見てください (これは、「rdma_」で始まるライブラリで定義されているほぼすべての関数に共通です)。
ここで、前に述べたパターンを見ることができます。
write 呼び出しの最初の引数は、 /dev/infiniband/rdma_cmに関連付けられたファイル記述子ですが、 cmd引数の使用法を理解できません。ソースを調べてみると、 cmdが rdma cm 関数呼び出しの ABI 定義に使用される構造体であることがわかりました。これがデバイスドライバー呼び出しを実行する一般的なパターンであるかどうか、およびそれがどのように機能するか、cmd引数に関連付けられた実際のコードはどこにあるのか、私には本当にわかりません。手伝っていただけませんか?
cuda - Infiniband で GPUDirect RDMA を使用する方法
私は2台のマシンを持っています。各マシンには複数のテスラ カードがあります。各マシンには InfiniBand カードもあります。InfiniBand を介して、異なるマシン上の GPU カード間で通信したいと考えています。ポイントツーポイントのユニキャストで十分です。余分なコピー操作を省けるように、GPUDirect RDMA を確実に使用したいと考えています。
現在、Mellanox から InfiniBand カード用のドライバーが提供されていることは承知しています。ただし、詳細な開発ガイドは提供していません。また、OpenMPI が私が求めている機能をサポートしていることも認識しています。しかし、OpenMPI はこの単純なタスクには重すぎて、1 つのプロセスで複数の GPU をサポートしていません。
ドライバを直接使って通信を行う方法について何か助けが得られないだろうか。コードサンプル、チュートリアル、なんでもいいです。また、OpenMPI でこれを処理するコードを見つけるのを手伝ってくれる人がいれば幸いです。
infiniband - RDMA プログラムがランダムにハングする
RDMA_CM ライブラリを使用して RDMA プログラミングを行った人はいますか?
勉強する簡単な例でさえ見つけるのに苦労しています。librdmacm に rdma_client & rdma_server の例がありますが、ループでは実行されません (rping はループしますが、rdma_cm 関数の代わりに IB 動詞を直接使用して記述されています)。
簡単なピンポン プログラムを作成しましたが、1 回から 100 回のバウンス後にどこでもロックしてしまいます。クライアント内にスリープを追加すると、競合状態を示すハングするまでの時間が長くなることがわかりました。
クライアントは rdma_get_send_comp() でスタックし、サーバーは rdma_get_recv_comp() でスタックします。
私の限られた理解は、すべての rdma_post_send() の前に、送信後に来る rdma_post_recv() を発行する必要があるということです。また、すべての送信 (最初のクライアント送信を除く) の前に、相手側が受信する準備ができていることを示すメッセージ (rdma_get_recv()) を待つ必要があります。
何が間違っている可能性がありますか?
networking - InfiniBand ネットワークのパフォーマンス
InfiniBand
を使用してのパフォーマンスを測定していiperf
ます。
これは、サーバーとクライアント間の 1 対 1 の接続です。
ネットワーク I/O を要求するスレッドの帯域幅変化数を測定しました。
(クラスターサーバーには次のものがあります。
- 「Mellanox ConnectX-3 FDR VPI IB/E アダプター for System x」および
- 「インフィニバンド 40 Gb イーサネット / FDR インフィニバンド」)
帯域幅:
上記のように、帯域幅は 4 スレッドまで上昇し、その後減少します。
そこで何が起こっているのかを理解するためのアイデアを教えていただけますか?
さらに、多くのマシンが 1 つのマシンにデータを送信するとどうなるでしょうか? (論争)それも扱えますか
?InfiniBand
mpi - Poll システム コール - これはインフィニバンド通信ですか?
私のopenmpi
(使用のためにコンパイルされたinfiniband
)コードには、進行状況の出力がなくstrace
、プロセスの1つに次のように表示される場所があります。
何度も何度も。この質問に従って実行ls -l /proc/<pid>/fd
したところ、いくつかsocket
の と/dev/infiniband/
リンクが表示されます。このシステムコールはプロセス間通信を示していinfiniband
ますか? これを確認したり、現時点でコードで何が起こっているかをさらにデバッグしたりするにはどうすればよいですか?