AVX
Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od
verze recenzované 15. července 2021; kontroly vyžadují
8 úprav .
Advanced Vector Extensions (AVX) je rozšíření instrukční sady x86 pro mikroprocesory Intel a AMD navržené společností Intel v březnu 2008. [1]
AVX poskytuje různá vylepšení, nové instrukce a nové schéma kódování strojového kódu.
Vylepšení
- Nové schéma kódování instrukcí VEX
- Šířka vektorových registrů SIMD je zvětšena ze 128 ( XMM ) na 256 bitů (registry YMM0 - YMM15). Stávající 128bitové instrukce SSE budou používat dolní polovinu nových registrů YMM, aniž by změnily horní část. Byly přidány nové 256bitové instrukce AVX pro práci s registry YMM. V budoucnu je možné rozšířit SIMD vektorové registry na 512 nebo 1024 bitů. Například procesory s architekturou Xeon Phi již v roce 2012 měly vektorové registry ( ZMM ) široké 512 bitů [2] a pro práci s nimi využívají příkazy SIMD s prefixy MVEX a VEX, ale nepodporují AVX.
- nedestruktivní operace. Instrukční sada AVX používá syntaxi tří operandů. Místo toho můžete například použít , přičemž velikost písmen zůstane nezměněna. V případech, kdy je hodnota dále použita ve výpočtu, to zlepšuje výkon, protože eliminuje potřebu před výpočtem ukládat a po výpočtu obnovovat registr obsahující z jiného registru nebo paměti.





- Pro většinu nových instrukcí neexistují žádné požadavky na zarovnání operandů v paměti. Doporučuje se však věnovat pozornost zarovnání k velikosti operandu, aby nedošlo k výraznému snížení výkonu. [3]
- Instrukční sada AVX obsahuje analogy 128bitových instrukcí SSE pro reálná čísla. Zároveň, na rozdíl od originálů, uložení 128bitového výsledku vynuluje horní polovinu registru YMM. 128bitové instrukce AVX si zachovávají další výhody AVX, jako je nové schéma kódování, syntaxe tří operandů a nezarovnaný přístup k paměti.
- Intel doporučuje zbavit se starých instrukcí SSE ve prospěch nových 128bitových instrukcí AVX, i když dva operandy stačí. [4] .
Nové schéma kódování
Nové schéma kódování instrukcí VEX používá prefix VEX. V současné době existují dvě předpony VEX, dlouhé 2 a 3 bajty. Pro 2bajtový prefix VEX je první bajt 0xC5, pro 3bajtový prefix VEX je to 0xC4.
V 64bitovém režimu je první bajt předpony VEX jedinečný. V 32bitovém režimu dochází ke konfliktu s instrukcemi LES a LDS, který je řešen vysokým bitem druhého bajtu, záleží pouze na 64bitovém režimu, prostřednictvím nepodporovaných forem instrukcí LES a LDS. [3]
Délka existujících instrukcí AVX spolu s prefixem VEX nepřesahuje 11 bajtů. V budoucích verzích se očekávají delší pokyny.
Nové pokyny
Návod
|
Popis
|
VBROADCASTSS, VBROADCASTSD, VBROADCASTF128
|
Zkopíruje 32bitový, 64bitový nebo 128bitový operand z paměti do všech prvků vektorového registru XMM nebo YMM.
|
VINSERTF128
|
Nahradí dolní nebo horní polovinu 256bitového registru YMM hodnotou 128bitového operandu. Druhá část přijímacího registru se nemění.
|
VEXTTRACTF128
|
Extrahuje dolní nebo horní polovinu 256bitového registru YMM a zkopíruje jej do 128bitového cílového operandu.
|
VMASKMOVPS, VMASKMOVPD
|
Podmíněně přečte libovolný počet prvků z vektorového operandu z paměti do cílového registru, zbývající prvky ponechá nepřečtené a vynuluje odpovídající prvky cílového registru. Může také podmíněně zapsat libovolný počet prvků z vektorového registru do vektorového operandu v paměti, přičemž zbývající prvky paměťového operandu zůstanou nezměněny.
|
VPERMILPS, VPERMILPD
|
Přeuspořádá 32bitové nebo 64bitové prvky vektoru podle operandu selektoru (z paměti nebo z registru).
|
VPERM2F128
|
Zamění 4 128bitové záznamy dvou 256bitových registrů do 256bitového cílového operandu pomocí okamžité konstanty (imm) jako selektoru.
|
VZEROALL
|
Vymaže všechny registry YMM a označí je jako nepoužité. Používá se při přepínání mezi 128bitovým a 256bitovým režimem.
|
VZEROUPPER
|
Nastaví horní poloviny všech registrů YMM na nulu. Používá se při přepínání mezi 128bitovým a 256bitovým režimem.
|
Specifikace AVX také popisuje skupinu instrukcí 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]
Aplikace
Vhodné pro intenzivní výpočty s pohyblivou řádovou čárkou v multimediálních programech a vědeckých úlohách. Tam, kde je možný vyšší stupeň paralelismu, zvyšuje výkon s reálnými čísly.
Podpora
- Knihovna matematického jádra [5]
Podpora v operačních systémech
Použití registrů YMM vyžaduje podporu operačního systému. Registry YMM podporují následující systémy:
- Linux: od verze jádra 2.6.30 [6] vydané 9. června 2009. [7]
- Windows 7: Podpora přidána v aktualizaci Service Pack 1 [8]
- Windows Server 2008 R2: Podpora přidána do Service Pack 1 [8]
Mikroprocesory s AVX
- AMD :
- Processors with Bulldozer microarchitecture , 2011. [10]
- Procesory s mikroarchitekturou Piledriver , 2012.
- Procesory s mikroarchitekturou Steamroller , 2014.
- Procesory s mikroarchitekturou Excavator , 2015.
- Procesory s mikroarchitekturou Zen , 2017.
- Procesory s mikroarchitekturou Zen 2 , 2019.
- Procesory s mikroarchitekturou Zen 3 , 2020.
Kompatibilita mezi implementacemi Intel a AMD je popsána v tomto článku .
Mikroprocesory s AVX2
AVX-512
AVX-512 rozšiřuje instrukční sadu AVX na 512bitové vektory pomocí kódování prefixů EVEX. Rozšíření AVX-512 zavádí 32 vektorových registrů (ZMM) po 512 bitech, 8 registrů masky, 512bitové sbalené formáty pro celá čísla a zlomky a operace s nimi, jemné ovládání režimů zaokrouhlování (umožňuje přepsat globální nastavení), vysílání ( distribuce informací z jednoho prvku registru do ostatních), potlačení chyb při operacích s desetinnými čísly, operace shromažďování / rozptylu (sestavení a distribuce prvků vektorového registru na / z několika adres paměti), rychlé matematické operace, kompaktní kódování velkých offsetů. AVX-512 nabízí kompatibilitu s AVX v tom smyslu, že program může používat instrukce AVX i AVX-512 bez snížení výkonu. Registry AVX (YMM0-YMM15) jsou mapovány na spodní části registrů AVX-512 (ZMM0-ZMM15), podobně jako registry SSE a AVX. [12]
Používá se v Intel Xeon Phi (dříve Intel MIC ) Knights Landing (verze AVX3.1), Intel Skylake-X , [12] Intel Ice Lake , Intel Tiger Lake , Intel Rocket Lake . Podpora AVX-512 je k dispozici také u vysoce výkonných jader Golden Cove [13] procesorů Intel Alder Lake , ale energeticky úsporná jádra Gracemont o ni přicházejí. Od prosince 2021 nebyla podpora AVX-512 pro spotřebitelské procesory Alder Lake oficiálně oznámena. [čtrnáct]
Budoucí rozšíření
Schéma kódování instrukcí VEX snadno umožňuje další rozšíření sady instrukcí AVX. Další verze, AVX2, přidala instrukce pro práci s celými čísly, FMA3 (zvýšený výkon při zpracování čísel s plovoucí desetinnou čárkou 2x [11] ), načítání vektoru alokovaného paměti (gather) a tak dále.
Různá plánovaná rozšíření instrukční sady x86 :
Serverové procesory generace Broadwell přidaly rozšíření AVX 3.1 a serverové procesory generace Skylake přidaly AVX 3.2.
Poznámky
- ↑ Rozšíření ISA | Software Intel® . Získáno 24. června 2016. Archivováno z originálu 6. května 2019. (neurčitý)
- ↑ Referenční příručka architektury instrukční sady koprocesoru Intel® Xeon Phi™ (odkaz není k dispozici) . Archivováno z originálu 11. května 2013. (neurčitý)
- ↑ 1 2 Úvod do Intel® Advanced Vector Extensions – Intel® Software Network . Získáno 19. července 2012. Archivováno z originálu 16. června 2012. (neurčitý)
- ↑ Otázky týkající se AVX - Intel® Software Network . Získáno 24. června 2016. Archivováno z originálu 7. srpna 2016. (neurčitý)
- ↑ Optimalizace Intel® AVX v Intel® MKL . Datum přístupu: 7. ledna 2014. Archivováno z originálu 7. ledna 2014. (neurčitý)
- ↑ x86: přidat podporu linuxového jádra pro stav YMM (stahování) . Získáno 13. července 2009. Archivováno z originálu 5. dubna 2012. (neurčitý)
- ↑ Linux 2.6.30 – Linux Kernel Newbies (downlink) . Získáno 13. července 2009. Archivováno z originálu 5. dubna 2012. (neurčitý)
- ↑ 1 2 Povolte podporu Windows 7 pro Intel AVX (downlink) . Microsoft. Datum přístupu: 29. ledna 2011. Archivováno z originálu 5. dubna 2012. (neurčitý)
- ↑ Intel nabízí nahlédnout do Nehalem a Larrabee (downlink) . ExtremeTech (17. března 2008). Archivováno z originálu 7. června 2011. (neurčitý)
- ↑ Vyrovnání (downlink) . Dave Christie, blogy AMD Developer (7. května 2009). Získáno 8. května 2009. Archivováno z originálu dne 5. dubna 2012. (neurčitý)
- ↑ 1 2 Více podrobností o budoucí instrukční sadě AVX 2.0 | Tech News Pedia (nedostupný odkaz) . Získáno 14. listopadu 2012. Archivováno z originálu 31. října 2012. (neurčitý)
- ↑ 1 2 James Reinders (23. července 2013), AVX-512 Instructions , Intel , < http://software.intel.com/en-us/blogs/2013/avx-512-instructions > . Získáno 20. srpna 2013. Archivováno 31. března 2015 na Wayback Machine
- ↑ Dr Ian Cutress, Andrei Frumusanu. Intel Architecture Day 2021: Alder Lake, Golden Cove a Gracemont Detailed . www.anandtech.com _ Získáno 23. prosince 2021. Archivováno z originálu dne 4. ledna 2022. (neurčitý)
- ↑ Specifikace produktu . www.intel.com . Staženo: 23. prosince 2021.
Odkazy