CUDA:与GPU代码并行的CPU代码

fog*_*ges 3 cuda

我有一个程序,我在GPU上进行了一系列计算,然后我在CPU上执行这些结果的内存操作,然后我接下来的批处理数据并全部执行相同操作.现在,如果我可以进行第一组计算,然后从第二批开始,而我的CPU在内存操作中搅拌,那将会快得多.我该怎么办?

har*_*ism 5

所有CUDA内核调用(例如function<<<blocks, threads>>>())都是异步的 - 它们立即将控制权返回给调用主机线程.因此,只需在内核调用之后使CPU工作,就可以始终与GPU工作并行执行CPU工作.

如果您还需要同时将数据从GPU传输到CPU,则需要将deviceOverlap字段设置为true(检查使用cudaGetDeviceProperties())的GPU ,并且需要使用cudaMemcpyAsync()单独的CUDA流.

有一些示例可以在NVIDIA CUDA SDK中演示此功能 - 例如"simpleStreams"和"asyncAPI"示例.