在AVX2中,按位的NOT/补码似乎没有内在的特性。我错过了吗,还是我们应该做一些像_mm256_xor_si256(a, _mm256_set1_epi64x(-1LL))这样的事情?如果是后者,这是否最优?装配中也没有矢量没有指令吗?
发布于 2017-09-18 05:53:48
是的,在MMX,SSE*和AVX1 1/2中,唯一的SIMD位非按位方式是PXOR/XORPS (所有的)。
AVX512F可以避免使用vpternlogd same,same,same使用单独的向量常量,并使用直接0x55。(有关它与vpxord:Is NOT missing from SSE, AVX?之争的更多细节,请参见我对副本的回答)
理想情况下,您可以安排您的算法,以避免实际需要的东西。例如,使用PANDN而不是PAND。或者后来倒转作为其他东西的一部分。但如果你最终需要倒转,那就是为什么。
使用vpcmpeqd same,same,same可以生成所有1的常量.对于本质,让编译器为您编写_mm256_set1_epi32(-1)。(元素大小显然与set1(-1)无关,请使用任何有语义意义的算法。)
https://stackoverflow.com/questions/46272313
复制相似问题