2015-06-25 2 views
3

У меня две машины. На каждой машине есть несколько карт Tesla. На каждой машине также есть карта InfiniBand. Я хочу общаться между графическими процессорами на разных машинах через InfiniBand. Точно указать одноадресную рассылку будет хорошо. Я, конечно же, хочу использовать GPUDirect RDMA, чтобы избавиться от дополнительных операций копирования.Как использовать GPUDirect RDMA с Infiniband

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

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

+3

Это звучит как-то, о чем вы должны поговорить с Mellanox около – talonmies

+2

Код в основном находится в [openib] (https://svn.open-mpi.org/trac/ompi/browser/branches/v1. 8/ompi/mca/btl/openib) Компонент BTL. Ищите вещи, которые имеют 'gdr' в своих именах и для условно скомпилированных блоков с' CUDA' или 'GRD' в имени символа препроцессора. –

+2

Обратите внимание, что запрос на ресурсы вне сайта (например, учебные пособия) рассматривается здесь не по теме, что делает ваш вопрос пограничным вне темы. – njuffa

ответ

5

Для 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 операций с нашим ГКО.

Для получения дополнительной информации об использовании глаголов RDMA и InfiniBand в вашем коде, вы можете обратиться к этому document.

+0

Можете ли вы читать/записывать на удаленную память сервера с графического процессора с RDMA Mellanox? – JC1

Смежные вопросы