代码开源(7)——测试程序执行时间

    本文介绍两种测试程序时间的方法,一种是通过间隔计数,另一种通过周期计数器。针对这两种方法,分别给出Windows和 UNIX 下的实现。

       首先介绍这两种方法的含义,摘自《深入理解计算机系统》。间隔计数:操作系统维护者每个进程使用的用户时间量和系统时间量的计数值,当计时器中断发生时,操作系统会确定哪个进程是活动的,并且对那个进程的一个计数值增加计时器间隔时间。如果系统是在内核模式中执行的,那么就增加系统时间,否则增加用户时间。这种方法一般使用clock函数实现;周期计数器:处理器内部包含一个运行在时钟周期级的计数器,每个时钟周期它都会家1。可以利用特殊的机器指令来读这个计数器的值。如果要测试一段代码的时间,只需在代码段前后分别获取计数器的值,然后将这两个计数器的值相减,除以处理器频率,就可以得到这段代码的运行时间。

       当然了,这里给出的方法适用于负载轻的系统,要在负载很重的系统获得准确的计时本身就特别困难。另外程序的运行时间受到上下文切换、高速缓存、分支预测等的影响,所以本文介绍的测试方法及实现仅仅是一种参考,尚需完善。

      下面给出Windows中的实现,一共有三个版本,都用C++实现并进行了封装。第一、二种都是属于周期计数器法,第三种是间隔计数法。三个版本的使用方式一样,除了版本二需要设置处理器频率。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值