我具有以下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(),性能将受到严重损害。
谢谢所有的帮助!