Advanced Vector Extensions (AVX) ist eine Erweiterung des Befehlssatzes für Mikroprozessoren der x86-Architektur, die von Intel im März 2008 vorgeschlagen wurde. AVX ist eine Erweiterung der älteren SIMD-Befehlssatzerweiterung Streaming SIMD Extensions 4, die ebenfalls von Intel initiiert wurde. Die Breite der Register und Datenwörter erhöht sich auf 256 Bit. Die folgende Tabelle zeigt die Weiterentwicklung der SIMD-Instruktionen in der x86-Architektur:

Name derErweiterung Daten-breite Registeranzahl Adressierungs-schema vorhanden in CPUs von Intel AMD MMX / 3DNow! 64 8 (MM0…7) MMX ab Pentium (P55C) K6 (MMX) / K6-2 „Chomper“ (3DNow!) SSE (1…4.*) 128 8/16 (XMM0…15) REX SSE4: Core 2, Nehalem K7 „Palomino“, K8, K8 „Venice“ AVX 256 16 (YMM0…15) VEX Sandy Bridge, Ivy Bridge Bulldozer, Piledriver, Steamroller, Jaguar AVX2 Haswell, Broadwell, Skylake-i, Kaby Lake-i Excavator, Zen, Zen 2, Zen 3 AVX-512 512 32 (ZMM0…31) EVEX Skylake-X, Xeon Phi x200, Xeon Skylake-Scalable Processors, Tiger Lake 256/512 Zen 4, Zen 5 AVX10.1 256/512 32 (ZMM0…31) EVEX / REX2 Granite Rapids AVX10.2 512 32 (ZMM0…31) EVEX / REX2 Diamond Rapids

AVX2 erweitert den Befehlssatz von AVX um weitere 256-Bit-Befehle 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. Es wurde erstmals von Prozessoren der Knights-Landing-Architektur (Intel) unterstützt.

AVX10 wurde 2023 veröffentlicht und soll die konvergenten Umsetzung von AVX-512 ermöglichen. Es werden alle AVX-512 Befehle unterstützt und eine Versionsbasierte Befehlssatzaufzählung eingeführt. In einer früheren Version der Spezifikation wurde für AVX10.2 auch eine 256-bit Implementierung vorgesehen, ab Version 3 wurde diese entfernt, so dass eine 512-Bit-Implementierung nun verpflichtend ist.

Neue Eigenschaften mini|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 Nützlich für gleitkommaintensive Berechnung, vor allem im Multimedia-, wissenschaftlichen oder Finanzbereich. Ganzzahloperationen folgten 2013. Erhöht Parallelität und Durchsatz von Gleitkomma- und Ganzzahl-SIMD-Berechnungen. Verringert die Registerlast durch nicht destruktive Drei-Operanden-Form. Wird auch zur Beschleunigung kryptographischer Algorithmen benutzt.

Unterstützung in Compilern und Assemblern 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 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: DragonFly BSD Anfang 2013 FreeBSD 9.1 vom 13. November 2013 durch einen am 21. Januar 2012 eingereichten Patch Linux ab Kernel 2.6.30 vom 9. Juni 2009 macOS ab 10.6.8 (letztes Snow Leopard Update) vom 23. Juni 2011 OpenBSD 5.8 vom 18. Oktober 2015 Solaris 10 Update 10 und Solaris 11 Windows ab Windows 7 SP1 und Windows Server 2008 R2 SP1 vom 22. Februar 2011

CPUs mit AVX Intel Sandy-Bridge-Prozessoren, Q1 2011 Ivy-Bridge-Prozessoren, Q2 2012 Haswell-Prozessoren, Q2 2013 Broadwell-Prozessoren, Q1 2015 Skylake-Prozessoren, Q3 2015 Kaby-Lake-Prozessoren, Q3 2016 Coffee-Lake-Prozessoren Q4 2017

AMD Bulldozer-Prozessoren, Q4 2011 Piledriver-Prozessoren, Q4 2012 Jaguar-Prozessoren Q2 2013 Steamroller-Prozessoren, Q1 2014 Excavator-Prozessoren, Q2 2015 Zen-Prozessoren, Q1 2017 Zen-2-Prozessoren, Q3 2019 Zen-3-Prozessoren, Q4 2020 Zen-4-Prozessoren, Q4 2022 Zen-5-Prozessoren, Q3 2024

CPUs mit AVX-512 Intel Cascade Lake Ice Lake: Jeder P-Kern (Performance-Kern) hat nur zwei AVX2-Einheiten, die für AVX512 zu einer AVX512-Einheit zusammengeschaltet werden, sodass sich gegenüber AVX2, abgesehen von den erweiterten Instruktionen, keine Leistungssteigerung erzielen lässt. Die E-Kerne (Effizienz-Kerne) verfügen über keine AVX512-Einheit.https://cdrdv2-public.intel.com/671488/248966-Software-Optimization-Manual-R047.pdf Tiger Lake: Jeder P-Kern hat nur zwei AVX2-Einheiten, die für AVX512 zu einer AVX512-Einheit zusammengeschaltet werden, sodass sich gegenüber AVX2, abgesehen von den erweiterten Instruktionen, keine Leistungssteigerung erzielen lässt. Die E-Kerne verfügen über keine AVX512-Einheit. Alder Lake: Nur in frühen CPU-Steppings nutzbar, AVX512 nicht offiziell unterstützt, ausschließlich in den P-Kernen implementiert. Zuerst von Intel über BIOS und Microcode-Updates deaktiviert, in späteren Steppings komplett in Hardware deaktiviert.

AMD Zen 4 Ryzen 7000 „Raphael“AMD Ryzen 7000: Up to 16 Cores, AVX-512 Support at Launch auf tomshardware.com vom 27. Mai 2022. EPYC 9004 „Genoa“AMD Zen 4: Epyc-Prozessoren mit 96 CPU-Kernen und AVX-512 auf heise.de vom 17. August 2021. Zen 5 Ryzen 9000 „Granite Ridge“

Neue Instruktionen AVX 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

Instruktion Beschreibung VBROADCASTSSVBROADCASTSDVBROADCASTF128 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. VMASKMOVPSVMASKMOVPD 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 Platzim Speicher nicht verändert wird. VPERMILPSVPERMILPD 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.

Erweiterung AVX 2 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 AMD Carrizo bzw. Intel Haswell-Prozessoren vertrieben.

Erweiterung AVX-512 Da im Bereich des Hochleistungsrechnens mittlerweile die Energieeffizienz immer wichtiger wird und das SIMD-Konzept hier Fortschritte verspricht, wurde für die Intel Xeon Phi genannten Rechenbeschleuniger die Befehlssatzerweiterung AVX2 nochmals komplett überarbeitet. Unter anderem wurde hierbei die Daten- und Registerbreite auf 512 Bit verdoppelt sowie die Anzahl der Register auf 32 verdoppelt. Diese überarbeitete Erweiterung nennt Intel AVX-512, sie besteht aus mehreren spezifizierten Gruppen neuer Instruktionen, welche gestaffelt implementiert werden. Die zweite Xeon Phi-Generation (Knights Corner) erhält die sogenannte Foundation, die dritte Generation (Knights Landing, 2016) zusätzlich die CD-, PF- und ER-Erweiterungen.

Im Unterschied zu Xeon Phi einschließlich Knights Landing sind die Befehlsgruppen DQ, BW und VL Bestandteil der im Sommer 2017 erschienen Xeon Scalable Processors und der von ihnen abgeleiteten Skylake-X-Prozessoren (ab Core i7-7800X).

Die Befehlsgruppen wurden von Intel bereits vorab dokumentiert und sind über die CPUID-Instruktion abfragbar, bestimmte Register-Bits sind bei Vorhandensein der Befehlsgruppe gesetzt. Bei AMD Zen 4 ist AVX-512 „double-pumped“ durch zwei 256-Bit-Vektoreinheiten,https://www.phoronix.com/review/amd-zen4-avx512 die Leistung ist jedoch „erstaunlich gut“.https://www.tomshardware.com/news/avx-512-performance-impresses-on-ryzen-7040 Bei AMD Zen 5 ist AVX-512 „voll“ implementiert, arbeitet also eine 512-Bit-AVX-Berechnung in einem Takt ab, jedoch ist aus Gründen der Einsparung (Platz und Energie), für z. B. Mobilprozessoren wie dem Ryzen AI 300, auch die gleiche Aufteilung in zwei 256-Bit-Operationen, wie schon bei Zen 4, weiterhin möglich. Bei Intel ist AVX-512 als Spezifikation beziehungsweise Roadmap zu sehen, welche Instruktionen Intel zukünftig in die AVX-Einheiten bringen will:

Befehlssatz Name Set CPUID-Bit Prozessoren Intel AMD AVX512F (Basisbefehlssatz,restliche Befehle sind optional) Foundation EBX 16 Xeon Phi x200, Xeon SP Zen 4 AVX512PF Prefetch EBX 26 Xeon Phi x200 AVX512DQ Vector Double Word and Quad Word EBX 17 Xeon SP Zen 4 AVX512BW Vector Byte and Word EBX 30 Xeon SP Zen 4 AVX512VL Vector Length EBX 31 Xeon SP Zen 4 AVX512CD Conflict Detection EBX 28 Xeon Phi x200, Xeon SP Zen 4 AVX512ER Exponential and Reciprocal EBX 27 Xeon Phi x200 AVX512IFMA Integer Fused Multiply-Add mit 512 Bit EBX 21 Cannon Lake Zen 4 AVX512_VBMI Vector Bit Manipulation ECX 01 Cannon Lake Zen 4 AVX512_VBMI2 Vector Bit Manipulation 2 ECX 06 Cannon Lake Zen 4 AVX512_4FMAPS Vector Fused Multiply Accumulation Packed Single precision EDX 03 Xeon Phi 72x5 AVX512_4VNNIW Vector Neural Network Instructions Word Variable Precision EDX 02 Xeon Phi 72x5 AVX512_VPOPCNTDQ Vector POPCOUNT Dword/Qword ECX 14 Xeon Phi 72x5 Zen 4 AVX512_VNNI Vector Neural Network Instructions ECX 11 Xeon Cascade Lake Zen 4 AVX512_BITALG Bitalgorithmen, Support for VPOPCNT[B,W] and VPSHUF-BITQMB ECX 12 Ice Lake Zen 4 AVX512_GFNI Galois Field New Instructions Ice Lake AVX512_VPCLMULQDQ Carry-Less Multiplication Quadword Ice Lake AVX512_VAES Vector AES Ice Lake AVX512_BF16 BFLOAT16 Floating-Point Format Cooper Lake, Sapphire Rapids Zen 4

Implementierung der einzelnen Befehlsgruppen dokumentiert für Xeon SP und für Xeon Phi Knights Landing (x200).

Benutzung Die Benutzung dieser Spezialbefehle läuft auf folgendes hinaus: Isolation der zu optimierenden Programmteile, nur diese müssen überhaupt betrachtet werden zu optimieren sind dort: Speicherlayout der verwendeten Datenstrukturen (Alignment, Cache-Effizienz, Lokalität von Speicherzugriffen)