Ребята, пожалуйста, подтвердите, правильно ли я думаю.CUDA эффективный вызов ядра
Предположим, у меня есть функция ядра mykernel(double *array)
. Я хочу, чтобы код внутри ядра выполнялся 128 раз. Я могу сделать это двумя способами при вызове ядра от хоста:
mykernel<<<128, 1>>>(myarray);
//or
mykernel<<<1, 128>>>(myarray);
С первого вызова я буду создавать 128 блоков, каждый из которых выполняет 1 поток. Во втором вызове я создам 1 блок с 128 потоками. Но поскольку код внутри ядра работает над одним и тем же массивом, более эффективно использовать второй вызов.
Неужели я дурак или должен придерживаться обучения CUDA? :)
Спасибо за объяснение. Я забыл задать еще один вопрос в своем ответе: мне нужно скопировать простые переменные (например, int) на устройство так же, как массивы? –
Нет, вам не обязательно. На самом деле может быть предпочтительнее передавать их непосредственно в качестве параметров ядра. – gentryx