CudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize - программирование
Подтвердить что ты не робот

CudaStreamSynchronize vs CudaDeviceSynchronize vs cudaThreadSynchronize

В чем разница между этими тремя функциями, особенно двумя последними? В руководстве библиотеки говорится:

Обратите внимание, что эта функция устарела, поскольку ее имя не отражают его поведение. Его функциональность аналогична не устаревшая функция cudaDeviceSynchronize(), которая должна использоваться вместо этого.

Но не очень уверен, что это значит.

4b9b3361

Ответ 1

Это все барьеры. Барьеры предотвращают выполнение кода за пределы барьера до тех пор, пока не будет выполнено какое-либо условие.

  • cudaDeviceSynchronize() останавливает выполнение в CPU/узла нити (что cudaDeviceSynchronize был выпущен в) до тех пор, пока ГПУ завершила обработку всех ранее запрошенные задачи Cuda (ядра, копии данных и т.д.).
  • cudaThreadSynchronize(), как вы обнаружили, это просто устаревшая версия cudaDeviceSynchronize. Устаревший означает, что он по-прежнему работает, но он рекомендовал не использовать его (вместо этого использовать cudaDeviceSynchronize), и в будущем он может стать неподдерживаемым. Но cudaThreadSynchronize() и cudaDeviceSynchronize() в основном идентичны.
  • cudaStreamSynchronize() похож на двух указанных выше функций, но он предотвращает дальнейшее выполнение в хост-процессор нити до тех пор, пока ГПУ закончит обработку всех ранее запрошенных задач, которые Cuda были выпущены в указанном потоке. Таким образом, cudaStreamSynchronize() принимает идентификатор потока как только параметр. Задачи cuda, выпущенные в других потоках, могут быть или не быть полными, когда выполнение кода ЦП продолжается за пределами этого барьера.