Я переношу векторизованный код, написанный с использованием встроенных свойств SSE2, для встроенных AVX2.
К моему разочарованию, я обнаружил, что инструкции сдвига _mm256_slli_si256 и _mm256_srli_si256 работают только по двум половинам регистров AVX отдельно, а нули вводятся между ними. (Это в отличие от _mm_slli_si128 и _mm_srli_si128, которые обрабатывают все регистры SSE.)
Можете ли вы порекомендовать мне короткую замену?
UPDATE:
_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
.