Násobit – akumulovat provoz - Multiply–accumulate operation
v výpočetní, zvláště zpracování digitálních signálů, operace násobení – akumulace je běžný krok, který spočítá součin dvou čísel a přidá tento součin k akumulátor. Hardwarová jednotka, která provádí operaci, se nazývá a multiplikátor – akumulátor (MACnebo Jednotka MAC); samotná operace se také často nazývá MAC nebo MAC operace. Operace MAC upravuje akumulátor A:
Po dokončení s plovoucí bod čísla, může to být provedeno dvěma zaokrouhlování (typické pro mnoho DSP ), nebo s jediným zaokrouhlením. Pokud se provádí s jedním zaokrouhlením, nazývá se to fúzované násobení – přidání (FMA) nebo fúzované násobení – akumulace (FMAC).
Moderní počítače mohou obsahovat vyhrazený MAC, skládající se z multiplikátoru implementovaného v kombinační logika následuje zmije a registr akumulátoru, který ukládá výsledek. Výstup z registru je přiváděn zpět na jeden vstup sčítače, takže v každém taktu je výstup multiplikátoru přidán do registru. Kombinované multiplikátory vyžadují velké množství logiky, ale mohou vypočítat produkt mnohem rychleji než způsob řazení a přidávání typické pro dřívější počítače. Percy Ludgate jako první vytvořil MAC ve svém Analytickém stroji z roku 1909,[1] a první, kdo využil MAC pro dělení (pomocí multiplikace nasazené recipročně, pomocí konvergentní řady (1+X)−1). První moderní procesory vybavené jednotkami MAC byly procesory digitálního signálu, ale tato technika je nyní běžná i u univerzálních procesorů.
V aritmetice s plovoucí desetinnou čárkou
Po dokončení s celá čísla, operace je obvykle přesná (vypočítaná modulo nějaký síla dvou ). Nicméně, plovoucí bod čísla mají pouze určité množství matematických přesnost. To znamená, že digitální aritmetika s plovoucí desetinnou čárkou obecně není asociativní nebo distribuční. (Vidět Plovoucí bod § Problémy s přesností.) Proto na výsledku záleží, ať už se multiply-add provádí se dvěma zaokrouhlováním, nebo v jedné operaci s jedním zaokrouhlováním (fused multiply-add). IEEE 754-2008 určuje, že musí být provedeno s jedním zaokrouhlením, čímž se získá přesnější výsledek.[2]
Fúzované násobení - přidání
A fúzované násobení – přidání (FMA nebo fmadd)[3]je operace násobení a plovoucí desetinné čárky prováděná v jednom kroku s jediným zaokrouhlením. To znamená, že pokud by produkt bez funkce spočítal neomezený násobek b×C, zaokrouhlit na N významné bity, přidejte výsledek k Aa zaokrouhlit zpět na N významné bity, fúzovaný multiply – add spočítá celý výraz A+b×C před zaokrouhlením konečného výsledku na N významné bity.
Rychlá FMA může zrychlit a zlepšit přesnost mnoha výpočtů, které zahrnují akumulaci produktů:
- Tečkovaný produkt
- Násobení matic
- Polynomiální hodnocení (např. s Hornerovo pravidlo )
- Newtonova metoda pro vyhodnocení funkcí (z inverzní funkce)
- Závity a umělé neuronové sítě
Na tavené vícenásobné přidání lze obvykle spolehnout, že získáte přesnější výsledky. Nicméně, William Kahan poukázal na to, že může způsobit problémy, pokud se použije bezmyšlenkovitě.[4] Li X2 − y2 je hodnocena jako ((X×X) − y×y) pomocí fused multiply – add pak může být výsledek záporný, i když X = y kvůli prvnímu násobení vyřazování bitů s nízkou významností. To by pak mohlo vést k chybě, kdyby se například vyhodnotila druhá odmocnina výsledku.
Při implementaci uvnitř a mikroprocesor, FMA může být rychlejší než operace násobení následovaná přidáním. Standardní průmyslové implementace založené na původním návrhu IBM RS / 6000 však vyžadují 2N-bitový sčítač, aby správně vypočítal částku.[5]
Další užitečnou výhodou zahrnutí této instrukce je, že umožňuje efektivní softwarovou implementaci divize (vidět algoritmus dělení ) a odmocnina (vidět metody výpočtu druhé odmocniny ) operace, čímž se eliminuje potřeba vyhrazeného hardwaru pro tyto operace.[6]
Pokyny k produktu Dot
Některé stroje kombinují operace s vícenásobným přidáním do jednoho kroku, např. provedení čtyřprvkového tečkového produktu na dvou 128bitových SIMD registry a0 × b0 + a1 × b1 + a2 × b2 + a3 × b3
s propustností jednoho cyklu.
Podpěra, podpora
Operace FMA je součástí IEEE 754-2008.
The Digital Equipment Corporation (DEC) VAX je POLY
instrukce se používá pro vyhodnocení polynomů s Hornerovo pravidlo pomocí řady násobení a přidání kroků. Popisy instrukcí nespecifikují, zda se násobení a přidávání provádí pomocí jediného kroku FMA.[7] Tato instrukce je součástí instrukční sady VAX od její původní implementace 11/780 v roce 1977.
The 1999 standard z Programovací jazyk C. podporuje operaci FMA prostřednictvím fma ()
standardní funkce matematické knihovny a standardní pragmy (#pragma STDC FP_CONTRACT
) řízení optimalizací na základě FMA.
Operace fused multiply – add byla v IBM zavedena jako „multiplikace – fused“ SÍLA 1 (1990) procesor,[8] ale od té doby byl přidán do řady dalších procesorů:
- HP PA-8000 (1996) a výše
- Hitachi SuperH SH-4 (1998)
- SCE -Toshiba Emoční motor (1999)
- Intel Itanium (2001)
- STI Buňka (2006)
- Fujitsu SPARC64 VI (2007) a výše
- (MIPS -kompatibilní) Loongson -2F (2008)[9]
- Elbrus-8SV (2018)
- x86 procesory s Sada instrukcí FMA3 a / nebo FMA4
- AMD Buldozer (Pouze 2011, FMA4)
- AMD Piledriver (2012, FMA3 a FMA4)[10]
- AMD Parní válec (2014)
- AMD Rypadlo (2015)
- AMD Zen (2017, pouze FMA3)
- Intel Haswell (2013, pouze FMA3)[11]
- Intel Skylake (2015, pouze FMA3)
- Procesory ARM s VFPv4 a / nebo NEONv2:
- ARM Cortex-M4F (2010)
- ARM Cortex-A5 (2012)
- ARM Cortex-A7 (2013)
- ARM Cortex-A15 (2012)
- Qualcomm Krait (2012)
- Apple A6 (2012)
- Všechno ARMv8 procesory
- Fujitsu A64FX má "Čtyři-operand FMA s instrukcí prefixu".
- GPU a desky GPGPU:
- Pokročilá mikro zařízení GPU (2009) a novější
- TeraScale 2 "Evergreen" -series based
- Další grafické jádro -na základě
- NVidia GPU (2010) a novější
- Intel GPU od roku Sandy Bridge
- Intel MIC (2012)
- Řada ARM Mali T600 (2012) a výše
- Pokročilá mikro zařízení GPU (2009) a novější
- Vektorové procesory:
Reference
- ^ „Proveditelnost analytického stroje Ludgate“. Archivováno z původního dne 2019-08-07. Citováno 2020-08-30.
- ^ Whitehead, Nathan; Fit-Florea, Alex (2011). „Přesnost a výkon: s plovoucí desetinnou čárkou a vyhovění IEEE 754 pro GPU NVIDIA“ (PDF). nvidia. Citováno 2013-08-31.
- ^ "instancie fmadd".
- ^ Kahan, William (1996-05-31). „Standard IEEE 754 pro binární aritmetiku s plovoucí desetinnou čárkou“.
- ^ Quinnell, Eric (květen 2007). Floating-Point Fused Multiply – Add Architectures (PDF) (Disertační práce). Citováno 2011-03-28.
- ^ Markstein, Peter (listopad 2004). Softwarová divize a druhá odmocnina pomocí Goldschmidtových algoritmů (PDF). 6. konference o reálných číslech a počítačích. CiteSeerX 10.1.1.85.9648.
- ^ „VAX instrukce týdne: POLY“. Archivovány od originál dne 2020-02-13.
- ^ Montoye, R. K .; Hokenek, E .; Runyon, S.L. (leden 1990). "Návrh IBM RISC System / 6000 jednotka s plovoucí desetinnou čárkou". IBM Journal of Research and Development. 34 (1): 59–70. doi:10.1147 / rd.341.0059.
- ^ „Godson-3 emuluje x86: Nový čínský procesor kompatibilní s MIPS má rozšíření pro překlad x86“.
- ^ Hollingsworth, Brent (říjen 2012). "Nové" pokyny "Buldozer" a "Piledriver". AMD Developer Central.
- ^ „Společnost Intel přidává do plánu návrhu CPU 22nm osmijádrový procesor„ Haswell ““. Registrace. Archivovány od originál dne 2012-03-27. Citováno 2008-08-19.