我使用 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()
内在对齐?
最佳答案
即使存在 mulps reg,mem
指令形式,也不存在 _mm_mul_ps(reg,mem)
形式 - https://msdn.microsoft.com/en-us/library/22kbk6t9(v=vs.90).aspx
您可以做的是_mm_mul_ps(reg,_mm_load_ps(mem))
,它与用两行编写完全相同。
您可以使用_mm_load_ps
和_mm_loadu_ps
来指定是否希望数据对齐。顺便说一句,从 Haswell 微架构开始对对齐数据进行未对齐加载不会受到任何惩罚。
另一方面,编译器应该足够聪明,能够确定是先进行加载再进行乘法,还是从内存中进行乘法会更好。
在某些情况下,提前进行加载以改进软件流水线可能是有意义的,但通常这将是下一个优化级别。
关于x86 - 如何使用 _mm_mul_ps 指定对齐方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31315892/