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:
- FMA4 har stöds av AMD -processorer sedan Bulldozer- arkitekturen . FMA4 implementerades före FMA3, men AMD avbröt sedan stödet för denna tillägg. Detta blev opraktiskt eftersom Intel inte implementerade FMA4 i sina processorer.
- FMA3 stöds av Intel-processorer sedan Haswell -arkitekturen och av AMD-processorer sedan Piledriver- arkitekturen .
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
- Intel
- Intel introducerade en hårdvaruimplementering av FMA3 i processorer baserad på Haswell-arkitekturen 2013.
- AMD
- AMD-processorer fick stöd för FMA3 i arkitekturerna Bulldozer och Piledriver 2012. [1] [2] .
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:
- VFMADDSUB - multiplikation och alternerande addition och subtraktion (subtraktion på jämna positioner, addition - på udda);
- VFMSUBADD - multiplikation och alternerande subtraktion och addition (addition på jämna positioner, subtraktion - på udda);
- VFNMADD - multiplikation tagen med motsatt tecken och addition;
- VFNMSUB - multiplikation tagen med motsatt tecken och subtraktion.
FMA4
Processorer med FMA4-stöd
- AMD
- AMD implementerade först FMA4-stöd i Bulldozer-arkitekturprocessorerna, som introducerades i oktober 2011 [3] , och Piledriver-arkitekturen stöder även FMA4 [4] .
- Från och med Zen-mikroarkitekturen (2017, Ryzen , EPYC-märken) slutade AMD stödja FMA4 [5] [6]
- Intel
- Från och med 2013 stöder inte Intel-processorer FMA4, och det är okänt om Intel kommer att stödja FMA4 i framtiden.
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:
- NASM fick stöd för FMA3 i version 2.03 och FMA4 i version 2.06.
- YAsm stöder FMA3 och FMA4 sedan version 1.1.0.
- FASM stöder både FMA3 och FMA4.
Se även
Anteckningar
- ↑ Att hitta en balans . Dave Christie, AMD-utvecklarbloggar (7 maj 2009). Hämtad: 8 maj 2009. (obestämd) (inte tillgänglig länk)
- ↑ Maffeo, Robin AMD och Visual Studio 11 Beta . AMD. Hämtad: 8 december 2013. (obestämd) (otillgänglig länk)
- ↑ 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.
- ↑ 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.
- ↑ [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."
- ↑ [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]
- ↑ GCC 4.5 är ute (nedlänk) . Hämtad 7 december 2013. Arkiverad från originalet 13 december 2013. (obestämd)
- ↑ Inbäddade FMA4-objekt har lagts till i Visual Studio 2010 SP1 . Hämtad 7 december 2013. Arkiverad från originalet 16 december 2013. (obestämd)
- ↑ Nytt i x86 Open64 Compiler Suite v4.5.2 . Arkiverad från originalet den 13 november 2013. (obestämd)
Länkar