opencl中atomic_add的行为

时间:2018-04-28 02:29:24

标签: opencl

我正在玩opencl上的一个例子:

__kernel void atomic(__global int* x) {
   __local int a, b;
   a = 0; b = 0;
   a++;
   atomic_inc(&b);

   x[0] = a;
   x[1] = b;
   x[2]++;
   atomic_inc(x+3);
  }

使用global_size = 1024workgroup_size = 8运行此代码,这是以下输出:

[1 8 1 1024]

我可以理解除x[1]给出的值之外的所有情况。为什么x[1]的值不是1024而是8?

1 个答案:

答案 0 :(得分:3)

x[1]下的b存储值是__local地址空间中的变量,表示该变量由工作组中的所有工作项共享。每个工作组都将b初始化为0并原子递增为8,因为工作组大小为8(每个工作项增加1)。