我正在阅读OSTEP的 single.dvi 章节。在作业部分,它说:
您必须考虑的一件事是计时器的精度和准确性。您可以使用的典型计时器是
gettimeofday();
阅读手册页以获取详细信息。你会看到它gettimeofday()
以微秒为单位返回自 1970 年以来的时间;但是,这并不意味着计时器精确到微秒。测量背靠背呼叫以gettimeofday()
了解计时器的实际精确度;这将告诉您必须运行多少次空系统调用测试才能获得良好的测量结果。如果gettimeofday()
对您来说不够精确,您可能会考虑使用rdtsc
x86 机器上可用的指令
我写了一些代码来测试调用gettimeofday()
函数的成本,如下所示:
#include <stdio.h>
#include <sys/time.h>
#define MAX_TIMES 100000
void m_gettimeofday() {
struct timeval current_time[MAX_TIMES];
int i;
for (i = 0; i < MAX_TIMES; ++i) {
gettimeofday(¤t_time[i], NULL);
}
printf("seconds: %ld\nmicro_seconds: %ld\n", current_time[0].tv_sec, current_time[0].tv_usec);
printf("seconds: %ld\nmicro_seconds: %ld\n", current_time[MAX_TIMES - 1].tv_sec, current_time[MAX_TIMES - 1].tv_usec);
printf("the average time of a gettimeofday function call is: %ld us\n", (current_time[MAX_TIMES - 1].tv_usec - current_time[0].tv_usec) / MAX_TIMES);
}
int main(int argc, char *argv[]) {
m_gettimeofday();
return 0;
}
但是,输出将始终为 0 微秒。该函数的精度似乎gettimeofday()
恰好是一微秒。我的测试代码有什么问题?还是我误解了作者的意思?谢谢您的帮助!