У обчислювальній техніці, особливо в цифровій обробці сигналів поєднане множення-додавання (multiply-accumulate) — поширена операція, при якій множаться два числа і складаються з акумулятором.

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

Призначення

Дана інструкція дозволяє більш ефективно реалізувати операції ділення і добування квадратного кореня (при відсутності апаратної реалізації), множення векторів і матриць, обчислення поліномів за схемою Горнера.

Реалізація в процесорах

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

Сучасні комп'ютери можуть мати спеціалізований блок множення-складання або MAC (multiply-accumulate), що складається з помножувача, який реалізує комбінаційну логіку, і суматора, а також акумулятор, в якому зберігається результат. Вихід акумулятора подається на один із входів суматора, і таким чином кожен такт результат з помножувача складається з акумулятором. Реалізація MAC вимагає додаткової логіки на кристалі, але обчислення відбуваються швидше, ніж при використанні методу зрушень і складань типового для перших комп'ютерів. FMA також працює з більш високою точністю .

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

Також вона реалізована в процесорах AMD з підтримкою FMA4[en] (Bulldozer) і FMA3 (Trinity). Intel реалізувала FMA3 в процесорах на ядрі Haswell.

Технологія присутня в NVIDIA GPU серій GeForce 200 (GTX 200), GeForce 300 і NVIDIA Tesla GPGPU C1060 & C2050 / C2070. AMD додала FMA в лінію Radeon з серії HD 5000.

Інструкції FMA, реалізовані в процесорах Intel Sandy Bridge:

  • VFMADD
  • VFMSUB
  • VFNMADD
  • VFNMSUB
  • VFMADDSUB
  • VFMSUBADD

Джерела