Streaming SIMD Extensions 2 (SSE2) – zestaw instrukcji SIMD, rozszerzający istniejący SSE. Nowe cechy:

Technologia ta została wprowadzona w procesorach rodziny Pentium 4 oraz Athlon 64.

Typy danych

SSE2 wykorzystuje typy danych zdefiniowane w MMX i SSE, definiuje także kilka nowych typów danych: w większości wektorów o określonych rozmiarach.

Typy zmiennoprzecinkowe:

Typy całkowite (rozszerzenia typów MMX):

Analogicznie jak w SSE, rozkazy SSE2 mogą wykonywać działania arytmetyczne na wektorach liczb zmiennoprzecinkowych podwójnej precyzji na dwa sposoby:

  1. packed (równoległe) — wykonując równocześnie dwa niezależne działania zmiennoprzecinkowe na odpowiadających sobie elementach wektorów;
  2. scalar (skalarne) — wykonując działanie tylko na pierwszych elementach wektorów.
Rozmiar słowa
[bity]
Rozmiar elementu
[bity]
Liczba elementów wektora Uwagi
Liczby zmiennoprzecinkowe  
128 64 2 SSE2, liczby podwójnej precyzji
128 32 4 SSE, liczby pojedynczej precyzji
Liczby całkowite (ze znakiem lub bez)  
128 128 1 SSE2, całe słowo
128 64 2 SSE2, packed quad word
128 32 4 SSE2, packed double word
128 16 8 SSE2, packed word
128 8 16 SSE2, packed byte
64 64 1 MMX, quad word
64 32 2 MMX, packed double word
64 16 4 MMX, packed word
64 8 8 MMX, packed byte

Mnemoniki rozkazów

 Zobacz więcej w artykule Streaming SIMD Extensions, w sekcji Mnemoniki rozkazów.

Tak jak w SSE, również w SSE2 sufiksy mnemoników określają typy danych, na jakich działają określone rozkazy; oprócz tych zdefiniowanych w MMX i SSE pojawiły się nowe dla liczb zmiennoprzecinkowych podwójnej precyzji:

Działania zmiennoprzecinkowe

Działania arytmetyczne

Działania logiczne

Wykonywane są na poziomie bitów, a nie liczb:

Porównanie

 Zobacz więcej w artykule Streaming SIMD Extensions, w sekcji Porównania.

Rozkazy porównania SSE2 działają w taki sam sposób jak SSE, jedna różnica to oczywiście rozmiary elementów wektorów:

Rozmieszczanie elementów w wektorach

Konwersje między liczbami zmiennoprzecinkowymi i całkowitymi

Konwersje między liczbami zmiennoprzecinkowymi pojedynczej i podwójnej precyzji

Rozkazy całkowitoliczbowe

Kontrola pamięci podręcznej i spójności pamięci

Przesyłanie danych

Wektory liczb zmiennoprzecinkowe

Wektory liczb całkowitych

MXCSR - rejestr kontrolny/statusu

 Zobacz więcej w artykule Streaming SIMD Extensions, w sekcji MXCSR - rejestr kontrolny/statusu.

W SSE2 dodano jedną flagę kontrolującą obliczenia zmiennoprzecinkowe:

Podpowiedzi dla systemu przewidywania skoków

Podsystem przewidywania skoków posiada wbudowane reguły statycznego przewidywania skoków warunkowych - np. jeśli adres docelowy skoku jest ujemny (skok wstecz, jak w pętlach) to przyjmuje się, że skok nastąpi. W SSE2 wprowadzono podpowiedzi (ang. branch hint), które dla wskazanych instrukcji skoku nadpisują domyślne reguły, pozwalając wskazać bardziej prawdopodobny przepływ sterowania w programie. Podpowiedzi te mają formę przedrostków dla kodów rozkazu skoku, nie są odrębnymi instrukcjami.

Mimo że w symulacjach rozwiązanie to wyglądało bardzo obiecująco, w rzeczywistych programach nie zanotowano wzrostu wydajności[1].

Procesory obsługujące SSE2

Znane procesory nieobsługujące SSE2

Przypisy

  1. H. J. Lu - PATCH: Disable branch hints on P4 [online], gcc.gnu.org [dostęp 2017-11-26].

Zobacz też