Процессор ожидает, что 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 будут продолжать их выполнение асинхронно.