Sada instrukcí FMA - FMA instruction set
The Sada instrukcí FMA je rozšíření 128 a 256 bitů Streamování rozšíření SIMD pokyny v x86 mikroprocesor instrukční sada vystupovat fúzované násobení – přidání (FMA) operace.[1] Existují dvě varianty:
- FMA4 je podporováno v AMD procesory začínající na Buldozer architektura. FMA4 byl proveden v hardwaru před FMA3. Podpora pro FMA4 byla od té doby odstraněna Zen 1.
- FMA3 je podporován procesory AMD počínaje Piledriver architektura a Intel začínání s Procesory Haswell a Broadwell procesory od roku 2014.
Instrukce
Pokyny FMA3 a FMA4 mají téměř identické funkce, ale nejsou kompatibilní. Oba obsahují fúzované násobení – přidání (FMA) pokyny pro plovoucí bod skalární a SIMD operace, ale instrukce FMA3 mají tři operandy, zatímco ty FMA4 mají čtyři. Operace FMA má formu d = kulatý (A · b + C), kde funkce round provádí a zaokrouhlování umožnit, aby se výsledek vešel do cílového registru, pokud existuje příliš mnoho významných bitů, aby se vešel do cíle.
Formulář se čtyřmi operandy (FMA4) umožňuje A, b, C a d být čtyřmi různými registry, zatímco formulář se třemi operandy (FMA3) to vyžaduje d být stejný registr jako A, b nebo C. Formulář se třemi operandy kód zkracuje a implementace hardwaru je o něco jednodušší, zatímco formulář se čtyřmi operandy poskytuje větší flexibilitu programování.
Vidět Sada instrukcí XOP pro další diskuzi o problémech s kompatibilitou mezi Intel a AMD.
Sada instrukcí FMA3
CPU s FMA3
- AMD
- Piledriver (2012) a novější mikroarchitektury[2]
- APU 2. gen., „Trojice“ (32 nm), 15. května 2012
- „Buldozer“ 2. generace (bdver2) s Jádra pilota, 23. října 2012
- Piledriver (2012) a novější mikroarchitektury[2]
- Intel
- Všechno Haswell (2013) a novější implementace hardwaru
Výňatek z FMA3
Mezi podporované příkazy patří VFMADD, VFMADDSUB, VFMSUBADD, VFMSUB, VFNMADD, VFNMSUB. Explicitní pořadí operandů je zahrnuto do mnemotechnické pomůcky pomocí čísel „132“, „213“ a „231“, stejně jako formát operandu (zabalený nebo skalární) a velikost (jednoduchá nebo dvojitá).
Mnemotechnická pomůcka (AT&T) | Operandy | Úkon |
---|---|---|
VFMADD132PDy | ymm, ymm, ymm / m256 | a = a · c + b |
VFMADD132PSy | ||
VFMADD132PDx | xmm, xmm, xmm / m128 | |
VFMADD132PSx | ||
VFMADD132SD | xmm, xmm, xmm / m64 | |
VFMADD132SS | xmm, xmm, xmm / m32 | |
VFMADD213PDy | ymm, ymm, ymm / m256 | a = b · a + c |
VFMADD213PSy | ||
VFMADD213PDx | xmm, xmm, xmm / m128 | |
VFMADD213PSx | ||
VFMADD213SD | xmm, xmm, xmm / m64 | |
VFMADD213SS | xmm, xmm, xmm / m32 | |
VFMADD231PDy | ymm, ymm, ymm / m256 | a = b · c + a |
VFMADD231PSy | ||
VFMADD231PDx | xmm, xmm, xmm / m128 | |
VFMADD231PSx | ||
VFMADD231SD | xmm, xmm, xmm / m64 | |
VFMADD231SS | xmm, xmm, xmm / m32 |
Sada instrukcí FMA4
CPU s FMA4
- AMD
- Procesory „Heavy Equipment“
- Buldozer procesory, 12. října 2011[3]
- Na základě pilota procesory[4]
- Na bázi parního válce procesory
- Na základě rypadla procesory (včetně „v2“)
- Zen: Testování WikiChipu ukazuje, že FMA4 stále funguje (za podmínek testů), přestože není oficiálně podporován a není ani hlášen CPUID. To také potvrdil Agner.[5] Jiné testy však přinesly špatné výsledky.[6] Oficiální web AMD FMA4 Podpora Poznámka ZEN CPU = AMD ThreadRipper 1900x, R7 Pro 1800, 1700, R5 Pro 1600, 1500, R3 Pro 1300, 1200, R3 2200G, R5 2400G.[7][8][9]
- Procesory „Heavy Equipment“
- Intel
- Není jisté, zda budoucí procesory Intel budou podporovat FMA4 kvůli oznámené změně Intel na FMA3.
Výňatek z FMA4
Mnemotechnická pomůcka (AT&T) | 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 |
Dějiny
Nekompatibilita mezi Intel FMA3 a AMD FMA4 je způsobena tím, že obě společnosti mění plány, aniž by navzájem koordinovaly podrobnosti kódování. AMD změnilo své plány z FMA3 na FMA4, zatímco Intel změnil své plány z FMA4 na FMA3 téměř ve stejnou dobu. Historie může být shrnuta následovně:
- Srpen 2007: AMD oznamuje SSE5 sada instrukcí, která obsahuje instrukce FMA se 3 operandy. Je zavedeno nové kódovací schéma (DREX), které umožňuje instrukcím mít tři operandy.[10]
- Duben 2008: Intel oznamuje své AVX a instrukční sady FMA, včetně instrukcí FMA se 4 operandy. Kódování těchto pokynů používá nové VEX kódovací schéma,[11] což je flexibilnější než schéma AMD DREX.
- Prosinec 2008: Intel mění specifikaci svých instrukcí FMA ze 4-operandových na 3-operandové instrukce. Schéma kódování VEX se stále používá.[12]
- Květen 2009: AMD mění specifikaci svých instrukcí FMA z formy DREX o 3 operandech na formu VEX se 4 operandy, která je kompatibilní spíše se specifikací Intel z dubna 2008 než se specifikací Intel z prosince 2008.[13]
- Říjen 2011: AMD Buldozer procesor podporuje FMA4.[14]
- Leden 2012: AMD oznamuje podporu FMA3 v budoucích procesorech s kódovým označením Trojice a Vishera; jsou založeny na architektuře Piledriver.[15]
- Květen 2012: AMD Piledriver procesor podporuje jak FMA3, tak FMA4.[14]
- Červen 2013: Intel Haswell procesor podporuje FMA3.[16]
- Února 2017 První generace AMD Ryzen procesory oficiálně podporuje FMA3, ale ne FMA4 podle CPUID návod.[17] Došlo k nejasnostem ohledně toho, zda byl na tomto procesoru implementován FMA4 či nikoli, a to kvůli chybám v původní aktualizaci GNU Binutils balíček, který byl od té doby opraven.[18][19] Zatímco se zdá, že pokyny FMA4 fungují podle některých testů, mohou také poskytovat nesprávné výsledky.[6] Počáteční procesory Ryzen by navíc mohly být zhrouceny určitou posloupností pokynů FMA3. Od té doby byl vyřešen aktualizovaným mikrokódem CPU.[20]
Podpora kompilátorů a assemblerů
Různé překladače poskytují různé úrovně podpory pro FMA:
- GCC podporuje FMA4 s -mfma4 od verze 4.5.0[21] a FMA3 s -mfma od verze 4.7.0.
- Microsoft Visual C ++ 2010 SP1 podporuje pokyny FMA4.[22]
- Microsoft Visual C ++ 2012 podporuje instrukce FMA3 (pokud procesor podporuje také rozšíření sady instrukcí AVX2).
- Microsoft Visual C ++ od VC 2013
- PathScale podporuje FMA4 s -mfma.[23]
- LLVM 3.1 přidává podporu FMA4,[24] spolu s předběžnou podporou FMA3.[25]
- Open64 5.0 přidává „omezenou podporu“.
- Překladače Intel podporují pouze pokyny FMA3.[21]
- NASM podporuje pokyny FMA3 od verze 2.03 a pokyny FMA4 od 2.06.
- Yasm podporuje pokyny FMA3 od verze 0.8.0 a pokyny FMA4 od verze 1.0.0.
- FASM podporuje instrukce FMA3 i FMA4.
Reference
- ^ „FMA3 a FMA4 nejsou instrukční sady, jsou to jednotlivé instrukce - fused multiply add. Mohly by být docela užitečné v závislosti na tom, jak je Intel a AMD implementují“ Woltmann, George (Prime95). „Intel AVX a GIMPS“. mersenneforum.org/index.php. Skvělý projekt Mersenne Prime Search (GIMPS). Citováno 27. července 2011.
- ^ Maffeo, Robin (1. března 2012). „AMD a Visual Studio 11 Beta“. AMD. Archivovány od originál 9. listopadu 2013. Citováno 2018-11-07.
- ^ „AMD64 Architecture Programmer's Manual Volume 6: 128-Bit and 256-Bit XOP, FMA4 and CVT16 Instructions“ (PDF). AMD. 1. května 2009.
- ^ „Nové pokyny„ Buldozer “a„ Piledriver “Krok vpřed pro vývoj vysoce výkonného softwaru“ (PDF). AMD. Říjen 2012.
- ^ http://agner.org/optimize/blog/read.php?i=838
- ^ A b „Diskuse - Ryzen má nezdokumentovanou podporu pro FMA4“. Citováno 2017-05-10.
- ^ „www.amd.com, seznam modelů podpory FMA4“. Citovat má prázdný neznámý parametr:
|1=
(Pomoc) - ^ „www.amd.com, seznam modelů podpory FMA4“. Citovat má prázdný neznámý parametr:
|1=
(Pomoc) - ^ „www.amd.com, seznam modelů podpory FMA4“. Citovat má prázdný neznámý parametr:
|1=
(Pomoc) - ^ „128bitová instrukční sada SSE5“. AMD Developer Central. Archivovány od originál dne 2008-01-15. Citováno 2008-01-28.
- ^ „Intel Advanced Vector Extensions Programming Reference“ (PDF). Intel. Citováno 2008-04-05.[trvalý mrtvý odkaz ]
- ^ „Intel Advanced Vector Extensions Programming Reference“. Intel. Citováno 2009-05-06.
- ^ „Dosažení rovnováhy“. Dave Christie, blogy vývojářů AMD. 6. května 2009. Archivovány od originál 8. července 2012. Citováno 2018-11-07.
- ^ A b „Nové pokyny pro buldozer a piledriver“ (PDF). AMD. Citováno 25. července 2013.
- ^ „Průvodce optimalizací softwaru pro procesory AMD Family 15h“ (PDF). AMD. Citováno 19. dubna 2012.
- ^ „Referenční příručka k programování rozšíření architektury Intel“ (PDF). Intel. Citováno 25. července 2013.
- ^ „Mikroarchitektura procesorů Intel, AMD a VIA Průvodce optimalizací pro programátory sestavení a výrobce kompilátorů“ (PDF). Citováno 2017-05-02.
- ^ https://sourceware.org/ml/binutils/2015-03/msg00078.html
- ^ https://sourceware.org/ml/binutils/2015-08/msg00039.html
- ^ „Stroj AMD Ryzen spadl do posloupnosti pokynů FMA3“. Citováno 2017-09-10.
- ^ A b Latif, Lawrence (14. listopadu 2011). „AMD Bulldozer podporuje pouze pokyny FMA4 a XOP, které GCC Intel stále umlčuje“. Tazatel.
- ^ „FMA4 Intrinsics added for Visual Studio 2010 SP1“.
- ^ „EKOPath man doc“. Archivovány od originál dne 2016-06-23. Citováno 2013-07-24.
- ^ „Poznámky k verzi LLVM 3.1“.
- ^ „Povolit detekci podpory AVX a AVX2 prostřednictvím CPUID“. LLVM. 2012-04-26.