- 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 бит.
- Неразрушающие операции. Набор AVX инструкций использует трёхоперандный синтаксис. Например, вместо
можно использовать
, при этом регистр
остаётся неизменённым. В случаях, когда значение
используется дальше в вычислениях, это повышает производительность, так как избавляет от необходимости сохранять перед вычислением и восстанавливать после вычисления регистр, содержавший
, из другого регистра или памяти.
- Для большинства новых инструкций отсутствуют требования к выравниванию операндов в памяти. Однако, рекомендуется следить за выравниванием на размер операнда, во избежание значительного снижения производительности.[2]
- Набор инструкций AVX содержит в себе аналоги 128-битных SSE инструкций для вещественных чисел. При этом, в отличие от оригиналов, сохранение 128-битного результата будет обнулять старшую половину YMM регистра. 128-битные AVX инструкции сохраняют прочие преимущества AVX, такие как, новая схема кодирования, трехоперандный синтаксис и невыровненный доступ к памяти. Рекомендуется отказаться от старых SSE инструкций в пользу новых 128-битных AVX инструкций, даже если достаточно двух операндов.[3]
Новая схема кодирования
Новая схема кодирования инструкций VEX использует VEX префикс. В настоящий момент существуют два VEX префикса, длиной 2 и 3 байта. Для 2-х байтного VEX префикса первый байт равен 0xC5, для 3-х байтного 0xC4. В 64-битном режиме первый байт VEX префикса уникален. В 32-битном режиме возникает конфликт с инструкциями LES и LDS, который разрешается старшим битом второго байта, он имеет значение только в 64-битном режиме, через неподдерживаемые формы инструкций LES и LDS.[4] Длина существующих 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,[5] released on June 9, 2009.[6]
- Windows 7: поддержка добавлена в Service Pack 1 [7]
- Windows Server 2008 R2: поддержка добавлена в Service Pack 1 [7]
Микропроцессоры с AVX
- Intel
- Процессоры с микроархитектурой Sandy Bridge, 2011.[8]
- Процессоры с микроархитектурой Ivy Bridge, 2012.
- AMD:
Совместимость между реализациями Intel и AMD обсуждается в XOP instruction set.
AVX2:
Будущие расширения
Схема кодирования инструкций VEX легко допускает дальнейшее расширение набора инструкций AVX. В следующей версии, AVX2, планируется добавить инструкции для работы с целыми числами, FMA3 (увеличит производительность при обработке чисел с плавающей запятой в 2 раза[10]), загрузку распределенного в памяти вектора (gather) и прочее.
Различные планируемые дополнения системы команд x86:
Примечания
- ↑ Intel Software Network. Intel. Архивировано из первоисточника 6 апреля 2012. Проверено 5 апреля 2008.
- ↑ Introduction to Intel® Advanced Vector Extensions - Intel® Software Network
- ↑ Questions about AVX - Intel® Software Network
- ↑ Introduction to Intel® Ad ... - Intel® Software Network
- ↑ x86: add linux kernel support for YMM state. Архивировано из первоисточника 6 апреля 2012. Проверено 13 июля 2009.
- ↑ Linux 2.6.30 - Linux Kernel Newbies. Архивировано из первоисточника 6 апреля 2012. Проверено 13 июля 2009.
- ↑ 1 2 Enable Windows 7 Support for Intel AVX. Microsoft. Архивировано из первоисточника 6 апреля 2012. Проверено 29 января 2011.
- ↑ Intel Offers Peek at Nehalem and Larrabee. ExtremeTech (March 17, 2008).(недоступная ссылка — история)
- ↑ Striking a balance. Dave Christie, AMD Developer blogs (May 7, 2009). Архивировано из первоисточника 6 апреля 2012. Проверено 8 мая 2009.
- ↑ 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 Категория:- Расширения архитектуры x86
Wikimedia Foundation. 2010.