Может ли кто-нибудь сказать мне, как заинтересовать результаты 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 толкование путаницы
Смущенный о профилировании результата
Я использую QCacheGrind, поэтому я прошу прощения, если что-то на моем экране не совсем то, что вы видите. Насколько я понимаю, QCacheGrind является прямым портом Qt KCacheGrind. Кроме того, у меня есть возможность переключаться между количеством команд и процентом от общего количества инструкций. Для согласованности я буду ссылаться на представление «Количество команд» в любом столбце, который можно переключать таким образом.
В столбцах вкладки «Все абоненты» должно отображаться следующее:
Вкл .: количество инструкций, сгенерированных этой функцией в целом, с разбивкой по каждому вызывающему. Поскольку вызывающие являются иерархией (отсюда столбец расстояния), может быть несколько, имеющих одинаковое значение, если ваш стек вызовов глубокий.
Расстояние: сколько разделенных вызовов функций — это выбранная строка из функции, выбранной на панели «Плоский профиль».
Вызванный: Количество раз, когда вызывающая сторона вызывала функцию, которая в конечном итоге привела к выполнению выбранной функции).
Вызывающий: функция, которая напрямую вызывала или вызывала другого вызывающего абонента из выбранной вами функции (в зависимости от расстояния).
Вкладка Callers является более простой. Он показывает функции, которые находятся на расстоянии 1 от выбранной вами функции. Другими словами, это те функции, которые напрямую вызывают выбранную вами функцию.
Ir: количество команд, выполненных в общей сложности выбранной функцией после вызова этой вызывающей стороной.
Ir за звонок: количество инструкций, выполненных за звонок.
Количество: количество вызовов выбранной функции вызывающим абонентом.
Вызывающий: функция, которая напрямую вызвала выбранную функцию.
Для событий, см. этот страница для справочника. Я подозреваю, что если вы не определили свои собственные типы, все, что вы должны увидеть, это «Сбор инструкций» и, возможно, «Оценка цикла». Краткое описание этих столбцов выглядит следующим образом:
Вкл .: снова общее количество инструкций, выполненных этой функцией и всеми функциями, которые она вызывает ниже.
Self: инструкции, выполняемые исключительно этой функцией. Этот счетчик отслеживает только инструкции, используемые этой функцией, а не любые команды, используемые функциями, вызываемыми этой функцией.
Сокращение и формула: эти столбцы используются при определении пользовательского типа события. Ваш должен быть либо пустым, либо очень коротким (например, CEst = Ir), если вы не определите свои собственные типы.