SSE4

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

SSE4 este un set de instrucțiuni Streaming SIMD Extensions anunțat de Intel în septembrie 2006 și apoi a ajuns pe piață la sfârșitul anului 2007 cu primele procesoare de 45 nm prezentate chiar de Intel.

La fel ca seturile predecesoare, chiar și cu SSE4 este posibil să se repete aceeași operație cu mai multe elemente de date, în loc să se solicite ca fiecare instrucțiune să fie direct legată de un element de date, permițând obținerea unei creșteri generale a vitezei de procesare cu aplicații multimedia tip.

Domenii de utilitate ale SSE4

Cele 3 tipuri de conținut care ar trebui să beneficieze cel mai mult de utilizarea noilor instrucțiuni sunt rezumate mai jos:

  • Accelerare video - 14 instrucțiuni vor fi dedicate accelerării calculelor utilizate în mod obișnuit în procesarea conținutului video;
  • „Graphics Building Blocks” - 32 de instrucțiuni primitive orientate spre grafică;
  • „Streaming Load” - util pentru accesarea și primirea datelor de returnare de pe dispozitivele de memorie care nu sunt prezente în memoria cache a sistemului.

Implementare Intel

Întregul set include 54 de instrucțiuni noi, dar Intel a ales să își deschidă suportul pentru aceste instrucțiuni, integrând doar 47 și desemnându-le ca SSE4.1 (unde .1 indică prima versiune, implementarea finală a sosit abia în 2008 ).
Dintre cele 47 de instrucțiuni noi putem menționa subgrupurile „Produs cu punct virgulant” (DPPS, DPPD) și „Rundă cu virgulă mobilă” (ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD), implicate în optimizarea scenelor 2D și 3D. Prin urmare, este clar că unul dintre domeniile de utilizare care poate beneficia cel mai mult de acest nou set de instrucțiuni este cel al jocurilor video , împreună cu toate cele care necesită o utilizare masivă a calculelor în virgulă mobilă. Printre alte noutăți, putem menționa „Compilarea vectorizantă”, „Prelucrarea media, șirurilor și textelor” și „Acceleratoare orientate spre aplicație”.

Ar trebui evidențiată și caracteristica „Super Shuffle Engine”, care reduce latențele prin procesarea operațiilor pe 128 de biți într-un singur ciclu de ceas, accelerând unele operații tipice legate de utilizarea instrucțiunilor SSE.

Instrucțiunile rămase care alcătuiesc setul complet, indicate de Intel ca SSE4.2, sunt următoarele: CRC32, PCMPESTRI, PCMPESTRM, PCMPISTRI, PCMPISTRM, PCMPGTQ și POPCNT

Instrucțiuni noi

Spre deosebire de alte versiuni de SSE, SSE4 conține instrucțiuni nespecifice pentru operațiuni multimedia. Implementează multe operații al căror comportament depinde de un câmp constant și de un grup de instrucțiuni care ia XMM0 ca al treilea operand implicit. Mai multe dintre aceste instrucțiuni funcționează cu motorul de amestecare monociclu Penryn (operațiile de amestecare sunt cele care determină repoziționarea biților într-un octet sau cuvânt).

SSE4.1

Aceste instrucțiuni au fost introduse odată cu microarhitectura Penryn, reducerea cu 45 nm a microarhitecturii Core Intel.

Instrucțiuni Descriere
MPSADBW Calculați opt sume compensate ale diferențelor absolute (adică | 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 |, ...); această operațiune este fundamentală pentru codecurile HDTV și vă permite să calculați diferențele dintr-un bloc de 8x8 în doar șapte cicluri de ceas [1] . Un bit într-un operand imediat pe trei biți indică dacă trebuie să se utilizeze y 0 .. y 10 sau y 4 .. y 14 de către operandul țintă, ceilalți doi spun dacă trebuie să se utilizeze x 0 ..x 3 , x 4 . .x 7 , x 8 ..x 11 sau x 12 ..x 15 din operandul sursă.
PHMINPOSUW Setează cuvântul redus de 16 biți al destinației la cel mai mic cuvânt nesemnat de 16 biți din sursă și următorul cuvânt de destinație la indexul cuvântului respectiv din sursă.
PMULDQ Înmulțirea împachetată semnată pe două seturi de câte două pe patru numere întregi, prima și a treia pentru cele 4 împachetate, rezultând 2 numere întregi împachetate pe 64 de biți ca rezultat.
PMULLD Înmulțirea semnată, 4 seturi de 32 de biți înmulțiți înmulțiți pentru a da 4 rezultate de 32 de biți.
DPPS, DPPD Produs scalar pentru datele Array of Structs (AOS). Este nevoie de un operand imediat format din patru (sau doi pentru DPPD) biți pentru a alege care dintre intrările de intrare ar trebui să fie înmulțite și acumulate și alți patru (sau doi pentru DPPD) pentru a decide dacă puneți 0 sau produsul punct în câmp corespunzător în „ieșire.
BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDW Copierea condiționată a elementelor dintr-o locație în alta, bazată (pentru forma non-V) pe biții dintr-un operand imediat și (pentru forma V) pe biții din registrul XMM0.
PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINSD, PMAXSD Pachet minim / maxim pentru diferite tipuri de operanzi întregi.
ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD Rotunjirea valorilor unui registru cu virgulă mobilă la numere întregi, folosind unul dintre cele patru moduri diferite de rotunjire specificate de un operand imediat.
INSERTPS, PINSRB, PINSRD / PINSRQ, EXTRACTPS, PEXTRB, PEXTRW, PEXTRD / PEXTRQ Instrucțiunile INSERTPS și PINSR citesc 8, 16 sau 32 de biți dintr-o locație de memorie sau dintr-un registru x86 și le introduc într-un câmp al registrului de destinație indicat de un operand imediat; EXTRACTPS și PEXTR citesc un câmp din registrul sursă și îl scriu într-un registru x86 sau o locație de memorie. De exemplu, PEXTRD eax, [xmm0], 1; EXTRACTPS [addr + 4 * eax], xmm1, 1 scrie primul câmp al lui xmm1 la adresa dată de primul câmp al lui xmm0.
PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ Extensie pachet de zero sau semn pentru tipuri mai mari.
PTEST Similar instrucțiunii TEST: setați steagul Z la rezultatul AND dintre operanzii săi: ZF este setat la zero dacă DEST ȘI SRC este egal cu 0. Steagul Carry este setat dacă (NOT DEST) ȘI SRC este zero. Acest lucru este echivalent cu setarea steagului Zero dacă niciunul dintre biții mascați SRC nu este la un loc și steagul Carry dacă toți biții mascați SRC sunt la unul.
PCMPEQQ Comparație cu patru cuvinte (64 de biți) pentru a testa egalitatea
PACKUSDW Convertește DWORD semnat în WORD nesemnat, cu saturație.
MOVNTDQA Citirea eficientă dintr-o zonă de memorie care combină scrierea într-un registru SSE; util pentru încărcarea datelor de la periferice conectate la magistrala de memorie.

SSE4.2

Aceste instrucțiuni au fost implementate pentru prima dată în linia de produse Core i7 bazată pe Nehalem și completează setul de instrucțiuni SSE.

Instrucțiuni Descriere
CRC32 Acumulați valoarea CRC32 C folosind polinomul 0x11EDC6F41 (sau, fără bitul de ordine înaltă, 0x1EDC6F41) [2] .
PCMPESTRI Comparație pe șiruri ambalate de lungime explicită; returnează un index
PCMPESTRM Comparație pe șiruri ambalate de lungime explicită; returnează o mască
PCMPISTRI Comparație pe șiruri ambalate de lungime implicită; returnează un index
PCMPISTRM Comparație pe șiruri ambalate de lungime implicită; returnează o mască
PCMPGTQ Mai mare sau egal cu datele semnate pe 64 de biți semnate
POPCNT Numărul populației (numărează biți egali cu 1). Instrucțiunea POPCNT poate fi prezentă și pe procesoarele care nu acceptă celelalte instrucțiuni SSE4; în general, puteți testa un bit separat pentru a determina dacă acesta este prezent pe procesorul respectiv.

SSE4a

Setul de instrucțiuni SSE4a a fost implementat în microarhitectura AMD din Barcelona . Cu excepția POPCNT, aceste instrucțiuni nu sunt disponibile pe procesoarele Intel.

Instrucțiuni Descriere
LZCNT Leading Zero Count - manipulare de biți. Instrucțiunea LZCNT poate fi implementată și în procesoare care nu acceptă celelalte instrucțiuni SSE4; în general, puteți testa un bit separat pentru a determina dacă acesta este prezent pe procesorul respectiv.
POPCNT Numărul populației (numărează biți egali cu 1). Instrucțiunea POPCNT poate fi prezentă și pe procesoarele care nu acceptă celelalte instrucțiuni SSE4; în general, puteți testa un bit separat pentru a determina dacă acesta este prezent pe procesorul respectiv.
EXTRQ / INSERTQ Instrucțiuni combinate de mascare și derulare.
MOVNTSD / MOVNTSS Instrucțiuni pentru stocarea unui șir de scalari.

Procesoare cu SSE4

Instrucțiunile SSE4 urmau să fie implementate de Intel pentru prima dată în cadrul procesoarelor Core 2 Duo , Conroe și Merom , iar în contrapartida serverului, seria 51xx Xeon DPs, Woodcrest și inițial se părea că setul ar trebui să cuprindă 16 instrucțiuni noi . În realitate, aceste procesoare au văzut doar o revizuire a SSE3 anterioară (numită SSSE3) și, prin urmare, se știa că Intel a decis să amâne SSE4 pentru proiectele ulterioare.

Primii procesoare care au încorporat noile instrucțiuni și, mai precis, subsetul de 47 de instrucțiuni SSE4.1 au fost procesoarele de 45 nm Penryn , Wolfdale și Yorkfield , aparținând celei de-a doua generații a arhitecturii Intel Core Microarchitecture .

Întregul set de instrucțiuni, indicat ca SSE4.2, a ajuns în schimb în procesoarele aparținând arhitecturii Nehalem , ulterior nucleului și al cărui prim exponent este nucleul Bloomfield .

SSE4 și Tejas Instrucțiuni noi: vreo relevanță?

În 2004, Intel a oprit dezvoltarea procesorului Tejas , care trebuia să aducă cu sine un nou set de instrucțiuni, numit Tejas New Instructions (sau TNI). Având în vedere că Tejas a fost succesorul lui Prescott care a introdus noile instrucțiuni Prescott (sau PNI ), care ulterior a devenit SSE3 , s-a speculat că TNI ar putea fi etapa embrionară a SSE4 și foarte puține informații lansate de Intel cu privire la acest set de instrucțiuni suspendat apoi împreună cu procesorul care ar fi trebuit să îl introducă nu au făcut altceva decât să îngroașe misterul, deși plauzibil, nu există dovezi certe de corelație între TNI și SSE4.

Unele indicații preliminare, singurele care au dat practic oprirea proiectului Tejas, au indicat acest set ca fiind format din 8 instrucțiuni noi concepute pentru recunoașterea vocală avansată, multi-threading și suport Dolby Digital ( Azalia ). Nu este clar dacă cele 54 de instrucțiuni SSE4 includ și cele 8 cerute de TNI, dar având în vedere că noul set a ajuns pe piață la mai mult de 3 ani de la cel planificat pentru proiectul Tejas, este probabil să includă o revizuire completă a instrucțiuni originale., pentru a îmbunătăți în continuare performanța în domeniile de utilizare pentru care au fost proiectate TNI.

Notă

  1. ^ Motion Estimation with Intel Streaming SIMD Extensions 4 (Intel SSE4) Arhivat 17 mai 2008 la Internet Archive ., Intel.
  2. ^ Referință de programare Intel SSE4. Arhivat la 31 octombrie 2008 la Internet Archive . p. 61. A se vedea, de asemenea, RFC 3385 pentru discuții despre polinomul CRC32C.

Elemente conexe

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT