Advanced Vector Extensions (AVX) — расширение системы команд x86 для микропроцессоровIntel и AMD, предложенное Intel в марте 2008.[1]
AVX предоставляет различные улучшения, новые инструкции и новую схему кодирования машинных кодов.
Улучшения
- Новая схема кодирования инструкций VEX
- Ширина векторных регистров SIMD увеличивается с 128 (XMM) до 256 бит (регистры YMM0 — YMM15). Существующие 128-битные SSE-инструкции будут использовать младшую половину новых YMM-регистров, не изменяя старшую часть. Для работы с YMM-регистрами добавлены новые 256-битные AVX-инструкции. В будущем возможно расширение векторных регистров SIMD до 512 или 1024 бит. Например, процессоры с архитектурой Xeon Phi уже в 2012 году имели векторные регистры (ZMM) шириной в 512 бит[2], и используют для работы с ними SIMD-команды с MVEX- и VEX-префиксами, но при этом они не поддерживают AVX. [источник не указан 3769 дней]
- Неразрушающие операции. Набор AVX-инструкций использует трёхоперандный синтаксис. Например, вместо можно использовать , при этом регистр остаётся неизменённым. В случаях, когда значение используется дальше в вычислениях, это повышает производительность, так как избавляет от необходимости сохранять перед вычислением и восстанавливать после вычисления регистр, содержавший , из другого регистра или памяти.
- Для большинства новых инструкций отсутствуют требования к выравниванию операндов в памяти. Однако рекомендуется следить за выравниванием на размер операнда во избежание значительного снижения производительности.[3]
- Набор инструкций AVX содержит в себе аналоги 128-битных SSE-инструкций для вещественных чисел. При этом, в отличие от оригиналов, сохранение 128-битного результата будет обнулять старшую половину YMM-регистра. 128-битные AVX-инструкции сохраняют прочие преимущества AVX, такие как новая схема кодирования, трехоперандный синтаксис и невыровненный доступ к памяти.
- Intel рекомендует отказаться от старых SSE-инструкций в пользу новых 128-битных AVX-инструкций, даже если достаточно двух операндов.[4].
Новая схема кодирования
Новая схема кодирования инструкций VEX использует VEX-префикс. В настоящий момент существуют два VEX-префикса, длиной 2 и 3 байта. Для 2-байтного VEX-префикса первый байт равен 0xC5, для 3-байтного — 0xC4.
В 64-битном режиме первый байт VEX-префикса уникален. В 32-битном режиме возникает конфликт с инструкциями LES и LDS, который разрешается старшим битом второго байта, он имеет значение только в 64-битном режиме, через неподдерживаемые формы инструкций LES и LDS.[3]
Длина существующих AVX-инструкций, вместе с VEX-префиксом, не превышает 11 байт. В следующих версиях ожидается появление более длинных инструкций.
Новые инструкции
Также в спецификации AVX описана группа инструкций PCLMUL (Parallel Carry-Less Multiplication, Parallel CLMUL)
- PCLMULLQLQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 00]
- PCLMULHQLQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 01]
- PCLMULLQHQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 02]
- PCLMULHQHQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 03]
- PCLMULQDQ xmmreg, xmmrm, imm [rmi: 66 0f 3a 44 /r ib]
Применение
Подходит для интенсивных вычислений с плавающей точкой в мультимедиа-программах и научных задачах. Там, где возможна более высокая степень параллелизма, увеличивает производительность с вещественными числами.
Поддержка
Поддержка в операционных системах
Использование YMM-регистров требует поддержки со стороны операционной системы. Следующие системы поддерживают регистры YMM:
- Linux: с версии ядра 2.6.30,[6] released on June 9, 2009.[7]
- Windows 7: поддержка добавлена в Service Pack 1[8]
- Windows Server 2008 R2: поддержка добавлена в Service Pack 1[8]
Микропроцессоры с AVX
- Intel:
- Процессоры с микроархитектурой Sandy Bridge, 2011.[9]
- Процессоры с микроархитектурой Ivy Bridge, 2012.
- Процессоры с микроархитектурой Haswell, 2013.
- Процессоры с микроархитектурой Broadwell, 2015.
- Процессоры с микроархитектурой Skylake, 2015.
- Процессоры с микроархитектурой Kaby Lake, 2017.
- Процессоры с микроархитектурой Coffee Lake, 2017.
- AMD:
- Процессоры с микроархитектурой Bulldozer, 2011.[10]
- Процессоры с микроархитектурой Piledriver, 2012.
- Процессоры с микроархитектурой Steamroller, 2014.
- Процессоры с микроархитектурой Excavator, 2015.
- Процессоры с микроархитектурой Zen, 2017.
- Процессоры с микроархитектурой Zen 2, 2019.
- Процессоры с микроархитектурой Zen 3, 2020.
- Процессоры с микроархитектурой Zen 4, 2022.
Совместимость между реализациями Intel и AMD обсуждается в этой статье.
Микропроцессоры с AVX2
- IntelHaswell[11]
- IntelBroadwell
- IntelSkylake
- IntelKaby Lake
- IntelCoffee Lake
- IntelComet Lake
- IntelRocket Lake
- IntelAlder Lake
- AMDExcavator
- AMD Zen (AMD Ryzen)
- AMD Zen 2 (AMD Ryzen)
- AMD Zen 3 (AMD Ryzen)
AVX-512
AVX-512 расширяет систему команд AVX до векторов длиной 512 бит при помощи кодировки с префиксом EVEX. Расширение AVX-512 вводит 32 векторных регистра (ZMM), каждый по 512 бит, 8 регистров масок, 512-разрядные упакованные форматы для целых и дробных чисел и операции над ними, тонкое управление режимами округления (позволяет переопределить глобальные настройки), операции broadcast (рассылка информации из одного элемента регистра в другие), подавление ошибок в операциях с дробными числами, операции gather/scatter (сборка и рассылка элементов векторного регистра в/из нескольких адресов памяти), быстрые математические операции, компактное кодирование больших смещений. AVX-512 предлагает совместимость с AVX, в том смысле, что программа может использовать инструкции как AVX, так и AVX-512 без снижения производительности. Регистры AVX (YMM0-YMM15) отображаются на младшие части регистров AVX-512 (ZMM0-ZMM15), по аналогии с SSE и AVX регистрами.[12]
Используeтся в Intel Xeon Phi (ранее Intel MIC) Knights Landing (версия AVX3.1), Intel Skylake-X,[12] Intel Ice Lake, Intel Tiger Lake, Intel Rocket Lake. Также поддержка AVX-512 имеется в производительных ядрах Golden Cove[13] процессоров Intel Alder Lake, однако энергоэффективные ядра Gracemont её лишены. По состоянию на декабрь 2021 г. поддержка AVX-512 для потребительских процессоров Alder Lake официально не заявляется.[14]
Будущие расширения
Схема кодирования инструкций VEX легко допускает дальнейшее расширение набора инструкций AVX. В следующей версии, AVX2, добавлены инструкции для работы с целыми числами, FMA3 (увеличил производительность при обработке чисел с плавающей запятой в 2 раза[11]), загрузку распределенного в памяти вектора (gather) и прочее.
Различные планируемые дополнения системы команд x86:
В серверных процессорах поколения Broadwell добавлены расширения AVX 3.1, а в серверных процессорах поколения Skylake — AVX 3.2.
Примечания
- ↑ISA Extensions | Intel® Software. Дата обращения: 24 июня 2016. Архивировано 6 мая 2019 года.
- ↑Intel® Xeon Phi™ Coprocessor Instruction Set Architecture Reference Manual. Архивировано из оригинала 11 мая 2013 года.
- ↑ 12Introduction to Intel® Advanced Vector Extensions — Intel® Software Network. Дата обращения: 19 июля 2012. Архивировано 16 июня 2012 года.
- ↑Questions about AVX — Intel® Software Network. Дата обращения: 24 июня 2016. Архивировано 7 августа 2016 года.
- ↑Intel® AVX optimization in Intel® MKL. Дата обращения: 7 января 2014. Архивировано 7 января 2014 года.
- ↑x86: add linux kernel support for YMM state. Дата обращения: 13 июля 2009. Архивировано из оригинала 5 апреля 2012 года.
- ↑Linux 2.6.30 - Linux Kernel Newbies. Дата обращения: 13 июля 2009. Архивировано из оригинала 5 апреля 2012 года.
- ↑ 12Enable Windows 7 Support for Intel AVX. Microsoft. Дата обращения: 29 января 2011. Архивировано из оригинала 5 апреля 2012 года.
- ↑Intel Offers Peek at Nehalem and Larrabee. ExtremeTech (17 марта 2008). Архивировано из оригинала 7 июня 2011 года.
- ↑Striking a balance. Dave Christie, AMD Developer blogs (7 мая 2009). Дата обращения: 8 мая 2009. Архивировано из оригинала 5 апреля 2012 года.
- ↑ 12More details on the future AVX instruction set 2.0 | Tech News Pedia. Дата обращения: 14 ноября 2012. Архивировано из оригинала 31 октября 2012 года.
- ↑ 12James Reinders (23 июля 2013), AVX-512 Instructions, Intel, Архивировано 31 марта 2015, Дата обращения: 20 августа 2013Источник. Дата обращения: 18 ноября 2013. Архивировано 31 марта 2015 года.
- ↑Dr Ian Cutress, Andrei Frumusanu.Intel Architecture Day 2021: Alder Lake, Golden Cove, and Gracemont Detailed. www.anandtech.com. Дата обращения: 23 декабря 2021. Архивировано 4 января 2022 года.
- ↑Product Specifications (англ.). www.intel.com. Дата обращения: 23 декабря 2021.