0

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

模块化:素数 = 4096 位

发电机:2

指数:256 位

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

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

4

1 回答 1

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 的加速。

于 2014-04-30T10:57:48.013 回答