Jump to content

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

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

Инструкции

[ редактировать ]

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

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

см . в наборе инструкций XOP Дополнительную информацию о проблемах совместимости между Intel и AMD .

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

[ редактировать ]

Процессоры с FMA3

[ редактировать ]
  • АМД
    • Piledriver (2012) и новые микроархитектуры [3]
      • 2-го поколения APU , «Trinity» (32 нм), 15 мая 2012 г.
      • «Бульдозер» 2-го поколения (бдвер2) с ядрами Piledriver, 23 октября 2012 г.
  • Интел

Отрывок из FMA3

[ редактировать ]

Поддерживаемые команды включают в себя

Мнемоника Операция Мнемоника Операция
ВФМ ДОБАВИТЬ result = + a · b + cВФМ АДДСУБ result = a · b + c для я = 1, 3, ...
result = a · b − c для я = 0, 2, ...
ВФ Н М ДОБАВИТЬ result = − a · b + c
ВФМ СУБ result = + a · b − cВФМ СУБАДД result = a · b − c для я = 1, 3, ...
result = a · b + c для я = 0, 2, ...
ВФ Н М СУБ result = − a · b − c
Примечание
  • ВФ Н М ДОБАВИТЬ result = − a · b + c, нет result = − (a · b + c).
  • VF N M SUB генерирует −0, если все входные данные равны нулю.

Явный порядок операндов включается в мнемосхему с помощью номеров «132», «213» и «231»:

Постфикс
1
Операция возможный
операнд памяти
перезаписывает
132 a = a · c + bc (фактор) a (другой фактор)
213 a = b · a + cc (слагаемое) a (фактор)
231 a = b · c + ac (фактор) a (слагаемое)

а также формат операнда (упакованный или скалярный) и размер (одиночный или двойной).

Постфикс
2
точность размер Постфикс
2
точность размер
SS Одинокий 00 × 32 бит С Д Двойной 0 × 64 бит
П С х 0 4 × 32 бит П Д х 2 × 64 бит
P S y 0 8 × 32 бит П Д й 4 × 64 бит
П. С. з 16 × 32 бит П Д з 8 × 64 бит

Это приводит к

Кодирование Мнемоника Операнды Операция
VEX.256.66.0F38.W1 98 /rВФМАДД 132 ПД г мм, мм, мм/м256 a = a · c + b
VEX.256.66.0F38.W0 98 /rВФМАДД 132 л.с.
VEX.128.66.0F38.W1 98 /rВФМАДД 132 ПД х хмм, хмм, хмм/м128
VEX.128.66.0F38.W0 98 /rВФМАДД 132 л.с. х
VEX.LIG.66.0F38.W1 99 /rВФМАДД 132 СД хмм, хмм, хмм/м64
VEX.LIG.66.0F38.W0 99 /rВФМАДД 132 СС хмм, хмм, хмм/м32
VEX.256.66.0F38.W1 A8 /rВФМАДД 213 ПД г мм, мм, мм/м256 a = b · a + c
VEX.256.66.0F38.W0 A8 /rВФМАДД 213 ПС г
VEX.128.66.0F38.W1 A8 /rВФМАДД 213 ПД х хмм, хмм, хмм/м128
VEX.128.66.0F38.W0 A8 /rВФМАДД 213 ПС х
VEX.LIG.66.0F38.W1 A9 /rВФМАДД 213 СД хмм, хмм, хмм/м64
VEX.LIG.66.0F38.W0 A9 /rВФМАДД 213 СС хмм, хмм, хмм/м32
VEX.256.66.0F38.W1 B8 /rВФМАДД 231 ПД г мм, мм, мм/м256 a = b · c + a
VEX.256.66.0F38.W0 B8 /rВФМАДД 231 ПС г
VEX.128.66.0F38.W1 B8 /rВФМАДД 231 ПД х хмм, хмм, хмм/м128
VEX.128.66.0F38.W0 B8 /rВФМАДД 231 ПС х
VEX.LIG.66.0F38.W1 B9 /rВФМАДД 231 СД хмм, хмм, хмм/м64
VEX.LIG.66.0F38.W0 B9 /rВФМАДД 231 СС хмм, хмм, хмм/м32

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

[ редактировать ]

Процессоры с FMA4

[ редактировать ]
  • АМД
  • Интел
    • Intel не выпустила процессоры с поддержкой FMA4.

Отрывок из FMA4

[ редактировать ]
Мнемоника (AT&T) Операнды Операция
ВФМАДПДДкс хмм, хмм, хмм/м128, хмм/м128 а = b·c + d
ВФМАДПДДи мм, мм, мм/м256, мм/м256
ВФМАДДПСx хмм, хмм, хмм/м128, хмм/м128
ВФМАДДПСы мм, мм, мм/м256, мм/м256
ВФМАДСД хмм, хмм, хмм/м64, хмм/м64
ВФМАДДСС хмм, хмм, хмм/м32, хмм/м32

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

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

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

[ редактировать ]

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

  • GCC поддерживает FMA4 с -mfma4, начиная с версии 4.5.0. [25] и FMA3 с -mfma, начиная с версии 4.7.0.
  • Microsoft Visual C++ 2010 SP1 поддерживает инструкции FMA4. [26]
  • Microsoft Visual C++ 2012 поддерживает инструкции FMA3 (если процессор также поддерживает расширение набора инструкций AVX2).
  • Microsoft Visual C++ с версии VC 2013.
  • PathScale поддерживает FMA4 с -mfma. [27]
  • В LLVM 3.1 добавлена ​​поддержка FMA4, [28] наряду с предварительной поддержкой FMA3. [29]
  • В Open64 5.0 добавлена ​​«ограниченная поддержка».
  • Компиляторы Intel поддерживают только инструкции FMA3. [25]
  • NASM поддерживает инструкции FMA3 с версии 2.03 и инструкции FMA4 с 2.06.
  • FASM поддерживает инструкции FMA3 и FMA4.
  1. ^ «FMA3 и FMA4 не являются наборами команд, это отдельные инструкции — объединенное умножение и сложение. Они могут быть весьма полезны в зависимости от того, как Intel и AMD их реализуют» Вольтманн, Джордж (Prime95). «Intel AVX и GIMPS» . mersenneforum.org/index.php . Отличный проект поиска простых чисел Мерсенна в Интернете (GIMPS) . Проверено 27 июля 2011 г. {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  2. Перейти обратно: Перейти обратно: а б «Микроархитектура процессоров Intel, AMD и VIA. Руководство по оптимизации для программистов-сборщиков и производителей компиляторов» (PDF) . Проверено 2 мая 2017 г.
  3. ^ Маффео, Робин (1 марта 2012 г.). «AMD и бета-версия Visual Studio 11» . АМД. Архивировано из оригинала 9 ноября 2013 года . Проверено 7 ноября 2018 г.
  4. ^ «CPU-Z — идентификатор: y5z6gq» . Проверено 1 мая 2022 г.
  5. ^ «CPU-Z — идентификатор: kr2mlx» . Проверено 1 мая 2022 г.
  6. ^ «Руководство программиста по архитектуре AMD64, том 6: 128-битные и 256-битные инструкции XOP, FMA4 и CVT16» (PDF) . АМД . 1 мая 2009 г.
  7. ^ «Новые инструкции для «Бульдозера» и «Сваедрайвера». Шаг вперед для разработки высокопроизводительного программного обеспечения» (PDF) . АМД . Октябрь 2012.
  8. ^ «Блог Агнера о процессорах — результаты тестов AMD Ryzen» . 2017-05-02.
  9. Перейти обратно: Перейти обратно: а б «Обсуждение — у Ryzen есть недокументированная поддержка FMA4» . Проверено 10 мая 2017 г.
  10. ^ «www.amd.com, список моделей с поддержкой FMA4» .
  11. ^ «www.amd.com, список моделей с поддержкой FMA4» .
  12. ^ «www.amd.com, список моделей с поддержкой FMA4» .
  13. ^ «Набор 128-битных инструкций SSE5» . AMD Центр разработчиков . Архивировано из оригинала 15 января 2008 г. Проверено 28 января 2008 г.
  14. ^ «Справочник по программированию Intel Advanced Vector Extensions» (PDF) . Интел . Проверено 5 апреля 2008 г. [ постоянная мертвая ссылка ]
  15. ^ «Справочник по программированию расширенных векторных расширений Intel» . Интел . Проверено 6 мая 2009 г.
  16. ^ «Достижение баланса» . Дэйв Кристи, блоги разработчиков AMD. 6 мая 2009 года. Архивировано из оригинала 8 июля 2012 года . Проверено 7 ноября 2018 г.
  17. Перейти обратно: Перейти обратно: а б «Новые инструкции для бульдозеров и сваебойщиков» (PDF) . АМД . Проверено 25 июля 2013 г.
  18. ^ «Руководство по оптимизации программного обеспечения для процессоров AMD семейства 15h» (PDF) . АМД . Проверено 19 апреля 2012 г.
  19. ^ «Справочник по программированию расширений набора команд архитектуры Intel» (PDF) . Интел . Проверено 25 июля 2013 г.
  20. ^ Гопаласубраманиан, Ганеш (10 марта 2015 г.). «[ИСПРАВЛЕНИЕ] добавить процессор znver1» . Проверено 1 мая 2022 г.
  21. ^ Павар, Амит (07 августа 2015 г.). «[ИСПРАВЛЕНИЕ] Удалить CpuFMA4 из флагов ЦП Znver1» . Проверено 1 мая 2022 г.
  22. ^ «Комментарий Mysticial о переполнении стека» . 16 июля 2019 г. Архивировано из оригинала 22 августа 2019 г. Проверено 1 сентября 2023 г. {{cite web}}: CS1 maint: bot: исходный статус URL неизвестен ( ссылка )
  23. ^ «Машина AMD Ryzen аварийно завершает работу при выполнении последовательности инструкций FMA3» . 16 марта 2017 года . Проверено 10 сентября 2017 г.
  24. ^ «Комментарий Mysticial о переполнении стека» . 16 июля 2019 г. Проверено 1 сентября 2023 г.
  25. Перейти обратно: Перейти обратно: а б Латиф, Лоуренс (14 ноября 2011 г.). «Инструкции AMD Bulldozer только FMA4 и XOP поддерживаются GCC, Intel по-прежнему без звука» . Спрашивающий . Архивировано из оригинала 17 ноября 2011 года. {{cite web}}: CS1 maint: неподходящий URL ( ссылка )
  26. ^ «Внутренности FMA4 добавлены в Visual Studio 2010 SP1» . 4 февраля 2013 г.
  27. ^ «ЭКОПат человек док» . Архивировано из оригинала 23 июня 2016 г. Проверено 24 июля 2013 г.
  28. ^ «Примечания к выпуску LLVM 3.1» .
  29. ^ «Включить обнаружение поддержки AVX и AVX2 через CPUID» . ЛЛВМ . 26 апреля 2012 г.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 8b300aadf66df7af1747573e1300102c__1711608180
URL1:https://arc.ask3.ru/arc/aa/8b/2c/8b300aadf66df7af1747573e1300102c.html
Заголовок, (Title) документа по адресу, URL1:
FMA instruction set - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)