Zaawansowane rozszerzenia wektorowe — Advanced Vector Extensions
Advanced Vector Extensions ( AVX , znany również jako Sandy Bridge nowe rozszerzenia ) są rozszerzeniami do x86 zestaw instrukcji architektury dla mikroprocesorów z Intelem i AMD proponowane przez firmę Intel w marcu 2008 roku i pierwszy wspierany przez Intela z Sandy Bridge procesora żeglugi w Q1 2011 i później przez AMD wraz z procesorem Bulldozer dostarczonym w trzecim kwartale 2011 r. AVX zapewnia nowe funkcje, nowe instrukcje i nowy schemat kodowania.
AVX2 (znany również jako Haswell New Instructions ) rozszerza większość poleceń liczb całkowitych do 256 bitów i wprowadza połączone operacje mnożenia i akumulacji ( FMA ). Po raz pierwszy były obsługiwane przez firmę Intel z procesorem Haswell, który został dostarczony w 2013 roku.
AVX-512 rozszerza AVX do 512-bitowej obsługi przy użyciu nowego kodowania prefiksów EVEX, zaproponowanego przez firmę Intel w lipcu 2013 r. i po raz pierwszy obsługiwanego przez firmę Intel z procesorem Knights Landing , który został dostarczony w 2016 r.
Zaawansowane rozszerzenia wektorowe
AVX używa szesnastu rejestrów YMM do wykonania pojedynczej instrukcji na wielu fragmentach danych (patrz SIMD ). Każdy rejestr YMM może przechowywać i wykonywać jednoczesne operacje (matematyka) na:
- osiem 32-bitowych liczb zmiennoprzecinkowych pojedynczej precyzji lub
- cztery 64-bitowe liczby zmiennoprzecinkowe podwójnej precyzji.
Szerokość rejestrów SIMD została zwiększona ze 128 bitów do 256 bitów i przemianowana z XMM0–XMM7 na YMM0–YMM7 (w trybie x86-64 z XMM0–XMM15 na YMM0–YMM15). Starsze instrukcje SSE mogą być nadal wykorzystywane poprzez prefiks VEX do działania na dolnych 128 bitach rejestrów YMM.
511 256 | 255 128 | 127 0 |
ZMM0 | YMM0 | XMM0 |
ZMM1 | RMM1 | XMM1 |
ZMM2 | RMM2 | XMM2 |
ZMM3 | RMM3 | XMM3 |
ZMM4 | RMM4 | XMM4 |
ZMM5 | RMM5 | XMM5 |
ZMM6 | RMM6 | XMM6 |
ZMM7 | RMM7 | XMM7 |
ZMM8 | RMM8 | XMM8 |
ZMM9 | RMM9 | XMM9 |
ZMM10 | RMM10 | XMM10 |
ZMM11 | RMM11 | XMM11 |
ZMM12 | RMM12 | XMM12 |
ZMM13 | RMM13 | XMM13 |
ZMM14 | RMM14 | XMM14 |
ZMM15 | RMM15 | XMM15 |
ZMM16 | RMM16 | XMM16 |
ZMM17 | RMM17 | XMM17 |
ZMM18 | RMM18 | XMM18 |
ZMM19 | RMM19 | XMM19 |
ZMM20 | RMM20 | XMM20 |
ZMM21 | RMM21 | XMM21 |
ZMM22 | RMM22 | XMM22 |
ZMM23 | RMM23 | XMM23 |
ZMM24 | RMM24 | XMM24 |
ZMM25 | RMM25 | XMM25 |
ZMM26 | RMM26 | XMM26 |
ZMM27 | RMM27 | XMM27 |
ZMM28 | RMM28 | XMM28 |
ZMM29 | RMM29 | XMM29 |
ZMM30 | RMM30 | XMM30 |
ZMM31 | RMM31 | XMM31 |
AVX wprowadza trzy-argumentowy format instrukcji SIMD zwany schematem kodowania VEX , w którym rejestr docelowy różni się od dwóch operandów źródłowych. Na przykład, instrukcja SSE używająca konwencjonalnej formy dwuargumentowej a = a + b może teraz używać nieniszczącej formy trójargumentowej c = a + b , zachowując oba argumenty źródłowe. Pierwotnie format trzech operandów AVX był ograniczony do instrukcji z operandami SIMD (YMM) i nie zawierał instrukcji z rejestrami ogólnego przeznaczenia (np. EAX). Był później używany do kodowania nowych instrukcji w rejestrach ogólnego przeznaczenia w późniejszych rozszerzeniach, takich jak BMI . Kodowanie VEX jest również używane dla instrukcji operujących na rejestrach maski k0-k7, które zostały wprowadzone wraz z AVX-512 .
Wyrównanie wymóg argumentów pamięci SIMD jest zrelaksowany. W przeciwieństwie do ich odpowiedników niekodowanych w VEX, większość instrukcji wektorowych zakodowanych w VEX nie wymaga już, aby ich operandy pamięci były wyrównane do rozmiaru wektora. Warto zauważyć, że VMOVDQA
instrukcja nadal wymaga wyrównania operandu pamięci.
Nowy schemat kodowania VEX wprowadza nowy zestaw przedrostków kodu, który rozszerza przestrzeń kodu , pozwala na użycie więcej niż dwóch operandów i pozwala, aby rejestry wektorowe SIMD były dłuższe niż 128 bitów. Prefiks VEX może być również używany w starszych instrukcjach SSE, nadając im formę trzech operandów i umożliwiając im wydajniejszą interakcję z instrukcjami AVX bez potrzeby VZEROUPPER
i VZEROALL
.
Instrukcje AVX obsługują zarówno 128-bitowe, jak i 256-bitowe karty SIMD. Wersje 128-bitowe mogą być przydatne do ulepszania starego kodu bez konieczności rozszerzania wektoryzacji i uniknięcia kary związanej z przejściem z SSE do AVX, są również szybsze w niektórych wczesnych implementacjach AVX AMD. Ten tryb jest czasami nazywany AVX-128.
Nowe instrukcje
Te instrukcje AVX są dodatkiem do tych, które są 256-bitowymi rozszerzeniami starszych 128-bitowych instrukcji SSE; większość z nich jest użyteczna na operandach 128-bitowych i 256-bitowych.
Instrukcja | Opis |
---|---|
VBROADCASTSS , VBROADCASTSD ,VBROADCASTF128
|
Skopiuj 32-bitowy, 64-bitowy lub 128-bitowy operand pamięci do wszystkich elementów rejestru wektorowego XMM lub YMM. |
VINSERTF128
|
Zastępuje dolną lub górną połowę 256-bitowego rejestru YMM wartością 128-bitowego operandu źródłowego. Druga połowa celu pozostaje bez zmian. |
VEXTRACTF128
|
Wyodrębnia dolną lub górną połowę 256-bitowego rejestru YMM i kopiuje wartość do 128-bitowego operandu docelowego. |
VMASKMOVPS , VMASKMOVPD
|
Warunkowo odczytuje dowolną liczbę elementów z operandu pamięci wektorowej SIMD do rejestru docelowego, pozostawiając pozostałe elementy wektora nieprzeczytane i ustawiając odpowiednie elementy w rejestrze docelowym na zero. Alternatywnie, warunkowo zapisuje dowolną liczbę elementów z operandu rejestru wektorowego SIMD do operandu pamięci wektorowej, pozostawiając pozostałe elementy operandu pamięci bez zmian. W architekturze procesora AMD Jaguar ta instrukcja z operandem źródła pamięci zajmuje ponad 300 cykli zegara, gdy maska wynosi zero, w takim przypadku instrukcja nie powinna nic robić. Wydaje się to być wadą projektową. |
VPERMILPS , VPERMILPD
|
Permutuj w pasie. Potasuj 32-bitowe lub 64-bitowe elementy wektorowe jednego operandu wejściowego. Są to 256-bitowe instrukcje w linii, co oznacza, że działają na wszystkich 256 bitach z dwoma oddzielnymi 128-bitowymi operacjami losowania, więc nie mogą tasować na 128-bitowych ścieżkach. |
VPERM2F128
|
Potasuj cztery 128-bitowe elementy wektorowe dwóch 256-bitowych operandów źródłowych w 256-bitowy operand docelowy, z natychmiastową stałą jako selektorem. |
VTESTPS , VTESTPD
|
Test upakowanych bitów spakowanych bitów znaku zmiennoprzecinkowego pojedynczej precyzji lub podwójnej precyzji, ustawianie lub czyszczenie flagi ZF w oparciu o flagę AND i CF w oparciu o ANDN. |
VZEROALL
|
Ustaw wszystkie rejestry YMM na zero i oznacz je jako nieużywane. Używany podczas przełączania między trybem 128-bitowym i 256-bitowym. |
VZEROUPPER
|
Ustaw górną połowę wszystkich rejestrów YMM na zero. Używany podczas przełączania między trybem 128-bitowym i 256-bitowym. |
Procesory z AVX
-
Intel
- Procesory Sandy Bridge , I kwartał 2011 r.
- Procesory Sandy Bridge E , IV kwartał 2011 r.
- Procesory Ivy Bridge , I kwartał 2012
- Procesory Ivy Bridge E , III kwartał 2013 r.
- Procesory Haswell , II kwartał 2013 r.
- Procesory Haswell E , III kwartał 2014 r.
- Procesory Broadwell , IV kwartał 2014 r.
- Procesory Skylake , III kwartał 2015
- Procesory Broadwell E , II kwartał 2016 r.
- Procesory Kaby Lake , III kwartał 2016 (urządzenia przenośne ULV)/I kwartał 2017 (komputer stacjonarny/przenośny)
- Procesory Skylake-X , II kwartał 2017 r.
- Procesory Coffee Lake , IV kwartał 2017 r.
- Procesory Cannon Lake , II kwartał 2018 r.
- Procesory whisky Lake , III kwartał 2018 r.
- Procesory Cascade Lake , IV kwartał 2018 r.
- Procesory Ice Lake , III kwartał 2019
- Procesory Comet Lake (tylko marki Core i Xeon), III kwartał 2019 r.
- Procesory Tiger Lake (marki Core, Pentium i Celeron), III kwartał 2020 r.
- Procesory Rocket Lake , I kwartał 2021 r.
- Procesory Alder Lake , 2021
- Procesory Gracemont , 2021
Nie wszystkie procesory z wymienionych rodzin obsługują AVX. Ogólnie rzecz biorąc, procesory o komercyjnej nazwie Core i3/i5/i7/i9 obsługują je, podczas gdy procesory Pentium i Celeron nie.
-
AMD :
- Procesory oparte na Jaguar i nowsze
- Procesory oparte na Puma i nowsze
- Procesory "Ciężkiego Sprzętu"
- Procesory oparte na buldożerach , IV kwartał 2011 r.
- Procesory Piledriver , IV kwartał 2012 r.
- Procesory oparte na Steamroller , I kwartał 2014 r.
- Procesory na koparkach i nowsze, 2015
- Procesory oparte na Zen , I kwartał 2017 r.
- Procesory oparte na Zen+ , II kwartał 2018 r.
- Procesory oparte na Zen 2 , III kwartał 2019 r.
- Procesory Zen 3 , IV kwartał 2020 r.
Kwestie dotyczące kompatybilności między przyszłymi procesorami Intel i AMD są omówione w zestawie instrukcji XOP .
Obsługa kompilatora i asemblera
- Absoft obsługuje flagę -mavx.
- Free Pascal kompilator obsługuje AVX i AVX2 z -CfAVX i -CfAVX2 przełącza się z wersją 2.7.1.
- Studio RAD (v11.0 Alexandria) obsługuje AVX2 i AVX512.
- Funkcje inline assemblera GNU Assembler (GAS) obsługują te instrukcje (dostępne przez GCC), podobnie jak prymitywy Intela i inline assembler (blisko kompatybilny z GAS, choć bardziej ogólny w obsłudze lokalnych odwołań w kodzie inline).
- GCC począwszy od wersji 4.6 (chociaż istniała gałąź 4.3 z pewnym wsparciem) i Intel Compiler Suite od wersji 11.1 obsługuje AVX.
- W Open64 wersja kompilatora 4.5.1 obsługuje AVX z -mavx flagi.
- PathScale obsługuje za pomocą flagi -mavx.
- Wektor Pascal kompilator obsługuje AVX poprzez flagi -cpuAVX32.
- Visual Studio 2010 / 2012 kompilator obsługuje AVX poprzez wewnętrzną i / arch: przełącznik AVX.
- Inne assemblery takie jak wersja MASM VS2010, YASM , FASM , NASM i JWASM .
Obsługa systemu operacyjnego
AVX dodaje nowy stan rejestrów poprzez 256-bitowy plik rejestru YMM, więc do prawidłowego zapisywania i przywracania rozszerzonych rejestrów AVX między przełącznikami kontekstu wymagana jest wyraźna obsługa systemu operacyjnego . Następujące wersje systemu operacyjnego obsługują AVX:
- DragonFly BSD : wsparcie dodane na początku 2013 roku.
- FreeBSD : wsparcie dodane w łatce przesłanej 21 stycznia 2012, która została zawarta w stabilnej wersji 9.1
- Linux : obsługiwany od wersji jądra 2.6.30, wydanej 9 czerwca 2009 r.
- macOS : wsparcie dodane w aktualizacji 10.6.8 ( Snow Leopard ) wydanej 23 czerwca 2011 r.
- OpenBSD : wsparcie dodane 21 marca 2015.
- Solaris : obsługiwane w Solaris 10 Update 10 i Solaris 11
-
Windows : obsługiwany w Windows 7 SP1, Windows Server 2008 R2 SP1, Windows 8 , Windows 10
- Windows Server 2008 R2 z dodatkiem SP1 z funkcją Hyper-V wymaga poprawki do obsługi procesorów AMD AVX (serie Opteron 6200 i 4200), KB2568088
Zaawansowane rozszerzenia wektorowe 2
Advanced Vector Extensions 2 (AVX2), znane również jako Haswell New Instructions , to rozszerzenie zestawu instrukcji AVX wprowadzonego w mikroarchitekturze Haswell firmy Intel . AVX2 wprowadza następujące dodatki:
- rozszerzenie większości wektorowych instrukcji SSE i AVX do 256 bitów
- Zbierz wsparcie, umożliwiające ładowanie elementów wektorowych z nieciągłych lokalizacji pamięci
- Granulacja DWORD i QWORD dowolny z dowolnymi permutacjami
- przesunięcia wektora.
Czasami inne rozszerzenie używające innej flagi cpuid jest uważane za część AVX2; te instrukcje są wymienione na ich własnej stronie, a nie poniżej:
- trzy argumentu skondensowany wielokrotnie akumuluje wspornik (FMA3)
Nowe instrukcje
Instrukcja | Opis |
---|---|
VBROADCASTSS , VBROADCASTSD
|
Skopiuj 32-bitowy lub 64-bitowy operand rejestru do wszystkich elementów rejestru wektorowego XMM lub YMM. Są to zarejestrowane wersje tych samych instrukcji w AVX1. Nie ma jednak wersji 128-bitowej, ale ten sam efekt można po prostu osiągnąć za pomocą VINSERTF128. |
VPBROADCASTB , VPBROADCASTW , VPBROADCASTD ,VPBROADCASTQ
|
Skopiuj 8, 16, 32 lub 64-bitowy rejestr liczb całkowitych lub operand pamięci do wszystkich elementów rejestru wektorowego XMM lub YMM. |
VBROADCASTI128
|
Skopiuj 128-bitowy operand pamięci do wszystkich elementów rejestru wektorowego YMM. |
VINSERTI128
|
Zastępuje dolną lub górną połowę 256-bitowego rejestru YMM wartością 128-bitowego operandu źródłowego. Druga połowa celu pozostaje bez zmian. |
VEXTRACTI128
|
Wyodrębnia dolną lub górną połowę 256-bitowego rejestru YMM i kopiuje wartość do 128-bitowego operandu docelowego. |
VGATHERDPD , VGATHERQPD , VGATHERDPS ,VGATHERQPS
|
Zbiera wartości zmiennoprzecinkowe o pojedynczej lub podwójnej precyzji przy użyciu 32- lub 64-bitowych indeksów i skali. |
VPGATHERDD , VPGATHERDQ , VPGATHERQD ,VPGATHERQQ
|
Zbiera 32- lub 64-bitowe wartości całkowite przy użyciu 32- lub 64-bitowych indeksów i skali. |
VPMASKMOVD , VPMASKMOVQ
|
Warunkowo odczytuje dowolną liczbę elementów z operandu pamięci wektorowej SIMD do rejestru docelowego, pozostawiając pozostałe elementy wektora nieprzeczytane i ustawiając odpowiednie elementy w rejestrze docelowym na zero. Alternatywnie, warunkowo zapisuje dowolną liczbę elementów z operandu rejestru wektorowego SIMD do operandu pamięci wektorowej, pozostawiając pozostałe elementy operandu pamięci bez zmian. |
VPERMPS , VPERMD
|
Potasuj osiem 32-bitowych elementów wektorowych jednego 256-bitowego operandu źródłowego w 256-bitowy operand docelowy, z rejestrem lub operandem pamięci jako selektorem. |
VPERMPD , VPERMQ
|
Potasuj cztery 64-bitowe elementy wektorowe jednego 256-bitowego operandu źródłowego w 256-bitowy operand docelowy, z rejestrem lub operandem pamięci jako selektorem. |
VPERM2I128
|
Potasuj (dwa z) cztery 128-bitowe elementy wektorowe dwóch 256-bitowych operandów źródłowych w 256-bitowy operand docelowy, z natychmiastową stałą jako selektorem. |
VPBLENDD
|
Doubleword bezpośrednia wersja instrukcji PBLEND z SSE4 . |
VPSLLVD , VPSLLVQ
|
Przesuń w lewo logicznie. Umożliwia zmienne przesunięcia, w których każdy element jest przesuwany zgodnie z pakowanymi danymi wejściowymi. |
VPSRLVD , VPSRLVQ
|
Przesuń w prawo logicznie. Umożliwia zmienne przesunięcia, w których każdy element jest przesuwany zgodnie z pakowanymi danymi wejściowymi. |
VPSRAVD
|
Przesuń w prawo arytmetycznie. Umożliwia zmienne przesunięcia, w których każdy element jest przesuwany zgodnie z pakowanymi danymi wejściowymi. |
Procesory z AVX2
-
Intel
- Procesor Haswell (tylko marki Core i Xeon), II kwartał 2013 r.
- Procesor Haswell E , III kwartał 2014 r.
- Procesor Broadwell , IV kwartał 2014 r.
- Procesor Broadwell E , III kwartał 2016 r.
- Procesor Skylake (tylko marki Core i Xeon), III kwartał 2015 r.
- Procesor Kaby Lake (tylko marki Core i Xeon), III kwartał 2016 (urządzenia mobilne ULV)/I kwartał 2017 (komputer stacjonarny/przenośny)
- Procesor Skylake-X , II kwartał 2017 r.
- Procesor Coffee Lake (tylko marki Core i Xeon), IV kwartał 2017 r.
- Procesor Cannon Lake , II kwartał 2018 r.
- Procesor Cascade Lake , II kwartał 2019 r.
- Procesor Ice Lake , III kwartał 2019 r.
- Procesor Comet Lake (tylko marki Core i Xeon), III kwartał 2019 r.
- Procesor Tiger Lake (marki Core, Pentium i Celeron), III kwartał 2020 r.
- Procesor Rocket Lake , I kwartał 2021 r.
- Procesor z jeziora Olcha , 2021
- Procesory Gracemont , 2021
- AMD
-
PRZEZ :
- Nano czterordzeniowy
- Eden X4
AVX-512
AVX-512 to 512-bitowe rozszerzenia instrukcji 256-bitowych Advanced Vector Extensions SIMD dla architektury zestawu instrukcji x86 zaproponowanej przez firmę Intel w lipcu 2013 r. i są obsługiwane przez procesor Intel Knights Landing .
Instrukcje AVX-512 są zakodowane nowym prefiksem EVEX . Umożliwia 4 operandy, 8 nowych 64-bitowych rejestrów masek operacyjnych, tryb pamięci skalarnej z automatycznym rozgłaszaniem, jawną kontrolę zaokrąglania i tryb adresowania skompresowanej pamięci przemieszczenia . Szerokość pliku rejestrów jest zwiększona do 512 bitów, a całkowita liczba rejestrów zwiększona do 32 (rejestry ZMM0-ZMM31) w trybie x86-64.
AVX-512 składa się z wielu rozszerzeń, z których nie wszystkie powinny być obsługiwane przez wszystkie procesory, które je implementują. Zestaw instrukcji składa się z następujących elementów:
- AVX-512 Foundation – dodaje kilka nowych instrukcji i rozszerza większość 32-bitowych i 64-bitowych instrukcji zmiennoprzecinkowych SSE-SSE4.1 i AVX/AVX2 o schemat kodowania EVEX w celu obsługi 512-bitowych rejestrów, masek operacji, rozgłaszania parametrów i wbudowane zaokrąglanie i kontrola wyjątków
- AVX-512 Conflict Detection Instructions (CD) — wydajne wykrywanie konfliktów umożliwiające wektoryzację większej liczby pętli, obsługiwane przez Knights Landing
- AVX-512 Exponential and Reciprocal Instructions (ER) — operacje wykładnicze i wzajemne zaprojektowane w celu pomocy we wdrażaniu operacji transcendentalnych, wspierane przez Knights Landing
- AVX-512 Prefetch Instructions (PF) – nowe możliwości prefetch obsługiwane przez Knights Landing
- AVX-512 Vector Length Extensions (VL) – rozszerza większość operacji AVX-512 tak, aby działały również na rejestrach XMM (128-bit) i YMM (256-bit) (w tym XMM16-XMM31 i YMM16-YMM31 w trybie x86-64)
- AVX-512 Byte and Word Instructions (BW) – rozszerza AVX-512 o operacje na 8-bitowych i 16-bitowych liczbach całkowitych
- AVX-512 Doubleword i Quadword Instructions (DQ) — ulepszone operacje na 32-bitowych i 64-bitowych liczbach całkowitych
- AVX-512 Integer Fused Multiply Add (IFMA) – połączone mnożenie dla 512-bitowych liczb całkowitych.
- AVX-512 Vector Byte Manipulation Instructions (VBMI) dodaje instrukcje permutacji bajtów wektorowych, których nie ma w AVX-512BW.
- AVX-512 Vector Neural Network Instructions Word zmienna precyzja (4VNNIW) — instrukcje wektorowe do głębokiego uczenia.
- AVX-512 Fused Multiply Accumulation Packed Pojedyncza precyzja (4FMAPS) — instrukcje wektorowe do głębokiego uczenia.
- VPOPCNTDQ – liczba bitów ustawiona na 1.
- VPCLMULQDQ – mnożenie liczb bez przenoszenia.
- AVX-512 Vector Neural Network Instructions (VNNI) — instrukcje wektorowe do głębokiego uczenia.
- AVX-512 Nowe instrukcje dotyczące pola Galois (GFNI) — instrukcje wektorowe do obliczania pola Galois .
- AVX-512 Instrukcje wektorowe AES (VAES) – instrukcje wektorowe do kodowania AES .
- AVX-512 Vector Byte Manipulation Instructions 2 (VBMI2) — ładowanie, przechowywanie i konkatenacja bajtów/słów z przesunięciem.
- AVX-512 Bit Algorithms (BITALG) — instrukcje manipulacji bitami bajtów/słów rozszerzające VPOPCNTDQ.
- AVX-512 Bfloat16 Instrukcje zmiennoprzecinkowe (BF16) — instrukcje wektorowe dla przyspieszenia AI.
- AVX-512 Instrukcje zmiennoprzecinkowe o połowie precyzji (FP16) — instrukcje wektorowe do operowania na liczbach zmiennoprzecinkowych i zespolonych ze zmniejszoną precyzją.
Tylko rozszerzenie rdzenia AVX-512F (AVX-512 Foundation) jest wymagane przez wszystkie implementacje, chociaż wszystkie obecne procesory obsługują również CD (wykrywanie konfliktów); koprocesory obliczeniowe będą dodatkowo obsługiwać ER, PF, 4VNNIW, 4FMAPS i VPOPCNTDQ, podczas gdy procesory centralne będą obsługiwać VL, DQ, BW, IFMA, VBMI, VPOPCNTDQ, VPCLMULQDQ itp.
Zaktualizowane instrukcje SSE/AVX w AVX-512F wykorzystują te same mnemoniki, co wersje AVX; mogą działać na 512-bitowych rejestrach ZMM, a także obsługiwać 128/256-bitowe rejestry XMM/YMM (z AVX-512VL) oraz operandy byte, word, doubleword i quadword integer (z AVX-512BW/DQ i VBMI).
Procesory z AVX-512
Podzbiór AVX-512 | F | Płyta CD | ER | PF | 4FMAP | 4VNNIW | VPOPCNTDQ | VL | DQ | BW | IFMA | VBMI | VBMI2 | BITALG | VNNI | VPCLMULQDQ | GFNI | VAES | VP2PRZECIĘCIE |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Lądowanie Rycerzy Intela (2016) | tak | tak | Nie | ||||||||||||||||
Młyn Rycerzy Intela (2017) | tak | Nie | |||||||||||||||||
Intel Skylake-SP , Skylake-X (2017) | Nie | tak | Nie | ||||||||||||||||
Jezioro armat Intela (2018) | tak | Nie | |||||||||||||||||
Intel Cascade Lake-SP (2019) | Nie | tak | Nie | ||||||||||||||||
Lodowe jezioro Intela (2019) | Nie | tak | Nie | ||||||||||||||||
Jezioro Tygrysów Intela (2020) | tak | ||||||||||||||||||
Jezioro rakiet Intel (2021) | Nie |
Kompilatory obsługujące AVX-512
AVX-VNNI
AVX-VNNI to zakodowany w VEX wariant rozszerzenia zestawu instrukcji AVX512-VNNI . Zapewnia ten sam zestaw operacji, ale jest ograniczony do wektorów 256-bitowych i nie obsługuje żadnych dodatkowych funkcji kodowania EVEX , takich jak rozgłaszanie, rejestry masek operacyjnych lub dostęp do ponad 16 rejestrów wektorowych. Rozszerzenie to pozwala na obsługę operacji VNNI nawet wtedy, gdy pełna obsługa AVX-512 nie jest zaimplementowana przez procesor.
Procesory z AVX-VNNI
-
Intel
- Procesor z jeziora Olcha , 2021
Aplikacje
- Nadaje się do obliczeń zmiennoprzecinkowych - intensywnych obliczeń w aplikacjach multimedialnych, naukowych i finansowych (AVX2 dodaje obsługę operacji na liczbach całkowitych ).
- Zwiększa równoległość i przepustowość w obliczeniach zmiennoprzecinkowych SIMD .
- Zmniejsza obciążenie rejestru dzięki nieniszczącym instrukcjom.
- Poprawia wydajność oprogramowania Linux RAID (wymagany AVX2, AVX nie jest wystarczający)
Oprogramowanie
- Blender używa AVX, AVX2 i AVX-512 w silniku renderowania Cycles.
- Bloombase używa AVX, AVX2 i AVX-512 w swoim module kryptograficznym Bloombase (BCM).
- Botan używa zarówno AVX, jak i AVX2, gdy są dostępne, aby przyspieszyć niektóre algorytmy, takie jak ChaCha.
- Crypto++ używa zarówno AVX, jak i AVX2, gdy są dostępne, aby przyspieszyć niektóre algorytmy, takie jak Salsa i ChaCha.
- OpenSSL używa funkcji kryptograficznych zoptymalizowanych pod kątem AVX i AVX2 od wersji 1.0.2. To wsparcie jest również obecne w różnych klonach i forkach, takich jak LibreSSL
- Prime95 /MPrime, oprogramowanie używane dla GIMPS , zaczęło używać instrukcji AVX od wersji 27.x.
- Dekoder dav1d AV1 może używać AVX2 na obsługiwanych procesorach.
- dnetc , oprogramowanie używane przez distribution.net , ma rdzeń AVX2 dostępny dla swojego projektu RC5 i wkrótce wyda jeden dla swojego projektu OGR-28.
- Einstein@Home używa AVX w niektórych swoich rozproszonych aplikacjach, które wyszukują fale grawitacyjne .
- Folding@home wykorzystuje AVX na rdzeniach obliczeniowych zaimplementowanych za pomocą biblioteki GROMACS .
- Helios używa akceleracji sprzętowej AVX i AVX2 na 64-bitowym sprzęcie x86.
- Horizon: Zero Dawn wykorzystuje AVX1 w swoim silniku gry Decima.
- RPCS3 , emulator PlayStation 3 o otwartym kodzie źródłowym , używa instrukcji AVX2 i AVX-512 do emulacji gier PS3.
- Network Device Interface , protokół wideo/audio IP opracowany przez NewTek do produkcji na żywo, wykorzystuje AVX i AVX2 w celu zwiększenia wydajności.
- TensorFlow od wersji 1.6 i tensorflow powyżej wersji wymaga procesora obsługującego co najmniej AVX.
- Kodery wideo x264 , x265 i VTM mogą używać AVX2 lub AVX-512 w celu przyspieszenia kodowania.
- Różne obciążenia na podstawie kryptowaluta górników (np cpuminer utrzymywania puli za Bitcoin i litecoin ) stosowanie AVX i AVX2 dla różnych procedur kryptograficzne związane oraz SHA-256 i scrypt .
- libsodium używa AVX w implementacji mnożenia skalarnego dla algorytmów Curve25519 i Ed25519 , AVX2 dla BLAKE2b , Salsa20 , ChaCha20 oraz AVX2 i AVX-512 w implementacji algorytmu Argon2 .
- Referencyjna implementacja libvpx open source kodera/dekodera VP8/VP9, używa AVX2 lub AVX-512, jeśli jest dostępna.
- FFTW może wykorzystywać AVX, AVX2 i AVX-512, jeśli są dostępne.
- LLVMpipe, programowy renderer OpenGL w Mesa wykorzystujący infrastrukturę Gallium i LLVM , używa AVX2, gdy jest dostępny.
-
glibc używa AVX2 (z FMA ) do zoptymalizowanej implementacji (tj.
expf
,sinf
,powf
,atanf
,atan2f
) różnych funkcji matematycznych w libc . - Jądro Linux może używać AVX lub AVX2 wraz z AES-NI jako zoptymalizowaną implementacją algorytmu kryptograficznego AES-GCM .
- Jądro Linuksa używa AVX lub AVX2, jeśli są dostępne, w zoptymalizowanej implementacji wielu innych szyfrów kryptograficznych: Camellia , CAST5 , CAST6 , Serpent , Twofish , MORUS-1280 i innych prymitywów: Poly1305 , SHA-1 , SHA-256 , SHA-512 , ChaCha20 .
- POCL, przenośny język obliczeniowy, który zapewnia implementację OpenCL , w miarę możliwości wykorzystuje AVX, AVX2 i AVX512.
-
.NET i .NET Framework mogą wykorzystywać AVX, AVX2 poprzez ogólną
System.Numerics.Vectors
przestrzeń nazw. -
.NET Core , począwszy od wersji 2.1 i bardziej szczegółowo po wersji 3.0, może bezpośrednio korzystać ze wszystkich wewnętrznych elementów AVX, AVX2 za pośrednictwem
System.Runtime.Intrinsics.X86
przestrzeni nazw. - EmEditor 19.0 i nowsze używają AVX-2 do przyspieszenia przetwarzania.
- Softsynth Massive X firmy Native Instruments wymaga AVX.
- Microsoft Teams używa instrukcji AVX2 do tworzenia rozmytego lub niestandardowego tła za uczestnikami czatu wideo oraz do tłumienia szumów tła.
- simdjson, biblioteka parsująca JSON , wykorzystuje AVX2 do uzyskania lepszej szybkości dekodowania.
Zmniejszanie prędkości
Ponieważ instrukcje AVX są szersze i generują więcej ciepła, niektóre procesory Intel mają przepisy mające na celu zmniejszenie limitu częstotliwości Turbo Boost podczas wykonywania takich instrukcji. W Skylake i jego pochodnych dławienie podzielone jest na trzy poziomy:
- L0 (100%): Normalny limit doładowania turbo.
- L1 (~85%): Limit „wzmocnienia AVX”. Miękko wyzwalane przez 256-bitowe "ciężkie" instrukcje (jednostka zmiennoprzecinkowa: matematyka FP i mnożenie liczb całkowitych). Wyzwalane przez „lekkie” (wszystkie inne) 512-bitowe instrukcje.
- L2 (~60%): Limit „wzmocnienia AVX-512”. Miękko wyzwalane przez 512-bitowe ciężkie instrukcje.
Przejście częstotliwości może być miękkie lub twarde. Twarde przejście oznacza, że częstotliwość jest zmniejszana, gdy tylko taka instrukcja zostanie zauważona; miękkie przejście oznacza, że częstotliwość zmniejsza się dopiero po osiągnięciu progowej liczby zgodnych instrukcji. Limit jest na wątek.
W Ice Lake pozostają tylko dwa poziomy:
- L0 (100%): Normalny limit doładowania turbo.
- L1 (~97%): Wywoływane przez dowolne instrukcje 512-bitowe, ale tylko wtedy, gdy aktywne jest wzmocnienie pojedynczego rdzenia; nie wyzwalane, gdy załadowanych jest wiele rdzeni.
Procesory Rocket Lake nie wyzwalają redukcji częstotliwości po wykonaniu jakichkolwiek instrukcji wektorowych, niezależnie od rozmiaru wektora. Jednak downclocking może nadal mieć miejsce z innych powodów, takich jak osiągnięcie limitów termicznych i mocy.
Downclocking oznacza, że używanie AVX w mieszanym obciążeniu z procesorem Intel może wiązać się z obniżeniem częstotliwości, mimo że jest szybsze w „czystym” kontekście. Unikanie stosowania szerokich i ciężkich instrukcji pomaga zminimalizować wpływ w takich przypadkach. AVX-512VL pozwala na użycie 256-bitowych lub 128-bitowych operandów w AVX-512, co czyni go rozsądnym domyślnym ustawieniem dla mieszanych obciążeń.
W obsługiwanych i odblokowanych wariantach procesorów, które zmniejszają częstotliwość taktowania, współczynniki można regulować i można je całkowicie wyłączyć (ustawić na 0x) za pomocą narzędzia Intel do przetaktowywania / strojenia lub w systemie BIOS, jeśli jest tam obsługiwane.
Zobacz też
- Rozszerzenia ochrony pamięci
- Scalable Vector Extension for ARM - nowy zestaw instrukcji wektorowych (uzupełniający VFP i NEON ) podobny do AVX-512, z kilkoma dodatkowymi funkcjami.