Kernel OpenCL内核总结
我想知道这是否可行。。。我想检查java内核内部,数组是否包含数字和字符,如果是,保存它们在输出数组中出现的次数Kernel OpenCL内核总结,kernel,sum,opencl,Kernel,Sum,Opencl,我想知道这是否可行。。。我想检查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
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;" +
"}";
私有静态字符串程序源=
“uuu kernel void sampleKernel(uuu global const char*a,uuu global int*c){”+
“c[0]=0;c[1]=0;”+
“int gid=get_global_id(0);”+
“如果((a[gid]>64&&a[gid]<91)| |(a[gid]>96&&a[gid]<123))c[0]+=1;”+
“如果(a[gid]>47&&a[gid]<58)c[1]+=1;”+
"}";
这是我的密码。。。但在输出数组中,它总是数字1。。。
怎么了?这个问题的解决方案是什么
谢谢 所有工作项同时修改c[0]和c[1],导致输出错误 一种解决方案是使用原子公司。原子_inc(c)代替c[0]+=1,原子_inc(c+1)代替c[1]+=1
接下来,由于您只有两个输出,将会有很多碰撞,这可能会非常缓慢。类似于约简的算法更可取。如果我已经很好地理解了它,现在应该是这样:?if((a[gid]>64&&a[gid]<91)| |(a[gid]>96&&a[gid]<123))原子公司(c);如果(a[gid]>47&&a[gid]<58)原子公司(c+1)?谢谢