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.

 

fpu-5.jpg

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). 

 

fpu-6.jpg

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]

 

fpu-7.jpg

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).