AVX
Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de
versiunea revizuită la 15 iulie 2021; verificările necesită
8 modificări .
Advanced Vector Extensions (AVX) este o extensie de set de instrucțiuni x86 pentru microprocesoarele Intel și AMD , propusă de Intel în martie 2008. [1]
AVX oferă diverse îmbunătățiri, instrucțiuni noi și o nouă schemă de codificare a codului de mașină.
Îmbunătățiri
- Noua schemă de codare a instrucțiunilor VEX
- Lățimea registrelor vectoriale SIMD este mărită de la 128 ( XMM ) la 256 de biți (registrurile YMM0 - YMM15). Instrucțiunile SSE existente pe 128 de biți vor folosi jumătatea inferioară a noilor registre YMM fără a modifica partea superioară. Au fost adăugate noi instrucțiuni AVX pe 256 de biți pentru a funcționa cu registrele YMM. În viitor, este posibilă extinderea registrelor vectoriale SIMD la 512 sau 1024 de biți. De exemplu, procesoarele cu arhitectura Xeon Phi deja în 2012 aveau registre vectoriale ( ZMM ) cu o lățime de 512 biți [2] , și folosesc comenzi SIMD cu prefixe MVEX și VEX pentru a lucra cu ele, dar nu acceptă AVX.
- operațiuni nedistructive. Setul de instrucțiuni AVX utilizează o sintaxă cu trei operanzi. De exemplu, puteți utiliza în schimb , în timp ce cazul rămâne neschimbat. În cazurile în care valoarea este utilizată în continuare în calcul, aceasta îmbunătățește performanța deoarece elimină nevoia de a salva înainte de calcul și de a restaura după calcul registrul care conține dintr-un alt registru sau memorie.





- Pentru majoritatea noilor instrucțiuni, nu există cerințe pentru alinierea operanzilor în memorie. Cu toate acestea, se recomandă să acordați atenție alinierii la dimensiunea operandului pentru a evita o degradare semnificativă a performanței. [3]
- Setul de instrucțiuni AVX conține analogi ale instrucțiunilor SSE de 128 de biți pentru numere reale. În același timp, spre deosebire de originale, salvarea unui rezultat pe 128 de biți va reseta jumătatea superioară a registrului YMM. Instrucțiunile AVX pe 128 de biți păstrează alte beneficii AVX, cum ar fi o nouă schemă de codificare, sintaxă cu trei operanzi și acces la memorie nealiniat.
- Intel recomandă renunțarea la vechile instrucțiuni SSE în favoarea noilor instrucțiuni AVX pe 128 de biți, chiar dacă doi operanzi sunt suficienți. [4] .
Nouă schemă de codare
Noua schemă de codificare a instrucțiunilor VEX utilizează prefixul VEX. În prezent, există două prefixe VEX, lungi de 2 și 3 octeți. Pentru un prefix VEX de 2 octeți, primul octet este 0xC5, pentru un prefix VEX de 3 octeți este 0xC4.
În modul pe 64 de biți, primul octet al prefixului VEX este unic. În modul 32 de biți, există un conflict cu instrucțiunile LES și LDS, care se rezolvă prin bitul înalt al celui de-al doilea octet, contează doar în modul 64 de biți, prin formele neacceptate ale instrucțiunilor LES și LDS. [3]
Lungimea instrucțiunilor AVX existente, împreună cu prefixul VEX, nu depășește 11 octeți. În versiunile viitoare sunt așteptate instrucțiuni mai lungi.
Instrucțiuni noi
Instruire
|
Descriere
|
VBROADCASTSS, VBROADCASTSD, VBROADCASTF128
|
Copiază un operand de 32, 64 sau 128 de biți din memorie în toate elementele unui registru vectorial XMM sau YMM.
|
VINSERTF128
|
Înlocuiește jumătatea inferioară sau înaltă a unui registru YMM de 256 de biți cu valoarea operandului de 128 de biți. Cealaltă parte a registrului de primire nu este modificată.
|
VEXTRACTF128
|
Extrage jumătatea inferioară sau superioară a unui registru YMM de 256 de biți și o copiează într-un operand de destinație de 128 de biți.
|
VMASKMOVPS, VMASKMOVPD
|
Citește condiționat orice număr de elemente din operandul vectorial din memorie în registrul de destinație, lăsând elementele rămase necitite și punând la zero elementele corespunzătoare ale registrului de destinație. De asemenea, poate scrie condiționat orice număr de elemente dintr-un registru vectorial într-un operand vectorial în memorie, lăsând elementele rămase ale operandului de memorie neschimbate.
|
VPERMILPS, VPERMILPD
|
Rearanjează elementele de 32 de biți sau 64 de biți ale vectorului în funcție de operandul selector (din memorie sau din registru).
|
VPERM2F128
|
Schimbă cele 4 intrări de 128 de biți a două registre de 256 de biți în operandul de destinație de 256 de biți folosind o constantă imediată (imm) ca selector.
|
VZEROALL
|
Șterge toate registrele YMM și le marchează ca neutilizate. Folosit la comutarea între modul pe 128 de biți și 256 de biți.
|
VZEROSUS
|
Setează jumătățile superioare ale tuturor registrelor YMM la zero. Folosit la comutarea între modul pe 128 de biți și 256 de biți.
|
Specificația AVX descrie și grupul de instrucțiuni PCLMUL (Parallel Carry-Less Multiplication, Parallel CLMUL)
- PCLMULLQLQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 00]
- PCLMULHQLQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 01]
- PCLMULLQHQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 02]
- PCLMULHQHQDQ xmmreg, xmmrm [rm: 66 0f 3a 44 /r 03]
- PCLMULQDQ xmmreg, xmmrm, imm [rmi: 66 0f 3a 44 /r ib]
Aplicație
Potrivit pentru calcule intensive în virgulă mobilă în programe multimedia și sarcini științifice. Acolo unde este posibil un grad mai mare de paralelism, crește performanța cu numere reale.
Suport
- Biblioteca nucleului matematic [5]
Suport în sisteme de operare
Utilizarea registrelor YMM necesită suport din partea sistemului de operare. Următoarele sisteme acceptă registre YMM:
- Linux: începând cu versiunea de kernel 2.6.30, [6] lansat pe 9 iunie 2009. [7]
- Windows 7: Asistență adăugată în Service Pack 1 [8]
- Windows Server 2008 R2: Asistență adăugată în Service Pack 1 [8]
Microprocesoare cu AVX
- AMD :
- Procesoare cu microarhitectură Bulldozer , 2011. [10]
- Procesoare cu microarhitectură Piledriver , 2012.
- Procesoare cu microarhitectură Steamroller , 2014.
- Procesoare cu microarhitectură Excavator , 2015.
- Procesoare cu microarhitectură Zen , 2017.
- Procesoare cu microarhitectură Zen 2 , 2019.
- Procesoare cu microarhitectură Zen 3 , 2020.
Compatibilitatea între implementările Intel și AMD este discutată în acest articol .
Microprocesoare cu AVX2
AVX-512
AVX-512 extinde setul de instrucțiuni AVX la vectori de 512 biți folosind codificarea prefixului EVEX. Extensia AVX-512 introduce 32 de registre vectoriale (ZMM) de 512 biți fiecare, 8 registre de masca, formate împachetate de 512 biți pentru numere întregi și fracții și operațiuni pe acestea, control fin al modurilor de rotunjire (vă permite să suprascrieți setările globale), difuzare ( distribuția informațiilor de la un element de registru la alții), suprimarea erorilor în operații cu numere fracționale, operații de adunare/împrăștiere (asamblarea și distribuirea elementelor de registru vectorial către/din mai multe adrese de memorie), operații matematice rapide, codificare compactă a offset-urilor mari. AVX-512 oferă compatibilitate AVX, în sensul că un program poate folosi atât instrucțiunile AVX, cât și AVX-512 fără degradarea performanței. Registrele AVX (YMM0-YMM15) sunt mapate la părțile inferioare ale registrelor AVX-512 (ZMM0-ZMM15), similar cu registrele SSE și AVX. [12]
Folosit în Intel Xeon Phi (fostul Intel MIC ) Knights Landing (versiunea AVX3.1), Intel Skylake-X , [12] Intel Ice Lake , Intel Tiger Lake , Intel Rocket Lake . De asemenea, suportul AVX-512 este disponibil în nucleele de înaltă performanță Golden Cove [13] ale procesoarelor Intel Alder Lake , dar nucleele Gracemont eficiente din punct de vedere energetic sunt lipsite de el. Din decembrie 2021, suportul AVX-512 pentru procesoarele Alder Lake pentru consumatori nu a fost anunțat oficial. [paisprezece]
Extinderi viitoare
Schema de codificare a instrucțiunilor VEX permite cu ușurință extinderea în continuare a setului de instrucțiuni AVX. Următoarea versiune, AVX2, a adăugat instrucțiuni pentru lucrul cu numere întregi, FMA3 (performanță crescută la procesarea numerelor în virgulă mobilă de 2 ori [11] ), încărcarea unui vector alocat în memorie (adunare) și așa mai departe.
Diverse completări planificate la setul de instrucțiuni x86 :
Procesoarele de server din generația Broadwell au adăugat extensii AVX 3.1, iar procesoarele de server din generația Skylake au adăugat AVX 3.2.
Note
- ↑ Extensii ISA | Software Intel® . Preluat la 24 iunie 2016. Arhivat din original la 6 mai 2019. (nedefinit)
- ↑ Manual de referință pentru arhitectura setului de instrucțiuni pentru coprocesor Intel® Xeon Phi™ (link nu este disponibil) . Arhivat din original pe 11 mai 2013. (nedefinit)
- ↑ 1 2 Introducere în Intel® Advanced Vector Extensions - Intel® Software Network . Preluat la 19 iulie 2012. Arhivat din original la 16 iunie 2012. (nedefinit)
- ↑ Întrebări despre AVX - Intel® Software Network . Preluat la 24 iunie 2016. Arhivat din original la 7 august 2016. (nedefinit)
- ↑ Optimizare Intel® AVX în Intel® MKL . Data accesului: 7 ianuarie 2014. Arhivat din original pe 7 ianuarie 2014. (nedefinit)
- ↑ x86: adăugați suport pentru kernel-ul Linux pentru starea YMM (link descendent) . Consultat la 13 iulie 2009. Arhivat din original la 5 aprilie 2012. (nedefinit)
- ↑ Linux 2.6.30 - Linux Kernel Newbies (link în jos) . Consultat la 13 iulie 2009. Arhivat din original la 5 aprilie 2012. (nedefinit)
- ↑ 1 2 Activați suportul Windows 7 pentru Intel AVX (link descendent) . Microsoft. Data accesării: 29 ianuarie 2011. Arhivat din original pe 5 aprilie 2012. (nedefinit)
- ↑ Intel oferă o privire asupra lui Nehalem și Larrabee (link în jos) . ExtremeTech (17 martie 2008). Arhivat din original pe 7 iunie 2011. (nedefinit)
- ↑ Atingerea unui echilibru (link descendent) . Dave Christie, bloguri pentru dezvoltatori AMD (7 mai 2009). Consultat la 8 mai 2009. Arhivat din original la 5 aprilie 2012. (nedefinit)
- ↑ 1 2 Mai multe detalii despre viitorul set de instrucțiuni AVX 2.0 | Tech News Pedia (link indisponibil) . Consultat la 14 noiembrie 2012. Arhivat din original la 31 octombrie 2012. (nedefinit)
- ↑ 1 2 James Reinders (23 iulie 2013), AVX-512 Instructions , Intel , < http://software.intel.com/en-us/blogs/2013/avx-512-instructions > . Preluat la 20 august 2013. Arhivat la 31 martie 2015 la Wayback Machine
- ↑ Dr Ian Cutress, Andrei Frumusanu. Ziua arhitecturii Intel 2021: Alder Lake, Golden Cove și Gracemont Detailed . www.anandtech.com _ Preluat la 23 decembrie 2021. Arhivat din original la 4 ianuarie 2022. (nedefinit)
- ↑ Specificațiile produsului . www.intel.com . Preluat: 23 decembrie 2021.
Link -uri