同步操作:主机向设备提交任务,主机将阻塞,直到设备将所提交任务完成,并将控制权交回主机。然后继续执行主机的程序。
异步操作:主机向设备提交任务,设备直接开始执行任务,但主机将不再阻塞,而是直接继续执行主机的程序。主机并不会等待设备执行任务完毕。
在CUDA当中,核函数kernel的执行总是异步的,而cudaMemcpy数据传输总是同步的。
特别需要注意的是主机在提交核函数之后,不会阻塞等待核函数执行完毕。在profiler CUDA程序时,一定要记得添加cudaDeviceSynchronize() 同步,或者添加一个数据传输(cudaMemcpy-隐含着同步操作) ,以保证核函数执行结束。不然很容易检测不到核函数(如图所示)