Advanced Vector Extensions


Advanced Vector Extensions w encyklopedii

Z Wikipedii, wolnej encyklopedii Przejdź do nawigacji Przejdź do wyszukiwania

AVX (Advanced Vector Extensions) – rozszerzenie listy rozkazów SSE opublikowane w marcu 2008 przez Intel. Jako pierwszy procesor zawierający ten zestaw instrukcji miał się pojawić w pierwszym kwartale 2011 roku i być oparty na architekturze Sandy Bridge tej firmy. AMD zapowiadał wprowadzenie procesora z AVX na trzeci kwartał 2011 roku – miałby być to układ o architekturze Bulldozer.

Rozszerzenia:

  1. W AVX wprowadzono 256-bitowe rejestry – 2 razy większe niż wykorzystywane dotychczas w SSE. Nowych rejestrów jest 16 i w asemblerze noszą nazwy YMM0...YMM15. W dalszych wersjach AVX mogą pojawić się jeszcze większe rejestry, 512-, a nawet 1024-bitowe.
  2. Dodano kilka rozkazów działających wyłącznie na rejestrach YMM (19 rozkazów).
  3. Dodane czteroargumentowe rozkazy akumulujące wyniki mnożenia wektorów liczb zmiennoprzecinkowych, to znaczy wykonujące obliczenia według schematu w = ± z + ( ± x y ) {\displaystyle w=\pm z+(\pm x\cdot y)} (12 rozkazów).
  4. Dodane specjalizowane instrukcje wspomagające szyfrowanie AES (6 rozkazów).
  5. Część rozkazów SSE, głównie tych działających na wektorach liczb zmiennoprzecinkowych, może wykonywać działania na rejestrach YMM (88 rozkazów).
  6. Rozszerzone kodowanie rozkazów, dzięki któremu możliwe stało się wykonywanie niektórych instrukcji SSE w wariancie trójargumentowym lub czteroargumentowym. Dotychczas wszystkie rozkazy były dwuargumentowe, z czego jeden był docelowy (nadpisywany) i często zachodziła konieczność jego zapisania/przepisania do innego rejestru lub pamięci, jeśli musiał zostać wykorzystany w dalszej części obliczeń – w wariancie trójargumentowym można wprost wskazać docelowy rejestr (rozwiązanie zapożyczone z architektury RISC) (166 rozkazów).

Spis treści

Rejestry | edytuj kod

Mikroprocesor pracujący w trybie 32-bitowym ma dostęp do pierwszych 8 rejestrów (0..7), w trybie 64-bitowym do wszystkich. Istniejące rejestry SSE (XMM0...XMM7) zostały zamapowane na młodsze 128 bitów rejestrów YMM0...YMM7.

Typy danych | edytuj kod

W związku z dwukrotnym poszerzeniem rejestru pojawiły się nowe typy wektorowe tylko dla liczb zmiennoprzecinkowych:

  • 8 × 32 bity – wektor 8 liczb zmiennoprzecinkowych pojedynczej precyzji
  • 4 × 64 bity – wektor 4 liczb zmiennoprzecinkowych podwójnej precyzji

Mnemoniki instrukcji | edytuj kod

Mnemoniki rozkazów AVX oraz SSE działających na 256-bitowych rejestrach rozpoczynają się literą V. Typ danych, na jakich działają, określa sufiks:

  • PS, PD – wektor liczb zmiennoprzecinkowych,
  • SS, SD – skalar (pierwszy element wektora), czyli liczba zmiennoprzecinkowa odpowiednio pojedynczej i podwójnej precyzji

Mnemoniki rozkazów akumulujących wyniki mnożenia rozpoczynają się od VFM lub VFNM, natomiast mnemoniki rozkazów wspomagających szyfrowanie od AES.

Rozkazy AVX | edytuj kod

Instrukcje AVX działają na rejestrach YMM, niektóre również na XMM.

Nowe rozkazy | edytuj kod

Akumulujące wyniki mnożenia (FMA) | edytuj kod

Liczba rozkazów należących do tej grupy wynosi 12. Wszystkie są czteroargumentowe VFMxxxxx w, x, y, z i wykonują działanie według schematu w = ± z + ( ± x y ) . {\displaystyle w=\pm z+(\pm x\cdot y).}

Instrukcje skalarne, czyli działające na pierwszym elemencie wektora (sufiks SD lub SS), zachowują się inaczej niż instrukcje skalarne SSE: wpisują wartość zero na pozostałe pozycje wektora wynikowego, podczas gdy w SSE przepisywane są elementy jednego z argumentów.

Lista rozkazów FMA:

Wspomagające szyfrowanie algorytmem AES | edytuj kod

  • AESDEC, AESDECLAST – deszyfrowanie
  • AESENC, AESENCLAST – szyfrowanie
  • AESIMC
  • AESKEYGENASSIST

Rozszerzone rozkazy SSE | edytuj kod

AVX rozszerza możliwości instrukcji SSE na dwa sposoby:

  • umożliwia przeprowadzanie obliczeń na dwa razy szerszych rejestrach YMM
  • rozszerza liczbę argumentów z dwóch na trzy lub trzech na cztery

Rozkazy SSE mogące dodatkowo działać na rejestrach YMM | edytuj kod

Trójargumentowe instrukcje SSE mogące działać na rejestrach XMM oraz YMM | edytuj kod

Trójargumentowe instrukcje SSE mogące działać wyłącznie na rejestrach XMM | edytuj kod

Rozkazy działające na wektorach liczb zmiennoprzecinkowych:

Rozkazy działające na wektorach liczb całkowitych:

Czteroargumentowe instrukcje SSE mogące działać na rejestrach XMM oraz YMM | edytuj kod

Czteroargumentowe instrukcje SSE mogące działać tylko na rejestrach XMM | edytuj kod

Rozkazy konwersji | edytuj kod

Wersje SSE działają na 32-bitowych liczbach całkowitych, AVX – 64-bitowych.

Zobacz też | edytuj kod

Przypisy | edytuj kod

  1. Westmere – wykonanie i nowe instrukcje :: PCLab.pl, pclab.pl [dostęp 2017-11-21]  (pol.).

Bibliografia | edytuj kod

  • Advanced Vector Extensions Programming Reference (dokument 319433-002), Intel, marzec 2008

Linki zewnętrzne | edytuj kod

Na podstawie artykułu: "Advanced Vector Extensions" pochodzącego z Wikipedii
OryginałEdytujHistoria i autorzy