繁体   English   中英

测量多线程程序的时间

[英]measuring time of multi-threading program

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

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

如果clock_gettime(),那么用哪个时钟? CLOCK_REALTIME还是CLOCK_MONOTONIC?

使用mac os x(雪豹)

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

CLOCK_REALTIME为您提供实际的一天中的时间,但会受到系统时间调整的影响 - 因此,如果在程序运行时调整系统时间,则会使用它来查看间隔测量值。

CLOCK_MONOTONIC没有给你正确的时间,但它确实以相同的速率计数并且不受系统时间变化的影响 - 所以它非常适合测量间隔,但是当需要正确的时间来显示时,它是无用的对于时间戳。

我认为clock()计算所有线程中的总CPU使用率,我也有这个问题...

挂钟计时方法的选择是个人喜好。 我使用内联包装函数来获取时间戳(使用2个时间戳的差异来计算处理时间)。 为方便起见,我使用了浮点数(单位是秒,不必担心整数溢出)。 对于多线程,有很多异步事件,在我看来,时间低于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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM