如何有效地求和SSE 128位浮点寄存器的所有元素?

时间:2019-10-04 10:48:06

标签: c++ sum sse avx

我具有以下C ++函数,该函数对SSE 128位浮点寄存器的所有元素求和。基本上,我只使用下面的代码做两个水平加法:

float sum4(__m128 x) {
        const __m128 hsum_0 = _mm_hadd_ps(x, x);
        const __m128 hsum_1 = _mm_hadd_ps(x, x);
        return _mm_cvtss_f32(hsum_1);
}

这是对128位SSE寄存器的所有元素求和的最有效方法吗?我之所以这样问,是因为我读到应该避免对密集处理(http://wiki.ros.org/PatrickMihelich/pcl_simd#Horizontal_or_vertical.3F)进行水平操作,因此,如果我在程序执行期间多次调用sum4(),性能将受到严重损害。

谢谢所有的帮助!

0 个答案:

没有答案