📌 AVX
Advanced Vector Extensions AVX — расширение SIMD-инструкций для архитектуры x86_64, введённое компанией Intel в 2011 году. Расширяет возможности SSE за счёт 256-битных регистров YMM и новых инструкций для параллельной обработки данных.
🧠 Как работает
AVX расширяет количество и ширину SIMD-регистров:
- 16 × YMM регистров (256 бит) в 64-битных системах
- Каждое YMM содержит нижние 128 бит из XMM + верхние 128 бит
- AVX2 добавляет поддержку целочисленных операций (int8/16/32/64)
- AVX-512 — следующая ступень: ZMM регистры (512 бит), маскирование, расширенная арифметика
Инструкции AVX используют 3-операндную форму: C = A + B
Примеры: vmulps
, vaddpd
, vbroadcastss
, vperm2f128
⚙️ Где применяется
Область | Примеры |
---|---|
High-performance computing | Матрицы, векторизация, BLAS, линалг |
Machine Learning | Быстрое умножение и свёртка тензоров |
Cryptography | Многоблочная обработка потоков данных |
Multimedia | Кодеки, фильтры, преобразования |
Scientific computing | Физические симуляции, численные методы |
💻 Пример (на AVX)
#include <immintrin.h>
__m256 a = _mm256_set1_ps(3.0f);
__m256 b = _mm256_set_ps(8,7,6,5,4,3,2,1);
__m256 result = _mm256_add_ps(a, b); // 8 float-значений одновременно
📐 Сравнение регистров
Расширение | Регистр | Размер | Типы данных |
---|---|---|---|
SSE | XMM | 128 б | float, double, int32 |
AVX | YMM | 256 б | float, double |
AVX-512 | ZMM | 512 б | float, double, int |
🧬 Уровни AVX
Версия | Особенности |
---|---|
AVX | 256-бит, только float/double, 3 операнда |
AVX2 | Добавлены int8/16/32/64, FMA, permute |
AVX-512 | Маскирование, ZMM, расширенная логика |
✅ Преимущества
-
В 2× шире, чем SSE, выше пропускная способность
-
Эффективная векторизация без циклов
-
Расширяемость до AVX-512 с масками и ISA-расширениями
❌ Недостатки
-
Повышенное энергопотребление и нагрев CPU
-
Не поддерживается на всех процессорах (особенно AVX-512)
-
Требует выравнивания данных и генерации SIMD-кода