AVX2 переставить бит управления - PullRequest
0 голосов
/ 22 декабря 2018

Команде permute из инструкций AVX2 требуется параметр типа imm8.Этот параметр контролирует, как выполняется перестановка.К сожалению, я не понимаю, как этот параметр imm8 "создан".Какое значение я должен установить или как я могу определить, какое значение я должен установить для конкретной перестановки?

Пример: _mm256_permute_pd (vec2, 0x5);

Здесь параметр 0x5 переставляетпервый и второй дубль в vec2 и третий и четвертый дубль в vec2.Но откуда мне знать, что 0x5 это делает?

1 Ответ

0 голосов
/ 22 декабря 2018

Это 4x 1-битные индексы, которые выбирают один из двух элементов из соответствующей полосы исходного вектора для каждого элемента назначения.Прочтите раздел «Эксплуатация» документации по инструкции asm: http://felixcloutier.com/x86/VPERMILPD.html.

или . Найдите его в руководстве по встроенным функциям Intel , в котором есть аналогичный псевдокод, который точно показывает, как каждый бит выбираетисточник для элемента результата.

Это не пересечение полос vpermpd, поэтому не похоже на 2-битные индексы, для которых _MM_SHUFFLE является вспомогательным макросом, поэтому он не совсем похож на Преобразовать _mm_shuffle_epi32 в выражение C для перестановки? .

...