我想知道这是否可行...我想在java中检查内核内部,如果数组包含数字和字符,如果是,则保存它们在输出数组中出现的次数。
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 :(得分:0)
所有工作项同时修改c [0]和c [1],导致输出错误。
一种解决方案是使用 atomic_inc 。 atomic_inc(c)代替c [0] + = 1,而atomic_inc(c + 1)代替c [1] + = 1。
接下来,由于你只有两个输出,会有很多碰撞,这可能会很慢。类似缩减的算法将更可取。