используйте valgrind, чтобы узнать время (в секундах), затраченное на каждую функцию - PullRequest
33 голосов
/ 12 июля 2011

есть ли расширение valgrind, которое можно использовать в командном окне, которое помогло бы мне узнать время (в секундах), затраченное на каждую функцию в моем C-коде?

спасибо =)

Ответы [ 3 ]

28 голосов
/ 12 июля 2011

Для профилирования машинных инструкций используйте callgrind от valgrind (также, cachegrind может выполнять профилирование с предсказанием кеша и ветвления, что весьма неплохо).

Для измерения времени используйте профилировщик процессора Google , он дает лучшие результаты, чем gprof. Вы можете установить частоту дискретизации, и она может отображать вывод в виде хорошего аннотированного графика вызовов.

17 голосов
/ 12 июля 2011

Valgrind не подходит для измерения времени, так как запуск приложения в valgrind искажает результаты (замедление, загрузка ЦП и ввод-вывод).Таким образом, инструмент профилирования valgrind callgrind измеряет не время, а инструкции процессора.Callgrind полезен только в том случае, если ваше узкое место связано с ЦП (таким образом, инструкции ЦП имеют значение), тогда измеренные инструкции ЦП будут пропорциональны затраченному времени.Бесполезно, если задействованы тяжелые операции ввода-вывода или несколько процессов.Затем вы должны использовать профилировщик выборки, например, gprof или sysprof.Это проверяет интервалы, в которых функционирует процесс, с менее искаженными результатами.

3 голосов
/ 12 июля 2011

Используйте эту ссылку.Я думаю, что-то вроде Callgrind должно сработать.

...