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

AVX

AVX (расшифровывается как Advanced Vector Extensions, «расширенные векторные расширения») — это набор инструкций для микропроцессоров архитектуры x86, разработанный компанией Intel. Он предназначен для выполнения операций над векторами данных (SIMD — Single Instruction, Multiple Data), что позволяет значительно ускорить вычисления в задачах, требующих параллельной обработки больших массивов чисел, таких как научные расчёты, обработка сигналов, мультимедиа, криптография и машинное обучение. AVX является развитием более ранних SIMD-расширений (MMX, SSE) и впервые был реализован в процессорах Intel на микроархитектуре Sandy Bridge (2011 год).

История

Предпосылки и разработка

До появления AVX основным средством векторных вычислений в процессорах x86 были инструкции SSE (Streaming SIMD Extensions) и их последующие версии (SSE2, SSE3, SSSE3, SSE4). SSE работали с 128-битными регистрами (XMM). Однако к концу 2000-х годов потребности в производительности для задач высокопроизводительных вычислений (HPC) и обработки мультимедиа превысили возможности SSE. Intel начала разработку нового набора инструкций, который должен был:

  • Удвоить разрядность векторных регистров (до 256 бит).
  • Ввести новую систему кодирования инструкций (VEX prefix) для повышения эффективности и гибкости.
  • Обеспечить обратную совместимость с SSE.

Внедрение в процессорах

Первое поколение AVX (AVX1) было представлено в 2011 году с выходом процессоров Intel Sandy Bridge (для настольных ПК и серверов) и AMD Bulldozer (2011 год). AMD также поддержала AVX, начиная с микроархитектуры Bulldozer, что сделало набор кроссплатформенным для x86-совместимых процессоров.

Развитие: AVX2 и AVX-512

В 2013 году с микроархитектурой Intel Haswell был представлен AVX2, который расширил набор инструкций, добавив поддержку целочисленных операций над 256-битными векторами, а также новые инструкции для сбора (gather) и перемешивания (permute) данных. В 2017 году Intel начала внедрение AVX-512 — значительно более мощного набора, использующего 512-битные регистры (ZMM) и содержащего сотни новых инструкций. AVX-512 изначально предназначался для серверных процессоров Xeon Phi (Knights Landing) и Xeon Scalable, а затем появился и в потребительских процессорах (например, в Intel Core 10-го поколения и новее). Однако поддержка AVX-512 в массовых процессорах была нестабильной: в 2022 году Intel отключила её в процессорах 12-го поколения (Alder Lake) из-за проблем с совместимостью гибридной архитектуры, а затем частично вернула в 13-м поколении (Raptor Lake). В 2023 году AMD также анонсировала поддержку AVX-512 в своих процессорах Zen 4.

Классификация и версии

Набор инструкций AVX делится на несколько поколений, отличающихся разрядностью регистров, набором поддерживаемых операций и областью применения.

AVX (AVX1)

  • Разрядность регистров: 256 бит (YMM0–YMM15).
  • Типы данных: операции с плавающей запятой одинарной (32-бит) и двойной (64-бит) точности.
  • Основные особенности:
  • Введение трёхоперандной системы кодирования (VEX prefix), позволяющей выполнять операции вида a = b + c без потери исходных данных.
  • Поддержка неразрушающих операций (non-destructive).
  • Новые инструкции для перестановки, перемешивания и сравнения векторов.
  • Примеры инструкций: VADDPS (сложение упакованных чисел с плавающей запятой одинарной точности), VMULPD (умножение упакованных чисел двойной точности).

AVX2

  • Разрядность регистров: 256 бит.
  • Типы данных: добавлена поддержка целочисленных операций (8-, 16-, 32-, 64-битные целые).
  • Основные особенности:
  • Инструкции сбора (gather): VGATHERDPS — загрузка элементов из памяти по индексам.
  • Инструкции перемешивания (permute): VPERMD — произвольная перестановка 32-битных элементов.
  • Расширение векторных операций для целых чисел (например, VPMULLD — умножение 32-битных целых).
  • Примеры инструкций: VPMOVSXBW (расширение знака 16-битных целых до 32-битных), VPSHUFB (перестановка байтов).

AVX-512

  • Разрядность регистров: 512 бит (ZMM0–ZMM31).
  • Типы данных: все типы AVX2, плюс новые форматы (например, 16-битные числа с плавающей запятой).
  • Основные особенности:
  • Огромное количество инструкций (более 200), разделённых на подмножества (AVX-512F — фундаментальный набор, AVX-512CD — конфликт-детекция, AVX-512BW — байт/слово, AVX-512DQ — двойная/четверная точность, AVX-512VL — векторная длина, AVX-512IFMA — целочисленное умножение-накопление и др.).
  • Поддержка маскирования (masking): каждая инструкция может выполняться только для элементов, соответствующих битовой маске.
  • Встроенные операции для криптографии (например, инструкции для AES и SHA).
  • Примеры инструкций: VZEROUPPER (очистка верхней половины YMM/ZMM), VFMADD132PS (слитное умножение-сложение с плавающей запятой).

AVX10

В 2023 году Intel анонсировала AVX10 — новую версию, которая объединяет возможности AVX-512 с упрощённой архитектурой для гибридных процессоров (смесь больших и малых ядер). AVX10 гарантирует, что все ядра (P-cores и E-cores) будут поддерживать один и тот же набор инструкций, что решает проблему несовместимости, возникшей с AVX-512 в Alder Lake.

Архитектура и принцип работы

Регистры

AVX использует 256-битные векторные регистры YMM (YMM0–YMM15 в 64-битном режиме, YMM0–YMM31 в AVX-512). Каждый регистр может содержать:

  • 8 чисел с плавающей запятой одинарной точности (32 бита).
  • 4 числа с плавающей запятой двойной точности (64 бита).
  • 32 байта (256 бит) для целочисленных данных.

AVX-512 расширяет регистры до 512 бит (ZMM), что позволяет обрабатывать за одну инструкцию до 16 чисел одинарной точности или 8 чисел двойной точности.

Система кодирования VEX

AVX вводит новый префикс команд — VEX (Vector Extensions). Он позволяет:

  • Указывать три операнда в одной инструкции (например, VADDPS ymm1, ymm2, ymm3 — сложить ymm2 и ymm3, результат в ymm1).
  • Кодировать длину вектора (128 или 256 бит) и тип операции.
  • Обеспечивать обратную совместимость с SSE (инструкции SSE могут выполняться на тех же регистрах, но с дополнительными ограничениями).

SIMD-параллелизм

Основной принцип AVX — выполнение одной инструкции (например, сложения) над несколькими парами чисел одновременно. Это называется SIMD (Single Instruction, Multiple Data). Например, инструкция VADDPS за один такт складывает 8 пар 32-битных чисел с плавающей запятой, что даёт восьмикратное ускорение по сравнению с последовательным выполнением.

Применение

Научные и инженерные расчёты

AVX широко используется в программном обеспечении для моделирования физических процессов, вычислительной гидродинамики, квантовой химии и анализа данных. Библиотеки, такие как Intel Math Kernel Library (MKL) и AMD Core Math Library (ACML), активно применяют AVX для ускорения матричных операций, преобразований Фурье и решения систем линейных уравнений.

Обработка мультимедиа

  • Видео: кодеки (H.264, H.265, VP9, AV1) используют AVX для ускорения декодирования и кодирования видео, особенно в операциях с дискретным косинусным преобразованием (DCT) и компенсацией движения.
  • Аудио: обработка звука (фильтры, реверберация, сжатие) может быть векторизована с помощью AVX.
  • Изображения: фильтры, свёртки, преобразования цветовых пространств (например, из RGB в YUV) выполняются в несколько раз быстрее.

Машинное обучение и искусственный интеллект

AVX и AVX-512 используются для ускорения операций свёртки, умножения матриц и активаций в нейросетях. Фреймворки, такие как TensorFlow, PyTorch и ONNX Runtime, поддерживают AVX-512 через библиотеки Intel oneDNN (Deep Neural Network Library). Особенно эффективны инструкции AVX-512 для задач с плавающей запятой одинарной точности (FP32) и половинной точности (FP16).

Криптография

Некоторые инструкции AVX-512 (например, VAES, VPCLMULQDQ) напрямую ускоряют алгоритмы шифрования (AES) и хеширования (SHA-256, SHA-512). Это важно для серверов, обрабатывающих большие объёмы зашифрованных данных (SSL/TLS, VPN).

Компьютерные игры

Хотя AVX редко используется напрямую в игровых движках, он применяется в физических симуляциях (например, в PhysX или Havok) и в обработке звука. В некоторых играх (например, серия Assassin’s Creed) AVX используется для расчёта освещения и теней.

Производительность и ограничения

Преимущества

  • Ускорение: при правильной векторизации кода AVX может дать прирост производительности в 2–8 раз по сравнению с SSE, а AVX-512 — до 16 раз в идеальных условиях.
  • Энергоэффективность: выполнение одной инструкции над несколькими данными потребляет меньше энергии, чем несколько отдельных инструкций.

Недостатки

  • Тепловыделение: инструкции AVX, особенно AVX-512, вызывают значительное увеличение энергопотребления и температуры процессора. Для предотвращения перегрева процессоры снижают тактовую частоту (троттлинг) при выполнении тяжёлых AVX-нагрузок. Это может свести на нет выигрыш в производительности.
  • Совместимость: не все программы поддерживают AVX. Для использования AVX требуется компиляция с соответствующими флагами (например, -mavx, -mavx2, -mavx512f в GCC/Clang). Старые процессоры (до 2011 года) не поддерживают AVX.
  • Сложность программирования: эффективная векторизация требует глубокого понимания архитектуры и часто — ручного написания ассемблерного кода или использования интринсиков (intrinsics) — специальных функций, встраиваемых в код на C/C++.

Интересные факты

  • Первым процессором, поддерживающим AVX, стал Intel Core i7-2600K (Sandy Bridge), выпущенный в январе 2011 года.
  • В процессорах AMD Bulldozer поддержка AVX была реализована через два 128-битных блока, работающих в паре, что снижало производительность по сравнению с Intel.
  • AVX-512 изначально разрабатывался для суперкомпьютеров. Например, российский суперкомпьютер «Ломоносов-2» (МГУ) использует процессоры Intel Xeon Phi с AVX-512.
  • В 2022 году Intel отключила AVX-512 в процессорах Alder Lake из-за конфликта с гибридной архитектурой (P-cores и E-cores). Пользователи могли обойти это ограничение через BIOS, но Intel официально не рекомендовала это делать.
  • AMD в процессорах Zen 4 (Ryzen 7000) реализовала AVX-512 с использованием 256-битных блоков, обрабатывающих 512-битные данные за два такта, что позволило избежать проблем с тепловыделением.

Источники

  • Intel Corporation. «Intel® 64 and IA-32 Architectures Software Developer’s Manual». Volume 2: Instruction Set Reference.
  • AMD Corporation. «AMD64 Architecture Programmer’s Manual». Volume 4: 128-bit and 256-bit Media Instructions.
  • Agner Fog. «Instruction Tables: Lists of instruction latencies, throughputs and micro-operation breakdowns for Intel, AMD and VIA CPUs».
  • Intel Corporation. «Intel® Advanced Vector Extensions 10 (AVX10) Architecture Specification». 2023.
  • Документация GCC: «x86 Options» (флаги -mavx, -mavx2, -mavx512f).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →