Как профилировать разделы кода? - PullRequest
2 голосов
/ 03 марта 2012

Мне нужно профилировать часть программного обеспечения, написанного на C. Теперь проблема в том, что, хотя gprof или мои собственные вызовы функций start / end timer позволят мне потратить время на каждую функцию, у меня не будет никакой информации о том, какаянаиболее трудоемкая часть в каждой функции.Некоторые могут назвать это микрооптимизацией, но это то, что нужно часу!

Одним из достижений этого является «ручное» размещение вызовов таймера начала / конца для циклов (их может быть несколькоэти).В этом случае разумнее было бы разрешить включение / отключение этих вызовов с помощью макросов.

Но я хочу автоматизировать этот инструментарий?

Можете ли вы сказать, существует ли хороший инструмент для достижениятот же самый?Было бы идеально, если бы я мог повторно вызывать инструментированную программу из скрипта, а затем находить среднее время, затрачиваемое в каждом «разделе» кода.На данный момент раздел является свободно определенным термином, но этот «инструмент» может иметь более конкретное определение того, что такое раздел.

Было бы также полезно, если бы я мог каким-то образом узнать, какие инструменты будут

Ответы [ 3 ]

1 голос
/ 03 марта 2012

Вы можете попробовать использовать Callgrind (один из Valgrind инструментов) в сочетании с KCachegrind .Смотри также этот вопрос .

0 голосов
/ 03 марта 2012

Вы хотите, чтобы код выполнялся максимально быстро, верно?

gprof - это измерительный инструмент. Это может помочь в оценке альтернативных реализаций, поскольку авторы оригинала написали . Они не сказали, что это эффективно для поиска кода, нуждающегося в альтернативной реализации, и это не так, хотя почти все думают, что это так.

Ошибка в том, что измерение определяет местоположение, но если вы хотите найти слона в комнате, вам нужно измерить его, чтобы узнать, что оно там? Нет, вы открываете глаза.

Вот способ открыть глаза на то, что делает ваша программа.

0 голосов
/ 03 марта 2012

Я не использовал его сам, но я слышал, что инструментарий Valgrind (http://www.valgrind.org/)) имеет инструменты, которые обеспечивают очень тонкое профилирование, необходимое для того, чего вы пытаетесь достичь.

...