Когда вызывать cudaDeviceSynchronize?

когда вызов функции cudaDeviceSynchronizeдействительно необходим?.

Насколько я понял из документации CUDA, ядра CUDA асинхронны, поэтому кажется, что мы должны вызывать cudaDeviceSynchronizeпосле каждого запуска ядра. Тем не менее, я пробовал один и тот же код (для обучения нейронных сетей )с любым cudaDeviceSynchronizeи без него, кроме одного перед измерением времени. Я обнаружил, что получаю тот же результат, но с ускорением от 7 -до 12x (в зависимости от размера матрицы ).

Итак, вопрос в том, есть ли какие-либо причины использовать cudaDeviceSynchronizeпомимо измерения времени.

Например:

  • Нужно ли это перед копированием данных с графического процессора обратно на хост с помощью cudaMemcpy?

  • Если я выполняю умножение матриц, например

    C = A * B
    D = C * F
    

я должен поставить cudaDeviceSynchronizeмежду обоими?

Из моего эксперимента кажется, что нет.

Почему cudaDeviceSynchronizeтак сильно замедляет работу программы?

53
задан nbro 16 May 2016 в 10:15
поделиться