Interested Article - AVX

Advanced Vector Extensions (AVX) — расширение системы команд x86 для микропроцессоров Intel и AMD , предложенное Intel в марте 2008.

AVX предоставляет различные улучшения, новые инструкции и новую схему кодирования машинных кодов.

Улучшения

  • Новая схема кодирования инструкций
  • Ширина векторных регистров SIMD увеличивается с 128 ( XMM ) до 256 бит (регистры YMM0 — YMM15). Существующие 128-битные SSE -инструкции будут использовать младшую половину новых YMM-регистров, не изменяя старшую часть. Для работы с YMM-регистрами добавлены новые 256-битные AVX-инструкции. В будущем возможно расширение векторных регистров SIMD до 512 или 1024 бит. Например, процессоры с архитектурой Xeon Phi уже в 2012 году имели векторные регистры ( ) шириной в 512 бит , и используют для работы с ними SIMD-команды с MVEX- и VEX-префиксами, но при этом они не поддерживают AVX. [ источник не указан 2945 дней ]
  • Неразрушающие операции. Набор AVX-инструкций использует трёхоперандный синтаксис. Например, вместо можно использовать , при этом регистр остаётся неизменённым. В случаях, когда значение используется дальше в вычислениях, это повышает производительность, так как избавляет от необходимости сохранять перед вычислением и восстанавливать после вычисления регистр, содержавший , из другого регистра или памяти.
  • Для большинства новых инструкций отсутствуют требования к выравниванию операндов в памяти. Однако рекомендуется следить за выравниванием на размер операнда во избежание значительного снижения производительности.
  • Набор инструкций AVX содержит в себе аналоги 128-битных SSE -инструкций для вещественных чисел. При этом, в отличие от оригиналов, сохранение 128-битного результата будет обнулять старшую половину YMM-регистра. 128-битные AVX-инструкции сохраняют прочие преимущества AVX, такие как новая схема кодирования, трехоперандный синтаксис и невыровненный доступ к памяти.
  • Intel рекомендует отказаться от старых SSE -инструкций в пользу новых 128-битных AVX-инструкций, даже если достаточно двух операндов. .

Новая схема кодирования

Новая схема кодирования инструкций использует VEX-префикс. В настоящий момент существуют два VEX-префикса, длиной 2 и 3 байта. Для 2-байтного VEX-префикса первый байт равен 0xC5, для 3-байтного — 0xC4.

В 64-битном режиме первый байт VEX-префикса уникален. В 32-битном режиме возникает конфликт с инструкциями LES и LDS, который разрешается старшим битом второго байта, он имеет значение только в 64-битном режиме, через неподдерживаемые формы инструкций LES и LDS.

Длина существующих AVX-инструкций, вместе с VEX-префиксом, не превышает 11 байт. В следующих версиях ожидается появление более длинных инструкций.

Новые инструкции

Инструкция Описание
VBROADCASTSS, VBROADCASTSD, VBROADCASTF128 Копирует 32-, 64- или 128-битный операнд из памяти во все элементы векторного регистра XMM или YMM.
VINSERTF128 Замещает младшую или старшую половину 256-битного регистра YMM значением 128-битного операнда. Другая часть регистра-получателя не изменяется.
VEXTRACTF128 Извлекает младшую или старшую половину 256-битного регистра YMM и копирует в 128-битный операнд-назначение.
VMASKMOVPS, VMASKMOVPD Условно считывает любое количество элементов из векторного операнда из памяти в регистр-получатель, оставляя остальные элементы несчитанными и обнуляя соответствующие им элементы регистра-получателя. Также может условно записывать любое количество элементов из векторного регистра в векторный операнд в памяти, оставляя остальные элементы операнда памяти неизменёнными.
VPERMILPS, VPERMILPD Переставляет 32- или 64-битные элементы вектора согласно операнду-селектору (из памяти или из регистра).
VPERM2F128 Переставляет 4 128-битных элемента двух 256-битных регистров в 256-битный операнд-назначение с использованием непосредственной константы (imm) в качестве селектора.
VZEROALL Обнуляет все YMM-регистры и помечает их как неиспользуемые. Используется при переключении между 128-битным режимом и 256-битным.
VZEROUPPER Обнуляет старшие половины всех регистров YMM. Используется при переключении между 128-битным режимом и 256-битным.

Также в спецификации 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, released on June 9, 2009.
  • Windows 7: поддержка добавлена в Service Pack 1
  • Windows Server 2008 R2: поддержка добавлена в Service Pack 1

Микропроцессоры с AVX

  • Intel :
    • Процессоры с микроархитектурой Sandy Bridge , 2011.
    • Процессоры с микроархитектурой Ivy Bridge , 2012.
    • Процессоры с микроархитектурой Haswell , 2013.
    • Процессоры с микроархитектурой Broadwell , 2015.
    • Процессоры с микроархитектурой Skylake , 2015.
    • Процессоры с микроархитектурой Kaby Lake , 2017.
    • Процессоры с микроархитектурой Coffee Lake , 2017.
  • AMD :
    • Процессоры с микроархитектурой Bulldozer , 2011.
    • Процессоры с микроархитектурой , 2012.
    • Процессоры с микроархитектурой , 2014.
    • Процессоры с микроархитектурой , 2015.
    • Процессоры с микроархитектурой Zen , 2017.
    • Процессоры с микроархитектурой Zen 2 , 2019.
    • Процессоры с микроархитектурой Zen 3 , 2020.
    • Процессоры с микроархитектурой Zen 4 , 2022.

Совместимость между реализациями Intel и AMD обсуждается в этой статье .

Микропроцессоры с AVX2

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 регистрами.

Используeтся в Intel Xeon Phi (ранее Intel MIC ) (версия AVX3.1), Intel , Intel Ice Lake , Intel Tiger Lake , Intel Rocket Lake . Также поддержка AVX-512 имеется в производительных ядрах Golden Cove процессоров Intel Alder Lake , однако энергоэффективные ядра Gracemont её лишены. По состоянию на декабрь 2021 г. поддержка AVX-512 для потребительских процессоров Alder Lake официально не заявляется.

Будущие расширения

Схема кодирования инструкций легко допускает дальнейшее расширение набора инструкций AVX. В следующей версии, AVX2, добавлены инструкции для работы с целыми числами, FMA3 (увеличил производительность при обработке чисел с плавающей запятой в 2 раза ), загрузку распределенного в памяти вектора (gather) и прочее.

Различные планируемые дополнения системы команд x86 :

В серверных процессорах поколения Broadwell добавлены расширения AVX 3.1, а в серверных процессорах поколения Skylake — AVX 3.2.

Примечания

  1. . Дата обращения: 24 июня 2016. 6 мая 2019 года.
  2. . Архивировано из 11 мая 2013 года.
  3. . Дата обращения: 19 июля 2012. 16 июня 2012 года.
  4. . Дата обращения: 24 июня 2016. 7 августа 2016 года.
  5. . Дата обращения: 7 января 2014. 7 января 2014 года.
  6. . Дата обращения: 13 июля 2009. Архивировано из 5 апреля 2012 года.
  7. . Дата обращения: 13 июля 2009. Архивировано из 5 апреля 2012 года.
  8. . Microsoft. Дата обращения: 29 января 2011. Архивировано из 5 апреля 2012 года.
  9. . ExtremeTech (17 марта 2008). 7 июня 2011 года.
  10. . Dave Christie, AMD Developer blogs (7 мая 2009). Дата обращения: 8 мая 2009. Архивировано из 5 апреля 2012 года.
  11. . Дата обращения: 14 ноября 2012. Архивировано из 31 октября 2012 года.
  12. James Reinders (23 July 2013), , Intel , из оригинала 31 марта 2015 , Дата обращения: 20 августа 2013 . Дата обращения: 18 ноября 2013. Архивировано 31 марта 2015 года.
  13. Dr Ian Cutress, Andrei Frumusanu. . www.anandtech.com . Дата обращения: 23 декабря 2021. 4 января 2022 года.
  14. (англ.) . www.intel.com . Дата обращения: 23 декабря 2021.

Ссылки

  • (pdf) (англ.)
  • (рус.)
  • (рус.)
Источник —

Same as AVX