J'essaie de configurer GPUDirect pour utiliser les appels verd infiniband directement sur la mémoire de l'appareil sans avoir besoin d'utiliser cudaMemcpy. J'ai 2 machines avec des cartes nvidia k80 gpu chacune avec la version du pilote 367.27. CUDA8 est installé et Mellanox OFED 3.4 également le plugin GPUDirect Mellanox-nvidia est installé:Configuration de GPUDirect pour l'infiniband
-bash-4.2$ service nv_peer_mem status
nv_peer_mem module is loaded.
Selon ce fil « How to use GPUDirect RDMA with Infiniband » J'ai toutes les exigences pour GPUDirect et le code suivant doit être exécuté avec succès. Mais ce n'est pas le cas et ibv_reg_mr échoue avec l'erreur "Bad Address" comme si GPUDirect n'était pas correctement installé.
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);
Info demandée:
mlx5 est utilisé.
Dernière journal du noyau:
[Nov14 09:49] mlx5_warn:mlx5_0:mlx5_ib_reg_user_mr:1418:(pid 4430): umem get failed (-14)
Suis-je manque quelque chose? Ai-je besoin d'autres paquets ou dois-je activer GPUDirect dans mon code d'une manière ou d'une autre?
Utilisez-vous le pilote 'mlx4' ou le pilote' mlx5'? Voyez-vous d'autres erreurs ou avertissements dans le journal du noyau? –
Juste pour être sûr, pouvez-vous vérifier que l'appel 'cudaMalloc()' n'a pas échoué? –
cudaMalloc n'a pas échoué. – kusterl