在AVX中找到绝对值

问题描述

在一种解决方案中,他/她为AVX向量找到了 abs(inp)

__ m256 sign_bit = _mm256_set1_ps(-0.0f); __m256 inp_abs = _mm256_andnot_ps(sign_bit,inp);

其背后的逻辑是什么?

SSE/AVX: Choose from two __m256 float vectors based on per-element min and max absolute value

解决方法

IEEE 754表示具有符号位,有效数和指数的浮点数。符号位设置为负数,清除为正数。因此,只需清除数字的符号位即可计算绝对值。

数字-0.0f的有效位数和指数均为全零位,并且为负号,因此其二进制表示形式将设置符号位,并将所有其他位清除。因此,它可用作符号位的掩码。 _mm256_set1_ps内在函数将此32位值广播到256位向量sign_bit的所有元素,而_mm256_andnot_ps(sign_bit,inp)用{的NOT来计算inp的按位与。 {1}},即sign_bit,可以有效清除每个元素的符号位,并且不进行其他任何更改。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...