Пропускная способность FMA и умножение на X86 Broadwell - PullRequest
0 голосов
/ 13 февраля 2019

Я подозреваю, что последняя архитектура Intel выполнила мнемонику MUL как FMA, но с нулевым добавлением (в архитектуре broadWell).

Подробно, в настоящее время я выполняю продукт четырехчленных полиномов (Pi), следуя шаблону.

P1*P2*P3*P4 

Каждый многочлен Pi (x) = a + bX + cX ^ 2 оценивается двумя последовательными FMA.Однако, когда я измеряю пропускную способность моей проблемы, цифры очень низкие.В соответствии с таблицей Agner Fog Agner Fog на странице 242 пропускная способность FMA и MUL составляет 0,5.Определение пропускной способности: это время в [цикле] для выполнения новой идентичной мнемоники.

Таким образом, я должен получить штраф между FMA и MUL, однако мои измерения плавные.Я подозреваю, что процессор под капотом поменяет MUL на FMA с нулевым добавлением или, по крайней мере, использует идентичную часть схемы в FPU, что объясняет мои результаты.

Я могу бытьсовершенно неправильно, но если инженер по аппаратному обеспечению может подтвердить или опровергнуть.

1 Ответ

0 голосов
/ 13 февраля 2019

Так что я должен получить штраф между FMA и MUL

Да, из таблиц Агнера Фога вы должны посмотреть, на каких портах выполнения выполняется инструкция. Это обычно все, что вам нужно для определения пропускной способности для последовательности различных инструкций.(На современных основных процессорах x86, таких как Broadwell, все исполнительные модули, кроме div / sqrt, полностью конвейеризированы (могут запускать новый моп каждый такт), поэтому только некоторые странные микрокодированные инструкции, такие как loop, имеют меньшую пропускную способность, чем вы ожидаете отглядя на их мопы / порты.)

Фактические числа "пропускной способности" в таблицах Агнера в основном полезны как сводка или указание на какую-то странность, и обычно не являются непосредственно полезными, особенно для эффективных однопроцессных инструкций, таких как vmulps или vfma...ps.См. Какие соображения относятся к прогнозированию задержки для операций на современных суперскалярных процессорах и как я могу вычислить их вручную? для получения дополнительной информации о том, как прогнозировать производительность для блока из нескольких инструкций с точки зрения задержки, обратногоузкие места в оконечном порте и узкие места в пропускной способности входного соединения.

однако мои измерения плавные.Я подозреваю, что процессор под капотом заменяет MUL на FMA с нулевым добавлением или, по крайней мере, использует идентичную часть схемы в FPU, которая объясняет мои результаты.

Да, я не'Т понять.Вы только что сказали, что думаете, что MUL и FMA должны конфликтовать друг с другом, но теперь вы говорите, что думаете, что запуск MUL на устройстве FMA что-то объясняет ??


Я подозреваю, что в последний разАрхитектура Intel для выполнения мнемонического MUL как FMA, но с нулевым добавлением (в архитектуре broadWell).

Почти каждая операция FP, которая должна нормализовать результат FP (кроме добавления FP), выполняется на FMAблок в Бродвеле. Но mul и add имеют 3-х тактную задержку на Broadwell, в то время как фактическая FMA имеет 5-ти тактную задержку, поэтому очевидно, что существуют различные конфигурации для модуля FMA .MUL / FMA идентичны для пропускной способности, но не для задержки в Broadwell.

(В отличие от Skylake, где отдельный модуль добавления был отброшен, и оба устройства mul / add имеют точно такую ​​же пропускную способность 4c / 0,5c, что и FMA).

Наличие MUL с другой задержкой, чем у FMA в Бродвеле, необычно;большинство процессоров, которые оба запускают их с одинаковой производительностью, предположительно просто вводят 0.0 в ввод ввода или что-то эквивалентное.

SIMD Integer умножение также использует множители в блоке FMA, как и целочисленное смещение,Его использует удивительное количество материала, но в Skylake-X имеет смысл, что они будут максимально использовать преимущества этих транзисторов вместо использования более 512-битных исполнительных блоков SIMD.


В настоящее время я выполняю произведение четырехчленных полиномов (Pi), следуя шаблону.P1*P2*P3*P4

Что вы делаете с результатами? Вы делаете только группы по 4?Что вы делаете с результатом каждой группы?

Или вы умножаете много квадратичных полиномов в одну огромную цепочку умножений, создавая цепочку зависимостей мульп?

Это будет узким местом при 3 циклах на каждый многочлен с независимыми вычислениями каждого многочлена (2x FMA) для создания входных данных для этих операций, происходящих параллельно.В этом случае Broadwell - ваш идеальный процессор для этого, с 3 циклами умножения против 5 циклов в Haswell и 4 циклами Skylake.

Но если вы можете притворяться, что математика FP ассоциативна и имеет разные временные результаты, вы можете запустить2, 3 или 4 цепочки умножений (или даже больше) и объединение в конце, используя развернутый цикл с несколькими векторами.например, (P1*P3*P5*... ) * (P2*P4*P6*...), с последним умножением вне цикла как часть очистки.

См. Почему mulss занимает всего 3 цикла в Haswell, в отличие от таблиц инструкций Агнера? для получения дополнительной информации о развертывании с несколькими аккумуляторами, чтобы скрыть задержку FP.

...