OpenACC で非常に単純なベクトル加算カーネルを実行しています。そして、これが私が使用しているコンパイラ(OpenCLを使用したaccULL)の問題であるかどうか疑問に思っています。デバイスからホストにデータをコピーして戻すように見える問題があるためです。すべての結果は正しいですが、結果[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 の結果はデバイスからコピーされていないようです。
これはコンパイラ/ランタイムのバグですか、それとも私のコーディングに関して何かミスがありましたか?