使用cudaMemcpyAsync()函数进行数据拷贝然后执行核函数,由于该函数是异步的,可能没拷贝完就返回了,
请问执行核函数之前是不是必须要同步流以确保数据拷贝完成?
楼主您好,
这个要看情况,如果使用目标缓冲区的kernel和进行中的cudaMemcpyAsync是在同一个流里一前一后任务发出的,那么不需要同步(因为同流会保证逻辑上的先后顺序的,当您的cudaMemcpyAsync一旦完成,kernel会立刻跟随在后面开始执行的)。
但如果是在不同的流里面,您需要手工确保逻辑顺序正确,即您需要同步一次。
感谢来访。
LZ您好:
在同一个stream中的执行总是保证顺序的,所以从kernel的角度看,无需额外同步,以保证cpoy正确。
但是在host的角度,如果是从device端回拷数据,异步copy返回的时候,并不保证已经copy结束,所以您如果host端需要使用对应缓冲区的内容,敬请谨慎使用。
祝您编码顺利~
谢谢版主!