AVX

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

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 бит. Например, процессоры с архитектурой Larrabee уже имеют векторные регистры (ZMM) шириной в 512 бит, и используют для работы с ними SIMD команды с MVEX и VEX префиксами, но при этом они не поддерживают AVX. [2]
  • Неразрушающие операции. Набор AVX инструкций использует трёхоперандный синтаксис. Например, вместо a=a+b можно использовать c=a+b, при этом регистр a остаётся неизменённым. В случаях, когда значение a используется дальше в вычислениях, это повышает производительность, так как избавляет от необходимости сохранять перед вычислением и восстанавливать после вычисления регистр, содержавший a, из другого регистра или памяти.
  • Для большинства новых инструкций отсутствуют требования к выравниванию операндов в памяти. Однако рекомендуется следить за выравниванием на размер операнда, во избежание значительного снижения производительности.[3]
  • Набор инструкций AVX содержит в себе аналоги 128-битных SSE инструкций для вещественных чисел. При этом, в отличие от оригиналов, сохранение 128-битного результата будет обнулять старшую половину YMM регистра. 128-битные AVX инструкции сохраняют прочие преимущества AVX, такие как новая схема кодирования, трехоперандный синтаксис и невыровненный доступ к памяти.
  • Производитель процессоров рекомендут отказаться от старых SSE инструкций в пользу новых 128-битных AVX инструкций, даже если достаточно двух операндов.[4]. Сo скрытым умыслом создания программной несовместимости новых версий ПО - со старыми архитектурами, вынуждая пользователей ПК производить очередной Upgrade.

Новая схема кодирования[править | править вики-текст]

Новая схема кодирования инструкций VEX использует VEX префикс. В настоящий момент существуют два VEX префикса, длиной 2 и 3 байта. Для 2-х байтного VEX префикса первый байт равен 0xC5, для 3-х байтного 0xC4. В 64-битном режиме первый байт VEX префикса уникален. В 32-битном режиме возникает конфликт с инструкциями LES и LDS, который разрешается старшим битом второго байта, он имеет значение только в 64-битном режиме, через неподдерживаемые формы инструкций LES и LDS.[5] Длина существующих 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,[7] released on June 9, 2009.[8]
  • Windows 7: поддержка добавлена в Service Pack 1 [9]
  • Windows Server 2008 R2: поддержка добавлена в Service Pack 1 [9]

Микропроцессоры с AVX[править | править вики-текст]

  • Intel
    • Процессоры с микроархитектурой Sandy Bridge, 2011.[10]
    • Процессоры с микроархитектурой Ivy Bridge, 2012.
  • AMD:
    • Процессоры с микроархитектурой Bulldozer, 2011.[11]
    • Процессоры с микроархитектурой Piledriver, 2012.

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

Микропроцессоры с AVX2[править | править вики-текст]

AVX512[править | править вики-текст]

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

Используются в Intel Xeon Phi (ранее Intel MIC) Knights Landing (версия AVX3.1).[13]

Будущие расширения[править | править вики-текст]

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

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

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

Примечания[править | править вики-текст]

  1. Intel Software Network. Intel. Проверено 5 апреля 2008. Архивировано из первоисточника 6 апреля 2012.
  2. Intel® Xeon Phi™ Coprocessor Instruction Set Architecture Reference Manual. Архивировано из первоисточника 11 мая 2013.
  3. Introduction to Intel® Advanced Vector Extensions - Intel® Software Network
  4. Questions about AVX - Intel® Software Network
  5. Introduction to Intel® Ad ... - Intel® Software Network
  6. Intel® AVX optimization in Intel® MKL
  7. x86: add linux kernel support for YMM state. Проверено 13 июля 2009. Архивировано из первоисточника 6 апреля 2012.
  8. Linux 2.6.30 - Linux Kernel Newbies. Проверено 13 июля 2009. Архивировано из первоисточника 6 апреля 2012.
  9. 1 2 Enable Windows 7 Support for Intel AVX. Microsoft. Проверено 29 января 2011. Архивировано из первоисточника 6 апреля 2012.
  10. Intel Offers Peek at Nehalem and Larrabee(недоступная ссылка — история). ExtremeTech (March 17, 2008). Архивировано из первоисточника 7 июня 2011.
  11. Striking a balance. Dave Christie, AMD Developer blogs (May 7, 2009). Проверено 8 мая 2009. Архивировано из первоисточника 6 апреля 2012.
  12. 1 2 More details on the future AVX instruction set 2.0 | Tech News Pedia
  13. 1 2 James Reinders (23 July 2013), «AVX-512 Instructions», Intel, <http://software.intel.com/en-us/blogs/2013/avx-512-instructions>. Проверено 20 августа 2013. 

Ссылки[править | править вики-текст]


Наборы расширения базовых инструкций процессоров семейства x86
MMX | MMXEXT | SSE | SSE2 | SSE3 | SSSE3 | SSE4 | ATA | 3DNow! | 3DNowExt | SSE5 | AVX | AES | FMA