AMD ビデオ カードで OpenCL を使用しており、Linux に最新のドライバーがあります。
次のようなことをすると:
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
間違った結果が得られます。しかし、barrier(CLK_LOCAL_MEM_FENCE);
この後に a を使用すると、正しい結果が得られます。
なぜそれが起こっているのですか?
Ps1.: Linux と Windows の両方で NVIDIA ビデオ カードを使用すると、バリアを使用せずに正しい答えが得られます。
ブロックは ( __global *input, __global *output を使用):
int a = get_group_id(0) > 0 ? vector[ get_group_id(0)-1 ].word[ id ] : 0;
int b = get_group_id(0) > 0 ? c + a : a;
output[b + id] = input[ d + id ]; //Last kernel line
128 ワークグループ サイズを使用しています。HD 6790で試しました-linux
ありがとう