Ve výpočetní technice, zejména v digitálním zpracování signálu, je multiply -accumulate běžnou operací, ve které se dvě čísla násobí a sčítají pomocí akumulátoru .
Když se operace provádí na číslech s plovoucí desetinnou čárkou , může být zaokrouhlena dvakrát (typické pro DSP ) nebo jednou zaokrouhlena (sčítání nastává s přesnějším vnitřním znázorněním součinu). Zaoblená verze se také nazývá fused multiply-add (FMA) nebo fused multiply-accumulate (FMAC).
Tato instrukce vám umožní efektivněji implementovat operace dělení a extrakce druhé odmocniny (při absenci hardwarové implementace), násobení vektorů a matic , výpočet polynomů podle Hornerova schématu .
Operace je zahrnuta ve standardu IEEE 754-2008 . Standard pro programovací jazyk C z roku 1999 zahrnuje podporu pro operaci FMA (funkce fma() z math.h ).
Moderní počítače mohou mít specializované násobení-sčítací jednotka nebo MAC (multiply-accumulate), sestávající z násobiče, který implementuje kombinační logiku , a sčítačky , stejně jako akumulátoru , ve kterém je uložen výsledek. Výstup z akumulátoru je přiveden na jeden ze vstupů sčítačky, a tak je v každém cyklu výsledek z násobiče přičten k akumulátoru. Implementace MAC vyžaduje další logiku na čipu, ale výpočty jsou rychlejší než použití metody shift-and-add , typické pro starší počítače. FMA také pracuje s vyšší přesností [1]
Operace (FMA) se objevuje na signálových procesorech a je zahrnuta v instrukčních systémech procesorů: IBM POWER1 ( anglicky , 1990), Fujitsu SPARC64 (1995), HP PA-8000 (1996), Sony Emotion Engine (1999), Intel Itanium (2001), IBM Cell (2005), Ambric (2006).
Také operace FMA je implementována v procesorech AMD s podporou FMA4 ( Bulldozer ) a FMA3 ( Trinity ) [2] . Intel implementoval FMA3 do procesorů založených na jádře Haswell . [3]
Tato technologie je přítomna v GPU řady NVIDIA GeForce 200 (GTX 200), GeForce 300 a NVIDIA Tesla GPGPU C1060 & C2050 / C2070 . [4] AMD přidalo FMA do řady Radeon s řadou HD 5000 . [5]
Instrukce FMA implementované v procesorech Intel Sandy Bridge :