Advanced Vector Extensions
Advanced Vector Extensions kurz AVX ist eine Erweiterung der x86-Architektur, die Intel im März 2008 vorgeschlagen wurde.
Inhaltsverzeichnis
Eigenschaften
AVX ist eine Erweiterung von SSE. Die Register von AVX sind 256-Bit gross und heissen YMM0 bis YMM15. Prozessoren, die AVX unterstützen führen SSE Befehle auf den unteren 128-Bit der AVX-Register aus. Zusätzlich führt AVX ein Drei-Operanden-SIMD-Befehlsformat ein (c := a + b). Das führt zu einer Optimierung der Abläufe, da das Quellregister nicht mehr überschrieben wird und somit allfällige Kopiervorgänge einspart. Drei-Operanden-SIMD-Befehle können nur mit AVX-Operanden (YMM) verwendet werden.
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 feststellen
Die Unterstützung von AVX durch die CPU kann durch aufrufen der CPUID Funktion 0x0000_0001 und durch Prüfen des Bit 28 im Register ECX geprüft werden.
Register
Im 32-Bit-Modus stehen nur YMM0 bis YMM7 zur Verfügung. Im 64-Bit-Modus sind alle Register verfügbar.
Bytes | |||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
YMM? | |||||||||||||||||||||||||||||||
XMM? | |||||||||||||||||||||||||||||||
? = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 |
Befehle
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. |
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. |