2008-08-18 9 views
10

私は、.NETJITであることを知っています。これは、アプリケーションの実行直前に実行しているアーキテクチャにコンパイルされていますが、JITコンパイラは64ビットアーキテクチャに最適化されていますか?64bit .NETパフォーマンスチューニング

64bit systemで実行されるアプリをプログラミングする際に、何か検討や検討が必要なことはありますか? (つまり、Int64を使用するとパフォーマンスが向上し、JITコンパイラは自動的に32ビットシステムでInt64を動作させますか?)

答えて

14

64bit JIT is differentから32bitのものがあるので、私は出力にいくつかの違いがあると思いますが、64bitに切り替えることはできません.CPUには速度はあまりありません64ビットに切り替えることで

あなたのアプリが大量のメモリを使い、PCに十分なRAMがあれば大きなパフォーマンスが向上します。私は、32ビット.NETアプリケーションは1.6ギガバイト使用時にメモリ例外をスローする傾向があることを発見しましたが、その前にはpagingでディスクをスラッシュし始めます。

ボトルネックがCPUの場合は、基本的には64ビットが役に立たないでしょう。あなたのボトルネックがメモリの場合、大きな改善が見られるはずです。

は、パフォーマンスを向上させるInt64型を使用し、JITコンパイラが自動的に32ビットシステム上でInt64の作業を行います

ます

Int64のは、すでに両方の32ビットと64ビットのシステム上で動作しますが、それは64ビットに速く実行されています。だから、主にInt64で数値処理をしているのなら、64ビットシステムで実行すれば助けになるはずです。

最も重要なことは、measureのパフォーマンスです。

0

パフォーマンスのボトルネックは、アーキテクチャが32ビットか64ビットかにかかわらず同じです。パフォーマンスの問題は準最適なアルゴリズムの結果である傾向があります— 32ビットと64ビットの間の選択はパフォーマンスに大きな影響を与えません。

最も重要なことに、測定する前に何かのパフォーマンスを向上させようとしないでください。特に、コードのプロファイルを作成して、パフォーマンスのボトルネックがどこにあるかを判断する必要があります。

9

Thisは、64ビットJITで作業していた人物の1人で、この件に関する良い記事です。基本的に、64ビットが提供できるアドレス空間が絶対に必要な場合や、64ビット演算を行う必要がある場合を除き、パフォーマンスが低下する可能性があります。ポインタが大きいほど、キャッシュは効果的に半分になります。

6

私は、64ビットがかなり遅いことに気づきました。

前述のように、64ビットJITコンパイラはx86 JITコンパイラとは動作が異なります。 x86コンパイラは、x64コンパイラではない最適化を利用します。

たとえば、.NET 3.5では、32ビットJITは構造体を引数としてインライン関数呼び出しを行いますが、64ビットJITではそうではありません。私はx86のを見てきた生産コードで

はx64のは

3

を要約すると(他の変更を)構築するよりも20%ほど速く動作して構築し、

  1. あなたが必要な場合にのみ、64ビットを使用します余分なメモリとそれの周りに方法はありません。
  2. 科学的なアプリケーションであり、数学的精度が向上する必要があります。

これ以外の面でも、今日の時点では、.NETの64ビットコンパイラは一歩下がっています。

.NETコンパイラで実行されるパフォーマンスの最適化は大きな問題です。

関連する問題