- FMA
-
FMA
Совмещенная операция умножения-сложения (англ. Fused multiply-add, FMA) — операция микропроцессора над числами с плавающей точкой, совмещающая умножение и сложение в одной инструкции. Имеет три аргумента: a,b,c. Вычисляет a + b * c. Включена в стандарт IEEE 754-2008.
При реализации в микропроцессоре она обычно быстрее, чем пара инструкций умножения и сложения. Данная инструкция позволяет более эффективно реализовать операции деления и извлечения квадратного корня (при отсутствии аппаратной реализации). Кроме того, в отличие от пары инструкций умножения и сложения, не требуется промежуточное округление до N бит после умножения перед сложением. Сложение выполняется над более точным внутренним представлением, и только после него происходит округление. Это позволяет увеличить точность.
Быстрая инструкция FMA может ускорить и увеличить точность операций перемножения векторов, перемножения матриц, вычисления полиномов (по схеме Горнера).
В стандарт 1999 года на язык программирования Си включена поддержка операции FMA (функция fma() из math.h)
Инструкция реализована в микропроцессорах IBM POWER1 (1990) и старше, Fujitsu SPARC64 (1995), HP PA-8000 (1996), Intel Itanium (2001), IBM Cell (2005), Loongson-2F (2008). Планируется добавить инструкции FMA3 и FMA4 в процессоры Intel и AMD примерно к 2012 году (см. также SSE5 и Intel AVX).
Инструкция FMA имеется в графических процессорах NVIDIA GeForce начиная с серии 200 (GTX 200) и NVIDIA Tesla T10 (GPGPU).
Инструкции FMA, реализованные в процессорах Intel Sandy Bridge
VFMADD a = b * c + d
VFMSUB a = b * c − d
VFNMADD a = − b * c + d
VFNMSUB a = − b * c − d
VFMADDSUB Aodd = Bodd * Codd + Dodd
VFMSUBADD Aeven = Beven * Ceven + Deven
Wikimedia Foundation. 2010.