2

私は複雑なアルゴリズムを 32 ビットから 64 ビットに移植しています。これは、Windows 7 64 ビットを実行している 8GB RAM の Core i5 マシンで計算するのに約 5 時間かかります。

このアプリケーションは .NET 4 をターゲットにしており、ループの約 60% でタスク並列ライブラリを使用し、BigInteger クラスを使用しています。

私は2つの数値範囲を扱っています:

  • 0 から ulong.MaxValue (アルゴの約 50%)。
  • 数十万桁の非常に大きな整数 (アルゴリズムの約 50%)。

これらの数値に対して実行される演算には、加算、減算、乗算、除算、対数、累乗が含まれます。

64 ビットに移植すると、コードをプロファイリングして時間を計ってパフォーマンスの向上を確認できるようになりますが、計算によって推定できるかどうかを知りたいと思っていました。

もしそうなら、同じことを説明するいくつかの記事をお勧めしてください。

4

3 に答える 3

5

何を移植しようとしているのかわかりません(ネイティブコードが混在している場合を除く)。すでに64ビットマシンを使用している場合は、64ビットランタイムをターゲットにしていることを確認してください(デフォルトのAnyCPUがそれを実行します)。

具体的なパフォーマンスの向上は、アルゴリズムの性質によって異なります。桁違いの測定値については、を参照してください。

なぜこれは32ビットより64ビットで速いのですか?

あなたが見ることができる最も良いケースは2倍ですが、実際の改善はそれよりも大幅に少ない可能性があります。

一方、64ビットコードはより多くのメモリを消費します(アドレスは64ビットです)。JITされたコードに必要なメモリが増加したために、64ビットに移行すると、スワップを開始する必要が生じた場合、全体的なパフォーマンスが低下する可能性があります。

于 2012-07-31T00:08:53.803 に答える
2

アムダールの法則によると、最大速度が 1.33 倍になります。32 ビットから 64 ビットに移行するとほぼ正確に 2 倍のパフォーマンスが得られるようなアプリケーション (ビットボード チェス エンジンなど) がありますが、それはほとんどすべてのデータが 64 ビットであり、ビット演算を使用して操作される場合です。具体的な詳細なしに言うのは難しいですが、あなたの場合はおそらく予測された要因よりも少ないでしょう.

于 2012-07-31T00:08:17.407 に答える
0

私は、試して測定することが唯一の合理的なアプローチだと思います。特に、少なくとも部分的なコードの書き直しを想定している「移植... 32〜64ビット」であるため、パフォーマンスの数値に関するガイダンスを提供することは非常に困難です。

x64コードとデータは、ポインターが長いために少し多くのスペースを必要としますが、アドレススペースが大幅に大きくなります。したがって、コードによっては、あらゆる方向でパフォーマンスが変化する可能性があります。

于 2012-07-31T00:14:25.753 に答える