gpu上的大整数乘法和加法

时间:2014-10-21 06:56:38

标签: c algorithm cuda

我正在GPU上开发加密算法。该算法需要非常大的整数的加法和乘法。这些数字的位长估计为150,000位或更多。这些数字具有不同的位长。可以使用哪些算法来执行这些数字的加法和乘法运算?请把你的信息告诉我。谢谢。

1 个答案:

答案 0 :(得分:2)

大整数添加相对简单:JackOLantern已经提供了帖子的链接。基本上它只是通过并行前缀和进行传输传播。

对于CUDA上的大整数乘法,我想到了两种方法:

  • 将整数转换为RNS(残差数系统):然后乘法和加法可以并行完成(只要RNS基数足够大)。每当您需要比较数字时,您可以将它们转换为混合基数系统(例如,参见How to Convert from a Residual Number System to a Mixed Radix System?)。最后,您可以使用CRT(Chinese Remaindering)将数字转换回位置编号系统

  • 直接使用FFT实现大整数乘法,因为乘法可以看作是序列的非循环卷积(150Kbits长度对FFT来说不是那么多,但已经可以给你一些加速)。仍然GNU MP从1Mbit甚至更多开始切换到FFT乘法例程。再次通过FFT进行乘法有两种选择:

    1. 使用浮点双精度FFT并将大整数位编码为尾数(更容易实现)

    2. 使用所谓的数字理论变换(有限域上的FFT)

无论如何,这些事情背后有一堆理论。您也可以在FFT mul in CUDA上查看我的论文。但是也有很多关于这个主题的研究论文,特别是在密码学领域。