use*_*626 3 floating-point ieee-754 avx absolute-value avx2
在其中一个解决方案中,他/她发现AVX 向量的abs(inp)为,
__m256 符号位 = _mm256_set1_ps(-0.0f); __m256 inp_abs = _mm256_andnot_ps(sign_bit, inp);
其背后的逻辑是什么?
IEEE 754表示带有符号位、有效数和指数的浮点数。符号位设置为负数,清除为正数。因此,只需清除数字的符号位即可计算绝对值。
该数字-0.0f具有全位为零的有效数大小和指数以及负号,因此其二进制表示形式将设置符号位并清除所有其他位。因此它可以用作符号位的掩码。内在函数_mm256_set1_ps将此 32 位值广播到 256 位向量 的所有元素sign_bit,并_mm256_andnot_ps(sign_bit, inp)计算 的按位inp与 与 的 NOT sign_bit,即inp & ~sign_bit,这有效地清除了每个元素的符号位,并且不会更改任何其他内容。