0

我缺乏关于性能如何受CPU规格影响的知识。我运行的应用程序使用以下参数在Windows平台上进行模块化计算(DH密钥交换):模块化计算32位与64位操作系统

模块化:质数= 4096位

发生器:2

指数:256位

当应用程序在带有2.4 GHz处理器和4G RAM的32位Windows 7上运行时,需要3-4秒。但是,当我在64位Windows 7上以相同的处理器速度和8G RAM运行相同的应用程序时,需要1-2秒。

我试图理解,但是否模块化运算速度是由ARM大小或CPU的支持影响我弄糊涂了(64位VS 32位)

回答

2

64个CPU是显著快于大整数算术比32位CPU。我的经验是具有相同代码的因素2和具有专门代码的因素4。

  • 在用x86编写的代码中,许多中间值有64位。例如,如果将两个32位整数相乘,则会得到64位,然后需要添加,最后移位为32位整数。

    与x86(32位)CPU相比,AMD64(64位)CPU具有更大的寄存器,并且它们更多。因此,这些中间值适合于单个寄存器,编译器不需要将两个32位寄存器缝合在一起以给出c中64位整数的外观。额外的寄存器意味着你需要更少地使用堆栈。

    这改善了这种代码在32位模式下相同CPU的性能。另一个重要的区别是AMD64(64位)支持64x64-> 128位乘法,而x86(32位)仅支持32x32-> 64位乘法。这个大的倍增大约是价格的两倍,但却是4倍。

    如果您编写使用128位整数保存中间值的代码,则会导致另一个因子2加速。

+0

感谢您的回答,我想知道RAM的大小在模块化计算中是否起作用,因为我使用的是BigInteger数据类型。 – user3019794

+0

RAM的大小并不重要。你可以用几千字节的RAM做这些计算。 – CodesInChaos

相关问题