在CUDA设备功能运行时,有没有办法运行主机代码?由于CUDA运行时必须等到设备功能完成,我想知道是否有可能在此期间调用提供的主机功能委托。
这样的事情:
在<<<function>>>
来电之前启动一个帖子对我来说不一样[开销,......]。
答案 0 :(得分:4)
CUDA内核调用是异步。这意味着控制将返回到内核调用的主机线程,在内核实际开始执行之前。
因此,只需在内核调用之后(以及cudaDeviceSynchronize()
或cudaMemcpy()
之外的任何其他CUDA API调用之前)立即放置该主机代码,即可与内核同时运行主机代码。放置在那里的主机代码将与内核同时运行,只要内核执行(并且只要主机代码执行。)如果你在主机代码中找到了需要设备结果的点(内核)然后,非同步CUDA API调用(如cudaDeviceSynchronize()
或cudaMemcpy()
)将强制主机代码(线程)等待,直到先前发布的CUDA活动(内核)完成。
您可能希望阅读编程指南中的asynchronous concurrent execution。