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]

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

Новая схема кодирования инструкций 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,[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.
  • AMD:
    • Процессоры с микроархитектурой Bulldozer, 2011.[10]
    • Процессоры с микроархитектурой Piledriver, 2012.

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

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

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

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

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

Примечания [править]

  1. Intel Software Network. Intel. Архивировано из первоисточника 6 апреля 2012. Проверено 5 апреля 2008.
  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. x86: add linux kernel support for YMM state. Архивировано из первоисточника 6 апреля 2012. Проверено 13 июля 2009.
  7. Linux 2.6.30 - Linux Kernel Newbies. Архивировано из первоисточника 6 апреля 2012. Проверено 13 июля 2009.
  8. 1 2 Enable Windows 7 Support for Intel AVX. Microsoft. Архивировано из первоисточника 6 апреля 2012. Проверено 29 января 2011.
  9. Intel Offers Peek at Nehalem and Larrabee(недоступная ссылка — история). ExtremeTech (March 17, 2008).
  10. Striking a balance. Dave Christie, AMD Developer blogs (May 7, 2009). Архивировано из первоисточника 6 апреля 2012. Проверено 8 мая 2009.
  11. 1 2 More details on the future AVX instruction set 2.0 | Tech News Pedia

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


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