SSE / AVX用にアラインされたメモリが必要なのはなぜですか?
私がよく受ける答えの1つは、アラインされたメモリのロードは、アラインされていないメモリのロードよりもはるかに高速であるということです。それでは、なぜこの整列されたメモリのロードは、整列されていないメモリのロードよりもはるかに速いのですか?
これは、SSE(またはx86)に固有のものではありません。ほとんどのアーキテクチャでは、ロードとストアを自然に調整する必要があります。そうしないと、(a)例外が生成されるか、(b)2つ以上のサイクルに加えて、調整されていないロード/ストアを透過的に処理するための修正が必要になります。x86では、(b)16バイト未満のデータ型に当てはまりますが、(a)SSEデータ型に当てはまります。ただし、誤ったデータを処理できるロード/ストア命令の誤ったバージョンを明示的に使用する場合を除きます。
不思議に思うかもしれませんが、アライメントに関係なく、これらのSSEロード/ストア命令のアライメントがずれているバージョンを使用しないのはなぜですか?答えは、これらの命令は通常、上記の(b)のように動作するため、整列された対応する命令よりもはるかに遅いため、ペナルティがはるかに小さいCorei7などの最近のIntelCPUを除けば、通常は2倍以上遅くなります。 、しかし重要ではありません。