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

Performance 32位与64位操作系统的模块化计算,performance,cryptography,biginteger,diffie-hellman,modular-arithmetic,Performance,Cryptography,Biginteger,Diffie Hellman,Modular Arithmetic,我不知道CPU规格如何影响性能。我正在运行一个应用程序,在Windows平台上使用以下参数执行模块化计算(DH密钥交换): 模化:素数=4096位 发电机:2 指数:256位 当应用程序在32位Windows7上运行时,使用2.4GHz处理器和4G RAM,需要3-4秒。但是,当我在64位Windows7上以相同的处理器速度和8G RAM运行相同的应用程序时,需要1-2秒 我试图理解,但我搞不清楚模块化计算速度是否受ARM大小或CPU支持(64位与32位)的影响。64位CPU在大整数运算中比32

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

模化:素数=4096位

发电机:2

指数:256位

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


我试图理解,但我搞不清楚模块化计算速度是否受ARM大小或CPU支持(64位与32位)的影响。

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位乘法。这个大的乘法大约是两倍的昂贵,但却是四倍的

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


感谢您的回答,我想知道在模块化计算中RAM的大小是否重要,因为我使用的是BigInteger数据类型。RAM的大小并不重要。您可以使用几千字节的RAM进行这些计算。很抱歉对一个旧的答案进行了评论,但我不清楚这种计算性能是由于CPU为64位,还是由于AMD64 CPU具有更大的寄存器?