Cuda GPUDirect к сетевой карте/жесткому диску?

В настоящее время я пишу приложение CUDA и сталкиваюсь с несколькими проблемами ввода-вывода, «кормящими зверя».

Мне интересно, есть ли способ, которым я могу напрямую считывать данные с контроллера RAID или сетевой карты и отправлять эти данные непосредственно на графический процессор. То, что я пытаюсь сделать, показано непосредственно на слайде №3 следующей презентации: http://developer.download.nvidia.com/devzone/devcenter/cuda/docs/GPUDirect_Technology_Overview.pdf.

При этом, по-видимому, здесь уже был дан ответ: Можно ли получить доступ к жесткому диску напрямую из графического процессора?, однако презентация, которую я приложил, наводит на мысль, что все, что мне нужно, это установить переменную среды в Linux (но она не предлагает никаких полезных фрагментов кода/ Примеры).

Поэтому мне интересно, можно ли считывать данные напрямую с контроллера NIC/RAID в GPU и что для этого потребуется? Нужно ли мне писать собственный драйвер для оборудования? Есть ли примеры, когда определенные копии избегаются?

Заранее спасибо за помощь.


person It'sPete    schedule 07.04.2015    source источник
comment
Насколько я понимаю, вам понадобится драйвер для вашей сетевой карты, RAID-контроллера или SSD, который поддерживает возможности GPUdirect RDMA. Сворачивание собственного, вероятно, очень тривиально. В качестве первого шага вы можете обратиться к поставщику вашей сетевой карты, RAID-контроллера или твердотельного накопителя, чтобы узнать, предлагают ли они или планируют предлагать драйвер с поддержкой GPUdirect для своего продукта. Если ваша сетевая карта, RAID-контроллер или твердотельный накопитель не обладают очень высокой пропускной способностью или у вас нет строгих требований к задержке, прямое перемещение данных с/на GPU вряд ли обеспечит большую производительность; сам ввод-вывод будет ограничивающим фактором.   -  person njuffa    schedule 08.04.2015


Ответы (1)


GPUDirect — это технологический «зонтичный термин», который в целом представляет собой бренд, относящийся к технологиям, которые обеспечивают прямую передачу данных на графический процессор и/или с него, каким-то образом минуя ненужные проходы через память хоста.

GPUDirect v1 – это технология, которая работает с определенными адаптерами InfiniBand и обеспечивает совместное использование буфера данных между драйвером графического процессора и драйвером IB. Эта технология в основном была заменена GPUDirect (v3) RDMA. Эта технология v1 не допускает общего использования с какой-либо сетевой картой. Ссылка на переменную среды:

однако презентация, которую я приложил, наводит на мысль, что все, что мне нужно, это установить переменную среды в Linux

относится к включению GPUDirect v1. Это не универсальный сетевой активатор.

GPUDirect v2 также называется GPUDirect Peer-to-Peer и предназначен для передачи данных между двумя графическими процессорами CUDA на одной и той же фабрике PCIE только. Он не обеспечивает взаимодействия с любым другим типом устройств.

GPUDirect v3 также называется GPUDirect RDMA.

Поэтому мне интересно, можно ли считывать данные напрямую с контроллера NIC/RAID в GPU и что для этого потребуется?

Сегодня каноническим вариантом использования GPUDirect RDMA является адаптер Mellanox Infiniband (IB). (Его также можно заставить работать, возможно, с помощью Mellanox, используя Ethernet-адаптер Mellanox и RoCE). Если это соответствует вашему определению «сетевой карты», то это возможно, загрузив правильный стек программного обеспечения, при условии, что у вас есть соответствующее оборудование. Графический процессор и устройство IB должны находиться на одной и той же фабрике PCIE, что означает, что они должны быть подключены к одному и тому же корневому комплексу PCIE (фактически, подключены к одному и тому же сокету ЦП). При использовании адаптера Mellanox IB типичное использование включает GPUDirect с поддержкой RDMA. ИМБ.

Если у вас есть собственная неуказанная сетевая карта или RAID-контроллер, и у вас еще нет драйвера Linux-устройства GPUDirect RDMA, использовать GPUDirect невозможно. (Если для него имеется драйвер GPUDirect RDMA, обратитесь за помощью к производителю или поставщику драйвера.) Если у вас есть доступ к исходному коду драйвера и вы знакомы с написанием собственных драйверов устройств Linux, вы можете попробовать создать собственный драйвер GPUDirect. . Необходимые шаги выходят за рамки моего ответа, но отправная точка задокументирована здесь. .

Нужно ли мне писать собственный драйвер для оборудования?

Да, если у вас еще нет драйвера GPUDirect RDMA, его необходимо написать.

Есть ли примеры, когда определенные копии избегаются?

В GPUDirect RDMA MPI ссылка приводятся примеры и объясняется, как GPUDirect RDMA может избегайте ненужных копий данных устройства‹->host во время передачи данных с GPU на адаптер IB. Как правило, данные могут передаваться напрямую (через PCIE) из памяти устройства GPU в память устройства IB (или наоборот) без прохождения через память хоста (GPUDirect v1 этого не достиг).

ОБНОВЛЕНИЕ: NVIDIA недавно анонсировала новую технологию GPU Direct под названием GPU Direct Storage.

person Robert Crovella    schedule 07.04.2015
comment
Спасибо за разъяснение всех разновидностей GPUDirect. Это было то, что я нашел чрезвычайно запутанным в моем исследовании. - person It'sPete; 08.04.2015