我想寫一個內核來獲取字符串的字符頻率。打開CL內核 - 每個工作項目覆蓋全局內存?
首先,這裏是我的代碼有內核現在:
_kernel void readParallel(__global char * indata, __global int * outdata)
{
int startId = get_global_id(0) * 8;
int maxId = startId + 7;
for (int i = startId; i < maxId; i++)
{
++outdata[indata[i]];
}
}
變量inData
保存在全局存儲器的字符串,outdata
是256個int
值在全局存儲器陣列。每個工作項都從字符串中讀取8個符號,並應增加數組中適當的ASCII碼。代碼編譯並執行,但outdata
包含的次數少於inData
中的字符數。我認爲問題在於工作項目會覆蓋全局內存。如果你能給我一些提示來解決這個問題,那將會很好。
順便說一下。我是OpenCL的新手;-),是的,我在其他問題上尋找解決方案。
此外char也可以是負數,並且下溢輸入數組c> 127。無符號字符正在爲我工作 –
使用無符號字符和原子操作爲我做了。謝謝。 –
@j_ice:你表示感謝你通過提出一個好答案的答案;如果它解決了您的問題 - 您將其標記爲已接受。如果不是這樣,那麼在評論中,其他人可以解釋什麼是缺失/不正確。 – einpoklum