Fma это в процессоре

Обновлено: 06.07.2024

Intel® Advanced Vector Extensions 512 (Intel® AVX-512).

В различных отраслях продолжает возрастать потребность в повышенной вычислительной мощности. Чтобы поддержать повышающийся спрос и усложняющиеся модели использования, мы продолжаем предоставлять оптимизированные под рабочие нагрузки инновационные решения, реализуемые в наборе команд Intel® Advanced Vector Extensions 512 (Intel® AVX-512), которым оснащены новейшие процессоры и сопроцессоры Intel® Xeon Phi™ 1 , а также масштабируемые процессоры Intel® Xeon®.

Повышение производительности для ресурсоемких рабочих нагрузок

Intel® Advanced Vector Extensions 512 (Intel® AVX-512) — это новый набор команд, который повышает производительность различных рабочих нагрузок, включая научное моделирование, финансовую аналитику, искусственный интеллект, глубинное обучение, 3D-моделирование, анализ данных, обработку изображений, аудио, видео, сжатие данных и шифрование 2 .

Усовершенствованные возможности векторной обработки

Благодаря возможностям для осуществления операций с 512-битными векторами набор команд Intel® AVX-512 справится даже с наиболее требовательными вычислительными задачами.

Приложения могут осуществлять 32 операции с плавающей запятой с удвоенной точностью и 64 операции с плавающей запятой с одинарной точностью за тактовый цикл в 512-битных векторах, а также 8 целочисленных типов шириной 64 бит и 16 целочисленных типов шириной 32 бит и до двух 512-битных команд Fused Multiply-Add (FMA). Таким образом, ширина регистров данных, число регистров и ширина команд FMA вдвое больше по сравнению с набором команд Intel® Advanced Vector Extensions 2 (Intel® AVX2) 3 4 .

Раскройте весь потенциал своих приложений

Ознакомьтесь с подробной информацией о решениях для разработчиков, которые позволят вам еще больше оптимизировать работу ваших приложений и воспользоваться преимуществами набора инструкций Intel® AVX-512.

Связанная продукция и решения

Повысьте производительность с помощью набора команд Intel® AVX-512

Intel® Advanced Vector Extensions 512 (Intel® AVX-512), новейший набор векторных команд x86, включает в себя до двух команд FMA (Fused Multiply-Add) и другие оптимизации для повышения производительности наиболее ресурсоемких вычислительных задач.

Серверная продукция

Процессоры Intel® справляются с любыми рабочими нагрузками — от обработки бизнес-данных с интенсивным обращением к памяти до облачных вычислений — и повышают эффективность центра обработки данных.

Семейство процессоров Intel® Xeon Phi™

Исключите ограничения производительности в узлах, упростите модернизацию кода и создайте энергоэффективную архитектуру благодаря семейству продукции Intel® Xeon Phi™.

Семейство процессоров Intel® Xeon®

Осуществляйте облачные вычисления, аналитику в реальном времени, обработку критически важных для вашей компании данных, а также аналитику больших данных. Повысьте эффективность и надежность центра обработки данных для выполнения любых рабочих нагрузок.

Корпоративный центр обработки данных

Получите доступ к ресурсам, созданным на основе обширного опыта Intel во всех вопросах, связанных с центрами обработки данных.

Как понять технологию Intel® Crypto Acceleration

Узнайте больше о наборе команд Intel AVX-512 и технологии Intel® Crypto Acceleration, чтобы понять и оптимизировать использование этих команд, которые теперь доступны в масштабируемых процессорах Intel® Xeon® 3-го поколения.

Информация о продукте и производительности

1 Семейство процессоров Intel® Xeon Phi™ 7200/семейство сопроцессоров Intel® Xeon Phi™ 7200 или более поздней серии.

Результаты эталонных тестов получены до применения недавних пакетов исправлений ПО и обновлений встроенного ПО, предназначенных для устранения уязвимостей под названием «Spectre» и «Meltdown». После установки этих обновлений данные результаты могут быть неприменимы к вашему устройству или системе.

Intel® AVX 2.0 позволяет выполнять 16 операций с плавающей запятой в секунду с удвоенной точностью и 32 операции с плавающей запятой в секунду с одинарной точностью за тактовый цикл в 256-битных векторах, а также до двух 256-битных команд Fused Multiply-Add (FMA).


Как выяснилось, выполнение некоторых специфичных инструкций FMA3 на процессоре AMD Ryzen приводит к критическому сбою ОС.

Инструкции типа FMA3 (Fused-Multiply-Add) поддерживаются и Intel (в Haswell), и AMD. Это инструкции типа d = round(a × b + c) , где d должна быть в том же регистре, что и a, b или c. Для сравнения, инструкции FMA4 поддерживает только AMD (в процессорах Buldozer и более поздних). Там a, b, c и d могут быть в разных регистрах.

Баг в процессоре обнаружен во Flops version2 — простой и малоизвестной утилите для тестирования ЦП. Следует заметить, что разработчик этой утилиты Александр "Mystical" Йи (Alexander «Mystical» Yee) позиционирует её как специфическую утилиту тестирования, которая чувствительна к микроархитектуре процессоров. В других бенчмарках баг так и не проявился.

С утилитой Flops version2 поставляются специфические бинарники для всех основных архитектур x64 (Core2, Bulldozer, Sandy Bridge, Piledriver, Haswell, Skylake). Но на данный момент ни среди бинарных сборок под Windows, ни под Linux нет версии для тестирования Zen. Поэтому сейчас для тестирования Ryzen применяли бинарники других архитектур, а именно наиболее близкой Haswell. Вышеупомянутая ошибка с инструкциями FMA3 обнаружена две недели назад самим автором программы Flops, когда он запустил тест со стоковым бинарником для Haswell на компьютере следующей конфигурации:

  • Ryzen 7 1800X
  • Asus Prime B350M-A (BIOS 0502)
  • 4 x 8GB Corsair CMK32GX4M4A2400C14 @ 2133 MHz
  • Windows 10 Anniversary Update

Иногда тест проходит эту операцию успешно, но всё равно зависает на какой-нибудь другой операции в дальнейшем.

Разработчик объясняет, что его тест — с открытым исходным кодом, и если вы не доверяете результатам, то можете сами взять и скомпилировать бинарник в Visual Studio, и перепроверить результаты.

Александр понимал, какое внимание привлечёт, сообщая об ошибке в разрекламированном процессоре. Поэтому он многократно перепроверил результаты. Процессор вешал систему на всех тактовых частотах. А при работе в однопотоковом режиме систему вешало каждое ядро.

Оставались какие-то вероятности, что причина сбоя может быть всё-таки не в процессоре, а в чём-то другом. Например, в специфической материнской плате, в специфическом BIOS, в специфической операционной системе… Что ещё может быть?

Разработчик поделился результатами с коллегами, чтобы они проверили другие версии Zen на своих компьютерах. Сбои подтвердились и для других процессоров, на разных материнских платах, под разными версиями Windows и под Linux.

В первые дни после призыва Алекса тесты запустили пять владельцев процессоров Ryzen. Вот какие получены результаты:

  • 1800X + Asus Prime B350M-A (BIOS 0502)
  • 1700 + Asus Prime B350M-A (BIOS . )
  • 1700 + Asus Crosshair VI Hero
  • 1700 + Asus Crosshair VI Hero (BIOS 5803) (два банка памяти G.Skill + Kingston)
  • 1800X + Asus Crosshair VI Hero (Windows 7) — один раз прошёл тест, многократно не прошёл.
  • Пока нет

Ему не давала покоя только одна деталь: хотя тест написан правильно, но почему-то зависания не присходило в других бенчмарках, таких как prime95 и y-cruncher, хотя они тоже используют FMA в тестировании.

Так что некоторая неопределённость оставалась.

Плохая новость в том, что его могут использовать злоумышленники для DoS-атак. То есть главным образом эта ошибка — проблема информационной безопасности. Ведь обычная пользовательская программа, работающая в user mode, а не на уровне ядра ОС, никак не должна намертво вешать систему. Но это происходит.

То, что тест запускали на бинарнике для другой архитектуры — не так принципиально. Любой процессор должен успешно воспроизводить тесты из любого бинарника, если он поддерживает соответствующий набор инструкций, пишет автор бенчмарка. Но даже если запустить тест с использованием несовместимых инструкций, программа не должна вешать систему намертво.

Опасность уязвимости в безопасности усугубляется тем, что вредоносный код можно запустить даже из-под виртуальной машины, он всё равно подвесит всю систему. Компьютер с новым процессором Ryzen может подвесить любая вредоносная программа. Возможно, даже через браузер.

Как уже было сказано, AMD работает над обновлением протокола AGESA. После этого патчи будут выпущены для всех версий BIOS во всех материнских платах.

В популярных публикациях много слов о «глу­бо­ком об­уче­нии», при­чем, с по­яв­ле­ни­ем каждого но­во­го фун­к­ци­о­наль­но­го расширения, фор­му­ли­ров­ки повторяются сно­ва и сно­ва. Ви­ди­мо, каж­дый раз об­уче­ние ста­но­вит­ся еще бо­лее глу­бо­ким. Меж­ду тем, об­ра­тив­шись к до­ку­мен­та­ции (и по­звав на по­мощь эму­ля­тор In­tel SDE), не­труд­но убе­дить­ся, что со­став­ными час­тя­ми для ре­а­ли­за­ции тех­но­ло­гий со столь за­мы­с­ло­ва­ты­ми наз­ва­ни­я­ми яв­ля­ют­ся опе­ра­ции ли­ней­ной ал­ге­б­ры: по­сле­до­ва­тель­но­сти ум­но­же­ний и сложений.

С целью оптимизации машинного кода, необходимого для реализации алгоритмов линейной алгебры, в част­нос­ти, — об­ра­бот­ки векторов и матриц, раз­ра­бо­та­но се­мей­ст­во фун­к­ци­о­наль­ных рас­ши­ре­ний FMA (Fused Multiply and Add). Имен­но их при­ме­не­ние позволяет ком­би­ни­ро­вать в одной про­цес­сор­ной инструкции ариф­ме­ти­че­ские дей­ст­вия ум­но­же­ния и сло­же­ния. Заметим, что FMA инструкции оперируют числами с пла­ва­ю­щей точкой, в то время как функ­ци­о­наль­ное рас­ши­ре­ние VNNI (Vector Neural Network Instructions) ис­поль­зу­ет­ся для обработки це­ло­чис­лен­ных опе­ран­дов.

Блок-схема выполнения векторной операции Fused Multiply and Add


Блок-схема выполнения векторной операции Fused Multiply and Add

Дополнительным плюсом FMA является улучшение точности вычислений, поскольку при выполнении нескольких последовательных арифметических операций одной инструкцией округлению подвергается только окон­ча­тель­ный результат, в то время как при использовании умножений и сложений отдельными инструкциями, по­те­ря точ­нос­ти имеет место после каждого действия.

В чем отличие FMA и FMA4

Рассмотрим выражение, вычисление которого достаточно типично для операций линейной алгебры:

В трехоперандном варианте (FMA, синоним FMA3 instructions), регистр-получатель результата Y всегда совпадает с одним из трех операндов-источников X1, X2, X3. Поэтому нельзя выполнить операцию, сохранив все регистры-ар­гу­мен­ты неизменными — один из них будет использован для формирования результата и его исходное значение бу­дет по­те­ря­но.

Четырехоперандный вариант (FMA4 instructions) рассчитан на использование четырех независимых операндов, что позволяет сохранить в неприкосновенности содержимое всех аргументов.

Экспериментаторам на заметку

Мнение, согласно которому четырехоперандные FMA-инструкции являются непозволительной роскошью, как пра­ви­ло, ассоциируют с политикой Intel, «репрессировавшей» FMA4-формат. По другой версии, причиной бло­ки­ров­ки является ошибка в дизайне FMA-блока процессоров Ryzen. Вместе с тем, источник заявляет о не­до­ку­мен­ти­ро­ван­ной поддержке и перспективах возрождения (уже в документированном виде) FMA4 в про­цес­со­рах AMD.

Под недокументированной поддержкой в этом контексте понимается ситуация, при которой CPUID-бит, ука­зы­ва­ю­щий на поддержку FMA4, обнулен, но попытка использовать инструкции FMA4 вместо предусмотренной в таком «аварийном» случае генерации исключения по недопустимому коду операции приводит к нормальному ее вы­пол­не­нию.

Экспериментаторы, желающие самостоятельно проверить такой сценарий, должны предусмотреть обработку воз­мож­ных исключений, чтобы избежать аварийного завершения приложения. Кроме того, в силу деликатности си­ту­а­ции, до обретения FMA4-инструкциями официального статуса, нет гарантии, что результат вы­пол­не­ния ока­жет­ся корректным.

О документированных возможностях

Выполним несколько простых проверок, опираясь исключительно на документированную функциональность про­цес­со­ра AMD EPYC 7351 16-Core Processor.

Расширение FMA, в «классической» трехоперандной форме, официально поддерживается процессором AMD EPYC 7351 16-Core Processor, о чем свидетельствует CPUID функция 00000001h, регистр ECX, бит 12


Расширение FMA, в «классической» трехоперандной форме, официально поддерживается процессором AMD EPYC 7351 16-Core Processor, о чем свидетельствует CPUID функция 00000001h, регистр ECX, бит 12

Расширение FMA, в «продвинутой» четырехоперандной форме, официально не поддерживается процессором AMD EPYC 7351 16-Core Processor, о чем свидетельствует CPUID функция 80000001h, регистр ECX, бит 16


Расширение FMA, в «продвинутой» четырехоперандной форме, официально не поддерживается процессором AMD EPYC 7351 16-Core Processor, о чем свидетельствует CPUID функция 80000001h, регистр ECX, бит 16

«Легальные» результаты выполнения инструкции CPUID неожиданностей не принесли: FMA поддерживается, FMA4 — нет. Оценим производительность инструкций FMA.

Цикл вычисления скалярного произведения векторов, по оси X откладывается размер каждого из двух перемножаемых векторов в байтах, по оси Y — производительность в гигабайтах в секунду (около 45.6), исследование в окрестности X = объем кэш-памяти данных L1, работает один поток


Цикл вычисления скалярного произведения векторов, по оси X откладывается размер каждого из двух перемножаемых векторов в байтах, по оси Y — производительность в гигабайтах в секунду (около 45.6), исследование в окрестности X = объем кэш-памяти данных L1, работает один поток

В FMA-тесте утилиты NCRB вычисляется скалярное произведение двух векторов, поэтому адресуется два чи­та­е­мых массива, размер которых в байтах отложен по X. Тест использует формат двойной точности (double precision), одно число занимает 8 байт (64 бита) это необходимо учитывать при пересчете результата в GFLOPS. Одна век­тор­ная 256-битная операция обрабатывает 256 / 64 = 4 операнда. Ввиду наличия двух массивов, теоретический мо­мент переполнения L1 должен иметь место при

X = 32 KB / 2 = 16 KB

При использовании SMT кэш-память каждого ядра обслуживает два потока, поэтому теоретический момент пе­ре­пол­не­ния L1 еще в два раза ниже

X = 16 KB / 2 = 8 KB

Напомним, размер кэш-памяти данных первого уровня процессора AMD EPYC 7351 составляет 32 килобайта.

Время выполнения операции определяется двумя составляющими, первая из которых зависит от времени до­став­ки данных из кэш-памяти, а вторая — не зависит.

  1. Чтение элементов перемножаемых векторов из кэш-памяти в операционный блок.
  2. Вычисления: операции умножения и сложения и манипуляции с данными внутри операционного блока.

Цикл вычисления скалярного произведения векторовб по оси X откладывается размер каждого из двух перемножаемых векторов в байтах, по оси Y — производительность в гигабайтах в секунду (около 733.9), исследование в окрестности X = объем кэш-памяти данных L1; работает 32 потока


Цикл вычисления скалярного произведения векторовб по оси X откладывается размер каждого из двух перемножаемых векторов в байтах, по оси Y — производительность в гигабайтах в секунду (около 733.9), исследование в окрестности X = объем кэш-памяти данных L1; работает 32 потока

Выводы

Начав исследование с документированной формы FMA, мы обнаружили неплохой уровень масштабирования про­из­во­ди­тель­нос­ти. При условии размещения обрабатываемых массивов в кэш-памяти данных первого уровня, со­от­но­ше­ние производительности двух вариантов: с использованием одного логического процессора и всех 32 ло­ги­че­ских процессоров составляет 45.6 к 733.9 что весьма близко к 16. А это, напомним, количество ядер ис­сле­ду­е­мо­го процессора.

Выпуск нового процессора, особенно, если речь идёт о новой архитектуре, а не об усовершенствовании старой, проверенной, обычно влечёт за собой и наличие ошибок. Чаще всего эти ошибки не фатальны, хотя их список может исчисляться десятками страниц, но история знает и яркие примеры серьёзных провалов: «двойная сигма», не позволявшая дефектным процессорам Intel 80386 работать в 32-битном режиме, ошибка F00F в ранних Pentium, приводившая к зависанию системы, а также некорректная отработка операции деления в первых Pentium 60/66. Увы, как выяснилось на днях, не минула сия судьба и AMD Ryzen на базе новейшей архитектуры Zen.

Краткое описание сущности набора инструкций FMA. Источник: Wikipedia

Краткое описание набора инструкций FMA. Источник: Wikipedia


Он опубликовал свою находку на форумах HWBot под ником Mystical, после чего другие пользователи сообщили о том, что проблема действительно существует и регулярно воспроизводится вне зависимости от конфигурации системы: достаточно, чтобы её сердцем был один из новых процессоров Ryzen. Коллеги с ресурса Heise Online проверили поведение Ryzen 7 1700X на плате MSI X370 XPower Gaming Titanium и Ryzen 7 1700 на одной из самых популярных плат с разъёмом AM4 — ASUS Crosshair VI Hero. Оба раза им удалось добиться «успеха»: система уходила в чёрный экран и намертво зависала, что лечилось только холодной перезагрузкой. Как сообщает глава ресурса HWBot, ошибка всегда проявляется при определённых условиях использования FMA3 и лежит в области микрокода (AGESA, AMD Generic Encapsulated Software Architecture). Следовательно, она не является неисправимой и проблему можно решить обновлением микрокода процессора (в том числе с помощью обновления BIOS системной платы), но AMD пока никак не прокомментировала ситуацию.

Мы надеемся, что в ближайшем времени последует волна обновлений от производителей системных плат, избавляющая системы на базе Ryzen от серьёзного риска зависания при использовании функций FMA3. Но хотелось бы также дождаться и официальных комментариев Advanced Micro Devices.

Читайте также: