Advanced Vector Extensions

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche

Advanced Vector Extensions (AVX) ist eine Erweiterung des x86-Befehlssatzes für Mikroprozessoren von Intel und AMD, die von Intel im März 2008 vorgeschlagen wurde.[1]

AVX2 erweitert den Befehlssatz von AVX und wurde erstmals von Prozessoren der Haswell-Architektur (Intel) und Excavator-Architektur (AMD) unterstützt. AVX-512 wurde 2013 veröffentlicht und erweiterte die AVX-Befehle von 256 auf 512 Bit.[2] Es wurde erstmals von Prozessoren der Knights Landing-Architektur (Intel) unterstützt.

Neue Eigenschaften[Bearbeiten | Quelltext bearbeiten]

YMM AVX-Registerschema als Erweiterung der XMM-SSE-Register

Die Breite der SIMD-Register wurde von 128 Bit (bei SSE) auf 256 Bit vergrößert. Die neuen notwendigen Register heißen YMM0 bis YMM15. Die Prozessoren, die AVX unterstützen, führen die älteren SSE-Befehle auf den unteren 128 Bit der neuen Register aus, d.h. die unteren 128 Bit der YMM-Register werden mit den XMM-Registern geteilt.

AVX führt ein Drei-Operanden-SIMD-Befehlsformat c := a + b ein, das Ergebnis zerstört damit nicht mehr notwendigerweise ein Quellregister, was Kopieroperationen einspart. SSE-Befehle nutzen die Zwei-Operanden-Form a := a + b. Das Drei-Operanden-Format kann nur mit SIMD-Operanden (YMM) verwendet werden und nicht mit Allzweckregistern, wie z. B. EAX oder RAX.

Anwendung[Bearbeiten | Quelltext bearbeiten]

  • Nützlich für gleitkommaintensive Berechnung, vor allem im Multimedia-, wissenschaftlichen oder Finanzbereich. Ganzzahloperationen sollen später folgen.
  • Erhöht Parallelität und Durchsatz von Gleitkomma-SIMD-Berechnungen.
  • Verringert die Registerlast durch nicht destruktive Drei-Operanden-Form.

Unterstützung in Compilern und Assemblern[Bearbeiten | Quelltext bearbeiten]

GCC ab Version 4.6, die Intel Compiler Suite ab Version 11.1 und Visual Studio 2010 unterstützen AVX. Der GNU Assembler unterstützt AVX über Inline-Assemblerbefehle, ebenso wie Intels Pendant. Außerdem unterstützen MASM in der Version für Visual Studio 2010, Yasm ab Version 1.1.0, FASM und NASM nach eigenen Angaben auch AVX. Im x86-Codegenerator des Compiler-Unterbaus LLVM befindet sich eine vollständige AVX 1-Unterstützung ab Version 3.0.

Betriebssystemunterstützung[Bearbeiten | Quelltext bearbeiten]

AVX braucht explizite Unterstützung durch das Betriebssystem, damit die neuen Register bei einem Kontextwechsel korrekt gespeichert und wiederhergestellt werden. Die folgenden Betriebssystemversionen unterstützen AVX:

Apple OS X
10.6.8 (Snow Leopard Update)[3] vom 23. Juni 2011.
Linux
2.6.30[4] vom 9. Juni 2009[5]
Windows
ab Windows 7 SP1 und Windows Server 2008 R2 SP1.[6]
FreeBSD
9.1 vom 13. November 2013[7] durch einen am 21. Januar 2012 eingereichten Patch[8]
OpenBSD
5.8 vom 18. Oktober 2015[9]
DragonFly BSD
Anfang 2013[10]
Solaris
10 Update 10 und Solaris 11

CPUs mit AVX[Bearbeiten | Quelltext bearbeiten]

Neue Instruktionen AVX[Bearbeiten | Quelltext bearbeiten]

Instruktion Beschreibung
VBROADCASTSS, VBROADCASTSD, VBROADCASTF128 Kopiert einen 32-Bit-, 64-Bit- oder 128-Bit-Speicheroperanden in alle Elemente eines XMM- oder YMM-Registers.
VINSERTF128 Ersetzt entweder die obere oder untere Hälfte eines 256-Bit-YMM-Register mit dem Wert aus dem 128-Bit-Operanden. Die andere Hälfte bleibt unverändert.
VEXTRACTF128 Extrahiert entweder die obere oder untere Hälfte eines 256-Bit-YMM-Registers und kopiert den Wert in den 128-Bit-Operanden.
VMASKMOVPS, VMASKMOVPD Liest eine beliebige Anzahl von Vektorelementen bedingt aus einem SIMD-Speicheroperand in ein Zielregister, wobei der verbleibende Platz mit Nullen gefüllt wird. Alternativ schreibt es eine beliebige Anzahl von Vektorelementen bedingt von einem SIMD-Register in ein SIMD-Speicheroperanden, wobei der verbleibende Platz im Speicher nicht verändert wird.
VPERMILPS, VPERMILPD Tauscht 32-Bit- oder 64-Bit-Vektorelemente aus.
VPERM2F128 Mischt die vier 128-Bit-Vektorelemente aus zwei 256-Bit-Ursprungsoperanden in ein 256-Bit-Zieloperanden.
VTESTPS, VTESTPD Setzt die Flag-Bits CF und ZF entsprechend einem Vergleich aller Vorzeichenbits.
VZEROALL Füllt alle YMM-Register mit Nullen und markiert sie als unbenutzt. Wird beim Umschalten zwischen 128-Bit- und 256-Bit-Modus verwendet.
VZEROUPPER Füllt die obere Hälfte aller YMM-Register mit Nullen. Wird beim Umschalten zwischen 128-Bit- und 256-Bit-Modus verwendet.
Registerschema von AVX-512 als Erweiterung der AVX- (YMM0-YMM15) und SSE-Register (XMM0-XMM15)
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

Erweiterung AVX 2[Bearbeiten | Quelltext bearbeiten]

Eine Erweiterung stellen die Advanced Vector Extensions 2 (AVX2) dar, bei der einige neue Instruktionen eingeführt wurden und zahlreiche bestehende Instruktionen nun ebenfalls 256 Bit breit sind. AVX2 wird erstmals mit den Haswell-Prozessoren vertrieben.

Erweiterung AVX-512[Bearbeiten | Quelltext bearbeiten]

Da im High-Performance-Computing mittlerweile die Energieeffizienz immer wichtiger wird und das SIMD-Konzept hier Fortschritte verspricht, wird für die Intel Xeon Phi genannten Rechenbeschleunigerkarten AVX nochmals komplett überarbeitet, die Daten- und Registerbreite auf 512 Bit verdoppelt und die Anzahl der Register auf 32 verdoppelt. Diese Erweiterung nennt Intel AVX-512, sie besteht aus mehreren spezifizierten Gruppen von neuen Instruktionen, die gestaffelt implementiert werden. Die zweite Xeon Phi-Generation („Knights Corner“) erhält die „Foundation“-, die dritte Generation („Knights Landing“) 2016 zusätzlich „CD“, „ER“, „PF“ Erweiterungen.

Für die für 2017 angekündigte Skylake-Xeon-Server-Generation EP/EX ist AVX-512 ebenfalls angekündigt.

Somit ergiben sich für die SIMD-Erweiterungen folgende Daten:

Name Erweiterung Datenbreite Registeranzahl Adressierungsschema in Intel CPUs eingebaut in AMD CPUs eingebaut
MMX / 3D Now 64 8 (MM0-7) K6 / K6-2 „Chomper“
SSE (1-4.*) 128 8/16 (XMM0-15) REX K7 „Palomino“, K8, K8 „Venice“
AVX 256 16 (YMM0-15) VEX SandyBridge, IvyBridge Bulldozer, Piledriver, Steamroller, Jaguar
AVX2 256 16 (YMM0-15) VEX Haswell, Broadwell Excavator, Zen
AVX-512 512 32 (ZMM0-31) EVEX Skylake, Intel Xeon Phi

Fazit[Bearbeiten | Quelltext bearbeiten]

Die zahlreichen Erweiterungen des Befehlssatzes der x86-Architektur führen dazu, dass kommerzielle Softwarehersteller (die den Quellcode ihrer Applikationen nicht an die Kunden ausliefern) solche Erweiterungen gar nicht oder nur mit großer Verzögerung in ihre Programme einbauen. Die Nutzung dieser Erweiterungen bleibt damit überwiegend auf selbst entwickelte oder Open Source-Programme beschränkt.

Einzelnachweise[Bearbeiten | Quelltext bearbeiten]

  1. Intel Software Network. Intel. Abgerufen am 5. April 2008.
  2. James Reinders: AVX-512 Instructions. Intel. 23. Juli 2013. Abgerufen am 3. März 2017.
  3. Twitter. Abgerufen am 23. Juni 2010.
  4. x86: add linux kernel support for YMM state. Abgerufen am 13. Juli 2009.
  5. Linux 2.6.30 – Linux Kernel Newbies. Abgerufen am 13. Juli 2009.
  6. Floating-Point Support for 64-Bit Drivers. Abgerufen am 6. Dezember 2009.
  7. FreeBSD 9.1-RELEASE Announcement. Abgerufen am 20. Mai 2013.
  8. Add support for the extended FPU states on amd64, both for native 64bit and 32bit ABIs. svnweb.freebsd.org. 21. Januar 2012. Abgerufen am 22. Januar 2012.
  9. Theo de Raadt: OpenBSD 5.8. Abgerufen am 7. Dezember 2015.
  10. x86_64 – support for AVX instructions. Abgerufen am 20. November 2013.
  11. Intel Offers Peek at Nehalem and Larrabee. ExtremeTech. 17. März 2008. Abgerufen am 20. August 2011.
  12. Bulldozer Roadmap. Joe Doe, AMD Developer blogs. 7. Mai 2009. Abgerufen am 8. September 2011.
  13. AMD Piledriver vs. Steamroller vs. Excavator – Leistungsvergleich der Architekturen. In: Planet 3DNow! 14. August 2015, abgerufen am 20. Februar 2017.