【发布时间】:2014-03-10 09:55:44
【问题描述】:
我最近一直在使用 openCL。我创建了一个基本上采用一个全局变量的内核 由内核中的所有工作项共享。内核再简单不过了,每个工作项都会增加 result 的值,它是全局变量。代码已显示。
__kernel void accumulate(__global int* result) {
*result = 0;
atomic_add(result, 1);
}
当工作项的总数很少时,一切都很好。在我的 MAC pro Retina 上,当工作项在 400 左右时,结果是正确的。
但是,当我增加全局大小时,例如 10000。而不是在获取 10000 时 返回结果中存储的数字,该值约为 900,这意味着多个工作项可能同时访问全局。
我想知道此类问题的可能解决方案是什么?感谢您的帮助!
【问题讨论】:
-
加上我的opencl版本是1.2。