OpenACC边界问题

时间:2014-11-08 16:19:54

标签: openacc

我在OpenACC中做了一个非常简单的向量加法内核。我想知道这是否是我正在使用的编译器的问题(与OpenCL一起使用),因为我遇到问题似乎是从设备将数据复制回主机。所有结果都是正确但结果为[0]。例如。以下代码:

  for (i=0; i<VEC_SIZE; i++) {
    a[i] = i;
    b[i] = VEC_SIZE-i;
    result[i]=0;
  }
  #pragma acc kernels copyin(a,b) copy(result)
  for (i=0; i<VEC_SIZE; i++) {
    result[i] = a[i]+b[i];
  }

  // verify result
  for (i=0; i<VEC_SIZE; i++) {
    if ( (a[i] + b[i]) != result[i]) {
      fprintf(stderr, "Incorrect results id %d val: %d \n", i, result[i]);
    }
  }

返回以下内容:

Incorrect results id 0 val: 0

这意味着所有结果,但索引0处的结果是正确的,似乎索引零的结果不会从设备复制。

这是编译器/运行时错误还是我错过了关于编码的内容?

1 个答案:

答案 0 :(得分:0)

是的,我也认为这是你的编译器的一个错误,因为你的代码看起来正确,你可以尝试PGI编译器,我现在正在使用它,它现在属于NVIDIA。 此外,您可以将代码“copy(result)”更改为“copyout(result)”以减少内存I / O时间,因为结果的初始值对设备没用。