Расширенные векторные расширения
Расширенные векторные расширения ( AVX , также известные как Gesher New Instructions , а затем Sandy Bridge New Instructions ) — это SIMD- расширения x86 архитектуры набора команд для микропроцессоров от Intel и Advanced Micro Devices (AMD). Они были предложены Intel в марте 2008 года и впервые поддержаны Intel с помощью Sandy Bridge. [1] поставки микроархитектуры AMD в первом квартале 2011 г. и позже с моделью Bulldozer [2] Поставка микроархитектуры состоится в четвертом квартале 2011 года. AVX предоставляет новые функции, новые инструкции и новую схему кодирования.
AVX2 (также известный как Новые инструкции Haswell ) расширяет большинство целочисленных команд до 256 бит и вводит новые инструкции. Впервые они были поддержаны Intel в микроархитектуре Haswell , выпущенной в 2013 году.
AVX-512 расширяет поддержку AVX до 512-битной с использованием новой кодировки префикса EVEX, предложенной Intel в июле 2013 года и впервые поддержанной Intel с Knights Landing , который был поставлен в 2016 году. сопроцессором [3] [4] Среди обычных процессоров AVX-512 был представлен вместе с сервером Skylake и процессорами HEDT в 2017 году.
Расширенные векторные расширения
[ редактировать ]AVX использует шестнадцать регистров YMM для выполнения одной инструкции над несколькими частями данных (см. SIMD ). Каждый регистр YMM может хранить и выполнять одновременные математические операции над:
- восемь 32-битных чисел с плавающей запятой одинарной точности или
- четыре 64-битных числа двойной точности с плавающей запятой.
Ширина SIMD-регистров увеличена со 128 бит до 256 бит и переименована с XMM0–XMM7 в YMM0–YMM7 (в режиме x86-64 с XMM0–XMM15 на YMM0–YMM15). Устаревшие инструкции SSE по-прежнему можно использовать через префикс VEX для работы с младшими 128 битами регистров YMM.
511 256 | 255 128 | 127 0 |
ЗММ0 | YMM0 | ХММ0 |
ЗММ1 | ЯММ1 | ХММ1 |
ЗММ2 | YMM2 | ХММ2 |
ЗММ3 | YMM3 | ХММ3 |
ЗММ4 | YMM4 | ХММ4 |
ЗММ5 | ЯММ5 | ХММ5 |
ЗММ6 | ЯММ6 | ХММ6 |
ЗММ7 | YMM7 | ХММ7 |
ЗММ8 | YMM8 | ХММ8 |
ЗММ9 | YMM9 | ХММ9 |
ЗММ10 | ЯММ10 | ХММ10 |
ЗММ11 | ЯММ11 | ХММ11 |
ЗММ12 | ЯММ12 | ХММ12 |
ЗММ13 | ЯММ13 | ХММ13 |
ЗММ14 | ЯММ14 | ХММ14 |
ЗММ15 | ЯММ15 | ХММ15 |
ЗММ16 | ЯММ16 | ХММ16 |
ЗММ17 | ЯММ17 | ХММ17 |
ЗММ18 | ЯММ18 | ХММ18 |
ЗММ19 | ЯММ19 | ХММ19 |
ЗММ20 | ЯММ20 | ХММ20 |
ЗММ21 | ЯММ21 | ХММ21 |
ЗММ22 | ЯММ22 | ХММ22 |
ЗММ23 | ЯММ23 | ХММ23 |
ЗММ24 | ЯММ24 | ХММ24 |
ЗММ25 | ЯММ25 | ХММ25 |
ЗММ26 | ЯММ26 | ХММ26 |
ЗММ27 | ЯММ27 | ХММ27 |
ЗММ28 | ЯММ28 | ХММ28 |
ЗММ29 | ЯММ29 | ХММ29 |
ЗММ30 | ЯММ30 | ХММ30 |
ЗММ31 | ЯММ31 | ХММ31 |
AVX представляет формат инструкций SIMD с тремя операндами, называемый схемой кодирования VEX , в котором регистр назначения отличается от двух исходных операндов. Например, инструкция SSE, использующая традиционную форму с двумя операндами a ← a + b, теперь может использовать неразрушающую форму с тремя операндами c ← a + b , сохраняя оба исходных операнда. Первоначально формат трех операндов AVX был ограничен инструкциями с операндами SIMD (YMM) и не включал инструкции с регистрами общего назначения (например, EAX). Позже он использовался для кодирования новых инструкций для регистров общего назначения в более поздних расширениях, таких как BMI . Кодирование VEX также используется для инструкций, работающих с регистрами маски k0-k7, которые были представлены в AVX-512 .
Требования к выравниванию операндов SIMD-памяти смягчены. [5] В отличие от своих аналогов, не закодированных в VEX, большинство векторных инструкций, закодированных в VEX, больше не требуют выравнивания своих операндов в памяти по размеру вектора. Примечательно, что VMOVDQA
Инструкция по-прежнему требует, чтобы ее операнд в памяти был выровнен.
Новая схема кодирования VEX представляет новый набор префиксов кода, который расширяет пространство кода операции , позволяет инструкциям иметь более двух операндов и позволяет векторным регистрам SIMD иметь длину более 128 бит. Префикс VEX также можно использовать в устаревших инструкциях SSE, придавая им форму с тремя операндами и позволяя им более эффективно взаимодействовать с инструкциями AVX без необходимости VZEROUPPER
и VZEROALL
.
Инструкции AVX поддерживают как 128-битный, так и 256-битный SIMD. 128-битные версии могут быть полезны для улучшения старого кода без необходимости расширения векторизации и во избежание штрафов за переход от SSE к AVX. Они также быстрее в некоторых ранних реализациях AVX от AMD. Этот режим иногда называют AVX-128. [6]
Новые инструкции
[ редактировать ]Эти инструкции 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 тактов, когда маска равна нулю, и в этом случае инструкция не должна ничего делать. Похоже, это ошибка конструкции. [7] |
VPERMILPS , VPERMILPD
|
Перестановка внутри полосы. Перетасуйте 32-битные или 64-битные векторные элементы одного входного операнда. Это 256-битные инструкции, расположенные внутри полосы, что означает, что они работают со всеми 256 битами с двумя отдельными 128-битными перетасовками, поэтому они не могут перемещаться по 128-битным дорожкам. [8] |
VPERM2F128
|
Перетасуйте четыре 128-битных векторных элемента двух 256-битных исходных операндов в 256-битный операнд назначения с непосредственной константой в качестве селектора. |
VTESTPS , VTESTPD
|
Проверка упакованных битов упакованных битов знака с плавающей запятой одинарной или двойной точности, установка или очистка флага ZF на основе AND и флага CF на основе ANDN. |
VZEROALL
|
Установите все регистры YMM на ноль и пометьте их как неиспользуемые. Используется при переключении между 128-битным и 256-битным использованием. |
VZEROUPPER
|
Установите верхнюю половину всех регистров YMM на ноль. Используется при переключении между 128-битным и 256-битным использованием. |
Процессоры с AVX
[ редактировать ]- Интел
- Процессоры Sandy Bridge (1 квартал 2011 г.) и новее, за исключением моделей Celeron и Pentium. [9]
- Процессоры марок Pentium и Celeron, начиная с Tiger Lake (3-й квартал 2020 г.) и новее. [10]
- АМД :
- Процессоры Bulldozer (4 квартал 2011 г.) и новее. [11]
Вопросы совместимости будущих процессоров Intel и AMD обсуждаются в разделе « Набор инструкций XOP» .
- С ПОМОЩЬЮ :
- Нано Четырехъядерный процессор
- Эдем X4
- Чжаосинь :
- Процессоры на базе WuDaoKou (KX-5000 и KH-20000)
Поддержка компилятора и ассемблера
[ редактировать ]- Absoft поддерживает флаг -mavx.
- Компилятор Free Pascal поддерживает AVX и AVX2 с ключами -CfAVX и -CfAVX2 начиная с версии 2.7.1.
- Студия RAD (v11.0 Alexandria) поддерживает AVX2 и AVX512. [12]
- Встроенные ассемблерные функции GNU Assembler (GAS) поддерживают эти инструкции (доступны через GCC), а также примитивы Intel и встроенный ассемблер Intel (тесно совместимый с GAS, хотя и более общий в обработке локальных ссылок внутри встроенного кода). GAS поддерживает AVX, начиная с версии binutils 2.19. [13]
- GCC , начиная с версии 4.6 (хотя существовала ветка 4.3 с определенной поддержкой), и Intel Compiler Suite, начиная с версии 11.1, поддерживают AVX.
- Компилятор Open64 версии 4.5.1 поддерживает AVX с флагом -mavx.
- PathScale поддерживает флаг -mavx.
- Компилятор Vector Pascal поддерживает AVX через флаг -cpuAVX32.
- Компилятор Visual Studio 2010/2012 поддерживает AVX через встроенный переключатель и /arch:AVX.
- NASM начиная с версии 2.03 и новее. В версии 2.04 было множество исправлений ошибок и обновлений, связанных с AVX. [14]
- Другие ассемблеры, такие как версия MASM VS2010, YASM , [15] ФАСМ и JWASM .
Поддержка операционной системы
[ редактировать ]AVX добавляет новое состояние регистра через 256-битный файл регистров YMM, поэтому требуется явная поддержка операционной системы для правильного сохранения и восстановления расширенных регистров AVX между переключениями контекста . Следующие версии операционной системы поддерживают AVX:
- DragonFly BSD : поддержка добавлена в начале 2013 года.
- FreeBSD : поддержка добавлена в патче, представленном 21 января 2012 г. [16] который был включен в стабильную версию 9.1. [17]
- Linux : поддерживается с версии ядра 2.6.30, [18] выпущен 9 июня 2009 г. [19]
- macOS : поддержка добавлена в 10.6.8 ( Snow Leopard ). обновлении [20] [ ненадежный источник? ] выпущен 23 июня 2011 г. Фактически, macOS Ventura не поддерживает процессоры x86 без набора инструкций AVX2. [21]
- OpenBSD : поддержка добавлена 21 марта 2015 г. [22]
- Solaris : поддерживается в Solaris 10 Update 10 и Solaris 11.
- Windows : поддерживается в Windows 7 SP1, Windows Server 2008 R2 SP1, [23] Windows 8 , Windows 10 .
- Windows Server 2008 R2 SP1 с Hyper-V требует исправления для поддержки процессоров AMD AVX (серии Opteron 6200 и 4200), KB2568088.
- Windows XP и Windows Server 2003 не поддерживают AVX ни в драйверах ядра, ни в пользовательских приложениях.
Расширенные векторные расширения 2
[ редактировать ]Advanced Vector Extensions 2 (AVX2), также известный как Haswell New Instructions , [24] — это расширение набора инструкций AVX, представленного в микроархитектуре Intel Haswell . AVX2 вносит следующие дополнения:
- расширение большинства векторных целочисленных инструкций SSE и AVX до 256 бит
- Получите поддержку, позволяющую загружать векторные элементы из несмежных ячеек памяти.
- DWORD- и QWORD-детализация «любой к любому»
- векторные сдвиги.
Иногда расширение с тремя операндами с объединенным умножением-накоплением (FMA3) считается частью AVX2, поскольку оно было представлено Intel в той же микроархитектуре процессора. Это отдельное расширение, использующее собственный флаг CPUID и описанное на отдельной странице , а не ниже.
Новые инструкции
[ редактировать ]Инструкция | Описание |
---|---|
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
|
Сдвиг вправо арифметически. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованными входными данными. |
Процессоры с AVX2
[ редактировать ]- Интел
- Процессоры Haswell (второй квартал 2013 г.) и новее, за исключением моделей Celeron и Pentium.
- Процессоры под брендом Celeron и Pentium, начиная с Tiger Lake (3-й квартал 2020 г.) и новее. [10]
- АМД
- Экскаваторные процессоры (2 квартал 2015 г.) и новее.
- С ПОМОЩЬЮ :
- Нано Четырехъядерный процессор
- Эдем X4
AVX-512
[ редактировать ]AVX-512 — это 512-битное расширение 256-битных инструкций SIMD Advanced Vector Extensions для архитектуры набора команд x86, предложенных Intel в июле 2013 года и поддерживаемых процессором Intel Knights Landing . [3]
Инструкции AVX-512 кодируются новым префиксом EVEX . Он допускает 4 операнда, 8 новых 64-битных регистров опмаски , скалярный режим памяти с автоматической трансляцией, явный контроль округления и режим адресации памяти со сжатым смещением . Ширина файла регистров увеличена до 512 бит, а общее количество регистров увеличено до 32 (регистры ZMM0-ZMM31) в режиме x86-64.
AVX-512 состоит из нескольких подмножеств команд, не все из которых предназначены для поддержки всеми процессорами, их реализующими. Набор инструкций состоит из следующего:
- AVX-512 Foundation (F) — добавляет несколько новых инструкций и расширяет большинство 32-битных и 64-битных инструкций SSE-SSE4.1 и AVX/AVX2 с плавающей запятой схемой кодирования EVEX для поддержки 512-битных регистров, масок операций, параметров. широковещательная рассылка, а также встроенный контроль округления и исключений.
- Инструкции по обнаружению конфликтов AVX-512 (компакт-диск) — эффективное обнаружение конфликтов, позволяющее векторизовать больше циклов, поддерживается Knights Landing [3]
- AVX-512 Экспоненциальные и обратные инструкции (ER) - экспоненциальные и обратные операции, предназначенные для реализации трансцендентных операций, поддерживаемые Knights Landing. [3]
- AVX-512 Prefetch Instructions (PF) — новые возможности предварительной выборки, поддерживаемые Knights Landing. [3]
- Расширения векторной длины (VL) AVX-512 — расширяет большинство операций AVX-512 для работы с регистрами XMM (128-бит) и YMM (256-бит) (включая XMM16-XMM31 и YMM16-YMM31 в режиме x86-64). [25]
- AVX-512 Байтовые и словесные инструкции (BW) — расширяют AVX-512 для поддержки 8-битных и 16-битных целочисленных операций. [25]
- AVX-512 Инструкции с двойным и четверным словом (DQ) — расширенные 32-битные и 64-битные целочисленные операции. [25]
- AVX-512 Integer Fused Multiply Add (IFMA) – объединенное умножение для 512-битных целых чисел. [26] : 746
- Инструкции по манипулированию векторными байтами AVX-512 (VBMI) добавляют инструкции по перестановке векторных байтов, которых нет в AVX-512BW.
- AVX-512 Векторные инструкции нейронной сети Точность переменной слова (4VNNIW) — векторные инструкции для глубокого обучения.
- AVX-512 Fused Multiply Accumulation Packed Single Precision (4FMAPS) — векторные инструкции для глубокого обучения.
- VPOPCNTDQ – количество битов установлено в 1. [27]
- VPCLMULQDQ – умножение четверных слов без переноса. [27]
- AVX-512 Vector Neural Network Instructions (VNNI) – векторные инструкции для глубокого обучения. [27]
- AVX-512 Galois Field New Instructions (GFNI) – векторные инструкции для расчета поля Галуа . [27]
- AVX-512 Векторные инструкции AES (VAES) – векторные инструкции для кодирования AES . [27]
- AVX-512 Инструкция по манипулированию векторными байтами 2 (VBMI2) – загрузка байтов/слов, сохранение и объединение со сдвигом. [27]
- Битовые алгоритмы AVX-512 (BITALG) — инструкции по манипуляции битами/словами , расширяющие VPOPCNTDQ. [27]
- AVX-512 Bfloat16 Инструкции с плавающей запятой (BF16) – векторные инструкции для ускорения ИИ.
- AVX-512 Инструкции с плавающей запятой половинной точности (FP16) — векторные инструкции для работы с числами с плавающей запятой и комплексными числами с пониженной точностью.
Для всех реализаций требуется только базовое расширение AVX-512F (AVX-512 Foundation), хотя все текущие реализации также поддерживают CD (обнаружение конфликтов). Все центральные процессоры с AVX-512 также поддерживают VL, DQ и BW. Расширения набора команд ER, PF, 4VNNIW и 4FMAPS в настоящее время реализованы только в вычислительных сопроцессорах Intel.
Обновленные инструкции SSE/AVX в AVX-512F используют ту же мнемонику, что и версии AVX; они могут работать с 512-битными регистрами ZMM, а также поддерживают 128/256-битные регистры XMM/YMM (с AVX-512VL) и целочисленные операнды в виде байтов, слов, двойных и четверных слов (с AVX-512BW/DQ и VBMI). [26] : 23
Процессоры с AVX-512
[ редактировать ]Подмножество AVX-512 | Ф | компакт-диск | ЯВЛЯЕТСЯ | ПФ | 4FMAPS | 4ВННИВ | ВПОПКНТДК | ВЛ | ДК | ЧБ | ИФМА | ВИМТ | индекс ИМТ2 | БИТАЛГ | ВННИ | БФ16 | ВПКLMULQDQ | ГФНИ | ОАЭ | ВП2ИНТЕРСЕКТ | РП16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Intel Knights Landing (2016) | Да | Да | Нет | ||||||||||||||||||
Intel Knights Mill (2017) | Да | Нет | |||||||||||||||||||
Intel Skylake-SP , Skylake-X (2017 г.) | Нет | Нет | Да | Нет | |||||||||||||||||
Интел Кэннон Лейк (2018) | Да | Нет | |||||||||||||||||||
Intel Каскад Лейк-СП (2019) | Нет | Да | Нет | ||||||||||||||||||
Интел Купер Лейк (2020) | Нет | Да | Нет | ||||||||||||||||||
Интел Ледяное озеро (2019) | Да | Нет | Да | Нет | |||||||||||||||||
Intel Тайгер Лейк (2020) | Да | Нет | |||||||||||||||||||
Intel Ракетное озеро (2021 г.) | Нет | ||||||||||||||||||||
Интел Олдер Лейк (2021 г.) | Официально не поддерживается, но может быть включен на некоторых материнских платах с некоторыми версиями BIOS. Примечание 1 | ||||||||||||||||||||
AMD Дзен 4 (2022 г.) | Да | Да | Нет | ||||||||||||||||||
Intel Сапфир Рапидс (2023 г.) | Нет | Да | |||||||||||||||||||
AMD Дзен 5 (2024 г.) | Да | Нет |
^Примечание 1. AVX-512 по умолчанию отключен в процессорах Alder Lake . На некоторых материнских платах с некоторыми версиями микрокода ЦП и BIOS AVX-512 можно включить в BIOS, но для этого необходимо отключить E-ядра. [29] Однако Intel начала включать AVX-512 в процессоры Alder Lake, выпущенные в начале 2022 года и новее. [30]
Компиляторы, поддерживающие AVX-512
[ редактировать ]- Кланг 3.9 и новее [31]
- GCC 4.9 и новее [32]
- ICC 15.0.1 и новее [33]
- Компилятор C++ Microsoft Visual Studio 2017 [34]
Сборщики, поддерживающие AVX-512
[ редактировать ]AVX-ВННИ, AVX-IFMA
[ редактировать ]AVX-VNNI — это кодированный VEX вариант расширения набора команд AVX512-VNNI . Аналогично, AVX-IFMA является VEX с кодировкой вариантом AVX512-IFMA . Эти расширения предоставляют тот же набор операций, что и их аналоги AVX-512, но ограничены 256-битными векторами и не поддерживают какие-либо дополнительные функции кодирования EVEX , такие как широковещательная рассылка, регистры opmask или доступ к более чем 16 векторным регистрам. Эти расширения позволяют поддерживать операции VNNI и IFMA, даже если полная поддержка AVX-512 не реализована в процессоре.
Процессоры с AVX-VNNI
[ редактировать ]- Интел
- Процессоры Alder Lake (4 квартал 2021 г.) и новее.
- АМД
- Процессоры Zen 5 (второе полугодие 2024 г.) и новее. [35]
Процессоры с AVX-IFMA
[ редактировать ]- Интел
- Процессоры Xeon Sierra Forest только с ядром E (второе полугодие 2024 г.) и новее.
- Специализированные процессоры Grand Ridge и новее.
- Мобильные процессоры Meteor Lake (четвертый квартал 2023 г.) и новее.
- Arrow Lake и новее. Настольные процессоры
AVX10
[ редактировать ]AVX10, анонсированный в августе 2023 года, представляет собой новый «конвергентный» набор инструкций AVX. Он решает несколько проблем AVX-512, в частности то, что он разделен на слишком много частей. [36] (20 флагов функций) и что поддержка 512-битных векторов обязательна. AVX10 представляет собой упрощенный интерфейс CPUID для проверки поддержки инструкций, состоящий из номера версии AVX10 (указывающего набор поддерживаемых инструкций, причем более поздние версии всегда являются надмножеством более ранних) и доступной максимальной длины вектора (256 или 512 бит). . [37] Для указания версии и длины вектора используется комбинированное обозначение: например, AVX10.2/256 указывает, что ЦП поддерживает вторую версию AVX10 с максимальной шириной вектора 256 бит. [38]
Первая и «ранняя» версия AVX10, получившая обозначение AVX10.1, не будет содержать каких-либо инструкций или функций кодирования, помимо тех, что уже есть в AVX-512 (в частности, в Intel Sapphire Rapids : AVX-512F, CD, VL, DQ, BW). , IFMA, VBMI, VBMI2, BITALG, VNNI, GFNI, VPOPCNTDQ, VPCLMULQDQ, VAES, BF16, FP16). Вторая, «полноценная» версия, AVX10.2, представляет новые функции, такие как встроенное округление YMM и подавление всех исключений. Для процессоров, поддерживающих AVX10 и 512-битные векторы, все устаревшие флаги функций AVX-512 останутся установленными, чтобы приложения, поддерживающие AVX-512, могли продолжать использовать инструкции AVX-512. [38]
AVX10.1/512 будет доступен на Granite Rapids . [38]
АПХ
[ редактировать ]APX — новое расширение. Он не ориентирован на векторные вычисления, но предоставляет RISC-подобные расширения архитектуры x86-64 за счет удвоения количества регистров общего назначения до 32 и введения форматов инструкций с тремя операндами. AVX затрагивается лишь косвенно, поскольку APX вводит расширенные операнды. [39] [40]
Приложения
[ редактировать ]- Подходит для интенсивных вычислений с плавающей запятой в мультимедийных, научных и финансовых приложениях (AVX2 добавляет поддержку целочисленных операций).
- Повышает параллелизм и производительность вычислений SIMD с плавающей запятой .
- Уменьшает нагрузку на регистры благодаря неразрушающим инструкциям.
- Улучшает производительность программного обеспечения Linux RAID (требуется AVX2, AVX недостаточно) [41]
Программное обеспечение
[ редактировать ]- Криптография
- Bloombase использует AVX, AVX2 и AVX-512 в своем криптографическом модуле Bloombase (BCM).
- Botan использует AVX и AVX2, если они доступны, для ускорения некоторых алгоритмов, таких как ChaCha.
- Инструментарий BSAFE C использует AVX и AVX2, где это необходимо, для ускорения различных криптографических алгоритмов. [42]
- Crypto++ использует AVX и AVX2, если они доступны, для ускорения некоторых алгоритмов, таких как Salsa и ChaCha.
- OpenSSL использует криптографические функции, оптимизированные для AVX и AVX2, начиная с версии 1.0.2. [43] Поддержка AVX-512 была добавлена в версии 3.0.0. [44] Некоторые из этих оптимизаций также присутствуют в различных клонах и форках, таких как LibreSSL.
- Ядро Linux может использовать AVX или AVX2 вместе с AES-NI в качестве оптимизированной реализации криптографического алгоритма AES-GCM .
- Ядро Linux использует AVX или AVX2, если они доступны, в оптимизированной реализации нескольких других криптографических шифров: Camellia , CAST5 , CAST6 , Serpent , Twofish , MORUS-1280 и других примитивов: Poly1305 , SHA-1 , SHA-256 , SHA-512 . ЧаЧа20 .
- libsodium использует AVX в реализации скалярного умножения для алгоритмов Curve25519 и Ed25519 , AVX2 для BLAKE2b , Salsa20 , ChaCha20 и AVX2 и AVX-512 в реализации алгоритма Argon2 .
- Мультимедиа
- Blender использует AVX, AVX2 и AVX-512 в движке рендеринга Cycles. [45]
- x264 , x265 и VTM могут использовать AVX2 или AVX-512 для ускорения кодирования. Видеокодеры
- Для программного синтезатора Massive X от Native Instruments требуется AVX. [46]
- Декодер dav1d AV1 может использовать AVX2 и AVX-512 на поддерживаемых процессорах. [47] [48]
- Кодер SVT-AV1 AV1 может использовать AVX2 и AVX-512 для ускорения кодирования видео. [49]
- libvpx , использует AVX2 или AVX-512, если они доступны. Эталонная реализация кодера/декодера VP8/VP9 с открытым исходным кодом
- libjpeg-turbo использует AVX2 для ускорения обработки изображений.
- Наука, инженерия и другие
- Esri ArcGIS Data Store использует AVX2 для хранения графиков. [50]
- Prime95 /MPrime, программное обеспечение, используемое для GIMPS , начало использовать инструкции AVX с версии 27.1, AVX2 с 28.6 и AVX-512 с 29.1. [51]
- dnetc , программное обеспечение, используемое распределенным.net , имеет ядро AVX2, доступное для его проекта RC5, и вскоре выпустит его для своего проекта OGR-28.
- Einstein@Home использует AVX в некоторых своих распределенных приложениях, которые ищут гравитационные волны . [52]
- Folding@home использует AVX в вычислительных ядрах, реализованных с помощью библиотеки GROMACS .
- Helios использует аппаратное ускорение AVX и AVX2 на 64-битном оборудовании x86. [53]
- Horizon: Zero Dawn использует AVX в своем игровом движке Decima.
- PCSX2 и RPCS3 — это эмуляторы PS2 и PS3 с открытым исходным кодом соответственно, которые используют инструкции AVX2 и AVX-512 для эмуляции игр.
- Интерфейс сетевых устройств — протокол IP-видео/аудио, разработанный NewTek для производства прямых трансляций, использует AVX и AVX2 для повышения производительности.
- Для TensorFlow начиная с версии 1.6 и для более поздних версий требуется процессор, поддерживающий как минимум AVX. [54]
- на базе ЦП Различные майнеры криптовалюты (например, cpuminer пула для биткойнов и лайткойнов ) используют AVX и AVX2 для различных процедур, связанных с криптографией, включая SHA-256 и scrypt .
- FFTW может использовать AVX, AVX2 и AVX-512, если они доступны.
- LLVMpipe, программный рендерер OpenGL в Mesa , использующий Gallium и инфраструктуру LLVM , использует AVX2, когда он доступен.
- glibc использует AVX2 (с FMA ) и AVX-512 для оптимизированной реализации различных математических (т.е.
expf
,sinf
,powf
,atanf
,atan2f
) и строка (memmove
,memcpy
и т. д.) функции в libc . - POCL, портативный компьютерный язык, обеспечивающий реализацию OpenCL , по возможности использует AVX, AVX2 и AVX-512.
- .NET и .NET Framework могут использовать AVX, AVX2 через общий
System.Numerics.Vectors
пространство имен. - .NET Core , начиная с версии 2.1 и более широко после версии 3.0, может напрямую использовать все внутренние функции AVX, AVX2 через
System.Runtime.Intrinsics.X86
пространство имен. - EmEditor 19.0 и выше использует AVX2 для ускорения обработки. [55]
- Microsoft Teams использует инструкции AVX2 для создания размытого или пользовательского фона позади участников видеочата. [56] и для подавления фонового шума. [57]
- Пользовательские сборки Windows Pale Moon значительно увеличивают скорость просмотра благодаря использованию AVX2.
- simdjson , библиотека анализа JSON , использует AVX2 и AVX-512 для достижения улучшенной скорости декодирования. [58] [59]
- x86-simd-sort , библиотека с алгоритмами сортировки для 16, 32 и 64-битных числовых типов данных, использует AVX2 и AVX-512. Библиотека используется в NumPy и OpenJDK для ускорения алгоритмов сортировки. [60]
- zlib-ng , оптимизированная версия zlib , содержит версии AVX2 и AVX-512 некоторых алгоритмов сжатия данных.
- Механизм OCR Tesseract использует AVX, AVX2 и AVX-512 для ускорения распознавания символов. [61]
Даунклокинг
[ редактировать ]Поскольку инструкции AVX шире, они потребляют больше энергии и выделяют больше тепла. Выполнение тяжелых инструкций AVX на высоких тактовых частотах ЦП может повлиять на стабильность ЦП из-за чрезмерного падения напряжения во время переходных процессов нагрузки. В некоторых процессорах Intel предусмотрены возможности снижения ограничения частоты Turbo Boost при выполнении таких инструкций. Это снижение происходит, даже если ЦП не достиг пределов теплового и энергопотребления. В Skylake и его производных регулирование разделено на три уровня: [62] [63]
- L0 (100%): нормальный предел турбонаддува.
- L1 (~85%): предел усиления AVX. Мягкий запуск с помощью 256-битных «тяжелых» инструкций (модуль с плавающей запятой: математика FP и целочисленное умножение). Жесткий запуск «легкими» (всеми остальными) 512-битными инструкциями.
- L2 (~60%): [ сомнительно – обсудить ] Предел усиления AVX-512. Мягкий запуск с помощью 512-битных тяжелых инструкций.
Частотный переход может быть мягким или жестким. Жесткий переход означает, что частота снижается, как только обнаруживается такая инструкция; мягкий переход означает, что частота снижается только после достижения порогового числа совпадающих инструкций. Ограничение указано для каждого потока. [62]
В Ледяном озере сохранилось только два уровня: [64]
- L0 (100%): нормальный предел турбонаддува.
- L1 (~97%): запускается любыми 512-битными инструкциями, но только когда активно одноядерное ускорение; не срабатывает при загрузке нескольких ядер.
Процессоры Rocket Lake не запускают снижение частоты при выполнении каких-либо векторных инструкций независимо от размера вектора. [64] Однако понижение тактовой частоты все равно может произойти по другим причинам, например, из-за достижения пределов температуры и мощности.
Снижение тактовой частоты означает, что использование AVX в смешанной рабочей нагрузке с процессором Intel может привести к снижению частоты. Отказ от использования широких и тяжелых инструкций поможет свести к минимуму последствия в таких случаях. AVX-512VL позволяет использовать 256-битные или 128-битные операнды в инструкциях AVX-512, что делает его разумным вариантом по умолчанию для смешанных нагрузок. [65]
В поддерживаемых и разблокированных вариантах процессоров, которые понижают тактовую частоту, смещения уменьшения тактовой частоты (обычно называемые смещениями AVX и AVX-512) можно регулировать и можно полностью отключить (установить на 0x) с помощью утилиты разгона/настройки Intel или в BIOS, если поддержали там. [66]
См. также
[ редактировать ]- F16C Расширение набора команд
- Расширения защиты памяти
- Scalable Vector Extension for ARM — новый набор векторных команд (дополняющий VFP и NEON ), аналогичный AVX-512, с некоторыми дополнительными возможностями.
Ссылки
[ редактировать ]- ^ Кантер, Дэвид (25 сентября 2010 г.). «Микроархитектура Intel Sandy Bridge» . www.realworldtech.com . Проверено 17 февраля 2018 г.
- ^ Грушка, Джоэл (24 октября 2011 г.). «Анализ бульдозера: почему чип AMD так разочаровывает — страница 4 из 5 — ExtremeTech» . ЭкстримТех . Проверено 17 февраля 2018 г.
- ^ Jump up to: а б с д и Джеймс Рейндерс (23 июля 2013 г.), AVX-512 Instructions , Intel , получено 20 августа 2013 г.
- ^ «Процессор Intel Xeon Phi 7210 (16 ГБ, 1,30 ГГц, 64 ядра) Технические характеристики» . Intel ARK (технические характеристики продукта) . Проверено 16 марта 2018 г.
- ^ «14,9». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 1: Базовая архитектура (PDF) (изд. -051US). Корпорация Интел. п. 349 . Проверено 23 августа 2014 г.
Аргументы памяти для большинства инструкций с префиксом VEX работают нормально, не вызывая #GP(0) при выравнивании байтов (в отличие от инструкций Legacy SSE).
- ^ «Параметры i386 и x86-64 — использование коллекции компиляторов GNU (GCC)» . Проверено 9 февраля 2014 г.
- ^ «Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов-сборщиков и производителей компиляторов» (PDF) . Проверено 17 октября 2016 г.
- ^ «Шахматное программирование AVX2» . Архивировано из оригинала 10 июля 2017 года . Проверено 17 октября 2016 г.
- ^ «Intel предлагает взглянуть на Нехалема и Ларраби» . ЭкстримТех. 17 марта 2008 г.
- ^ Jump up to: а б «Процессор Intel® Celeron® 6305 (4 МБ кэш-памяти, 1,80 ГГц, с IPU) Технические характеристики продукта» . ark.intel.com . Проверено 10 ноября 2020 г.
- ^ Батлер, Майкл; Барнс, Лесли; Дас Сарма, Дебджит; Гелинас, Боб (март – апрель 2011 г.). «Бульдозер: подход к повышению производительности многопоточных вычислений» (PDF) . IEEE микро . 31 (2). дои : 10.1109/MM.2011.23 . S2CID 28236214 . Архивировано из оригинала (PDF) 19 мая 2024 года.
- ^ «Что нового — RAD Studio» . docwiki.embarcadero.com . Проверено 17 сентября 2021 г.
- ^ «Изменения ГАЗа» . исходное программное обеспечение.org . Проверено 3 мая 2024 г.
- ^ Jump up to: а б «NASM — Netwide Assembler, Приложение C: История версий NASM» . nasm.us. Проверено 3 мая 2024 г.
- ^ «Примечания к выпуску YASM 0.7.0» . yasm.tortall.net .
- ^ Добавьте поддержку расширенных состояний FPU в amd64, как для собственных 64-битных, так и для 32-битных ABI , svnweb.freebsd.org, 21 января 2012 г. , получено 22 января 2012 г.
- ^ «Объявление о выпуске FreeBSD 9.1» . Проверено 20 мая 2013 г.
- ^ x86: добавить поддержку ядра Linux для состояния YMM , получено 13 июля 2009 г.
- ^ Linux 2.6.30 — Linux Kernel Newbies , получено 13 июля 2009 г.
- ^ Твиттер , получено 23 июня 2010 г.
- ^ «Разработчики добились прогресса в том, чтобы macOS Ventura работала на неподдерживаемых компьютерах Mac десятилетней давности» . 23 августа 2022 г.
- ^ Добавьте поддержку сохранения/восстановления состояния FPU с помощью XSAVE/XRSTOR. , получено 25 марта 2015 г.
- ^ Поддержка чисел с плавающей запятой для 64-битных драйверов , получено 6 декабря 2009 г.
- ^ Новые описания инструкций Haswell уже доступны , Software.intel.com , получено 17 января 2012 г.
- ^ Jump up to: а б с Джеймс Рейндерс (17 июля 2014 г.). «Дополнительные инструкции AVX-512» . Интел . Проверено 3 августа 2014 г.
- ^ Jump up to: а б «Справочник по программированию расширений набора команд архитектуры Intel» (PDF) . Интел . Проверено 29 января 2014 г.
- ^ Jump up to: а б с д и ж г «Справочник по программированию расширений набора команд архитектуры Intel® и будущих функций» . Интел . Проверено 16 октября 2017 г.
- ^ «Эмулятор разработки программного обеспечения Intel® | Программное обеспечение Intel®» . программное обеспечение.intel.com . Проверено 11 июня 2016 г.
- ^ Катресс, Ян; Фрумусану, Андрей. «Обзор процессора Intel Core i9-12900K 12-го поколения: гибридная производительность усложняет гибрид» . АнандТех . Проверено 5 ноября 2021 г.
- ^ Алкорн, Пол (2 марта 2022 г.). «Intel Nukes Alder Lake поддерживает AVX-512, теперь она отключена в кремнии» . Аппаратное обеспечение Тома . Проверено 3 октября 2022 г.
- ^ «Примечания к выпуску LLVM 3.9 — документация LLVM 3.9» . Releases.llvm.org . Проверено 3 апреля 2017 г.
- ^ «Серия выпусков GCC 4.9 — изменения, новые функции и исправления — Проект GNU — Фонд свободного программного обеспечения (FSF)» . gcc.gnu.org . Проверено 3 апреля 2017 г.
- ^ «Примечания к выпуску Intel® Parallel Studio XE 2015 Composer Edition C++ | Программное обеспечение Intel®» . программное обеспечение.intel.com . Проверено 3 апреля 2017 г.
- ^ «Microsoft Visual Studio 2017 поддерживает Intel® AVX-512» . 11 июля 2017 г.
- ^ «Опубликована поддержка компилятора AMD Zen 5 для GCC — подтверждают новые функции AVX и многое другое» . www.phoronix.com . Проверено 10 февраля 2024 г.
- ^ Манн, Тобиас (15 августа 2023 г.). «Intel AVX10 обещает преимущества AVX-512 без багажа» . www.theregister.com . Проверено 20 августа 2023 г.
- ^ «Конвергентный вектор ISA: Технический документ Intel® Advanced Vector Extensions 10» . Интел .
- ^ Jump up to: а б с «Спецификация архитектуры Intel® Advanced Vector Extensions 10 (Intel® AVX10)» . Интел .
- ^ «Спецификация архитектуры Intel® Advanced Performance Extensions (Intel® APX)» . Интел.
- ^ Робинсон, Дэн (26 июля 2023 г.). «Intel раскрывает x86 и векторные инструкции для будущих чипов» . www.theregister.com . Проверено 20 августа 2023 г.
- ^ «Линукс-рейд» . ЛВН. 17 февраля 2013 г. Архивировано из оригинала 15 апреля 2013 г.
- ^ «Сравнение реализаций криптографической библиотеки BSAFE» . 25 июля 2023 г.
- ^ «Улучшение производительности OpenSSL» . 26 мая 2015 года . Проверено 28 февраля 2017 г.
- ^ «Примечания к выпуску OpenSSL 3.0.0» . Гитхаб . 7 сентября 2021 г.
- ^ Ярош, Милан; Стракош, Петр; Ржиха, Любомир (28 мая 2022 г.). «Рендеринг в Blender с использованием векторизации AVX-512» (PDF) . Группа пользователей Intel eXtreme Performance . Технический университет Остравы . Проверено 28 октября 2022 г.
- ^ «MASSIVE X требует AVX-совместимого процессора» . Родные инструменты . Проверено 29 ноября 2019 г.
- ^ «dav1d: производительность и завершение первого релиза» . 21 ноября 2018 года . Проверено 22 ноября 2018 г.
- ^ «Примечания к выпуску dav1d 0.6.0» . 6 марта 2020 г.
- ^ «Примечания к выпуску SVT-AV1 0.7.0» . 26 сентября 2019 г.
- ^ «Системные требования ArcGIS Data Store 11.2» . ArcGIS Enterprise . Проверено 24 января 2024 г.
- ^ «Примечания к выпуску Prime95» . Проверено 10 июля 2022 г.
- ^ «Эйнштейн@Домашние приложения» .
- ^ «Часто задаваемые вопросы, Гелиос» . Гелиос . Проверено 5 июля 2021 г.
- ^ «Тензорный поток 1.6» . Гитхаб .
- ^ Новое в версии 19.0 — EmEditor (текстовый редактор)
- ^ «Требования к оборудованию для Microsoft Teams» . Майкрософт . Проверено 17 апреля 2020 г.
- ^ «Уменьшите фоновый шум на собраниях Teams» . Поддержка Майкрософт . Проверено 5 января 2021 г.
- ^ Лэнгдейл, Джефф; Лемир, Дэниел (2019). «Разбор гигабайт JSON в секунду». Журнал ВЛДБ . 28 (6): 941–960. arXiv : 1902.08318 . дои : 10.1007/s00778-019-00578-5 . S2CID 67856679 .
- ^ «Примечания к выпуску simdjson 2.1.0» . Гитхаб . 30 июня 2022 г.
- ^ Ларабель, Майкл (6 октября 2023 г.). «OpenJDK объединяет x86-simd-sort от Intel для ускорения сортировки данных в 7–15 раз» . Фороникс .
- ^ Ларабель, Майкл (7 июля 2022 г.). «Движок Tesseract OCR 5.2 добился успеха с AVX-512F» . Фороникс .
- ^ Jump up to: а б Лемир, Дэниел (7 сентября 2018 г.). «AVX-512: когда и как использовать эти новые инструкции» . Блог Дэниела Лемира .
- ^ БиОнРопе. «Инструкции SIMD, понижающие частоту процессора» . Переполнение стека .
- ^ Jump up to: а б Даунс, Трэвис (19 августа 2020 г.). «Понижение частоты Ice Lake AVX-512» . Блог «Производительность имеет значение» .
- ^ «Производительность x86 — AVX 512 и AVX2 для простых циклов обработки массивов» . Переполнение стека .
- ^ «Руководство по разгону утилиты Intel® Extreme Tuning Utility (Intel® XTU): Расширенная настройка» . Интел . Проверено 18 июля 2021 г.
См. изображение в связанном разделе, где для коэффициента AVX2 установлено значение 0.