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.

Schemat rejestrów AVX-512 jako rozszerzenie z rejestrów AVX (YMM0-YMM15) i SSE (XMM0-XMM15)
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 VMOVDQAinstrukcja 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 VZEROUPPERi 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

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.

Kwestie dotyczące kompatybilności między przyszłymi procesorami Intel i AMD są omówione w zestawie instrukcji XOP .

  • PRZEZ :
    • Nano czterordzeniowy
    • Eden X4
  • Zhaoxin :
    • Procesory oparte na WuDaoKou (KX-5000 i KH-20000)

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:

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
    • Procesor do koparek i nowsze, II kwartał 2015
    • Procesor Zen , I kwartał 2017 r.
    • Procesor Zen+ , II kwartał 2018 r.
    • Procesor Zen 2 , III kwartał 2019 r.
    • Procesor Zen 3 , 2020
  • 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

  • GCC 4.9 i nowsze
  • Clang 3.9 i nowsze
  • ICC 15.0.1 i nowsze
  • Kompilator Microsoft Visual Studio 2017 C++

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

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.Vectorsprzestrzeń 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.X86przestrzeni 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ż

Bibliografia

Zewnętrzne linki