【问题标题】:Is it possible to have a persistent cuda kernel running and communicating with cpu asynchronously ?是否可以让持久的 cuda 内核异步运行并与 cpu 通信?
【发布时间】:2014-04-02 00:32:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ c cuda gpu cpu


    【解决方案1】:

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

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

    还有simple zero-copy sample code

    answer 提供了一个更复杂、更完整的示例。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 2022-06-23
      • 2012-01-18
      • 2015-05-27
      • 1970-01-01
      相关资源
      最近更新 更多