Описание тега avx
AVX обеспечивает новую кодировку для всех предыдущих инструкций Intel SSE, обеспечивая неразрушающую работу с 3 операндами. Он также вводит векторные регистры ymm двойной ширины и некоторые новые инструкции для управления ими. Векторные инструкции с плавающей запятой имеют версии 256b в AVX, но целочисленные инструкции 256b требуют AVX2. AVX2 также представил тасование с плавающей запятой при пересечении полос движения.
Смешивание инструкций AVX (кодирование vex) и не AVX (старое кодирование SSE) в одной программе требует осторожного использования VZEROUPPER
на процессорах Intel, чтобы избежать серьезных проблем с производительностью. Это привело к нескольким вопросам производительности, на которые был дан ответ.
Другая ловушка для новичков заключается в том, что большинство инструкций 256b работают на двух полосах 128b, а не обрабатывают регистр ymm как один длинный вектор. Внимательно изучите, какой элемент куда движется при использованииUNPCKLPS
и другие инструкции в случайном порядке / горизонтально.
На странице тегов x86 вы найдете руководства и другие ресурсы по программированию и оптимизации программ с использованием AVX. См. Вики по тегам SSE для некоторых руководств по методам программирования SIMD, а не только для справок по набору инструкций.
См. Также " Обработка чисел с помощью AVX и AVX2" для ознакомления с использованием встроенных функций AVX с простыми примерами.
Перемешивание по маске с Intel AVX объясняет, как перемешать векторы управления и
_MM_SHUFFLE
работает., Включает использование полосы движения вместо пересечения полосы для AVX.Обеспечивают ли 128-битные кросс-полосные операции в AVX512 лучшую производительность? Внутренняя линия по -прежнему может иметь меньшую задержку, но пропускная способность в случайном порядке часто является большей проблемой. Такие приемы, как невыровненные / перекрывающиеся нагрузки, могут уменьшить количество перетасовок.