Cuda CPU是否等待设备让其完成内核执行。。。。?

Cuda CPU是否等待设备让其完成内核执行。。。。?,cuda,Cuda,主机是否等待设备完全完成其执行? e、 g.该程序的结构如下所示 // 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 F

主机是否等待设备完全完成其执行? e、 g.该程序的结构如下所示

// 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 

CUDA运行时的同步功能可以让您实现所需

cudaDeviceSynchronize()

调用此函数时,CPU将等待设备完成所有工作,无论是内存复制还是内核执行

cudaStreamSynchronize(cudaStream)


此函数将阻塞CPU,直到指定的CUDA流完成其执行。其他CUDA流将继续异步执行。

要对此进行扩展,有两个问题:1)如果使用
cudaMemcpy()
-如果使用异步版本(
cudamemcpysync()
),CPU将阻止数据传输并等待传输完成然后它是异步的,CPU不会阻塞(显然);2) 内核启动始终是异步的,如《编程指南-内核调用后同步》(使用
cudaDeviceSynchronize()
(或等效流)中所述或者调用同步memcpy会导致CPU阻塞。还请记住,如果您使用的是GPU,那么理想情况下,您可以异步复制数据和执行内核-还可以充分利用您可以使用的所有引擎!@spontifix,不是很清楚吗?我想和OP一样。@Primož'c0dehunter'Kralj您是对的。任务离子只是格式不正确。