SIMD(AVX):如何通过运行时计算的掩码 'blend' 浮动?
SIMD (AVX): how to 'blend' floats via runtime-computed mask?
如何使用 AVX 内在函数有条件地保持 `equal floats?
我有
__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
我应该使用其他功能吗?
Documentation:
"AVX compare" predicate variants
如何使用 AVX 内在函数有条件地保持 `equal floats?
我有
__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
我应该使用其他功能吗?
Documentation:
"AVX compare" predicate variants