Cuda GPUDirect към NIC/хард диск?

В момента пиша CUDA приложение и се натъквам на няколко проблема с IO „хранене на звяра“.

Чудя се дали има някакъв начин, по който мога директно да чета данни от RAID контролер или NIC и тези данни да бъдат изпратени директно към GPU. Това, което се опитвам да постигна, е показано директно на слайд #3 от следната презентация: http://developer.download.nvidia.com/devzone/devcenter/cuda/docs/GPUDirect_Technology_Overview.pdf.

Като се има предвид това, очевидно вече е отговорено тук: Възможно ли е да осъществя достъп до твърдия диск директно от gpu?, но презентацията, която прикачих, кара да вярвам, че всичко, от което се нуждая, е да задам променлива на средата в Linux (но тя не предлага никакви полезни кодови фрагменти/ примери).

Затова се чудя дали е възможно да се четат данни директно от NIC/RAID контролер в графичния процесор и какво ще е необходимо за това? Трябва ли да напиша собствен драйвер за хардуера? Има ли примери, при които определени копия се избягват?

Благодаря предварително за помощта.


person It'sPete    schedule 07.04.2015    source източник
comment
Доколкото разбирам, ще ви трябва драйвер за вашата мрежова карта, RAID контролер или SSD, който поддържа възможностите на RDMA на GPUdirect. Преобръщането на вашия собствен вероятно е много тривиално. Като първа стъпка може да поискате да се свържете с доставчика на вашата мрежова карта, RAID контролер или SSD, за да попитате дали предлагат или планират да предложат драйвер с активиран GPUdirect за своя продукт. Освен ако вашият мрежов адаптер, RAID контролер или SSD няма много висока пропускателна способност или имате строги изисквания за латентност, директното преместване на данни от/към GPU едва ли ще купи много производителност; самият I/O ще бъде ограничаващият фактор.   -  person njuffa    schedule 08.04.2015


Отговори (1)


GPUDirect е технологичен „термин-чадър“, който като цяло е марка, отнасяща се до технологии, които позволяват директен трансфер на данни към и/или от GPU, като по някакъв начин заобикалят ненужните пътувания през паметта на хоста.

GPUDirect v1 е технология, която работи със специфични infiniband адаптери и позволява споделянето на буфер за данни между драйвера на GPU и драйвера IB. Тази технология е заменена предимно от GPUDirect (v3) RDMA. Тази v1 технология не позволява обща употреба с никоя NIC. Препратка към променливата на средата:

обаче презентацията, която прикачих, кара да вярвам, че всичко, от което се нуждая, е да задам променлива на средата в Linux

се отнася за активиране на GPUDirect v1. Това не е средство за активиране на NIC с общо предназначение.

GPUDirect v2 се нарича още GPUDirect Peer-to-Peer и е за прехвърляне на данни между два CUDA GPU на една и съща PCIE тъкан само. Не позволява оперативна съвместимост с друг вид устройство.

GPUDirect v3 се нарича още GPUDirect RDMA.

Затова се чудя дали е възможно да се четат данни директно от NIC/RAID контролер в графичния процесор и какво ще е необходимо за това?

Днес каноничният случай на използване на GPUDirect RDMA е с адаптер Mellanox Infiniband (IB). (Също така може да се накара да работи, може би с помощта на Mellanox, като се използва Ethernet адаптер Mellanox и RoCE). Ако това отговаря на вашето определение за "NIC", тогава е възможно чрез зареждане на подходящ софтуерен стек, ако приемем, че имате подходящ хардуер. Графичният процесор и IB устройството трябва да са на една и съща PCIE тъкан, което означава, че трябва да бъдат прикрепени към един и същ PCIE коренен комплекс (ефективно свързани към един и същи гнездо на процесора). Когато се използва с адаптер Mellanox IB, типичното използване ще включва GPUDirect RDMA-aware MPI.

Ако имате свой собствен неуточнен NIC или RAID контролер и все още нямате GPUDirect RDMA драйвер за linux устройство за него, тогава не е възможно да използвате GPUDirect. (Ако има GPUDirect RDMA драйвер за него, свържете се с производителя или доставчика на драйвера за съдействие.) Ако имате достъп до изходния код на драйвера и сте запознати с писането на собствени драйвери за Linux устройства, можете да опитате да създадете свой собствен GPUDirect драйвер . Включените стъпки са извън обхвата на моя отговор, но началната точка е документирана тук.

Трябва ли да напиша собствен драйвер за хардуера?

Да, ако все още нямате GPUDirect RDMA драйвер за него, ще трябва да бъде написан.

Има ли примери, при които определени копия се избягват?

GPUDirect RDMA MPI връзката дава примери и обяснява как GPUDirect RDMA може избягване на ненужно устройство‹->копия на данни на хост по време на прехвърляне на данни от 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