FMA
Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. július 15-én felülvizsgált
verziótól ; az ellenőrzések 6 szerkesztést igényelnek .
Az FMA ( angol. Fused Multiply-Add , szorzás-összeadás egyszeri kerekítéssel) opcionális 128 és 256 bites SIMD utasítások készlete x86 és x86-64 architektúrákhoz , amelyeket arra terveztek, hogy szorzás-összeadás műveleteket hajtsanak végre számokon lebegőben. pont formátum . vessző.
Két lehetőség közül választhat az FMA utasításokat tartalmazó bővítményekhez:
- Az FMA4 -et a Bulldozer architektúra óta az AMD processzorok támogatják . Az FMA4-et az FMA3 előtt implementálták, de az AMD ezt követően megszüntette a bővítmény támogatását. Ez azért vált kivitelezhetetlenné, mert az Intel nem valósította meg az FMA4-et a processzoraiban.
- Az FMA3-at a Haswell architektúra óta az Intel processzorok , a Piledriver architektúra óta pedig az AMD processzorok támogatják .
Jellemzők
Az FMA3 és az FMA4 utasítások funkciója szinte azonos, de nem kompatibilisek. Mindkettő SIMD szorzási utasítást tartalmaz a lebegőpontos számokhoz. A fordítóprogramokban való támogatásuk eltart egy ideig.
Kompatibilitási probléma
Az FMA3 és az FMA4 közötti különbség az, hogy az utasításnak hány különböző operandusa van – 3 vagy 4. Az FMA művelet a következő:
A 4 operandusos forma (FMA4) lehetővé teszi, hogy a, b, c és d különböző regiszterekben legyen, míg a 3 operandusos forma (FMA3) megköveteli, hogy d ugyanabban a regiszterben legyen, mint a, b vagy c. A 3 operandusos forma rövidebbé teszi a kódot és könnyebben megvalósítható hardverben, míg a 4 operandusos forma nagyobb programozási rugalmasságot biztosít.
FMA3
Processzorok FMA3 támogatással
- Intel
- Az Intel 2013-ban vezette be az FMA3 hardveres megvalósítását a Haswell architektúrán alapuló processzorokban.
- AMD
- Az AMD processzorok 2012-ben megkapták az FMA3 támogatást a Bulldozer és a Piledriver architektúrákban. [1] [2] .
Új FMA3 utasítások
Utasítás
|
operandusok
|
Művelet
|
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
|
A táblázatban felsorolt fő utasításokon kívül az FMA3 kiterjesztés számos utasítást tartalmaz, amelyek a következő csoportokhoz tartoznak:
- VFMADDSUB - szorzás és váltakozó összeadás és kivonás (kivonás páros pozíciókon, összeadás - páratlanokon);
- VFMSUBADD - szorzás és váltakozó kivonás és összeadás (összeadás páros helyeken, kivonás - páratlanokon);
- VFNMADD - szorzás ellentétes előjellel és összeadással;
- VFNMSUB - szorzás ellentétes előjellel és kivonással.
FMA4
Processzorok FMA4 támogatással
- AMD
- Az AMD először a Bulldozer architektúra processzoraiban valósította meg az FMA4 támogatást, amelyeket 2011 októberében vezettek be [3] , és a Piledriver architektúra is támogatja az FMA4-et [4] .
- A Zen mikroarchitektúrától kezdve (2017, Ryzen , EPYC márkák) az AMD leállította az FMA4 támogatását [5] [6]
- Intel
- 2013-ban az Intel processzorai nem támogatják az FMA4-et, és nem tudni, hogy az Intel a jövőben támogatja-e az FMA4-et.
Új FMA4 utasítások
Utasítás
|
operandusok
|
Művelet
|
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
|
Történelem
Az Intel FMA3 és az AMD FMA4 közötti inkompatibilitás annak tudható be, hogy mindkét cég úgy változtatta meg tervét, hogy nem állapodott meg egymással a kódolás részleteiről. Az AMD FMA3-ról FMA4-re, míg az Intel FMA4-ről FMA3-ra változtatta terveit, ezzel szinte egy időben.
Fordító támogatás
A különböző fordítók különböző szintű FMA-támogatást kínálnak.
Támogatás összeszerelőknél:
- A NASM megkapta az FMA3 támogatását a 2.03-as verzióban és az FMA4-et a 2.06-os verzióban.
- A Yasm az 1.1.0-s verzió óta támogatja az FMA3-at és az FMA4-et.
- A FASM támogatja az FMA3-at és az FMA4-et is.
Lásd még
Jegyzetek
- ↑ Az egyensúly megteremtése . Dave Christie, AMD fejlesztői blogok (2009. május 7.). Letöltve: 2009. május 8. (határozatlan) (nem elérhető link)
- ↑ Maffeo, Robin AMD és a Visual Studio 11 Beta . AMD. Letöltve: 2013. december 8. (határozatlan) (elérhetetlen link)
- ↑ AMD64 architektúra programozói útmutató. 6. kötet. 128 bites és 256 bites XOP, FMA4 és CVT16 utasítások . AMD (2009. május 1.). Letöltve: 2013. december 7. Az eredetiből archiválva : 2009. május 20..
- ↑ Új utasítások a "Bulldozer" és a "Piledriver"-ben. Egy lépés előre a nagy teljesítményű szoftverfejlesztésben . AMD (2012. október). Hozzáférés dátuma: 2013. december 7. Az eredetiből archiválva : 2013. január 7.
- ↑ [1] 2017. szeptember 14-én archiválva a Wayback Machine -nél "De mivel a Zen egy tiszta lapos kialakítás, a Bulldozer processzorokban néhány utasításkészlet-bővítés található, amelyek nem találhatók meg a Zen/znver1-ben. A már nem jelenlevők közé tartozik az FMA4 és az XOP."
- ↑ [https://web.archive.org/web/20160304033017/https://sourceware.org/ml/binutils/2015-03/msg00078.html Archiválva : 2016. március 4., a Wayback Machine Gopalasubramanian, G - [PATCH ]znver1 processzor hozzáadása]
- ↑ A GCC 4.5 nem elérhető (lefelé irányuló kapcsolat) . Letöltve: 2013. december 7. Az eredetiből archiválva : 2013. december 13.. (határozatlan)
- ↑ Beágyazott FMA4 objektumok hozzáadva a Visual Studio 2010 SP1-hez . Letöltve: 2013. december 7. Az eredetiből archiválva : 2013. december 16.. (határozatlan)
- ↑ Újdonság az x86 Open64 Compiler Suite v4.5.2-ben . Az eredetiből archiválva : 2013. november 13. (határozatlan)
Linkek