c-OpenCL原子不起任何作用



我尝试使用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]);
}

但是输出直方图在每个bin中为零。为什么?此外,如果在最后一行放一个printf("(,真正奇怪的事情就会发生。突然间,它起了作用。我完全迷路了,有人知道为什么会发生这种事吗?

p.S。我启用了所有扩展

我自己解决了这个问题。

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

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

谢谢你,以防你考虑我的问题。

相关内容

  • 没有找到相关文章

最新更新