Одновременный запуск Нескольких Ядер с помощью CUDA для GPU

Действительно ли возможно запустить два ядра, которые делают независимые задачи, одновременно. Например, если я сделал, чтобы этот Cuda кодировал

// host and device initialization
.......
.......

// launch kernel1
myMethod1 <<<.... >>> (params);

// launch kernel2
myMethod2 <<<.....>>> (params);

Предположение, что эти ядра независимы, является там средством для запуска их одновременно выделяющий немного сеток/блоков для каждого. Делает CUDA/OpenCL, имеют это условие.

5
задан codetwiddler 12 July 2012 в 19:27
поделиться

2 ответа

Только устройства с вычислительной способностью CUDA 2.0 и выше (например, Fermi) могут поддерживать несколько одновременных запусков ядра. См. Раздел 3.2.6.3 руководства по программированию CUDA 3.0, в котором говорится:

Некоторые устройства с вычислительными возможностями 2.0 может выполнять несколько ядер одновременно. Приложения могут запрашивать эта возможность, позвонив cudaGetDeviceProperties () и проверка свойство concurrentKernels .

Максимальное количество запусков ядра что устройство может работать одновременно четыре.

Ядро из одного контекста CUDA не может выполнять одновременно с ядром из другого контекста CUDA.

Ядра, использующие много текстур или большой объем локальной памяти меньше вероятно, будет выполняться одновременно с другие ядра.

6
ответ дан 18 December 2019 в 11:53
поделиться

Вам понадобится SM 2.0 или выше для параллельных ядер.

Чтобы получить параллельное выполнение, вам нужно вручную указать, что между двумя ядрами нет зависимости. Это происходит потому, что компилятор не может определить, что одно ядро не будет изменять данные, используемые в другом, это может быть чтение из одного и того же буфера и запись в него, что кажется достаточно простым, но на самом деле гораздо сложнее обнаружить, так как могут быть указатели внутри структур данных и так далее.

Чтобы выразить независимость, необходимо запустить ядра в разных потоках. Четвертый параметр в синтаксисе triple-chevron указывает поток, посмотрите Руководство по программированию или пример SDK concurrentKernels.

6
ответ дан 18 December 2019 в 11:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: