5

为什么我们需要为 SSE/AVX 对齐内存?

我经常得到的答案之一是对齐的内存负载比未对齐的内存负载快得多。那么,为什么这种对齐的内存加载比未对齐的内存加载要快得多?

4

1 回答 1

9

这不仅特定于 SSE(甚至 x86)。在大多数架构上,加载和存储需要自然对齐,否则它们要么 (a) 生成异常,要么 (b) 需要两个或更多周期加上一些修复,以便透明地处理未对齐的加载/存储。在 x86 上,(b) 适用于 < 16 字节的数据类型,但 (a) 适用于 SSE 数据类型,除非您明确使用可处理未对齐数据的加载/存储指令的未对齐版本。

您可能想知道:为什么不直接使用这些 SSE 加载/存储指令的未对齐版本而不管对齐方式?答案是这些指令通常比对齐的指令慢得多,因为它们通常按照上述 (b) 的方式运行,这使得它们通常慢 2 倍或更多,除了最近的 Intel CPU,如 Core i7,其惩罚要小得多,但并非无足轻重。

于 2013-02-12T00:32:25.070 回答