4

我处于以下情况:

我想确定(PHP 和 C++)代码的小片段的系统和用户时间。显然,我可以在 Linux 中使用“时间”二进制文件,但鉴于这些代码片段运行得如此之快,“时间”的正常(甚至冗长)输出不足以满足我的目的。“时间”的精度达到毫秒,而我需要微秒。甚至更好:纳秒。

谁能给我指出一个可以为我做这件事的软件?我找到了 walltime 的东西,但我感兴趣的是 sys- 和 usertime。

提前致谢!

顺便说一句:我正在运行 Ubuntu 10.10 64 位

4

3 回答 3

3

正如命令所报告的那样,没有任何方法可以为您提供任何等效的 sys 或 usertime ,time这将更加精确。该命令的许多表观精度time实际上是错误的精度。

处理这个问题的技术是将这些代码片段放在紧密的循环中,调用它们数千次,并计算出给定循环从中花费的时间。即使这样,您也应该重复实验几次并选择最低的时间。

这是一个类比,描述了为什么精度是错误的,以及我的意思。假设您有人使用秒表计时,在比赛开始时以及被计时的人越过终点线时手动按下按钮。假设您的秒表精确到 100 秒。但这种精确度是错误的,因为它与按下按钮的人的反应时间引入的误差相形见绌。

这非常类似于为什么time给你的准确度应该以微秒为单位,但实际上明显不那么精确。在任何给定的时间点,任何给定的系统都会发生很多事情,所有这些事情都会在计算中引入错误。来自网络 IO 或磁盘 IO 的中断,用于运行调度程序的定时器中断,其他进程对 L1 或 L2 CPU 缓存所做的事情。这一切都加起来了。

使用类似的东西valgrind在模拟 CPU 上运行您的程序可以为您提供看似准确的 CPU 周期数的数字。但这种精确度并不是你在现实世界中会体验到的。最好使用我最初描述的技术并接受这些时间可能是模糊的。

于 2010-11-21T15:29:56.740 回答
0

gettimeofday()会给你微秒级的分辨率。

于 2010-11-21T15:19:32.957 回答
0

clock_gettime()会给你纳秒级的分辨率。

于 2010-11-21T20:09:56.730 回答