En informática, especialmente en el procesamiento de señales digitales, multiplicar -acumular es una operación común en la que dos números se multiplican y se suman con un acumulador .
Cuando se realiza una operación en números de punto flotante , se puede redondear dos veces (típico de DSP ) o redondear una vez (la suma se produce con una representación interna más precisa del producto). La versión redondeada también se llama fusión de multiplicación y suma (FMA) o fusión de multiplicación y acumulación (FMAC).
Esta instrucción le permite implementar de manera más eficiente las operaciones de división y extracción de raíces cuadradas (en ausencia de implementación de hardware), multiplicación de vectores y matrices , cálculo de polinomios según el esquema de Horner .
El funcionamiento está incluido en el estándar IEEE 754-2008 . El estándar de 1999 para el lenguaje de programación C incluye soporte para la operación FMA (la función fma() de math.h ).
Las computadoras modernas pueden tener una unidad especializada de multiplicación-suma o MAC (multiplicar-acumular), que consta de un multiplicador que implementa la lógica combinacional y un sumador , así como un acumulador , en el que se almacena el resultado. La salida del acumulador se alimenta a una de las entradas del sumador y, por lo tanto, en cada ciclo, el resultado del multiplicador se suma al acumulador. La implementación de MAC requiere lógica adicional en el chip, pero los cálculos son más rápidos que usar el método shift-and-add , típico de las primeras computadoras. FMA también funciona con mayor precisión [1]
Apareciendo en los procesadores de señales, la operación (FMA) está incluida en los sistemas de instrucción de los procesadores: IBM POWER1 ( inglés , 1990), Fujitsu SPARC64 (1995), HP PA-8000 (1996), Sony Emotion Engine (1999), Intel Itanium (2001), IBM Cell (2005), Ambric (2006).
Asimismo, el funcionamiento de FMA está implementado en procesadores AMD con soporte para FMA4 ( Bulldozer ) y FMA3 ( Trinity ) [2] . Intel ha implementado FMA3 en procesadores basados en el núcleo Haswell . [3]
La tecnología está presente en las GPU de las series NVIDIA GeForce 200 (GTX 200), GeForce 300 y NVIDIA Tesla GPGPU C1060 y C2050/C2070 . [4] AMD agregó FMA a la línea Radeon con la serie HD 5000 . [5]
Instrucciones FMA implementadas en los procesadores Intel Sandy Bridge :