AVX2
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
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.
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).
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
Ł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 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.
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
Intel wprowadza AVX w mikroarchitekturze Sandy Bridge (Q1 2011): 256-bitowe rejestry YMM i kodowanie VEX, ale operacje całkowitoliczbowe pozostają 128-bitowe.
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.
AMD dodaje obsługę AVX2 w mikroarchitekturze Excavator (Q2 2015), a następnie w rodzinie Zen.
Pierwsza sprzętowa implementacja AVX-512 (zaproponowanego przez Intela w lipcu 2013) rozszerza wektory SIMD do 512 bitów, stanowiąc następcę AVX2.
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
SIMD: pojedyncza instrukcja operuje gęsto na wielu elementach danych w 256-bitowym rejestrze YMM (np. 8× float32 lub 32× int8).
Równoległość
Równoległość na poziomie danych (SIMD) — jedna instrukcja przetwarza do 8 float32 / 32 int8 jednocześnie w obrębie rdzenia CPU.
Wymagania sprzętowe
AVX2 jest rozszerzeniem instrukcji x86 wykonywanym natywnie przez jednostki wektorowe CPU (Intel od Haswell 2013, AMD od Excavator 2015).