2010-06-14 4 views
5

Возможно ли запустить сразу два ядра, которые выполняют независимые задачи. Например, если у меня есть этот код CudaОдновременный запуск нескольких ядер с использованием CUDA для графического процессора

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

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

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

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

+0

Одновременным, вы имеете в виду их выполнение синхронизируются или просто перекрывая? –

ответ

6

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

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

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

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

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

6

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

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

Чтобы выразить независимость, вы должны запускать ядра в разных потоках. Четвертый параметр в синтаксисе тройного шеврона указывает поток, проверяет руководство по программированию или образец параллельного ядра SDK.

3

совместимость CUDA 2,1 = до 16 одновременных ядер

Смежные вопросы