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
[edytuj | edytuj kod]- 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
[edytuj | edytuj kod]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
[edytuj | edytuj kod]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
[edytuj | edytuj kod]- Intel SSE4 Programming Reference (D91561), kwiecień 2007