Advanced Vector Extensions ( AVX , также известный как Sandy Bridge Новые Extensions ) являются расширениями x86 набор инструкций архитектуры для микропроцессоров от Intel и AMD , предложенный Intel в марте 2008 года , а первый при поддержке Intel с Sandy Bridge [1] процессор судоходства в Q1 2011 г. и позже AMD с процессором Bulldozer [2] , поставленным в третьем квартале 2011 г. AVX предоставляет новые функции, новые инструкции и новую схему кодирования.
AVX2 (также известный как Haswell New Instructions ) расширяет большинство целочисленных команд до 256 бит и вводит операции слитного умножения с накоплением ( FMA ). Впервые они были поддержаны Intel с процессором Haswell, выпущенным в 2013 году.
AVX-512 расширяет поддержку AVX до 512-бит, используя новую префиксную кодировку EVEX, предложенную Intel в июле 2013 года и впервые поддержанную Intel с процессором Knights Landing , который был поставлен в 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, называемый схемой кодирования 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, они также быстрее на некоторых ранних реализациях AMD AVX. Этот режим иногда называют 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-битный целевой операнд с непосредственной константой в качестве селектора. |
VZEROALL | Установите все регистры YMM в ноль и пометьте их как неиспользуемые. Используется при переключении между 128-битным использованием и 256-битным использованием. |
VZEROUPPER | Установите верхнюю половину всех регистров YMM в ноль. Используется при переключении между 128-битным использованием и 256-битным использованием. |
Процессоры с AVX
- Intel
- Процессоры Sandy Bridge , первый квартал 2011 г. [9]
- Процессоры Sandy Bridge E , четвертый квартал 2011 г. [10]
- Процессоры Ivy Bridge , первый квартал 2012 г.
- Процессоры Ivy Bridge E , третий квартал 2013 г.
- Процессоры Haswell , второй квартал 2013 г.
- Процессоры Haswell E , третий квартал 2014 г.
- Процессоры Broadwell , 4 квартал 2014 г.
- Процессоры Skylake , третий квартал 2015 г.
- Процессоры Broadwell E , второй квартал 2016 г.
- Процессоры Kaby Lake , 3 квартал 2016 г. (ULV для мобильных устройств) / 1 квартал 2017 г. (настольные / мобильные)
- Процессоры Skylake-X , второй квартал 2017 г.
- Процессоры Coffee Lake , 4 квартал 2017 г.
- Процессоры Cannon Lake , второй квартал 2018 г.
- Переработчики Whiskey Lake , третий квартал 2018 г.
- Процессоры Cascade Lake , 4 квартал 2018 г.
- Процессоры Ice Lake , третий квартал 2019 г.
- Процессоры Comet Lake (только под брендами Core и Xeon), третий квартал 2019 г.
- Процессоры Tiger Lake (Core, Pentium и Celeron [11] ), третий квартал 2020 г.
- Процессоры Rocket Lake , 2021 год
- Переработчики Alder Lake , 2021 г.
- Процессоры Gracemont , 2021 г.
Не все процессоры из перечисленных семейств поддерживают AVX. Как правило, процессоры с коммерческим наименованием Core i3 / i5 / i7 / i9 поддерживают их, а процессоры Pentium и Celeron - нет.
- AMD :
- Процессоры на базе Jaguar и новее
- Процессоры на базе Puma и новее
- Переработчики "тяжелого оборудования"
- Процессоры на базе бульдозеров , 4 квартал 2011 г. [12]
- Процессоры на базе Piledriver , 4 квартал 2012 г. [13]
- Процессоры на базе Steamroller , первый квартал 2014 г.
- Экскаваторные процессоры и новее, 2015 г.
- Процессоры на базе Zen , первый квартал 2017 г.
- Процессоры на базе Zen + , второй квартал 2018 г.
- Процессоры на базе Zen 2 , третий квартал 2019 г.
- Процессоры Zen 3 , четвертый квартал 2020 г.
Вопросы, касающиеся совместимости будущих процессоров Intel и AMD, обсуждаются в наборе инструкций XOP .
- ЧЕРЕЗ :
- Nano QuadCore
- Eden X4
- Чжаосинь :
- Процессоры на базе WuDaoKou (KX-5000 и KH-20000)
Поддержка компилятора и ассемблера
- Absoft поддерживает флаг -mavx.
- Free Pascal компилятор поддерживает AVX и AVX2 с -CfAVX и -CfAVX2 переключается с версии 2.7.1.
- Функции встроенного ассемблера GNU Assembler (GAS) поддерживают эти инструкции (доступные через GCC), как и примитивы Intel и встроенный ассемблер Intel (близко совместимый с GAS, хотя и более общий в его обработке локальных ссылок во встроенном коде).
- 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 / 2 012 компилятор поддерживает AVX с помощью внутреннего и / арочного: переключателя AVX.
- Другие ассемблеры, такие как версия MASM VS2010, YASM , [14] FASM , NASM и JWASM .
Поддержка операционной системы
AVX добавляет новое состояние регистра через 256-битный файл регистров YMM, поэтому для правильного сохранения и восстановления расширенных регистров AVX между переключениями контекста требуется явная поддержка операционной системы . Следующие версии операционных систем поддерживают AVX:
- DragonFly BSD : поддержка добавлена в начале 2013 года.
- FreeBSD : поддержка добавлена в патч, представленный 21 января 2012 г. [15], который был включен в стабильный выпуск 9.1 [16]
- Linux : поддерживается начиная с версии ядра 2.6.30 [17], выпущенной 9 июня 2009 г. [18]
- macOS : поддержка добавлена в обновлении 10.6.8 ( Snow Leopard ) [19], выпущенном 23 июня 2011 г.
- OpenBSD : поддержка добавлена 21 марта 2015 г. [20]
- Solaris : поддерживается в Solaris 10 Update 10 и Solaris 11
- Windows : поддерживается в Windows 7 SP1, Windows Server 2008 R2 SP1, [21] Windows 8 , Windows 10
- Windows Server 2008 R2 SP1 с Hyper-V требует исправления для поддержки процессоров AMD AVX (серии Opteron 6200 и 4200), KB2568088
Расширенные векторные расширения 2
Advanced Vector Extensions 2 (AVX2), также известный как Haswell Новые инструкции , [22] является расширение набора инструкций AVX , введенной в компании Intel Haswell микроархитектуры . AVX2 вносит следующие дополнения:
- расширение большинства векторных целочисленных инструкций SSE и AVX до 256 бит
- Получите поддержку, позволяющую загружать векторные элементы из несмежных ячеек памяти
- DWORD- и QWORD-гранулярность от любого к любому перестановки
- векторные сдвиги.
Иногда другое расширение, использующее другой флаг cpuid, считается частью AVX2; эти инструкции перечислены на отдельной странице, а не ниже:
- трехоперандная объединенная поддержка умножения с накоплением (FMA3)
Новые инструкции
Инструкция | Описание |
---|---|
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 | Doubleword немедленная версия инструкций PBLEND из SSE4 . |
VPSLLVD , VPSLLVQ | Сдвиг влево логичный. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
VPSRLVD , VPSRLVQ | Сдвиг вправо логичный. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
VPSRAVD | Сдвиг вправо арифметически. Допускает переменные сдвиги, при которых каждый элемент сдвигается в соответствии с упакованным вводом. |
Процессоры с AVX2
- Intel
- Процессор Haswell (только под брендами Core и Xeon), второй квартал 2013 г.
- Процессор Haswell E , третий квартал 2014 г.
- Процессор Broadwell , 4 квартал 2014 г.
- Процессор Broadwell E , третий квартал 2016 г.
- Процессор Skylake (только под брендами Core и Xeon), третий квартал 2015 г.
- Процессор Kaby Lake (только под брендами Core и Xeon), третий квартал 2016 года (ULV для мобильных устройств) / первый квартал 2017 года (настольные и мобильные)
- Процессор Skylake-X , второй квартал 2017 г.
- Процессор Coffee Lake (только под брендами Core и Xeon), 4 квартал 2017 г.
- Процессор Cannon Lake , второй квартал 2018 г.
- Процессор Cascade Lake , второй квартал 2019 г.
- Процессор Ice Lake , третий квартал 2019 г.
- Процессор Comet Lake (только под брендами Core и Xeon), третий квартал 2019 г.
- Процессор Tiger Lake (Core, Pentium и Celeron [11] ), третий квартал 2020 г.
- Процессор Rocket Lake , 2021 год
- Переработчик Alder Lake , 2021 г.
- Процессоры Gracemont , 2021 г.
- AMD
- Экскаваторный процессор и новее, второй квартал 2015 г.
- Процессор Zen , первый квартал 2017 г.
- Процессор Zen + , второй квартал 2018 г.
- Процессор Zen 2 , третий квартал 2019 г.
- Процессор Zen 3 , 2020 г.
- ЧЕРЕЗ :
- Nano QuadCore
- Eden 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 - добавляет несколько новых инструкций и расширяет большинство 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) [ 23]
- AVX-512 Byte and Word Instructions (BW) - расширяет AVX-512 для охвата 8-битных и 16-битных целочисленных операций [23]
- AVX-512 Doubleword and Quadword Instructions (DQ) - улучшенные 32-битные и 64-битные целочисленные операции [23]
- AVX-512 Integer Fused Multiply Add (IFMA) - объединенное сложение умножения для 512-битных целых чисел. [24] : 746
- AVX-512 Vector Byte Manipulation Instructions (VBMI) добавляет команды перестановки векторных байтов, которых нет в AVX-512BW.
- AVX-512 Vector Neural Network Instructions Word variable precision (4VNNIW) - векторные инструкции для глубокого обучения.
- AVX-512 Fused Multiply Accumulation Packed Single precision (4FMAPS) - векторные инструкции для глубокого обучения.
- VPOPCNTDQ - количество битов установлено на 1. [25]
- VPCLMULQDQ - умножение четверных слов без переноса. [25]
- AVX-512 Vector Neural Network Instructions (VNNI) - векторные инструкции для глубокого обучения. [25]
- AVX-512 Поле Галуа New Instructions (GFNI) - векторные инструкции для вычисления поля Галуа . [25]
- AVX-512 Векторные инструкции AES (VAES) - векторные инструкции для кодирования AES . [25]
- AVX-512 Vector Byte Manipulation Instructions 2 (VBMI2) - загрузка байта / слова, сохранение и объединение со сдвигом. [25]
- AVX-512 Bit Algorithms (BITALG) - инструкции по манипулированию битами байтов / слов, расширяющие VPOPCNTDQ. [25]
Для всех реализаций требуется только расширение ядра 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). [24] : 23
Процессоры с AVX-512
Подмножество AVX-512 | F | CD | ER | ПФ | 4 кадра | 4VNNIW | VL | DQ | BW | IFMA | VBMI | VBMI2 | VPOPCNTDQ | BITALG | ВННИ | VPCLMULQDQ | GFNI | VAES | VP2INTERSECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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) | да | ||||||||||||||||||
Intel Tiger Lake (2020 г.) | да | ||||||||||||||||||
Intel Rocket Lake (2021 год) | Нет |
[26]
Компиляторы, поддерживающие AVX-512
- GCC 4.9 и новее [27]
- Clang 3.9 и новее [28]
- ICC 15.0.1 и новее [29]
- Компилятор Microsoft Visual Studio 2017 C ++ [30]
- Java 9 [31]
- Перейти 1.11 [32]
- Юлия [33] [34]
Приложения
- Подходит для вычислений с большим объемом операций с плавающей запятой в мультимедийных, научных и финансовых приложениях (в AVX2 добавлена поддержка целочисленных операций).
- Увеличивает параллелизм и пропускную способность в вычислениях SIMD с плавающей запятой .
- Уменьшает нагрузку на регистр за счет неразрушающих инструкций.
- Повышает производительность программного обеспечения Linux RAID (требуется AVX2, AVX недостаточно) [35]
Программное обеспечение
- Blender использует AVX, AVX2 и AVX-512 в циклах движка рендеринга. [36]
- Bloombase использует AVX, AVX2 и AVX-512 в своем криптографическом модуле Bloombase (BCM).
- Botan использует как AVX, так и AVX2, когда они доступны, для ускорения некоторых алгоритмов, например ChaCha.
- Crypto ++ использует как 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.
- Einstein @ Home использует AVX в некоторых из своих распределенных приложений, которые ищут гравитационные волны . [39]
- Folding @ home использует AVX на вычислительных ядрах, реализованных с помощью библиотеки GROMACS .
- Horizon: Zero Dawn использует AVX1 в своем игровом движке Decima.
- RPCS3 , эмулятор PlayStation 3 с открытым исходным кодом, использует инструкции AVX2 и AVX-512 для эмуляции игр для PS3.
- Интерфейс сетевого устройства , IP-видео / аудиопротокол, разработанный NewTek для производства прямых трансляций, использует AVX и AVX2 для повышения производительности.
- TensorFlow, начиная с версии 1.6, и tenorflow более поздних версий требует, чтобы ЦП поддерживал как минимум AVX. [40]
- Видеокодеры x264 , x265 и VTM могут использовать AVX2 или AVX-512 для ускорения кодирования.
- Различные майнеры криптовалюты на базе ЦП (например, cpuminer pooler для биткойнов и Litecoin ) используют AVX и AVX2 для различных процедур, связанных с криптографией, включая SHA-256 и scrypt .
- libsodium использует AVX в реализации скалярного умножения для алгоритмов Curve25519 и Ed25519 , AVX2 для BLAKE2b , Salsa20 , ChaCha20 , а также AVX2 и AVX-512 в реализации алгоритма Argon2 .
- Эталонная реализация кодировщика / декодера VP8 / VP9 с открытым исходным кодом libvpx , использует AVX2 или AVX-512, если они доступны.
- FFTW может использовать AVX, AVX2 и AVX-512, когда они доступны.
- LLVMpipe, программный модуль рендеринга OpenGL в Mesa, использующий инфраструктуру Gallium и LLVM , использует AVX2, когда он доступен.
- Glibc использует AVX2 (с FMA ) для оптимизированной реализации (т.е.
expf
,sinf
,powf
,atanf
,atan2f
) различных математических функций в LIBC . - Ядро Linux может использовать AVX или AVX2 вместе с AES-NI в качестве оптимизированной реализации криптографического алгоритма AES-GCM .
- Ядро Linux использует AVX или AVX2, когда они доступны, в оптимизированной реализации нескольких других криптографических шифров: Camellia , CAST5 , CAST6 , Serpent , Twofish , MORUS-1280 и других примитивов: Poly1305 , 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 Teams использует инструкции AVX2 для создания размытого или настраиваемого фона позади участников видеочата [43] и для подавления фонового шума. [44]
- simdjson библиотека синтаксического анализа JSON использует AVX2 для повышения скорости декодирования. [45]
Разгон
Поскольку инструкции AVX шире и выделяют больше тепла, в некоторых процессорах Intel предусмотрены меры по снижению предельной частоты Turbo Boost при выполнении таких инструкций. В Skylake и его производных дросселирование разделено на три уровня: [46] [47]
- L0 (100%): нормальный предел турбо наддува.
- L1 (~ 85%): предел «усиления AVX». Мягко запускается 256-битными «тяжелыми» (единица с плавающей запятой: математика FP и целочисленное умножение) инструкциями. Жестко запускается "легкими" (всеми остальными) 512-битными инструкциями.
- L2 (~ 60%): Предел «ускорения AVX-512». Мягкий запуск с помощью 512-битных тяжелых инструкций.
Частотный переход может быть мягким или жестким. Жесткий переход означает, что частота уменьшается, как только появляется такая инструкция; мягкий переход означает, что частота уменьшается только после достижения порогового количества совпадающих инструкций. Ограничение на поток. [46]
В Ice Lake сохраняются только два уровня: [48]
- L0 (100%): нормальный предел турбо наддува.
- L1 (~ 97%): запускается любыми 512-битными инструкциями, но только при активном одноядерном ускорении; не срабатывает при загрузке нескольких ядер.
Процессоры Rocket Lake не запускают снижение частоты при выполнении любых векторных инструкций независимо от размера вектора. [48] Тем не менее, снижение частоты все же может произойти по другим причинам, например, по достижению предельных значений температуры и мощности.
Понижение частоты означает, что использование AVX в смешанной рабочей нагрузке с процессором Intel может привести к снижению частоты, несмотря на то, что он быстрее в «чистом» контексте. Избегание использования широких и тяжелых инструкций поможет свести к минимуму воздействие в этих случаях. AVX-512VL позволяет использовать 256-битные или 128-битные операнды в AVX-512, что делает его разумным по умолчанию для смешанных нагрузок. [49]
Смотрите также
- Расширения защиты памяти
- Scalable Vector Extension for ARM - новый набор векторных команд (дополняющий VFP и NEON ), аналогичный AVX-512, с некоторыми дополнительными функциями.
Рекомендации
- ↑ Кантер, Дэвид (25 сентября 2010 г.). "Микроархитектура Intel Sandy Bridge" . www.realworldtech.com . Проверено 17 февраля 2018 года .
- ^ Хруска, Джоэл (24 октября 2011 г.). «Анализируем Bulldozer: Почему чип AMD так разочаровывает - Страница 4 из 5 - ExtremeTech» . ExtremeTech . Проверено 17 февраля 2018 года .
- ^ а б в г д Джеймс Рейндерс (23 июля 2013 г.), инструкции AVX-512 , Intel , получено 20 августа 2013 г.
- ^ «Технические характеристики процессора Intel Xeon Phi 7210 (16 ГБ, 1,30 ГГц, 64 ядра)» . Intel ARK (Технические характеристики) . Проверено 16 марта 2018 года .
- ^ «14,9». Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32 Том 1: Базовая архитектура (PDF) (-051US ed.). Корпорация Intel. п. 349 . Проверено 23 августа 2014 года .
Аргументы памяти для большинства инструкций с префиксом VEX работают нормально, не вызывая #GP (0) при любом выравнивании по байтам (в отличие от устаревших инструкций SSE).
- ^ «Параметры i386 и x86-64 - Использование коллекции компиляторов GNU (GCC)» . Проверено 9 февраля 2014 года .
- ^ «Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов на ассемблере и разработчиков компиляторов» (PDF) . Проверено 17 октября, 2016 .
- ^ «Шахматное программирование AVX2» . Архивировано из оригинала 10 июля 2017 года . Проверено 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 Kernel Newbies , получено 13 июля 2009 г.
- ^ Twitter , получено 23 июня 2010 г.[ ненадежный источник? ]
- ^ Добавьте поддержку сохранения / восстановления состояния FPU с помощью XSAVE / XRSTOR. , получено 25 марта 2015 г.
- ^ Поддержка чисел с плавающей запятой для 64-битных драйверов , получено 6 декабря 2009 г.
- ^ Теперь доступны описания новых инструкций Haswell , Software.intel.com , получено 17 января 2012 г.
- ^ а б в Джеймс Рейндерс (17 июля 2014 г.). «Дополнительные инструкции AVX-512» . Intel . Проверено 3 августа 2014 года .
- ^ а б «Справочник по программированию расширений набора команд архитектуры Intel» (PDF) . Intel . Проверено 29 января 2014 года .
- ^ Б с д е е г «Справочник по программированию расширений набора команд архитектуры 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» .
- ^ «Демистификация авто-векторизации в Джулии» . juliacomputing.com . 27 сентября 2017 года . Проверено 11 апреля 2020 года .
- ^ «[ANN] LoopVectorization» . JuliaLang . 1 января 2020 . Проверено 11 апреля 2020 года .
- ^ «Linux RAID» . LWN. 17 февраля 2013 г. Архивировано из оригинального 15 апреля 2013 года .
- ^ https://www.ixpug.org/documents/1520629330Jaros-IXPUG-CINECABlender5.pdf
- ^ «Повышение производительности OpenSSL» . 26 мая 2015 года . Проверено 28 февраля 2017 года .
- ^ «dav1d: производительность и завершение первого релиза» . 21 ноября 2018 . Проверено 22 ноября 2018 года .
- ^ «Приложения Einstein @ Home» .
- ^ «Тензорфлоу 1.6» .
- ^ Новое в версии 19.0 - EmEditor (текстовый редактор)
- ^ «MASSIVE X требует AVX-совместимого процессора» . Родные инструменты . Проверено 29 ноября 2019 года .
- ^ «Требования к оборудованию для Microsoft Teams» . Microsoft . Проверено 17 апреля 2020 года .
- ^ «Уменьшите фоновый шум на собраниях команд» . Служба поддержки Microsoft . Проверено 5 января 2021 года .
- ^ Лэнгдейл, Джефф; Лемир, Даниэль (2019). «Разбор гигабайт JSON в секунду». Журнал VLDB . 28 (6): 941–960. arXiv : 1902.08318 . DOI : 10.1007 / s00778-019-00578-5 . S2CID 67856679 .
- ^ а б Лемир, Даниэль. «AVX-512: когда и как использовать эти новые инструкции» . Блог Даниэля Лемира .
- ^ BeeOnRope. «Инструкции SIMD, понижающие частоту процессора» . Переполнение стека .
- ^ а б Даунс, Трэвис. «Разгон Ice Lake AVX-512» . Блог, посвященный вопросам производительности .
- ^ «Производительность x86 - AVX 512 по сравнению с AVX2 для простых циклов обработки массива» . Переполнение стека .
Внешние ссылки
- Руководство Intel по внутренним функциям
- Справочное руководство по языку ассемблера x86