为什么boost :: auto_cpu_timer显示> 100%的利用率?

问题描述:

要做定时比较,我想使用boost :: timer。这里是执行一些矢量操作一个简单的测试情况:为什么boost :: auto_cpu_timer显示> 100%的利用率?

std::vector<float> hv(1000*1000); 
std::generate(hv.begin(), hv.end(), rand); 
{ 
    boost::timer::auto_cpu_timer t; 
    std::transform(hv.begin(), hv.end(), hv.begin(), sqrtf); 
} 

混乱的部分是,升压::计时器报告此:

0.011577s壁,0.020000s用户+ 0.000000s系统= 0.020000 s CPU(172.8%)

我的用户空间时间如何超过挂墙时间?

最有可能的,如果你使用线程,它会显示花在在这个过程中

+0

这几乎是main()的全部。没有额外的线程是由我产生的。 – 2015-04-04 18:01:02

所有线程通过增加更多的测试代码的CPU时间的用户空间时会跳转到0.03秒,然后以0.04秒

所以看起来用户空间持续时间只能精确到10毫秒以内,导致CPU利用率计算错误。

+1

在某些平台上使用旧的升压定时器实现时,这确实是一个众所周知的事实。 _“尽管nanosecond_type能够代表1纳秒,但常见操作系统定时器的实际分辨率可能会低得多,对于大约2010年的桌面系统的挂钟时间,分辨率往往不会超过1微秒,对于用户和系统时间,典型的分辨率在Windows上是15毫秒,在POSIX上是10毫秒。“_ http://www.boost.org/doc/libs/1_57_0/libs/timer/doc/cpu_timers.html – sehe 2015-04-04 19:21:47