什么更有效,为什么?
具体为_mm_loadu_si128
与C中的_mm_load_si128
(编者注:或者这是标记的汇编,可能在手写的asm中意味着movdqu
与movdqa
。这是不是相同的东西,尤其是没有AVX,因为_mm_load_si128
可以编译成ALU指令的内存操作数,而根本没有单独的movdqa
。)
答案 0 :(得分:6)
loadu
用于未对齐的加载(来自未对齐到16字节倍数的地址),load
用于对齐的加载。如果您知道源地址已正确对齐,则load
通常会更有效,因为它只需要一个读取周期,而不必处理修复多个未对齐数据块。在较旧的Intel CPU上,未对齐负载的性能损失非常显着(通常> 2x),但在更新的CPU(例如Core i5 / i7)上,惩罚几乎可以忽略不计。请注意,除了上述性能损失之外,使用loadu
对齐数据是正常的,但使用带有未对齐数据的load
将产生异常(即崩溃)。