是否可以运行持久的cuda内核并异步与cpu通信?

yid*_*awu 7 c c++ cpu cuda gpu

据我所知,Cuda流和memorycpyasync需要我们为不同的流标记不同的内核,内存操作,以使gpu操作与cpu操作并发.

但是有可能有一个持久内核.这个内核启动一次,永远循环,检查"一些标志",看看是否有来自CPU然后对其进行操作的数据.当这个"片段"数据完成时,GPU为CPU设置"标志",CPU看到它并将数据复制回来.这个内核永远不会运行.

当前的cuda编程模型中是否存在这种情况?我能得到的最接近的是什么?

Rob*_*lla 6

是的,这是可能的.一种方法是使用零拷贝(即GPU映射)主机存储器.主机将其数据放置在映射区域中,GPU在映射区域中进行通信.显然这需要轮询,但这是你问题所固有的.

这个答案为您提供了一个简单测试用例所需的大部分管道.

还有简单的零拷贝示例代码.

这个答案提供了一个更复杂,更全面的例子.

当然,您希望在没有启用超时监视程序的环境中执行此操作.