YaChudo

Множення-додавання

Переглядів: 0. Оновлено 10.10.2026.

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

  a ← a + ( b × c ) {\displaystyle \ a\leftarrow a+(b\times c)}

Коли операція виконується над числами з рухомою комою, то може виконуватися подвійне округлення (типово для процесорів цифрових сигналів) або одноразове (додавання відбувається з більш точним внутрішнім поданням добутку). Версія з одноразовим округленням також називається 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 (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 a = b × c + d {\displaystyle a=b\times c+d}
  • VFMSUB a = b × c − d {\displaystyle a=b\times c-d}
  • VFNMADD a = − b × c + d {\displaystyle a=-b\times c+d}
  • VFNMSUB a = − b × c − d {\displaystyle a=-b\times c-d}
  • VFMADDSUB A o d d = B o d d × C o d d + D o d d {\displaystyle Aodd=Bodd\times Codd+Dodd}
  • VFMSUBADD A e v e n = B e v e n × C e v e n + D e v e n {\displaystyle Aeven=Beven\times Ceven+Deven}

Джерела

Джерело: стаття у Вікіпедії та історія редагувань (автори).