FMA
Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den
version , der blev gennemgået den 15. juli 2021; checks kræver
6 redigeringer .
FMA ( eng. Fused Multiply-Add , multiplikationsaddition med enkelt afrunding) er et sæt valgfri 128- og 256-bit SIMD - instruktioner til x86- og x86-64-arkitekturer , designet til at udføre multiplikations-additionsoperationen på tal i flydende- punktformat komma.
Der er to muligheder for udvidelser, der tilføjer FMA-instruktioner:
- FMA4 er blevet understøttet af AMD -processorer siden Bulldozer -arkitekturen . FMA4 blev implementeret før FMA3, men AMD droppede efterfølgende understøttelsen af denne udvidelse. Dette blev upraktisk, fordi Intel ikke implementerede FMA4 i deres processorer.
- FMA3 er understøttet af Intel-processorer siden Haswell- arkitekturen og af AMD-processorer siden Piledriver- arkitekturen .
Funktioner
FMA3 og FMA4 instruktionerne har næsten identisk funktionalitet, men de er ikke kompatible. Begge indeholder SIMD multiplic-add-instruktioner til flydende kommatal. Deres support i compilere vil tage noget tid.
Kompatibilitetsproblem
Forskellen mellem FMA3 og FMA4 er, hvor mange forskellige operander instruktionen har - 3 eller 4. FMA-operationen er:
4-operandformen (FMA4) tillader a, b, c og d at være i forskellige registre, mens 3-operandformen (FMA3) kræver, at d er i et af de samme registre som a, b eller c. 3 operandformen gør koden kortere og nemmere at implementere i hardware, mens 4 operandformen giver mere programmeringsfleksibilitet.
FMA3
Processorer med FMA3-understøttelse
- Intel
- Intel introducerede en hardwareimplementering af FMA3 i processorer baseret på Haswell-arkitekturen i 2013.
- AMD
- AMD-processorer modtog FMA3-understøttelse i Bulldozer- og Piledriver-arkitekturerne i 2012. [1] [2] .
Nye FMA3 instruktioner
Instruktion
|
operander
|
Operation
|
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
|
Ud over hovedinstruktionerne i tabellen indeholder FMA3-udvidelsen en række instruktioner, der tilhører følgende grupper:
- VFMADDSUB - multiplikation og alternerende addition og subtraktion (subtraktion på lige positioner, addition - på ulige);
- VFMSUBADD - multiplikation og alternerende subtraktion og addition (addition på lige positioner, subtraktion - på ulige);
- VFNMADD - multiplikation taget med det modsatte fortegn og addition;
- VFNMSUB - multiplikation taget med modsat fortegn og subtraktion.
FMA4
Processorer med FMA4-understøttelse
- AMD
- AMD implementerede først FMA4-understøttelse i Bulldozer-arkitektur-processorerne, som blev introduceret i oktober 2011 [3] , og Piledriver-arkitekturen understøtter også FMA4 [4] .
- Fra og med Zen-mikroarkitekturen (2017, Ryzen , EPYC-mærker) stoppede AMD med at understøtte FMA4 [5] [6]
- Intel
- Fra 2013 understøtter Intel-processorer ikke FMA4, og det er uvist, om Intel vil understøtte FMA4 i fremtiden.
Nye FMA4 instruktioner
Instruktion
|
operander
|
Operation
|
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
|
Historie
Inkompatibiliteten mellem Intels FMA3 og AMDs FMA4 skyldes, at begge virksomheder har ændret deres planer uden at blive enige om kodningsdetaljer med hinanden. AMD ændrede planer fra FMA3 til FMA4, mens Intel ændrede planer fra FMA4 til FMA3, næsten på samme tid.
Kompilerunderstøttelse
Forskellige compilere tilbyder forskellige niveauer af FMA-understøttelse.
Support i monterere:
- NASM modtog understøttelse af FMA3 i version 2.03 og FMA4 i version 2.06.
- YAsm understøtter FMA3 og FMA4 siden version 1.1.0.
- FASM understøtter både FMA3 og FMA4.
Se også
Noter
- ↑ At finde en balance . Dave Christie, AMD-udviklerblogs (7. maj 2009). Hentet: 8. maj 2009. (ubestemt) (ikke tilgængeligt link)
- ↑ Maffeo, Robin AMD og Visual Studio 11 Beta . AMD. Hentet: 8. december 2013. (ubestemt) (utilgængeligt link)
- ↑ AMD64 Architecture Programmer's Guide. Bind 6. 128-bit og 256-bit XOP, FMA4 og CVT16 instruktioner . AMD (1. maj 2009). Hentet 7. december 2013. Arkiveret fra originalen 20. maj 2009.
- ↑ Nye instruktioner i "Bulldozer" og "Piledriver". Et skridt fremad i højtydende softwareudvikling . AMD (oktober 2012). Dato for adgang: 7. december 2013. Arkiveret fra originalen 7. januar 2013.
- ↑ [1] Arkiveret 14. september 2017 på Wayback Machine "Men da Zen er et rent ark-design, er der nogle instruktionssætudvidelser fundet i Bulldozer-processorer, der ikke findes i Zen/znver1. De, der ikke længere er til stede, inkluderer FMA4 og XOP."
- ↑ [https://web.archive.org/web/20160304033017/https://sourceware.org/ml/binutils/2015-03/msg00078.html Arkiveret 4. marts 2016 på Wayback Machine Gopalasubramanian, G - [PATCH ]tilføj znver1-processor]
- ↑ GCC 4.5 er ude (downlink) . Hentet 7. december 2013. Arkiveret fra originalen 13. december 2013. (ubestemt)
- ↑ Indlejrede FMA4-objekter tilføjet i Visual Studio 2010 SP1 . Hentet 7. december 2013. Arkiveret fra originalen 16. december 2013. (ubestemt)
- ↑ Nyt i x86 Open64 Compiler Suite v4.5.2 . Arkiveret fra originalen den 13. november 2013. (ubestemt)
Links