Проблемы с выборкой по времени с gprof - PullRequest
4 голосов
/ 30 августа 2010

Я пытаюсь профилировать некоторый код c ++, скомпилированный с g ++, включая опцию -pg, используя gprof.Однако, несмотря на то, что программе требуется 10-15 минут для запуска на моем компьютере (с максимальным использованием ЦП), столбцы% time, накопленных секунд и self секунд таблицы, созданной gprof, равны всего 0,00 с!Столбец вызовов содержит правильно выглядящие данные, например, более 150 000 вызовов базовой функции.Вот пример собранных данных:

  %   cumulative   self              self     total           

 time   seconds   seconds    calls  Ts/call  Ts/call  name

  0.00      0.00     0.00   156012     0.00     0.00  perm::operator[](int) const

  0.00      0.00     0.00   153476     0.00     0.00  perm::perm(void)

Программа не использует строки, и единственным #include является iostream (используется только для вывода окончательного ответа), поэтому он не может быть медленным из-заСтрока находит и сравнивает или другие подобные медленные внешние функции, как предложено в этом вопросе: невозможно накопить время с помощью gprof - gnu profiler

Сама программа завершает работу нормально, и у меня нет оснований полагать,что данные профиля записываются неправильно (как было предложено здесь: gprof сообщает, что время не накапливается )

Поскольку все это делается в windows 7, при попытке использовать Shark или Valgrindне вариант.

Есть ли причина, по которой он записывает 0,00 с, потраченные на каждую функцию?

1 Ответ

3 голосов
/ 31 августа 2010

gprof не считает заблокированное время, например, ввод / вывод или другие данные. Кроме того, «self time» обычно очень мало в любой подпрограмме, которая выполняет всю свою работу в подфункциях, например, если вы в основном используете библиотеку в DLL, где gprof ее не видит. Проверьте этот ответ.

...