SIMD(AVX):如何通过运行时计算的掩码“混合”浮动?

时间:2019-08-20 12:33:18

标签: sse simd avx

如何使用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

1 个答案:

答案 0 :(得分:3)

您要查找的指令是blendvps,但是如果您希望每个不满足比较要求的条目都为零,则只需使用andps

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