0

我尝试使用 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我启用了所有扩展

4

1 回答 1

2

我自己解决了问题。

在没有解决问题之后,我尝试将 CLDevice 更改为 CPU。一切都按预期进行(不幸的是非常慢:D)。但这让我想到这可能不是代码问题,而是 OpenCL 基础架构问题。

我更新了 AMD 的 OpenCL 平台,现在一切正常

谢谢,以防你想到我的问题。

于 2013-02-24T19:30:37.073 回答