私はハイ パフォーマンス コンピューティング (HPC) の初心者ですが、HPC プロジェクトを行う予定なので、いくつかの基本的な問題を解決するために助けが必要です。
アプリケーションのシナリオは単純です。InfiniBand (IB) ネットワークで接続された複数のサーバー、1 つのサーバーがマスター用、その他がスレーブ用です。マスターのみがメモリ内データ (データのサイズは 1KB から数百 MB の範囲) をスレーブに読み書きしますが、スレーブはメモリ内のデータを受動的に格納する (そしてメモリ内データを適切なタイミングでディスクにダンプする) だけです。 )。すべての計算は、スレーブへの/からのデータの書き込み前または読み取り後にマスターで実行されます。システムの要件は、低遅延(1KB ~ 16KB などの小さなデータ領域) と高スループット(大きなデータ領域、数百 MB) です。
だから、私の質問は
1. どの具体的な方法が私たちに適していますか? MPI、プリミティブ IB/RDMA ライブラリ、または RDMA 上の ULP。
私の知る限り、既存の Message Passing Interface (MPI) ライブラリ、プリミティブな IB/RDMA ライブラリ、libverbs
およびRDMAlibrdmacm
上のユーザー レベル プロトコル (ULP) などは実行可能な選択肢かもしれませんが、それらの適用範囲についてはよくわかりません。
2. パフォーマンスを向上させるために、OS または IB ネットワークを調整する必要がありますか?
Microsoft が次のように発表した論文 [ 1 ] があります。
オペレーティング システムと NIC ドライブを慎重に調整および変更することで、パフォーマンスを最大 8 倍向上させました。
私としては、このようなパフォーマンス チューニングはできる限り避けようと思います。ただし、チューニングがやむを得ない場合は、最善を尽くします。当環境のIBネットワークはMellanox InfiniBand QDR 40Gb/sで、サーバー用のLinux OSは自由に選べます。
アイデアがあれば、コメントや回答をお待ちしております。前もって感謝します!