gpt4 book ai didi

c - 如何对 __m128 类型变量中的浮点元素求反(更改符号)?

转载 作者:太空狗 更新时间:2023-10-29 17:15:34 24 4
gpt4 key购买 nike

是否有任何单个指令或函数可以 invert the sign __m128 中的每个 float ?即 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 生成常量 vector 。它可能只使用 _mm_xor_ps,如果您的代码在循环中,它应该无论如何都将常量生成提升到循环之外。所以,归根结底,使用你最初的想法:

v = _mm_sub_ps(_mm_set1_ps(0.0), v);

或另一个常见的技巧,即:

v = _mm_xor_ps(v, _mm_set1_ps(-0.0));

它只是翻转符号位而不是做减法(不像第一种方法那么安全,因为它不能正确处理 NaN,但在某些情况下可能更有效)。

关于c - 如何对 __m128 类型变量中的浮点元素求反(更改符号)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20083997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com