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

问题描述 投票:0回答:1

据我所知,Cuda 流和内存cpyasync 需要我们将不同的内核、内存操作标记到不同的流中,以使 gpu 操作与 cpu 操作并发。

但是有可能拥有一个持久内核吗?该内核启动一次,永远循环,检查“某些标志”以查看是否有来自 CPU 的数据然后对其进行操作。当这“一块”数据完成时,GPU向CPU设置一个“标志”,CPU看到它并将数据复制回来。该内核永远不会完成运行。

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

c++ c cuda gpu cpu
1个回答
7
投票

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

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

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

这个答案提供了一个更复杂、更全面的示例。

当然,您希望在没有启用超时看门狗的环境中执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.