Ich versuche, GPUDirect einzurichten, um Infiniband Verben Rdma Anrufe direkt im Gerätespeicher zu verwenden, ohne cudaMemcpy verwenden zu müssen. Ich habe 2 Maschinen mit nvidia k80 GPU Karten jeweils mit Treiberversion 367.27. CUDA8 installiert und Mellanox OFED 3.4 Auch die Mellanox-nvidia GPUDirect Plugin installiert ist:GPUDirect für Infiniband einrichten
-bash-4.2$ service nv_peer_mem status
nv_peer_mem module is loaded.
Nach diesem thread "How to use GPUDirect RDMA with Infiniband" ich alle Voraussetzungen für GPUDirect haben und der folgende Code sollte erfolgreich ausgeführt werden. Aber das tut es nicht und ibv_reg_mr schlägt mit dem Fehler "Bad Address" fehl, als wäre GPUDirect nicht richtig installiert.
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);
Informationen angefordert:
mlx5 verwendet wird.
Last Kernel-Log:
[Nov14 09:49] mlx5_warn:mlx5_0:mlx5_ib_reg_user_mr:1418:(pid 4430): umem get failed (-14)
bin ich etwas fehlt? Brauche ich noch andere Pakete oder muss ich GPUDirect irgendwie in meinem Code aktivieren?
Verwenden Sie den Treiber 'mlx4' oder' mlx5'? Sehen Sie im Kernel-Protokoll weitere Fehler oder Warnungen? –
Nur um sicher zu sein, können Sie überprüfen, dass der 'cudaMalloc()' Aufruf nicht fehlgeschlagen ist? –
cudaMalloc ist fehlgeschlagen. – kusterl