gprof — C ++ Измерение времени функций

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

Проблема с gprof заключается в том, что он печатает время операторов класса для типа данных, но мне нужно только информационное описание функций, и «-f func_name prog_name» не будет работать.

Итак, как в науке чаще всего измеряют время числовой программы?

Это примерно так:

function2()
{
}
function1()
{
function2();
funtcion1();
}
int main(){
function1();
}

1

Решение

Если вы используете пакет 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 Не печатайте пояснительный текст. Если вы более опытный, вы можете оценить этот вариант.

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

2

Другие решения

Если вам нужна более высокая точность (для функций, которые не занимают более нескольких (или менее) миллисекунд), вы можете использовать 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.

1

По вопросам рекламы [email protected]