Как интерпретировать результаты kcachegrind

Может ли кто-нибудь сказать мне, как заинтересовать результаты kcachegrind.

У меня было две версии моего кода (v1, v2), скомпилированные в режиме отладки. Я провел их через valgrind с параметрами:

valgrind --tool=callgrind -v ....

Сгенерированные таким образом выходные файлы открываются в kcachegrind. Теперь я уже обнаружил, что версия v2 кода работает быстрее, чем первая версия v1 в том виде, как она должна была быть. Но как мне интерпретировать результат из графа вызовов kcachegrind?

В ккачегринде All Callers На вкладке у меня есть следующие столбцы: Incl. , Distance, Called, Caller,

IIUC, Called а также caller Сколько раз в программе вызывался «вызывающий». Но я не знаю о других.

Другое дело при выборе конкретной функции, а затем
На вкладке «Абоненты» отображается дополнительная информация. Ir, Ir per call, count, caller
и на вкладке типов: `EventType, Incl. Сам, коротко, Формула.

Я понятия не имею здесь.

До сих пор я читал эти вопросы:

KCachegrind толкование путаницы
Смущенный о профилировании результата

12

Решение

Я использую QCacheGrind, поэтому я прошу прощения, если что-то на моем экране не совсем то, что вы видите. Насколько я понимаю, QCacheGrind является прямым портом Qt KCacheGrind. Кроме того, у меня есть возможность переключаться между количеством команд и процентом от общего количества инструкций. Для согласованности я буду ссылаться на представление «Количество команд» в любом столбце, который можно переключать таким образом.

В столбцах вкладки «Все абоненты» должно отображаться следующее:

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

  • Расстояние: сколько разделенных вызовов функций — это выбранная строка из функции, выбранной на панели «Плоский профиль».

  • Вызванный: Количество раз, когда вызывающая сторона вызывала функцию, которая в конечном итоге привела к выполнению выбранной функции).

  • Вызывающий: функция, которая напрямую вызывала или вызывала другого вызывающего абонента из выбранной вами функции (в зависимости от расстояния).

Вкладка Callers является более простой. Он показывает функции, которые находятся на расстоянии 1 от выбранной вами функции. Другими словами, это те функции, которые напрямую вызывают выбранную вами функцию.

  • Ir: количество команд, выполненных в общей сложности выбранной функцией после вызова этой вызывающей стороной.

  • Ir за звонок: количество инструкций, выполненных за звонок.

  • Количество: количество вызовов выбранной функции вызывающим абонентом.

  • Вызывающий: функция, которая напрямую вызвала выбранную функцию.

Для событий, см. этот страница для справочника. Я подозреваю, что если вы не определили свои собственные типы, все, что вы должны увидеть, это «Сбор инструкций» и, возможно, «Оценка цикла». Краткое описание этих столбцов выглядит следующим образом:

  • Вкл .: снова общее количество инструкций, выполненных этой функцией и всеми функциями, которые она вызывает ниже.

  • Self: инструкции, выполняемые исключительно этой функцией. Этот счетчик отслеживает только инструкции, используемые этой функцией, а не любые команды, используемые функциями, вызываемыми этой функцией.

  • Сокращение и формула: эти столбцы используются при определении пользовательского типа события. Ваш должен быть либо пустым, либо очень коротким (например, CEst = Ir), если вы не определите свои собственные типы.

5

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


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