5

x32 と呼ばれる比較的新しい Linux ABIがあり、x86-64 プロセッサは 32 ビット モードで実行されるため、ポインタはまだ 32 ビットのみですが、64 ビット アーキテクチャ固有のレジスタは引き続き使用されます。そのため、通常の 32 ビットと同様に最大メモリ使用量は 4GB に制限されますが、ポインタが使用するキャッシュ スペースは 64 ビットよりも少なく、64 ビット演算を効率的に実行でき、より多くのレジスタにアクセスできます。 (16) バニラ 32 ビット (8) よりも。

ワークロードが 4 GB 以内にうまく収まると仮定すると、x32 のパフォーマンスが x86-64 よりも悪くなる可能性はありますか?

余分なメモリスペースが必要ない場合、何も失われないように思えます-常に同じパフォーマンス(すでにキャッシュに収まる場合)またはそれ以上(ポインタースペースの節約によりキャッシュにより多く収まる場合)を取得する必要があります。 . しかし、ページング/TLB などがあっても驚かないでしょう。私が知らない詳細。

4

2 に答える 2

8

確かに、マルチスレッド プログラムを使用している場合、x32 ではデータ構造が小さいため、スレッド間でキャッシュ ラインの競合が発生する可能性があります。x32 モードでは同じキャッシュ ラインに異なるオブジェクトが割り当てられ、x86_64 モードでは異なるキャッシュ ラインに異なるオブジェクトが割り当てられる可能性があります。2 つのスレッドがこれらのオブジェクトを個別に変更すると、キャッシュのピンポンによって x32 コードの速度が大幅に低下する可能性があります。もちろん、この種のキャッシュ効果はポインターのサイズに関係なく発生する可能性がありますが、コードが 64 ビット ポインターを想定して調整されている場合、32 ビット ポインターに移行すると調整が解除される可能性があります。

于 2012-10-15T20:23:54.763 に答える
2

X32 では、プロセッサは実際には x86_64 と同じモードである「ロング モード」で実行されます。つまり、アドレッシングを行うときにプロセッサから見たアドレスは 64 ビットのままですが、X32 ABI はすべてのアドレスが 32 ビットに収まるほど小さいことを確認します。この結果、ポインターを 32 ビットから 64 ビットにゼロ拡張する必要がある場合に、わずかなオーバーヘッドが生じる場合があります。

また、RAM に x86/x86-64/x32 ライブラリが必要です。これは、実際には最終的にそうなることになると思います (汎用コンピューターではなく、組み込みシステムやその他の厳密に制御されたシステムについて話している場合を除きます)。 X32 の利点の一部をアップします。

于 2012-10-15T21:08:18.997 に答える