Умножение-сложение


В вычислительной технике, особенно в цифровой обработке сигналов совмещённое умножение-сложение (multiply-accumulate) — распространённая операция, при которой умножаются два числа и складываются с аккумулятором.

Когда операция выполняется над числами с плавающей запятой, то может выполняться двойное округление (типично для DSP) или однократное (сложение происходит с более точным внутренним представлением произведения). Версия с однократным округлением также называется fused multiply-add (FMA) или fused multiply-accumulate (FMAC).

Данная инструкция позволяет более эффективно реализовать операции деления и извлечения квадратного корня (при отсутствии аппаратной реализации), умножение векторов и матриц, вычисление полиномов по схеме Горнера.

Операция включена в стандарт IEEE 754-2008. В стандарт 1999 года на язык программирования Си включена поддержка операции FMA (функция fma() из math.h).

Современные компьютеры могут иметь специализированный блок умножения-сложения или MAC (multiply-accumulate), состоящий из умножителя, реализующего комбинационную логику, и сумматора, а также аккумулятора, в котором сохраняется результат. Выход аккумулятора подаётся на один из входов сумматора, и таким образом каждый такт результат из умножителя складывается с аккумулятором. Реализация MAC требует дополнительной логики на кристалле, но вычисления происходят быстрее, чем при использовании метода сдвигов и сложений, типичного для первых компьютеров. FMA также работает с более высокой точностью[1]

Появившись на сигнальных процессорах, операция (FMA) включена в системы команд процессоров: IBM POWER1 (англ., 1990), Fujitsu SPARC64 (1995), HP PA-8000 (1996), Sony Emotion Engine (1999), Intel Itanium (2001), IBM Cell (2005), Ambric (2006).