我尝试使用 OpenCL 编写示例直方图工具。首先,我只是有兴趣以原子方式递增每个 bin。我想出了以下内核代码:
__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]);
}
但输出直方图在每个 bin 中都为零。这是为什么?此外,如果将 printf(" ") 放在最后一行,就会发生真正奇怪的事情。突然,它起作用了。我完全迷路了,有人知道为什么会这样吗?
PS我启用了所有扩展