SSE4
SSE4 ( Streaming SIMD Extensions 4 ) är en SIMD CPU- instruktionsuppsättning som används i Intel Core-mikroarkitekturen och AMD K10 (K8L) . Det tillkännagavs den 27 september 2006 vid Intel Developer Forum hösten 2006 , med vaga detaljer i en vitbok ; mer exakta detaljer om 47 instruktioner blev tillgängliga på våren 2007 Intel Developer Forum i Peking , i presentationen. SSE4 är helt kompatibel med programvara skriven för tidigare generationer av Intel 64- och IA-32-arkitekturmikroprocessorer. All befintlig programvara fortsätter att köras korrekt utan ändringar på mikroprocessorer som innehåller SSE4, såväl som i närvaro av befintliga och nya applikationer som innehåller SSE4.
SSE4 delmängder
Intel SSE4 består av 54 instruktioner. En delmängd bestående av 47 instruktioner, kallad SSE4.1 i viss Intel-dokumentation, finns tillgänglig i Penryn . Dessutom SSE4.2 , en andra delmängd bestående av de 7 återstående instruktionerna, först tillgänglig i Nehalem -baserade Core i7 . Intel anser att feedback från utvecklare spelar en viktig roll i utvecklingen av instruktionsuppsättningen.
Från och med Barcelona -baserade processorer introducerade AMD SSE4a -instruktionsuppsättningen, som har 4 SSE4-instruktioner och 4 nya SSE-instruktioner. Dessa instruktioner finns inte i Intels processorer som stöder SSE4.1 och AMD-processorer som bara började stödja Intels SSE4.1 och SSE4.2 (hela SSE4-instruktionsuppsättningen) i Bulldozer -baserade FX-processorer. Med SSE4a introducerades också den felaktiga SSE-funktionen, vilket innebar att ojusterade laddningsinstruktioner var lika snabba som justerade versioner på justerade adresser. Det gjorde det också möjligt att inaktivera inriktningskontrollen på icke-lastade SSE-operationer som åtkomst till minne. Intel introducerade senare liknande hastighetsförbättringar för ojusterade SSE i sina Nehalem-processorer, men introducerade inte feljusterad åtkomst genom icke-lastade SSE-instruktioner förrän AVX .
Namnförvirring
Det som nu är känt som SSSE3 (Supplemental Streaming SIMD Extensions 3), introducerat i Intel Core 2- processorlinjen, hänvisades till som SSE4 av vissa medier tills Intel kom med SSSE3-monikern. Internt kallad Merom New Instructions, Intel planerade ursprungligen inte att tilldela dem något speciellt namn, vilket kritiserades av vissa journalister. Intel löste så småningom förvirringen och reserverade SSE4-namnet för deras nästa instruktionsuppsättningstillägg.
Intel använder marknadsföringstermen HD Boost för att referera till SSE4.
Nya instruktioner
Till skillnad från alla tidigare iterationer av SSE, innehåller SSE4 instruktioner som utför operationer som inte är specifika för multimediaapplikationer. Den innehåller ett antal instruktioner vars åtgärd bestäms av ett konstant fält och en uppsättning instruktioner som tar XMM0 som en implicit tredje operand.
Flera av dessa instruktioner är aktiverade av encykels shuffle-motorn i Penryn. (Blanda operationer ändrar ordningen på bytes i ett register.)
SSE4.1
Dessa instruktioner introducerades med Penryn mikroarkitektur , 45 nm krympningen av Intels Core mikroarkitektur . Support indikeras via flaggan CPUID.01H:ECX.SSE41[Bit 19].
Instruktion | Beskrivning |
---|---|
MPSADBW
|
0000 00 Beräkna åtta offsetsummor av absoluta skillnader, fyra åt gången (dvs |x −y |+|x 1 −y 1 |+|x 2 −y 2 |+|x 3 −y 3 |, |x −y 1 |+|x 1 −y 2 |+|x 2 −y 3 |+|x 3 −y 4 |, ..., |x −y 7 |+|x 1 −y 8 |+|x 2 −y 9 |+|x 3 -y 10 |); denna operation är viktig för vissa HD- codecs och gör att en 8×8 blockskillnad kan beräknas på mindre än sju cykler. En bit av en trebitars omedelbar operand anger om y .. y 10 eller y 4 .. y 14 ska användas från destinationsoperanden, de andra två om x ..x 3 , x 4 ..x 7 , x 8 ..x 11 eller x 12 ..x 15 bör användas från källan. |
PHMINPOSUW
|
Ställer in det nedersta osignerade 16-bitarsordet för destinationen till det minsta osignerade 16-bitarsordet i källan, och nästa-från-botten till indexet för det ordet i källan. |
PMULDQ
|
Packad 32-bitars signerad "lång" multiplikation, två (1:a och 3:e) av fyra packade heltal multiplicerade ger två packade 64-bitars resultat. |
PMULLD
|
Packad 32-bitars signerad "låg" multiplikation, fyra packade uppsättningar av heltal multiplicerade ger fyra packade 32-bitars resultat. |
DPPS , DPPD
|
Punktprodukt för AOS-data (Array of Structs). Detta kräver en omedelbar operand bestående av fyra (eller två för DPPD) bitar för att välja vilken av posterna i ingången som ska multipliceras och ackumuleras, och ytterligare fyra (eller två för DPPD) för att välja om 0 eller punktprodukten ska läggas in i lämpligt fält för utgången. |
BLENDPS , BLENDPD , BLENDVPS , BLENDVPD , PBLENDVB , PBLENDW
|
Villkorlig kopiering av element på en plats med en annan, baserad (för icke-V-form) på bitarna i en omedelbar operand, och (för V-form) på bitarna i register XMM0. |
PMINSB , PMAXSB , PMINUW , PMAXUW , PMINUD , PMAXUD , PMINSD , PMAXSD
|
Packad minimum/maximum för olika heltalsoperandtyper |
ROUNDPS , ROUNDSS , ROUNDPD , ROUNDSD
|
Avrunda värden i ett flyttalsregister till heltal, med ett av fyra avrundningslägen specificerade av en omedelbar operand |
INSERTPS , PINSRB , PINSRD / PINSRQ , EXTRACTPS , PEXTRB , PEXTRD / PEXTRQ
|
Instruktionerna INSERTPS och PINSR läser 8, 16 eller 32 bitar från ett x86-register eller minnesplats och infogar det i ett fält i destinationsregistret som ges av en omedelbar operand. EXTRACTPS och PEXTR läser ett fält från källregistret och infogar det i ett x86-register eller minnesplats. Till exempel, PEXTRD eax, [xmm0], 1; EXTRACTPS [addr+4*eax], xmm1, 1 lagrar det första fältet av xmm1 i adressen som ges av det första fältet av xmm0. |
PMOVSXBW , PMOVZXBW , PMOVSXBD , PMOVZXBD , PMOVSXBQ , PMOVZXBQ , PMOVSXWD , PMOVZXWD , PMOVSXWQ , PMOVZXWQ , PMOVSXZDQDQ PM _
|
Packad skylt/nollförlängning till bredare typer |
PTEST
|
Detta liknar TEST-instruktionen, genom att den sätter Z-flaggan till resultatet av en AND mellan dess operander: ZF är satt, om DEST OCH SRC är lika med 0. Dessutom sätter den C-flaggan om (NOT DEST) AND SRC är lika med noll. Detta är ekvivalent med att sätta Z-flaggan om ingen av bitarna maskerade av SRC är satta, och C-flaggan om alla bitar maskerade av SRC är satta. |
PCMPEQQ
|
Quadword (64 bitar) jämför för jämlikhet |
PACKUSDW
|
Konvertera signerade DWORDs till osignerade WORDs med mättnad. |
MOVNTDQA
|
Effektiv läsning från skrivkombinerande minnesområde till SSE-register; detta är användbart för att hämta resultat från kringutrustning som är ansluten till minnesbussen. |
SSE4.2
SSE4.2 lade till STTNI (String and Text New Instructions), flera nya instruktioner som utför teckensökningar och jämförelser på två operander på 16 byte åt gången. Dessa utformades (bland annat) för att påskynda analysen av XML- dokument. Den lade också till en CRC32-instruktion för att beräkna cykliska redundanskontroller som används i vissa dataöverföringsprotokoll. Dessa instruktioner implementerades först i den Nehalem -baserade Intel Core i7- produktlinjen och kompletterar SSE4-instruktionsuppsättningen. Support indikeras via flaggan CPUID.01H:ECX.SSE42[Bit 20].
Instruktion | Beskrivning |
---|---|
CRC32
|
Ackumulera CRC32 C-värdet med hjälp av polynomet 0x11EDC6F41 (eller, utan den höga ordningens bit, 0x1EDC6F41). |
PCMPESTRI
|
Packade Jämför explicita längdsträngar, returindex |
PCMPESTRM
|
Packade Jämför strängar med explicit längd, returmask |
PCMPISTRI
|
Packade Jämför implicita längdsträngar, returindex |
PCMPISTRM
|
Packade Jämför implicita längdsträngar, returmask |
PCMPGTQ
|
Jämför packad signerad 64-bitars data för större än |
POPCNT och LZCNT
Dessa instruktioner fungerar på heltal snarare än SSE-register, eftersom de inte är SIMD-instruktioner, utan visas samtidigt och även om de introducerades av AMD med SSE4a-instruktionsuppsättningen, räknas de som separata tillägg med sina egna dedikerade CPUID-bitar för att indikera stöd. Intel implementerar POPCNT som börjar med Nehalem -mikroarkitekturen och LZCNT som börjar med Haswell -mikroarkitekturen. AMD implementerar båda från Barcelonas mikroarkitektur .
AMD kallar detta instruktionspar Advanced Bit Manipulation (ABM) .
Instruktion | Beskrivning |
---|---|
POPCNT
|
Populationsantal (antal antal bitar satt till 1). Support indikeras via flaggan CPUID.01H:ECX.POPCNT[Bit 23]. |
LZCNT
|
Ledande nollräkning . Support indikeras via flaggan CPUID.80000001H:ECX.ABM[Bit 5]. |
Kodningen av lzcnt tar samma kodningsväg som kodningen av bsr- instruktionen (bit scan reverse). Detta resulterar i ett problem där lzcnt anropade vissa processorer som inte stöder det, t.ex. Intel-processorer före Haswell, kan felaktigt utföra bsr -operationen istället för att ta fram ett ogiltigt instruktionsundantag . Detta är ett problem eftersom resultatvärdena för lzcnt och bsr är olika.
Efterföljande nollor kan räknas med bsf (bit scan forward) eller tzcnt instruktionerna.
SSE4a
Instruktionsgruppen SSE4a introducerades i AMD:s Barcelona-mikroarkitektur . Dessa instruktioner är inte tillgängliga i Intel-processorer. Support indikeras via CPUID.80000001H:ECX.SSE4A[Bit 6]-flaggan.
Instruktion | Beskrivning |
---|---|
EXTRQ / INSERTQ
|
Kombinerade mask-shift instruktioner. |
MOVNTSD / MOVNTSS
|
Scalar streaming butik instruktioner. |
Stödjer CPU:er
-
Intel
- Silvermont -processorer (SSE4.1, SSE4.2 och POPCNT stöds)
- Goldmont -processorer (SSE4.1, SSE4.2 och POPCNT stöds)
- Goldmont Plus -processorer (SSE4.1, SSE4.2 och POPCNT stöds)
- Tremont -processorer (SSE4.1, SSE4.2 och POPCNT stöds)
- Penryn -processorer (SSE4.1 stöds, förutom Pentium Dual-Core och Celeron )
- Nehalem- processorer och Westmere -processorer (SSE4.1, SSE4.2 och POPCNT stöds, förutom Pentium och Celeron )
- Sandy Bridge- processorer och nyare (SSE4.1, SSE4.2 och POPCNT stöds, inkluderar Pentium och Celeron )
- Haswell -processorer och nyare (SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
-
AMD
- K10-baserade processorer (SSE4a, POPCNT och LZCNT stöds)
- "Cat" lågeffektprocessorer
- Bobcat-baserade processorer (SSE4a, POPCNT och LZCNT stöds)
- Jaguar-baserade processorer och nyare (SSE4a, SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
- Puma-baserade processorer och nyare (SSE4a, SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
- "Tung utrustning"-processorer (SSE4a, SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
- Bulldozerbaserade processorer
- Piledriver-baserade processorer
- Ångvält-baserade processorer
- Grävmaskinsbaserade processorer och nyare
- Zen-baserade processorer (SSE4a, SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
- Zen+-baserade processorer (SSE4a, SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
- Zen2-baserade processorer (SSE4a, SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
- Zen3-baserade processorer (SSE4a, SSE4.1, SSE4.2, POPCNT och LZCNT stöds)
- VIA
-
Zhaoxin
- ZX-C-processorer och nyare (SSE4.1, SSE4.2 stöds)
externa länkar
- SSE4-programmeringsreferens av Intel
- PCMPSTR-kalkylator för SSE 4.2-stränginstruktionerna arkiverade på Ghostarchive.org den 10 maj 2022