SSE4
Az SSE4 (Streaming SIMD Extensions 4) egy SIMD CPU utasításkészlet, amelyet az Intel Core mikroarchitektúrában és az AMD K10 (K8L) processzorokban használnak. 2006. szeptember 27-én jelentették be, a 2006-os őszi Intel Developer Forumon, egy általános tájékoztatóban;[1] a készlet 47 utasításának pontosabb részletei a 2007 tavaszi pekingi Intel Developer Forumon bemutatott prezentációban váltak ismertté.[2] Az SSE4 teljesen kompatibilis az Intel 64 (azaz x86-64) és IA-32 architektúrájú mikroprocesszorok korábbi generációihoz írt szoftverekkel. Minden meglévő szoftver továbbra is megfelelően, módosítás nélkül fut az SSE4-et tartalmazó mikroprocesszorokon, az SSE4-et tartalmazó alkalmazások jelenlétében is.[3]
Az SSE4 részleges megvalósításai
szerkesztésAz Intel SSE4 összesen 54 utasításból áll. Ennek első kiadása 47 utasításból áll, SSE4.1 néven szerepel néhány Intel dokumentációban, és a Penryn Core 2 magokban jelent meg. Nem sokkal később megjelent az SSE4.2 jelű utasításcsoport, amely a maradék 7 utasítást tartalmazza; ez először a Nehalem-alapú Core i7 processzorokban vált elérhetővé. Az Intel figyelembe vette a fejlesztők visszajelzéseit az utasításkészlet fejlesztésében.[4]
Az AMD a Barcelona alapú processzorokkal kezdve bevezette az SSE4a utasításkészlet, amely négy SSE4 utasítást és négy új SSE utasítást tartalmaz. Ezek az utasítások nincsenek meg az Intel SSE4.1-et támogató processzoraiban. Az AMD processzorok a teljes SSE4 utasításkészletet (ami az Intel SSE4.1 és SSE4.2 együtt) csak a Bulldozer alapú FX processzorok megjelenésétől kezdve támogatja. Az SSE4a-val bevezetésre került a „rosszul igazított” (misaligned) SSE funkció is, ami azt jelenti, hogy a nem megfelelően igazított adatok betöltése ugyanolyan gyors, mint az igazított címeken elhelyezkedő adatokat töltő utasítások. Ez lehetővé tette továbbá az igazítás/illesztés ellenőrzésének letiltását a nem betöltő memóriahozzáférést végző SSE műveleteknél.[5] Az Intel később hasonló rendszert vezetett be a Nehalem processzorokban a nem igazított SSE sebességének javítására, de a nem igazított adathozzáférést a nem betöltő SSE utasításoknál nem vezette be egészen az AVX megjelenéséig.[6]
Névzavar
szerkesztésA ma már SSSE3 (Supplemental Streaming SIMD Extensions 3) néven ismert, az Intel Core 2 processzorcsaládban (2006) bevezetett utasításkészletet egyes médiumok SSE4 néven emlegették, míg az Intel elő nem állt az SSSE3 elnevezéssel. A belsőleg Merom New Instructions elnevezésű készletnek az Intel eredetileg nem is akart külön nevet adni, de ezt a tervet nyilvános kritika érte.[7] A cég végül a zavar tisztázása érdekében kijelentette, hogy az SSE4 nevet fenntartja a rákövetkező utasításkészlet-kiterjesztésekhez.[8]
Az Intel a HD Boost marketingkifejezést használja az SSE4-re.[9]
Új utasítások
szerkesztésAz SSE minden korábbi iterációjával ellentétben, az SSE4 olyan utasításokat tartalmaz, amelyek nem kifejezetten multimédia-alkalmazásokban alkalmazott műveleteket hajtanak végre. Több olyan utasítást tartalmaz, amelyek működését egy konstans mező határozza meg, valamint egy sor olyan utasítást, amelyek az XMM0 regisztert implicit harmadik operandusként használják.
Az utasítások közül többet a Penryn processzor egyciklusos permutációs motorja hajt végre. A permutációs (keverés, 'shuffle') műveletek átrendezik a bájtokat egy regiszteren belül.
SSE4.1
szerkesztésEzek az utasítások a Penryn mikroarchitektúrában voltak bevezetve, amely az Intel Core mikroarchitektúra 45 nm-re történt zsugorításával készült. A készlet támogatását a CPUID.01H:ECX.SSE41[Bit 19] bit jelzi.
Utasítás | Leírás |
---|---|
MPSADBW
|
Összegzi az xmm1 és xmm2/m128 négy bájtos egész számok szomszédos csoportjainak 8 bites egész számok különbségének abszolút értékét, és az eredményeket az xmm1-be írja. Az xmm1-en és xmm2/m128-on belüli kezdő eltolásokat az imm8 határozza meg. (Azaz: |x0−y0|+|x1−y1|+|x2−y2|+|x3−y3|, |x0−y1|+|x1−y2|+|x2−y3|+|x3−y4|,..., |x0−y7|+|x1−y8|+|x2−y9|+|x3−y10|); ez művelet fontos néhány HD kodek esetén, lehetővé teszi egy 8×8-as blokk különbségének számítását kevesebb mint hét ciklus alatt.[10] Egy három bites közvetlen operandus egy bitje jelzi, hogy az y0.. y10 vagy y4.. y14 lesz a céloperandus, a másik kettő azt, hogy x0..x3, x4..x7, x8..x11 vagy x12..x15 csoportokat kell használni a forrásból. |
PHMINPOSUW
|
Keresi a forrásoperandusban a legkisebb előjel nélküli 16 bites szót (minimum), az eredmény a céloperandus alsó 16 bites szavába kerül, a minimális érték szóindexe a céloperandus 16-18. bitjeiben tárolódik. |
PMULDQ
|
Csomagolt 32 bites előjeles „hosszú” szorzás. Az xmm1-ben lévő csomagolt előjeles kétszavas egészek szorzása az xmm2/m128-ban lévő csomagolt előjeles kétszavas egész számokkal, a négyszavas eredményeket (2×64 bit) az xmm1-be helyezi. |
PMULLD
|
Csomagolt 32 bites előjeles „alacsony” szorzás: szorozza az xmm1 és xmm2/m128 csomagolt dword (32 bit/4 bájt) előjeles egész számokat, és tárolja a szorzat alacsony 32 bitjét az xmm1-ben (négy csomagolt 32 bites eredmény). |
DPPS , DPPD
|
Skalárszorzat AOS (Array of Structs, struktúratömb) adatokkal. A DPPS egyszeres pontosságú, a DPPD kétszeres pontosságú lebegőpontos értékekkel dolgozik. Szelektíven szorozza az xmm1-ből származó csomagolt lebegőpontos értékeket az xmm2-ből származó csomagolt lebegőpontos értékekkel, összeadja és szelektíven tárolja a csomagolt lebegőpontos vagy a nulla értékeket az xmm1-be. A szelekciót a közvetlen operandus 2×4 (DPPS) vagy 2×2 (DPPD) bitje vezérli. |
BLENDPS , BLENDPD , BLENDVPS , BLENDVPD , PBLENDVB , PBLENDW
|
Elemek feltételes másolása az operandusok között, a forráselemek másolását egy közvetlen operandus bitjei, vagy az xmm0 regiszteroperandus bitjei vezérlik. |
PMINSB , PMAXSB , PMINUW , PMAXUW , PMINUD , PMAXUD , PMINSD , PMAXSD
|
Csomagolt elemenkénti minimum/maximum gyűjtés különböző egész típusú operandusokkal. Pl. PMINSB: az xmm1 és xmm2/m128 csomagolt előjeles bájtok összehasonlítása és a csomagolt minimum értékek tárolása az xmm1-ben (bájtonként). |
ROUNDPS , ROUNDSS , ROUNDPD , ROUNDSD
|
Csomagolt lebegőpontos értékek kerekítése egész számokká, a közvetlen operandusban megadott kerekítési mód szerint |
INSERTPS , PINSRB , PINSRD , PINSRQ , EXTRACTPS , PEXTRB , PEXTRD , PEXTRQ
|
Az INSERTPS és PINSR utasítások 8, 16 vagy 32 bitet olvasnak egy x86 regiszterből vagy memóriahelyről és beillesztik azt a célregiszter közvetlen operandus által meghatározott mezőjébe. Az EXTRACTPS és PEXTR olvas egy mezőt a forrásregiszterből és és beilleszti azt egy x86 regiszterbe vagy memóriahelyre. Például a PEXTRD eax, [xmm0], 1; EXTRACTPS [addr+4*eax], xmm1, 1 az xmm0 első mezője által meghatározott címre tárolja az xmm1 első mezőjét.
|
PMOVSXBW , PMOVZXBW , PMOVSXBD , PMOVZXBD , PMOVSXBQ , PMOVZXBQ , PMOVSXWD , PMOVZXWD , PMOVSXWQ , PMOVZXWQ , PMOVSXDQ , PMOVZXDQ
|
Csomagolt előjel- / nulla-kiterjesztés szélesebb típusokra |
PTEST
|
Ez hasonló a TEST utasításhoz, mivel beállítja a Z jelzőbitet az operandusok közötti AND művelet eredménye szerint: Z beállítva, ha DEST AND SRC eredménye nulla. Ezenkívül a C jelzőbitet is beállítja, ha (NOT DEST) AND SRC egyenlő nullával. Tehát a Z jelzőbit 1, ha a SRC által maszkolt bitek egyike sincs beállítva, és a C jelzőbit 1, ha az SRC által maszkolt összes bit be van állítva.
|
PCMPEQQ
|
Négyszavas (quadword, 64 bit) egyenlőségvizsgálat |
PACKUSDW
|
Előjeles duplaszavak (dword) átalakítása előjel nélküli egyszeres szavakká (word), telítéssel |
MOVNTDQA
|
Hatékony olvasás az írást kombináló memóriaterületről az SSE regiszterbe; hasznos a memóriabuszra csatlakoztatott perifériák eredményeinek lekérdezésénél |
SSE4.2
szerkesztésAz SSE4.2 az STTNI (String and Text New Instructions, string és szöveg[kezelő] új utasítások) bővítményt tartalmazza,[11] melynek 4 új utasítása karakterkeresést és összehasonlítást végez két, egyenként 16 bájtos operanduson. Ezeket – többek között – az XML dokumentumok elemzésének felgyorsítására tervezték.[12] A készlethez tartoznak még a PCMPGTQ, CRC32, POPCNT utasítások. A CRC32
utasítás egyes adatátviteli protokollokban használt ciklikus redundancia-ellenőrzés kiszámítására szolgál. Ezek az utasítások először a Nehalem-alapú Intel Core i7 termékcsaládban voltak bevezetve, és kiegészítik az SSE4 utasításkészletet. A készlet támogatását a CPUID.01H:ECX.SSE42[Bit 20] bit jelzi.
Az SSE 4.2 CRC32 utasítása a Castagnoli-polinomot (CRC32-C) használja, és nem kompatibilis az IEEE 802.3 szabványosított CRC32 változattal, amelyet hálózati protokollok (például Ethernet, V.42), SATA, MPEG-2, PNG és UNIX parancsok, vagy a Gzip, Bzip2 és zip tömörítés használnak. A Castagnoli-polinomot a Btrfs, az Ext4, az iSCSI, az SCTP és más formátumok használják.[13][14]
A Windows 11 24H2 használatához a processzornak támogatnia kell az SSE4.2-t, ellenkező esetben a Windows, illetve maga a kernel nem indítható.[15] Ezzel megakadályozva, hogy régebbi számítógépeken is fusson a rendszer.
Utasítás | Leírás |
---|---|
CRC32
|
A CRC32C érték meghatározása a 0x11EDC6F41 polinom felhasználásával (vagy a legmagasabb helyiértékű bit nélkül: 0x1EDC6F41).[14][16][17] |
PCMPESTRI
|
Csomagolt explicit hosszú karakterláncok összehasonlítása, index visszaadása |
PCMPESTRM
|
Csomagolt explicit hosszú karakterláncok összehasonlítása, maszk visszaadása |
PCMPISTRI
|
Csomagolt implicit hosszú karakterláncok összehasonlítása, index visszaadása |
PCMPISTRM
|
Csomagolt implicit hosszú karakterláncok összehasonlítása, maszk visszaadása |
PCMPGTQ
|
Csomagolt előjeles 64 bites adatok (négyszavas egészek) összehasonlítása „nagyobb mint” relációval |
POPCNT
|
1 értékű bitek számlálása, alkalmazásgyorsító utasítás |
POPCNT és LZCNT
szerkesztésEzek az utasítások nem SSE regisztereken, hanem egész számokon működnek, mivel nem SIMD utasítások, de egyidőben jelentek meg, és bár az AMD az SSE4a utasításkészlettel vezette be őket, mégis különálló kiterjesztéseknek számítanak, saját dedikált CPUID bitekkel, amelyek jelzik a támogatást az adott processzorban. Az Intel a Nehalem mikroarchitektúrától kezdve megvalósítja a POPCNT
utasítást, a Haswell mikroarchitektúrától kezdve pedig a LZCNT
utasítást. Az AMD mindkettőt megvalósítja az Barcelona mikroarchitektúrától kezdve.
A Windows 11 24H2 használatához a processzornak támogatnia kell az SSE4.2-t, ellenkező esetben a Windows, illetve maga a kernel nem indítható.[15] Ezzel megakadályozva, hogy régebbi számítógépeken is fusson a rendszer.
Az utasításpár AMD szerinti elnevezése Advanced Bit Manipulation, fejlett bitmanipulásiós utasítások, röviden ABM.
Utasítás | Leírás |
---|---|
POPCNT
|
Populációszám (population count): a nem-nulla (1-re beállított) bitek száma. Az utasítás támogatását a CPUID.01H:ECX.POPCNT[Bit 23] bit jelzi.[18] |
LZCNT
|
Vezető nullák száma. Az utasítás támogatását a CPUID.80000001H:ECX.ABM[Bit 5] bit jelzi.[19] |
Az LZCNT
kódolása ugyanazt a kódolási mintát követi, mint a BSR
(fordított bit pásztázás, bit scan reverse) utasítás. Az LZCNT
utasítás meghívása problémát okoz néhány, az utasítást nem támogató processzoron, például a Haswell előtti Intel CPU-kon, ahol helytelenül BSR
művelet hajtódik végre, ahelyett, hogy a processzor érvénytelen utasítás kivételt dobna. Ez azért probléma, mert az LZCNT
és a BSR
utasítások eredménye különböző.
Az operandus végén álló nullákat a BSF
(bit pásztázás előre, bit scan forward) vagy a TZCNT
utasításokkal lehet számolni.
SSE4a
szerkesztésA 4 utasítást tartalmazó SSE4a utasításcsoportot az AMD a Barcelona mikroarchitektúrában vezette be. Ezek az utasítások nem elérhetők az Intel processzorokban. Ezek támogatását a CPUID.80000001H:ECX.SSE4A[Bit 6] bit jelzi.[19]
Utasítás | Leírás |
---|---|
EXTRQ , INSERTQ
|
Kombinált maszkolás-eltolás utasítások.[20] |
MOVNTSD , MOVNTSS
|
Skalár adatfolyamtároló utasítások, egyszeres és kétszeres pontosságú lebegőpontos adatokra.[21] |
Támogató CPU-k
szerkesztés- Intel
- Silvermont processzorok (SSE4.1, SSE4.2 és
POPCNT
támogatás) - Goldmont processzorok (SSE4.1, SSE4.2 és
POPCNT
) - Goldmont Plus processzorok (SSE4.1, SSE4.2 és
POPCNT
) - Tremont processzorok (SSE4.1, SSE4.2 és
POPCNT
) - Penryn processzorok (SSE4.1 támogatás, kivéve Pentium Dual-Core és Celeron)
- Nehalem és Westmere processzorok (SSE4.1, SSE4.2 és
POPCNT
támogatás, kivéve Pentium és Celeron) - Sandy Bridge processzorok és újabbak (SSE4.1, SSE4.2 és
POPCNT
támogatás, ezek között van a Pentium és Celeron is) - Haswell processzorok és újabbak (SSE4.1, SSE4.2,
POPCNT
ésLZCNT
)
- Silvermont processzorok (SSE4.1, SSE4.2 és
- AMD
- K10 alapú processzorok (SSE4a,
POPCNT
ésLZCNT
támogatás) - "Cat" kis fogyasztású processzorok
- Bobcat alapú processzorok (SSE4a,
POPCNT
ésLZCNT
) - Jaguar alapú processzorok és újabbak (SSE4a, SSE4.1, SSE4.2,
POPCNT
ésLZCNT
) - Puma alapú processzorok és újabbak (SSE4a, SSE4.1, SSE4.2,
POPCNT
ésLZCNT
)
- Bobcat alapú processzorok (SSE4a,
- "Heavy Equipment" processzorok (SSE4a, SSE4.1, SSE4.2,
POPCNT
ésLZCNT
)- Bulldozer alapú processzorok
- Piledriver alapú processzorok[22]
- Steamroller alapú processzorok
- Excavator alapú processzorok és újabbak
- Zen alapú processzorok (SSE4a, SSE4.1, SSE4.2,
POPCNT
ésLZCNT
) - Zen+ alapú processzorok (SSE4a, SSE4.1, SSE4.2,
POPCNT
ésLZCNT
) - Zen2 alapú processzorok (SSE4a, SSE4.1, SSE4.2,
POPCNT
ésLZCNT
) - Zen3 alapú processzorok (SSE4a, SSE4.1, SSE4.2,
POPCNT
ésLZCNT
)
- K10 alapú processzorok (SSE4a,
- VIA
- Zhaoxin
- ZX-C processzorok és újabbak (SSE4.1, SSE4.2)
Jegyzetek
szerkesztés- ↑ Intel Streaming SIMD Extensions 4 (SSE4) Instruction Set Innovation Archiválva 2009. május 30-i dátummal a Wayback Machine-ben., Intel.
- ↑ Tuning for Intel SSE4 for the 45nm Next Generation Intel Core Microarchitecture Archiválva 2021. március 8-i dátummal a Wayback Machine-ben., Intel.
- ↑ Intel SSE4 Programming Reference. [2020. február 15-i dátummal az eredetiből archiválva]. (Hozzáférés: 2014. december 26.)
- ↑ https://www.intel.com/content/www/us/en/support/articles/000005779/processors.html
- ↑ "Barcelona" Processor Feature: SSE Misaligned Access. AMD. [2016. augusztus 9-i dátummal az eredetiből archiválva]. (Hozzáférés: 2015. március 3.)
- ↑ Inside Intel Nehalem Microarchitecture. [2015. április 2-i dátummal az eredetiből archiválva]. (Hozzáférés: 2015. március 3.)
- ↑ My Experience With "Conroe" Archiválva 2013. október 15-i dátummal a Wayback Machine-ben., DailyTech
- ↑ Extending the World’s Most Popular Processor Architecture Archiválva 2011. november 24-i dátummal a Wayback Machine-ben., Intel
- ↑ Intel - Data Center Solutions, IOT, and PC Innovation. Intel. [2013. február 7-i dátummal az eredetiből archiválva]. (Hozzáférés: 2009. szeptember 17.)
- ↑ Motion Estimation with Intel Streaming SIMD Extensions 4 (Intel SSE4) Archiválva 2018. június 16-i dátummal a Wayback Machine-ben., Intel.
- ↑ Schema Validation with Intel® Streaming SIMD Extensions 4 (Intel® SSE4). [2018. június 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. február 6.)
- ↑ XML Parsing Accelerator with Intel® Streaming SIMD Extensions 4 (Intel® SSE4). [2018. június 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2012. február 6.)
- ↑ CRC-32 (angol nyelven). wuffs. Google Code, 2018
- ↑ a b Félix Cloutier: CRC32 — Accumulate CRC32 Value (angol nyelven). online x86 reference, 2024. február 18. (Hozzáférés: 2024. március 1.)
- ↑ a b Klotz, Aaron: Microsoft blocks some PCs from Windows 11 24H2 — CPU must support SSE4.2 or the OS will not boot. Tom's Hardware , 2024. április 24. (Hozzáférés: 2024. április 29.)
- ↑ Intel SSE4 Programming Reference Archiválva 2020. február 15-i dátummal a Wayback Machine-ben. p. 61. Nézze szintén RFC 3385 Archiválva 2008. június 19-i dátummal a Wayback Machine-ben. #>nak# elemzés/vita a CRC32C-nek többtag/többtagú/polinom/polinomiális.
- ↑ Fast, Parallelized CRC Computation Using the Nehalem CRC32 Instruction — Dr. Dobbs, 2011. április 12.
- ↑ Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 2B: Instruction Set Reference, N–Z Archiválva 2011. március 8-i dátummal a Wayback Machine-ben..
- ↑ a b AMD CPUID Specification. [2013. november 1-i dátummal az eredetiből archiválva]. (Hozzáférés: 2013. október 30.)
- ↑ Rahul Chaturvedi: "Barcelona" Processor Feature: SSE4a Instruction Set, 2007. szeptember 17. [2013. október 25-i dátummal az eredetiből archiválva].
- ↑ Rahul Chaturvedi: "Barcelona" Processor Feature: SSE4a, part 2, 2007. október 2. [2013. október 25-i dátummal az eredetiből archiválva].
- ↑ AMD FX-Series FX-6300 - FD6300WMW6KHK / FD6300WMHKBOX. [2017. augusztus 17-i dátummal az eredetiből archiválva]. (Hozzáférés: 2015. október 9.)
Fordítás
szerkesztésEz a szócikk részben vagy egészben a SSE4 című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
Források
szerkesztés- R.M. Ramanathan; Ron Curry, Srinivas Chennupaty, Robert L. Cross, Shihjong Kuo, Mark J. Buxton, Intel Corporation: Extending the World’s Most Popular Processor Architecture (angol nyelven) (pdf). White Paper pp. 8. Intel, 2006. szeptember 27. (Hozzáférés: 2024. március 8.)
- Intel® SSE4 Programming Reference (angol nyelven) (pdf) pp. 1-197. Intel, 2007. július. (Hozzáférés: 2024. március 1.) „Reference Number: D91561-003”
További információk
szerkesztés- SSE4 Programming Reference, Intel
- PCMPSTR számológép az SSE 4.2 stringutasításokhoz (archiválva: Ghostarchive.org, 2022. május 10.)