Wprowadzenie do SSE
SSE (Streaming SIMD Extensions) to zestaw instrukcji wprowadzony w 1999 roku przez firmę Intel, przeznaczony do procesorów Pentium III. SSE umożliwia wykonywanie operacji na wektorach liczb zmiennoprzecinkowych pojedynczej precyzji oraz wprowadza nowe rozkazy i zmiany w architekturze procesora.
Architektura i typy danych
SSE wprowadza 8 rejestrów XMM (128 bitów) oraz 32-bitowy rejestr kontrolny MXCSR. Działa na 4-elementowych wektorach liczb zmiennoprzecinkowych (32 bity każdy). SSE obsługuje dwa rodzaje operacji arytmetycznych:
- Packed – równoległe operacje na wszystkich elementach wektora.
- Scalar – operacje na pojedynczym elemencie wektora.
Mnemoniki instrukcji
Mnemoniki rozkazów SSE dla wektorów liczb całkowitych zaczynają się od litery P
. Dla liczb zmiennoprzecinkowych używane są sufiksy:
PS
– operacje na wektorach.SS
– operacje skalarne.
Działania arytmetyczne i logiczne
Instrukcje SSE obejmują operacje arytmetyczne, takie jak dodawanie, odejmowanie, mnożenie i dzielenie, a także operacje logiczne na poziomie bitów, jak suma, iloczyn i różnica symetryczna.
Porównania i konwersje
SSE pozwala na porównania, które mogą modyfikować rejestry SSE lub rejestr flag. Dodatkowo, SSE obsługuje konwersje między liczbami całkowitymi a zmiennoprzecinkowymi, z różnymi metodami zaokrąglania.
Rozmieszczenie elementów w wektorze
Rozkazy takie jak SHUFPS
i UNPCK
umożliwiają elastyczne rozmieszczanie elementów w wektorach.
Rejestr kontrolny MXCSR
Rejestr MXCSR przechowuje ustawienia operacji zmiennoprzecinkowych oraz maski wyjątków. Umożliwia kontrolę nad zaokrąglaniem, flagami błędów i innymi parametrami operacji matematycznych.
Przesyłanie danych
Rozkazy jak MOVAPS
i MOVUPS
umożliwiają przesyłanie danych między rejestrami a pamięcią, z różnymi wymaganiami dotyczącymi wyrównania.
Pamięć podręczna i trwały zapis
SSE wprowadza rozkazy PREFETCH
do optymalizacji dostępu do pamięci oraz instrukcje do trwałego zapisu, które pomijają pamięć podręczną.
Rozszerzenia SSE
W kolejnych latach wprowadzono rozszerzenia SSE, m.in. SSE2, SSE3, SSE4 oraz SSE5, które wprowadziły dodatkowe rozkazy i zwiększyły możliwości operacji na danych.
W skrócie, SSE to zaawansowany zestaw instrukcji, który znacząco zwiększa wydajność obliczeń zmiennoprzecinkowych i całkowitych w nowoczesnych architekturach procesorów.