複数のスレッドが同時に単一のメモリ位置を書き込んでいる場合、競合状態が発生しますよね?? 私の場合、同じことが起こっています。
'reduce.cl'のモジュールについて考えてみます。
int i = get_global_id(0);
int n,j;
n = keyMobj[i]; // this n is the key..It can be either 0 or 1.
for(j=0; j<2; j++)
sumMobj[n*2+j] += dataMobj[i].dattr[j]; //summing operation.
ここで、メモリ位置
sumMobj ===> [... 0 ...、.... 1 ...]は4つのスレッドに同時にアクセスされ、sumMobj ===> [.... 3 ...、。 ...4...]は6つのスレッドに同時にアクセスされます。
ロックやセマフォを使用するなど、並列化する方法はありますか?この合計は私のアルゴリズムの非常に大きな部分なので...