4

メイソンは、64ビットプロセッサの利点について質問しました。

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

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

特に、同じマシンで32ビットまたは64ビットを実行することを選択できる場合を検討しているので、どちらのモードでもメインメモリへの帯域幅は同じです。

[1]:そして15年前でさえ、そのことについては。良いキャッシュの振る舞いについて、そして特にすべてのベンチマークを勝ち取ったAlpha CPUには、当時8MBの巨大なL2キャッシュがあったことについて話したのを覚えています。

4

3 に答える 3

9

アプリを64ビットにするかどうかは、アプリが実行する計算の種類に大きく依存します。非常に大きなデータセットを処理する必要がある場合は、明らかに64ビットポインターが必要です。そうでない場合は、アプリが算術アクセスまたはメモリアクセスに比較的多くの時間を費やしているかどうかを知る必要があります。x86-64では、汎用レジスタは2倍の幅であるだけでなく、2倍の数があり、より「汎用」です。これは、64ビットコードの整数演算のパフォーマンスが大幅に向上する可能性があることを意味します。ただし、コードに追加のレジスタスペースが必要ない場合は、キャッシュの効率が向上するため、小さいポインタとデータを使用するとパフォーマンスが向上する可能性があります。アプリが浮動小数点演算に支配されている場合、メモリアクセスのほとんどはとにかくワイドベクトル用であるため、32ビットにすることにはあまり意味がありません。

于 2009-06-07T00:51:49.567 に答える
3

ほとんどの 64 ビット プログラミング環境は「LP64」モデルを使用します。つまり、ポインターとlong int変数 (C/C++ プログラマーの場合) のみが 64 ビットです。整数 ( ints) は、かなり珍しい「ILP64」モデルでない限り、32 ビットのままです。

intほとんどの変数はsize_t- のような目的で使用されていないため、私はそれを取り上げるだけです。その性質の変数の場合、違いを見分けることはできません。

4GB を超えるデータで数値的またはデータ量の多い作業を行っている場合は、とにかく 64 ビットが必要です。longそうでない場合は、ほとんどの人が s を使用する場所で sを使用する習慣がない限り、違いに気付かないでしょうint

于 2009-06-07T02:13:25.813 に答える
2

私はあなたがここで悪い仮定から始めていると思います。あなたは言う:

かなりの数の操作で2倍のメモリを移動するのは良いことではありません

最初の質問は「なぜ」ということです。真の64ビットマシンでは、データパスは64ビット幅であるため、64ビットの移動には、32ビットマシンでの32ビットの移動とまったく同じ数のサイクルが必要です(最初の概算では)。したがって、128バイトを移動する必要がある場合は、32ビットマシンの場合の半分のサイクルが必要です。

于 2009-06-07T00:51:34.840 に答える