数据必须是16字节对齐的,以便SSE指令可以处理它而不会出现分段错误吗?我尝试的编译器是带有选项-msse2
的gcc。我想用_mm_cmpgt_epi32
比较一个大的int数组。我发现它不能在数组的任何位置执行,除了下标为4的倍数的位置。
答案 0 :(得分:6)
是的,当您向/从SSE寄存器加载和存储数据时,它需要16字节对齐,除非您使用加载/存储指令的未对齐版本,例如_mm_loadu_si128
/ _mm_storeu_si128
。然而,使用这些未对齐的加载/存储指令通常会有性能损失,因此通常会尝试始终确保正确的数据对齐,并且仅使用未对齐的加载/存储作为最后的手段。