【发布时间】:2012-07-02 17:18:59
【问题描述】:
数据是否必须为 16 字节对齐,以便 SSE 指令可以处理它而不会出现分段错误?我尝试的编译器是带有选项-msse2 的gcc。我想使用 _mm_cmpgt_epi32 来比较一个大的 int 数组。我发现除了下标为4的倍数的位置外,它不能在数组的任何位置执行。
【问题讨论】:
数据是否必须为 16 字节对齐,以便 SSE 指令可以处理它而不会出现分段错误?我尝试的编译器是带有选项-msse2 的gcc。我想使用 _mm_cmpgt_epi32 来比较一个大的 int 数组。我发现除了下标为4的倍数的位置外,它不能在数组的任何位置执行。
【问题讨论】:
是的,当您向/从 SSE 寄存器加载和存储数据时,它需要 16 字节对齐,除非您使用加载/存储指令的未对齐版本,例如_mm_loadu_si128/_mm_storeu_si128。但是,使用这些未对齐的加载/存储指令通常会降低性能,因此通常会尝试始终确保正确的数据对齐,并且仅将未对齐的加载/存储用作最后的手段。
【讨论】: