我正在使用一个SSE内在函数,其中一个参数作为内存位置(_mm_mul_ps(xmm1,mem)
)。
我怀疑会更快:
xmm1 = _mm_mul_ps(xmm0,mem) // mem is 16 byte aligned
或:
xmm0 = _mm_load_ps(mem);
xmm1 = _mm_mul_ps(xmm1,xmm0);
有没有办法指定与_mm_mul_ps()
内在对齐?
答案 0 :(得分:2)
即使存在_mm_mul_ps(reg,mem)
指令表单,也没有mulps reg,mem
表单 - https://msdn.microsoft.com/en-us/library/22kbk6t9(v=vs.90).aspx
你可以做的是_mm_mul_ps(reg,_mm_load_ps(mem))
,它与用2行编写完全相同。
您可以使用_mm_load_ps
& _mm_loadu_ps
指定您是否希望数据对齐。顺便说一句,从Haswell microarch开始对齐数据进行未对齐加载没有任何代价。
另一方面,编译器应该足够智能,以确定首先执行加载然后再进行乘法,或者从内存中进行乘法运算是否更好。
在某些情况下,提前加载一点以改善软件流水线可能是有意义的,但通常这将是下一级优化。