Pokročilá vektorová rozšíření - Advanced Vector Extensions
Advanced Vector Extensions ( AVX , také známé jako Sandy Bridge New Extensions ) jsou rozšíření architektury instrukční sady x86 pro mikroprocesory od Intelu a AMD navržené společností Intel v březnu 2008 a nejprve podporováno společností Intel s procesorem Sandy Bridge dodávaným v 1. čtvrtletí 2011 a později zapnuto AMD s procesorem Bulldozer dodaným v Q3 2011. AVX poskytuje nové funkce, nové pokyny a nové schéma kódování.
AVX2 (také známý jako Haswell New Instructions ) rozšiřuje většinu celočíselných příkazů na 256 bitů a zavádí operace FMA ( fused multiply -umulatulate ). Nejprve byly podporovány společností Intel s procesorem Haswell, který byl dodán v roce 2013.
AVX-512 rozšiřuje AVX na 512bitovou podporu pomocí nového kódování předpony EVEX navrženého společností Intel v červenci 2013 a nejprve podporovaného společností Intel s procesorem Knights Landing , který byl dodán v roce 2016.
Pokročilá vektorová rozšíření
AVX používá šestnáct registrů YMM k provedení jedné instrukce na více kusech dat (viz SIMD ). Každý registr YMM může obsahovat a provádět simultánní operace (matematické) na:
- osm 32bitových čísel s plovoucí desetinnou čárkou s jednoduchou přesností nebo
- čtyři 64bitová čísla s plovoucí desetinnou čárkou s dvojitou přesností.
Šířka registrů SIMD se zvětší ze 128 bitů na 256 bitů a přejmenuje se z XMM0 – XMM7 na YMM0 – YMM7 (v režimu x86-64 , z XMM0 – XMM15 na YMM0 – YMM15). Starší instrukce SSE lze i nadále využívat prostřednictvím předpony VEX k provozu na nižších 128 bitech registrů YMM.
511 256 | 255 128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ZMM1 | YMM1 | XMM1 |
ZMM2 | YMM2 | XMM2 |
ZMM3 | YMM3 | XMM3 |
ZMM4 | YMM4 | XMM4 |
ZMM5 | YMM5 | XMM5 |
ZMM6 | YMM6 | XMM6 |
ZMM7 | YMM7 | XMM7 |
ZMM8 | YMM8 | XMM8 |
ZMM9 | YMM9 | XMM9 |
ZMM10 | YMM10 | XMM10 |
ZMM11 | YMM11 | XMM11 |
ZMM12 | YMM12 | XMM12 |
ZMM13 | YMM13 | XMM13 |
ZMM14 | YMM14 | XMM14 |
ZMM15 | YMM15 | XMM15 |
ZMM16 | YMM16 | XMM16 |
ZMM17 | YMM17 | XMM17 |
ZMM18 | YMM18 | XMM18 |
ZMM19 | YMM19 | XMM19 |
ZMM20 | YMM20 | XMM20 |
ZMM21 | YMM21 | XMM21 |
ZMM22 | YMM22 | XMM22 |
ZMM23 | YMM23 | XMM23 |
ZMM24 | YMM24 | XMM24 |
ZMM25 | YMM25 | XMM25 |
ZMM26 | YMM26 | XMM26 |
ZMM27 | YMM27 | XMM27 |
ZMM28 | YMM28 | XMM28 |
ZMM29 | YMM29 | XMM29 |
ZMM30 | YMM30 | XMM30 |
ZMM31 | YMM31 | XMM31 |
AVX zavádí instrukční formát SIMD o třech operandech nazývaný VEX kódovací schéma , kde je cílový registr odlišný od dvou zdrojových operandů. Například instrukce SSE používající konvenční formu dvou operandů a = a + b nyní může používat nedestruktivní formu tří operandů c = a + b , přičemž zachovává oba zdrojové operandy. Původně byl formát AVX se třemi operandy omezen na instrukce s operandy SIMD (YMM) a neobsahoval instrukce s registry pro obecné účely (např. EAX). Později byl použit pro kódování nových instrukcí pro registry obecného účelu v pozdějších rozšířeních, jako je BMI . VEX kódování se také používá pro instrukce pracující na registrech masky k0-k7, které byly zavedeny s AVX-512 .
Požadavek na zarovnání paměťových operandů SIMD je uvolněný. Na rozdíl od jejich protějšků nekódovaných ve VEX většina vektorových instrukcí kódovaných VEX již nevyžaduje, aby jejich paměťové operandy byly zarovnány s velikostí vektoru. Je pozoruhodné, že VMOVDQA
instrukce stále vyžaduje zarovnání svého paměťového operandu.
Nové schéma kódování VEX zavádí novou sadu předpon kódů, která rozšiřuje prostor operačního kódu , umožňuje instrukcím mít více než dva operandy a umožňuje, aby vektorové registry SIMD byly delší než 128 bitů. Předponu VEX lze také použít na starších instrukcích SSE, což jim dává formu tří operandů a umožňuje jim efektivnější interakci s instrukcemi AVX bez potřeby VZEROUPPER
a VZEROALL
.
Pokyny AVX podporují 128bitovou i 256bitovou SIMD. 128bitové verze mohou být užitečné pro vylepšení starého kódu, aniž by bylo nutné rozšířit vektorizaci, a vyhnout se trestu přechodu z SSE na AVX, jsou také rychlejší u některých raných implementací AVX od AMD. Tento režim je někdy známý jako AVX-128.
Nové pokyny
Tyto instrukce AVX jsou navíc k těm, které jsou 256bitovým rozšířením starších 128bitových instrukcí SSE; většina z nich je použitelná na 128bitových i 256bitových operandech.
Návod | Popis |
---|---|
VBROADCASTSS , VBROADCASTSD ,VBROADCASTF128
|
Zkopírujte 32bitový, 64bitový nebo 128bitový paměťový operand do všech prvků vektorového registru XMM nebo YMM. |
VINSERTF128
|
Nahradí buď dolní polovinu, nebo horní polovinu 256bitového registru YMM hodnotou 128bitového zdrojového operandu. Druhá polovina cíle je beze změny. |
VEXTRACTF128
|
Extrahuje buď spodní polovinu nebo horní polovinu 256bitového registru YMM a zkopíruje hodnotu do 128bitového cílového operandu. |
VMASKMOVPS , VMASKMOVPD
|
Podmíněně načte libovolný počet prvků z operandu vektorové paměti SIMD do cílového registru, přičemž zbývající vektorové prvky ponechá nepřečtené a nastaví odpovídající prvky v cílovém registru na nulu. Alternativně podmíněně zapíše libovolný počet prvků z operandu vektorového registru SIMD do operandu vektorové paměti, přičemž zbývající prvky operandu paměti ponechá beze změny. Na architektuře procesorů AMD Jaguar trvá tato instrukce s operandem zdroje paměti více než 300 hodinových cyklů, když je maska nulová, v takovém případě by instrukce neměla dělat nic. Zdá se, že jde o konstrukční vadu. |
VPERMILPS , VPERMILPD
|
Permute In-Lane. Náhodně promíchejte 32bitové nebo 64bitové vektorové prvky jednoho vstupního operandu. Jedná se o 256bitové instrukce v jízdním pruhu, což znamená, že fungují na všech 256 bitech se dvěma samostatnými 128bitovými shuffles, takže nemohou zamíchat přes 128bitové pruhy. |
VPERM2F128
|
Zamíchejte čtyři 128bitové vektorové prvky dvou 256bitových zdrojových operandů do 256bitového cílového operandu s okamžitou konstantou jako voličem. |
VTESTPS , VTESTPD
|
Balíček bitových testů zabalených bitů se znaménkem s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností, nastavení nebo vymazání příznaku ZF na základě AND a příznaku CF na základě ANDN. |
VZEROALL
|
Nastavte všechny registry YMM na nulu a označte je jako nepoužité. Používá se při přepínání mezi 128bitovým a 256bitovým použitím. |
VZEROUPPER
|
Nastavte horní polovinu všech registrů YMM na nulu. Používá se při přepínání mezi 128bitovým a 256bitovým použitím. |
CPU s AVX
-
Intel
- Procesory Sandy Bridge , Q1 2011
- Procesory Sandy Bridge E , 4. čtvrtletí 2011
- Procesory Ivy Bridge , Q1 2012
- Procesory Ivy Bridge E , Q3 2013
- Procesory Haswell , Q2 2013
- Procesory Haswell E , 3. čtvrtletí 2014
- Procesory Broadwell , 4. čtvrtletí 2014
- Procesory Skylake , Q3 2015
- Procesory Broadwell E , Q2 2016
- Procesory Kaby Lake , Q3 2016 (ULV mobile)/Q1 2017 (desktop/mobile)
- Procesory Skylake-X , Q2 2017
- Procesory Coffee Lake , 4. čtvrtletí 2017
- Procesory Cannon Lake , Q2 2018
- Procesory Whisky Lake , Q3 2018
- Procesory Cascade Lake , 4. čtvrtletí 2018
- Procesory Ice Lake , Q3 2019
- Procesory Comet Lake (pouze značky Core a Xeon), Q3 2019
- Procesory Tiger Lake (Core, Pentium a Celeron), Q3 2020
- Procesory Rocket Lake , Q1 2021
- Procesory Alder Lake , 2021
- Procesory Gracemont , 2021
Ne všechny procesory z uvedených rodin podporují AVX. Obecně je CPU s komerčním označením Core i3/i5/i7/i9 podporují, zatímco procesory Pentium a Celeron nikoli.
-
AMD :
- Procesory založené na Jaguaru a novější
- Procesory na bázi Puma a novější
- Procesory „těžké techniky“
- Procesory založené na buldozeru , 4. čtvrtletí 2011
- Procesory na bázi Piledriver , 4. čtvrtletí 2012
- Procesory na bázi Steamroller , Q1 2014
- Rýpadlo-založené procesory a novější, 2015
- Procesory založené na Zen , Q1 2017
- Procesory na bázi Zen+ , Q2 2018
- Procesory založené na Zen 2 , Q3 2019
- Procesory Zen 3 , Q4 2020
Problémy týkající se kompatibility mezi budoucími procesory Intel a AMD jsou projednány v sadě instrukcí XOP .
Podpora kompilátoru a assembleru
- Absoft podporuje s příznakem -mavx.
- Free Pascal kompilátor podporuje AVX a AVX2 s -CfAVX a -CfAVX2 přepne z verze 2.7.1.
- RAD studio (v11.0 Alexandria) podporuje AVX2 a AVX512.
- Funkce vložené montáže GNU Assembler (GAS) podporují tyto instrukce (přístupné přes GCC), stejně jako primitiva Intel a inline assembler Intel (úzce kompatibilní s GAS, i když obecnější při zpracování místních referencí v rámci vloženého kódu).
- GCC počínaje verzí 4.6 (i když existovala větev 4.3 s určitou podporou) a Intel Compiler Suite počínaje verzí 11.1 podporují AVX.
- Tyto open64 kompilátor verze 4.5.1 podporuje AVX s -mavx vlajky.
- PathScale podporuje prostřednictvím příznaku -mavx.
- Vector Pascal kompilátor podporuje AVX přes vlajky -cpuAVX32.
- Visual Studio 2010 / 2012 kompilátor podporuje AVX přes vnitřní a / arch: přepínač AVX.
- Ostatní assemblery jako MASM VS2010 verze, YASM , FASM , NASM a JWASM .
Podpora operačního systému
AVX přidává nový stav registru prostřednictvím 256bitového širokého souboru registru YMM, takže ke správnému uložení a obnovení rozšířených registrů AVX mezi kontextovými přepínači je nutná explicitní podpora operačního systému . Následující verze operačního systému podporují AVX:
- DragonFly BSD : podpora přidána na začátku roku 2013.
- FreeBSD : podpora přidaná v opravě odeslané 21. ledna 2012, která byla součástí stabilní verze 9.1
- Linux : podporováno od verze jádra 2.6.30, vydané 9. června 2009.
- macOS : podpora přidána v aktualizaci 10.6.8 ( Snow Leopard ) vydané 23. června 2011.
- OpenBSD : podpora přidána 21. března 2015.
- Solaris : podporováno v Solaris 10 Update 10 a Solaris 11
-
Windows : podporováno ve Windows 7 SP1, Windows Server 2008 R2 SP1, Windows 8 , Windows 10
- Windows Server 2008 R2 SP1 s technologií Hyper-V vyžaduje pro podporu procesorů AMD AVX (řada Opteron 6200 a 4200) opravu hotfix, KB2568088
Pokročilá vektorová rozšíření 2
Advanced Vector Extensions 2 (AVX2), také známý jako Haswell New Instructions , je rozšířením instrukční sady AVX představené v mikroarchitektuře Haswell společnosti Intel . AVX2 provádí následující dodatky:
- rozšíření většiny vektorových celočíselných instrukcí SSE a AVX na 256 bitů
- Shromážděte podporu, která umožní načtení vektorových prvků z nesouvislých paměťových míst
- Zrnitost DWORD a QWORD libovolně libovolné
- vektorové posuny.
Někdy je za součást AVX2 považováno další rozšíření používající jiný příznak cpuid; tyto pokyny jsou uvedeny na jejich vlastní stránce a nikoli níže:
- tři operandová tavená podpora hromadné akumulace (FMA3)
Nové pokyny
Návod | Popis |
---|---|
VBROADCASTSS , VBROADCASTSD
|
Zkopírujte 32bitový nebo 64bitový operand registru do všech prvků vektorového registru XMM nebo YMM. Toto jsou registrované verze stejných pokynů v AVX1. Neexistuje však 128bitová verze, ale stejného efektu lze jednoduše dosáhnout pomocí VINSERTF128. |
VPBROADCASTB , VPBROADCASTW , VPBROADCASTD ,VPBROADCASTQ
|
Zkopírujte 8, 16, 32 nebo 64bitový celočíselný registr nebo paměťový operand do všech prvků vektorového registru XMM nebo YMM. |
VBROADCASTI128
|
Zkopírujte operand 128bitové paměti do všech prvků vektorového registru YMM. |
VINSERTI128
|
Nahradí buď dolní polovinu, nebo horní polovinu 256bitového registru YMM hodnotou 128bitového zdrojového operandu. Druhá polovina cíle je beze změny. |
VEXTRACTI128
|
Extrahuje buď spodní polovinu nebo horní polovinu 256bitového registru YMM a zkopíruje hodnotu do 128bitového cílového operandu. |
VGATHERDPD , VGATHERQPD , VGATHERDPS ,VGATHERQPS
|
Shromažďuje hodnoty s plovoucí desetinnou čárkou s jednoduchou nebo dvojitou přesností pomocí 32 nebo 64bitových indexů a měřítka. |
VPGATHERDD , VPGATHERDQ , VPGATHERQD ,VPGATHERQQ
|
Shromažďuje 32 nebo 64bitové celočíselné hodnoty pomocí 32 nebo 64bitových indexů a měřítka. |
VPMASKMOVD , VPMASKMOVQ
|
Podmíněně načte libovolný počet prvků z operandu vektorové paměti SIMD do cílového registru, přičemž zbývající vektorové prvky ponechá nepřečtené a nastaví odpovídající prvky v cílovém registru na nulu. Alternativně podmíněně zapíše libovolný počet prvků z operandu vektorového registru SIMD do operandu vektorové paměti, přičemž zbývající prvky operandu paměti ponechá beze změny. |
VPERMPS , VPERMD
|
Shuffle the three 32-bit vector elements of one 256-bit source operand into a 256-bit destination operand, with register or memory operand as selector. |
VPERMPD , VPERMQ
|
Shuffle the four 64-bit vector elements of one 256-bit source operand into a 256-bit destination operand, with register or memory operand as selector. |
VPERM2I128
|
Shuffle (two of) the four 128-bit vector elements of two 256-bit source operands into a 256-bit destination operand, with an instant constant as selector. |
VPBLENDD
|
Doubleword okamžitá verze instrukcí PBLEND z SSE4 . |
VPSLLVD , VPSLLVQ
|
Posun doleva logický. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
VPSRLVD , VPSRLVQ
|
Řazení doprava logické. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
VPSRAVD
|
Řadit aritmeticky doprava. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
CPU s AVX2
-
Intel
- Procesor Haswell (pouze značky Core a Xeon), Q2 2013
- Procesor Haswell E , Q3 2014
- Procesor Broadwell , 4. čtvrtletí 2014
- Procesor Broadwell E , Q3 2016
- Procesor Skylake (pouze značky Core a Xeon), Q3 2015
- Procesor Kaby Lake (pouze Core a Xeon), Q3 2016 (ULV mobile)/Q1 2017 (desktop/mobile)
- Procesor Skylake-X , Q2 2017
- Procesor Coffee Lake (pouze značky Core a Xeon), 4. čtvrtletí 2017
- Procesor Cannon Lake , Q2 2018
- Procesor Cascade Lake , Q2 2019
- Procesor Ice Lake , Q3 2019
- Procesor Comet Lake (pouze značky Core a Xeon), Q3 2019
- Procesor Tiger Lake (Core, Pentium a Celeron), Q3 2020
- Procesor Rocket Lake , Q1 2021
- Procesor Alder Lake , 2021
- Procesory Gracemont , 2021
- AMD
-
VIA :
- Nano QuadCore
- Eden X4
AVX-512
AVX-512 jsou 512bitová rozšíření 256bitových pokročilých vektorových rozšíření SIMD instrukce pro architekturu instrukční sady x86 navržené společností Intel v červenci 2013 a jsou podporovány procesorem Intel Knights Landing .
Instrukce AVX-512 jsou kódovány novou předponou EVEX . Umožňuje 4 operandy, 8 nových 64bitových registrů maskování , režim skalární paměti s automatickým vysíláním, explicitní ovládání zaokrouhlování a režim adresování paměti s komprimovaným posunem . Šířka souboru registru se zvýší na 512 bitů a celkový počet registrů se zvýší na 32 (registry ZMM0-ZMM31) v režimu x86-64.
AVX-512 se skládá z několika rozšíření, která nemusí být podporována všemi procesory, které je implementují. Sada instrukcí se skládá z následujících položek:
- AVX-512 Foundation-přidává několik nových pokynů a rozšiřuje většinu 32bitových a 64bitových instrukcí s plovoucí desetinnou čárkou SSE-SSE4.1 a AVX/AVX2 o kódovací schéma EVEX pro podporu 512bitových registrů, operačních masek, vysílání parametrů a integrované řízení zaokrouhlování a výjimek
- AVX-512 Instruction Detection Instructions (CD)-efektivní detekce konfliktu umožňující vektorizaci více smyček, podporovaná Knights Landing
- AVX-512 Exponenciální a reciproční pokyny (ER)-exponenciální a reciproční operace navržené tak, aby pomohly implementovat transcendentální operace, podporované Knights Landing
- AVX-512 Prefetch Instructions (PF)-nové možnosti předběžného načtení, podporované Knights Landing
- Rozšíření vektorové délky AVX-512 (VL)-rozšiřuje většinu operací AVX-512 také na registry XMM (128bitové) a YMM (256bitové) (včetně XMM16-XMM31 a YMM16-YMM31 v režimu x86-64)
- AVX-512 Byte and Word Instructions (BW)-rozšiřuje AVX-512 tak, aby pokryl 8bitové a 16bitové celočíselné operace
- AVX-512 Doubleword and Quadword Instructions (DQ)-vylepšené 32bitové a 64bitové celočíselné operace
- AVX-512 Integer Fused Multiply Add (IFMA)-fúzované násobení pro 512bitová celá čísla.
- Pokyny k manipulaci s vektorovými bajty AVX-512 (VBMI) přidávají pokyny pro vektorovou permutaci bajtů, které v AVX-512BW nejsou.
- AVX-512 Vector Neural Network Instructions Word variable variable (4VNNIW)-vector instructions for deep learning.
- AVX-512 Fused Multiply Accumulation Packed Single Precision (4FMAPS)-vektorové instrukce pro hluboké učení.
- VPOPCNTDQ - počet bitů nastavený na 1.
- VPCLMULQDQ-beznánosové násobení čtyř hesel.
- AVX-512 Vector Neural Network Instructions (VNNI)-vektorové instrukce pro hluboké učení.
- AVX-512 Galois Field New Instructions (GFNI)-vektorové instrukce pro výpočet Galoisova pole .
- AVX-512 vektorové instrukce AES (VAES)-vektorové instrukce pro kódování AES .
- AVX-512 Vector Byte Manipulation Instructions 2 (VBMI2)-byte/word load, store and concatenation with shift.
- AVX-512 Bit Algorithms (BITALG)-instrukce pro manipulaci s bity /slovy s bity rozšiřující VPOPCNTDQ.
- AVX-512 Bfloat16 Instrukce s pohyblivou řádovou čárkou (BF16)-vektorové instrukce pro akceleraci AI.
- AVX-512 Half-Precision Floating-Point Instructions (FP16)-vektorové instrukce pro provoz na číslech s plovoucí desetinnou čárkou a komplexních číslech se sníženou přesností.
Všechny implementace vyžadují pouze základní rozšíření AVX-512F (AVX-512 Foundation), ačkoli všechny současné procesory také podporují CD (detekce konfliktů); výpočetní koprocesory budou navíc podporovat ER, PF, 4VNNIW, 4FMAPS a VPOPCNTDQ, zatímco centrální procesory budou podporovat VL, DQ, BW, IFMA, VBMI, VPOPCNTDQ, VPCLMULQDQ atd.
Aktualizované pokyny SSE/AVX v AVX-512F používají stejnou mnemotechniku jako verze AVX; mohou pracovat na 512bitových registrech ZMM a budou také podporovat 128/256 bitové registry XMM/YMM (s AVX-512VL) a celočíselné operandy byte, word, doubleword a quadword (s AVX-512BW/DQ a VBMI).
CPU s AVX-512
Podskupina AVX-512 | F | CD | ER | PF | 4 FMAPS | 4VNNIW | VPOPCNTDQ | VL | DQ | ČB | IFMA | VBMI | VBMI2 | BITALG | VNNI | VPCLMULQDQ | GFNI | VAES | VP2INTERSECT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Intel Knights Landing (2016) | Ano | Ano | Ne | ||||||||||||||||
Intel Knights Mill (2017) | Ano | Ne | |||||||||||||||||
Intel Skylake-SP , Skylake-X (2017) | Ne | Ano | Ne | ||||||||||||||||
Intel Cannon Lake (2018) | Ano | Ne | |||||||||||||||||
Intel Cascade Lake-SP (2019) | Ne | Ano | Ne | ||||||||||||||||
Intel Ice Lake (2019) | Ne | Ano | Ne | ||||||||||||||||
Intel Tiger Lake (2020) | Ano | ||||||||||||||||||
Intel Rocket Lake (2021) | Ne |
Kompilátory podporující AVX-512
- GCC 4.9 a novější
- Clang 3.9 a novější
- ICC 15.0.1 a novější
- Kompilátor Microsoft Visual Studio 2017 C ++
AVX-VNNI
AVX-VNNI je VEX -coded variantu AVX512-VNNI instrukční sady prodloužení. To poskytuje stejnou sadu operací, ale je omezena na 256-bitových vektorů a nepodporuje žádné doplňkové funkce EVEX kódování, jako je vysílání, opmask registrů nebo přístup k více než 16 vektorových registrů. Toto rozšíření umožňuje podporovat operace VNNI, i když procesor nepodporuje plnou podporu AVX-512 .
CPU s AVX-VNNI
-
Intel
- Procesor Alder Lake , 2021
Aplikace
- Vhodné pro náročné výpočty s pohyblivou řádovou čárkou v multimediálních, vědeckých a finančních aplikacích (AVX2 přidává podporu pro celočíselné operace).
- Zvyšuje rovnoběžnost a propustnost ve výpočtech SIMD s pohyblivou řádovou čárkou .
- Snižuje zatížení registru díky nedestruktivním instrukcím.
- Zlepšuje výkon softwaru Linux RAID (požadovaný AVX2, AVX není dostačující)
Software
- Blender používá ve vykreslovacím modulu Cycles AVX, AVX2 a AVX-512.
- Bloombase používá ve svém kryptografickém modulu Bloombase (BCM) AVX, AVX2 a AVX-512.
- Botan používá k urychlení některých algoritmů, jako je ChaCha, jak AVX, tak AVX2, jsou -li k dispozici.
- Crypto ++ používá jak AVX, tak AVX2, jsou -li k dispozici, k akceleraci některých algoritmů, jako jsou Salsa a ChaCha.
- OpenSSL využívá kryptografické funkce optimalizované pro AVX a AVX2 od verze 1.0.2. Tato podpora je také k dispozici v různých klonech a forcích, jako je LibreSSL
- Prime95 /MPrime, software používaný pro GIMPS , začal používat pokyny AVX od verze 27.x.
- Dav1d AV1 dekodér může používat AVX2 na podporovaných CPU.
- dnetc , software používaný distribuovaným.netem , má k dispozici jádro AVX2 pro svůj projekt RC5 a brzy vydá jedno pro svůj projekt OGR-28.
- Einstein@Home používá AVX v některých svých distribuovaných aplikacích, které hledají gravitační vlny .
- Folding@home používá AVX na výpočetních jádrech implementovaných s knihovnou GROMACS .
- Helios používá hardwarovou akceleraci AVX a AVX2 na 64bitovém hardwaru x86.
- Horizon: Zero Dawn používá AVX1 ve svém herním enginu Decima.
- RPCS3 , emulátor PlayStation 3 s otevřeným zdrojovým kódem, používá k emulaci her PS3 pokyny AVX2 a AVX-512 .
- Network Device Interface , IP video/audio protokol vyvinutý společností NewTek pro produkci živého vysílání, využívá AVX a AVX2 pro zvýšení výkonu.
- TensorFlow od verze 1.6 a tensorflow výše verzí vyžaduje CPU podporující alespoň AVX.
- Kodéry videa x264 , x265 a VTM mohou k urychlení kódování použít AVX2 nebo AVX-512.
- Různé CPU-based kryptoměna horníků (jako cpuminer Pooler je pro Bitcoin a litecoin ) použití AVX a AVX2 pro různé rutiny kryptografických související, včetně SHA-256 a scrypt .
- libsodium používá AVX při implementaci skalárního násobení pro algoritmy Curve25519 a Ed25519 , AVX2 pro BLAKE2b , Salsa20 , ChaCha20 a AVX2 a AVX-512 při implementaci algoritmu Argon2 .
- libvpx Implementace open source kodéru/dekodéru VP8/VP9, používá AVX2 nebo AVX-512, je-li k dispozici.
- FFTW může využívat AVX, AVX2 a AVX-512, jsou-li k dispozici.
- LLVMpipe, softwarový renderer OpenGL v Mesa využívající infrastrukturu Gallium a LLVM , používá AVX2, je -li k dispozici.
-
glibc používá AVX2 (s FMA ) pro optimální provedení (tj
expf
,sinf
,powf
,atanf
,atan2f
) různých matematických funkcí v libc . - Linuxové jádro může používat AVX nebo AVX2 společně s AES-NI jako optimalizovanou implementaci kryptografického algoritmu AES-GCM .
- Linuxové jádro používá AVX nebo AVX2, je-li k dispozici, v optimalizované implementaci několika dalších kryptografických šifer: Camellia , CAST5 , CAST6 , Serpent , Twofish , MORUS-1280 a další primitiva: Poly1305 , SHA-1 , SHA-256 , SHA-512 , ChaCha20 .
- POCL, přenosný počítačový jazyk, který poskytuje implementaci OpenCL , využívá AVX, AVX2 a AVX512, pokud je to možné.
-
.NET a .NET Framework mohou využívat AVX, AVX2 prostřednictvím obecného
System.Numerics.Vectors
oboru názvů. -
.NET Core , počínaje verzí 2.1 a rozsáhleji po verzi 3.0, může přímo využívat všechny vnitřní funkce AVX, AVX2 prostřednictvím
System.Runtime.Intrinsics.X86
oboru názvů. - EmEditor 19.0 a vyšší používá k urychlení zpracování AVX-2.
- Masivní X softsynth společnosti Native Instruments vyžaduje AVX.
- Microsoft Teams používá pokyny AVX2 k vytvoření rozmazaného nebo vlastního pozadí za účastníky videochatu a k potlačení šumu na pozadí.
- simdjson, knihovna pro analýzu JSON , používá AVX2 k dosažení vyšší rychlosti dekódování.
Downclocking
Protože pokyny AVX jsou širší a generují více tepla, některé procesory Intel mají opatření ke snížení limitu frekvence Turbo Boost při provádění těchto pokynů. Na Skylake a jeho derivátech je škrcení rozděleno do tří úrovní:
- L0 (100%): Normální mezní hodnota turbo boostu.
- L1 (~ 85%): Limit „AVX boost“. Soft-triggered 256-bit "heavy" (plovoucí desetinnou čárkou: FP matematické a celočíselné násobení) instrukce. Hard-triggered "light" (all other) 512-bit instructions.
- L2 (~ 60%): Limit „AVX-512 boost“. Soft-triggered pomocí 512bitových těžkých instrukcí.
Frekvenční přechod může být měkký nebo tvrdý. Tvrdý přechod znamená, že frekvence je snížena, jakmile je taková instrukce spatřena; měkký přechod znamená, že frekvence je snížena až po dosažení prahového počtu odpovídajících instrukcí. Limit je na vlákno.
V Ice Lake přetrvávají pouze dvě úrovně:
- L0 (100%): Normální mezní hodnota turbo boostu.
- L1 (~ 97%): Spouští se podle jakýchkoli 512bitových instrukcí, ale pouze pokud je aktivní jednojádrový boost; nespustí se při načtení více jader.
Procesory Rocket Lake nespustí snížení frekvence po provedení jakéhokoli druhu vektorových instrukcí bez ohledu na velikost vektoru. K přetaktování však může dojít i z jiných důvodů, jako je dosažení teplotních a výkonových limitů.
Zpětné přetaktování znamená, že používání AVX ve smíšené pracovní zátěži s procesorem Intel může znamenat frekvenční postih, přestože je v „čistém“ kontextu rychlejší. Vyhýbání se používání širokých a těžkých pokynů pomáhá v těchto případech minimalizovat dopad. AVX-512VL umožňuje použití 256bitových nebo 128bitových operandů v AVX-512, což z něj činí rozumnou výchozí hodnotu pro smíšené zátěže.
U podporovaných a odemčených variant procesorů, které se snižují, jsou poměry nastavitelné a lze je zcela vypnout (nastavit na 0x) pomocí nástroje Intel pro přetaktování / ladění nebo v systému BIOS, pokud je tam podporován.
Viz také
- Rozšíření ochrany paměti
- Scalable Vector Extension for ARM - nová sada vektorových instrukcí (doplňující VFP a NEON ) podobná AVX -512, s některými dalšími funkcemi.