Opa*_*pal 0 x86 assembly sse simd intrinsics
什么更有效,为什么?
具体地_mm_loadu_si128与_mm_load_si128在C.
(编者注:或者这是标记的程序集,可能它们意味着movdqu与movdqa手写的asm.这是不一样的,特别是没有AVX,因为_mm_load_si128可以编译成ALU指令的内存操作数而根本没有单独movdqa的.)
loadu用于未对齐的加载(来自未对齐到16字节倍数的地址),load用于对齐的加载.如果您知道源地址已正确对齐,那么load通常会更高效,因为它只需要一个读取周期,而不必处理修复多个未对齐数据块.在较旧的Intel CPU上,未对齐负载的性能损失非常大(通常> 2x),但在最近的CPU(例如Core i5/i7)上,惩罚几乎可以忽略不计.请注意,loadu除了上述性能损失之外,使用对齐数据是正常的,但使用load未对齐的数据将产生异常(即崩溃).