CUDA:在内核/ memcpy完成之前,可能会调用kernel / cudaMemcpy的宿主方法吗?

时间:2016-08-16 21:16:16

标签: c++ cuda

我有一个方法可以将一些数据复制到设备上,每个都在自己的流上调用多个内核,然后为不同的流调用cudaMemcpyAsync,以便它们在各自的内核之后运行。

由于我已经读过内核和cudaMemcpyAsync都被启动并与主机代码并行运行,因此我可以在这些函数完成之前调用它们,或者它只与主机代码并行运行同样的功能?

1 个答案:

答案 0 :(得分:4)

  

在kernel / memcpy完成之前,是否可以调用kernel / cudaMemcpy的host方法?

是的,可能。如果您所做的只是调用内核和cudaMemcpyAsync操作,那么调用它们的cpu函数可能会在操作完成之前完成/返回(即使它是您的main例程!)

这些操作都是异步,这意味着它们不会阻塞调用它们的CPU线程。

即使你有很多CPU代码在内核调用和cudaMemcpyAsync调用之后运行,也不能保证GPU活动会完成(甚至启动!),除非你使用一些同步主机的函数包含设备活动的主题,例如普通的cudaMemcpy来电或cudaDeviceSynchronize()来电或cudaStreamSynchronize()或其他类似的来电。

这不受cpu /主机代码功能结构的影响。