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 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. Die Implementierung vom FMA4 bei Zen ist demnach inoffiziell und ab der Zen2-Mikroarchitektur (Q3/2019) schließlich nicht mehr vorhanden

Mnemonic Operanden OperationVFMADDPDxxmm, xmm, xmm/m128, xmm/m128 a = b∙c + dVFMADDPDyymm, ymm, ymm/m256, ymm/m256VFMADDPSxxmm, xmm, xmm/m128, xmm/m128VFMADDPSyymm, ymm, ymm/m256, ymm/m256VFMADDSDxmm, xmm, xmm/m64, xmm/m64VFMADDSSxmm, 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 OperationVFMADD132PDyymm, ymm, ymm/m256a = a∙c + bVFMADD132PSyVFMADD132PDxxmm, xmm, xmm/m128VFMADD132PSxVFMADD132SDxmm, xmm, xmm/m64VFMADD132SSxmm, xmm, xmm/m32VFMADD213PDyymm, ymm, ymm/m256a = b∙a + cVFMADD213PSyVFMADD213PDxxmm, xmm, xmm/m128VFMADD213PSxVFMADD213SDxmm, xmm, xmm/m64VFMADD213SSxmm, xmm, xmm/m32VFMADD231PDyymm, ymm, ymm/m256a = b∙c + aVFMADD231PSyVFMADD231PDxxmm, xmm, xmm/m128VFMADD231PSxVFMADD231SDxmm, xmm, xmm/m64VFMADD231SSxmm, 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

Kategorie:Prozessorarchitektur nach Befehlssatz