OpenCL 将数据从内核发送到主机

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

我正在尝试制作一个内核,它偶尔会更新主机的进度,因为内核执行繁重的计算任务(需要数小时到数天的时间才能完成)。然而,我还没有找到从内核到主机通信的方法,除了

printf
,这让我相信这种通信在理论上是可能的。

到目前为止,我已经尝试使用缓冲区,主机会定期检查新消息,但是,对于我的 Nvidia GPU,似乎在内核仍在运行时访问 GPU 内存的任何方式都被锁定。我尝试过使用共享内存以及映射缓冲区,但无济于事。

我也知道 OpenCL 中事件的存在,但我不确定如何在主机上创建用户事件并将其传递给内核。

我在这里陷入了困境,任何和所有的帮助将不胜感激。我对 OpenCL 没有太多经验,所以我不了解 OpenCL 的大部分构造和概念。

这里大致是我尝试过的带有缓冲区的代码:https://pastebin.com/zjPfKGYn

c++ opencl
1个回答
1
投票

除非您有充分的理由以更复杂的方式执行此操作,否则我强烈建议您只让内核运行很短的时间,例如 100 毫秒,然后将所需的任何内容保存到全局内存中,这与本地或私有内存不同在内核调用之间是持久的。我的意思是让你的内核按以下方式工作。

A. Load state from global buffer
B. Do some work
C. Save state to global buffer

然后您的主机可以在循环中读取内核调用之间的缓冲区。

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