OpenCL中For循环的奇怪行为

OpenCL中For循环的奇怪行为,opencl,Opencl,当我想在循环中使用计数器生成值时,opencl中的循环有一个问题,似乎计数器值在迭代过程中保持不变。我的OpenCL函数代码如下所示: void my_loop( __global unsigned int* tab1, unsigned int* tab2){ uint i, j; uint global_id_y = get_global_id(1); uint global_size_y = get_global_size(1); uint loop = global_si

当我想在循环中使用计数器生成值时,opencl中的循环有一个问题,似乎计数器值在迭代过程中保持不变。我的OpenCL函数代码如下所示:

void my_loop( __global unsigned int* tab1, unsigned int* tab2){
  uint i, j;
  uint global_id_y = get_global_id(1);
  uint global_size_y = get_global_size(1);
  uint loop = global_size_y - global_id_y - 1
  uint length = get_global_size(0);

  for(i = 0; i < loop; i++){
      sidx = i * length; 
      for(j = 0; j < length; j++){
          tab2[sidx + j ] = i*10 + j;
      }
}
执行之后,我得到的结果是这样的:

0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4 
...
0 1 2 3 4

这正常吗?如何使用计数器的不同值?

上面的长度代表什么?长度代表矩阵宽度。发布源代码,特别是调用
clenqueendrangekernel
的代码。可能您的工作尺寸或全局工作尺寸设置不正确?我用调用ClenqueueEndRangeKernel的代码更新了问题。您的内核代码仅依赖于
get\u global\u id(1)
。这意味着所有共享相同的
global\u id\y
的工作项都执行完全相同的操作,这听起来像是一个bug。此外,
tab2
不应该有地址空间限定符吗?
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4 
...
0 1 2 3 4