2013-02-24 32 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的平臺,現在一切正常

謝謝你,如果你想過我的問題。