1

我想知道这是否可行......我想检查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...有什么问题?这个问题的解决方案是什么?

谢谢!

4

1 回答 1

0

所有工作项同时修改 c[0] 和 c[1],导致输出错误。

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

接下来,由于您只有两个输出,因此会有很多冲突,这可能会很慢。类约简算法将是更可取的。

于 2013-05-07T19:56:18.957 回答