OpenCL模数的大数

时间:2011-07-05 10:49:17

标签: math opencl modulo

我正在尝试在OpenCL中计算a mod b,其中aulong元素的数组,并且是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整数的数组。基本上,这些只是数字的数字。

1 个答案:

答案 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];
}

我真的不明白你的问题,数组大小不同?或者你想要一个更特殊的计算?