2016-11-11 10 views
0

Я пытаюсь настроить GPUDirect, чтобы использовать бесконечные вызовы rdma для прямого доступа к памяти устройства без использования cudaMemcpy. У меня есть 2 машины с картами nvidia k80 gpu с драйверами версии 367.27. установлен CUDA8 и Mellanox OFED 3,4 Также установлен Mellanox-плагин NVIDIA GPUDirect:Настройка GPUDirect для infiniband

-bash-4.2$ service nv_peer_mem status 
nv_peer_mem module is loaded. 

По этой теме «How to use GPUDirect RDMA with Infiniband» У меня есть все требования к GPUDirect и следующий код должен работать успешно. Но это не так, и ibv_reg_mr терпит неудачу с ошибкой «Плохой адрес», как если бы GPUDirect был неправильно установлен.

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 является взаимодействие с унифицированной памятью (UVM). Не могли бы вы попытаться отключить UVM:

export CUDA_DISABLE_UNIFIED_MEMORY=1 

?

Если это не поможет устранить проблему, попробуйте выполнить validation и copybw тесты от https://github.com/NVIDIA/gdrcopy, чтобы проверить GPUDirectRDMA. Если он работает, ваш стек Mellanox неправильно сконфигурирован.

+1

export CUDA_DISABLE_UNIFIED_MEMORY = 1 сделал работу. Спасибо – kusterl

+0

Вы имели в виду «если это не работает»? – JC1