Если я запускаю одно и то же ядро с одним и тем же вводом несколько раз, как это
#define N 2000
for(int i = 0; i < 2000; i++) {
mykernel<<<1,120>>>(...);
}
, что происходит?Я рассчитал время и поиграл с N
: вдвое N
(до 1000), вдвое сократил время, которое потребовалось.
И все же я немного осторожен, чтобы поверить, что он просто запускает ядро 2000 раз, потому чтоускорение по сравнению с кодом без CUDA настолько впечатляет (от ~ 900 с до ~ 0,9 с).Так какую же оптимизацию выполняет CUDA в этом случае?Кэширование результатов?
Установка CUDA_LAUNCH_BLOCKING=1
не изменила ничего.
mykernel
заменяет внутренний цикл в коде, не являющемся CUDA.
Аппаратное обеспечение - GeForce GTX260