Синхронизация функции в программе на C++, работающей в Linux
Я пытаюсь рассчитать время выполнения функции моей программы на C++, используя количество времени, которое требуется для выполнения в пространстве пользователя. Я попробовал команду clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start) изнутри программы, но я боюсь, что это время процессора, а не время пользователя, которое мне действительно нужно. Время "имя программы" в этом случае не будет работать, потому что я только синхронизирую функцию. Любая помощь будет отличной. Спасибо!
3 ответа
Использовать times()
функция, см.: http://linux.die.net/man/2/times
Это даст вам текущий пользователь и системное время для вашего процесса. Вы можете вызвать его при входе и выходе из подпрограммы и вычесть.
Вы также можете использовать профилировщик, такой как gprof, который сделает все это автоматически для вас (но потребует дополнительных затрат).
Вы можете использовать gettimeofday(), как показано здесь.
Добавьте эту функцию в ваш код:
#include <sys/time.h>
long myclock()
{
struct timeval tv;
gettimeofday(&tv, NULL);
return (tv.tv_sec * 1000000) + tv.tv_usec;
}
и использовать его для получения времени:
long start = myclock();
// do something
// ...
long end = myclock() - start;
std::cout << "[" << time->tm_hour << ":"<< time->tm_min << ":" << time->tm_sec <<
"] time:" << std::setprecision(3) << end/1000000.0 << std::endl;
Попробуйте увеличить: таймер библиотеки. Это портативный и простой в использовании. Буст-таймеры отдельно дают вам время на настенных часах, время пользователя и системное время.
http://www.boost.org/doc/libs/1_53_0/libs/timer/doc/cpu_timers.html