FMA
Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od
verze recenzované 15. července 2021; kontroly vyžadují
6 úprav .
FMA ( anglicky Fused Multiply-Add , násobení-sčítání s jednoduchým zaokrouhlením) je sada volitelných 128- a 256-bitových instrukcí SIMD pro architektury x86 a x86-64 , navržená k provádění operace násobení-sčítání na číslech v plovoucích- formát bodu, čárka.
Existují dvě možnosti pro rozšíření, která přidávají pokyny FMA:
- FMA4 je podporován procesory AMD již od architektury Bulldozer . FMA4 byl implementován před FMA3, ale AMD následně podporu tohoto rozšíření upustila. To se stalo nepraktickým, protože Intel do svých procesorů neimplementoval FMA4.
- FMA3 je podporován procesory Intel od architektury Haswell a procesory AMD od architektury Piledriver .
Funkce
Instrukce FMA3 a FMA4 mají téměř totožné funkce, ale nejsou kompatibilní. Oba obsahují instrukce SIMD multiply-add pro čísla s plovoucí desetinnou čárkou. Jejich podpora v kompilátorech bude nějakou dobu trvat.
Problém s kompatibilitou
Rozdíl mezi FMA3 a FMA4 je v tom, kolik různých operandů má instrukce - 3 nebo 4. Operace FMA je:
Forma 4 operandů (FMA4) umožňuje, aby a, b, c a d byly v různých registrech, zatímco forma se 3 operandy (FMA3) vyžaduje, aby d bylo v jednom ze stejných registrů jako a, b nebo c. Forma 3 operandů činí kód kratší a snadněji implementovatelný v hardwaru, zatímco forma 4 operandů poskytuje větší flexibilitu programování.
FMA3
Procesory s podporou FMA3
- Intel
- Intel představil hardwarovou implementaci FMA3 v procesorech založených na architektuře Haswell v roce 2013.
- AMD
- Procesory AMD získaly podporu FMA3 v architektuře Bulldozer a Piledriver v roce 2012. [1] [2] .
Nové instrukce FMA3
Návod
|
operandy
|
Úkon
|
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
|
Kromě hlavních instrukcí uvedených v tabulce obsahuje rozšíření FMA3 řadu instrukcí, které patří do následujících skupin:
- VFMADDSUB - násobení a střídavé sčítání a odčítání (odčítání na sudých pozicích, sčítání - na lichých);
- VFMSUBADD - násobení a střídavé odčítání a sčítání (sčítání na sudých pozicích, odčítání - na lichých);
- VFNMADD - násobení s opačným znaménkem a sčítáním;
- VFNMSUB - násobení s opačným znaménkem a odečítání.
FMA4
Procesory s podporou FMA4
- AMD
- AMD poprvé implementovalo podporu FMA4 v procesorech architektury Bulldozer, které byly představeny v říjnu 2011 [3] , a architektura Piledriver také podporuje FMA4 [4] .
- Počínaje mikroarchitekturou Zen (2017, značky Ryzen , EPYC) přestala AMD podporovat FMA4 [5] [6]
- Intel
- Od roku 2013 procesory Intel nepodporují FMA4 a není známo, zda Intel bude podporovat FMA4 v budoucnu.
Nové instrukce FMA4
Návod
|
operandy
|
Úkon
|
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
Nekompatibilita mezi FMA3 od Intelu a FMA4 od AMD je způsobena tím, že obě společnosti mění své plány, aniž by se vzájemně dohodly na detailech kódování. AMD změnilo plány z FMA3 na FMA4, zatímco Intel změnil plány z FMA4 na FMA3, téměř ve stejnou dobu.
Podpora kompilátoru
Různé kompilátory nabízejí různé úrovně podpory FMA.
Podpora v assembleru:
- NASM obdržel podporu pro FMA3 ve verzi 2.03 a FMA4 ve verzi 2.06.
- YAsm podporuje FMA3 a FMA4 od verze 1.1.0.
- FASM podporuje FMA3 i FMA4.
Viz také
Poznámky
- ↑ Dosažení rovnováhy . Dave Christie, blogy AMD Developer (7. května 2009). Staženo: 8. května 2009. (neurčitý) (nedostupný odkaz)
- ↑ Maffeo, Robin AMD a Visual Studio 11 Beta . AMD. Staženo: 8. prosince 2013. (neurčitý) (nepřístupný odkaz)
- ↑ AMD64 Architecture Programmer's Guide. Svazek 6. 128bitové a 256bitové instrukce XOP, FMA4 a CVT16 . AMD (1. května 2009). Získáno 7. prosince 2013. Archivováno z originálu 20. května 2009.
- ↑ Nové pokyny v "Bulldozer" a "Piledriver". Krok vpřed ve vývoji vysoce výkonného softwaru . AMD (říjen 2012). Datum přístupu: 7. prosince 2013. Archivováno z originálu 7. ledna 2013.
- ↑ [1] Archivováno 14. září 2017 na Wayback Machine "Ale vzhledem k tomu, že Zen je design s čistým listem, existují některá rozšíření instrukční sady nalezená v procesorech Bulldozer, která se nenacházejí v Zen/znver1. Mezi ty, které již nejsou přítomny, patří FMA4 a XOP."
- ↑ [https://web.archive.org/web/20160304033017/https://sourceware.org/ml/binutils/2015-03/msg00078.html Archivováno 4. března 2016 na Wayback Machine Gopalasubramanian, G - [PATCH ]přidat procesor znver1]
- ↑ GCC 4.5 je venku (downlink) . Získáno 7. prosince 2013. Archivováno z originálu 13. prosince 2013. (neurčitý)
- ↑ Vložené objekty FMA4 přidané do sady Visual Studio 2010 SP1 . Získáno 7. prosince 2013. Archivováno z originálu 16. prosince 2013. (neurčitý)
- ↑ Novinka v x86 Open64 Compiler Suite v4.5.2 . Archivováno z originálu 13. listopadu 2013. (neurčitý)
Odkazy