C gpu上的大整数乘法和加法

C gpu上的大整数乘法和加法,c,algorithm,cuda,C,Algorithm,Cuda,我正在GPU上开发加密算法。这个算法需要非常大的整数的加法和乘法。这些数字的位长度估计为150000位或更多。这些数字的位长度不同。什么算法可以用来执行这些数字的加法和乘法?请告诉我你的情况。谢谢。大整数加法相对简单:Jackolanten已经提供了该帖子的链接。基本上,它只是通过并行前缀和进行进位传播 对于CUDA上的大整数乘法,我想到了两种方法: 将整数转换为RNS剩余数系统:然后乘法和加法可以并行进行,只要RNS基数足够大。当您需要比较数字时,可以将其转换为混合基数系统,请参见,例如。最后

我正在GPU上开发加密算法。这个算法需要非常大的整数的加法和乘法。这些数字的位长度估计为150000位或更多。这些数字的位长度不同。什么算法可以用来执行这些数字的加法和乘法?请告诉我你的情况。谢谢。

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

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

将整数转换为RNS剩余数系统:然后乘法和加法可以并行进行,只要RNS基数足够大。当您需要比较数字时,可以将其转换为混合基数系统,请参见,例如。最后,您可以使用CRT中文余数将数字转换回位置数字系统

直接使用FFT实现大整数乘法,因为乘法可以被视为150kb序列的非循环卷积,它的长度对于FFT来说并不多,但已经可以给您一些加速。GNU MP仍然从1Mbit甚至更大的比特开始切换到FFT乘法例程。同样,对于通过FFT进行乘法,有两个选项:

使用浮点双精度FFT并将大整数位编码为尾数,更易于实现

在有限域上使用所谓的数论变换FFT


不管怎样,这些事情背后有很多理论。你也可以查我的论文。但是也有很多关于这个主题的研究论文,特别是在密码学领域。

请查看。但也许更重要的是,试着找到一个你想要的加密算法的实现,这个算法已经过很好的测试。实现自己的可能会导致安全问题。我在CPU上使用了MPIR lib的指令,没有问题,但GPU不允许使用这些指令。我使用VS2010和CUDA 5.5。这两个库在GPU上运行时的指令有什么不同吗?也许你想要这样:CUMP对浮点数进行操作,但我想要一个对整数进行操作的库。非常感谢您的帮助。如需补充,该帖子可能会有所帮助。