2009-06-07 12 views
4

Masonthe advantages of a 64-bit processorについて尋ねられます。64ビットおよびメモリ帯域幅

まあ、明らかな欠点は、あなたの周りに多くのビットを移動する必要があることです。最近、メモリアクセスが深刻な問題であることを考えると、かなりの数の操作で約2倍のメモリを移動することは良いことではありません。

しかし、これは実際にどのように悪いのですか?そしてそれを補うものは何ですか?または、32ビットマシンですべての小さなアプリケーションを実行する必要がありますか?

メインメモリへの帯域幅が同じでどちらのモードでもので、私は、特に、私が検討していることを1が同じマシン上で32ビットまたは64ビットを実行しているの選択肢を持っている場合を言及する必要があります。

[1]:そして、でも15年前に、そのことについては。私は、良いキャッシュの挙動、特にすべてのベンチマークを獲得したAlpha CPUが巨大な、8 MBのL2キャッシュを持っていたという話を覚えています。

答えて

3

ほとんどの64ビットプログラミング環境では、 "LP64"モデルが使用されています。つまり、ポインターとlong int変数(C/C++プログラマーの場合)は64ビットです。あなたが「ILP64」モデルに入っていない限り、整数(ints)は32ビットのままです。これはまれです。

ほとんどのint変数がsize_tのような目的で使用されていないため、つまり32ビットで快適に保持されるためです。その性質の変数については、あなたはその違いを知ることができません。

あなたはデータの> 4ギガバイトで、数値やデータが重い仕事をしている場合は、とにかく64ビットが必要になります。もしあなたがそうでなければ、あなたはlongを使用する習慣がない限り、違いを気付かないでしょう。ここではほとんどがintを使用します。

2

ここでは間違った前提で始めていると思います。あなたは言う:

は は良いこと

することができない業務のかなりの数のために多くのメモリ として二回動き回ると尋ねている最初の質問は「なぜ」?真の64ビットマシンでは、データパスは64ビット幅であるため、64ビットの移動は32ビットマシン上で32ビットを移動するのと同じくらい多くのサイクルを正確に(最初の近似まで)費やします。したがって、128バイトを移動する必要がある場合は、32ビットマシンで実行するサイクルの半分の時間がかかります。あなたのアプリは64ビットがそれがない計算の種類に大きく依存する必要がありますかどうか

+6

メモリバスは、プロセッサが64ビットのレジスタとアドレス空間を持っていたよりもはるかに長く32ビットより広くなっています。アプリケーションを64ビットにするという実際のペナルティは、必要なサイズの2倍になるようにすべてのポインタを用意することから来て、効果的にキャッシュサイズを半減させます。 – user57368

+2

はい、何が起こりますか?バスを使用するには、CPUを複数回ラッチする必要があります。 64ビット・チップのキャッシュも同様に大きくなる傾向があります。私はここに本当の問題があるという概念を検証するための実証的なデータを見たいと思っています。 –

+0

質問を編集しました。 32ビットまたは64ビットモードを選択した場合と同じハードウェアの場合を考えてみましょう。メモリ帯域幅は同じです。 32ビットモードでは、キャッシュラインあたり2倍のintがロードされます。 –

9

。非常に大きなデータセットを処理する必要がある場合は、明らかに64ビットのポインタが必要です。そうでない場合は、アプリが算術演算やメモリアクセスを行うのに比較的長い時間を費やすかどうかを知る必要があります。 x86-64では、汎用レジスタは2倍の幅であるだけでなく、2倍の数であり、より汎用的なレジスタです。つまり、64ビットコードの方がはるかに優れた整数演算性能を持つことができます。ただし、コードに余分なレジスタスペースが必要ない場合は、キャッシュの有効性が向上するため、ポインタとデータを小さくするとパフォーマンスが向上します。あなたのアプリケーションが浮動小数点演算によって支配されている場合、おそらくメモリアクセスの大部分がワイドベクトルのためであり、余分なSSEレジスタを持たせることは助けになるので、32ビットにするのはあまり意味がありません。

関連する問題