Есть ли способ перестроить инструкцию _mm_slli_si128
в AVX2, чтобы сдвинуть регистр __mm256i
на x байтов?
Кажется, что _mm256_slli_si256
просто выполняет два _mm_slli_si128
на [127: 0] и [255: 128].
Левая смена должна работать на __m256i
вот так:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ..., 32] -> [2, 3, 4, 5, 6, 7, 8, 9, ..., 0]
Я видел в потоке что можно создать смену с _mm256_permutevar8x32_ps
для 32bit. Но мне нужно более общее решение для сдвига на x байтов. Есть у кого-нибудь уже решение этой проблемы?
VPERMD y,y,y
,VPERMQ y,y,i
иVPERM2I128 y,y,y,i
- все 1 мкоп, широта = 3c, пропускная способность = 1 / цикл. (И все они работают на порту 5 только в Haswell.) Я согласен, если вы можете структурировать вещи так, чтобы они работали без постоянного пересечения полос движения, это лучше всего. Но если ваш алгоритм по своей сути имеет преимущества, а дополнительная задержка не убивает, тогда это может быть победой. - person Peter Cordes   schedule 09.06.2015