Как профилировать количество дополнений, мутаций и т. Д. С помощью vtune

Я могу профилировать счетчик команд моей библиотеки C ++ с помощью Vtune, используя событие INST_RETIRED.ANY.

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

1

Решение

(TL: Dr): Я не думаю, что вы можете делать все, что вы хотите с перфокартами. Смотрите конец этого ответа для возможного способа использования бинарных инструментов

Также обратите внимание, что imul это не дорогая операция, и FP mul чуть дороже, чем add. например на Скайлэйке, mulps, addps, а также fma у всех одинаковая производительность (пропускная способность, задержка, мопы и выбор портов выполнения). На pre-Skylake, add был с меньшей задержкой, но и с половинной пропускной способностью, так как есть выделенный блок add.


Это не столько, что может сделать VTUNE, сколько счетчики производительности оборудования. например эта таблица перфронтных событий из линукса появился oprofile, когда я искал перф счетчики Sandybridge. Также этот более полный список для Linux perf. Если аппаратное обеспечение может считать это, я предполагаю, что VTUNE может показать это вам, как только вы найдете правильное имя.

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

Я только посмотрел, что поддерживает Sandybridge. Я предполагаю, что у Haswell / Skylake тоже есть эти события и, вероятно, больше. Вы не сказали, какой у вас процессор, поэтому я не собираюсь проверять их все.

Pre-SnB не имеет столь широкого выбора счетчиков производительности, IIRC. Intel значительно улучшила счетчики производительности в SnB, наряду с другими значительными изменениями в ядре. Достаточно большой, что обычно считается новым семейством микроархитектур, отдельным от семейства P6 (PPro-Nehalem).


Я не думаю, что вы можете отличить целочисленное прибавление от целочисленного муль, или FP добавить от FP множественное. Вы можете рассчитывать активность FP, хотя: FP_COMP_OPS_EXE «Подсчитывает количество событий с плавающей запятой», с масками для x87 и {pack, scalar} {single, double}.

Есть также SIMD_FP_256, который насчитывает только 256b векторных операций FP.

Есть счетчик для событий, помогающих FP (когда операция FP должна возвращаться к микрокоду для обработки ненормального или чего-то еще).

Я не уверен, что это правильно, но perf список говорит, что есть PARTIAL_RAT_STALLS с Umask-02: 0x80: [MUL_SINGLE_UOP]: Количество распределенных / скалярных мопов одинарной точности. Странно, что нет подобного счетчика двойной точности. Или, может быть mulss является чем-то особенным в поведении частичных регистров, у PARTIAL_RAT_STALLS есть еще один подчиненный элемент для подсчета количества слияний частичных регистров.


делить (div / divps) достаточно медленный, чтобы стоить иметь специальный счетчик, хотя: ШНБ arith.fpu_div счетчик = «Количество раз, когда делитель активен, включает INT, SIMD и FP.» Там также счетчик для числа циклы делитель активен, а не количество раз это было активировано.


Как считать инструкции:

Пин Intel представляет собой динамический бинарный инструментарий для архитектур наборов команд IA-32 и x86-64, который позволяет создавать инструменты динамического анализа программ

У меня нет VTUNE, но могут быть способы использовать инструменты Pin из VTUNE. Это заставит ваш код работать медленнее, потенциально намного медленнее. Я думаю, что это работает путем JIT-компиляции из обычного машинного кода в инструментальный машинный код, где инструментарий — это дополнительные инструкции для счетчиков приращений. У него могут быть другие режимы работы, например, пошаговое выполнение исходного кода и подсчет всего объема.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]