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 |
|---|---|
BLENDPSBLENDPDBLENDVPSBLENDVPDPBLENDVBPBLENDW
|
przepisanie tylko wybranych elementów wektorów (wskazanych maską bitową lub maską bajtową). |
DPPSDPPD
|
obliczanie iloczynu skalarnego. |
EXTRACTPSPEXTRBPEXTRWPEXTRDPEXTRQ
|
wybranie elementu z wektora (z rejestru XMM) i zapisanie go do rejestru ogólnego przeznaczenia lub pamięci. |
INSERTPSPINSRBPINSRDPINSRQ
|
zapisanie rejestru ogólnego przeznaczenia albo pamięci na wskazanej pozycji wektora. |
PMAXSBPMAXSDPMAXUBPMAXDPMINSBPMINSDPMINUBPMIND
|
wybranie maskymalnych/minimalnych elementów z dwóch wektorów bajtów lub podwójnych słów (ze znakiem albo bez znaku). |
PMULDQPMULLD
|
rozkazy mnożą wektory 32-bitowych liczb ze znakiem; PMULDQ zapisuje wyniki 64-bitowe, natomiast PMULLD tylko młodsze 32 bity wyniku.
|
PMOVSXBWPMOVSXBDPMOVSXBQPMOVSXWDPMOVSXWDPMOVSXDQ
|
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) |
PMOVZXBWPMOVZXBDPMOVZXBQPMOVZXWDPMOVZXWDPMOVZXDQ
|
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". |
ROUNDPDROUNDPSROUNDSDROUNDSS
|
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". |
PCMPESTRIPCMPESTRMPCMPISTRIPCMPISTRM
|
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
Zobacz też
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.