2013-02-24 57 views
0

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

回答

2

我解决了由我自己的问题。没有固定的问题

后,我试图改变CLDevice到CPU。一切都按原样(不幸的是非常缓慢:D)。但是这让我觉得它可能不是一个代码问题,而是一个OpenCL基础结构问题。

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

谢谢你,如果你想过我的问题。