锁定无法使用OpenCL

时间:2016-07-10 19:38:17

标签: opencl

我在OpenCL代码中遇到了一个问题,我尝试在内核中进行同步:

__kernel void pdiffs (__global const long2 *inData, __global const long2 *inData2, __global long2 *outData) {
  long2 diffSum = 0;
  uint idx0 = get_local_size(0)*get_group_id(0);
  for (uint idx=idx0; idx<idx0+get_local_size(0); idx += 1) {
    diffSum += inData[idx] -  inData2[idx];
  outData[get_group_id(0)] = diffSum;
  printf("%d %d %d %d/%d\n", get_group_id(0), get_num_groups(0), get_local_size(0), diffSum.x, diffSum.y);
  barrier(CLK_GLOBAL_MEM_FENCE|CLK_LOCAL_MEM_FENCE);
  if (get_group_id(0) == 0) {
    for (size_t i = 1; i < get_num_groups(0); i++){
      outData[0] += outData[i];
      printf("v(%d): %d/%d\n", i, outData[i].x, outData[i].y);
    }
  }
}

(我知道这段代码很糟糕......)

我只是认为障碍会同步单个组,因此定义了outData中的值。但我的跟踪显示有些差异没有计算并且包含零(我设置我的数据所以所有都应返回值1,但有些显示为0)。此外,我是否有printf语句也有所不同。没有printf,更多的差异似乎是不正确的。

0 个答案:

没有答案