FMA

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 15 juli 2021; kontroller kräver 6 redigeringar .

FMA ( eng.  Fused Multiply-Add , multiplikations-addition med enkel avrundning) är en uppsättning valfria 128- och 256-bitars SIMD - instruktioner för x86- och x86-64-arkitekturer , utformade för att utföra multiplikations-additionsoperationen på tal i flytande- punktformat. komma.

Det finns två alternativ för tillägg som lägger till FMA-instruktioner:

Funktioner

FMA3- och FMA4-instruktionerna har nästan identiska funktioner, men de är inte kompatibla. Båda innehåller SIMD-multiplicera-lägg-instruktioner för flyttal. Deras stöd i kompilatorer kommer att ta lite tid.

Kompatibilitetsproblem

Skillnaden mellan FMA3 och FMA4 är hur många olika operander instruktionen har - 3 eller 4. FMA-operationen är:

4-operandformen (FMA4) tillåter a, b, c och d att finnas i olika register, medan 3-operandformen (FMA3) kräver att d finns i ett av samma register som a, b eller c. 3-operandformen gör koden kortare och lättare att implementera i hårdvara, medan 4-operandformen ger mer programmeringsflexibilitet.

FMA3

Processorer med FMA3-stöd

Nya FMA3 instruktioner

Instruktion operander Drift
VFMADD132PDy, VFMSUB132PDy ymm, ymm, ymm/m256 a = a c ± b
VFMADD132PSy, VFMSUB132PSy
VFMADD132PDx, VFMSUB132PDx xmm, xmm, xmm/m128
VFMADD132PSx, VFMSUB132PSx
VFMADD132SD, VFMSUB132SD xmm, xmm, xmm/m64
VFMADD132SS, VFMSUB132SS xmm, xmm, xmm/m32
VFMADD213PDy, VFMSUB213PDy ymm, ymm, ymm/m256 a = b a ± c
VFMADD213PSy, VFMSUB213PSy
VFMADD213PDx, VFMSUB213PDx xmm, xmm, xmm/m128
VFMADD213PSx, VFMSUB213PSx
VFMADD213SD, VFMSUB213SD xmm, xmm, xmm/m64
VFMADD213SS, VFMSUB213SS xmm, xmm, xmm/m32
VFMADD231PDy, VFMSUB231PDy ymm, ymm, ymm/m256 a = b c ± a
VFMADD231PSy, VFMSUB231PSy
VFMADD231PDx, VFMSUB231PDx xmm, xmm, xmm/m128
VFMADD231PSx, VFMSUB231PSx
VFMADD231SD, VFMSUB231SD xmm, xmm, xmm/m64
VFMADD231SS, VFMSUB231SS xmm, xmm, xmm/m32

Förutom huvudinstruktionerna i tabellen innehåller FMA3-tillägget ett antal instruktioner som tillhör följande grupper:

FMA4

Processorer med FMA4-stöd

Nya FMA4 instruktioner

Instruktion operander Drift
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

Historik

Inkompatibiliteten mellan Intels FMA3 och AMDs FMA4 beror på att båda företagen ändrat sina planer utan att komma överens om kodningsdetaljer med varandra. AMD ändrade planerna från FMA3 till FMA4, medan Intel ändrade planerna från FMA4 till FMA3, nästan samtidigt.

Kompilatorstöd

Olika kompilatorer erbjuder olika nivåer av FMA-stöd.

Support i montörer:

Se även

Anteckningar

  1. ↑ Att hitta en balans . Dave Christie, AMD-utvecklarbloggar (7 maj 2009). Hämtad: 8 maj 2009.  (inte tillgänglig länk)
  2. Maffeo, Robin AMD och Visual Studio 11 Beta . AMD. Hämtad: 8 december 2013.  (otillgänglig länk)
  3. AMD64 Architecture Programmer's Guide. Volym 6. 128-bitars och 256-bitars XOP-, FMA4- och CVT16-  instruktioner . AMD (1 maj 2009). Hämtad 7 december 2013. Arkiverad från originalet 20 maj 2009.
  4. Nya instruktioner i "Bulldozer" och "Piledriver".  Ett steg framåt i högpresterande mjukvaruutveckling . AMD (oktober 2012). Datum för åtkomst: 7 december 2013. Arkiverad från originalet 7 januari 2013.
  5. [1] Arkiverad 14 september 2017 på Wayback Machine "Men eftersom Zen är en ren design, finns det några instruktionsuppsättningar som finns i Bulldozer-processorer som inte finns i Zen/znver1. De som inte längre finns inkluderar FMA4 och XOP."
  6. [https://web.archive.org/web/20160304033017/https://sourceware.org/ml/binutils/2015-03/msg00078.html Arkiverad 4 mars 2016 på Wayback Machine Gopalasubramanian, G - [PATCH ]lägg till znver1-processor]
  7. GCC 4.5 är ute (nedlänk) . Hämtad 7 december 2013. Arkiverad från originalet 13 december 2013. 
  8. Inbäddade FMA4-objekt har lagts till i Visual Studio 2010 SP1 . Hämtad 7 december 2013. Arkiverad från originalet 16 december 2013.
  9. Nytt i x86 Open64 Compiler Suite v4.5.2 . Arkiverad från originalet den 13 november 2013.

Länkar