模块化计算32位与64位操作系统

时间:2014-04-30 07:52:12

标签: performance cryptography biginteger diffie-hellman modular-arithmetic

我不了解CPU规格如何影响性能。我正在运行一个应用程序,在Windows平台上使用以下参数执行模块化计算(DH Key Exchange):

模块化:素数= 4096位

发电机:2

指数:256位

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

我试图理解,但我对模块化计算速度是否受ARM大小或CPU支持(64位与32位)的影响感到困惑

1 个答案:

答案 0 :(得分:2)

64位CPU在大整数运算时明显比32位CPU快得多。我的经验是使用相同代码的因子2和使用专门代码的因子4。

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

    AMD64(64位)CPU具有更大的寄存器,与x86(32位)CPU相比更多。因此,这些中间值适合单个寄存器,编译器不需要将两个32位寄存器拼接在一起,以便在c中显示64位整数。额外的寄存器意味着您需要更少地使用堆栈。

    这样可以在32位模式下将这些代码的性能提高到同一CPU的两倍。

  • 另一个重要的区别是AMD64(64位)支持64x64-> 128位乘法,而x86(32位)仅支持32x32-> 64位乘法。这个大倍数的成本大约是原来的两倍,但却是4倍。

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