CUDA-эквивалент glDispatchComputeIndirect - PullRequest
0 голосов
/ 07 июня 2018

Что является наиболее близким и эффективным эквивалентом простой цепочке последовательностей вызовов glDispatchComputeIndirect () OpenGL в Cuda на Паскале и далее?В тех случаях, когда цепочка диспетчеризаций / ядер динамически изменяет размеры параметров запуска (блоки / потоки и т. Д.).

Является ли glDispatchComputeIndirect () вероятнее всего, оптимизацией издержек вызова API на стороне драйвера, а не механизмом на стороне устройства?

Является ли glDispatchComputeIndirect () эквивалентным вложенному параллелизму с ядром верхнего уровня из одного 1-го блока и 1-го потока, выполняющего последовательность дочерних вызовов ядра?

__device__ int blocks = 1;
__device__ int threads = 1;

__global__ void Parent()
{
 Child1<<<blocks, threads>>>(); // changes blocks/threads inside child
 cudaDeviceSynchronize();
 Child2<<<blocks, threads>>>(); // changes blocks/threads inside child
 cudaDeviceSynchronize();
...
}

1 Ответ

0 голосов
/ 08 июня 2018

Является ли glDispatchComputeIndirect () вероятнее всего оптимизацией служебных данных вызова на стороне драйвера, а не механизмом на стороне устройства?

Почти наверняка.

Является ли glDispatchComputeIndirect() эквивалентно вложенному параллелизму с ядром верхнего уровня из одного 1 блока и 1 потока, выполняющего последовательность вызовов дочернего ядра?

Почти наверняка нет.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...