Расширенные векторные расширения - Advanced Vector Extensions
Расширенные векторные расширения (AVX, также известный как Новые пристройки Sandy Bridge) являются расширениями x86 архитектура набора команд за микропроцессоры из Intel и AMD предложенный Intel в марте 2008 г. и впервые поддержанный Intel с Песчаный Мост[1] поставка процессоров в первом квартале 2011 года, а затем AMD с Бульдозер[2] Процессор будет отправлен в третьем квартале 2011 года. AVX предоставляет новые функции, новые инструкции и новую схему кодирования.
AVX2 (также известный как Новые инструкции Haswell) расширяет большинство целочисленных команд до 256 бит и вводит объединенное умножение-накопление (FMA ) операции. Впервые они были поддержаны Intel с процессором Haswell, выпущенным в 2013 году.
AVX-512 расширяет поддержку AVX до 512-бит, используя новый Префикс EVEX кодирование, предложенное Intel в июле 2013 г. и впервые поддержанное Intel с Приземление рыцарей Процессор, поставленный в 2016 году.[3][4]
Расширенные векторные расширения
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 |
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 |
ЗММ11 | YMM11 | XMM11 |
ЗММ12 | YMM12 | XMM12 |
ZMM13 | YMM13 | XMM13 |
ЗММ14 | YMM14 | XMM14 |
ZMM15 | YMM15 | XMM15 |
ЗММ16 | YMM16 | XMM16 |
ЗММ17 | YMM17 | XMM17 |
ЗММ18 | YMM18 | XMM18 |
ЗММ19 | YMM19 | XMM19 |
ZMM20 | YMM20 | 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 инструкция, использующая обычную форму с двумя операндами а = а + б теперь можно использовать неразрушающую форму с тремя операндами с = а + Ь, сохраняя оба исходных операнда. Формат AVX с тремя операндами ограничен инструкциями с операндами SIMD (YMM) и не включает инструкции с регистрами общего назначения (например, EAX). Такая поддержка впервые появится в AVX2.[5]
В выравнивание требования к операндам памяти SIMD ослаблены.[6]
Новый Схема кодирования VEX вводит новый набор префиксов кода, который расширяет код операции пространство, позволяет командам иметь более двух операндов и позволяет регистрам векторов SIMD быть длиннее 128 бит. Префикс VEX также можно использовать в устаревших инструкциях SSE, придавая им форму с тремя операндами и повышая их эффективность взаимодействия с инструкциями AVX без необходимости использования VZEROUPPER и VZEROALL.
Инструкции AVX поддерживают как 128-битные, так и 256-битные SIMD. 128-битные версии могут быть полезны для улучшения старого кода без необходимости расширять векторизацию и избежать штрафов за переход от SSE к AVX, они также быстрее на некоторых ранних реализациях AMD AVX. Этот режим иногда называют AVX-128.[7]
Новые инструкции
Эти инструкции AVX являются дополнением к тем, которые являются 256-битными расширениями унаследованных 128-битных инструкций SSE; большинство из них можно использовать как для 128-битных, так и для 256-битных операндов.
Инструкция | Описание |
---|---|
VBROADCASTS , VBROADCASTSD , VBROADCASTF128 | Скопируйте 32-битный, 64-битный или 128-битный операнд памяти во все элементы векторного регистра XMM или YMM. |
VINSERTF128 | Заменяет нижнюю или верхнюю половину 256-битного регистра YMM на значение 128-битного исходного операнда. Другая половина пункта назначения не изменилась. |
VEXTRACTF128 | Извлекает нижнюю или верхнюю половину 256-битного регистра YMM и копирует значение в 128-битный целевой операнд. |
ВМАСКМОВПС , ВМАСКМОВПД | Условно считывает любое количество элементов из операнда векторной памяти SIMD в регистр назначения, оставляя остальные элементы вектора непрочитанными и устанавливая соответствующие элементы в регистре назначения на ноль. В качестве альтернативы, условно записывает любое количество элементов из операнда векторного регистра SIMD в векторный операнд памяти, оставляя оставшиеся элементы операнда памяти неизменными. В архитектуре процессора AMD Jaguar эта инструкция с операндом источника памяти занимает более 300 тактовых циклов, когда маска равна нулю, и в этом случае инструкция не должна делать ничего. Кажется, это недостаток дизайна.[8] |
ВПЕРМИЛПС , ВПЕРМИЛПД | Перестановка в переулке. Перемешайте 32-битные или 64-битные векторные элементы одного входного операнда. Это внутренние 256-битные инструкции, что означает, что они работают со всеми 256 битами с двумя отдельными 128-битными перетасовками, поэтому они не могут перемещаться по 128-битным дорожкам.[9] |
VPERM2F128 | Перемешайте четыре 128-битных векторных элемента двух 256-битных исходных операндов в 256-битный целевой операнд с непосредственной константой в качестве селектора. |
ВЗЕРОАЛЛ | Установите все регистры YMM в ноль и пометьте их как неиспользуемые. Используется при переключении между 128-битным использованием и 256-битным использованием. |
VZEROUPPER | Установите верхнюю половину всех регистров YMM в ноль. Используется при переключении между 128-битным использованием и 256-битным использованием. |
Процессоры с AVX
- Intel
- Песчаный Мост процессоров, 1 квартал 2011 г.[10]
- Сэнди Бридж E процессоров, 4 квартал 2011 г.[11]
- Ivy Bridge процессоров, 1 квартал 2012 г.
- Ivy Bridge E процессоров, 3 квартал 2013 г.
- Haswell процессоров, 2 квартал 2013 г.
- Haswell E процессоров, 3 квартал 2014 г.
- Broadwell процессоров, 4 квартал 2014 г.
- Skylake процессоров, 3 квартал 2015 г.
- Broadwell E процессоров, 2 квартал 2016 г.
- Kaby Lake процессоры, 3 квартал 2016 г. (ULV для мобильных устройств) / 1 квартал 2017 г. (настольные / мобильные)
- Skylake-X процессоров, второй квартал 2017 г.
- Coffee Lake процессоров, 4 квартал 2017 г.
- Cannon Lake процессоров, второй квартал 2018 г.
- Виски Лейк процессоров, Q3 2018
- Каскадное озеро процессоров, Q4 2018
- Ледяное озеро процессоров, Q3 2019
- Comet Lake процессоры (только Core и Xeon), 3 квартал 2019 г.
- Тигровое озеро (Под брендами Core, Pentium и Celeron[12]) процессоров, Q3 2020
- Ракетное озеро процессоры, 2021
- Ольховое озеро процессоры, 2021
Не все процессоры из перечисленных семейств поддерживают AVX. Как правило, процессоры с коммерческим наименованием Core i3 / i5 / i7 / i9 поддерживают их, а процессоры Pentium и Celeron - нет.
- AMD:
- На базе Ягуара процессоры и новее
- На основе пума процессоры и новее
- Переработчики "тяжелого оборудования"
- Бульдозерный процессоров, 4 квартал 2011 г.[13]
- Пиледривер на базе процессоров, 4 квартал 2012 г.[14]
- На базе парового катка процессоров, 1 квартал 2014 г.
- Экскаватор на базе процессоры и новее, 2015 г.
- На основе дзен процессоров, 1 квартал 2017 г.
- Zen + на основе процессоров, второй квартал 2018 г.
- Дзен 2 на основе процессоров, Q3 2019
- Дзен 3 процессоров, Q4 2020
Вопросы совместимости будущих процессоров Intel и AMD обсуждаются в разделе Набор инструкций XOP.
Поддержка компилятора и ассемблера
- Absoft поддерживает флаг -mavx.
- В Free Pascal компилятор поддерживает AVX и AVX2 с переключателями -CfAVX и -CfAVX2, начиная с версии 2.7.1.
- В Ассемблер GNU Функции встроенного ассемблера (GAS) поддерживают эти инструкции (доступные через GCC), как и примитивы Intel и встроенный ассемблер Intel (близко совместимый с GAS, хотя и более общий в его обработке локальных ссылок внутри встроенного кода).
- GCC начиная с версии 4.6 (хотя была ветка 4.3 с определенной поддержкой) и Intel Compiler Suite, начиная с версии 11.1, поддерживает AVX.
- В Открыть64 Версия компилятора 4.5.1 поддерживает AVX с флагом -mavx.
- PathScale поддерживает через флаг -mavx.
- В Векторный Паскаль компилятор поддерживает AVX через флаг -cpuAVX32.
- В Visual Studio 2010 /2012 компилятор поддерживает AVX через встроенный переключатель и / arch: AVX.
- Другие ассемблеры, такие как MASM Версия VS2010, YASM,[15] FASM, NASM и JWASM.
Поддержка операционной системы
AVX добавляет новое состояние регистра через файл регистров YMM шириной 256 бит, поэтому явное Операционная система требуется поддержка для правильного сохранения и восстановления расширенных регистров AVX между переключатели контекста. Следующие версии операционных систем поддерживают AVX:
- DragonFly BSD: поддержка добавлена в начале 2013 года.
- FreeBSD: поддержка добавлена в патче, представленном 21 января 2012 г.,[16] который был включен в стабильный выпуск 9.1[17]
- Linux: поддерживается с версии ядра 2.6.30,[18] выпущен 9 июня 2009 г.[19]
- macOS: поддержка добавлена в 10.6.8 (Снежный барс ) Обновить[20] выпущен 23 июня 2011 г.
- OpenBSD: поддержка добавлена 21 марта 2015 г.[21]
- Солярис: поддерживается в Solaris 10 Update 10 и Solaris 11
- Windows: поддерживается в Windows 7 SP1, Windows Server 2008 R2 SP1,[22] Windows 8, Windows 10
- Windows Server 2008 R2 SP1 с Hyper-V требует исправления для поддержки процессоров AMD AVX (серии Opteron 6200 и 4200), KB2568088
Расширенные векторные расширения 2
Advanced Vector Extensions 2 (AVX2), также известный как Новые инструкции Haswell,[5] является расширением набора инструкций AVX, представленного в Intel Микроархитектура Haswell. AVX2 вносит следующие дополнения:
- расширение большинства векторных целочисленных инструкций SSE и AVX до 256 бит
- трехоперандная универсальная битовая манипуляция и умножение
- Собирать поддержка, позволяющая загружать векторные элементы из несмежных ячеек памяти
- DWORD- и QWORD-гранулярность от любого к любому перестановки
- векторные сдвиги.
Иногда другое расширение, использующее другой флаг cpuid, считается частью AVX2; эти инструкции перечислены на отдельной странице, а не ниже:
- трехоперанд плавленый умножить-накопить поддержка (FMA3)
Новые инструкции
Инструкция | Описание |
---|---|
VBROADCASTS , 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-битных индексов и масштабирования. |
ВПМАСКМОВД , VPMASKMOVQ | Условно считывает любое количество элементов из операнда векторной памяти SIMD в регистр назначения, оставляя остальные элементы вектора непрочитанными и устанавливая соответствующие элементы в регистре назначения на ноль. В качестве альтернативы, условно записывает любое количество элементов из операнда векторного регистра SIMD в векторный операнд памяти, оставляя оставшиеся элементы операнда памяти неизменными. |
VPERMPS , VPERMD | Перемешайте восемь 32-битных векторных элементов одного 256-битного исходного операнда в 256-битный целевой операнд с регистром или операндом памяти в качестве селектора. |
ВПЕРМПД , VPERMQ | Перемешайте четыре 64-битных векторных элемента одного 256-битного исходного операнда в 256-битный целевой операнд с регистром или операндом памяти в качестве селектора. |
VPERM2I128 | Перемешайте (два из) четырех 128-битных векторных элементов два 256-битные исходные операнды в 256-битный целевой операнд с непосредственной константой в качестве селектора. |
VPBLENDD | Doubleword немедленная версия инструкций PBLEND от SSE4. |
VPSLLVD , VPSLLVQ | Сдвиг влево логичный. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
ВПСРЛВД , VPSRLVQ | Сдвиг вправо логичный. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
ВПСРАВД | Сдвиг вправо арифметически. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
Процессоры с AVX2
- Intel
- Haswell процессор (только под брендами Core и Xeon), 2 квартал 2013 г.
- Haswell E процессор, Q3 2014
- Broadwell процессор, 4 квартал 2014 г.
- Broadwell E процессор, Q3 2016
- Skylake процессор (только под брендами Core и Xeon), Q3 2015
- Kaby Lake процессор (только под брендами Core и Xeon), 3 квартал 2016 г. (ULV для мобильных устройств) / 1 квартал 2017 г. (настольные / мобильные)
- Skylake-X процессор, второй квартал 2017 г.
- Coffee Lake процессор (только под брендами Core и Xeon), 4 квартал 2017 г.
- Cannon Lake процессор, Q2 2018
- Каскадное озеро процессор, Q2 2019
- Ледяное озеро процессор, Q3 2019
- Comet Lake процессор (только под брендами Core и Xeon), Q3 2019
- Тигровое озеро (Под брендами Core, Pentium и Celeron[23]) процессор, Q3 2020
- Ракетное озеро процессор, 2021
- Ольховое озеро процессор, 2021
- AMD
- Экскаватор процессор и новее, 2 квартал 2015 г.
- Дзен процессор, Q1 2017
- Дзен + процессор, Q2 2018
- Дзен 2 процессор, Q3 2019
- Дзен 3 процессор, 2020
- ЧЕРЕЗ:
- Nano QuadCore
- Eden X4
AVX-512
AVX-512 являются 512-битными расширениями 256-битных инструкций SIMD Advanced Vector Extensions для архитектуры набора команд x86, предложенных Intel в июле 2013 года и поддерживаются Intel Приземление рыцарей процессор.[3]
Инструкция AVX-512 закодирована с новым Префикс EVEX. Он поддерживает 4 операнда, 7 новых 64-битных регистров маски операции, режим скалярной памяти с автоматическим широковещанием, явное управление округлением и сжатую память смещения. режим адресации. Ширина файла регистров увеличивается до 512 бит, а общее количество регистров увеличивается до 32 (регистры ZMM0-ZMM31) в режиме x86-64.
AVX-512 состоит из нескольких расширений, не все из которых должны поддерживаться всеми процессорами, их реализующими. Набор инструкций состоит из следующего:
- AVX-512 Foundation - добавляет несколько новых инструкций и расширяет большинство 32-битных и 64-битных инструкций SSE-SSE4.1 и AVX / AVX2 с плавающей запятой схемой кодирования EVEX для поддержки 512-битных регистров, масок операций, широковещательной передачи параметров и встроенное округление и контроль исключений
- Инструкции по обнаружению конфликтов AVX-512 (CD) - эффективное обнаружение конфликтов, позволяющее векторизовать больше циклов, поддерживается Knights Landing[3]
- AVX-512 Exponential and Reciprocal Instructions (ER) - экспоненциальные и взаимные операции, предназначенные для помощи в реализации трансцендентных операций, поддерживаемые Knights Landing[3]
- AVX-512 Prefetch Instructions (PF) - новые возможности предварительной выборки, поддерживаемые Knights Landing[3]
- AVX-512 Vector Length Extensions (VL) - расширяет большинство операций AVX-512 для работы с регистрами XMM (128-бит) и YMM (256-бит) (включая XMM16-XMM31 и YMM16-YMM31 в режиме x86-64)[24]
- AVX-512 Byte and Word Instructions (BW) - расширяет AVX-512 для охвата 8-битных и 16-битных целочисленных операций[24]
- AVX-512 Doubleword and Quadword Instructions (DQ) - улучшенные 32-битные и 64-битные целочисленные операции[24]
- AVX-512 Целое число Fused Multiply Add (IFMA) - сложение слитным умножением для 512-битных целых чисел.[25]:746
- AVX-512 Vector Byte Manipulation Instructions (VBMI) добавляет команды перестановки векторных байтов, которых нет в AVX-512BW.
- AVX-512 Векторные инструкции нейронной сети Word variable precision (4VNNIW) - векторные инструкции для глубокого обучения.
- AVX-512 Fused Multiply Accumulation Packed Single precision (4FMAPS) - векторные инструкции для глубокого обучения.
- VPOPCNTDQ - количество битов, установленных в 1.[26]
- VPCLMULQDQ - умножение четверных слов без переноса.[26]
- AVX-512 векторные инструкции нейронной сети (VNNI) - векторные инструкции для глубокого обучения.[26]
- AVX-512 Поле Галуа Новые инструкции (GFNI) - векторные инструкции для расчета Поле Галуа.[26]
- AVX-512 Векторные инструкции AES (VAES) - векторные инструкции для AES кодирование.[26]
- Инструкции по обработке векторных байтов AVX-512 2 (VBMI2) - загрузка, сохранение и объединение байтов / слов со сдвигом.[26]
- Битовые алгоритмы AVX-512 (BITALG) - байт / слово битовая манипуляция инструкции по расширению VPOPCNTDQ.[26]
Для всех реализаций требуется только расширение ядра 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).[25]:23
Процессоры с AVX-512
Подмножество AVX-512 | F | CD | ER | ПФ | 4 кадра | 4VNNIW | VL | DQ | BW | IFMA | VBMI | VBMI2 | VPOPCNTDQ | BITALG | ВННИ | VPCLMULQDQ | GFNI | VAES |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Intel Приземление рыцарей (2016) | да | да | Нет | |||||||||||||||
Intel Knights Mill (2017) | да | Нет | да | Нет | ||||||||||||||
Intel Скайлейк-СП, Skylake-X (2017) | Нет | да | Нет | |||||||||||||||
Intel Cannon Lake (2018) | да | Нет | ||||||||||||||||
Intel Каскадное озеро-СП (2019) | Нет | да | Нет | |||||||||||||||
Intel Ледяное озеро (2019) | да |
По состоянию на 2020 год нет процессоров AMD, поддерживающих AVX-512, и AMD еще не опубликовала планы поддержки AVX-512.
Компиляторы с поддержкой AVX-512
- GCC 4.9 и новее[28]
- Лязг 3.9 и новее[29]
- ICC 15.0.1 и новее[30]
- Компилятор Microsoft Visual Studio 2017 C ++[31]
- Java 9[32]
- Перейти 1.11[33]
- Юля[34][35]
Приложения
- Подходит для плавающая точка -интенсивные вычисления в мультимедийных, научных и финансовых приложениях (AVX2 добавляет поддержку целое число операции).
- Увеличивает параллелизм и пропускную способность с плавающей запятой SIMD расчеты.
- Уменьшает нагрузку на регистр за счет неразрушающих инструкций.
- Повышает производительность программного обеспечения Linux RAID (требуется AVX2, AVX недостаточно)[36]
Программного обеспечения
- StarCitizen (Игра) Начиная с версии 3.11 и далее минимальные требования StarCitizens были обновлены для использования AVX, игровой движок в настоящее время использует DirectX 11, но разрабатывает поддержку API Vulkan для использования в его модифицированном движке Lumberyard Engine.
- Блендер использует AVX2 в циклах движка рендеринга.
- Ботан использует как AVX, так и AVX2, когда они доступны, для ускорения некоторых алгоритмов, например ChaCha.
- Крипто ++ использует как AVX, так и AVX2, когда они доступны, для ускорения некоторых алгоритмов, таких как Salsa и ChaCha.
- OpenSSL использует криптографические функции, оптимизированные для AVX и AVX2, начиная с версии 1.0.2.[37] Эта поддержка также присутствует в различных клонах и форках, таких как LibreSSL.
- Prime95 / MPrime, программное обеспечение, используемое для GIMPS, начал пользоваться инструкциями AVX с версии 27.x.
- dav1d AV1 декодер может использовать AVX2 на поддерживаемых процессорах.[38]
- dnetc, программное обеспечение, используемое распределенный.net, имеет ядро AVX2, доступное для своего проекта RC5, и скоро выпустит его для своего проекта OGR-28.
- Эйнштейн @ Home использует AVX в некоторых из своих распределенных приложений, которые ищут гравитационные волны.[39]
- Складной @ дома использует AVX на вычислительных ядрах, реализованных с GROMACS библиотека.
- Горизонт: нулевой рассвет Использует AVX1 в Decima (игровом движке) и является движком, который использует игра.
- RPCS3, открытый исходный код PlayStation 3 эмулятор, использует AVX2 и AVX-512 инструкция по эмуляции игр для PS3.
- Интерфейс сетевого устройства IP-видео / аудио протокол, разработанный NewTek для производства прямых трансляций, использует AVX и AVX2 для повышения производительности.
- TensorFlow начиная с версии 1.6 и выше для тензорного потока требуется ЦП, поддерживающий как минимум AVX.[40]
- x264, x265 и VTM видеокодеры могут использовать AVX2 или AVX-512 для ускорения кодирования.
- Различные процессоры на базе криптовалюта майнеры (например, пуллер для Биткойн и Litecoin ) использовать AVX и AVX2 для различных процедур, связанных с криптографией, включая SHA-256 и зашифровать.
- libsodium использует AVX в реализации скалярного умножения для Подкрутка25519 и Ed25519 алгоритмы, AVX2 для BLAKE2b, Сальса20, ChaCha20, а также AVX2 и AVX-512 в реализации Аргон2 алгоритм.
- libvpx эталонная реализация кодировщика / декодера VP8 / VP9 с открытым исходным кодом, использует AVX2 или AVX-512, если они доступны.
- FFTW может использовать AVX, AVX2 и AVX-512, когда они доступны.
- LLVMpipe, программный рендерер OpenGL в Меса используя галлий и LLVM инфраструктуры, использует AVX2, если он доступен.
- glibc использует AVX2 (с FMA ) для оптимизированной реализации (т.е.
expf
,грех
,пух
,Атанф
,atan2f
) различных математических функций в libc. - Ядро Linux может использовать AVX или AVX2 вместе с AES-NI в качестве оптимизированной реализации AES-GCM криптографический алгоритм.
- Ядро Linux использует AVX или AVX2, если они доступны, в оптимизированной реализации нескольких других криптографических шифров: Камелия, CAST5, CAST6, Змея, Twofish, МОРУС-1280, и другие примитивы: Поли1305, SHA-1, SHA-256, SHA-512, ChaCha20.
- POCL, переносимый язык вычислений, который обеспечивает реализацию OpenCL, по возможности использует AVX, AVX2 и AVX512.
- .NET Core и .NET Framework может использовать AVX, AVX2 через общий
System.Numerics.Vectors
пространство имен. - .NET Core, начиная с версии 2.1 и более широко после версии 3.0 может напрямую использовать все встроенные функции AVX, AVX2 через
System.Runtime.Intrinsics.X86
пространство имен. - EmEditor 19.0 и выше использует AVX-2 для ускорения обработки.[41]
- Софтсинт Massive X от Native Instruments требует наличия AVX.[42]
- Команды Microsoft использует инструкции AVX2 для создания размытого или нестандартного фона позади участников видеочата.[43]
- simdjson а JSON библиотека синтаксического анализа использует AVX2 для повышения скорости декодирования.[44]
Разгон
Поскольку инструкции AVX шире и выделяют больше тепла, в процессорах Intel предусмотрены меры по снижению Турбо ускорение ограничение частоты при выполнении таких инструкций. Регулирование делится на три уровня:[45][46]
- L0 (100%): нормальный предел турбо ускорения.
- L1 (~ 85%): предел «усиления AVX». Мягкий запуск 256-битными «тяжелыми» инструкциями (единица с плавающей запятой: математика FP и целочисленное умножение). Жестко запускается "легкими" (всеми остальными) 512-битными инструкциями.
- L2 (~ 60%): Предел усиления AVX-512. Мягко запускается 512-битными тяжелыми инструкциями.
Частотный переход может быть мягким или жестким. Жесткий переход означает, что частота уменьшается, как только появляется такая инструкция; мягкий переход означает, что частота уменьшается только после достижения порогового числа совпадающих инструкций. Ограничение на поток.[45]
Понижение частоты означает, что использование AVX в смешанной рабочей нагрузке с процессором Intel может привести к снижению частоты, несмотря на то, что он быстрее в «чистом» контексте. Избегайте использования широких и тяжелых инструкций, чтобы свести к минимуму воздействие в этих случаях. AVX-512VL позволяет использовать 256-битные или 128-битные операнды в AVX-512, что делает его разумным по умолчанию для смешанных нагрузок.[47]
Смотрите также
- Расширения защиты памяти
- Масштабируемое векторное расширение для ARM - новый векторный набор инструкций (дополняющий VFP и НЕОН ) аналогичен AVX-512, но с некоторыми дополнительными функциями.
Рекомендации
- ^ Кантер, Дэвид (25 сентября 2010 г.). "Микроархитектура Intel Sandy Bridge". www.realworldtech.com. Получено 17 февраля, 2018.
- ^ Хруска, Джоэл (24 октября 2011 г.). «Анализируем Bulldozer: Почему чип AMD так разочаровывает - Страница 4 из 5 - ExtremeTech». ExtremeTech. Получено 17 февраля, 2018.
- ^ а б c d е Джеймс Рейндерс (23 июля 2013 г.), AVX-512 Инструкции, Intel, получено 20 августа, 2013
- ^ «Технические характеристики процессора Intel Xeon Phi 7210 (16 ГБ, 1,30 ГГц, 64 ядра)». Intel ARK (Технические характеристики). Получено 16 марта, 2018.
- ^ а б Теперь доступны описания новых инструкций Haswell, Software.intel.com, получено 17 января, 2012
- ^ "14.9". Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 Том 1: Базовая архитектура (PDF) (-051США ред.). Корпорация Intel. п. 349. Получено 23 августа, 2014.
Аргументы памяти для большинства инструкций с префиксом VEX работают нормально, не вызывая #GP (0) при любом выравнивании по байтам (в отличие от устаревших инструкций SSE).
- ^ «Параметры i386 и x86-64 - Использование коллекции компиляторов GNU (GCC)». Получено 9 февраля, 2014.
- ^ «Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов сборки и производителей компиляторов» (PDF). Получено 17 октября, 2016.
- ^ «Шахматное программирование AVX2». Получено 17 октября, 2016.
- ^ «Intel предлагает заглянуть в Nehalem и Larrabee». ExtremeTech. 17 марта 2008 г.
- ^ «Процессор Intel Core i7-3960X Extreme Edition». Получено 17 января, 2012.
- ^ "Процессор Intel® Celeron® 6305 (4 МБ кэш-памяти, 1,80 ГГц, с IPU) Технические характеристики продукции". ark.intel.com. Получено 10 ноября, 2020.
- ^ Дэйв Кристи (7 мая 2009 г.), Достижение баланса, Блоги разработчиков AMD, заархивированные с оригинал 9 ноября 2013 г., получено 17 января, 2012
- ^ Новые инструкции "Бульдозер" и "Пиледривер" (PDF), AMD, октябрь 2012 г.
- ^ «Примечания к выпуску 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, получено 13 июля, 2009
- ^ Twitter, получено 23 июня, 2010[ненадежный источник? ]
- ^ Добавьте поддержку сохранения / восстановления состояния FPU с помощью XSAVE / XRSTOR., получено 25 марта, 2015
- ^ Поддержка чисел с плавающей запятой для 64-битных драйверов, получено 6 декабря, 2009
- ^ "Процессор Intel® Celeron® 6305 (4 МБ кэш-памяти, 1,80 ГГц, с IPU) Технические характеристики продукции". ark.intel.com. Получено 10 ноября, 2020.
- ^ а б c Джеймс Рейндерс (17 июля 2014 г.). "Дополнительные инструкции AVX-512". Intel. Получено 3 августа, 2014.
- ^ а б «Справочник по программированию расширений набора команд архитектуры Intel» (PDF). Intel. Получено 29 января, 2014.
- ^ а б c d е ж грамм «Справочник по программированию расширений набора команд архитектуры Intel® и будущих функций». Intel. Получено 16 октября, 2017.
- ^ «Эмулятор разработки программного обеспечения Intel® | Программное обеспечение Intel®». software.intel.com. Получено 11 июня, 2016.
- ^ «Серия выпусков GCC 4.9 - Изменения, новые функции и исправления - Проект GNU - Фонд свободного программного обеспечения (FSF)». gcc.gnu.org. Получено 3 апреля, 2017.
- ^ «Примечания к выпуску LLVM 3.9 - документация LLVM 3.9». releases.llvm.org. Получено 3 апреля, 2017.
- ^ «Примечания к выпуску Intel® Parallel Studio XE 2015 Composer Edition C ++ | Программное обеспечение Intel®». software.intel.com. Получено 3 апреля, 2017.
- ^ «Microsoft Visual Studio 2017 поддерживает Intel® AVX-512».
- ^ «Примечания к выпуску JDK 9».
- ^ «Примечания к выпуску Go 1.11».
- ^ "Демистификация авто-векторизации в Julia". juliacomputing.com. 27 сентября 2017 г.. Получено 11 апреля, 2020.
- ^ "[ANN] LoopVectorization". JuliaLang. 1 января 2020 г.. Получено 11 апреля, 2020.
- ^ «Linux RAID». LWN. 17 февраля 2013 г. Архивировано с оригинал 15 апреля 2013 г.
- ^ «Повышение производительности OpenSSL». 26 мая 2015 года. Получено 28 февраля, 2017.
- ^ "dav1d: производительность и завершение первого выпуска". 21 ноября 2018 г.. Получено 22 ноября, 2018.
- ^ "Einstein @ Home Applications".
- ^ «Тензорфлоу 1.6».
- ^ Новое в версии 19.0 - EmEditor (текстовый редактор)
- ^ «MASSIVE X требует AVX-совместимого процессора». Родные инструменты. Получено 29 ноября, 2019.
- ^ «Требования к оборудованию для Microsoft Teams». Microsoft. Получено 17 апреля, 2020.
- ^ Лэнгдейл, Джефф; Лемир, Даниэль (2019). «Парсинг гигабайт JSON в секунду». arXiv:1902.08318 [cs.DB ].
- ^ а б Лемир, Даниэль. «AVX-512: когда и как использовать эти новые инструкции». Блог Дэниела Лемира.
- ^ BeeOnRope. «Инструкции SIMD, понижающие частоту процессора». Переполнение стека.
- ^ «производительность x86 - AVX 512 против AVX2 для простых циклов обработки массива». Переполнение стека.