# Conjunt d'instruccions FMA

El conjunt d'instruccions FMA és una extensió de les instruccions de Streaming SIMD Extensions de 128 i 256 bits del conjunt d'instruccions del microprocessador x86 per dur a terme operacions de multiplicació i suma fusionada (FMA). Hi ha dues variants:
* FMA4 és compatible amb els processadors AMD a partir de l'arquitectura Bulldozer. FMA4 es va realitzar en maquinari abans que FMA3. El suport per a FMA4 s'ha eliminat des de Zen 1.
* FMA3 és compatible amb processadors AMD a partir de l'arquitectura Piledriver i Intel començant amb processadors Haswell i processadors Broadwell des del 2014.

## Instruccions

Les instruccions FMA3 i FMA4 tenen una funcionalitat gairebé idèntica, però no són compatibles. Tots dos contenen instruccions de multiplicació i suma fusionada (FMA) per a operacions escalars i SIMD de coma flotant, però les instruccions FMA3 tenen tres operands, mentre que les FMA4 en tenen quatre. L'operació FMA té la forma d = round(a · b + c), on la funció arrodonida realitza un arrodoniment per permetre que el resultat encaixi dins del registre de destinació si hi ha massa bits significatius per cabre dins de la destinació.
La forma de quatre operands (FMA4) permet que a, b, c i d siguin quatre registres diferents, mentre que la forma de tres operands (FMA3) requereix que d sigui el mateix registre que a, b o c. La forma de tres operands fa que el codi sigui més curt i la implementació del maquinari una mica més senzilla, mentre que la forma de quatre operands proporciona més flexibilitat de programació.
Consulteu el conjunt d'instruccions XOP per obtenir més informació sobre problemes de compatibilitat entre Intel i AMD.

## Conjunt d'instruccions FMA3

* AMD
** Piledriver (2012) i microarquitectures més noves
*** APU de segona generació, "Trinity" (32 nm), 15 de maig de 2012
*** "Bulldozer" de segona generació (bdver2) amb nuclis Piledriver, 23 d'octubre de 2012
* Intel
** Haswell (2013) i processadors més nous, excepte Pentiums i Celerons

## Conjunt d'instruccions FMA4

* AMD
** Processadors "Equip Pesat".
*** Processadors basats en bulldozer, 12 d'octubre de 2011
*** Processadors basats en Piledriver
*** Processadors basats en Steamroller
*** Processadors basats en excavadores (inclòs "v2")
** Zen : Les proves de WikiChip mostren que FMA4 sembla que encara funciona (en les condicions de les proves) tot i no ser compatible oficialment i ni tan sols informat per CPUID. Així ho ha confirmat també Agner Fog. Però altres proves van donar resultats incorrectes. Lloc web oficial d'AMD FMA4 Nota de suport CPUs ZEN = AMD ThreadRipper 1900x, R7 Pro 1800, 1700, R5 Pro 1600, 1500, R3 Pro 1300, 1200, R3 2200G, R5 2400G.
* Intel
** Intel no ha llançat CPU amb suport per a FMA4.

## Referències

* ↑ Kusswurm, Daniel. AVX2 Programming – Packed Floating-Point – Part 1 (en anglès). Berkeley, CA: Apress, 2023, p. 389–443. DOI 10.1007/978-1-4842-9603-5_11. ISBN 978-1-4842-9603-5.
* ↑ «The microarchitecture of Intel, AMD and VIA CPUs An optimization guide for assembly programmers and compiler makers» (en anglès). [Consulta: 2 maig 2017].
* ↑ Frumusanu, Dr Ian Cutress, Andrei. «AMD Zen 3 Ryzen Deep Dive Review: 5950X, 5900X, 5800X and 5600X Tested» (en anglès). [Consulta: 5 desembre 2023].
* ↑ «FMA Instructions - x86 Assembly Language Reference Manual» (en anglès). [Consulta: 5 desembre 2023].