Паралелизиране на метод от функция/ядро на CUDA устройство

Имам вече паралелизирано CUDA ядро, което изпълнява някои задачи, които изискват честа интерполация.

Така че има ядро

__global__ void complexStuff(...)

който извиква един или повече пъти тази функция на устройството за интерполация:

__device__ void interpolate(...)

Алгоритъмът за интерполация прави WENO интерполация последователно върху три измерения. Това е силно паралелизируема задача, която спешно бих искал да паралелизирам!

Ясно е, че ядрото complexStuff() може лесно да бъде паралелизирано чрез извикване от кода на хоста, използвайки синтаксиса <<<...>>>. Също така е важно complexStuff() вече да е паралелизиран.

Но не ми е ясно как да паралелизирам нещо / да създам нови нишки от функцията на CUDA устройство ... възможно ли е това? Някой знае ли?


person user3249755    schedule 29.01.2014    source източник


Отговори (1)


Може да помислите за динамичен паралелизъм (някои ресурси тук, тук и тук), за да извикате CUDA ядро ​​от вътрешността на друго CUDA ядро. Изисква изчислителната способност на вашето устройство да бъде 3,5 или по-висока. Той идва с редица рестрикции и ограничения, които могат да влошат производителността (споменато в 3-та връзка).
Моето предложение е първо да помислите за извикване на вашето CUDA ядро ​​с complexStuff(...) количество работа, умножено по interpolate(...) количество работа. С други думи, статично познайте какви са максималните паралелни фини работи, които трябва да направите. След това конфигурирайте ядрото си да изпълнява тези фини работи с блокови нишки. Обърнете внимание, че това е просто спекулация, без да знаете вашия програмен код.

person Farzad    schedule 29.01.2014