2013-05-07 69 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