我正在运行 Ubuntu 12.04 并使用 gcc 编译器编译我的 C/C++ 程序。我想对一个函数进行基准测试。据我所知,在 POSIX 系统上有两个标准函数用于计算时间,并且都在 Ubuntu 上显示不稳定的结果:
获取时间clock_gettime
这是我的代码:
int main()
{
float msec=0;
//struct timespec start,end;
struct timeval start,end;
//clock_gettime(CLOCK_MONOTONIC_RAW,&start);
//clock_gettime(CLOCK_REALTIME,&start);
gettimeofday(&start,NULL);
get_height(); //function i want to benchmark
/* usleep(1000000);*/
//clock_gettime(CLOCK_REALTIME,&end);
gettimeofday(&end,NULL);
//msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_nsec-start.tv_nsec)/(float)1000000;
msec = (end.tv_sec-start.tv_sec)*1000 + (end.tv_usec-start.tv_usec)/(float)1000;
printf("%0.2f ms.\n",msec); //41-44
}
问题是每次运行程序时显示的毫秒结果都不稳定/不同。一些示例读数为:38.16 毫秒。42.72 毫秒。35.70 毫秒。45.13 毫秒。
但是,当我使用 usleep() 函数进行测试时,结果显示 1000 毫秒。正确。知道我应该使用什么库/函数来准确计时我的函数吗?
编辑: 这进一步澄清了上述clock_gettime函数仅在Ubuntu 12.04上不准确。我在其他机器上测试过,结果显示准确。即使在Windows上,等效的query_performance_counter()函数也显示准确的结果。