我正在尝试在OpenCL中计算a mod b
,其中a
是ulong
元素的数组,并且是b
长度的两倍。
__kernel void mod(__global ulong *a, __global ulong *b, __global ulong length) {
// length = len(a) = 2 * len(b)
...
}
我想要的是a %= b
,但是有数组。数组当然代表数字,最后一个元素代表最低有效位。
是否可以就地执行此操作(即无需分配额外内存)?计算大数的中位数的好算法是什么?
请注意,这两个数字都不能以其他方式轻松表示(例如使用指数)。大多数时候它们都是伪赝品。此外,有一些并发性会很好。
欢迎指出任何有用的材料。
编辑:如果有帮助,可以在编译时知道length
。
编辑:对不起,我不清楚这里。我没有处理整数数组,我正在处理两个大整数,例如a
是8Mb( 67108864位数字)并且b
是4Mb( 33554432位数字)。我在base 2 ^ 64中使用它们,因此ulong
整数的数组。基本上,这些只是数字的数字。
答案 0 :(得分:0)
你这样做:
__kernel void mod(__global ulong *a, __global ulong *b, __global ulong length) {
ulong id = get_global_id(0) ;
a[id] = a[id] % b[id];
}
我真的不明白你的问题,数组大小不同?或者你想要一个更特殊的计算?