首页 > 解决方案 > 如何有效地求和 SSE 128 位浮点寄存器的所有元素?

问题描述

我有以下 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#Horizo ​​ntal_or_vertical.3F ),所以如果我通过程序执行多次调用 sum4()时间性能会受到很大的损害。

提前感谢所有帮助!

标签: c++sumsseavx

解决方案


推荐阅读