我正在将使用SSE2内在函数编写的矢量化代码迁移到AVX2内在函数.
令我失望的是,我发现移位指令_mm256_slli_si256和_mm256_srli_si256仅分别在AVX寄存器的两半上运行,并且在它们之间引入了零.(这与处理整个SSE寄存器的_mm_slli_si128和_mm_srli_si128相反.)
你能推荐我一个简短的替代品吗?
更新:
_mm256_slli_si256 有效地实现了
_mm256_alignr_epi8(A, _mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)
要么
_mm256_slli_si256(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)
对于大于16字节的移位.
但问题仍然存在_mm256_srli_si256.