- 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
Neue Eigenschaften
Die Breite der SIMD-Register wurde von 128 Bit (bei SSE) auf 256 Bit vergrößert und von XMM0–XMM15 zu YMM0–YMM15 umbenannt. Die Prozessoren, die AVX unterstützen, führen die älteren SSE-Befehle auf den unteren 128 Bit der neuen Register aus.
AVX führt ein drei Operanden SIMD-Instruktionsformat ein, wodurch sich das Register für das Ergebnis von den Quellregistern unterscheidet. SSE-Befehle nutzen beispielsweise die übliche Zwei-Operanden-Form a = a + b, während nun auch c = a + b möglich ist, wodurch keines der beiden Ausgangsregister überschrieben wird. Das Drei-Operanden-Format kann nur mit SIMD-Operanden (YMM) verwendet werden und nicht etwa mit Allzweckregistern, wie z. B. EAX. Eine Ausweitung auf letztere ist für AVX2 geplant.
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üllte die obere Hälfte aller YMM-Register mit Nullen. Wird beim Umschalten zwischen 128-Bit- und 256-Bit-Modus verwendet. 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
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.
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
CPUs mit AVX
- Intel
- Sandy Bridge Prozessoren, Q1 2011.[6]
- Ivy Bridge Prozessoren, Q1 2012.
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.
Wikimedia Foundation.