【发布时间】:2020-01-17 04:00:48
【问题描述】:
OpenCL 1.2:我在两个单独的命令队列中运行一系列内核,以便可以同时调度它们,最后同步。这些中使用了单独的数据缓冲区 排队。
我首先在不同的队列中使用相同的内核对象。然而,这似乎得到 两个队列之间的数据缓冲区都混在一起了。我抬头看了看,但在里面找不到任何东西 这方面的参考资料。特别是,我看不到 clSetKernelArgs() 中明确提到的任何内容 关于此的页面。有一张纸条说
用户不得依赖内核对象来保留指定为内核参数值的对象。
我不确定这是否适用于这种情况。
所以我设计的解决方案是内联内核代码并创建两个独立的内核函数 为两个并行队列中的每个内核调用此代码。这解决了问题。
但是: (1) 我对此不满意,因此我在不同的设备上再次进行了测试。数据缓冲区是 在 Intel HD630 GPU 中混乱,但在 AMD Radeon Pro 560 中没有(一切都很好)。 (2) 此解决方案无法扩展。如果我想实现更大量的任务并行 使用相同的上下文,为每个并行流做单独的内核是不好的。我有 没有测试两个单独的上下文,我认为它会起作用,但它意味着复制 在同步点从一个上下文到另一个上下文的数据,这破坏了整个练习。
有没有人尝试过这个,或者对这个问题有任何见解?
【问题讨论】:
标签: opencl