0

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 の結果はデバイスからコピーされていないようです。

これはコンパイラ/ランタイムのバグですか、それとも私のコーディングに関して何かミスがありましたか?

4

1 に答える 1