c++ - 如何有效地求和 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()时间性能会受到很大的损害。
提前感谢所有帮助!
解决方案
推荐阅读
- javascript - 为什么尝试访问单维对象数组作为双数组会更改底层对象
- python - Pandas:如何操作不同组中的两列和分段?
- python - 无法用整数准确地整理列表中的数据
- arrays - (反应)从数组中删除元素
- javascript - React useRef 不更新和呈现新值
- assembly - func call 和 ret 做什么
- javascript - 显示损坏的图像 - 使用 webpack 4
- c# - Selenium C# 获取鼠标坐标下的href
- python-3.x - 如何使用opencv python在图像中找到最小的矩形?
- rust - 如何使用 Bevy 在创建后获取和设置 Window 信息?