Используя valgrind, чтобы найти наиболее интенсивную функцию? - PullRequest
0 голосов
/ 04 мая 2011

У меня программа работает очень медленно.Есть ли способ использовать valgrind, чтобы узнать, какую функцию мне нужно оптимизировать?Спасибо.

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Вы можете использовать инструмент callgrind для valgrind, который должен быть частью каждого распределения valgrind. Он запускает программу в виртуальной машине valgrind и подсчитывает количество инструкций, потраченных на каждую функцию / строку кода. Лучший интерфейс для визуализации результатов - это kcachegrind (часть KDE).

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

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

2 голосов
/ 04 мая 2011

Нет, Valgrind - это инструмент динамического анализа, используемый для уточнения ошибок распределения памяти и условий гонки потоков (среди прочего).

Вы ищете профилировщик кода, такой как Люк Стакволкер . Я ничего не знаю для * NIX систем, извините.

0 голосов
/ 04 мая 2011

Не так, как я знаю. oprofile - лучший инструмент для того, что вы хотите.

...