Эмуляция байтовых сдвигов на 32 байтах с помощью AVX (пересечение полос движения)C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Эмуляция байтовых сдвигов на 32 байтах с помощью AVX (пересечение полос движения)

Сообщение Anonymous »

Я переношу векторизованный код, написанный с использованием встроенных функций SSE2, на встроенные функции AVX2.
К моему большому разочарованию, я обнаружил, что инструкции по байтовому сдвигу _mm256_slli_si256 и < strong>_mm256_srli_si256 работают только с двумя половинами регистров AVX по отдельности, а между ними вводятся нули. (Это отличие от _mm_slli_si128 и _mm_srli_si128, которые обрабатывают целые регистры SSE.)
Можете ли вы порекомендовать мне короткую замену?< /p>

ОБНОВЛЕНИЕ:

Код: Выделить всё

_mm256_slli_si256
для сдвигов размером более 16 байт эффективно достигается с помощью любого из:

Код: Выделить всё

_mm256_alignr_epi8(A, _mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)
// or
_mm256_slli_si256(_mm256_permute2x128_si256(A, A, _MM_SHUFFLE(0, 0, 3, 0)), N)
(Или используйте vpermq, _mm256_permute4x64_epi64, который лучше, чем vpermi128 на некоторых процессорах, но хуже на Zen 2 и 3.)
(Или используйте vpermq, _mm256_permute4x64_epi64, который лучше, чем vpermi128 на некоторых процессорах, но хуже на Zen 2 и 3.)
p>
Но вопрос остаётся по _mm256_srli_si256.

Подробнее здесь: https://stackoverflow.com/questions/252 ... e-crossing
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»