首页 热点资讯 义务教育 高等教育 出国留学 考研考公

cpu时间的计算方法

发布网友

我来回答

1个回答

热心网友

一、计算算法的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)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com