Похоже, что вы профилировали слишком мало, чтобы получить какие-либо полезные данные.
Способ работы gprof
заключается в том, что он периодически прерывает ваш код, чтобы увидеть, в какой функции вы работали в этот момент. Если код выполняется не очень долго, он может собирать только небольшое количество точек данных. Напротив, callgrind
обрабатывает ваш код и отслеживает каждый вызов и возврат функции и проверяет, сколько времени было потрачено между перехватчиками. Это дает гораздо более полное представление, даже если пробег короткий. У этого есть недостаток, это немного замедляет программу.
Другое преимущество callgrind
заключается в том, что вы можете остановить, запустить и сохранить сбор данных. Поэтому, если вы не хотите следить за запуском вашей программы или хотите отлавливать только время, которое она выполняет, вы можете это сделать. Кроме того, есть инструмент под названием kcachegrind
, который может предоставить вам прекрасное графическое представление собранных данных.
Если вы можете терпеть замедление вашей программы в четыре раза во время ее запуска для тестирования, используйте вместо нее callgrind
- это часть valgrind
.
Если вы используете Linux, ваш дистрибутив, вероятно, имеет пакет valgrind
и пакет, включающий kcachegrind
(который может называться kdesdk или что-то еще). Стоит потратить время на изучение того, как их использовать (с ними не так легко начать, как с gprof
). Я думаю, вы найдете впечатляющий графический интерфейс пользователя kcachegrind
(посмотрите на этот снимок экрана ). И, как следует из названия, он может анализировать cachegrind
вывод.