Одновременный запуск нескольких ядер с использованием CUDA для графического процессора - PullRequest
5 голосов
/ 14 июня 2010

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 17 июня 2010

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

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

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

6 голосов
/ 14 июня 2010

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

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

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

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

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

3 голосов
/ 20 марта 2012

совместимость с CUDA 2.1 = до 16 параллельных ядер

...