FMA x86
Vorlage:Hinweisbaustein FMA x86 ist eine Befehlssatzerweiterung für Mikroprozessoren von Intel und AMD zur Unterstützung der Fused-Multiply-Add-Technik (FMA). Von AMD erfolgte hierzu erstmals eine Umsetzung in den „Bulldozer“-CPUs. Intel setzte dies erst in den Haswell-Prozessoren ein.
Es gibt zwei nicht miteinander kompatible Ausführungen, FMA4 und FMA3:
- FMA4 ist die vollwertige Version, die eine Operation der Form <math>d=a+b\cdot c</math> erlaubt;
- FMA3 erfordert dagegen, dass das Zielregister eines der Operandenregister ist, und dieser dadurch überschrieben wird.
Neue Eigenschaften
FMA erweitert die Möglichkeiten zu Vektoroperationen und kann als Erweiterung der AVX-Befehle gesehen werden.
Neue Instruktionen
CPUs mit FMA4
- Intel hat FMA4 nicht implementiert.
- AMD hatte FMA4 implementiert:
- Bulldozer-basierte Prozessoren (AMD FX), Q4/2011
- Piledriver-basierte Prozessoren (AMD FX, Trinity und Richland APUs), Q2/2012
- Steamroller-basierte Prozessoren (4. Generation A-Serie-Prozessoren, Kaveri-APUs) Q1/2014
- Zen-Prozessoren (Q1/2017) haben zwar eine funktionierende Implementierung von FMA4, allerdings wird in der CPUID nicht angezeigt, dass die Instruktion zur Verfügung steht.<ref>btarunr: AMD „Zen“ Does Support FMA4, Just Not Exposed. In: TechPowerUp. 15. Oktober 2018, abgerufen am 10. März 2025 (Lua-Fehler in Modul:Multilingual, Zeile 153: attempt to index field 'data' (a nil value)).</ref> Die Implementierung vom FMA4 bei Zen ist demnach inoffiziell und ab der Zen2-Mikroarchitektur (Q3/2019) schließlich nicht mehr vorhanden
| Mnemonic | Operanden | Operation |
|---|---|---|
| VFMADDPDx | xmm, xmm, xmm/m128, xmm/m128 | a = b∙c + d |
| VFMADDPDy | ymm, ymm, ymm/m256, ymm/m256 | |
| VFMADDPSx | xmm, xmm, xmm/m128, xmm/m128 | |
| VFMADDPSy | ymm, ymm, ymm/m256, ymm/m256 | |
| VFMADDSD | xmm, xmm, xmm/m64, xmm/m64 | |
| VFMADDSS | xmm, xmm, xmm/m32, xmm/m32 |
CPUs mit FMA3
- Intel
- Alle Intel-Core-i-Prozessoren ab der Haswell-Mikroarchitektur (4. Generation Core i-Prozessoren)
- AMD
- Piledriver-basierte Prozessoren (2. Generation FX CPUs, Trinity und Richland APUs), Q2/2012
- Steamroller-basierte Prozessoren (4. Generation A-Serie-Prozessoren, Kaveri-APUs) Q1/2014
- Alle Ryzen- und Epyc-Prozessoren (ab der 1. Zen-Microarchitektur) Q1/2017
| Mnemonic | Operanden | Operation |
|---|---|---|
| VFMADD132PDy | ymm, ymm, ymm/m256 | a = a∙c + b |
| VFMADD132PSy | ||
| VFMADD132PDx | xmm, xmm, xmm/m128 | |
| VFMADD132PSx | ||
| VFMADD132SD | xmm, xmm, xmm/m64 | |
| VFMADD132SS | xmm, xmm, xmm/m32 | |
| VFMADD213PDy | ymm, ymm, ymm/m256 | a = b∙a + c |
| VFMADD213PSy | ||
| VFMADD213PDx | xmm, xmm, xmm/m128 | |
| VFMADD213PSx | ||
| VFMADD213SD | xmm, xmm, xmm/m64 | |
| VFMADD213SS | xmm, xmm, xmm/m32 | |
| VFMADD231PDy | ymm, ymm, ymm/m256 | a = b∙c + a |
| VFMADD231PSy | ||
| VFMADD231PDx | xmm, xmm, xmm/m128 | |
| VFMADD231PSx | ||
| VFMADD231SD | xmm, xmm, xmm/m64 | |
| VFMADD231SS | xmm, xmm, xmm/m32 |
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 Vier-Operanden-Form (im Fall von FMA4)
- Erhöht die Präzision gegenüber der Realisierung als zwei verkettete Multiplikations- und Additionsvorgänge. So kann es dazu kommen, dass wenn der Compiler automatisch eine Verkettung von Multiplikation und Addition durch eine FMA-Operation realisiert, dass man ein anderes, nämlich präziseres, Rechenergebnis bekommt.
Einzelnachweise
<references />
<templatestyles src="Erweiterte Navigationsleiste/styles legacy.css" />Vorlage:Klappleiste/Anfang
| Betriebsmodi |
Real Mode • Protected Mode • Virtual 8086 Mode • System Management Mode • Long Mode • Compatibility Mode |
| Befehlssatzerweiterungen |
x87 ⬝
PAE ⬝
NX ⬝
AMD64/Intel 64 (x64) ⬝
HTT ⬝
VT-x/AMD-V/VIA VT ⬝
3DNow! ⬝
MMX ⬝
SSE ⬝
SSE2 ⬝
PadLock ⬝
SSE3 ⬝
SSSE3 ⬝
SSE4 ⬝
SSE4a ⬝
|