Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

Инструкции [ править ]

Инструкции 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 [ править ]

Отрывок из FMA3 [ править ]

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

Набор инструкций FMA4 [ править ]

Процессоры с FMA4 [ править ]

  • AMD
    • Переработчики "тяжелого оборудования"
      • Процессоры на базе Bulldozer , 12 октября 2011 г. [5]
      • Процессоры на базе Piledriver [6]
      • Процессоры на базе Steamroller
      • Процессоры на базе экскаваторов (включая "v2")
    • Дзен : Тестирование WikiChip показывает, что FMA4 все еще работает (в условиях тестов), несмотря на то, что официально не поддерживается и даже не сообщается CPUID. Это также подтвердил Агнер. [7] Но другие тесты дали неверные результаты. [8] Официальный веб-сайт AMD Примечание о поддержке FMA4 ЦП ZEN = AMD ThreadRipper 1900x, R7 Pro 1800, 1700, R5 Pro 1600, 1500, R3 Pro 1300, 1200, R3 2200G, R5 2400G. [9] [10] [11]
  • Intel
    • Неизвестно, будут ли будущие процессоры Intel поддерживать FMA4 из-за объявленного Intel перехода на FMA3.

Отрывок из FMA4 [ править ]

История [ править ]

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

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

Поддержка компилятора и ассемблера [ править ]

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

  • GCC поддерживает FMA4 с -mfma4 с версии 4.5.0 [23] и FMA3 с -mfma с версии 4.7.0.
  • Microsoft Visual C ++ 2010 SP1 поддерживает инструкции FMA4. [24]
  • Microsoft Visual C ++ 2012 поддерживает инструкции FMA3 (если процессор также поддерживает расширение набора инструкций AVX2).
  • Microsoft Visual C ++ с VC 2013
  • PathScale поддерживает FMA4 с -mfma. [25]
  • LLVM 3.1 добавляет поддержку FMA4 [26] вместе с предварительной поддержкой FMA3. [27]
  • Open64 5.0 добавляет «ограниченную поддержку».
  • Компиляторы Intel поддерживают только инструкции FMA3. [23]
  • NASM поддерживает инструкции FMA3 с версии 2.03 и инструкции FMA4 с 2.06.
  • Yasm поддерживает инструкции FMA3 начиная с версии 0.8.0 и инструкции FMA4 начиная с версии 1.0.0.
  • FASM поддерживает инструкции FMA3 и FMA4.

Ссылки [ править ]

  1. ^ «FMA3 и FMA4 не являются наборами инструкций, это отдельные инструкции - объединенное умножение и сложение. Они могут быть весьма полезны в зависимости от того, как Intel и AMD реализуют их» Вольтманн, Джордж (Prime95). «Intel AVX и GIMPS» . mersenneforum.org/index.php . Большой Интернет-проект Mersenne Prime Search (GIMPS) . Проверено 27 июля 2011 года .
  2. ^ Maffeo, Робин (1 марта 2012). «AMD и Visual Studio 11 Beta» . AMD. Архивировано из оригинала на 9 ноября 2013 года . Проверено 7 ноября 2018 .
  3. ^ https://valid.x86.fr/cache/screenshot/y5z6gq.png
  4. ^ http://valid.x86.fr/cache/screenshot/kr2mlx.png
  5. ^ "Руководство программиста архитектуры AMD64, том 6: 128-битные и 256-битные инструкции XOP, FMA4 и CVT16" (PDF) . AMD . 1 мая 2009 г.
  6. ^ "Новые инструкции" Bulldozer "и" Piledriver "Шаг вперед к разработке высокопроизводительного программного обеспечения" (PDF) . AMD . Октябрь 2012 г.
  7. ^ http://agner.org/optimize/blog/read.php?i=838
  8. ^ a b «Обсуждение - у Ryzen есть недокументированная поддержка FMA4» . Проверено 10 мая 2017 .
  9. ^ "www.amd.com, список поддерживаемых моделей FMA4" .
  10. ^ "www.amd.com, список поддерживаемых моделей FMA4" .
  11. ^ "www.amd.com, список поддерживаемых моделей FMA4" .
  12. ^ "128-битный набор инструкций SSE5" . AMD Developer Central. Архивировано из оригинала на 2008-01-15 . Проверено 28 января 2008 .
  13. ^ «Справочник по программированию расширенных векторных расширений Intel» (PDF) . Intel . Проверено 5 апреля 2008 . [ постоянная мертвая ссылка ]
  14. ^ «Справочник по программированию расширенных векторных расширений Intel» . Intel . Проверено 6 мая 2009 .
  15. ^ "Достижение баланса" . Дэйв Кристи, блоги разработчиков AMD. 6 мая 2009 года в архив с оригинала на 8 июля 2012 года . Проверено 7 ноября 2018 .
  16. ^ a b «Новые инструкции по работе с бульдозерами и погрузчиками» (PDF) . AMD . Проверено 25 июля 2013 года .
  17. ^ «Руководство по оптимизации программного обеспечения для процессоров AMD семейства 15h» (PDF) . AMD . Проверено 19 апреля 2012 года .
  18. ^ «Справочник по программированию расширений набора инструкций архитектуры Intel» (PDF) . Intel . Проверено 25 июля 2013 года .
  19. ^ «Микроархитектура процессоров Intel, AMD и VIA. Руководство по оптимизации для программистов сборки и производителей компиляторов» (PDF) . Проверено 2 мая 2017 .
  20. ^ https://sourceware.org/ml/binutils/2015-03/msg00078.html
  21. ^ https://sourceware.org/ml/binutils/2015-08/msg00039.html
  22. ^ «Машина AMD Ryzen вылетает из-за последовательности инструкций FMA3» . Проверено 10 сентября 2017 .
  23. ^ a b Латиф, Лоуренс (14 ноября 2011 г.). «AMD Bulldozer поддерживает GCC только инструкции FMA4 и XOP, Intel по-прежнему отключен» . Спрашивающий .
  24. ^ «Встроенные функции FMA4 добавлены для Visual Studio 2010 SP1» .
  25. ^ "EKOPath man doc" . Архивировано из оригинала на 2016-06-23 . Проверено 24 июля 2013 .
  26. ^ "Примечания к выпуску LLVM 3.1" .
  27. ^ «Включить определение поддержки AVX и AVX2 через CPUID» . LLVM . 2012-04-26.