私は、cudaMemcpyを使用せずに、デバイスメモリ上でinfiniband verb rdma呼び出しを使用するようにGPUDirectを設定しようとします。 私はドライババージョン367.27のnvidia k80 gpuカードを搭載した2台のマシンを持っています。 CUDA8がインストールされ、メラノックスOFED 3.4 またメラノックス・NVIDIA GPUDirectプラグインがインストールされている:infinibandのGPUDirectを設定する
-bash-4.2$ service nv_peer_mem status
nv_peer_mem module is loaded.
このスレッドによると「How to use GPUDirect RDMA with Infiniband」 私はGPUDirectと、次のコードのためのすべての要件を正常に実行する必要があります。しかし、そうではなく、GPUDirectが正しくインストールされていないかのように、ibv_reg_mrがエラー「Bad Address」で失敗します。
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);
は、情報を要求した:
mlx5が使用されています。
最後のカーネルでは、ログ:
[Nov14 09:49] mlx5_warn:mlx5_0:mlx5_ib_reg_user_mr:1418:(pid 4430): umem get failed (-14)
私は何かが足りないのですか?私は他のパケットが必要ですか、何とか私のコードでGPUDirectを有効にする必要がありますか?
'mlx4'または' mlx5'ドライバを使用していますか?カーネルログに他の関連するエラーや警告が表示されますか? –
'cudaMalloc()'呼び出しが失敗しなかったことを確認できますか? –
cudaMallocが失敗しませんでした。 – kusterl