2011-10-27 52 views
1

我用函数clock()测量了时间,但它给出了不好的结果。我的意思是,对于使用一个线程的程序和使用多线程的OpenMP运行的相同程序,它会得到相同的结果。但事实上,我注意到我的手表有很多线程程序计数更快。 所以我需要一些挂钟定时器...多线程程序的测量时间

我的问题是:这个问题有什么更好的功能? clock_gettime()或mb gettimeofday()?还是MB别的东西?

if clock_gettime(),然后用哪个时钟? CLOCK_REALTIME或CLOCK_MONOTONIC?

使用Mac OS X(雪豹)

回答

1

我觉得时钟()计算所有线程之间的总CPU使用率,我有这个问题太...

挂钟计时方法的选择是个人喜好。我使用内联包装函数来获取时间戳(取两个时间戳的差值来计算处理时间)。为了方便,我使用了浮点(单位是秒,不必担心整数溢出)。使用多线程时,有很多异步事件,在我看来,时间低于1微秒是没有意义的。这工作对我非常好,到目前为止:)

无论你选择,一个包装是试验

inline double my_clock(void) { 
    struct timeval t; 
    gettimeofday(&t, NULL); 
    return (1.0e-6*t.tv_usec + t.tv_sec); 
} 

使用最简单的方法:

double start_time, end_time; 
start_time = my_clock(); 
//some multi-threaded processing 
end_time = my_clock(); 
printf("time is %lf\n", end_time-start_time); 
3

如果你想挂钟时间,并且clock_gettime()可用,这是一个不错的选择。如果您正在测量时间间隔,请使用CLOCK_MONOTONIC,如果要获取一天中的实际时间,请使用CLOCK_REALTIME

CLOCK_REALTIME为您提供一天的实际时间,但会受到系统时间调整的影响 - 所以如果系统时间在程序运行时进行调整,会扰乱使用时间间隔的测量。

CLOCK_MONOTONIC不给你一天的正确时间,但它确实指望以同样的速度,并且不受更改系统时间 - 所以它是理想的测量时间间隔,但没用当一天的正确时间是需要显示或时间戳。