SSE4
Streaming SIMD Extensions 4 (SSE4) – rozszerzenie zestawu instrukcji SSE opublikowane w kwietniu 2007 przez firmę Intel. SSE4 wprowadza 54 nowe instrukcje, podzielone na dwie podgrupy (wersje): SSE4.1 zawierający 47 rozkazów oraz SSE4.2 zawierający dodatkowe 7.
Rozkazy SSE4.1 stanowią rozszerzenie istniejących instrukcji wektorowych operujących na liczbach całkowitych oraz zmiennoprzecinkowych; instrukcje MPSADBW i PHMINPOSUW ułatwiają i przyspieszają kompresję wideo. Rozkazy SSE4.2 są bardziej specjalizowane, np. istnieje rozkaz obliczający sumę kontrolną CRC-32, czy liczbę ustawionych bitów, a także instrukcje działające na łańcuchach znaków.
Nowością w SSE4 są rozkazy stałoprzecinkowe, które modyfikują rejestr flag procesora - dotychczas żaden z rozkazów SSE działający na liczbach całkowitych tego nie robił. Ponadto nowe instrukcje wektorowe działają wyłącznie na rejestrach XMM - w SSE2, SSE3 i SSSE3 istniała możliwość przeprowadzania większości obliczeń również na rejestrach MMX.
SSE4 nie wprowadza nowych typów danych, używa typów zdefiniowanych w SSE i SSE2.
Procesory posiadające rozszerzenie SSE4
- Intel Core 2 na rdzeniu Penryn i Wolfdale (45 nm)
- Intel Core i7
- Intel Core i5
- Intel Core i3
- AMD FX
- AMD Ryzen
Rozkazy SSE4.1
Instrukcja | Działanie |
---|---|
BLENDPS BLENDPD BLENDVPS BLENDVPD PBLENDVB PBLENDW | przepisanie tylko wybranych elementów wektorów (wskazanych maską bitową lub maską bajtową). |
DPPS DPPD | obliczanie iloczynu skalarnego. |
EXTRACTPS PEXTRB PEXTRW PEXTRD PEXTRQ | wybranie elementu z wektora (z rejestru XMM) i zapisanie go do rejestru ogólnego przeznaczenia lub pamięci. |
INSERTPS PINSRB PINSRD PINSRQ | zapisanie rejestru ogólnego przeznaczenia albo pamięci na wskazanej pozycji wektora. |
PMAXSB PMAXSD PMAXUB PMAXD PMINSB PMINSD PMINUB PMIND | wybranie maskymalnych/minimalnych elementów z dwóch wektorów bajtów lub podwójnych słów (ze znakiem albo bez znaku). |
PMULDQ PMULLD | rozkazy mnożą wektory 32-bitowych liczb ze znakiem; PMULDQ zapisuje wyniki 64-bitowe, natomiast PMULLD tylko młodsze 32 bity wyniku. |
PMOVSXBW PMOVSXBD PMOVSXBQ PMOVSXWD PMOVSXWD PMOVSXDQ | rozszerzenie zakresu liczb ze znakiem (z 8 na 16, 32 lub 64 bity, z 16 na 32 lub 64 bity, z 32 na 64 bity) |
PMOVZXBW PMOVZXBD PMOVZXBQ PMOVZXWD PMOVZXWD PMOVZXDQ | rozszerzenie zakresu liczb bez znaku (z 8 na 16, 32 lub 64 bity, z 16 na 32 lub 64 bity, z 32 na 64 bity) |
PACKUSDW | konwersja wektora czterech 32-bitowych liczb całkowitych ze znakiem na wektor liczb całkowitych 16-bitowych bez znaku; przy konwersji następuje nasycenie wyniku |
PCMPEQQ | porównanie wektorów poczwórnych słów ze znakiem (elementy 64-bitowe) relacją "równy". |
ROUNDPD ROUNDPS ROUNDSD ROUNDSS | zaokrąglanie wektorów lub skalarów liczb zmiennoprzecinkowych pojedynczej bądź podwójnej precyzji. Tryb zaokrąglania jest wybierany w trzecim argumencie (stałej natychmiastowej):
|
PHMINPOSUW | rozkaz wyszukuje w wektorze liczb 16-bitowych bez znaku wartość najmniejszą; zwraca wartość elementu oraz jego indeks. |
PTEST | rozkaz pozwala na sprawdzenie, które bity w rejestrze XMM są ustawione; rozkaz modyfikuje rejestr flag mikroprocesora. |
MPSADBW | rozkaz oblicza 8 kolejnych sum modułów różnic wektorów 4-elementowych. |
MOVNTDQA | ładuje 128 bitów z pamięci, z pominięciem pamięci podręcznej |
Rozkazy SSE4.2
Instrukcja | Działanie |
---|---|
CRC32 | aktualizacja sumy kontrolnej CRC-32; używany wielomian 11edc6f41h. |
POPCNT (ang. population count) | zliczenie liczby zapalonych bitów w słowach 16-, 32-, lub 64 bitowych (argumentami mogą być rejestry, bądź adresy pamięci). |
PCMPGTQ | porównanie wektorów poczwórnych słów ze znakiem (elementy 64-bitowe) relacją "większy". |
PCMPESTRI PCMPESTRM PCMPISTRI PCMPISTRM | rozkazy działają na łańcuchach bajtów lub słów, ze znakiem lub bez znaku i pozwalają na:
|
Rozkazy łańcuchowe (PCMPxSTRx) noszą nazwę STTNI: STring & Text New Instructions.
Bibliografia
- Intel SSE4 Programming Reference (D91561), kwiecień 2007