如何精确统计一段代码的运行时间?

11 views
Skip to first unread message

Times

unread,
May 8, 2012, 8:30:56 AM5/8/12
to Chengdu Linux User Group
Hi all,

最近和同事讨论代码碰到一个问题: 没有办法精确地统计出代码的运行时间。

用的 clock, times 等精度不够,我们用了循环把量放大的方法[*]。
但又有新问题,多次运行的时间不一致。怀疑是碰到系统的调度了。

请问有什么方法、手段可以精确统计一段代码的运行时间?


Tang Daogang

unread,
May 8, 2012, 10:19:42 PM5/8/12
to cdlug_c...@googlegroups.com
这个还真不懂,帮顶。

2012/5/8 Times <qingx...@gmail.com>




--
You received this message because you are subscribed to the Google Groups "Chengdu Linux User Group" group.
To post to this group, send email to cdlug_c...@googlegroups.com.
To unsubscribe from this group, send email to cdlug_communi...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/cdlug_community?hl=en.




--
Nothing is impossible.

Too

unread,
May 9, 2012, 12:15:46 AM5/9/12
to cdlug_c...@googlegroups.com
系统调度肯定不可避免的吧,通过多次计时求平均值这样算比较精确吧。

再说任何代码最后都是运行到具体的机器不是? 要多精确呢?

2012/5/9 Tang Daogang <daoga...@gmail.com>

Times

unread,
May 10, 2012, 10:32:03 AM5/10/12
to Chengdu Linux User Group
@Too

>要多精确呢?
我想要的是精确,是指单位尽量小。比如一条指令的差别也能表示出来。

> 系统调度肯定不可避免的吧,通过多次计时求平均值这样算比较精确吧。
如果最小的差别由于精度不够,根本没有统计上,多次运行求平均就没有意义了。
比如差别只在1个时钟周期,然后统计的方法精确度只到 ms,差别根本就被略掉了。

> 再说任何代码最后都是运行到具体的机器不是?
是的.
理想情况的是最后计算出来的单位是例如时钟周期这样的,机器无关的单位。

通过在网上搜索, 586 以上 x86 有一条指令: RDTSC 可以取得 CPU 复位到当前的时钟周期数,
这条指令的描述看起很不错.

但同样存在*多次运行结果不稳定*(仍然怀疑是系统调度引起)的问题,没有办法解决。
RDTSC 调用指令本身带来的影响是在同一平台上应该是一个常量,如果解决了稳定结果的问题,这个问题就搞定了。


上面是运行时确定的方法,
另外我们还在想了一套静态确定的方法:
把目标平台的每条指令需要的时钟周期数列在一个表中
把代码编译输出的指令到表中查找,并累计
比较最后的结果。
通过不运行来绕开,运行时的调度,从而避免*多次运行结果不稳定*
不知道这种思路有没有现成的实现!
如果自己去实现,搞到前面这条表都是个体力活啊。


Loco Chen

unread,
May 11, 2012, 7:07:02 AM5/11/12
to cdlug_c...@googlegroups.com
I am focusing on this problem. How to quantify the code's running time.  I have no idea to how to deal with the requirement.  This night I will be back to talk with you.

Too

unread,
May 21, 2012, 8:50:31 PM5/21/12
to cdlug_c...@googlegroups.com
你这个要求有点令人发指啊... 好吧,是严谨细致。但是我认为是不是有点太钻牛角尖了?花费这么多精力,目的是什么呢?精力付出和收获比值高么?  好吧,我是吊丝,技术差所以不懂哈。

在 2012年5月10日星期四UTC+8下午10时32分03秒,Times写道:

Athurg Gooth

unread,
Jun 3, 2012, 7:11:30 AM6/3/12
to Chengdu Linux User Group
内核代码?加锁后用jiffies撒。
如果是应用程序,可以明确的说怎么统计都是不准确的。
Reply all
Reply to author
Forward
0 new messages