SSE4 - SSE4

SSE4 ( Streaming SIMD Extensions 4 ) je sada instrukcí CPU SIMD používaná v mikroarchitektuře Intel Core a AMD K10 (K8L) . Bylo oznámeno 27. září 2006 na Fóru Intel Developer Forum na podzim 2006 s vágními detaily v bílé knize ; přesnější podrobnosti o 47 pokynech byly k dispozici na prezentačním fóru Intel Developer Forum na jaře 2007 v Pekingu . SSE4 je plně kompatibilní se softwarem napsaným pro předchozí generace mikroprocesorů architektury Intel 64 a IA-32. Veškerý stávající software nadále běží správně bez úprav na mikroprocesorech, které obsahují SSE4, a také za přítomnosti stávajících a nových aplikací, které obsahují SSE4.

Podskupiny SSE4

Intel SSE4 se skládá z 54 pokynů. V Penryn je k dispozici podmnožina sestávající ze 47 instrukcí, označovaná v některé dokumentaci Intel jako SSE4.1 . Navíc SSE4.2 , druhá podmnožina sestávající ze 7 zbývajících instrukcí, je nejprve k dispozici v Core i7 na bázi Nehalem . Společnost Intel připisuje zpětnou vazbu od vývojářů jako důležitou roli při vývoji sady instrukcí.

Počínaje procesory založenými na Barceloně představila AMD sadu instrukcí SSE4a , která má 4 instrukce SSE4 a 4 nové instrukce SSE. Tyto pokyny se nenacházejí v procesorech Intel podporujících SSE4.1 a procesory AMD začaly podporovat pouze procesory Intel SSE4.1 a SSE4.2 (úplná sada instrukcí SSE4) v procesorech FX na bázi Bulldozer . U SSE4a byla také zavedena nesprávně zarovnaná funkce SSE, což znamenalo, že pokyny pro zarovnání bez zarovnání byly stejně rychlé jako zarovnané verze na zarovnaných adresách. Rovněž to umožnilo zakázat kontrolu zarovnání u operací SSE bez načtení přistupujících k paměti. Intel později zavedl podobná vylepšení rychlosti pro nezarovnané SSE v jejich procesorech Nehalem, ale nezavedl nesprávně zarovnaný přístup podle instrukcí SSE bez načtení až do AVX .

Záměna jména

To, co je nyní známé jako SSSE3 (Supplemental Streaming SIMD Extensions 3), představené v řadě procesorů Intel Core 2 , bylo některými médii označováno jako SSE4, dokud Intel nepřišel s přezdívkou SSSE3. Interně nazvaný Merom New Instructions, Intel původně neplánoval přidělit jim speciální jméno, které bylo kritizováno některými novináři. Intel nakonec zmatek odstranil a vyhradil název SSE4 pro své další rozšíření sady instrukcí.

Společnost Intel používá k označení SSE4 marketingový výraz HD Boost .

Nové pokyny

Na rozdíl od všech předchozích iterací SSE obsahuje SSE4 instrukce, které provádějí operace, které nejsou specifické pro multimediální aplikace. Obsahuje řadu instrukcí, jejichž činnost je určena konstantním polem a sadou instrukcí, které berou XMM0 jako implicitní třetí operand.

Několik těchto pokynů umožňuje jednocyklový míchací motor v Penrynu. (Shuffle operations reorder bytes within a register.)

SSE4.1

Tyto pokyny byly zavedeny s mikroarchitekturou Penryn , 45 nm zmenšením mikroarchitektury Core společnosti Intel . Podpora je indikována pomocí příznaku CPUID.01H: ECX.SSE41 [Bit 19].

Návod Popis
MPSADBW
Vypočítejte osm offsetových součtů absolutních rozdílů, čtyři najednou (tj. | X 0 −y 0 |+| x 1 −y 1 |+| x 2 −y 2 |+| x 3 −y 3 |, | x 0 −y 1 |+| x 1 −y 2 |+| x 2 −y 3 |+| x 3 −y 4 |, ..., | x 0 −y 7 |+| x 1 −y 8 |+| x 2 −y 9 |+| x 3 −y 10 |); tato operace je důležitá pro některé HD kodeky a umožňuje vypočítat rozdíl bloku 8 × 8 v méně než sedmi cyklech. Jeden bit tříbitového okamžitého operandu udává, zda má být z cílového operandu použito y 0 .. y 10 nebo y 4 .. y 14 , další dva zda x 0 ..x 3 , x 4 ..x 7 , x 8 ..x 11 nebo x 12 ..x 15 by mělo být použito ze zdroje.
PHMINPOSUW
Nastaví spodní nepodepsané 16bitové slovo cíle na nejmenší nepodepsané 16bitové slovo ve zdroji a další zdola na index tohoto slova ve zdroji.
PMULDQ
Sbalené 32bitové podepsané „dlouhé“ násobení, dvě (1. a 3.) ze čtyř zabalených celých čísel se množí, což dává dva zabalené 64bitové výsledky.
PMULLD
Sbalené 32bitové podepsané „nízké“ násobení, vynásobené čtyři zabalené sady celých čísel poskytující čtyři zabalené 32bitové výsledky.
DPPS, DPPD
Tečkový produkt pro data AOS (Array of Structs). To vyžaduje okamžitý operand skládající se ze čtyř (nebo dvou pro DPPD) bitů, aby se vybralo, které ze vstupů ve vstupu se mají množit a akumulovat, a další čtyři (nebo dva pro DPPD), aby se vybralo, zda se má vložit 0 nebo bodový součin příslušné pole výstupu.
BLENDPS, BLENDPD, BLENDVPS,
BLENDVPD, PBLENDVB, PBLENDW
Podmíněné kopírování prvků na jednom místě s jiným, na základě (pro non-V formu) na bitech v bezprostředním operandu a (pro V forma) na bitech v registru XMM0.
PMINSB, PMAXSB, PMINUW, 
PMAXUW, PMINUD, PMAXUD, 
PMINSD, PMAXSD
Balené minimum/maximum pro různé typy celočíselných operandů
ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD
Zaokrouhlí hodnoty v registru s plovoucí desetinnou čárkou na celá čísla pomocí jednoho ze čtyř režimů zaokrouhlení určených okamžitým operandem
INSERTPS, PINSRB, PINSRD/PINSRQ,
EXTRACTPS, PEXTRB, PEXTRD/PEXTRQ
Pokyny INSERTPS a PINSR čtou 8, 16 nebo 32 bitů z registru x86 nebo paměťového místa a vloží jej do pole v cílovém registru daném okamžitým operandem. EXTRACTPS a PEXTR načtou pole ze zdrojového registru a vloží jej do registru x86 nebo paměťového místa. Například PEXTRD eax, [xmm0], 1; EXTRACTPS [addr+4*eax], xmm1, 1 ukládá první pole xmm1 na adresu danou prvním polem xmm0.
PMOVSXBW, PMOVZXBW, PMOVSXBD, 
PMOVZXBD, PMOVSXBQ, PMOVZXBQ, 
PMOVSXWD, PMOVZXWD, PMOVSXWQ, 
PMOVZXWQ, PMOVSXDQ, PMOVZXDQ
Balené znamení/nulové rozšíření na širší typy
PTEST
To je podobné instrukci TEST v tom, že nastaví příznak Z na výsledek AND mezi jeho operandy: ZF je nastaveno, pokud je DEST AND SRC roven 0. Navíc nastaví příznak C, pokud (NOT DEST) AND SRC se rovná nule.

To je ekvivalentní nastavení příznaku Z, pokud není nastaven žádný z bitů maskovaných SRC, a příznaku C, pokud jsou nastaveny všechny bity maskované SRC.

PCMPEQQ
Quadword (64 bitů) porovnání pro rovnost
PACKUSDW
Převeďte podepsané DWORD na nepodepsaná WORD se sytostí.
MOVNTDQA
Efektivní čtení z paměťové oblasti kombinující zápis do registru SSE; to je užitečné pro načítání výsledků z periferií připojených k paměťové sběrnici.

SSE4.2

SSE4.2 přidal STTNI (String and Text New Instructions), několik nových instrukcí, které provádějí vyhledávání znaků a porovnávání na dvou operandech po 16 bajtech najednou. Ty byly navrženy (mimo jiné) pro zrychlení analýzy dokumentů XML . Rovněž byla přidána instrukce CRC32 pro výpočet kontrol cyklické redundance, jak se používají v určitých protokolech přenosu dat. Tyto pokyny byly poprvé implementovány do produktové řady Intel Core i7 na bázi Nehalem a dokončily instrukční sadu SSE4. Podpora je indikována pomocí příznaku CPUID.01H: ECX.SSE42 [Bit 20].

Návod Popis
CRC32
Shromážděte hodnotu CRC32 C pomocí polynomu 0x11EDC6F41 (nebo bez bitu vysokého řádu 0x1EDC6F41).
PCMPESTRI
Sbalené srovnávací řetězce explicitní délky, návratový index
PCMPESTRM
Sbalené řetězce porovnání explicitní délky, návratová maska
PCMPISTRI
Sbalené řetězce porovnání implicitní délky, návratový index
PCMPISTRM
Sbalené srovnávací řetězce implicitní délky, návratová maska
PCMPGTQ
Porovnejte zabalená podepsaná 64bitová data za větší než

POPCNT a LZCNT

Tyto instrukce fungují spíše na celých číslech než na SSE registrech, protože nejsou instrukcemi SIMD, ale objevují se současně, a přestože je zavedla AMD s instrukční sadou SSE4a, jsou považovány za samostatná rozšíření s vlastními vyhrazenými bity CPUID pro označení podpory. Intel implementuje POPCNT počínaje mikroarchitekturou Nehalem a LZCNT počínaje mikroarchitekturou Haswell . AMD implementuje oba počínaje mikroarchitekturou v Barceloně .

AMD tuto dvojici pokynů nazývá Advanced Bit Manipulation (ABM) .

Návod Popis
POPCNT
Počet obyvatel (počet bitů nastavený na 1). Podpora je indikována pomocí příznaku CPUID.01H: ECX.POPCNT [Bit 23].
LZCNT
Vedoucí nulový počet . Podpora je indikována příznakem CPUID.80000001H: ECX.ABM [Bit 5].

Kódování lzcnt je podobné natolik, aby BSR (bit SCAN reverzní), který v případě, lzcnt se provede na CPU nepodporuje to, jako Intel CPU před Haswell, bude provádět BSR operaci a nezpůsobí chybu neplatné instrukce přes jinému výsledku hodnoty lzcnt a BSR .

Koncové nuly mohou být počítány pomocí BSF (trochu směrem vpřed) nebo tzcnt instrukce.

SSE4a

Skupina instrukcí SSE4a byla představena v mikroarchitektuře AMD v Barceloně . Tyto pokyny nejsou k dispozici v procesorech Intel. Podpora je indikována pomocí příznaku CPUID.80000001H: ECX.SSE4A [Bit 6].

Návod Popis
EXTRQ/INSERTQ
Kombinované pokyny pro posun masky.
MOVNTSD/MOVNTSS
Skalární pokyny pro streamovací obchod.

Podpora CPU

Reference

externí odkazy