私は2台のマシンを持っています。 各マシンには複数のTeslaカードがあります。各マシンにInfiniBandカードもあります。 InfiniBandを介して異なるマシン上のGPUカード間で通信したい。ポイントツーポイントユニキャストで結構です。余分なコピー操作を省くために、GPUDirect RDMAを使用したいと思います。
私は、 ドライバ InflanBandでMellanoxから現在入手可能カードしかし、それは詳細な開発ガイドを提供するものではありません。また、OpenMPIは私が求めている機能をサポートしていることも承知しています。
直接何か手助けを得られるかな?ドライバを使って通信する。コードサンプル、チュートリアル、何でもいいでしょう。また、OpenMPIでこれを扱うコードを見つけるのを手伝ってくれる人がいたら、私はそれを感謝します。
回答:
回答№1は6GPUDirect RDMAが機能するためには、以下のものがインストールされている必要があります。
Mellanox OFEDがインストールされています(から http://www.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers )
最近インストールされたNVIDIA CUDAスイート
- Mellanox-NVIDIA GPUDirectプラグイン(上記のリンクから - ゲストとして投稿するとリンクが掲載されなくなります:()
上記のすべてをインストールする必要があります(上記の順序、およびロードされた関連モジュール。 その後、RDMAトランザクション用にGPUビデオメモリに割り当てられたメモリを登録できるはずです。サンプルコードは次のようになります。
void * gpu_buffer;
struct ibv_mr *mr;
const int size = 64*1024;
cudaMalloc(&gpu_buffer,size); // TODO: Check errors
mr = ibv_reg_mr(pd,gpu_buffer,size,IBV_ACCESS_LOCAL_WRITE|IBV_ACCESS_REMOTE_WRITE|IBV_ACCESS_REMOTE_READ);
これにより、(GPUDirect RDMA対応システムで)HCAとのRDMAトランザクションに使用できる有効なメモリキーを使用して、メモリ領域が作成されます。
コード内でRDMA動詞とInfiniBand動詞を使用する方法の詳細については、こちらを参照してください。 資料.