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
-
Intel
- Procesory Silvermont (podporovány SSE4.1, SSE4.2 a POPCNT)
- Goldmont procesory (SSE4.1, SSE4.2 a POPCNT podporovány)
- Procesory Goldmont Plus (podporovány SSE4.1, SSE4.2 a POPCNT)
- Procesory Tremont (podporovány SSE4.1, SSE4.2 a POPCNT)
- Procesory Penryn (podporováno SSE4.1, kromě Pentium Dual-Core a Celeron )
- Procesory Nehalem a Westmere (podporovány SSE4.1, SSE4.2 a POPCNT, kromě Pentium a Celeron )
- Procesory Sandy Bridge a novější (podporovány SSE4.1, SSE4.2 a POPCNT, zahrnují Pentium a Celeron )
- Procesory Haswell a novější (podporovány SSE4.1, SSE4.2, POPCNT a LZCNT)
-
AMD
- Procesory na bázi K10 (podporovány SSE4a, POPCNT a LZCNT)
- „Cat“ procesory s nízkým výkonem
- Procesory založené na Bobcatu (podporovány SSE4a, POPCNT a LZCNT)
- Procesory založené na Jaguaru a novější (podporovány SSE4a, SSE4.1, SSE4.2, POPCNT a LZCNT)
- Procesory na bázi Puma a novější (podporovány SSE4a, SSE4.1, SSE4.2, POPCNT a LZCNT)
- Procesory „Heavy Equipment“ (podporovány SSE4a, SSE4.1, SSE4.2, POPCNT a LZCNT)
- Procesory na bázi buldozeru
- Procesory založené na Piledriveru
- Procesory na bázi Steamroller
- Rýpadlo-založené procesory a novější
- Procesory založené na Zen (podporovány SSE4a, SSE4.1, SSE4.2, POPCNT a LZCNT)
- Procesory na bázi Zen+ (podporovány SSE4a, SSE4.1, SSE4.2, POPCNT a LZCNT)
- Procesory založené na Zen2 (podporovány SSE4a, SSE4.1, SSE4.2, POPCNT a LZCNT)
- Procesory založené na Zen3 (podporovány SSE4a, SSE4.1, SSE4.2, POPCNT a LZCNT)
- PŘES
-
Zhaoxin
- Procesory ZX-C a novější (podporováno SSE4.1, SSE4.2)
Reference
externí odkazy
- Reference programování SSE4 od společnosti Intel
- PCMPSTR kalkulačka pro pokyny řetězce SSE 4.2