FMA
Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 15. heinäkuuta 2021 tarkistetusta
versiosta . tarkastukset vaativat
6 muokkausta .
FMA ( eng. Fused Multiply-Add , kertolasku yhdellä pyöristyksellä) on joukko valinnaisia 128- ja 256-bittisiä SIMD - käskyjä x86- ja x86-64-arkkitehtuureille , jotka on suunniteltu suorittamaan kertolasku- ja yhteenlaskutoiminto numeroille kelluvassa pistemuoto . pilkku.
Laajennuksille, jotka lisäävät FMA-ohjeet, on kaksi vaihtoehtoa:
- AMD -prosessorit ovat tukeneet FMA4 :ää Bulldozer -arkkitehtuurista lähtien . FMA4 otettiin käyttöön ennen FMA3:a, mutta myöhemmin AMD lopetti tämän laajennuksen tuen. Tästä tuli epäkäytännöllistä, koska Intel ei ottanut FMA4:ää prosessoreihinsa.
- FMA3 :a tukevat Intel-prosessorit Haswell -arkkitehtuurista lähtien ja AMD-prosessorit Piledriver -arkkitehtuurista lähtien .
Ominaisuudet
FMA3- ja FMA4-käskyillä on lähes identtiset toiminnot, mutta ne eivät ole yhteensopivia. Molemmat sisältävät SIMD-kerroinlaskuohjeet liukulukuille. Niiden tukeminen kääntäjissä kestää jonkin aikaa.
Yhteensopivuusongelma
FMA3:n ja FMA4:n ero on siinä, kuinka monta eri operandia käskyllä on - 3 tai 4. FMA-toiminto on:
4-operandin muoto (FMA4) sallii a:n, b:n, c:n ja d:n olevan eri rekistereissä, kun taas 3-operandin muoto (FMA3) edellyttää, että d on jossakin samoista rekistereistä kuin a, b tai c. 3 operandin muoto tekee koodista lyhyemmän ja helpommin toteutettavan laitteistossa, kun taas 4 operandin muoto tarjoaa enemmän ohjelmointijoustavuutta.
FMA3
Prosessorit FMA3-tuella
- Intel
- Intel esitteli FMA3:n laitteistototeutuksen Haswell-arkkitehtuuriin perustuvissa prosessoreissa vuonna 2013.
- AMD
- AMD-prosessorit saivat FMA3-tuen Bulldozer- ja Piledriver-arkkitehtuureissa vuonna 2012. [1] [2] .
Uudet FMA3-ohjeet
Ohje
|
operandit
|
Operaatio
|
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
|
Taulukossa lueteltujen pääohjeiden lisäksi FMA3-laajennus sisältää joukon ohjeita, jotka kuuluvat seuraaviin ryhmiin:
- VFMADDSUB - kertolasku ja vuorotteleva yhteen- ja vähennyslasku (vähennys parillisissa paikoissa, yhteenlasku - parittomissa paikoissa);
- VFMSUBADD - kertolasku ja vuorotteleva vähennys- ja yhteenlasku (yhteenlasku parillisissa paikoissa, vähennys - parittomissa);
- VFNMADD - kertolasku päinvastaisella merkillä ja yhteenlaskolla;
- VFNMSUB - kertolasku vastakkaisella merkillä ja vähennyksellä.
FMA4
Prosessorit FMA4-tuella
- AMD
- AMD otti ensimmäisen kerran käyttöön FMA4-tuen Bulldozer-arkkitehtuuriprosessoreissa, jotka esiteltiin lokakuussa 2011 [3] , ja Piledriver-arkkitehtuuri tukee myös FMA4:ää [4] .
- Zen-mikroarkkitehtuurista lähtien (2017, Ryzen , EPYC-merkit) AMD lopetti FMA4:n tuen [5] [6]
- Intel
- Vuodesta 2013 lähtien Intel-prosessorit eivät tue FMA4:ää, eikä ole tiedossa, tukeeko Intel FMA4:ää tulevaisuudessa.
Uudet FMA4-ohjeet
Ohje
|
operandit
|
Operaatio
|
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
|
Historia
Intelin FMA3:n ja AMD:n FMA4:n välinen yhteensopimattomuus johtuu siitä, että molemmat yhtiöt muuttivat suunnitelmiaan sopimatta keskenään koodausyksityiskohdista. AMD muutti suunnitelmansa FMA3:sta FMA4:ään, kun taas Intel muutti suunnitelmansa FMA4:stä FMA3:een, lähes samaan aikaan.
Kääntäjän tuki
Eri kääntäjät tarjoavat eri tasoisia FMA-tukea.
Tuki kokoajissa:
- NASM sai tuen FMA3:lle versiossa 2.03 ja FMA4:lle versiossa 2.06.
- Yasm tukee FMA3:a ja FMA4:ää versiosta 1.1.0 lähtien.
- FASM tukee sekä FMA3:a että FMA4:ää.
Katso myös
Muistiinpanot
- ↑ Tasapainon löytäminen . Dave Christie, AMD:n kehittäjäblogit (7. toukokuuta 2009). Haettu: 8. toukokuuta 2009. (määrätön) (linkki ei saatavilla)
- ↑ Maffeo, Robin AMD ja Visual Studio 11 Beta . AMD. Haettu: 8. joulukuuta 2013. (määrätön) (linkki, jota ei voi käyttää)
- ↑ AMD64-arkkitehtuuriohjelmoijan opas. Volume 6. 128- ja 256-bittinen XOP-, FMA4- ja CVT16- ohjeet . AMD (1. toukokuuta 2009). Haettu 7. joulukuuta 2013. Arkistoitu alkuperäisestä 20. toukokuuta 2009.
- ↑ Uudet ohjeet "Bulldozer" ja "Piledriver". Askel eteenpäin korkean suorituskyvyn ohjelmistokehityksessä . AMD (lokakuu 2012). Käyttöpäivä: 7. joulukuuta 2013. Arkistoitu alkuperäisestä 7. tammikuuta 2013.
- ↑ [1] Arkistoitu 14. syyskuuta 2017 Wayback Machinessa "Mutta koska Zen on puhtaan arkin suunnittelu, Bulldozer-prosessoreista löytyy joitain ohjesarjalaajennuksia, joita ei löydy Zen/znver1:stä. Niitä, joita ei enää ole, ovat FMA4 ja XOP."
- ↑ [https://web.archive.org/web/20160304033017/https://sourceware.org/ml/binutils/2015-03/msg00078.html Arkistoitu 4. maaliskuuta 2016 Wayback Machinessa Gopalasubramanian, G - [PATCH ]lisää znver1-prosessori]
- ↑ GCC 4.5 on poissa (downlink) . Haettu 7. joulukuuta 2013. Arkistoitu alkuperäisestä 13. joulukuuta 2013. (määrätön)
- ↑ Upotetut FMA4-objektit lisätty Visual Studio 2010 SP1:een . Haettu 7. joulukuuta 2013. Arkistoitu alkuperäisestä 16. joulukuuta 2013. (määrätön)
- ↑ Uutta x86 Open64 Compiler Suite -versiossa 4.5.2 . Arkistoitu alkuperäisestä 13. marraskuuta 2013. (määrätön)
Linkit