FMA x86

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Die fraglichen Angaben werden daher möglicherweise demnächst entfernt. Bitte hilf der Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst. Näheres ist eventuell auf der Diskussionsseite oder in der Versionsgeschichte angegeben. Bitte entferne zuletzt diese Warnmarkierung.

FMA x86 bezeichnet 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[Bearbeiten | Quelltext bearbeiten]

FMA erweitert die Möglichkeiten zu Vektoroperationen und kann als Erweiterung der AVX-Befehle gesehen werden.

Neue Instruktionen[Bearbeiten | Quelltext bearbeiten]

CPUs mit FMA4[Bearbeiten | Quelltext bearbeiten]

  • Intel
    • Z. Z. ist noch unklar, ob Intel sich FMA4 anschließt oder bei FMA3 bleiben wird.
  • AMD
    • AMD 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
Mnemonic Operanden Operation
VFMADDPDx xmm, xmm, xmm/m128, xmm/m128 $1 = $2×$3 + $4
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[Bearbeiten | Quelltext bearbeiten]

Mnemonic Operanden Operation
VFMADD132PDy ymm, ymm, ymm/m256 $1 = $1×$3 + $2
VFMADD132PSy
VFMADD132PDx xmm, xmm, xmm/m128
VFMADD132PSx
VFMADD132SD xmm, xmm, xmm/m64
VFMADD132SS xmm, xmm, xmm/m32
VFMADD213PDy ymm, ymm, ymm/m256 $1 = $2×$1 + $3
VFMADD213PSy
VFMADD213PDx xmm, xmm, xmm/m128
VFMADD213PSx
VFMADD213SD xmm, xmm, xmm/m64
VFMADD213SS xmm, xmm, xmm/m32
VFMADD231PDy ymm, ymm, ymm/m256 $1 = $2×$3 + $1
VFMADD231PSy
VFMADD231PDx xmm, xmm, xmm/m128
VFMADD231PSx
VFMADD231SD xmm, xmm, xmm/m64
VFMADD231SS xmm, xmm, xmm/m32

Anwendung[Bearbeiten | Quelltext bearbeiten]

  • 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)