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