Понимание производительности FMA

Я хотел бы понять, как вычислить производительность 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 инструкций.

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


person no one special    schedule 03.03.2019    source источник


Ответы (2)


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

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

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

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

person harold    schedule 03.03.2019
comment
в полете - это общий термин для обозначения активного. - person Peter Cordes; 04.03.2019

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

  • Внешний интерфейс выполняет менее 2 операций FMA в каждом цикле из-за узкого места внешнего интерфейса (путь DSB или путь MITE).
  • Существуют зависимости данных между FMA или другими инструкциями (которые, возможно, являются частью механики циклов). Альтернативно это можно сформулировать следующим образом: в каждом отдельном цикле в RS готово менее 2 FMA. Задержка вступает в игру, когда есть зависимости.
  • Некоторые из FMA используют операнды памяти, которые, если они не будут найдены в кэше L1D, когда они необходимы, не смогут поддерживать пропускную способность 2 FMA за цикл.
  • В ходе эксперимента частота ядра становится меньше 3 ГГц. Этот фактор влияет только на пропускную способность в секунду, а не на цикл.
  • Другие причины зависят от того, как именно работает ваш цикл и как вы измеряете пропускную способность.
person Hadi Brais    schedule 03.03.2019
comment
Вы упомянули, что задержка вступает в игру, когда есть зависимости. Итак, если нет зависимостей, то производительность зависит только от всего? - person no one special; 03.03.2019
comment
@noonespecial Одна из ситуаций, когда задержка имеет значение, — это когда есть зависимости данных. Ваш расчет 4*0.5 = 2 работает, когда есть две цепочки зависимостей FMA. - person Hadi Brais; 03.03.2019
comment
@noonespecial: related: Почему mulss занимает всего 3 цикла на Haswell, в отличие от таблиц инструкций Agner? для получения дополнительной информации о задержке по сравнению с пропускной способностью и несколькими цепочки зависимостей. - person Peter Cordes; 04.03.2019