0

ワード境界でビット演算を行う利点はありますか? その際のCPUまたはメモリの最適化はありますか?

実際の問題: 2 つの構造の XOR を作成しようとしています。構造 1 と構造 2 の両方が同じサイズの 10000 バイトであるとします。最初の数百バイトはそのままにして、1 と 2 の XOR を開始します。まず 302 から開始するとします。これは一度に 4 バイトを使用し、XOR を実行します。両方の構造の 302、303、304、および 305 が XOR されます。このサイクルは 10000 まで繰り返されます。

さて、304から始めると、パフォーマンスの向上は期待できますか?

4

3 に答える 3

4

はい、適切な配置を使用することには、少なくとも 2 つの利点があります。

  1. 携帯性。すべてのプロセッサが非整列数をサポートしているわけではありません。移植性を最大限に高めるには、完全に整列された (つまり、N の倍数であるアドレスで始まる N バイトの整数) 数値のみを使用する必要があります。
  2. スピード。私の知る限り、整列されていない数値をサポートするプロセッサでさえ、整列された数値ではさらに高速です。
于 2009-12-20T07:39:02.480 に答える
3

時期尚早の最適化は諸悪の根源

簡単な方法で実行し、プロファイラーが重要であると判断した場合は最適化します。

はい、適切に配置されていれば、より速く進むことができます。SSE2 ベクトル XOR 命令を使用すると、さらに高速になります。適切に配置されていれば、一度に 16 バイトずつ実行でき、キャッシュを汚染しません。そして、これを最適化することに時間を費やすべきであるという可能性はほとんどありません。

于 2009-12-20T07:05:55.213 に答える
1

一部のプロセッサは、32 ビット ワード境界で 4 バイト操作のみを許可します (ハーフワード境界でのみ許可するプロセッサもあります)。

これらのプロセッサでは、アラインされていないアクセスによってプロセッサ例外が発生し、CPU、OS、および設定によっては、プロセスのクラッシュや OS の大量の作業が発生します。

他のプロセッサ (x86 など) では、1 回の操作で 2 回の読み取りと書き込み (および少しのシフト) を行う必要があるため、パフォーマンスが低下します。

リンク テキストを参照して、ARM CPU の問題を確認してください。

于 2009-12-20T07:43:05.640 に答える