【发布时间】:2023-03-24 23:30:02
【问题描述】:
我正在使用内在函数来优化我的程序。但现在我想将 __m128 向量中的四个元素相加,以便将结果与浮点值进行比较。例如,假设我有这个 128 位向量:{a, b c, d}。如何将 a+b+c+d 与 e 进行比较,其中 e 的类型为 float ?
SSE2 或 SSE3 是否提供了一种简单的方法,或者您有任何可以帮助我的代码 sn-p 吗?谢谢!
【问题讨论】:
-
您可以在 SSE3 中使用两个 HADDPS 执行此操作,但这不是很快。这个向量来自哪里?任何计算都可以重新排列,以避免水平加法吗?
-
好吧,我必须比较 (aa + bb) 和 4.0。为此,我将 a 和 b 存储在 __m128 向量中,例如 vec = {a, b, UNUSED, UNUSED}。我通过 square = _mm_mul_ps(vec, vec) 获得 {a², b², X, X}。现在,我正在寻找一种获得 a² + b² 的方法,以便将其与 4.0 进行比较。这当然不是最佳的,所以如果您有任何建议,将不胜感激:)
-
抱歉,我的处理器不支持 SSE4。
-
真遗憾,DPPS 非常适合解决这个问题。好的,我得考虑一下。