如何指定与_mm_mul_ps的对齐方式

时间:2015-07-09 11:19:02

标签: x86 sse simd memory-alignment intrinsics

我正在使用一个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()内在对齐?

1 个答案:

答案 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开始对齐数据进行未对齐加载没有任何代价。

另一方面,编译器应该足够智能,以确定首先执行加载然后再进行乘法,或者从内存中进行乘法运算是否更好。

在某些情况下,提前加载一点以改善软件流水线可能是有意义的,但通常这将是下一级优化。