我遇到以下情况:
我想确定(PHP和C ++)代码的小片段的sys-和usertime。显然,我可以在Linux中使用“时间”二进制文件,但鉴于这些片段运行得如此之快,“时间”的正常(甚至是冗长的)输出不足以达到我的目的。 “时间”的准确度达到毫秒,而我需要微秒。甚至更好:纳秒。
有人能指出我可以为我做这件事的软件吗?我找到了壁挂时间的东西,但我感兴趣的是系统和使用时间。
提前致谢!
BTW:我正在运行Ubuntu 10.10 64位
答案 0 :(得分:3)
没有任何方法可以为您提供time
命令所报告的任何更精确的sys或usertime。 time
命令的大部分表观精度都是假精度。
处理这个问题的技巧是将这些代码片段放在紧密的循环中,这些循环会调用它们数千次,并确定给定循环从中获取多长时间。即便如此,你应该重复几次实验并选择最短的时间。
这是一个类比,描述为什么精度是错误的,我的意思是什么。假设有人使用秒表通过在比赛开始时手动按下按钮以及定时人员越过终点线来为比赛计时。据说你的秒表准确到100秒。但是这种精确度是错误的,因为它击中按钮的人的反应时间引起的误差相形见绌。
这非常类似于time
为什么给出精确度,假设精确到微秒,但实际上非常不精确。在任何给定的时间点,任何给定的系统都会发生很多事情,所有这些都会在计算中引入错误。来自网络IO或磁盘IO的中断,用于运行调度程序的计时器中断,其他进程对L1或L2 CPU高速缓存执行的操作。这一切都加起来。
使用在模拟CPU上运行程序的valgrind
之类的东西可以为您提供看似精确的CPU周期数。但这种精确度并不是你在现实世界中所经历的。最好使用我最初描述的技术,并接受这些时间可能是模糊的。
答案 1 :(得分:0)
gettimeofday()
会给你微秒解析。
答案 2 :(得分:0)
clock_gettime()
会给你纳秒级的分辨率。