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 ビットです。たとえば、2 つの 32 ビット整数を乗算すると、64 ビットが得られます。これを加算する必要があり、最終的にシフトして 32 ビット整数に分割します。

    AMD64 (64 ビット) CPU は、x86 (32 ビット) CPU と比較して、より大きなレジスタとより多くのレジスタを備えています。したがって、これらの中間値は 1 つのレジスタに収まり、コンパイラは 2 つの 32 ビット レジスタをつなぎ合わせて c で 64 ビット整数の外観を与える必要はありません。追加のレジスターは、スタックを操作する必要が少なくなることを意味します。

    これにより、このようなコードのパフォーマンスは、32 ビット モードの同じ CPU よりも約 2 倍向上します。

  • もう 1 つの重要な違いは、AMD64 (64 ビット) は 64x64->128 ビットの乗算をサポートし、x86 (32 ビット) は 32x32->64 ビットの乗算のみをサポートすることです。この大きな乗算は、約 2 倍のコストがかかりますが、4 倍になります。

    これにより、中間値を保持するために 128 ビット整数を使用するコードを記述した場合、さらに 2 倍の速度向上が得られます。

于 2014-04-30T10:57:48.013 に答える