Podręcznik
4. Procesor – informacje ogólne
4.13. Technologie SSE, AVX
Używanie naprzemienne FPU i MMX było bardzo niewygodne i nie przynosiło spodziewanych rezultatów wydajnościowych. Dlatego począwszy od procesora Pentium 4 zdecydowano się na dodanie fizycznie nowych rejestrów, które mogły przechowywać liczby 128 bitowe (Rys.22). Konieczne było również dodanie rejestrów stanu. Nowo dodane rejestry nazwano XMM, a rejestr stanu MXCSR.
Rys. 22. Środowisko SSE [źródło: Intel® 64 and IA-32 Architectures
Software Developer’s Manual, Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C, January 2013]
Nowy zestaw instrukcji, który wykorzystywał te rejestry, nazwano SSE (ang. Streaming SIMD Extensions). Było wiele wydań rozszerzenie SSE. Kolejne wprowadzały nowe typy danych i nowe, coraz bardziej skomplikowane operacje. Pierwsza wersja SSE wprowadziła tylko jeden typ danych (Rys. 23), cztery liczby zmiennopozycyjne pojedynczej precyzji. SSE2 wprowadza operacje na dwóch liczbach zmiennopozycyjnych podwójnej precyzji oraz operacje na wielu liczbach całkowitych o różnej precyzji (Rys.24).
Rys. 23. Typ danych SSE [źródło: Intel® 64 and IA-32 Architectures
Software Developer’s Manual, Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C, January 2013]
Rys. 24. Typy danych SSE2 [źródło: Intel® 64 and IA-32 Architectures
Software Developer’s Manual, Combined Volumes: 1, 2A, 2B, 2C, 3A, 3B and 3C, January 2013]
Podobnie jak w MMX możliwe jest wykonywanie instrukcji SIMD, ale już równolegle z operacjami FPU. Wraz z procesorem Sandy Bridge Intela nastąpiło poszerzenie długości rejestrów do 256 bitów. Zwiększono też liczbę rejestrów do 16. Technologia zmieniła nazwą na AVX (ang. Advanced Vector Extensions). Oczywiście stare rozkazy SSE działają bez problemu. Rejestry SSE (XMM0...XMM7) zostały zamapowane na młodsze 128 bitów rejestrów AVX (YMM0...YMM7).