2016-11-11 127 views
0

私は、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を有効にする必要がありますか?

+0

'mlx4'または' mlx5'ドライバを使用していますか?カーネルログに他の関連するエラーや警告が表示されますか? –

+0

'cudaMalloc()'呼び出しが失敗しなかったことを確認できますか? –

+0

cudaMallocが失敗しませんでした。 – kusterl

答えて

2

nv_peer_memモジュールに障害が発生する一般的な理由は、Unified Memory(UVM)との相互作用です。 UVMを無効にしてみてください:

export CUDA_DISABLE_UNIFIED_MEMORY=1 

これで問題が解決しない場合は、validationcopybwのテストをhttps://github.com/NVIDIA/gdrcopyから実行してGPUDirectRDMAを確認してください。それが動作すれば、Mellanoxスタックが誤って設定されます。

+1

のエクスポートCUDA_DISABLE_UNIFIED_MEMORY = 1がありました。ありがとうございました – kusterl

+0

「うまくいかない」という意味ですか? – JC1

関連する問題