Как использовать GPUDirect RDMA с Infiniband

У меня две машины. На каждой машине есть несколько карт Tesla. На каждой машине также есть карта InfiniBand. Я хочу обмениваться данными между картами GPU на разных машинах через InfiniBand. Просто двухточечная одноадресная передача была бы в порядке. Я определенно хочу использовать GPUDirect RDMA, чтобы избавить себя от лишних операций копирования.

Мне известно, что в настоящее время Mellanox предлагает драйвер для карт InfiniBand. Но он не предлагает подробного руководства по разработке. Также я знаю, что OpenMPI поддерживает функцию, которую я прошу. Но OpenMPI слишком тяжел для этой простой задачи и не поддерживает несколько GPU в одном процессе.

Интересно, могу ли я получить какую-либо помощь в непосредственном использовании драйвера для связи. Пример кода, учебник, все, что угодно. Кроме того, я был бы признателен, если бы кто-нибудь помог мне найти код, связанный с этим в OpenMPI.


person Hot.PxL    schedule 25.06.2015    source источник
comment
Это похоже на то, о чем вам следует поговорить с Мелланоксом.   -  person talonmies    schedule 25.06.2015
comment
Рассматриваемый код в основном находится в папке openib компонент BTL. Ищите вещи, в именах которых есть gdr, и условно скомпилированные блоки с CUDA или GRD в имени символа препроцессора.   -  person Hristo Iliev    schedule 25.06.2015
comment
Обратите внимание, что запросы на сторонние ресурсы (например, учебные пособия) здесь считаются не относящимися к теме, что делает ваш вопрос граничащим с не по теме.   -  person njuffa    schedule 25.06.2015


Ответы (1)


Для работы GPUDirect RDMA необходимо установить следующее:

  • Mellanox OFED установлен (из http://www.mellanox.com/page/products_dyn?product_family=26&mtag=linux_sw_drivers )

  • Установлен последний пакет NVIDIA CUDA

  • Плагин Mellanox-NVIDIA GPUDirect (по ссылке, которую вы указали выше - публикация в качестве гостя не позволяет мне публиковать ссылки :()

Все вышеперечисленное должно быть установлено (в указанном выше порядке) и загружены соответствующие модули. После этого вы сможете зарегистрировать память, выделенную на видеопамяти GPU для транзакций RDMA. Пример кода будет выглядеть так:

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);

Это создаст (в системе с поддержкой GPUDirect RDMA) область памяти с действительным ключом памяти, который вы можете использовать для транзакций RDMA с нашим HCA.

Дополнительные сведения об использовании команд RDMA и InfiniBand в коде см. в этом документе. .

person Shachar Raindel    schedule 28.06.2015
comment
Можете ли вы читать/записывать в удаленную память сервера с графического процессора с помощью Mellanox RDMA? - person JC1; 26.05.2017