Расширенные векторные расширения (AVX , также известный как Sandy Bridge New Extensions ) - это расширения для x86 архитектуры набора команд для микропроцессоров из Intel и AMD, предложенные Intel в марте 2008 г. и впервые поддержанные Intel с процессором Sandy Bridge, поставляемым в первом квартале 2011 г., а затем AMD с Bulldozer Процессор поступит в продажу в третьем квартале 2011 года. AVX предоставляет новые функции, новые инструкции и новую схему кодирования.
AVX2 (также известный как Haswell New Instructions ) расширяет большинство целочисленных команд до 256 бит и вводит слитные операции умножения-накопления (FMA ). Впервые они были поддержаны Intel с процессором Haswell, который был поставлен в 2013 году.
AVX-512 расширяет поддержку AVX до 512-бит, используя новую кодировку EVEX prefix, предложенную Intel в июле 2013 года. и впервые поддерживается Intel с процессором Knights Landing, который был поставлен в 2016 году.
AVX использует шестнадцать регистров YMM для выполнения одной инструкции для нескольких частей данных (см. SIMD ). Каждый регистр YMM может хранить и выполнять одновременные операции (математические) над:
Ширина регистров SIMD увеличен со 128 до 256 бит и переименован из XMM0 – XMM7 в YMM0 – YMM7 (в режиме x86-64 из XMM0 – XMM15 в YMM0 – YMM15). Унаследованные инструкции SSE могут по-прежнему использоваться через префикс VEX для работы с младшими 128 битами регистров YMM.
511256 | 255128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ZMM1 | YMM1 | XMM1 |
ZMM2 | YMM2 | XMM2 |
ZMM3 | YMM3 | XMM3 |
ZMM4 | YMM4 | XMM4 |
ZMM5 | YMM5 | XMM5 |
ZMM6 | YMM6 | XMM6 |
ZMM7 | YMM7 | XMM7 |
ZMM8 | YMM8 | XMM8 |
ZMM9 | YMM9 | XMM9 |
ZMM10 | YMM10 | XMM10 |
ZMM11 | YMM11 | XMM11 |
ZMM12 | YMM12 | XMM12 |
ZMM13 | YMM13 | XMM13 |
ZMM14 | YMM14 | XMM14 |
ZMM15 | YMM15 | XMM15 |
ZMM16 | YMM16 | XMM16 |
ZMM17 | YMM17 | XMM17 |
ZMM18 | YMM18 | XMM18 |
ZMM19 | YMM19 | XMM19 |
ZMM20 | YMM 20 | XMM20 |
ZMM21 | YMM21 | XMM21 |
ZMM22 | YMM22 | XMM22 |
ZMM23 | YMM23 | XMM23 |
ZMM24 | YMM24 | XMM24 |
ZMM25 | YMM25 | XMM25 |
ZMM26 | YMM26 | XMM26 |
ZMM27 | YMM27 | XMM27 |
ZMM28 | YMM28 | XMM28 |
ZMM29 | YMM29 | XMM29 |
ZMM30 | YMM30 | XMM30 |
ZMM31 | YMM31 | XMM31 |
AVX вводит формат инструкции SIMD с тремя операндами, в котором регистр назначения отличается от двух исходных операндов. Например, инструкция SSE, использующая обычную форму с двумя операндами a = a + b, теперь может использовать неразрушающую форму с тремя операндами c = a + b, сохраняя оба исходных операнда. Формат AVX с тремя операндами ограничен инструкциями с операндами SIMD (YMM) и не включает инструкции с регистрами общего назначения (например, EAX). Такая поддержка впервые появится в AVX2.
Требование выравнивания операндов памяти SIMD ослаблено.
Новая схема кодирования VEX представляет новую набор кодовых префиксов, который расширяет пространство opcode, позволяет командам иметь более двух операндов и позволяет регистрам векторов SIMD быть длиннее 128 бит. Префикс VEX также можно использовать в устаревших инструкциях SSE, придавая им форму с тремя операндами и позволяя им более эффективно взаимодействовать с инструкциями AVX без необходимости в VZEROUPPER и VZEROALL.
Инструкции AVX поддерживают как 128-битные, так и 256-битные SIMD. 128-битные версии могут быть полезны для улучшения старого кода без необходимости расширять векторизацию и избежать штрафов за переход от SSE к AVX, они также работают быстрее на некоторых ранних реализациях AMD AVX. Этот режим иногда называют AVX-128.
Эти инструкции AVX дополняют те, которые являются 256-битными расширениями унаследованных 128-битных инструкций SSE; большинство из них можно использовать как для 128-битных, так и для 256-битных операндов.
Инструкция | Описание |
---|---|
VBROADCASTSS , VBROADCASTSD , VBROADCASTF128 | Скопируйте 32-битный, 64-битный или 128-битный операнд памяти в все элементы векторного регистра XMM или YMM. |
VINSERTF128 | Заменяет нижнюю или верхнюю половину 256-битного регистра YMM на значение 128-битного исходного операнда. Другая половина пункта назначения не изменилась. |
VEXTRACTF128 | Извлекает нижнюю или верхнюю половину 256-битного регистра YMM и копирует значение в 128-битный целевой операнд. |
VMASKMOVPS , VMASKMOVPD | Условно считывает любое количество элементов из операнда векторной памяти SIMD в регистр назначения, оставляя остальные элементы вектора непрочитанными и устанавливая соответствующие элементы в регистре назначения на ноль. В качестве альтернативы, условно записывает любое количество элементов из операнда векторного регистра SIMD в операнд векторной памяти, оставляя остальные элементы операнда памяти неизменными. В архитектуре процессора AMD Jaguar эта инструкция с операндом источника памяти занимает более 300 тактов, когда маска равна нулю, и в этом случае инструкция не должна делать ничего. Похоже, это недостаток конструкции. |
VPERMILPS , VPERMILPD | Permute In-Lane. Перемешайте 32-битные или 64-битные векторные элементы одного входного операнда. Это внутренние 256-битные инструкции, что означает, что они работают со всеми 256 битами с двумя отдельными 128-битными перестановками, поэтому они не могут перемешиваться по 128-битным дорожкам. |
VPERM2F128 | Перемешать четыре 128-битных элементы битового вектора двух 256-битных исходных операндов в 256-битный целевой операнд с непосредственной константой в качестве селектора. |
VZEROALL | Установить все регистры YMM в ноль и пометить их как неиспользуемые. Используется при переключении между 128-битным использованием и 256-битным использованием. |
VZEROUPPER | Установить верхнюю половину всех регистров YMM на ноль. Используется при переключении между 128-битным использованием и 256-битным использованием. |
Не все процессоры из перечисленных семейств поддерживают AVX. Как правило, процессоры с коммерческим наименованием Core i3 / i5 / i7 / i9 поддерживают их, а процессоры Pentium и Celeron - нет.
Проблемы совместимости между будущими процессорами Intel и AMD обсуждаются в разделе Набор инструкций XOP.
AVX добавляет новое состояние регистра через файл регистров YMM шириной 256 бит, поэтому для правильного сохранения требуется явная поддержка операционной системы и восстановить расширенные регистры AVX между переключением контекста s. Следующие версии операционной системы поддерживают AVX:
Advanced Vector Extensions 2 (AVX2), также известные как Haswell New Instructions , является расширением набора инструкций AVX, представленного в Intel Haswell micr оархитектура. AVX2 вносит следующие дополнения:
Иногда другое расширение, использующее другой флаг cpuid, считается частью AVX2; эти инструкции перечислены на отдельной странице, а не ниже:
Инструкция | Описание |
---|---|
VBROADCASTSS , VBROADCASTSD | Копировать 32-битный или 64-битный регистровый операнд во все элементы векторного регистра XMM или YMM. Это регистровые версии тех же инструкций в AVX1. Однако 128-битной версии нет, но тот же эффект может быть просто достигнут с помощью VINSERTF128. |
VPBROADCASTB , VPBROADCASTW , VPBROADCASTD , VPBROADCASTQ | Скопируйте 8, 16, 32 или 64-битный целочисленный регистр или операнд памяти во все элементы векторного регистра XMM или YMM. |
VBROADCASTI128 | Копировать 128-битный операнд памяти во все элементы векторного регистра YMM. |
VINSERTI128 | Заменяет нижнюю или верхнюю половину 256-битного регистра YMM значением 128-битного исходного операнда. Другая половина пункта назначения не изменилась. |
VEXTRACTI128 | Извлекает нижнюю или верхнюю половину 256-битного регистра YMM и копирует значение в 128-битный целевой операнд. |
VGATHERDPD , VGATHERQPD , VGATHERDPS , VGATHERQPS | Собирает значения с плавающей запятой одинарной или двойной точности с использованием 32- или 64-битных индексов и масштаб. |
VPGATHERDD , VPGATHERDQ , VPGATHERQD , VPGATHERQQ | Собирает 32- или 64-битные целочисленные значения с использованием 32- или 64-битных индексов и масштабирования. |
VPMASKMOVD , VPMASKMOVQ | Условно считывает любое количество элементов из операнда векторной памяти SIMD в регистр назначения, оставляя остальные элементы вектора непрочитанными и устанавливая соответствующие элементы в регистре назначения на ноль. В качестве альтернативы, условно записывает любое количество элементов из операнда векторного регистра SIMD в операнд векторной памяти, оставляя остальные элементы операнда памяти неизменными. |
VPERMPS , VPERMD | Перемешивают восемь 32-битных векторных элементов одного 256-битного исходного операнда в 256-битный целевой операнд с регистром или операндом памяти в качестве селектора. |
VPERMPD , VPERMQ | Перемешивают четыре 64-битных векторных элемента одного 256-битного исходного операнда в 256-битный целевой операнд с регистром или операндом памяти в качестве селектора. |
VPERM2I128 | Перемешать (два из) четырех 128-битных векторных элементов двух 256-битных исходных операндов в 256-битный операнд назначения с непосредственной константой в качестве селектора. |
VPBLENDD | Двойное слово немедленная версия инструкций PBLEND из SSE4. |
VPSLLVD , VPSLLVQ | Сдвиг влево логический. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
VPSRLVD , VPSRLVQ | Сдвиг вправо логический. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
VPSRAVD | Сдвиг вправо арифметически. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
AVX-512 - это 512-битные расширения для 256-битных инструкций SIMD Advanced Vector Extensions для архитектуры набора команд x86, предложенные Intel в июле 2013 года и поддерживаются процессором Intel Knights Landing.
Инструкции AVX-512 кодируются с новым префиксом EVEX. Он позволяет использовать 4 операнда, 7 новых 64-битных регистров маски операции, режим скалярной памяти с автоматической рассылкой, явное управление округлением и режим адресации сжатой памяти смещения . Ширина файла регистров увеличивается до 512 бит, а общее количество регистров увеличивается до 32 (регистры ZMM0-ZMM31) в режиме x86-64.
AVX-512 состоит из нескольких расширений, не все они предназначены для поддержки всеми процессорами, их реализующими. Набор инструкций состоит из следующего:
Для всех реализаций требуется только базовое расширение AVX-512F (AVX-512 Foundation), хотя все текущие процессоры также поддерживают CD (обнаружение конфликтов); вычислительные сопроцессоры будут дополнительно поддерживать ER, PF, 4VNNIW, 4FMAPS и VPOPCNTDQ, а процессоры для настольных ПК будут поддерживать VL, DQ, BW, IFMA, VBMI, VPOPCNTDQ, VPCLMULQDQ и т. д.
Обновленные инструкции SSE / AVX в AVX -512F использовать ту же мнемонику, что и версии AVX; они могут работать с 512-битными регистрами ZMM, а также будут поддерживать 128/256-битные регистры XMM / YMM (с AVX-512VL) и целочисленные операнды байта, слова, двойного слова и четверного слова (с AVX-512BW / DQ и VBMI).
Подмножество AVX-512 | F | CD | ER | PF | 4FMAPS | 4VNNIW | VL | DQ | BW | IFMA | VBMI | VBMI2 | VPOPCNTDQ | BITALG | VNNI | VPCLMULQDQ | GFNI | VAES |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Intel Knights Landing (2016) | Да | Да | Нет | |||||||||||||||
Intel Knights Mill (2017) | Да | Нет | Да | Нет | ||||||||||||||
Intel Skylake-SP, Skylake-X (2017) | Нет | Да | Нет | |||||||||||||||
Intel Cannon Lake (2018) | Да | Нет | ||||||||||||||||
Intel Cascade Lake-SP (2019) | Нет | Да | Нет | |||||||||||||||
Intel Ice Lake (2019) | Да |
По состоянию на 2020 год нет AM D, поддерживающие AVX-512, и AMD еще не опубликовала планы по поддержке AVX-512.
expf
, sinf
, powf
, atanf
, atan2f
) различных математических функций в libc.System.Numerics.Vectors
.Sy STEM.Runtime.Intrinsics.X86
пространство имен.Поскольку инструкции AVX шире и выделяют больше тепла, в процессорах Intel предусмотрены меры по снижению предела частоты Turbo Boost при выполнении таких инструкций. Регулировка делится на три уровня:
Частотный переход может быть мягким или жестким. Жесткий переход означает, что частота уменьшается, как только появляется такая инструкция; мягкий переход означает, что частота уменьшается только после достижения порогового числа совпадающих инструкций. Ограничение для каждого потока.
Понижение частоты означает, что использование AVX в смешанной рабочей нагрузке с процессором Intel может привести к снижению частоты, несмотря на то, что это быстрее в «чистом» контексте. Избегайте использования широких и тяжелых инструкций, чтобы свести к минимуму воздействие в этих случаях. AVX-512VL позволяет использовать 256-битные или 128-битные операнды в AVX-512, что делает его разумным по умолчанию для смешанных нагрузок.