如何使用 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 比较"谓词变体
您要查找的指令是blendvps
,但是如果您想在每个不符合比较的条目上都有零,您可以简单地使用andps
.
__m256 aIsB = _mm256_cmp_ps( valA, valB, _CMP_EQ_OS );
__m256 same = _mm256_and_ps( valA, aIsB);