
Fused Multiply-Add
(FMA)
13.03.2017 г.
FMA - набор инструкций процессора, ускоряющий операции умножения-сложения чисел с плавающей запятой. Аббревиатура FMA образована от англ. Fused Multiply-Add, что переводится как умножение-сложение с однократным округлением.
Операции умножения-сложения очень распространены и играют важную роль в работе вычислительной техники. Особенно, когда речь идет о цифровой обработке аналоговых сигналов (двоичное кодирование видео, звука и другие подобные операции). В связи с этим, поддержка инструкций FMA внедрена не только в центральные процессоры, но и в графические процессоры многих современных видеокарт.
В центральных процессорах инструкции FMA используются в двух вариантах:
• FMA4 (4-operand FMA) - разработан компанией AMD, впервые реализован в архитектуре Buldozer;
• FMA3 (3-operand FMA) - разработан компанией Intel, используется в процессорах Intel, начиная с архитектуры Haswell, а также в процессорах AMD, начиная с архитектуры Piledriver.
Инструкции FMA3 и FMA4 обладают практически одинаковой функциональностью, но не взаимозаменяемы. В некоторых процессорах AMD реализована поддержка обоих вариантов, в то время как в процессорах Intel поддержка FMA4 отсутствует.
Основная разница между FMA3 и FMA4 состоит в количестве используемых операндов. С инструкциями FMA4 процессор работает по схеме a = b + (c x d). FMA3 предполагает схему a = a + (b x c).
Таким образом, 4-операндная схема позволяет сохранять результат вычислений в отдельный операнд, в то время как в 3-операндной результат записывается в один из обрабатываемых операндов, изменяя его.
На первый взгляд, FMA4 является более прогрессивным вариантом и обеспечивает повышенную гибкость программирования. Однако, на аппаратном уровне (в процессоре) его значительно сложнее реализовать. Кроме того, использование программистами инструкций FMA3 обеспечивает более короткий код, чем в случае с FMA4.