Pokročilá vektorová rozšíření - Advanced Vector Extensions
Pokročilá vektorová rozšíření (AVX, také známý jako Sandy Bridge Nová rozšíření) jsou rozšířeními x86 architektura sady instrukcí pro mikroprocesory z Intel a AMD navržený společností Intel v březnu 2008 a nejprve podporovaný společností Intel s Sandy Bridge[1] procesor dodáván v 1. čtvrtletí 2011 a později AMD s Buldozer[2] dodávka procesorů ve 3. čtvrtletí 2011. AVX poskytuje nové funkce, nové pokyny a nové schéma kódování.
AVX2 (také známý jako Nové pokyny Haswell) rozšiřuje většinu celočíselných příkazů na 256 bitů a zavádí kondenzované násobení a hromadění (FMA ) operace. Poprvé je podporoval Intel s procesorem Haswell, který byl dodán v roce 2013.
AVX-512 rozšiřuje AVX na 512bitovou podporu pomocí nového Předpona EVEX kódování navržené společností Intel v červenci 2013 a nejprve podporováno společností Intel s Rytíři přistání procesor, který byl dodán v roce 2016.[3][4]
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 (matematiku) na:
- osm 32bitových čísel s plovoucí desetinnou čárkou s přesnou přesností nebo
- čtyři 64bitová čísla s plovoucí desetinnou čárkou s dvojitou přesností.
Šířka registrů SIMD se zvýší ze 128 bitů na 256 bitů a přejmenuje se z XMM0 – XMM7 na YMM0 – YMM7 (v x86-64 režim, od XMM0 – XMM15 do YMM0 – YMM15). Dědictví SSE pokyny lze stále používat prostřednictvím Předpona VEX pracovat s dolními 128 bity 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í formát instrukcí SIMD se třemi operandy, kde je cílový registr odlišný od dvou zdrojových operandů. Například an SSE instrukce pomocí konvenční formy dvou operandů a = a + b nyní může používat nedestruktivní formulář se třemi operandy c = a + b, zachování obou zdrojových operandů. Formát tří operandů AVX je omezen na instrukce s operandy SIMD (YMM) a nezahrnuje instrukce s registry pro obecné účely (např. EAX). Taková podpora se nejprve objeví v AVX2.[5]
The zarovnání požadavek na operandy paměti SIMD je uvolněný.[6]
Nové Schéma kódování VEX zavádí novou sadu předpon kódu, která rozšiřuje operační kód prostor, 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ší instrukce SSE, které jim dají formulář se třemi operandy a umožní jim efektivnější interakci s instrukcemi AVX bez nutnosti použití VZEROUPPER a VZEROALL.
Pokyny AVX podporují 128bitové i 256bitové SIMD. 128bitové verze mohou být užitečné pro vylepšení starého kódu, aniž by bylo nutné rozšiřovat vektorizaci, a vyhnout se trestu přechodu ze SSE na AVX, jsou také rychlejší u některých časných implementací AVX od AMD. Tento režim se někdy označuje jako AVX-128.[7]
Nové pokyny
Tyto pokyny AVX jsou navíc k těm, které jsou 256bitovými rozšířeními starších 128bitových pokynů SSE; většina 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 na všechny prvky vektorového registru XMM nebo YMM. |
VINSERTF128 | Nahradí dolní nebo horní polovinu 256bitového registru YMM hodnotou 128bitového zdrojového operandu. Druhá polovina cíle se nezmění. |
VEXTRACTF128 | Extrahuje dolní 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 nepřečtené a odpovídající prvky v cílovém registru nastaví na nulu. Alternativně podmíněně zapíše libovolný počet prvků z operandu vektorového registru SIMD na operand vektorové paměti, přičemž zbývající prvky paměťového operandu ponechá beze změny. Na architektuře procesoru AMD Jaguar tato instrukce s operandem zdroje paměti trvá 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í chybu.[8] |
VPERMILPS , VPERMILPD | Permute In-Lane. Zamíchejte 32bitové nebo 64bitové vektorové prvky jednoho vstupního operandu. Jedná se o 256bitové pokyny v pruhu, což znamená, že fungují na všech 256 bitech se dvěma samostatnými 128bitovými mícháním, takže nemohou míchat přes 128bitové pruhy.[9] |
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 selektor. |
VZEROALL | Nastavte všechny registry YMM na nulu a označte je jako nepoužívané. 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
- Sandy Bridge procesory, 1. čtvrtletí 2011[10]
- Sandy Bridge E procesory, 4. čtvrtletí 2011[11]
- most z břečťanu procesory, 1. čtvrtletí 2012
- Ivy Bridge E procesory, 3. čtvrtletí 2013
- Haswell procesory, 2. čtvrtletí 2013
- Haswell E procesory, 3. čtvrtletí 2014
- Broadwell procesory, 4. čtvrtletí 2014
- Skylake procesory, 3. čtvrtletí 2015
- Broadwell E procesory, 2. čtvrtletí 2016
- Kaby Lake procesory, Q3 2016 (ULV mobile) / Q1 2017 (desktop / mobile)
- Skylake-X procesory, 2. čtvrtletí 2017
- Kávové jezero procesory, 4. čtvrtletí 2017
- Cannon Lake procesory, 2. čtvrtletí 2018
- Whisky Lake procesory, 3. čtvrtletí 2018
- Cascade Lake procesory, 4. čtvrtletí 2018
- Ledové jezero procesory, 3. čtvrtletí 2019
- Kometské jezero procesory (pouze značky Core a Xeon), 3. čtvrtletí 2019
- Tygří jezero (Značky Core, Pentium a Celeron[12]) procesory, 3. čtvrtletí 2020
- Rocket Lake procesory, 2021
- Olše Lake procesory, 2021
Ne všechny procesory z uvedených rodin podporují AVX. Obecně je podporují procesory s komerčním označením „Core i3 / i5 / i7 / i9“, zatímco procesory „Pentium“ a „Celeron“ nikoli.
- AMD:
- Jaguar procesory a novější
- Na bázi Puma procesory a novější
- Procesory „Heavy Equipment“
- Buldozer procesory, 4. čtvrtletí 2011[13]
- Na základě pilota procesory, 4. čtvrtletí 2012[14]
- Na bázi parního válce procesory, 1. čtvrtletí 2014
- Na základě rypadla procesory a novější, 2015
- Zenový procesory, 1. čtvrtletí 2017
- Na základě Zen + procesory, 2. čtvrtletí 2018
- Zen 2 procesory, 3. čtvrtletí 2019
- Zen 3 procesory, 4. čtvrtletí 2020
Problémy týkající se kompatibility mezi budoucími procesory Intel a AMD jsou diskutovány níže Sada instrukcí XOP.
Podpora kompilátorů a assemblerů
- Absoft podporuje s příznakem -mavx.
- The Free Pascal překladač podporuje AVX a AVX2 s přepínači -CfAVX a -CfAVX2 od verze 2.7.1.
- The GNU Assembler (GAS) funkce vloženého sestavení podporují tyto pokyny (přístupné prostřednictvím GCC), stejně jako primitivy Intel a Intel inline assembler (úzce kompatibilní s GAS, i když obecnější při zpracování místních odkazů v vloženém kódu).
- GCC počínaje verzí 4.6 (ačkoli tam byla větev 4.3 s určitou podporou) a Intel Compiler Suite počínaje verzí 11.1 podporuje AVX.
- The Open64 překladač verze 4.5.1 podporuje AVX s příznakem -mavx.
- PathScale podporuje pomocí příznaku -mavx.
- The Vector Pascal překladač podporuje AVX pomocí parametru -cpuAVX32.
- The Visual Studio 2010 /2012 překladač podporuje AVX přes vnitřní a / arch: AVX přepínač.
- Ostatní montážní firmy jako např MASM Verze VS2010, YASM,[15] FASM, NASM a JWASM.
Podpora operačního systému
AVX přidává nový stav registru prostřednictvím 256bitového souboru registru YMM, tak explicitního operační systém podpora je nutná pro správné uložení a obnovení rozšířených registrů AVX mezi kontextové přepínače. Následující verze operačního systému podporují AVX:
- DragonFly BSD: podpora přidána počátkem roku 2013.
- FreeBSD: podpora přidána do opravy odeslané 21. ledna 2012,[16] který byl zahrnut do stabilního vydání 9.1[17]
- Linux: podporováno od verze jádra 2.6.30,[18] vydáno 9. června 2009.[19]
- Operační Systém Mac: podpora přidána v 10.6.8 (Levhart sněžný ) Aktualizace[20] vydáno 23. června 2011.
- OpenBSD: podpora přidána 21. března 2015.[21]
- Solaris: podporováno v Solaris 10 Update 10 a Solaris 11
- Okna: podporováno v Windows 7 SP1, Windows Server 2008 R2 SP1,[22] Windows 8, Windows 10
- Windows Server 2008 R2 SP1 s Hyper-V vyžaduje opravu hotfix pro podporu procesorů AMD AVX (řady Opteron 6200 a 4200), KB2568088
Advanced Vector Extensions 2
Advanced Vector Extensions 2 (AVX2), také známý jako Nové pokyny Haswell,[5] je rozšíření instrukční sady AVX zavedené v Intel Mikroarchitektura Haswell. AVX2 přináší následující doplňky:
- rozšíření většiny vektorových celočíselných instrukcí SSE a AVX na 256 bitů
- tříoperandová univerzální bitová manipulace a násobení
- Shromáždit podpora umožňující načítání vektorových prvků z nesouvislých paměťových míst
- DWORD- a QWORD-granularity any-to-any permutes
- vektorové posuny.
Někdy je další rozšíření používající jiný příznak cpuid považováno za součást AVX2; tyto pokyny jsou uvedeny na jejich vlastní stránce a ne níže:
- tři operandy fúzovaný násobit-hromadit podpora (FMA3)
Nové pokyny
Návod | Popis |
---|---|
VBROADCASTSS , VBROADCASTSD | Zkopírujte 32bitový nebo 64bitový operand registru na všechny prvky vektorového registru XMM nebo YMM. Jedná se o registrační verze stejných pokynů v AVX1. Neexistuje však žádná 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 na všechny prvky vektorového registru XMM nebo YMM. |
VBROADCASTI128 | Zkopírujte 128bitový paměťový operand na všechny prvky vektorového registru YMM. |
VINSERTI128 | Nahradí dolní nebo horní polovinu 256bitového registru YMM hodnotou 128bitového zdrojového operandu. Druhá polovina cíle se nezmění. |
VEXTRACTI128 | Extrahuje dolní nebo horní polovinu 256bitového registru YMM a zkopíruje hodnotu do 128bitového cílového operandu. |
VGATHERDPD , VGATHERQPD , VGATHERDPS , VGATHERQPS | Shromažďuje se 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 škálování. |
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 nepřečtené a odpovídající prvky v cílovém registru nastaví na nulu. Alternativně podmíněně zapíše libovolný počet prvků z operandu vektorového registru SIMD na operand vektorové paměti, přičemž zbývající prvky paměťového operandu ponechá beze změny. |
VPERMPS , VPERMD | Zamíchejte osm 32bitových vektorových prvků jednoho 256bitového zdrojového operandu do 256bitového cílového operandu s voličem registru nebo paměťového operandu. |
VPERMPD , VPERMQ | Zamíchejte čtyři 64bitové vektorové prvky jednoho 256bitového zdrojového operandu do 256bitového cílového operandu s voličem registru nebo paměťového operandu. |
VPERM2I128 | Zamíchejte (dva) ze čtyř 128bitových vektorových prvků dva 256bitové zdrojové operandy na 256bitový cílový operand s okamžitou konstantou jako selektor. |
VPBLENDD | Doubleword okamžitá verze pokynů PBLEND od SSE4. |
VPSLLVD , VPSLLVQ | Posun doleva logický. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
VPSRLVD , VPSRLVQ | Posun doprava logicky. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
VPSRAVD | Aritmeticky posuňte doprava. Umožňuje variabilní posuny, kde je každý prvek posunut podle zabaleného vstupu. |
CPU s AVX2
- Intel
- Haswell procesor (pouze značky Core a Xeon), 2. čtvrtletí 2013
- Haswell E procesor, 3. čtvrtletí 2014
- Broadwell procesor, 4. čtvrtletí 2014
- Broadwell E procesor, 3. čtvrtletí 2016
- Skylake procesor (pouze značky Core a Xeon), 3. čtvrtletí 2015
- Kaby Lake procesor (pouze značky Core a Xeon), Q3 2016 (ULV mobile) / Q1 2017 (desktop / mobile)
- Skylake-X procesor, 2. čtvrtletí 2017
- Kávové jezero procesor (pouze značky Core a Xeon), 4. čtvrtletí 2017
- Cannon Lake procesor, Q2 2018
- Cascade Lake procesor, Q2 2019
- Ledové jezero procesor, Q3 2019
- Kometské jezero procesor (pouze značky Core a Xeon), 3. čtvrtletí 2019
- Tygří jezero (Značky Core, Pentium a Celeron[23]) procesor, Q3 2020
- Rocket Lake procesor, 2021
- Olše Lake procesor, 2021
- AMD
- PŘES:
- Nano QuadCore
- Eden X4
AVX-512
AVX-512 jsou 512bitová rozšíření 256bitových instrukcí SIMD Advanced Vector Extensions pro architekturu instrukčních sad x86 navržených Intel v červenci 2013 a jsou podporovány Intelem Rytíři přistání procesor.[3]
Pokyny AVX-512 jsou zakódovány do nového Předpona EVEX. Umožňuje 4 operandy, 7 nových 64bitových registrů opmasky, režim skalární paměti s automatickým vysíláním, explicitní ovládání zaokrouhlování a komprimovanou paměť posunutí režim adresování. Šířka souboru registru se v režimu x86-64 zvýšila na 512 bitů a celkový počet registrů se zvýšil na 32 (registry ZMM0-ZMM31).
AVX-512 se skládá z několika rozšíření, která nejsou 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 instrukcí a rozšiřuje většinu 32bitových a 64bitových instrukcí SSE-SSE4.1 a AVX / AVX2 s kódovacím schématem EVEX na podporu 512bitových registrů, provozních masek, vysílání parametrů a vložené zaokrouhlování a řízení výjimek
- Pokyny k detekci konfliktů AVX-512 (CD) - efektivní detekce konfliktů, která umožňuje vektorizaci více smyček, podporovaná Knights Landing[3]
- AVX-512 exponenciální a reciproční instrukce (ER) - exponenciální a reciproční operace určené k implementaci transcendentálních operací, podporované Knights Landing[3]
- Pokyny pro předběžné načítání AVX-512 (PF) - nové možnosti předběžného načítání, podporované Knights Landing[3]
- AVX-512 Vector Length Extensions (VL) - rozšiřuje většinu operací AVX-512 tak, aby fungovaly také na registrech XMM (128 bitů) a YMM (256 bitů) (včetně XMM16-XMM31 a YMM16-YMM31 v režimu x86-64)[24]
- AVX-512 Byte and Word Instructions (BW) - rozšiřuje AVX-512 o 8bitové a 16bitové celočíselné operace[24]
- AVX-512 Doubleword and Quadword Instructions (DQ) - vylepšené 32bitové a 64bitové celočíselné operace[24]
- AVX-512 Integer Fused Multiply Přidat (IFMA) - sčítaný násobený doplněk pro 512bitová celá čísla.[25]:746
- AVX-512 Vector Byte Manipulation Instructions (VBMI) přidává instrukce pro permutaci vektorových bytů, které nejsou v AVX-512BW přítomny.
- AVX-512 Vector Neural Network Instructions Word variable precision (4VNNIW) - vector instructions for deep learning.
- AVX-512 Fused Multiply Accumulation Packed Single precision (4FMAPS) - vektorové pokyny pro hluboké učení.
- VPOPCNTDQ - počet bitů nastaven na 1.[26]
- VPCLMULQDQ - násobení čtyř hesel bez přenášení.[26]
- Pokyny pro vektorovou neuronovou síť AVX-512 (VNNI) - vektorové pokyny pro hluboké učení.[26]
- AVX-512 Galois field Nové pokyny (GFNI) - vektorové pokyny pro výpočet Galoisovo pole.[26]
- Pokyny AVX-512 Vector AES (VAES) - vektorové pokyny pro AES kódování.[26]
- Pokyny pro manipulaci s vektorovými bajty AVX-512 2 (VBMI2) - načítání bajtů / slov, ukládání a zřetězení s posunem.[26]
- Bitové algoritmy AVX-512 (BITALG) - bajt / slovo bit manipulace instrukce rozšiřující VPOPCNTDQ.[26]
Všechny implementace vyžadují pouze rozšíření jádra 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 stolní 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/256bitové registry XMM / YMM (s AVX-512VL) a bajtové, slovní, dvouslovné a čtyřslovné celočíselné operandy (s AVX-512BW / DQ a VBMI).[25]:23
CPU s AVX-512
Podskupina AVX-512 | F | CD | ER | PF | 4FMAPS | 4VNNIW | VL | DQ | BW | IFMA | VBMI | VBMI2 | VPOPCNTDQ | BITALG | VNNI | VPCLMULQDQ | GFNI | VAES |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Intel Rytíři přistání (2016) | Ano | Ano | Ne | |||||||||||||||
Intel Knights Mill (2017) | Ano | Ne | 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 Ledové jezero (2019) | Ano |
Od roku 2020 neexistují žádné procesory AMD podporující AVX-512 a společnost AMD dosud nezveřejnila plány na podporu AVX-512.
Překladače podporující AVX-512
- GCC 4.9 a novější[28]
- Zvonit 3.9 a novější[29]
- ICC 15.0.1 a novější[30]
- Překladač Microsoft Visual Studio 2017 C ++[31]
- Java 9[32]
- Přejít 1.11[33]
- Julie[34][35]
Aplikace
- Vhodné pro plovoucí bod -intenzivní výpočty v multimediálních, vědeckých a finančních aplikacích (AVX2 přidává podporu pro celé číslo operace).
- Zvyšuje paralelismus a propustnost s plovoucí desetinnou čárkou SIMD výpočty.
- Snižuje zatížení registru v důsledku nedestruktivních pokynů.
- Zlepšuje výkon softwaru Linux RAID (vyžadováno AVX2, AVX nestačí)[36]
Software
- StarCitizen (hra) Počínaje verzí 3.11 a dále byly aktualizovány minimální požadavky StarCitizens, aby využívaly AVX, herní engine aktuálně používá DirectX 11, ale vyvíjí podporu Vulkan API pro použití v jeho upraveném Lumberyard Engine.
- Mixér používá AVX2 v cyklech renderovacího modulu.
- Botan používá AVX i AVX2, pokud jsou k dispozici, k urychlení některých algoritmů, jako je ChaCha.
- Crypto ++ používá AVX i AVX2, pokud jsou k dispozici, k urychlení některých algoritmů, jako jsou Salsa a ChaCha.
- OpenSSL používá od verze 1.0.2 kryptografické funkce optimalizované pro AVX a AVX2.[37] Tato podpora je také přítomna v různých klonech a vidlicích, jako je LibreSSL
- Prime95 / MPrime, software používaný pro GIMPS, začali používat pokyny AVX od verze 27.x.
- dav1d AV1 dekodér může používat AVX2 na podporovaných CPU.[38]
- dnetc, software používaný společností distribuovaný.net, má pro svůj projekt RC5 k dispozici jádro AVX2 a brzy vydá jedno pro svůj projekt OGR-28.
- Einstein @ Home používá AVX v některých distribuovaných aplikacích, které vyhledávají gravitační vlny.[39]
- Skládací @ home používá AVX na výpočetních jádrech implementovaných s GROMACS knihovna.
- Horizon: Zero Dawn Používá AVX1 v Decimě (herní engine) a je to engine, který hra používá.
- RPCS3, otevřený zdroj PlayStation 3 emulátor, používá AVX2 a AVX-512 pokyny k emulaci her PS3.
- Rozhraní síťového zařízení, IP video / audio protokol vyvinutý společností NewTek pro produkci živého vysílání, používá pro zvýšení výkonu AVX a AVX2.
- TensorFlow od verze 1.6 a tensorflow výše vyžaduje CPU podporující alespoň AVX.[40]
- x264, x265 a VTM kodéry videa mohou k urychlení kódování použít AVX2 nebo AVX-512.
- Různé založené na CPU kryptoměna těžaři (jako buldozer pro Bitcoin a Litecoin ) používat AVX a AVX2 pro různé rutiny související s kryptografií, včetně SHA-256 a scrypt.
- libsodium používá AVX při implementaci skalárního násobení pro Křivka25519 a Ed25519 algoritmy, AVX2 pro BLAKE2b, Salsa20, ChaCha20 a AVX2 a AVX-512 při implementaci Argon2 algoritmus.
- libvpx open source referenční implementace kodéru / dekodéru VP8 / VP9, používá AVX2 nebo AVX-512, pokud je k dispozici.
- FFTW může využívat AVX, AVX2 a AVX-512, pokud jsou k dispozici.
- LLVMpipe, softwarový OpenGL renderer ve Windows Mesa pomocí Gallium a LLVM infrastruktura, používá AVX2, pokud je k dispozici.
- glibc používá AVX2 (s FMA ) pro optimalizovanou implementaci (tj.
expf
,sinf
,prášek
,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 AES-GCM kryptografický algoritmus.
- Linuxové jádro používá AVX nebo AVX2, pokud jsou k dispozici, při optimalizované implementaci několika dalších kryptografických šifer: Kamélie, CAST5, CAST6, Had, Twofish, MORUS-1280 a další primitiva: Poly1305, SHA-1, SHA-256, SHA-512, ChaCha20.
- POCL, přenosný počítačový jazyk, který zajišťuje implementaci OpenCL, pokud je to možné, využívá AVX, AVX2 a AVX512.
- .NET Core a .NET Framework může využívat AVX, AVX2 prostřednictvím obecného
System.Numerics.Vectors
jmenný prostor. - .NET Core, počínaje verzí 2.1 a ve větší míře po verzi 3.0 lze přímo využívat všechny vnitřní funkce AVX, AVX2 prostřednictvím
System.Runtime.Intrinsics.X86
jmenný prostor. - EmEditor Verze 19.0 a vyšší používá pro zrychlení zpracování AVX-2.[41]
- Massive X softsynth od Native Instruments vyžaduje AVX.[42]
- Microsoft Teams používá pokyny AVX2 k vytvoření rozmazaného nebo vlastního pozadí za účastníky videochatu.[43]
- simdjson a JSON parsovací knihovna používá AVX2 k dosažení vyšší rychlosti dekódování.[44]
Downclocking
Vzhledem k tomu, že pokyny AVX jsou širší a generují více tepla, mají procesory Intel opatření ke snížení Turbo zrychlení frekvenční limit při provádění těchto pokynů. Škrcení je rozděleno do tří úrovní:[45][46]
- L0 (100%): Normální limit turbodmychadla.
- L1 (~ 85%): Limit „AVX boost“. Soft-triggered by 256-bit "heavy" (floating-point unit: FP math and integer multiplication) instructions. Tvrdě spuštěno „lehkými“ (všemi ostatními) 512bitovými pokyny.
- L2 (~ 60%): Limit „AVX-512 boost“. Soft-triggered by 512-bit heavy instructions.
Přechod frekvence může být měkký nebo tvrdý. Tvrdý přechod znamená, že frekvence je snížena, jakmile je takový pokyn spatřen; měkký přechod znamená, že frekvence je snížena až po dosažení prahového počtu odpovídajících pokynů. Limit je na vlákno.[45]
Downclocking znamená, že používání AVX ve smíšeném pracovním vytížení s procesorem Intel může způsobit pokutu za frekvenci, 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á minimalizovat dopad v těchto případech. AVX-512VL umožňuje použití 256bitových nebo 128bitových operandů v AVX-512, což z něj činí rozumné výchozí nastavení pro smíšené zátěže.[47]
Viz také
- Rozšíření ochrany paměti
- Škálovatelné vektorové rozšíření pro ARM - nová sada vektorových instrukcí (doplňující VFP a NEON ) podobný AVX-512 s některými dalšími funkcemi.
Reference
- ^ Kanter, David (25. září 2010). „Intel Sandy Bridge Microarchitecture“. www.realworldtech.com. Citováno 17. února 2018.
- ^ Hruska, Joel (24. října 2011). „Analýza buldozeru: Proč je čip AMD tak zklamáním - Strana 4 z 5 - ExtremeTech“. ExtremeTech. Citováno 17. února 2018.
- ^ A b C d E James Reinders (23. července 2013), Pokyny AVX-512, Intel, vyvoláno 20. srpna 2013
- ^ „Procesor Intel Xeon Phi 7210 (16 GB, 1,30 GHz, 64 jader) Specifikace produktu“. Intel ARK (specifikace produktu). Citováno 16. března 2018.
- ^ A b Nové popisy pokynů Haswell jsou nyní k dispozici Software.intel.com, vyvoláno 17. ledna 2012
- ^ "14.9". Intel 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture (PDF) (-051US ed.). Intel Corporation. str. 349. Citováno 23. srpna 2014.
Argumenty paměti pro většinu instrukcí s předponou VEX fungují normálně, aniž by způsobily #GP (0) při jakémkoli zarovnání bajtové zrnitosti (na rozdíl od pokynů Legacy SSE).
- ^ „Možnosti i386 a x86-64 - použití kolekce kompilátorů GNU (GCC)“. Citováno 9. února 2014.
- ^ „Mikroarchitektura procesorů Intel, AMD a VIA: Průvodce optimalizací pro programátory sestavení a výrobce kompilátorů“ (PDF). Citováno 17. října 2016.
- ^ "Šachové programování AVX2". Citováno 17. října 2016.
- ^ „Intel nabízí Peek na Nehalem a Larrabee“. ExtremeTech. 17. března 2008.
- ^ „Procesor Intel Core i7-3960X Extreme Edition“. Citováno 17. ledna 2012.
- ^ „Procesor Intel® Celeron® 6305 (mezipaměť 4M, 1,80 GHz, s IPU) Specifikace produktu“. ark.intel.com. Citováno 10. listopadu 2020.
- ^ Dave Christie (7. května 2009), Dosažení rovnováhy Blogy AMD Developer, archivovány z originál 9. listopadu 2013, vyvoláno 17. ledna 2012
- ^ Nové pokyny pro „buldozer“ a „piledriver“ (PDF), AMD, říjen 2012
- ^ „Poznámky k verzi YASM 0.7.0“. yasm.tortall.net.
- ^ Přidejte podporu pro rozšířené stavy FPU na amd64, a to jak pro nativní 64bitové, tak 32bitové ABI, svnweb.freebsd.org, 21. ledna 2012, vyvoláno 22. ledna 2012
- ^ „Oznámení FreeBSD 9.1-RELEASE“. Citováno 20. května 2013.
- ^ x86: přidat podporu linuxového jádra pro stav YMM, vyvoláno 13. července 2009
- ^ Linux 2.6.30 - Linuxové jádro nováčků, vyvoláno 13. července 2009
- ^ Cvrlikání, vyvoláno 23. června 2010[nespolehlivý zdroj? ]
- ^ Přidejte podporu pro ukládání / obnovení stavu FPU pomocí XSAVE / XRSTOR., vyvoláno 25. března 2015
- ^ Podpora plovoucí desetinné čárky pro 64bitové ovladače, vyvoláno 6. prosince 2009
- ^ „Procesor Intel® Celeron® 6305 (mezipaměť 4M, 1,80 GHz, s IPU) Specifikace produktu“. ark.intel.com. Citováno 10. listopadu 2020.
- ^ A b C James Reinders (17. července 2014). „Další pokyny pro AVX-512“. Intel. Citováno 3. srpna 2014.
- ^ A b „Referenční příručka k programování rozšíření architektury Intel“ (PDF). Intel. Citováno 29. ledna 2014.
- ^ A b C d E F G „Rozšíření instrukční sady architektury Intel® a reference k programování budoucích funkcí“. Intel. Citováno 16. října 2017.
- ^ "Emulátor Intel® Software Development | Intel® Software". software.intel.com. Citováno 11. června 2016.
- ^ „Série vydání GCC 4.9 - Změny, nové funkce a opravy - GNU Project - Free Software Foundation (FSF)“. gcc.gnu.org. Citováno 3. dubna 2017.
- ^ „Poznámky k verzi LLVM 3.9 - dokumentace k LLVM 3.9“. releases.llvm.org. Citováno 3. dubna 2017.
- ^ „Poznámky k verzi Intel® Parallel Studio XE 2015 Composer Edition C ++ | Software Intel®“. software.intel.com. Citováno 3. dubna 2017.
- ^ „Microsoft Visual Studio 2017 podporuje Intel® AVX-512“.
- ^ „Poznámky k verzi JDK 9“.
- ^ „Poznámky k verzi Go 1.11“.
- ^ „Demystifikace automatické vektorizace v Julii“. juliacomputing.com. 27. září 2017. Citováno 11. dubna 2020.
- ^ „[ANN] LoopVectorization“. JuliaLang. 1. ledna 2020. Citováno 11. dubna 2020.
- ^ „Linux RAID“. LWN. 17. února 2013. Archivovány od originál dne 15. dubna 2013.
- ^ „Zlepšení výkonu OpenSSL“. 26. května 2015. Citováno 28. února 2017.
- ^ "dav1d: výkon a dokončení prvního vydání". 21. listopadu 2018. Citováno 22. listopadu 2018.
- ^ „Aplikace Einstein @ Home“.
- ^ „Tensorflow 1.6“.
- ^ Novinky ve verzi 19.0 - EmEditor (textový editor)
- ^ „MASSIVE X vyžaduje procesor kompatibilní s AVX“. Nativní nástroje. Citováno 29. listopadu 2019.
- ^ „Hardwarové požadavky pro Microsoft Teams“. Microsoft. Citováno 17. dubna 2020.
- ^ Langdale, Geoff; Lemire, Daniel (2019). Msgstr "Analýza gigabajtů JSON za sekundu". arXiv:1902.08318 [cs.DB ].
- ^ A b Lemire, Daniel. „AVX-512: kdy a jak použít tyto nové pokyny“. Blog Daniela Lemire.
- ^ BeeOnRope. „Pokyny SIMD snižující frekvenci CPU“. Přetečení zásobníku.
- ^ „x86 - AVX 512 vs AVX2 výkon pro jednoduché smyčky zpracování pole“. Přetečení zásobníku.