是否有任何单个指令或函数可以反转符号__m128 内的每个浮点数?
IE。a = r0:r1:r2:r3 ===> a = -r0:-r1:-r2:-r3
?
我知道这可以通过_mm_sub_ps(_mm_set1_ps(0.0),a)
,但它不是可能很慢吗?_mm_set1_ps(0.0)
是多指令函数吗?
实际上,您的编译器应该能够很好地生成 0.0.0 的常量向量。它可能只会使用_mm_xor_ps
,如果您的代码处于循环中,则无论如何它都应该将常量生成提升到循环之外。所以,最重要的是,使用你最初的想法:
v = _mm_sub_ps(_mm_set1_ps(0.0), v);
或者另一个常见的技巧,那就是:
v = _mm_xor_ps(v, _mm_set1_ps(-0.0));
它只是翻转符号位而不是进行减法(不像第一种方法那么安全,因为它不能对 NaN 做正确的事情,但在某些情况下可能更有效)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)