【发布时间】:2015-03-20 10:13:48
【问题描述】:
我有一个在 OpenCL 下运行的程序,在我在私有内存中执行计算之后,我想将它们写入全局内存。我对以后的结果没有用处 - 基本上我正在寻找一个内置的解决方案来异步从 __local 或 __private 内存写入全局内存。
我已经尝试过 async_work_group_copy 并且我注意到为了确保正确复制数据,我必须等待事件。对于我的卡 AMD HD7970,这与直接同步复制到全局内存相同。
是否有人在不等待事件或任何其他可行的替代方案的情况下对 async_work_group_copy 有任何经验?
for (...) {
//Calculate some results and copy to __local array src
event_t e = async_work_group_copy(dest, src, size, 0);
wait_group_events(1, &e); //Can we safely skip this??
}
这里 src 是 __local,dest 是 __global。
我怀疑由于整个组的此功能必须相同,因此跳过等待事件可能不起作用,因为其他本地工作项可能尚未完成。这是在一个 for 循环中,这使事情变得更加复杂。
【问题讨论】:
-
所以你的内核必须在复制后做更多的工作,而不是那些全局数据?
-
是的。内核本质上是制造数据并将它们放入全局内存中。有一些输入数据,但在开始时读取一次。制造的数据不需要被计算消耗。我需要的任何数据都始终保存在私人内存中。
标签: parallel-processing opencl gpu