【发布时间】:2018-04-23 13:35:31
【问题描述】:
我有以下__m128 向量:
v_weight
v_entropy
我需要将v_entropy 添加到v_weight 仅当v_weight 中的元素不是0f 时。
显然_mm_add_ps() 无论如何都会添加所有元素。
我可以编译到 AVX,但不能编译到 AVX2。
编辑
我事先知道v_weight 中有多少元素为 0(总会有 0 或最后的 1、2 或 3 个元素)。如果更简单,我如何将v_entropy 中的相应元素清零?
【问题讨论】:
-
SSE/AVX 比较返回一个掩码,您可以和使用您的向量。
-
你知道哪个比较内在函数有掩码吗?
_mm_cmp_ps()是我看到的唯一适用的比较,但它不返回掩码。 -
我想通了。
_mm_cmpneq_ps和_mm_and_ps -
它会改变哪个
v_weight应该为零?如果没有,请仅在实际使用v_weight之前创建一次mask和v_weight &= mask。 -
是的,它会改变的。
标签: c sse intrinsics avx