【发布时间】:2017-03-30 15:32:35
【问题描述】:
我在 OpenCL 1.2 中遇到问题。
看,我在内核中有一个数组为__global,组大小为1000。
问题是atomic_add()函数不能正常工作。
我的内核代码是:
__kernel void kernelfunction(__global uint32_t* buffer){
buffer[3] = 100;
atomic_add(&buffer[3], 1);
...
}
如果我创建 1000 个线程,我预计 buffer[3] 的值将是 1100,对吗?
但是程序的行为是未定义的。
有时是 1100,有时是 1064,有时是 1093,然后......
我尝试过的:
我还启用了如下的 opencl 扩展:
#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
但问题仍然存在。
在另一个项目中,我将创建一个简单的 opencl 项目,atomic_add 工作正常,我检查了几乎整个项目配置,但我不知道问题出在哪里。
你能帮帮我吗? 谢谢
【问题讨论】:
-
不,你错了。您还应该研究如何正确格式化您的代码。我也不知道为什么你的第一行是“玩得开心”。