我正在尝试使用 SSE 内在函数编写相当于 if 语句的内容。
我在用__m128 _mm_cmplt_ps(__m128 a, __m128 b)
进行比较 a 0xffffffff or 0x0
如果比较分别为真或假。我想将这些值转换为 1 和 0。为了做到这一点,实现逻辑“与”是否正确__m128 _mm_and_ps(__m128 c , __m128 d)
, where c
是转换的结果并且d
是,例如,0xffffffff
?
感谢您的关注。
您正在比较以获得1
or a 0
,然后乘以另一个数字。本质上是这样的:
c = (a < b) * d;
与此相同:
c = 0;
if (a < b)
c = d;
这也称为条件移动。
如果这就是您想要的,那么您不需要0
or the 1
。只需将比较结果直接与要相乘的数字进行“与”即可。
__m128 c = _mm_cmplt_ps(a,b);
c = _mm_and_ps(c,d);
这是有效的,因为比较返回全部0
的或全部1
的。因此,将它们与结果进行“与”运算,要么将其归零,要么完全保留。
它是故意这样设计的。不需要乘法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)