2

为了测量 C 中函数的执行时间,英特尔 i7上的gettimeofday()Ubuntu 12.04中的 POSIX 函数有多准确?为什么?如果很难说,那么如何找出来?我找不到一个直接的答案。

4

3 回答 3

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返回 a timeval,其分辨率以微秒为单位。

于 2013-06-17T04:33:27.193 回答
0

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

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

请参阅此答案以测量系统中 gettimeofday 的准确性。

于 2013-06-17T04:21:24.360 回答
-2

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

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

执行时间会有所不同 2 但这取决于当时机器的负载量。所以不是可靠的方法。

您还可以使用:

time ./a.out

假设你的程序是 a.out

于 2013-06-17T04:19:28.263 回答