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]

Neue Eigenschaften[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. Eine Ausweitung auf letztere ist für AVX2 geplant.

Anwendung[Bearbeiten]

  • Nützlich für gleitkommaintensive Berechnung, vor allem im Multimedia-, wissenschaftlichen oder Finanzberechnungen. 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]

GCC seit Version 4.6, die Intel Compiler Suite seit 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 seit Version 3.0.

Betriebssystemunterstützung[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:

CPUs mit AVX[Bearbeiten]

Neue Instruktionen[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 eines Vergleiches 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.

Einzelnachweise[Bearbeiten]

  1. Intel Software Network. Intel. Abgerufen am 5. April 2008.
  2. Twitter. Abgerufen am 23. Juni 2010.
  3. x86: add linux kernel support for YMM state. Abgerufen am 13. Juli 2009.
  4. Linux 2.6.30 - Linux Kernel Newbies. Abgerufen am 13. Juli 2009.
  5. Floating-Point Support for 64-Bit Drivers. Abgerufen am 6. Dezember 2009.
  6. 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.
  7. FreeBSD 9.1-RELEASE Announcement. Abgerufen am 20. Mai 2013.
  8. x86_64 - support for AVX instructions. Abgerufen am 20. November 2013.
  9. Intel Offers Peek at Nehalem and Larrabee. ExtremeTech. 17. März 2008. Abgerufen am 20. August 2011.
  10. Bulldozer Roadmap. Joe Doe, AMD Developer blogs. 7. Mai 2009. Abgerufen am 8. September 2011.