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 →