SVE
Jak działa
SVE nie koduje długości wektora na stałe w instrukcjach. Zamiast tego operacje działają na rejestrach Z o szerokości ustalonej dopiero sprzętowo (128–2048 bitów), a sterowanie pętlą opiera się na rejestrach predykatów P: predykat wyznacza, które linie (lane) wektora są aktywne w danej iteracji, co pozwala obsłużyć resztki pętli i warunki bez osobnego kodu skalarnego. Instrukcje takie jak WHILELT generują predykat na podstawie bieżącego indeksu i granicy pętli, a INCB/CNTB zwiększają licznik o (nieznaną w czasie kompilacji) długość wektora. Dodatkowo SVE udostępnia gather-load / scatter-store dla dostępu do rozproszonych adresów oraz FFR (First Fault Register) umożliwiający spekulatywne, odporne na błędy ładowania — kluczowe przy wektoryzacji pętli o nieznanej długości. Kompilatory (GCC, LLVM/Clang) generują kod SVE przez auto-wektoryzację lub programista używa intrinsics C; ten sam binarny kod wykorzystuje pełną szerokość rejestrów danego CPU. SVE2 (Armv9-A) rozszerza zestaw o instrukcje DSP i ogólnego przeznaczenia.
Rozwiązany problem
Tradycyjne rozszerzenia SIMD (NEON, AVX) mają stałą szerokość wektora, więc kod zoptymalizowany pod jedną szerokość trzeba przepisywać lub rekompilować dla innej i nie korzysta automatycznie z szerszych jednostek. Utrudnia to przenośność między procesorami o różnej wydajności — od urządzeń mobilnych po HPC. SVE rozwiązuje to przez model vector length agnostic: jeden binarny kod działa poprawnie i skaluje się na implementacjach o szerokości 128–2048 bitów, bez wiązania oprogramowania z konkretną szerokością rejestru.
Komponenty
Model, w którym długość wektora nie jest zakodowana w instrukcjach. Producent wybiera sprzętową szerokość rejestru z zakresu 128–2048 bitów w wielokrotnościach 128, a kod SVE działa poprawnie na każdej z nich bez rekompilacji.
32 skalowalne rejestry wektorowe o szerokości ustalanej sprzętowo (128–2048 bitów). Dolne 128 bitów każdego rejestru Z pokrywa się z odpowiednim rejestrem V (NEON).
16 rejestrów predykatów maskujących pojedyncze linie (lane) wektora; P0–P7 pełnią rolę predykatów rządzących (governing) dla operacji ładowania/zapisu i arytmetyki. Umożliwiają predykację per-lane i sterowanie pętlą bez osobnego kodu skalarnego.
Instrukcje ładowania i zapisu wektorowego z/na rozproszone, nieciągłe adresy pamięci wskazane wektorem indeksów lub offsetów.
Następca SVE wprowadzony z architekturą Armv9-A (2021), rozszerzający zestaw instrukcji o operacje DSP, multimedialne i ogólnego przeznaczenia, zachowując model VLA.
Implementacja
Ewolucja
ARM (we współpracy z Fujitsu, pod kątem japońskiego superkomputera post-K) zapowiada SVE — skalowalne wektorowe rozszerzenie SIMD dla obliczeń HPC, komplementarne wobec NEON.
Procesor Fujitsu A64FX z 512-bitowym SVE zasila superkomputer Fugaku, który od czerwca 2020 do maja 2022 jest najszybszym komputerem na świecie.
Architektura Armv9-A upowszechnia SVE2, rozszerzając zestaw instrukcji o operacje DSP, multimedialne i ogólnego przeznaczenia poza niszę HPC.
Procesor AWS Graviton3 implementuje elastyczny wariant 2×256-bitowy SVE, przenosząc skalowalne wektory do serwerowych CPU ARM w chmurze.
Hiperparametry (konfigurowalne osie)
Sprzętowa szerokość rejestru wektorowego Z, wybierana przez producenta z zakresu 128–2048 bitów w wielokrotnościach 128. Nie jest widoczna w kodzie (VLA), ale decyduje o przepustowości na danym CPU.
Paradygmat wykonania
SIMD wykonuje tę samą operację na wszystkich liniach wektora, ale rejestry predykatów P maskują pojedyncze linie w zależności od granic pętli i warunków (predykacja per-lane).
Równoległość
Równoległość danych (data parallelism) w obrębie pojedynczej instrukcji wektorowej o skalowalnej długości; stosowana zarówno w obliczeniach naukowych (HPC), jak i w inferencji ML.
Wymagania sprzętowe
SVE to natywne, skalowalne rozszerzenie SIMD procesorów ARM/AArch64 (Fujitsu A64FX, AWS Graviton3, rdzenie Neoverse, SoC mobilne i brzegowe). Kategoria „CPU SIMD" — skalowalny odpowiednik AVX po stronie x86.