执行CUDA设备代码时,在同一个线程中运行主机代码

时间:2015-03-02 10:11:41

标签: c++ multithreading cuda

在CUDA设备功能运行时,有没有办法运行主机代码?由于CUDA运行时必须等到设备功能完成,我想知道是否有可能在此期间调用提供的主机功能委托。

这样的事情:

enter image description here

<<<function>>>来电之前启动一个帖子对我来说不一样[开销,......]。

1 个答案:

答案 0 :(得分:4)

CUDA内核调用是异步。这意味着控制将返回到内核调用的主机线程,内核实际开始执行之前。

因此,只需在内核调用之后(以及cudaDeviceSynchronize()cudaMemcpy()之外的任何其他CUDA API调用之前)立即放置该主机代码,即可与内核同时运行主机代码。放置在那里的主机代码将与内核同时运行,只要内核执行(并且只要主机代码执行。)如果你在主机代码中找到了需要设备结果的点(内核)然后,非同步CUDA API调用(如cudaDeviceSynchronize()cudaMemcpy())将强制主机代码(线程)等待,直到先前发布的CUDA活动(内核)完成。

您可能希望阅读编程指南中的asynchronous concurrent execution