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