Набор инструкций FMA

редактировать
Расширение набора инструкций X86, разработанное Intel
Викиучебник имеет книгу по темам: X86 Assembly / AVX, AVX2, FMA3, FMA4

Набор команд FMA является расширением 128- и 256-битных команд Streaming SIMD Extensions в x86 микропроцессор набор команд для выполнения операций плавного умножения-сложения (FMA). Есть два варианта:

  • FMA4 поддерживается в процессорах AMD, начиная с архитектуры Bulldozer. FMA4 выполнялась аппаратно до FMA3. Поддержка FMA4 была удалена, поскольку Zen 1.
  • FMA3 поддерживается в процессорах AMD, начиная с архитектуры Piledriver и Intel, начиная с процессоров Haswell и процессоры Broadwell с 2014 года.
Содержание
  • 1 Инструкции
  • 2 Набор команд FMA3
    • 2.1 ЦП с FMA3
    • 2.2 Выдержка из FMA3
  • 3 Инструкция FMA4 установить
    • 3.1 CPU с FMA4
    • 3.2 Выдержка из FMA4
  • 4 История
  • 5 Поддержка компилятора и ассемблера
  • 6 Ссылки
Инструкции

Инструкции FMA3 и FMA4 почти идентичны функциональность, но не совместимы. Оба содержат инструкции объединенного умножения-сложения (FMA) для операций с плавающей запятой скаляр и SIMD, но инструкции FMA3 имеют три операнда, а FMA4 - четыре. Операция FMA имеет вид d = round (a · b + c), где функция round выполняет округление, чтобы результат уместился в регистре назначения, если есть слишком много значащих битов, чтобы поместиться в пункт назначения.

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

См. набор инструкций XOP для более подробного обсуждения проблем совместимости между Intel и AMD.

Набор команд FMA3

ЦП с FMA3

  • AMD
  • Intel
    • Все аппаратные реализации Haswell (2013 г.) и более новые

Выдержка из FMA3

Поддерживаемые команды включают VFMADD, VFMADDSUB, VFMSUBADD, VFMSUB, VFNMADD, VFNMSUB. Явный порядок операндов включен в мнемонику с использованием чисел «132», «213» и «231», а также формата операнда (упакованный или скалярный) и размера (одинарный или двойной).

Мнемоника (ATT)ОперандыОперация
VFMADD132PDyymm, ymm, ymm / m256a = a · c + b
VFMADD132PSy
VFMADD132PDxxmm, xmm, xmm / m128
VFMADD132PSx
VFMADD132SDxmm, xmm, xmm / m10MSS
VFM
xmm, xmm, xmm / m32
VFMADD213PDyymm, ymm, ymm / m256a = b · a + c
VFMADD213PSy
VFMADD213PDxxmm, xmm, xmm / m128
VFMADD213PSx
VFMADD213SDxmm, xmm, xmm / m64
VFMADD213SSxmm, xmm, xmm / m32
VFMADD231PDyymm, ymm, ymm / m256a = b · c + a
VFMADD231PSy
VFMADD231PDxxmm, xmm, xmm / m128
VFMADD231PSx
VFMADD231SDxmm, xmm, xmm / m64
VFMADD231SSxmm, xmm, xmm / m32
набор инструкций FMA4

Процессоры с процессорами FMA4

  • AMD
  • Intel
    • Это не уверены, будут ли будущие процессоры Intel поддерживать FMA4, из-за объявленного Intel перехода на FMA3.

Выдержка из FMA4

Мнемоника (ATT)ОперандыОперация
VFMADDPDxxmm, xmm, xmm / m128, xmm / m128a = b · c + d
VFMADDPDyymm, ymm, ymm / m256, ymm / m256
VFMADDPSxxmm, xmm, xmm / m128, xmm / m128
VFMADDPSyymm, ymm, ymm / m256, ymm / m256
VFMADDSDxmm, xmm, xmm / m64, xmm / m64
VFMADDSSxmm, xmm, xmm / m32, xmm / m32
История

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

  • август 2007 г.: AMD объявляет набор инструкций SSE5, который включает в себя инструкции FMA с 3 операндами. Введена новая схема кодирования (DREX), позволяющая инструкциям иметь три операнда.
  • Апрель 2008 г.: Intel объявляет о своих наборах инструкций AVX и FMA, включая 4- инструкции операнда FMA. При кодировании этих инструкций используется новая схема кодирования VEX, которая более гибкая, чем схема AMD DREX.
  • декабрь 2008 г.: Intel изменяет спецификацию своих инструкций FMA с 4-х операндов на 3 -операционные инструкции. Схема кодирования VEX все еще используется.
  • Май 2009 г.: AMD изменяет спецификацию своих инструкций FMA с 3-операндной формы DREX на 4-операндную форму VEX, совместимую со спецификацией Intel от апреля 2008 года, а не с Спецификация Intel, декабрь 2008 г.
  • Октябрь 2011 г.: процессор AMD Bulldozer поддерживает FMA4.
  • январь 2012 г.: AMD объявляет о поддержке FMA3 в будущих процессорах с кодовым названием Trinity и Вишера ; они основаны на архитектуре Piledriver.
  • Май 2012 г.: процессор AMD Piledriver поддерживает как FMA3, так и FMA4.
  • июнь 2013 г.: процессор Intel Haswell поддерживает FMA3.
  • Февраль 2017 г. Первое поколение процессоров AMD Ryzen официально поддерживает FMA3, но не FMA4 согласно инструкции CPUID. Возникла путаница относительно того, был ли FMA4 реализован на этом процессоре или нет из-за ошибок в начальном патче к пакету GNU Binutils, который с тех пор был исправлен. Хотя инструкции FMA4, по-видимому, работают согласно некоторым тестам, они также могут давать неверные результаты. Кроме того, начальные процессоры Ryzen могли выйти из строя из-за определенной последовательности инструкций FMA3. С тех пор она была решена с помощью обновленного микрокода ЦП.
Поддержка компилятора и ассемблера

Различные компиляторы обеспечивают разные уровни поддержки FMA:

  • GCC поддерживает FMA4 с -mfma4, начиная с версии 4.5. 0 и FMA3 с -mfma, начиная с версии 4.7.0.
  • Microsoft Visual C ++ 2010 SP1 поддерживает инструкции FMA4.
  • Microsoft Visual C ++ 2012 поддерживает инструкции FMA3 (если процессор также поддерживает расширение набора инструкций AVX2
  • Microsoft Visual C ++ начиная с VC 2013
  • PathScale поддерживает FMA4 с -mfma.
  • LLVM 3.1 добавляет поддержку FMA4 вместе с предварительной поддержкой FMA3.
  • Open64 5.0 добавляет «ограниченную поддержку».
  • Компиляторы Intel поддерживают только инструкции FMA3.
  • NASM поддерживает инструкции FMA3 с версии 2.03 и инструкции FMA4 с 2.06.
  • поддерживает инструкции FMA3 начиная с версии 0.8.0 и инструкций FMA4 с версии 1.0.0.
  • FASM поддерживает инструкции как FMA3, так и FMA4.
Ссылки
Последняя правка сделана 2021-05-20 08:01:16
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте