Advanced Vector Extensions
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]
Inhaltsverzeichnis |
[Bearbeiten] Neue Eigenschaften
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 notgezwungenerweise 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.
[Bearbeiten] Anwendung
- 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
[Bearbeiten] Unterstützung in Compilern und Assemblern
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.
[Bearbeiten] Betriebssystemunterstützung
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)[2] 23. Juni 2011.
- Linux: 2.6.30[3] 9. Juni 2009[4]
- Windows: Windows 7 SP1 und Windows Server 2008 R2 SP1.[5]; Windows 8
[Bearbeiten] CPUs mit AVX
- Intel
- Sandy Bridge Prozessoren, Q1 2011.[6]
- Ivy Bridge Prozessoren, Q2 2012.
[Bearbeiten] Neue Instruktionen
| Instruktion | Beschreibung |
|---|---|
| VBROADCASTSS, VBROADCASTSD, VBROADCASTF128 | Kopiert ein 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. |
| 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. |
[Bearbeiten] Einzelnachweise
- ↑ Intel Software Network. Intel. Abgerufen am 5. April 2008.
- ↑ Twitter. Abgerufen am 23. Juni 2010.
- ↑ x86: add linux kernel support for YMM state. Abgerufen am 13. Juli 2009.
- ↑ Linux 2.6.30 - Linux Kernel Newbies. Abgerufen am 13. Juli 2009.
- ↑ Floating-Point Support for 64-Bit Drivers. Abgerufen am 6. Dezember 2009.
- ↑ Intel Offers Peek at Nehalem and Larrabee. ExtremeTech (17. März 2008). Abgerufen am 20. August 2011.
- ↑ Bulldozer Roadmap. Joe Doe, AMD Developer blogs (7. Mai 2009). Abgerufen am 8. September 2011.