2016-11-11 3 views
0

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?

+0

Utilisez-vous le pilote 'mlx4' ou le pilote' mlx5'? Voyez-vous d'autres erreurs ou avertissements dans le journal du noyau? –

+0

Juste pour être sûr, pouvez-vous vérifier que l'appel 'cudaMalloc()' n'a pas échoué? –

+0

cudaMalloc n'a pas échoué. – kusterl

Répondre

2

Une raison courante de l'échec du module nv_peer_mem est l'interaction avec la mémoire unifiée (UVM). Pourriez-vous essayer de désactiver UVM:

export CUDA_DISABLE_UNIFIED_MEMORY=1 

?

Si cela ne résout pas votre problème, vous devriez essayer d'exécuter validation et copybw tests de https://github.com/NVIDIA/gdrcopy pour vérifier GPUDirectRDMA. Si cela fonctionne, votre pile Mellanox est mal configurée.

+1

exportation CUDA_DISABLE_UNIFIED_MEMORY = 1 l'a fait fonctionner. Merci – kusterl

+0

Voulez-vous dire "si ça ne marche pas"? – JC1