x86 AVX 中有聚合操作吗?

问题描述 投票:0回答:1

我正在尝试编写一个简单的游戏,我需要研究一些用于向量运算的 x86 汇编。使用xmm作为4压缩单精度浮点,是否有聚合运算?如:

“MAXPS”计算 4 fp32 的最大值。 (用于切比雪夫距离等)

“SUMPS”计算 4 个 fp32 的总和。 (用于点积或矢量幅度)

assembly x86-64 sse avx reduction
1个回答
0
投票

一种获取 SSE 向量的最大浮点值的非循环、非分支方法如下所示。

inline float _mm_hmax_ps(__m128 arg) {
  // Returns the maximum 32 bit float value in arg.
  // Requires SSE.
  float res;
  __m128 temp, temp2;
  temp = _mm_shuffle_ps(arg, arg, 78);  // 78 = 01001110b
  temp = _mm_max_ps(arg, temp);
  temp2 = _mm_shuffle_ps(temp, temp, 165); // 165 = 10100101b
  temp2 = _mm_max_ps(temp2, temp);
  _mm_store_ps1(&res, temp2);
  return res;
}
© www.soinside.com 2019 - 2024. All rights reserved.