loadu和load之间有什么区别?

时间:2013-04-12 06:15:33

标签: assembly x86 sse simd intrinsics

什么更有效,为什么?

具体为_mm_loadu_si128与C中的_mm_load_si128

(编者注:或者这是标记的汇编,可能在手写的asm中意味着movdqumovdqa。这是不是相同的东西,尤其是没有AVX,因为_mm_load_si128可以编译成ALU指令的内存操作数,而根本没有单独的movdqa。)

1 个答案:

答案 0 :(得分:6)

loadu用于未对齐的加载(来自未对齐到16字节倍数的地址),load用于对齐的加载。如果您知道源地址已正确对齐,则load通常会更有效,因为它只需要一个读取周期,而不必处理修复多个未对齐数据块。在较旧的Intel CPU上,未对齐负载的性能损失非常显着(通常> 2x),但在更新的CPU(例如Core i5 / i7)上,惩罚几乎可以忽略不计。请注意,除了上述性能损失之外,使用loadu对齐数据是正常的,但使用带有未对齐数据的load将产生异常(即崩溃)。