SSE4

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 19. září 2016; ověření vyžaduje 21 úprav .

SSE4  je instrukční sada mikroarchitektury Intel Core , poprvé implementovaná v procesorech řady Penryn (nezaměňovat s SSE4A od AMD ) [1] .

To bylo oznámeno 27. září 2006 , ale podrobný popis byl k dispozici až na jaře 2007 . Podrobnější popis funkcí nového procesoru pro programátory najdete na webu Intelu.

Sada příkazů

SSE4 se skládá z 54 instrukcí, 47 z nich patří do SSE4.1 (jsou v procesorech Penryn). Kompletní sada instrukcí (SSE4.1 a SSE4.2, tedy 47 + zbývajících 7 instrukcí) je dostupná v procesorech Intel s mikroarchitekturou Nehalem, které byly vydány v polovině listopadu 2008 a pozdějších edicích. Žádná z instrukcí SSE4 nefunguje s 64bitovými registry mmx (pouze se 128bitovými xmm0-15).

Nové příkazy SSE4
Podskupina Pokyny pro procesor Popis Očekávaná vylepšení v aplikaci
Různé zabalené operace DWORD PMULLD, PMULDQ Nová podpora pro čtyři podepsané (a nepodepsané) 32x32 bitové násobení na instrukci, stejně jako podepsané násobení jako 32x32->64. Široce použitelné pro automatizaci vektorizace kompilátoru zpracování dat napsaných ve vyšších programovacích jazycích (jako C a Fortran).
Produkt s plovoucí desetinnou čárkou DPPS, DPPD Vylepšený výkon zpracování datového typu AOS (pole struktur) díky podpoře produktů s jednou a dvojitou přesností bodů. Tvorba trojrozměrného obsahu, hry. Podpora programovacích jazyků jako CG a HLSL.
Balené párování BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDDW Podle konvence operace párování zkopíruje jedno pole ze zdroje a přenese je do cíle. Tyto nové instrukce procesoru zlepší výkon konjugačních operací pro většinu velikostí polí tím, že sbalí operace násobení do jediné instrukce. Je široce použitelný pro automatizaci kompilátorové vektorizace zpracování dat napsaných ve vyšších programovacích jazycích (jako C a Fortran), stejně jako pro aplikace určené pro zpracování obrazu, video informací. Multimediální a herní zdroje.
Maximální a minimální hodnoty sbaleného celého čísla PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINDS, PMAXSD Porovná sbalené celočíselné hodnoty na úrovni bajtů/slova/dword se znaménkem a ve zdrojovém operandu a vrátí minimální nebo maximální hodnotu na instrukci pro každý zabalený operand v cílovém operandu. Je široce použitelný pro automatizaci kompilátorové vektorizace zpracování dat napsaných ve vyšších programovacích jazycích (jako C a Fortran), stejně jako pro aplikace určené pro zpracování obrazu, video informací.
Zaokrouhlování hodnot s pohyblivou řádovou čárkou ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD Efektivně zaokrouhluje skalární a sbalený operand s jednoduchou nebo dvojitou přesností na celočíselnou hodnotu, čímž podporuje požadavky programovacích jazyků Fortran, Java a C99. Zpracování obrázků, grafiky, video informací. Aplikace s 2D/3D multimediálními a herními prostředky.
Vložit/vysunout registry INSERTPS, PINSRB, PINSRD, PINSRQ, EXTRACTPS, PEXTRB, PEXTRD, PEXTRW, PEXTRQ Tyto nové instrukce procesoru zjednodušují proces vkládání a vyjímání mezi GPR (nebo pamětí) a XMM. Je široce použitelný pro automatizaci kompilátorové vektorizace zpracování dat napsaných ve vyšších programovacích jazycích (jako C a Fortran), stejně jako pro aplikace určené pro zpracování obrazu, video informací.
Konverze zabaleného formátu PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ Převede celočíselnou hodnotu v rámečku (z registru XMM nebo paměti) na celočíselnou hodnotu širšího typu s příponou se znaménkem nebo nulou. Je široce použitelný pro automatizaci kompilátorové vektorizace zpracování dat napsaných ve vyšších programovacích jazycích (jako C a Fortran), stejně jako pro aplikace určené pro zpracování obrazu, video informací.
Zabalená kontrola a instalace PTEST Rychlejší větvení architektury SIMD pro podporu vektorizovaného kódu. Použitelné pro automatizaci kompilátorové vektorizace zpracování dat, zpracování obrazových a obrazových informací a vytváření trojrozměrného obsahu. Multimediální a herní zdroje.
Definice sbalené identity PCMPEQQ, PCMPGTQ Architektura SIMD definuje, že sbalené hodnoty QWORD v cílovém operandu a ve zdrojovém operandu jsou totožné. Je široce použitelný pro automatizaci kompilátorové vektorizace zpracování dat napsaných ve vyšších programovacích jazycích (jako C a Fortran), stejně jako pro aplikace určené pro zpracování obrazu, video informací. Multimediální a herní zdroje.
Balení DWORD do nepodepsaného formátu WORD PACKUSDW Převede sbalené podepsané DWORD na nepodepsané zabalené SLOVO pomocí nepodepsaného stagingu ke zvládnutí podmínek přetečení. Tato nová instrukce procesoru doplňuje sadu dalších instrukcí v tomto formátu. Je široce použitelný pro automatizaci kompilátorové vektorizace zpracování dat napsaných ve vyšších programovacích jazycích (jako C a Fortran), stejně jako pro aplikace určené pro zpracování obrazu, video informací. Multimediální a herní zdroje.
Vylepšené operace s řetězci PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM Tyto nové instrukce procesoru obsahují velké množství funkcí pro zpracování řetězců a textu, které obvykle vyžadují více operačních kódů. Vylepšený výkon pro skenování virů, textové vyhledávání, knihovny pro zpracování řetězců, jako je ZLIB, databáze, kompilátory a aplikace stavových strojů.


Kompilátor C Intel od verze 10 generuje instrukce SSE4, když je zadána volba -QxS . Kompilátor Sun Studio od Sun Microsystems od verze 12 aktualizace 1 generuje instrukce SSE4 pomocí voleb -xarch=sse4_1 (SSE4.1) a -xarch=sse4_2 (SSE4.2) [2] . Kompilátor GCC podporuje SSE4.1 a SSE4.2 od verze 4.3 [3] s volbami -msse4.1 a -msse4.2 nebo -msse4 pro zahrnutí obou.

Změny

Byly přidány instrukce pro zrychlení kompenzace pohybu ve video kodecích , rychlé čtení z paměti USWC , spousta instrukcí pro zjednodušení vektorizace programů pomocí kompilátorů.

Kromě toho byly do SSE4.2 přidány instrukce pro zpracování řetězců 8/16bitových znaků, výpočty CRC32, POPCNT . Poprvé v SSE4 byl registr xmm0 použit jako implicitní argument pro některé instrukce.

Nové instrukce SSE4.1

Zrychlit video

Výpočet osmi součtů absolutních hodnot rozdílů (SAD) offsetových 4bajtových skupin bez znaménka. Umístění operandů pro 16bitové SAD je určeno třemi bity přímého argumentu imm8.

s1 = imm8[2]*4 s2 = imm8[1:0]*4 SAD 0 = |A (s1+0) -B (s2+0) | + |A (s1+1) -B (s2+1) | + |A (s1+2) -B (s2+2) | + |A (s1+3) -B (s2+3) | SAD 1 = |A (s1+1) -B (s2+0) | + |A (s1+2) -B (s2+1) | + |A (s1+3) -B (s2+2) | + |A (s1+4) -B (s2+3) | SAD 2 = |A (s1+2) -B (s2+0) | + |A (s1+3) -B (s2+1) | + |A (s1+4) -B (s2+2) | + |A (s1+5) -B (s2+3) | ... SAD 7 = |A (s1+7) -B (s2+0) | + |A (s1+8) -B (s2+1) | + |A (s1+9) -B (s2+2) | + |A (s1+10) -B (s2+3) |

Vyhledávání mezi 16bitovými poli bez znaménka A 0 ... A 7 tak, aby měla minimální hodnotu (a pozici s menším číslem, pokud je takových polí více). Vrátí se 16bitová hodnota a její pozice.

Skupina 12 instrukcí pro rozšíření formátu zabalených polí. Sbalená 8, 16 nebo 32bitová pole z dolní části argumentu se rozbalí (se znaménkem nebo bez znaménka) na 16, 32 nebo 64bitová výsledková pole.

Vstupní formát Výsledný
formát
8 bitů 16 bit 32 bitů
PMOVSXBW 16 bit
PMOVZXBW PMOVZXWW
PMOVSXBD PMOVSXWD 32 bitů
PMOVZXBD PMOVZXWD PMOVSXDD
PMOVSXBQ PMOVSXWQ PMOVSXDQ 64 bitů
PMOVZXBQ PMOVZXWQ PMOVZXDQ

Vektorová primitiva

Každé výsledkové pole je minimální/maximální hodnota odpovídajících polí dvou argumentů. Bajtová pole jsou považována pouze za čísla se znaménkem, 16bitová pole jsou považována pouze za čísla bez znaménka. Pro 32bitová zabalená pole jsou k dispozici možnosti podepsané i nepodepsané.

Vynásobte 32bitová pole se znaménkem, čímž získáte celých 64 bitů výsledku (dvě operace násobení na polích 0 a 2 argumentů).

Vynásobte 32bitová pole se znaménkem, čímž získáte nejméně významných 32 bitů výsledků (čtyři operace násobení na všech polích argumentů).

Balení 32bitových polí se znaménkem do 16bitových polí bez znaménka se saturací.

Kontrola rovnosti 64bitových polí a vydávání 64bitových masek.

Vložení/Vyjmutí

Vložení 32bitového pole z xmm2 (je možné zvolit libovolné ze 4 polí tohoto registru) nebo z 32bitového paměťového místa do libovolného výsledkového pole. Navíc pro každé z polí výsledků můžete nastavit, aby se resetovalo na +0,0.

Při extrakci 32bitového pole z registru xmm je číslo pole uvedeno v dolních 2 bitech imm8. Pokud je jako výsledek zadán 64bitový registr, jeho horních 32 bitů se resetuje (nepodepsané rozšíření).

Vložte 8, 32 nebo 64bitovou hodnotu do zadaného pole xmm registru (ostatní pole se nemění).

Extrakce 8, 16, 32, 64bitového pole z pole xmm uvedeného v imm8 registru. Pokud je jako výsledek uveden případ, jeho vysoká část se zahodí (nepodepsané rozšíření).

Skalární násobení vektorů

Vektorové skalární násobení (bodový součin) 32/64bitových polí. Pomocí bitové masky v imm8 je naznačeno, které součiny polí se mají sečíst a co se má zapsat do každého pole výsledku: součet zadaných součinů nebo +0,0.

Míchání

Každé 32/64bitové výsledné pole je vybráno v závislosti na znaménku stejného pole v implicitním argumentu xmm0: buď z prvního nebo z druhého argumentu.

Bitová maska ​​(4 nebo 2 bity) v imm8 určuje, ze kterého argumentu by mělo být převzato každé 32/64bitové výsledné pole.

Volba každého bajtového pole výsledku se provádí v závislosti na znaménku bajtu stejného pole v implicitním argumentu xmm0: buď z prvního nebo z druhého argumentu.

Bitová maska ​​(8 bitů) v imm8 určuje, ze kterého argumentu by mělo být převzato každé 16bitové výsledkové pole.

Bitové kontroly

Nastavte příznak ZF pouze v případě, že v xmm2/m128 jsou všechny bity označené maskou z xmm1 nula. Pokud jsou všechny neoznačené bity nulové, nastavte příznak CF . Zbývající příznaky ( AF , OF , PF , SF ) jsou vždy resetovány. Instrukce nemění xmm1.

Zaokrouhlení

Zaokrouhlení všech 32/64bitových polí. Režim zaokrouhlení (4 možnosti) se volí buď z MXCSR.RC, nebo se nastavuje přímo v imm8. Můžete také potlačit generování výjimky ztráty přesnosti.

Zaokrouhlení pouze nejméně významného 32/64bitového pole (ostatní bity zůstávají nezměněny).

Čtení paměti WC

Operace čtení, která urychluje (až 7,5krát) práci s oblastmi paměti kombinujícími zápis .

Nové instrukce SSE4.2

Manipulace s řetězci

Tyto instrukce provádějí aritmetická srovnání mezi všemi možnými dvojicemi polí (64 nebo 256 porovnání) z obou řetězců daných obsahem xmm1 a xmm2/m128. Booleovské výsledky srovnání jsou pak zpracovány k získání požadovaných výsledků. Přímý argument imm8 řídí velikost (řetězce bajtů nebo unicode, každý až 16/8 prvků), charakterizaci polí (prvky řetězce), typ srovnání a interpretaci výsledků.

Mohou vyhledávat v řetězci (oblasti paměti) znaky z dané sady nebo v daných rozsazích. Můžete porovnávat řetězce (oblasti paměti) nebo hledat podřetězce.

Všechny ovlivňují příznaky procesoru : SF je nastaveno, pokud xmm1 není celý řetězec, ZF je nastaveno, pokud xmm2/m128 není úplný řetězec, CF je, pokud výsledek není nula, OF je, pokud je nejméně významný bit výsledek není nula. Příznaky AF a PF jsou vymazány.

Explicitní nastavení velikosti řádků v <eax>, <edx> (absolutní hodnota registrů se bere od saturace do 8/16 v závislosti na velikosti prvků řádků. Výsledek je v registru ecx .

Explicitní nastavení velikosti řádků v <eax>, <edx> (absolutní hodnota registrů se bere od saturace do 8/16 v závislosti na velikosti prvků řádků. Výsledek je v registru xmm0 .

Implicitní nastavení velikosti řetězců (pro každý z řetězců se hledají nulové prvky). Výsledek je v registru ecx.

Implicitní nastavení velikosti řetězců (pro každý z řetězců se hledají nulové prvky). Výsledek je v registru xmm0.

Výpočet CRC32

Akumulace hodnoty CRC-32C (jiné označení CRC-32/ISCSI CRC-32/CASTAGNOLI ) pro 8, 16, 32 nebo 64bitový argument (pomocí polynomu 0x1EDC6F41 ).

Počítání populace 1 bitů

Počítání počtu jednotlivých bitů. Tři možnosti instrukcí: pro 16, 32 a 64bitové registry. Také přítomen v AMD SSE4A .

Vektorová primitiva

Kontrola 64bitových polí pro "větší než" a vydávání 64bitových masek.

SSE4a

Instrukční sadu SSE4a zavedla AMD do procesorů architektury Barcelona . Toto rozšíření není k dispozici na procesorech Intel. Podpora je definována pomocí příznaku CPUID.80000001H:ECX.SSE4A[Bit 6]. [čtyři]

Návod Popis
LZCNT/POPCNT Počítání počtu nula/jedna bitů.
EXTRQ/INSERTQ Pokyny pro kombinovanou masku a řazení [5]
MOVNTSD/MOVNTSS Pokyny pro zápis skalárního proudu [6]

Procesory s podporou SSE4

Literatura

Poznámky

  1. Sada instrukcí Innovative Streaming SIMD Extensions 4 (SSE4) (downlink ) . Získáno 21. února 2010. Archivováno z originálu 29. května 2010. 
  2. Sun Studio 12 Update 1: C Compiler 5.10 Readme . Získáno 8. února 2010. Archivováno z originálu 7. listopadu 2009.
  3. GCC 4.3 Release Series – Změny, nové funkce a opravy – GNU Project – Free Software Foundation (FSF) . Získáno 27. května 2010. Archivováno z originálu 9. května 2012.
  4. Specifikace AMD CPUID . Získáno 7. května 2011. Archivováno z originálu dne 16. května 2011.
  5. Rahul Chaturvedi. Funkce procesoru "Barcelona": Instrukční sada SSE4a  (anglicky)  (odkaz není k dispozici) (17. září 2007). Archivováno z originálu 25. října 2013.
  6. Rahul Chaturvedi. Funkce procesoru "Barcelona": SSE4a, část 2  (anglicky)  (odkaz není k dispozici) (2. října 2007). Archivováno z originálu 25. října 2013.