Лучшие вопросы
Таймлайн
Чат
Перспективы

FMA

Из Википедии, свободной энциклопедии

Remove ads

FMA (англ. Fused Multiply-Add, умножение-сложение с однократным округлением) — это набор опциональных 128- и 256-битных SIMD-инструкций для архитектур x86 и x86-64, предназначенный для выполнения операции умножения-сложения над числами в формате с плавающей запятой.

Существует два варианта расширений, добавляющих инструкции FMA:

  • FMA4 поддерживается процессорами AMD начиная с архитектуры Bulldozer. FMA4 было реализовано раньше FMA3, однако впоследствии AMD отказалась от поддержки данного расширения. Это стало нецелесообразным, поскольку Intel не стала внедрять в своих процессорах FMA4.
  • FMA3 поддерживается процессорами Intel начиная с архитектуры Haswell и процессорами AMD начиная с архитектуры Piledriver.
Remove ads

Особенности

У инструкций FMA3 и FMA4 почти идентичная функциональность, но они не являются совместимыми. Обе содержат SIMD-инструкции умножения-сложения для чисел с плавающей точкой. Их поддержка в компиляторах займёт некоторое время.

Проблема совместимости

Разница между FMA3 и FMA4 заключается в том, сколько различных операндов есть у инструкции — 3 или 4. Операция FMA имеет вид:

Форма с 4 операндами (FMA4) позволяет a, b, c и d находиться в разных регистрах, тогда как форма с 3 операндами (FMA3) требует, чтобы d находился в одном из тех регистров, в которых находится a, b или c. Форма с 3 операндами делает код короче, а также её проще реализовать аппаратно, тогда как форма с 4 операндами обеспечивает большую гибкость программирования.

Remove ads

FMA3

Суммиров вкратце
Перспектива

Процессоры с поддержкой FMA3

  • Intel
    • Intel представила аппаратную реализацию FMA3 в процессорах, основанных на архитектуре Haswell в 2013 году.
  • AMD
    • Процессоры AMD получили поддержку FMA3 в архитектурах Bulldozer и Piledriver в 2012 году.[1][2].

Новые инструкции FMA3

Подробнее Инструкция, Операнды ...

Кроме перечисленных в таблице основных инструкций, расширение FMA3 содержит ещё ряд инструкций, относящихся к следующим группам:

  • VFMADDSUB — умножение и чередующиеся сложение и вычитание (вычитание на чётных позициях, сложение — на нечётных);
  • VFMSUBADD — умножение и чередующиеся вычитание и сложение (сложение на чётных позициях, вычитание — на нечётных);
  • VFNMADD — умножение, взятое с противоположным знаком, и сложение;
  • VFNMSUB — умножение, взятое с противоположным знаком, и вычитание.

FMA4

Процессоры с поддержкой FMA4

  • AMD
    • AMD впервые реализовала поддержку FMA4 в процессорах архитектуры Bulldozer, которые были представлены в октябре 2011[3], поддержку FMA4 имеет также архитектура Piledriver[4].
    • Начиная с микроархитектуры Zen (2017, бренды Ryzen, EPYC) AMD прекратило поддержку FMA4[5][6]
  • Intel
    • На 2013 год процессоры Intel не поддерживают FMA4, и неизвестно, будет ли Intel поддерживать FMA4 в будущем.

Новые инструкции FMA4

Подробнее Инструкция, Операнды ...
Remove ads

История

Несовместимость между FMA3 от Intel и FMA4 от AMD вызвана тем, что обе компании изменили свои планы без согласования деталей кодирования друг с другом. AMD изменила планы от FMA3 в сторону FMA4, тогда как Intel — от FMA4 в сторону FMA3, практически единовременно.

Поддержка компиляторами

Различные компиляторы предлагают различный уровень поддержки FMA.

  • GCC 4.5.0 поддерживает FMA4 с -mfma4[7],
  • GCC 4.7.0 также поддерживает FMA3 с -mfma.
  • Microsoft Visual C++ 2010 SP1 поддерживает FMA4.[8]
  • Microsoft Visual C++ 2012 поддерживает FMA3.
  • PathScale поддерживает FMA4 с -mfma.
  • Open64 5.0 имеет «ограниченную поддержку».
  • AMD x86 Open64 Compiler Suite поддерживает FMA3 и FMA4, начиная с версии 4.5.2[9].
  • Компиляторы Intel поддерживают только FMA3.

Поддержка в ассемблерах:

  • NASM получил поддержку FMA3 в версии 2.03 и FMA4 — в версии 2.06.
  • YAsm поддерживает FMA3 и FMA4, начиная с версии 1.1.0.
  • FASM поддерживает и FMA3, и FMA4.
Remove ads

См. также

Примечания

Ссылки

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads