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

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

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

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

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

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

2 ответа

Если вы используете пакет GNU, т.е. gcc, вы можете попробовать gprof. Просто скомпилируйте вашу программу с флагами -g и -pg, а затем запуститеgprof <your_program_name>

gprof: http://www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html

РЕДАКТИРОВАТЬ: Для повышения уровня детализации вы можете запустить gprof с другими флагами:

-l (--line) разрешает построчное профилирование, давая вам хиты гистограммы, которые будут начисляться на отдельные строки кода, а не на функции.

-a Не включать частные функции в вывод.

-e <function> Исключить вывод для функции <function>, Используйте это, когда есть функции, которые не будут изменены. Например, на некоторых сайтах есть исходный код, который был одобрен регулирующим органом, и независимо от того, насколько он неэффективен, код останется неизменным.

-E <function> Также исключите время, потраченное на функцию из процентных таблиц.

-f <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.

Другие вопросы по тегам