Процессор ожидает, что DEVICE позволит завершить его выполнение ядра...?
Хост ли ждать, пока устройство завершит свое выполнение?
например программа имеет следующую структуру:
// cpu code segment
// data transfer from host to device
QUESTION - WILL CPU WAIT FOR DEVICE TO FINISH TRANSFER? IF NO, IS IT POSSIBLE? IF YES, HOW?
// kernel launch
QUESTION - WILL CPU WAIT FOR DEVICE TO LET IT FINISH KERNEL EXECUTION (CONSIDERING KERNEL EXECUTION WILL TAKE NOTABLE TIME say-5 sec)? IF NO, IS IT POSSIBLE? IF YES, HOW?
// data transfer from device to host
// program terminates after printing some information
Ответы
Ответ 1
Функции синхронизации времени выполнения CUDA могут позволить вам достичь того, что вы хотите.
cudaDeviceSynchronize()
:
Когда вы вызываете эту функцию, CPU будет ждать, пока устройство не завершит ВСЕ его работу, будь то копия памяти или выполнение ядра.
cudaStreamSynchronize(cudaStream)
:
Эта функция блокирует CPU до тех пор, пока указанный поток CUDA не завершит свое выполнение. Другие потоки CUDA будут продолжать их выполнение асинхронно.