我正在将使用 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
。