cpu时间

王朝百科·作者佚名  2010-03-18  
宽屏版  字体: 小  |  中  |  大  |  超大  

CPU时间即反映CPU全速工作时完成该进程所花费的时间

●cpu时间计算

计算算法的CPU运行时间

一般有这么几个函数可以使用:

<time.h> 中的std的clock() 可以精确到1ms

<windows.h> 中的win下常用的GetTickCount可以精确到18-20ms

当然这些都不是C或是C++标准支持的。

我们先来看看clock()的用法:

#include <time.h>

#include <stdio.h>

int main()

{

time_t t; //一定要这个类型

long i;

t = clock();

for (i = 0; i < 1024 * 32768; ++i) ; //做些耗时的事情,可能就是你的算法

printf("time consumed: %d ms", clock() - t); //这样输出的就是耗时的毫秒数了

return 0;

}

GetTickCount()用法类似。

现在我们来介绍一个精度更加高的方法,直接读取CPU开机以来执行的机器周期数。

我们要用到一条汇编指令:RDTSC (就是ReaD TimeStamp Count) 其精度可以达到ns级别。(准确地说精度是1/你的CPU的时钟频率,这也是极限)

long hStart, lStart, hEnd, lEnd;

//分别代表开始的高位和低位以及结束的高位和低位,由于NS精度实在太高,所以数值会很大,1个32位的变量无法存储,需要两个32位变量

long hCnt, lCnt;//差值的高位和低位

__asm //内嵌汇编的语法可能不同编译器有些不同

{

RDTSC

mov hStart, edx

mov lStart, eax

}

//此处放上耗时的代码

__asm

{

RDTSC

mov hEnd, edx

mov lEnd, eax

//获取两次计数器值得差

sub eax, lStart

cmp eax, 0

jg L1

neg eax

jmp L2

L1: mov lCnt, eax

L2: sub edx, hStart

mov hCnt, edx

}

unsigned long timer = (hCnt < <32) + lCnt; //得出最终结果,timer就是所得的差值(单位ns)

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有