【问题标题】:SIMD (AVX): how to 'blend' floats via runtime-computed mask?SIMD (AVX):如何通过运行时计算的掩码“混合”浮点数?
【发布时间】:2019-12-25 16:17:20
【问题描述】:

如何使用 AVX 内部函数有条件地保持`相等的浮点数?

我有

__m256 valA = .....;
__m256 valB = .....;

__m256 aIsB = _mm256_cmp_ps( valA, valB, _CMP_EQ_OS );

得到这样的面具后,我打算使用

__m256 zeros = _mm256_set1_ps(0.0f)
__m256 same = _mm256_blend_ps(valA, zeros, aIsB);//<--aIsB must actually be imm8

然而_mm256_blend_ps 要求掩码是运行时编译常量。 否则我会以某种方式需要将__m256 转换为imm8

我应该使用其他功能吗?

文档:

_mm256_blend_ps

_mm256_cpm_ps

"AVX compare" predicate variants

【问题讨论】:

    标签: sse simd avx


    【解决方案1】:

    您要查找的指令是blendvps,但如果您希望在每个不满足比较条件的条目处为零,您可以简单地使用andps

    __m256 aIsB = _mm256_cmp_ps( valA, valB, _CMP_EQ_OS );
    __m256 same = _mm256_and_ps( valA, aIsB);
    

    【讨论】:

      猜你喜欢
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 2021-01-24
      相关资源
      最近更新 更多