标签归档:周期计数器测量程序执行时间

测量程序执行时间-周期计数器如何测量执行时间

摘自“深入理解计算机系统”
周期计数器如何测量程序的执行时间
周期计数器提供了一个非常精确的工具,可以测量一个程序执行中两个不同点之间经过的时间。我们的周期计数器通过在程序中调用start_counter 和调用get_counter之间总的周期数。这些程序不记录那些进程使用了这个周期,只记载了这个计数器开始和结束的位置,并取两个之差作为周期计数器测量程序执行时间。
例:测量某个程序P的运行时间的一种简单方法就是用周期计数器对P的一次执行进行记时,如下代码所示:
double time_P(){
start_counter(); // 开始计数器
P(); //开始运行程序P
return get_counter(); //返回计数器时间
}
如果在这两次调用计数器里面,有其它的另外进程执行,那么这段代码就很容易产生令人误解的结果。如果机器负载很重,或者如果P的运行时间特别长,那么这个get_counter检测出的程序运行时间都是同实际正常值存在较大差异。
如何将高速缓存对测量程序的执行时间的影响?我们需要在程序开始时,加上P(),把程序加载到高速缓存中
double time_p(){
P();
start_counter(); // 开始计数器
P(); //开始运行程序P
return get_counter(); //返回计数器时间
}

我们可以看出,周期计数器需要进行N次测量,然后通过取n次近似值,来预估程序的执行时间。