C++ CUDA:调用kernel/cudaMemcpy的主机方法可能会在kernel/memcpy完成之前返回吗?
我有一种方法,可以将一些数据复制到设备上,在各自的流上调用多个内核,然后为不同的流调用C++ CUDA:调用kernel/cudaMemcpy的主机方法可能会在kernel/memcpy完成之前返回吗?,c++,cuda,C++,Cuda,我有一种方法,可以将一些数据复制到设备上,在各自的流上调用多个内核,然后为不同的流调用cudaMemcpyAsync,以便它们在各自的内核之后运行 既然我已经读到内核和cudaMemcpyAsync都是启动的,并且与主机代码并行运行,那么在这些操作完成之前,我会调用它们作为回报,还是只与同一个函数中的主机代码并行运行 调用kernel/cudaMemcpy的主机方法是否会在kernel/memcpy完成之前返回 是的,可能会。如果您只需调用内核和cudaMemcpyAsync操作,那么调用这些操
cudaMemcpyAsync
,以便它们在各自的内核之后运行
既然我已经读到内核和cudaMemcpyAsync都是启动的,并且与主机代码并行运行,那么在这些操作完成之前,我会调用它们作为回报,还是只与同一个函数中的主机代码并行运行
调用kernel/cudaMemcpy的主机方法是否会在kernel/memcpy完成之前返回
是的,可能会。如果您只需调用内核和cudaMemcpyAsync
操作,那么调用这些操作的cpu函数可能会在操作完成之前完成/返回(即使是main
例程!)
这些操作都是异步的,这意味着它们不会阻塞调用它们的CPU线程
即使在内核调用和cudaMemcpyAsync
调用之后运行了大量CPU代码,也不能保证GPU活动将完成(甚至开始!),除非您使用一些将主机线程与设备活动同步的函数,例如普通的cudaMemcpy
调用或cudaDeviceSynchronize()
调用或cudaStreamSynchronize()
或其他类似调用
这不受cpu/主机代码的功能结构的影响