OpenCL を使用してヒストグラム ツールの例をプログラムしようとしています。まず、各ビンをアトミックにインクリメントすることに興味がありました。次のカーネルコードを思いつきました:
__kernel void Histogram(
__global const int* input,
__global int* histogram,
int numElements) {
// get index into global data array
int iGID = get_global_id(0);
// bound check, equivalent to the limit on a 'for' loop
if (iGID >= numElements) {
return;
}
if( iGID < 100 ) {
// initialize histogram
histogram[iGID] = 0;
}
barrier(CLK_GLOBAL_MEM_FENCE);
int bin = input[iGID];
atomic_inc(&histogram[bin]);
}
しかし、出力ヒストグラムはすべてのビンでゼロです。何故ですか?さらに、最後の行に printf(" ") を配置すると、本当に奇妙なことが起こります。突然、それは機能します。私は完全に道に迷っています。なぜこれが起こるのか誰か分かりますか?
PS私はすべての拡張機能を有効にしました