在AVX中查找绝对值



在其中一个解决方案中,他/她发现AVX矢量的abs(inp(

__m256 sign_bit=_mm256_set1_ps(-0.0f(;__m256 inp_abs=_mm256-andnot_ps(sign_bit,inp(;

这背后的逻辑是什么?。

SSE/AVX:根据每个元素的最小和最大绝对值,从两个__m256浮动矢量中进行选择

IEEE 754表示带有符号位、有效位和指数的浮点数。符号位设置为负数,清除为正数。所以绝对值可以通过简单地清除数字的符号位来计算。

数字-0.0f的有效位幅度和指数都是零位和负号,因此其二进制表示将设置符号位,并清除所有其他位。因此,它可以用作符号位的掩码。_mm256_set1_ps内在向256位矢量sign_bit的所有元素广播这个32位值,而_mm256_andnot_ps(sign_bit, inp)计算inpsign_bit的NOT的逐位and,即inp & ~sign_bit,这有效地清除了每个元素的符号位,并且不改变任何其他内容。

最新更新