Мне нужно измерить время программ на C ++, особенно общее время выполнения некоторых рекурсивных функций. Внутри других функций есть много вызовов функций. Моей первой мыслью было реализовать некоторые функции измерения времени в реальном коде.
Проблема с gprof заключается в том, что он печатает время операторов класса для типа данных, но мне нужно только информационное описание функций, и «-f func_name prog_name» не будет работать.
Итак, как в науке чаще всего измеряют время числовой программы?
Это примерно так:
function2()
{
}
function1()
{
function2();
funtcion1();
}
int main(){
function1();
}
Если вы используете пакет GNU, т.е. gcc, вы можете попробовать gprof. Просто скомпилируйте вашу программу с флагами -g и -pg, а затем запустите
gprof <your_program_name>
дргоЕ: http://www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html
РЕДАКТИРОВАТЬ:
Чтобы повысить уровень детализации, вы можете запустить gprof с другими флагами:
-l (—line) позволяет построчное профилирование, давая вам хиты гистограммы, которые будут начисляться на отдельные строки кода, а не на функции.
-Не включайте частные функции в вывод.
-е <function>
Исключить вывод для функции <function>
, Используйте это, когда есть функции, которые не будут изменены. Например, на некоторых сайтах есть исходный код, который был утвержден регулирующим органом, и независимо от того, насколько он неэффективен, код останется неизменным.
-Е <function>
Также исключите время, потраченное на функцию из процентных таблиц.
-е <function>
Противоположность -e: только отслеживать время в <function>
,
-F <function>
Используйте только время в <function>
при расчете процентов.
-b Не печатайте пояснительный текст. Если вы более опытный, вы можете оценить этот вариант.
-Накопить образцы. Запустив программу несколько раз, можно получить
лучшая картина того, где тратится время. Например, медленная процедура не может быть вызвана
для всех входных значений, и, следовательно, вы можете ввести в заблуждение, читая, где найти
проблемы с производительностью.
Если вам нужна более высокая точность (для функций, которые не занимают более нескольких (или менее) миллисекунд), вы можете использовать std::chrono::high_resolution_clock
:
auto beginT = std::chrono::high_resolution_clock::now();
//Your computation here
auto endT = std::chrono::high_resolution_clock::now();
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(endT - beginT).count()
std::chrono::high_resolution_clock
можно найти в chrono
заголовок и является частью стандарта C ++ 11.