LAMMPS ( https://github.com/lammps/lammps )と呼ばれる MPI+CUDA ベンチマークのパフォーマンスを最適化しようとしています。現在、2 つの MPI プロセスと 2 つの GPU で実行しています。私のシステムには 2 つのソケットがあり、各ソケットは 2 つの K80 に接続します。各 K80 には内部に 2 つの GPU が含まれているため、各ソケットは実際には 4 つの GPU に接続します。しかし、私は 1 つのソケットで 2 つのコアと、そのソケットに接続された 2 つの GPU (1 K80) のみを使用しています。MPI コンパイラは MVAPICH2 2.2rc1 で、CUDA コンパイラのバージョンは 7.5 です。
それが背景でした。アプリケーションのプロファイリングを行ったところ、通信がパフォーマンスのボトルネックであることがわかりました。そして、GPUDirect 技術が適用されていないことが原因だと思います。そこで、MVAPICH2-GDR 2.2rc1 に切り替え、その他の必要なライブラリとツールをすべてインストールしました。しかし、MVAPICH2-GDR には、システムで使用できない Infiniband インターフェイス カードが必要なため、「チャネルの初期化に失敗しました。システムでアクティブな HCA が見つかりません」というランタイム エラーが発生します。私の理解では、K80 にはこれら 2 つの GPU 用の内部 PCIe スイッチがあるため、1 つのノードで 1 つの K80 内の GPU のみを使用する場合、Infiniband カードは必要ありません。これらは私の疑問です。質問を明確にするために、次のようにリストします。
私のシステムでは、1 つのソケットが 2 つの K80 に接続されています。1 つの K80 の 2 つの GPU が別の K80 の GPU と通信する必要がある場合、GPUDirect を使用するには IB カードが必要ですよね?
1 台の K80 内で 2 つの GPU を使用するだけでよい場合、これら 2 つの GPU 間の通信には IB カードは必要ありませんよね? ただし、MVAPICH2-GDR には少なくとも 1 つの IB カードが必要です。この問題を解決するための回避策はありますか? または、システムに IB カードをプラグインする必要がありますか?