Понимание производительности FMA - PullRequest
0 голосов
/ 03 марта 2019

Я хотел бы понять, как вычислить производительность FMA.Если мы посмотрим на описание здесь:

https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm256_fmadd_ps&expand=2520,2520&techs=FMA

для архитектуры Skylake, команда имеет Latency=4 и Throughput(CPI)=0.5, поэтому общая производительность инструкции составляет 4*0.5 = 2 тактов в час.инструкция.

Итак, насколько я понимаю, если максимальная (турбо) тактовая частота равна 3 ГГц, то для одного ядра за одну секунду я могу выполнить 1 500 000 000 инструкций.

Это правильно?Если это так, что может быть причиной того, что я наблюдаю немного более высокую производительность?

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Задержка = 4 и пропускная способность (ИПЦ) = 0,5, поэтому общая производительность инструкции составляет 4 * 0,5 = 2 такта на инструкцию.

Просто обработка единиц дает cycles²/instr, что странно, и у меня нет для этого никакой интерпретации.

Перечисленная здесь пропускная способность на самом деле является обратной пропускной способностью в ИПЦ, поэтому 0,5 цикла на команду или 2 инструкции на цикл.Эти числа связаны между собой взаимностью, задержка не имеет к этому никакого отношения.

Существует связанный расчет, который включает в себя как задержку, так и (обратную) пропускную способность, а именно произведение задержки и пропускной способности.: 4 * 2 = 8 (в единицах «количество инструкций»).Это - то, сколько независимых экземпляров операции может быть «в полете» (запущено, но не завершено) одновременно, сравнимо с продуктом задержки полосы пропускания в теории сети.Это число сообщает о некоторых решениях по проектированию кода, поскольку оно является нижней границей степени параллелизма на уровне команд, который код должен предоставить ЦП, чтобы он мог полностью использовать вычислительные ресурсы.

0 голосов
/ 03 марта 2019

Пропускная способность 0,5 означает, что процессор может выполнять два независимых FMA за цикл.Таким образом, на частоте 3GHz максимальная FMA составляет 6 миллиардов в секунду.Вы сказали, что можете достичь пропускной способности чуть больше 1,5В.Это может произойти по одной или нескольким из следующих причин:

  • Интерфейс доставляет менее 2-х запросов FMA за один цикл из-за узкого места внешнего интерфейса (путь DSB или путь MITE).
  • Существуют зависимости данных между FMA или другими инструкциями (которые, возможно, являются частью механики зацикливания).В качестве альтернативы это можно сформулировать следующим образом: существует менее 2 FMA, которые готовы в RS каждый цикл.Задержка вступает в игру, когда есть зависимости.
  • Некоторые из FMA используют операнды памяти, которые, если они не найдены в кэше L1D, когда они необходимы, пропускная способность 2 FMA за цикл не может поддерживаться.
  • Частота ядра становится меньше, чем 3 ГГц во время эксперимента.Этот фактор влияет только на пропускную способность в секунду, а не на цикл.
  • Другие причины зависят от того, как работает ваш цикл и как вы измеряете пропускную способность.
...