когда вы вызываете функцию cudaDeviceSynchronize
, которая действительно нужна?.
Насколько я понимаю из документации CUDA, ядра CUDA являются асинхронными, поэтому кажется, что после каждого запуска ядра мы должны вызвать cudaDeviceSynchronize
. Тем не менее, я пробовал один и тот же код (обучение нейронных сетей) с и без cudaDeviceSynchronize
, кроме одного до измерения времени. Я обнаружил, что получаю тот же результат, но с ускорением между 7-12x (в зависимости от размеров матрицы).
Итак, вопрос в том, есть ли какие-либо причины использовать cudaDeviceSynchronize
за исключением измерения времени.
Например:
-
Это необходимо, прежде чем копировать данные с GPU на хост с помощью
cudaMemcpy
? -
Если я выполняю матричные умножения, такие как
C = A * B D = C * F
Должен ли я поставить cudaDeviceSynchronize
между обоими?
Из моего эксперимента Кажется, что я этого не делаю.
Почему cudaDeviceSynchronize
так сильно замедляет работу программы?