
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.