SSE5
Z Wikipedii
Ten artykuł zawiera informacje o powstającym lub niedawno wydanym produkcie. Treści w nim zawarte mogą mieć charakter spekulacyjny i zmieniać się znacząco w miarę napływu nowych danych. |
Streaming SIMD Extensions 5 (SSE5) - planowane rozszerzenie listy rozkazów SIMD dostępnych w procesorach x86, zdefiniowane przez firmę AMD w sierpniu 2007 roku; pierwszy procesor implementujący SSE5 ma wg zapowiedzi firmy pojawić się w 2009 roku.
SSE5 dodaje 82 nowe rozkazy: 30 działających na liczbach zmiennoprzecinkowych oraz 52 na liczbach całkowitych. Prawie wszystkie wykonują działania arytmetyczne i logiczne na wektorach, tj. mnożenie, dodawanie/odejmowanie lub oba naraz, a także przesunięcia lub obroty bitowe. Są również rozkazy pozwalające zaokrąglać liczby, pobierać część ułamkową, porównywać oraz przepisywać wybrane elementy wektorów.
SSE5 wprowadza instrukcje przyjmujące 3 lub 4 argumenty wektorowe, z czego jeden jest argumentem docelowym, tj. do niego wpisywany jest wynik działania (rozwiązanie zapożyczone z architektury RISC). Dotychczas praktycznie wszystkie instrukcje[1], nie tylko SSE, były dwuargumentowe, z czego jeden argument był równocześnie docelowy (nadpisywany) i dlatego w wielu przypadkach musiał zostać uprzednio zapamiętany — zaproponowane rozwiązanie eliminuje przynajmniej jedno przypisanie, co upraszcza i skraca programy, a także może mieć pozytywny wpływ na szybkość obliczeń.
Dzięki wprowadzeniu wieloargumentowych instrukcji możliwe stało się wygodne zrealizowanie instrukcji akumulujących wyniki mnożenia (wektorów lub skalarów liczb całkowitych, bądź zmiennoprzecinkowych) — rozkazy FxMADDxx, FxMSUBxx, PMACxxx, PMADxxx działają według schematu .
SSE5 definiuje także nowy typ danych: 16-bitową liczbę zmiennoprzecinkową; na mantysę liczby przeznaczono 10 bitów, na wykładnik 5 bitów, a znak — jeden bit.
Spis treści |
[edytuj] Rozkazy działające na liczbach zmiennoprzecinkowych
Rozkazy działają na wektorach lub skalarach liczb pojedynczej precyzji (zwykle końcówka mnemonika PS dla wektorów, SS dla skalarów), bądź podwójnej precyzji (PD dla wektorów, SD dla skalarów).
Instrukcja | Działanie |
---|---|
COMPD COMPS |
porównanie wektorów |
COMSD COMSS |
porównanie skalarów |
CVTPH2PS CVTPS2PH |
konwersja pomiędzy liczbami zmiennoprzecinkowymi 16-bitowymi i 32-bitowymi (pojedynczej precyzji) |
FMADDPD FMADDPS FMADDSD FMADDSS |
rozkazy czteroargumentowe instr dest, src1, src2, src3, wykonują: dest := src1 * src2 + src3 |
FMSUBPD FMSUBPS FMSUBSD FMSUBSS |
rozkazy czteroargumentowe wykonują: dest := src1 * src2 - src3 |
FNMADDPD FNMADDPS FNMADDSD FNMADDSS |
rozkazy czteroargumentowe wykonują: dest := -(src1 * src2) + src3 |
FNMSUBPD FNMSUBPS FNMSUBSD FNMSUBSS |
rozkazy czteroargumentowe wykonują: dest := -(src1 * src2) - src3 |
PERMPD PERMPS |
utworzenie wektorów z dwóch innych; istnieje możliwość wyboru na jakich pozycjach w wektorze wynikowym mają pojawić się elementy z wektorów źródłowych; można również ustalić jakie dodatkowe działania mają zostać przeprowadzone na każdym z wynikowych elementów:
|
FRCZPD FRCZPS FRCZSD FRCZSS |
obliczenie części ułamkowej |
ROUNDPD ROUNDPS ROUNDSD ROUNDSS |
zaokrąglenie liczb |
[edytuj] Rozkazy działające na liczbach całkowitych
Rozkazy działają na wektorach liczb całkowitych 8-bitowych (końcówka mnemonika B dla liczb ze znakiem, UB bez znaku), 16-bitowych (W/UW), 32-bitowych (D/UD) i 64-bitowych (Q/UQ).
Instrukcja | Działanie |
---|---|
PCMOV | warunkowe przesłanie, realizuje działanie operatora warunkowego |
PCOMB PCOMW PCOMD PCOMQ |
porównanie liczb ze znakiem; dostępne relacje:
|
PCOMUB PCOMUW PCOMUD PCOMUQ |
porównanie liczb bez znaku |
PHADDBD PHADDBW PHADDBQ PHADDWD PHADDWQ PHADDDQ |
dodawanie dwóch lub czterech sąsiednich elementów (liczby ze znakiem) |
PHADDUBD PHADDUBQ PHADDUBW PHADDUDQ PHADDUWD PHADDUWQ |
dodawanie dwóch lub czterech sąsiednich elementów (liczby bez znaku) |
PHSUBBW PHSUBDQ PHSUBWD |
odejmowanie dwóch lub czterech sąsiednich elementów (liczby ze znakiem); dla czterech liczb wykonywane jest działanie (a − b) − (c − d) |
PMACSDD PMACSDQH PMACSDQL PMACSWD PMACSWW |
rozkazy czteroargumentowe instr dest, src1, src2, src3 wykonujące działanie dest := (src1 * src2) + src3 - wyniki są wprost kopiowane |
PMACSSDD PMACSSDQH PMACSSDQL PMACSSWD PMACSSWW |
rozkazy czteroargumentowe instr dest, src1, src2, src3 wykonujące działanie dest := (src1 * src2) + src3 - wyniki są nasycane |
PMADCSWD | podobne do ww, z tym że przed po przemnożeniu wektorów, sąsiednie elementy wyniku pośredniego src1 * src2 są do siebie dodawane, i dopiero ten wektor jest dodawany do src3 |
PMADCSSWD | wykonuje to samo działanie, co PMADCSWD, z tym, że wyniki są nasycane |
PPERM | działanie rozkazu jest analogiczne do PERMPS/PERMPD, z tą różnicą, że operuje na poziomie bajtów; możliwe są również modyfikacje wynikowych bajtów: negacja, negacja bitowa, negacja bitowa liczby przeciwnej, ustawienie wszystkich bitów na: 0, 1, najstarszy bit lub zanegowany najstarszy bit |
PROTB PROTW PROTD PROTQ |
obrót bitowy |
PSHAB PSHAW PSHAD PSHAQ |
przesunięcie arytmetyczne w prawo |
PSHLB PSHLW PSHLD PSHLQ |
przesunięcia w lewo |
PTEST | testowanie masek bitowych; realizuje to samo działanie co rozkaz PTEST zdefiniowany w SSE4 |
[edytuj] Bibliografia
- AMD64 Technology, 128-Bit SSE5 Instruction Set (43479), sierpień 2007
Przypisy
- ↑ Spośród rozkazów CPU jedynie rozkaz imul posiada wersję trójargumentową, wśród rozkazów SSE zaledwie kilka.