我在 OpenACC 中做了一个非常简单的向量加法内核。而且我想知道这是否是我正在使用的编译器的问题(accULL with 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 处的结果之外的所有结果都是正确的,似乎索引 0 的结果没有从设备复制过来。
这是一个编译器/运行时错误还是我错过了一些关于我的编码的东西?