2013-05-07 52 views
1

我想知道這是否可以做...我想檢查java內核,如果數組包含數字和字符,如果是,請保存它們出現在輸出數組。OpenCL Kernel summatory

private static String programSource = 
      "__kernel void sampleKernel(__global const char *a, __global int *c){" + 
      " c[0]=0; c[1]=0;"+ 
      " int gid = get_global_id(0);" + 
      " if((a[gid] > 64 && a[gid] < 91) || (a[gid] > 96 && a[gid] < 123)) c[0]+=1; "+ 
      " else if(a[gid] > 47 && a[gid] < 58) c[1]+=1;" + 
      "}"; 

這是我的代碼...但輸出數組中它始終是數字1 ... 什麼是錯的?這個問題的解決方案是什麼?

謝謝!

回答

0

所有的工作項目都在同時修改c [0]和c [1],導致錯誤的輸出。

一個解決方案是使用atomic_inc。 atomic_inc(c)代替c [0] + = 1,而atomic_inc(c + 1)代替c [1] + = 1。

接下來,由於您只有兩個輸出,會有很多衝突,而且這可能會很慢。類似簡化算法將是優選的。

+0

如果我理解得很好,現在應該如此:? ((a [gid]> 64 && a [gid] <91)||(a [gid]> 96 && a [gid] <123))atomic_inc(c); else if(a [gid]> 47 && a [gid] <58)atomic_inc(c + 1); ? 謝謝! – user2359676 2013-05-07 20:20:06