我有一个在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循环,使事情进一步复杂化。
答案 0 :(得分:2)
我认为在这种情况下你不必做很多事情。我知道英特尔的GPU实现不会在全局写入停止,除非在写入后不久存在寄存器依赖性危险(例如,如果程序在写入后过早地重用该寄存器,它将停止直到依赖性危险清除)。可悲的是,你不能真正控制寄存器分配,甚至不幸地看到它。