SSE矢量化与记忆对齐的关系

ved*_*eda 5 sse simd

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

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

Pau*_*l R 9

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

您可能想知道:为什么不使用这些SSE加载/存储指令的未对齐版本而不管对齐?答案是这些指令通常比它们的对齐指令要慢得多,因为它们通常表现为上面的(b),这使得它们通常比2x或更慢,除了最近的Intel CPU,如Core i7,其中惩罚要小得多,但不是微不足道的.

  • 请记住,即使在未对齐访问通常很快的现代核心上,页面交叉访问仍然非常慢.如果您的缓冲区足够大并且未对齐,则它将包含页面交叉. (2认同)