SSE4
SSE4 (Streaming SIMD Extensions 4) este un set de instrucțiuni SIMD pentru CPU, utilizat în microarhitecturile Intel Core(d) și AMD K10 (K8L)(d). Acesta a fost anunțat la 27 septembrie 2006, la Forumul dezvoltatorilor Intel(d) din toamna anului 2006, cu detalii preliminare prezentate într-o carte albă(d);[1] informații mai detaliate despre 47 de instrucțiuni au devenit disponibile la Forumul dezvoltatorilor Intel din primăvara anului 2007, desfășurat la Beijing.[2]
SSE4 a extins setul de instrucțiuni SSE3(d), lansat la începutul anului 2004. Toate programele care utilizează instrucțiuni Intel SIMD anterioare (de exemplu, SSE3) sunt compatibile cu microprocesoarele moderne care acceptă SSE4. Programele existente continuă să ruleze corect, fără modificări, pe microprocesoarele care încorporează SSE4, chiar și în prezența aplicațiilor care utilizează noile instrucțiuni.[3]
La fel ca alte seturi de instrucțiuni SIMD din generațiile anterioare, SSE4 utilizează până la 16 registre XMM în modul x86-64, fiecare cu o lățime de 128 de biți, capabile să conțină patru numere întregi pe 32 de biți, patru numere în virgulă mobilă cu precizie simplă pe 32 de biți sau două numere în virgulă mobilă cu precizie dublă pe 64 de biți.[1] Operațiile SIMD, precum adunarea și multiplicarea vectorială, permit procesarea simultană a mai multor elemente de date într-o singură instrucțiune CPU, ceea ce conduce la creșteri semnificative de performanță. SSE4.2 a introdus noi operații SIMD pentru șiruri de caractere, inclusiv o instrucțiune pentru compararea a două fragmente de șir de caractere de până la 16 octeți fiecare.[1] SSE4.2 este un subset al SSE4 și a fost lansat la câțiva ani după introducerea inițială a SSE4.
Subseturi SSE4
[modificare | modificare sursă]Intel SSE4 constă din 54 de instrucțiuni. Un subset format din 47 de instrucțiuni, denumit SSE4.1 în documentația Intel, a fost introdus odată cu microarhitectura Penryn. În plus, SSE4.2, un al doilea subset format din cele șapte instrucțiuni rămase, a devenit disponibil pentru prima dată în Core i7 bazat pe Nehalem. Intel consideră că feedback-ul din partea dezvoltatorilor a jucat un rol important în dezvoltarea acestui set de instrucțiuni.
Începând cu procesoarele bazate pe Barcelona, AMD a introdus setul de instrucțiuni SSE4a, care include patru instrucțiuni SSE4 și patru instrucțiuni SSE noi. Aceste instrucțiuni nu sunt disponibile în procesoarele Intel care suportă SSE4.1, iar procesoarele AMD au început să suporte SSE4.1 și SSE4.2 (setul complet de instrucțiuni SSE4) abia în procesoarele FX bazate pe Bulldozer. Odată cu SSE4a a fost introdusă și funcționalitatea SSE nealiniată, ceea ce a permis ca instrucțiunile de încărcare nealiniate să fie la fel de rapide ca versiunile aliniate. De asemenea, a fost posibilă dezactivarea verificării alinierii în cazul operațiunilor SSE fără încărcare care accesează memoria.[4] Intel a introdus ulterior îmbunătățiri de performanță similare pentru accesul SSE nealiniat în procesoarele sale Nehalem, însă nu a introdus accesul nealiniat prin instrucțiuni SSE fără încărcare până la AVX(d).[5]
Confuzie de nume
[modificare | modificare sursă]Ceea ce este cunoscut astăzi sub numele de SSSE3(d) (Supplemental Streaming SIMD Extensions 3), introdus în linia de procesoare Intel Core 2, a fost denumit SSE4 de unele publicații până când Intel a adoptat oficial denumirea SSSE3. Denumite intern Merom New Instructions, Intel nu intenționa inițial să le atribuie un nume distinct, fapt care a fost criticat în presa de specialitate.[6] Intel a clarificat ulterior confuzia și a rezervat denumirea SSE4 pentru următoarea extensie a setului de instrucțiuni.[7]
Intel utilizează termenul de marketing HD Boost pentru a se referi la SSE4.[8]
Noi instrucțiuni
[modificare | modificare sursă]Spre deosebire de toate versiunile anterioare ale SSE, SSE4 conține instrucțiuni care execută operații ce nu sunt specifice aplicațiilor multimedia. Acesta include un număr de instrucțiuni a căror acțiune este determinată de un câmp constant, precum și un set de instrucțiuni care utilizează registrul XMM0 ca al treilea operand implicit.
Câteva dintre aceste instrucțiuni sunt accelerate de motorul Shuffle cu ciclu unic din Penryn (operațiile Shuffle reordonează octeții dintr-un registru).
SSE4.1
[modificare | modificare sursă]Aceste instrucțiuni au fost introduse odată cu microarhitectura Penryn(d), versiunea pe 45 nm a microarhitecturii Intel Core(d). Suportul este indicat prin intermediul indicatorului CPUID.01H:ECX.SSE41[Bit 19].
| Instrucțiune | Descriere |
|---|---|
MPSADBW |
Calculează opt sume offset ale diferențelor absolute, câte patru simultan (de ex. |x0−y0|+|x1−y1|+|x2−y2|+|x3−y3|, |x0−y1|+|x1−y2|+|x2−y3|+|x3−y4|, ..., |x0−y7|+|x1−y8|+|x2−y9|+|x3−y10|); această operație este importantă pentru unele codecuri HD(d) și permite calcularea unei diferențe de bloc 8×8 în mai puțin de șapte cicluri.[9] Un bit al unui operand imediat pe trei biți indică dacă y0–y10 sau y4–y14 trebuie utilizat din operandul de destinație, iar ceilalți doi biți indică dacă x0–x3, x4–x7, x8–x11 sau x12–x15 trebuie utilizați din operandul sursă. |
PHMINPOSUW |
Stabilește cuvântul inferior de 16 biți fără semn al destinației la cel mai mic cuvânt de 16 biți fără semn din sursă, iar următorul cuvânt la indexul acelui element din sursă. |
BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDW |
Copiere condiționată a elementelor dintr-un operand în altul, pe baza (pentru forma non-V) a biților unui operand imediat și (pentru forma V) a biților din registrul XMM0. |
PTEST |
Instrucțiune similară cu TEST, care setează steagul Z(d) dacă rezultatul operației ȘI între operanzi este zero; în plus, setează steagul C dacă (NOT DEST) AND SRC este zero. |
PCMPEQQ |
Comparare pentru egalitate a cuvintelor cvadruple (64 de biți) |
SSE4.2
[modificare | modificare sursă]SSE4.2 a adăugat STTNI (String and Text New Instructions),[10] un set de instrucțiuni care efectuează căutări și comparații de caractere pe doi operanzi de câte 16 octeți. Acestea au fost concepute, printre altele, pentru a accelera analiza documentelor XML.[11] De asemenea, a adăugat o instrucțiune CRC32 pentru a calcula controalele redundante ciclice utilizate în anumite protocoale de transfer de date. Aceste instrucțiuni au fost implementate pentru prima dată în linia de produse Intel Core i7 bazată pe Nehalem(d) și completează setul de instrucțiuni SSE4. AMD, pe de altă parte, a adăugat primul suport începând cu microarhitectura Bulldozer(d). Suportul este indicat prin intermediul indicatorului CPUID.01H:ECX.SSE42[Bit 20].
Windows 11 24H2 necesită ca procesorul să suporte SSE4.2, în caz contrar nucleul Windows este imposibil de inițializat.[12] (Diverse variante neoficiale de Windows 11, cum ar fi Tiny11 și instalațiile de virtualizare Parallels, ocolesc această cerință).
| Instrucțiune | Descriere |
|---|---|
CRC32 |
Acumularea valorii CRC32C folosind polinomul 0x11EDC6F41 (sau, fără bitul de ordin superior, 0x1EDC6F41).[13][14] |
PCMPESTRI |
Compararea la pachet a șirurilor de lungimi explicite, returnarea indicelui |
PCMPESTRM |
Comparare la pachet a șirurilor de lungimi explicite, returnarea măștii (return mask) |
PCMPISTRI |
Compararea la pachet a șirurilor cu lungime implicită, returnarea indicelui |
PCMPISTRM |
Comparare la pachet a șirurilor cu lungime implicită, returnarea măștii |
PCMPGTQ |
Compararea datelor semnate pe 64 de biți pentru mai mult decât |
POPCNT și LZCNT
[modificare | modificare sursă]Aceste instrucțiuni operează pe registre întregi mai degrabă decât pe registre SSE, deoarece nu sunt instrucțiuni SIMD, dar apar în același timp și, deși au fost introduse de AMD odată cu setul de instrucțiuni SSE4a, sunt considerate extensii separate, cu biți CPUID proprii dedicați pentru a indica suportul. Intel implementează POPCNT începând cu microarhitectura Nehalem și LZCNT începând cu microarhitectura Haswell. AMD implementează ambele, începând cu microarhitectura Barcelona.
AMD numește această pereche de instrucțiuni Advanced Bit Manipulation (ABM).
Codificarea LZCNT urmează aceeași cale de codificare ca și codificarea instrucțiunii BSR (bit scan reverse). Acest lucru duce la o problemă în care LZCNT apelată pe unele procesoare care nu o acceptă, cum ar fi procesoarele Intel înainte de Haswell, poate executa incorect operația BSR în loc să ridice o excepție de instrucțiune invalidă. Aceasta este o problemă deoarece valorile rezultatelor LZCNT și BSR sunt diferite.
Zerourile din urmă pot fi numărate utilizând instrucțiunile BSF (bit scan forward) sau TZCNT.
Windows 11 24H2 necesită ca procesorul să suporte POPCNT, în caz contrar nucleul Windows este imposibil de inițializat.[15]
| Instrucțiune | Descriere |
|---|---|
POPCNT |
Numărătoarea populării (numără numărul de biți setați la 1). Suportul este indicat prin indicatorul CPUID.01H:ECX.POPCNT[Bit 23].[16] |
LZCNT |
Numărătoare de zerouri principale. Suportul este indicat prin indicatorul CPUID.80000001H:ECX.ABM[Bit 5] flag.[17] |
SSE4a
[modificare | modificare sursă]Grupul de instrucțiuni SSE4a a fost introdus în microarhitectura Barcelona a AMD. Aceste instrucțiuni nu sunt disponibile în procesoarele Intel. Suportul este indicat prin indicatorul CPUID.80000001H:ECX.SSE4A[Bit 6].[17]
| Instrucțiune | Descriere |
|---|---|
EXTRQ/INSERTQ |
Instrucțiuni combinate mask-shift.[18] |
MOVNTSD/MOVNTSS |
Instrucțiuni de stocare în flux scalar.[19] |
CPU-uri suportate
[modificare | modificare sursă]CPU-uri x86-64 v2:
- Intel
- Procesoarele Silvermont (SSE4.1, SSE4.2 și
POPCNTsuportate) - Procesoarele Goldmont (SSE4.1, SSE4.2 și
POPCNTsuportate) - Procesoarele Goldmont Plus (SSE4.1, SSE4.2 și
POPCNTsuportate) - Procesoarele Tremont (SSE4.1, SSE4.2 și
POPCNTsuportate) - Procesoarele Penryn (SSE4.1 suportate, excluzând Pentium Dual-Core și Celeron)
- Procesoarele Nehalem și procesoarele Westmere (SSE4.1, SSE4.2 și
POPCNTsuportate, excluzând Pentium și Celeron) - Procesoarele Sandy Bridge și mai noi (SSE4.1, SSE4.2 și
POPCNTsuportate, inclusiv Pentium și Celeron) - Procesoarele Haswell și mai noi (SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate)
- Procesoarele Silvermont (SSE4.1, SSE4.2 și
- AMD
- Procesoarele bazate pe K10 (SSE4a,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe „Cat” de putere mică
- Procesoarele bazate pe Bobcat (SSE4a,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe Jaguar și mai noi (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe Puma și mai noi (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate)
- Procesoarele bazate pe Bobcat (SSE4a,
- Procesoarele „Heavy Equipment” (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate)- Procesoarele bazate pe Bulldozer
- Procesoarele bazate pe Piledriver[20]
- Procesoarele bazate pe Steamroller
- Procesoarele bazate pe Excavator și mai noi
- Procesoarele bazate pe Zen (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe Zen+ (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe Zen2 (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe Zen3 (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe Zen4 (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate) - Procesoarele bazate pe Zen5 (SSE4a, SSE4.1, SSE4.2,
POPCNTșiLZCNTsuportate)
- Procesoarele bazate pe K10 (SSE4a,
- VIA
- Procesoarele Nano 3000, X2, QuadCore (SSE4.1 suportate)
- Procesoarele Nano QuadCore seriile C4000 (SSE4.1, SSE4.2 suportate)
- Procesoarele Eden X4 (SSE4.1, SSE4.2 suportate)
- Zhaoxin
- Procesoarele ZX-C și mai noi (SSE4.1, SSE4.2 suportate)
Note
[modificare | modificare sursă]- 1 2 3 Intel Streaming SIMD Extensions 4 (SSE4) Instruction Set Innovation Arhivat în , la Wayback Machine., Intel.
- ↑ Tuning for Intel SSE4 for the 45nm Next Generation Intel Core Microarchitecture Arhivat în , la Wayback Machine., Intel.
- ↑ „Intel SSE4 Programming Reference” (PDF). Arhivat din original (PDF) la . Accesat în .
- ↑ „"Barcelona" Processor Feature: SSE Misaligned Access”. AMD. Arhivat din original la . Accesat în .
- ↑ „Inside Intel Nehalem Microarchitecture”. Arhivat din original la . Accesat în .
- ↑ Experiența mea cu "Conroe" Arhivat în , la Wayback Machine., DailyTech
- ↑ Extinderea celei mai populare arhitecturi de procesoare din lume Arhivat în , la Wayback Machine., Intel
- ↑ „Intel - Data Center Solutions, IoT, and PC Innovation”. Intel. Arhivat din original la . Accesat în .
- ↑ Motion Estimation with Intel Streaming SIMD Extensions 4 (Intel SSE4) Arhivat în , la Wayback Machine., Intel.
- ↑ „Schema Validation with Intel® Streaming SIMD Extensions 4 (Intel® SSE4)”. Arhivat din original la . Accesat în .
- ↑ „XML Parsing Accelerator with Intel® Streaming SIMD Extensions 4 (Intel® SSE4)”. Arhivat din original la . Accesat în .
- ↑ Klotz, Aaron (). „Microsoft blocks some PCs from Windows 11 24H2 — CPU must support SSE4.2 or the OS will not boot”. Tom's Hardware(d). Accesat în .
- ↑ Intel SSE4 Programming Reference Arhivat în , la Wayback Machine. p. 61. See also RFC 3385 Arhivat în , la Wayback Machine. for discussion of the CRC32C polynomial.
- ↑ Fast, Parallelized CRC Computation Using the Nehalem CRC32 Instruction — Dr. Dobbs, April 12, 2011
- ↑ Sen, Sayan (). „Microsoft fixes a misfired PopCnt block but Windows 11 24H2 requirements may be here to stay”. Neowin (în engleză). Accesat în .
- ↑ Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 2B: Instruction Set Reference, N–Z Arhivat în , la Wayback Machine..
- 1 2 „AMD CPUID Specification” (PDF). Arhivat din original (PDF) la . Accesat în .
- ↑ Rahul Chaturvedi (). „"Barcelona" Processor Feature: SSE4a Instruction Set”. Arhivat din original la .
- ↑ Rahul Chaturvedi (). „"Barcelona" Processor Feature: SSE4a, part 2”. Arhivat din original la .
- ↑ „AMD FX-Series FX-6300 - FD6300WMW6KHK / FD6300WMHKBOX”. Arhivat din original la . Accesat în .