Открыть сервисСервис

AVX2 — расширение набора инструкций x86

AVX2 (Advanced Vector Extensions 2) — расширение набора инструкций процессоров архитектуры x86-64, разработанное компанией Intel и впервые представленное в 2013 году. Расширение расширяет возможности AVX (появившегося в 2011 году), добавляя 256-битные целочисленные SIMD-инструкции, операции с векторами общего назначения и улучшенные инструкции для работы с битовыми масками. AVX2 является обязательным компонентом набора инструкций AVX-512 и входит в состав всех современных процессоров Intel (начиная с микроархитектуры Haswell, 2013 год) и AMD (начиная с микроархитектуры Excavator, 2015 год, и массово — с Zen, 2017 год).

История и разработка

Работа над AVX2 началась после выхода AVX в 2011 году. Первоначально расширение планировалось под названием AVX2, однако в ходе разработки оно получило рабочее обозначение Haswell New Instructions (Haswell New Instructions, HNI), поскольку его дебют был привязан к выходу микроархитектуры Haswell в 2013 году. Спецификация AVX2 была опубликована Intel в 2013 году одновременно с выходом первых процессоров Haswell.

Ключевой мотивацией разработки стало расширение возможностей SIMD-программирования за счёт целочисленных операций. Первоначальный AVX был ориентирован преимущественно на операции с плавающей точкой, что ограничивало его применимость в задачах обработки изображений, криптографии, сжатия данных и других областях, где требуется работа с целыми числами.

Технические особенности

AVX2 расширяет набор инструкций AVX следующим образом:

  • Целочисленные 256-битные SIMD-операции — арифметические, логические и сравнительные операции над векторами целых чисел шириной 256 бит (например, четыре 64-битных или восемь 32-битных целых чисел).
  • Шифтовые операции — сдвиги целочисленных векторов на переменное количество бит, что ранее было доступно только для векторов плавающей точки.
  • Gather-инструкции — загрузка данных из памяти по индексам, хранящимся в векторном регистре (например, VPGATHERDD, VPGATHERQD). Это позволяет эффективно реализовывать таблицы поиска и разреженные операции над массивами.
  • Битовые операции — VANDPS, VORPS, VXORPS и аналогичные инструкции для целочисленных векторов.
  • Улучшенные инструкции перемещения и конкатенации — VPERM2I128, VPBLENDD и другие.

Все 256-битные регистры YMM используются полностью; при работе с целыми числами старшие 128 бит регистра YMM используются так же, как и младшие. Это отличает AVX2 от AVX, где целочисленные операции ограничивались 128-битными XMM-регистрами.

Поддержка в процессорах

ПроизводительМикроархитектураГод выхода
IntelHaswell, Broadwell и новее2013
AMDExcavator (частично), Zen и новее2015–2017
VIAZhaoxin (некоторые модели)2019+

В мобильных и серверных процессорах обеих компаний поддержка AVX2 стала стандартом начиная с поколения 2017 года. Некоторые процессоры AMD семейства Zen (Ryzen первого поколения) официально поддерживают AVX2, однако при работе с 256-битными инструкциями используют два 128-битных конвейера, что снижает производительность по сравнению с Intel.

Применение

AVX2 активно используется в следующих областях:

  • Мультимедиа и обработка изображений — кодирование и декодирование видео (H.264, H.265, AV1), фильтрация, преобразования цветовых пространств.
  • Криптография — алгоритмы AES, SHA, ChaCha20 и другие получают значительное ускорение за счёт целочисленных SIMD-операций.
  • Машинное обучение — инференс нейронных сетей, особенно в фреймворках, использующих собственные SIMD-реализации (например, в компонентах TensorFlow и PyTorch).
  • Сжатие данных — алгоритмы LZ4, Zstandard, brotli.
  • Игры и графика — физические расчёты, генерация геометрии, обработка звука.

Программная поддержка

Для использования AVX2 доступны инструменты всех основных компиляторов: GCC (начиная с версии 4.7), Clang, Microsoft Visual C++ (с опцией /arch:AVX2). В GCC и Clang инструкции AVX2 включаются через атрибут target("avx2") или флаг -mavx2. Большинство стандартных библиотек (например, glibc) содержат специализированные реализации функций для процессоров с поддержкой AVX2, выбираемые автоматически во время выполнения.

Для определения поддержки AVX2 программно используется инструкция CPUID с функциональным номером 7, подфункцией 0, EBX-бит 5.

AVX2 и AVX-512

AVX2 является промежуточным этапом между AVX и AVX-512. В отличие от AVX-512, использующего 512-битные регистры ZMM и маскирующие регистры k0–k7, AVX2 работает только с 256-битными регистрами YMM. Процессоры с поддержкой AVX-512 также поддерживают AVX2. Практическое значение AVX2 сохраняется в связи с тем, что ряд процессоров (например, AMD Zen 1–Zen 3 и некоторые поколения Intel) не поддерживают AVX-512, а энергопотребление 512-битных инструкций выше.

Источники

  • Intel 64 and IA-32 Architectures Software Developer's Manual
  • Agner Fog — Instruction Tables
  • AMD64 Architecture Programmer's Manual
  • LLVM Language Reference Manual
  • GCC x86 Built-in Functions Documentation
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru