Когда вызывать cudaDeviceSynchronize?
когда звонитcudaDeviceSynchronize
функция действительно нужна?
Насколько я понимаю из документации CUDA, ядра CUDA являются асинхронными, поэтому кажется, что мы должны вызыватьcudaDeviceSynchronize
после каждого запуска ядра. Тем не менее, я пробовал один и тот же код (обучение нейронных сетей) с и безcudaDeviceSynchronize
кроме одного до измерения времени. Я обнаружил, что получаю тот же результат, но со скоростью от 7 до 12 раз (в зависимости от размеров матрицы).
Итак, вопрос в том, есть ли причины использоватьcudaDeviceSynchronize
кроме измерения времени.
Например:
Is it needed before copying data from the GPU back to the host with cudaMemcpy
?
If I do matrix multiplications like
C = A * B
D = C * F
я должен положитьcudaDeviceSynchronize
между обоими?
Из моего эксперимента кажется, что я не понимаю.
ПочемуcudaDeviceSynchronize
замедлить программу так сильно?