似乎AVX2中没有按位NOT /补的内在函数。我是否想念它,或者我们应该做_mm256_xor_si256(a, _mm256_set1_epi64x(-1LL))
之类的事情?如果是后者,它是最佳的吗?装配中是否没有矢量NOT指令?
答案 0 :(得分:2)
是的,唯一的SIMD按位NOT是具有全1的PXOR / XORPS,在MMX,SSE *和AVX1 / 2中。
AVX512F可以使用vpternlogd same,same,same
避免使用单独的向量常量,并且可以立即使用。 (有关详细信息,请参阅我对该副本的回答与vpxord
:Is NOT missing from SSE, AVX?)
理想情况下,您可以安排算法以避免实际上不需要某些东西。例如,使用PANDN
代替PAND
。或者稍后将其反转为其他内容的一部分。但如果你最终需要反转,那就是如何。
可以使用vpcmpeqd same,same,same
生成全1常量。使用内在函数,让编译器通过编写_mm256_set1_epi32(-1)
为您完成此操作。 (元素大小显然与set1(-1)
无关,使用任何对语法有意义的算法。)