Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Advanced Vector Extensions

aus Wikipedia, der freien Enzyklopädie

Advanced Vector Extensions (AVX) ist eine Erweiterung desBefehlssatzes fürMikroprozessoren derx86-Architektur, die vonIntel im März 2008 vorgeschlagen wurde.[1]AVX ist eine Erweiterung der älterenSIMD-BefehlssatzerweiterungStreaming 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 der
Erweiterung
Daten-
breite
RegisteranzahlAdressierungs-
schema
vorhanden in CPUs von
IntelAMD
MMX /3DNow!006408X(MM0…07)MMX abPentium (P55C)K6 (MMX) /K6-2 „Chomper“ (3DNow!)
SSE (1…4.*)01288/16 (XMM0…15)REXSSE4:Core 2,NehalemK7 „Palomino“,K8, K8 „Venice“
AVX025616 (YMM0…15)VEXSandy Bridge,Ivy BridgeBulldozer,Piledriver,Steamroller,Jaguar
AVX2Haswell,Broadwell,Skylake-i,Kaby Lake-iExcavator,Zen,Zen 2,Zen 3
AVX-512051232 (ZMM0…31)EVEXSkylake-X,Xeon Phi x200,Xeon Skylake-Scalable Processors,Tiger Lake
0256/512Zen 4,Zen 5
AVX10.10256/51232 (ZMM0…31)EVEX / REX2Granite Rapids
AVX10.2051232 (ZMM0…31)EVEX / REX2Diamond Rapids

AVX2 erweitert den Befehlssatz von AVX um weitere 256-Bit-Befehle und wurde erstmals von Prozessoren derHaswell-Architektur (Intel) undExcavator-Architektur (AMD) unterstützt.

AVX-512 wurde 2013 veröffentlicht und erweiterte die AVX-Befehle von 256 auf 512 Bit.[2] Es wurde erstmals von Prozessoren derKnights-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.[3] 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.[4]

Neue Eigenschaften

[Bearbeiten |Quelltext bearbeiten]
YMM AVX-Registerschema als Erweiterung der XMM-SSE-Register

Die Breite derSIMD-Register wurde von 128 Bit (beiSSE) auf 256 Bit vergrößert. Die neuen notwendigenRegister 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-Registerwerden mit den XMM-Registern geteilt.

AVX führt ein Drei-Operanden-SIMD-Befehlsformatc :=a +b ein, das Ergebnis zerstört damit nicht mehr notwendigerweise ein Quellregister, was Kopieroperationen einspart. SSE-Befehle nutzen die Zwei-Operanden-Forma :=a +b. Das Drei-Operanden-Format kann nur mitSIMD-Operanden (YMM) verwendet werden und nicht mit Allzweckregistern, wie z. B. EAX oder RAX.

Anwendung

[Bearbeiten |Quelltext bearbeiten]
  • 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

[Bearbeiten |Quelltext bearbeiten]

GCC ab Version 4.6, die Intel Compiler Suite ab Version 11.1 undVisual Studio 2010 unterstützen AVX.DerGNU Assembler unterstützt AVX über Inline-Assemblerbefehle, ebenso wie Intels Pendant. Außerdem unterstützenMASM in der Version für Visual Studio 2010,Yasm ab Version 1.1.0,FASM undNASM nach eigenen Angaben auch AVX. Im x86-Codegenerator des Compiler-UnterbausLLVM befindet sich eine vollständige AVX 1-Unterstützung ab Version 3.0.

Betriebssystemunterstützung

[Bearbeiten |Quelltext bearbeiten]

AVX braucht explizite Unterstützung durch dasBetriebssystem, damit die neuen Register bei einemKontextwechsel korrekt gespeichert und wiederhergestellt werden. Die folgenden Betriebssystemversionen unterstützen AVX:

DragonFly BSD
Anfang 2013[5]
FreeBSD
9.1 vom 13. November 2013[6] durch einen am 21. Januar 2012 eingereichten Patch[7]
Linux
abKernel 2.6.30[8] vom 9. Juni 2009[9]
macOS
ab 10.6.8 (letztesSnow Leopard Update)[10] vom 23. Juni 2011
OpenBSD
5.8 vom 18. Oktober 2015[11]
Solaris
10 Update 10 und Solaris 11
Windows
abWindows 7 SP1 undWindows Server 2008 R2 SP1 vom 22. Februar 2011[12]

CPUs mit AVX

[Bearbeiten |Quelltext bearbeiten]
Intel
AMD

CPUs mit AVX-512

[Bearbeiten |Quelltext bearbeiten]
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.[16]
  • 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.[17]
  • 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

Neue Instruktionen AVX

[Bearbeiten |Quelltext bearbeiten]
Registerschema von AVX-512 als Erweiterung der AVX- (YMM0-YMM15) und SSE-Register (XMM0-XMM15)
5112562551281270
  ZMM0   YMM0   XMM0 
ZMM1YMM1XMM1
ZMM2YMM2XMM2
ZMM3YMM3XMM3
ZMM4YMM4XMM4
ZMM5YMM5XMM5
ZMM6YMM6XMM6
ZMM7YMM7XMM7
ZMM8YMM8XMM8
ZMM9YMM9XMM9
ZMM10YMM10XMM10
ZMM11YMM11XMM11
ZMM12YMM12XMM12
ZMM13YMM13XMM13
ZMM14YMM14XMM14
ZMM15YMM15XMM15
ZMM16YMM16XMM16
ZMM17YMM17XMM17
ZMM18YMM18XMM18
ZMM19YMM19XMM19
ZMM20YMM20XMM20
ZMM21YMM21XMM21
ZMM22YMM22XMM22
ZMM23YMM23XMM23
ZMM24YMM24XMM24
ZMM25YMM25XMM25
ZMM26YMM26XMM26
ZMM27YMM27XMM27
ZMM28YMM28XMM28
ZMM29YMM29XMM29
ZMM30YMM30XMM30
ZMM31YMM31XMM31
InstruktionBeschreibung
VBROADCASTSS
VBROADCASTSD
VBROADCASTF128
Kopiert einen 32-Bit-, 64-Bit- oder 128-Bit-Speicheroperanden in alle Elemente eines XMM- oder YMM-Registers.
VINSERTF128Ersetzt 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.
VEXTRACTF128Extrahiert 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.
VPERM2F128Mischt die vier 128-Bit-Vektorelemente aus zwei 256-Bit-Ursprungsoperanden in ein 256-Bit-Zieloperanden.
VTESTPS, VTESTPDSetzt die Flag-Bits CF und ZF entsprechend einem Vergleich aller Vorzeichenbits.
VZEROALLFüllt alle YMM-Register mit Nullen und markiert sie als unbenutzt. Wird beim Umschalten zwischen 128-Bit- und 256-Bit-Modus verwendet.
VZEROUPPERFüllt die obere Hälfte aller YMM-Register mit Nullen. Wird beim Umschalten zwischen 128-Bit- und 256-Bit-Modus verwendet.

Erweiterung AVX 2

[Bearbeiten |Quelltext bearbeiten]

Eine Erweiterung stellen dieAdvanced 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 denAMD Carrizo bzw. IntelHaswell-Prozessoren vertrieben.

Erweiterung AVX-512

[Bearbeiten |Quelltext bearbeiten]

Da im Bereich desHochleistungsrechnens mittlerweile die Energieeffizienz immer wichtiger wird und dasSIMD-Konzept hier Fortschritte verspricht, wurde für dieIntel 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 IntelAVX-512, sie besteht aus mehreren spezifizierten Gruppen neuer Instruktionen, welche gestaffelt implementiert werden. Die zweiteXeon Phi-Generation (Knights Corner) erhält die sogenannteFoundation, die dritte Generation (Knights Landing, 2016) zusätzlich dieCD-,PF- undER-Erweiterungen.

Im Unterschied zuXeon Phi einschließlichKnights Landing sind die BefehlsgruppenDQ,BW undVL Bestandteil der im Sommer 2017 erschienenXeon Scalable Processors und der von ihnen abgeleitetenSkylake-X-Prozessoren (ab Core i7-7800X).

Die Befehlsgruppen wurden von Intel bereits vorab dokumentiert und sind über dieCPUID-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,[20] die Leistung ist jedoch „erstaunlich gut“.[21] 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 demRyzen AI 300, auch die gleiche Aufteilung in zwei 256-Bit-Operationen, wie schon bei Zen 4, weiterhin möglich.[22] Bei Intel ist AVX-512 als Spezifikation beziehungsweiseRoadmap zu sehen, welche Instruktionen Intel zukünftig in die AVX-Einheiten bringen will[23]:

BefehlssatzName SetCPUID-BitProzessoren
IntelAMD
AVX512F(Basisbefehlssatz,
restliche Befehle sind optional)
FoundationEBX 16Xeon Phi x200, Xeon SPZen 4
AVX512PFPrefetchEBX 26Xeon Phi x200
AVX512DQVector Double Word and Quad WordEBX 17Xeon SPZen 4
AVX512BWVector Byte and WordEBX 30Xeon SPZen 4
AVX512VLVector LengthEBX 31Xeon SPZen 4
AVX512CDConflict DetectionEBX 28Xeon Phi x200, Xeon SPZen 4
AVX512ERExponential and ReciprocalEBX 27Xeon Phi x200
AVX512IFMAInteger Fused Multiply-Add mit 512 BitEBX 21Cannon LakeZen 4
AVX512_VBMIVector Bit ManipulationECX 01Cannon LakeZen 4
AVX512_VBMI2Vector Bit Manipulation 2ECX 06Cannon LakeZen 4
AVX512_4FMAPSVector Fused Multiply Accumulation Packed Single precisionEDX 03Xeon Phi 72x5
AVX512_4VNNIWVector Neural Network Instructions Word Variable PrecisionEDX 02Xeon Phi 72x5
AVX512_VPOPCNTDQVector POPCOUNT Dword/QwordECX 14Xeon Phi 72x5Zen 4
AVX512_VNNIVector Neural Network InstructionsECX 11Xeon Cascade LakeZen 4
AVX512_BITALGBitalgorithmen, Support for VPOPCNT[B,W] and VPSHUF-BITQMBECX 12Ice LakeZen 4
AVX512_GFNIGalois Field New InstructionsIce Lake
AVX512_VPCLMULQDQCarry-Less Multiplication QuadwordIce Lake
AVX512_VAESVector AESIce Lake
AVX512_BF16BFLOAT16Floating-Point FormatCooper Lake, Sapphire RapidsZen 4

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

Benutzung

[Bearbeiten |Quelltext bearbeiten]

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)
    • Zerlegungen der Berechnungen in viele unabhängige Threads, die parallel und z. T. auf verschiedenen Architekturen abgearbeitet werden können (z. B. auf eine/mehrere GPU(s) ausgelagert werden können)
    • Nutzen dieser erweiterten Befehlssätze durch …
      • Nutzung von Compilern, die diese Befehlssätze unterstützen
      • Nutzung von Bibliotheken, die diese Befehlssätze nutzen (z. B.Math Kernel Library oderOpenBLAS)
      • Nutzung von Bibliotheken, die wiederum solche Bibliotheken nutzen (z. B. Graphikbibliotheken)
      • Nutzung von Programmiersprachen, die von sich aus Gebrauch von diesen Befehlen machen (z. B.Python mit dem numpy-Paket)
      • Bei sehr kritischen Applikation kann das Nutzen vonCompiler Intrinsics oder das Schreiben von Assembler-Routinen zu einer weiteren Performance-Steigerung notwendig sein.

Die Probleme sind aber nicht neu und das Nutzen der Befehlssatzerweiterungen ist von diesen Optimierungen noch der Teil, der sich am besten automatisieren lässt.

Fazit

[Bearbeiten |Quelltext bearbeiten]

Programme können mithilfe vonAVX und dessen 256 Bit breiten Registern imx64-Modus in jedemTaktzyklus vierGleitkommaoperationen mitdoppelter Genauigkeit oder acht Gleitkommaoperationen miteinfacher Genauigkeit bei bspw. einer einfachen Addition berechnen. Dabei befinden sich jeweils vier Werte doppelter Genauigkeit oder acht Werte einfacher Genauigkeit in jeweils einem der 16 AVX-Register, die dann mit jeweils einem Partner verrechnet werden.

Mit AVX2 verändert sich die Registerbreite nicht, es wurden lediglich einige der zuvor (bei AVX) noch mit 128 Bit ausgeführten Operationen (z. B.FMA3:Fused-Multiply Add/Floating-PointMultiply-Accumulate,Integeroperationen…) auf 256-Bit-Ausführung gebracht.[26] Es ändert sich somit die Anzahl der verfügbaren 256-Bit-SIMD-Operationen. Bei einer einfachen Addition auf einer64-Bit-Architektur werden weiterhin (nur) vier Gleitkommaoperationen mit doppelter Genauigkeit oder acht Gleitkommaoperationen mit einfacher Genauigkeit gleichzeitig berechnet.

Bei AVX-512 sind es aufgrund der Registerbreite von 512 Bit damit pro Befehl acht Additionen in doppelter Genauigkeit oder 16 Additionen in einfacher Genauigkeit. Die Nutzung von AVX-512 beschränkt sich im Desktop-Segment gegenwärtig (2018) auf denX299-Chipsatz derSkylake-Architektur für denSockel 2066 sowie seit 2016 auch auf eine Reihe derXeon-Prozessorbaureihen.

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. Thomas Hübner: SSE-Nachfolger heißt AVX und ist 256 Bit breit. ComputerBase, 17. März 2008, abgerufen am 29. März 2018. 
  2. James Reinders: AVX-512 Instructions. Intel, 23. Juli 2013, abgerufen am 15. Dezember 2022 (englisch). 
  3. Architecture Specification for Intel® Advanced Vector Extensions 10 (Intel® AVX10). Intel, abgerufen am 23. Mai 2025. 
  4. Intel AVX10 Drops Optional 512-bit: No AVX10 256-bit Only E-Cores In The Future. Abgerufen am 23. Mai 2025 (englisch). 
  5. x86_64 – support for AVX instructions. Abgerufen am 20. November 2013 (englisch). 
  6. FreeBSD 9.1-RELEASE Announcement. Abgerufen am 20. Mai 2013 (englisch). 
  7. 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 (englisch). 
  8. x86: add linux kernel support for YMM state. Abgerufen am 13. Juli 2009 (englisch). 
  9. Linux 2.6.30 – Linux Kernel Newbies. Abgerufen am 13. Juli 2009 (englisch). 
  10. Twitter. Abgerufen am 23. Juni 2010 (englisch). 
  11. Theo de Raadt: OpenBSD 5.8. Abgerufen am 7. Dezember 2015 (englisch). 
  12. Floating-Point Support for 64-Bit Drivers. Abgerufen am 6. Dezember 2009 (englisch). 
  13. Intel Offers Peek at Nehalem and Larrabee. ExtremeTech, 17. März 2008, abgerufen am 20. August 2011 (englisch). 
  14. Bulldozer Roadmap. Joe Doe, AMD Developer blogs, 7. Mai 2009, abgerufen am 8. September 2011. 
  15. AMD Piledriver vs. Steamroller vs. Excavator – Leistungsvergleich der Architekturen. In: Planet 3DNow! 14. August 2015, archiviert vom Original (nicht mehr online verfügbar) am 21. Februar 2017; abgerufen am 20. Februar 2017. 
  16. https://cdrdv2-public.intel.com/671488/248966-Software-Optimization-Manual-R047.pdf
  17. https://cdrdv2-public.intel.com/671488/248966-Software-Optimization-Manual-R047.pdf
  18. AMD Ryzen 7000: Up to 16 Cores, AVX-512 Support at Launch auftomshardware.com vom 27. Mai 2022.
  19. AMD Zen 4: Epyc-Prozessoren mit 96 CPU-Kernen und AVX-512 aufheise.de vom 17. August 2021.
  20. https://www.phoronix.com/review/amd-zen4-avx512
  21. https://www.tomshardware.com/news/avx-512-performance-impresses-on-ryzen-7040
  22. Carsten Spille: AMD Ryzen AI 300: Überraschende Details zu Zen 5 sowie RDNA 3.5 und XDNA2. In:Heise online. 24. Juli 2024. Abgerufen am 11. September 2024.; Zitat: „Auch die Befehlssatzerweiterung AVX512 ist wie schon bei Zen 4 wieder mit an Bord. Die Zen-5-Kerne können, anders als bei Zen 4, AVX512 theoretisch auch in einem statt in zwei Durchgängen ausführen und so für die doppelte Rechenleistung pro Takt sorgen. Allerdings bewahrte sich AMD auch die Möglichkeit, die breiten Instruktionen platz- und energiesparend in zwei 256-Bit-Häppchen nacheinander abzuarbeiten, wie es schon Zen 4 tat.“.
  23. ISA-Extensions Programming Reference. Abgerufen am 17. Oktober 2017. 
  24. Xeon SP Technical Overview. Abgerufen am 17. Oktober 2017. 
  25. How to detect KNL instruction support. Abgerufen am 17. Oktober 2017. 
  26. Gepner, Pawel."Using AVX2 instruction set to increase performance of high performance computing code", Computing and Informatics 36.5 (2017): 1001-1018.
Befehlssatzerweiterungen derx86-Architektur (16 Bit;32 Bit:IA-32;64 Bit:x64)
Betriebsmodi

Real ModeProtected ModeVirtual 8086 ModeSystem Management ModeLong ModeCompatibility Mode

Befehlssatzerweiterungen

x87PAENXAMD64/Intel 64 (x64) ⬝HTTVT-x/AMD-V/VIA VT3DNow!MMXSSESSE2PadLockSSE3SSSE3SSE4SSE4aSSE5F16CAVXCLMULAES-NIFMATSXBMIMPXSGX

Abgerufen von „https://de.wikipedia.org/w/index.php?title=Advanced_Vector_Extensions&oldid=264365798
Kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp