【问题标题】:Modular Calculation 32-bit vs 64-bit OS模块化计算 32 位与 64 位操作系统
【发布时间】:2014-04-30 07:52:11
【问题描述】:

我不了解 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 位)影响感到困惑

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回答,由于我使用的是 BigInteger 数据类型,我想知道 RAM 大小在模块化计算中是否重要。
    • RAM 的大小无关紧要。您可以使用几千字节的 RAM 进行这些计算。
    • 很抱歉对旧答案发表评论,但我很困惑这种计算性能是由于 CPU 为 64 位,还是由于 AMD64 CPU 具有更大的寄存器?
    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 2011-12-18
    • 2011-07-06
    • 2011-02-20
    • 2012-09-01
    • 2012-07-26
    相关资源
    最近更新 更多