ubuntu / i7上的执行时间和gettimeofday

时间:2013-06-17 04:11:51

标签: c

要测量C中函数的执行时间, Intel i7 Ubuntu 12.04 中POSIX函数gettimeofday()的准确度如何?为什么?如果很难说,那该怎么找出来?我找不到直接的答案。

3 个答案:

答案 0 :(得分:5)

如果您正在构建秒表,则需要一个无法适应任何时间服务器的一致时钟。

#include <time.h>
...
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC_RAW, &ts);

如果CLOCK_MONOTONIC_RAW不存在,请改用CLOCK_MONOTONIC。如果您想要时间,则仍然不应使用gettimeofday

clock_gettime(CLOCK_REALTIME, &ts);

这种时钟的定时器是高分辨率,但它会移动。 timespec支持小至纳秒的分辨率,但您的计算机可能只能在微秒内的某个位置进行测量。

gettimeofday会返回timeval,其分辨率为微秒

答案 1 :(得分:0)

gettimeofday应该足够准确,至少是为了比较相对表现。但是,为了消除由于上下文切换和IO相关延迟导致的不准确性,您应该运行该功能,例如,至少数百次并获得平均值。

您可以通过确保每次对功能进行基准测试时获得大致相同的结果来调整执行该功能的次数。

同样see this answer来衡量系统中gettimeofday的准确性。

答案 2 :(得分:-2)

您可以在代码的开头和结尾使用gettimeofday()来查找程序的开始时间和结束时间之间的差异。像

//start = gettimeofday
//your code here
//end = gettimeofday

执行时间将是2之间的差异 但取决于机器的负载量是多少。所以不是一种可靠的方法。

您也可以使用:

time ./a.out

假设您的程序是a.out