Профилирование программ, написанных на C или C ++ - PullRequest
4 голосов
/ 17 марта 2009

Что бы вы предложили лучший инструмент для профилирования кода C / C ++ и определения, какие части занимают больше всего времени. В настоящее время я просто полагаюсь на журналы, но, разумеется, информация не является точной, поскольку вводятся ненужные задержки.

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

Платформа: Linux

Приложение должно использоваться во встроенной среде, поэтому оно должно быть легким и внешним (не плагином в некоторых IDE).

Ответы [ 9 ]

9 голосов
/ 17 марта 2009

Я могу от всей души порекомендовать callgrind в сочетании с KCachegrind .

5 голосов
/ 17 марта 2009

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

2 голосов
/ 17 марта 2009

Я получил хороший опыт использования профилировщика из Microsoft Visual C ++, есть и другие внешние программы, такие как Intel VTune , но большинство из них не бесплатны.

1 голос
/ 17 марта 2009

Я собираюсь использовать gprof / oprofile, если мы говорим о мире UNIX.

Вам необходимо перекомпилировать приложение (по крайней мере, с помощью gprof).

дргоЕ

Oprofile

1 голос
/ 17 марта 2009

Вы явно хотите две вещи:

  1. Для профилирования вашего кода и его измерения.

  2. Для обнаружения областей, которые могут быть оптимизированы.

Это разные проблемы. Они не одинаковы, несмотря на то, что вам, возможно, сказали.

Для задачи (1) будет предложено много хороших профилировщиков.

Для задач (2) профилировщики помогают только косвенно.
Существует гораздо более простая и, как правило, более эффективная техника.

Смотрите здесь

1 голос
/ 17 марта 2009

Для этого есть много хороших инструментов профилирования, таких как Quantify или KCachegrind. Единственная проблема, связанная с этими инструментами, заключается в том, что они замедляют производительность во время выполнения, поэтому в некоторых больших системах они могут масштабироваться недостаточно хорошо.

Иногда достаточно просто запустить отладчик и нажать ctrl-c, посмотреть трассировку стека и повторить это, возможно, 4 раза.

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

1 голос
/ 17 марта 2009

Зависит от платформы. Если вы используете MSVC, в некоторые его версии встроен профилировщик. У AMD и Intel также есть профилировщики (CodeAnalyst и VTune).

В Linux я использовал только gprof, но я знаю, что есть и другие (и я думаю, что AMD или Intel могут быть доступны и в версиях Linux)

И, конечно, весь пакет Valgrind также может быть полезен. Некоторые инструменты, такие как callgrind или cachegrind, могут дать вам много информации о производительности.

0 голосов
/ 07 апреля 2009

Для измерения производительности oprofile является хорошим выбором, поскольку в Linux Tools Project .

имеется удобный плагин для eclipse.
0 голосов
/ 17 марта 2009

Если вы работаете в Windows, я предлагаю AQTime . Поддерживает практически каждый компилятор, включая .NET, Delphi и VB (и, конечно, все компиляторы C ++ (;), и это просто лучший инструмент профилирования, который я когда-либо пробовал. И это не только профилировщик производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...