SSE指令需要数据对齐

Posted

技术标签:

【中文标题】SSE指令需要数据对齐【英文标题】:SSE instruction need the data aligned 【发布时间】:2012-07-02 17:18:59 【问题描述】:

数据是否必须为 16 字节对齐,以便 SSE 指令可以处理它而不会出现分段错误?我尝试的编译器是带有选项-msse2 的gcc。我想使用 _mm_cmpgt_epi32 来比较一个大的 int 数组。我发现除了下标为4的倍数的位置外,它不能在数组的任何位置执行。

【问题讨论】:

【参考方案1】:

是的,当您向/从 SSE 寄存器加载和存储数据时,它需要 16 字节对齐,除非您使用加载/存储指令的未对齐版本,例如_mm_loadu_si128/_mm_storeu_si128。但是,使用这些未对齐的加载/存储指令通常会降低性能,因此通常会尝试始终确保正确的数据对齐,并且仅将未对齐的加载/存储用作最后的手段。

【讨论】:

以上是关于SSE指令需要数据对齐的主要内容,如果未能解决你的问题,请参考以下文章

C/C++获得对齐的内存的跨平台解决方案

C++ SSE:存储到数组后的未定义行为

使用带有自定义对齐分配器实现的最新 g++ 使用 SSE 和 -O3 选项编译时出现非法指令(核心转储)

SSE 向量重新对齐?

SSE向量化与内存对齐的关系

OpenCV 中的 Mat 矩阵和 SSE 的 16 字节对齐