In computing, especially digital signal processing, multiply-accumulate is a common operation that computes the product of two numbers and adds that product to an accumulator.

<math>\ a \leftarrow a + b \times c</math>

When done with floating point numbers it might be performed with two roundings (typical in many DSPs) or with a single rounding, called a fused multiply-add (FMA).

Modern computers may contain a dedicated multiply-add unit, or “MAC-unit”, consisting of a multiplier implemented in combinational logic followed by an adder and an accumulator register which stores the result when clocked. The output of the register is fed back to one input of the adder, so that on each clock the output of the multiplier is added to the register. Combinational multipliers require a large amount of logic, but can compute a product much more quickly than the method of shifting and adding typical of earlier computers. The first processors to be equipped with MAC-units were digital signal processors, but the technique is now common in general-purpose processors too.


In floating-point arithmetic

When done with integers, the operation is typically exact (computed modulo some power of 2). However, floating-point numbers have only a certain amount of mathematical precision. That is, digital floating-point arithmetic is generally not associative or distributive. (See Floating point#Accuracy problems.)

Therefore, it makes a difference to the result whether the multiply-add is performed with two roundings, or in one operation with a single rounding. When performed with a single rounding, the operation is termed a fused multiply-add.


Fused multiply-add

A fused multiply-add is a floating-point multiply-add operation performed in one step, with a single rounding. That is, where an unfused multiply-add would compute the product <math>b\times c</math>, round it to N significant bits, add the result to a, and round back to N significant bits, a fused multiply-add would compute the entire sum <math>a+b\times c</math> to its full precision before rounding the final result down to N significant bits.

When implemented in a microprocessor, this is typically faster than a multiply operation followed by an add. It also allows for getting the bottom half of the multiplication. E.g.,

H = FMA(A, B, 0.0);     /* compute the N most significant bits of the product A*B */
L = FMA(A, B, -H);      /* compute the N next most significant bits */

A fused multiply-add is implemented on the SPARC64, PowerPC and Itanium processor families, and will be implemented in AMD processors with SSE5 instruction set support. Because of this instruction there is no need for a hardware divide or square root unit, since they can both be implemented in software using the FMA.

A fast FMA can speed up and improve the accuracy of many computations which involve the accumulation of products:

  • Dot product
  • Matrix multiplication
  • Polynomial evaluation (e.g., with Horner’s rule)

The FMA operation will likely be added to IEEE 754 in IEEE 754r.

The 1999 standard of the C programming language supports the FMA operation through the fma standard math library function.

Comments

5 Responses to “Multiply-accumulate”

  1. casino craps on July 7th, 2008 9:09 am

    video poker game

    Hier regeln beim poker www poker stars net internet video poker regeln f

  2. free black jack game on July 13th, 2008 10:09 am

    casino roulette games

    Often www casino spiele de online casino costa rica holdem poker online poker americano gratis video poker tips

  3. bajar juego poker on July 14th, 2008 1:30 pm

    poker on line gratis

    En einicio bajar juego poker juegos flash poker gambling poker crack rebel poker poker on line gratis

  4. texas holdem on July 17th, 2008 9:57 am

    texas holdem game

    Mas de uno 7 card stud rules 50 cent ringtones holdem money play poker texas poker caribe paginas internet mp3 ringtones for treo 650

  5. celcom caller ringtones on July 17th, 2008 12:56 pm

    juego poker pc

    We omaha poker rule baccarat casino online video poker on line gratis 50 cent ringtones video poker casino