Robocikowo>ROBOCIKOWO
hardware

AVX2

2013AktywnyOpublikowano: 9 listopada 2026Aktualizacja: 9 listopada 2026Opublikowany
AVX2 (Advanced Vector Extensions 2, „Haswell New Instructions") to 256-bitowe rozszerzenie SIMD instrukcji x86 rozszerzające AVX o operacje na liczbach całkowitych, gather i (wraz z FMA3) mnożenie-akumulację — szeroko używane do akceleracji inferencji ML na CPU.
Kluczowa innowacja
Rozszerzenie większości wektorowych operacji na liczbach całkowitych z 128 do 256 bitów (rejestry YMM) oraz dodanie operacji gather, co w połączeniu z FMA3 pozwala wykonywać więcej mnożeń-akumulacji na takt i akcelerować inferencję ML na CPU bez dedykowanego sprzętu.
Kategoria
hardware
Poziom abstrakcji
Primitive
Poziom operacji
InferencjaUdostępnianieWdrożenie
Zastosowania
Inferencja LLM na CPU (np. llama.cpp)Przyspieszanie GEMM i iloczynów skalarnych (VPMADDWD, FMA3)Kwantyzowana inferencja ML (INT8/INT16)Obliczenia HPC i numeryczneKodeki audio/wideo i kompresjaPrzetwarzanie obrazu i sygnałów (wektoryzacja SIMD)

Jak działa

AVX2 operuje na szesnastu 256-bitowych rejestrach YMM (w trybie x86-64), z których każdy mieści np. 8 liczb float32, 4 float64 albo 32 wartości int8. W odróżnieniu od AVX, który dla operacji całkowitoliczbowych ograniczał się do 128 bitów, AVX2 rozszerza większość wektorowych instrukcji całkowitych na pełne 256 bitów. Instrukcja gather pozwala załadować elementy wektora z nieciągłych adresów pamięci (indeksowanie wektorem offsetów), co upraszcza wektoryzację rzadkich dostępów. Permutacje DWORD/QWORD i wektorowe przesunięcia o zmiennej liczbie bitów zwiększają elastyczność przetwarzania danych. Współwystępujące FMA3 łączy mnożenie i dodawanie w jednej instrukcji trójargumentowej (a ← a + b·c), podwajając efektywną przepustowość operacji zmiennoprzecinkowych. W jądrach ML całkowitoliczbowe iloczyny skalarne buduje się z instrukcji takich jak VPMADDWD, które mnożą pary 16-bitowych słów i poziomo akumulują wyniki do liczb 32-bitowych — podstawowy element kwantyzowanego GEMM w bibliotekach pokroju llama.cpp.

Rozwiązany problem

Obliczenia numeryczne i inferencja modeli ML na CPU są ograniczone przepustowością jednostek wektorowych. AVX2 podwaja szerokość wektorów całkowitoliczbowych (256 vs 128 bitów), dodaje gather do efektywnego dostępu do nieciągłych danych oraz — wraz z FMA3 — mnożenie-akumulację w jednym takcie, co przyspiesza GEMM, iloczyny skalarne i warstwy sieci neuronowych bez dedykowanego akceleratora.

Komponenty

Rejestry YMMPrzechowywanie operandów wektorowych

Szesnaście 256-bitowych rejestrów wektorowych (w trybie x86-64), mieszczących np. 8× float32, 4× float64 lub 32× int8; rozszerzenie rejestrów XMM/AVX do pełnej obsługi operacji całkowitoliczbowych.

Operacje całkowitoliczbowe 256-bitZwiększenie przepustowości operacji całkowitoliczbowych

Rozszerzenie większości wektorowych instrukcji całkowitoliczbowych SSE/AVX ze 128 do 256 bitów — kluczowa zmiana AVX2 względem AVX (który dla liczb całkowitych pozostawał 128-bitowy).

FMA3 (fused multiply-add)Mnożenie-akumulacja zmiennoprzecinkowa w jednym takcie

Trójargumentowe fused multiply-add (a ← a + b·c) w pojedynczej instrukcji. Formalnie osobne rozszerzenie z własną flagą CPUID, wprowadzone przez Intela w tej samej mikroarchitekturze Haswell i zwykle rozpatrywane razem z AVX2.

Oficjalna

Instrukcje gatherWektorowy dostęp do rozproszonych danych

Ładowanie elementów wektora z nieciągłych lokalizacji pamięci na podstawie wektora offsetów — upraszcza wektoryzację rzadkich lub indeksowanych dostępów do danych.

Permutacje i wektorowe przesunięciaReorganizacja i skalowanie danych w wektorze

Permutacje typu any-to-any o granulacji DWORD/QWORD oraz wektorowe przesunięcia o zmiennej liczbie bitów — elastyczne przetasowanie i skalowanie elementów w rejestrze.

VPMADDWDPrymityw całkowitoliczbowego iloczynu skalarnego

Instrukcja mnożąca pary 16-bitowych słów ze znakiem i poziomo akumulująca wyniki do liczb 32-bitowych; w formie VEX.256 (AVX2) stanowi podstawowy element całkowitoliczbowych iloczynów skalarnych i kwantyzowanego GEMM w jądrach inferencji ML.

Ewolucja

Oryginalny paper · 2013 · Intel Corporation
Intel Architecture Instruction Set Extensions Programming Reference (AVX2)
2011
Poprzednik — AVX (Sandy Bridge)

Intel wprowadza AVX w mikroarchitekturze Sandy Bridge (Q1 2011): 256-bitowe rejestry YMM i kodowanie VEX, ale operacje całkowitoliczbowe pozostają 128-bitowe.

2013
Premiera AVX2 — Haswell
Punkt przełomowy

Intel wprowadza AVX2 („Haswell New Instructions", Q2 2013): rozszerzenie operacji całkowitoliczbowych do 256 bitów, gather, permutacje i wektorowe przesunięcia; w tej samej mikroarchitekturze pojawia się FMA3.

2015
Wsparcie AMD — Excavator
Punkt przełomowy

AMD dodaje obsługę AVX2 w mikroarchitekturze Excavator (Q2 2015), a następnie w rodzinie Zen.

2016
Następca — AVX-512 (Knights Landing)

Pierwsza sprzętowa implementacja AVX-512 (zaproponowanego przez Intela w lipcu 2013) rozszerza wektory SIMD do 512 bitów, stanowiąc następcę AVX2.

2020
AVX2 w markach Celeron/Pentium — Tiger Lake

Procesory marek Celeron i Pentium zaczynają obsługiwać AVX2 od Tiger Lake (Q3 2020), domykając powszechną dostępność rozszerzenia na CPU Intela.

Paradygmat wykonania

Tryb główny
Gęsty

SIMD: pojedyncza instrukcja operuje gęsto na wielu elementach danych w 256-bitowym rejestrze YMM (np. 8× float32 lub 32× int8).

Równoległość

Poziom równoległości
W pełni równoległy

Równoległość na poziomie danych (SIMD) — jedna instrukcja przetwarza do 8 float32 / 32 int8 jednocześnie w obrębie rdzenia CPU.

Zakres
Inferencja

Wymagania sprzętowe

Podstawowe

AVX2 jest rozszerzeniem instrukcji x86 wykonywanym natywnie przez jednostki wektorowe CPU (Intel od Haswell 2013, AMD od Excavator 2015).