游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1965|回复: 3

请教关于程序运行时间测定的一个问题。。。

[复制链接]

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2009-9-14 13:47:00 | 显示全部楼层 |阅读模式
我翻阅过的资料中
对于程序时间测试的时间
最小只能精确到毫秒级别
试问是否有能精确到一个CPU指令级的时间测试方式?

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-9-14 13:52:00 | 显示全部楼层

Re:请教关于程序运行时间测定的一个问题。。。

指令级是不可能的,因为取时间都要好几个指令,,还有就是精度问题.
一般,可以估算出一段代码的时间(是有误差的).
这个可以通过intel的一个函数,取得CPU每秒周期数,再加上精准时钟,可以做到.
"精准时钟",网上很多.

19

主题

52

帖子

52

积分

注册会员

Rank: 2

积分
52
 楼主| 发表于 2009-9-14 16:35:00 | 显示全部楼层

Re:请教关于程序运行时间测定的一个问题。。。

我找到了一个
粗略计算CPU周期的函数
大虾来看看是否OK

#include "stdafx.h"
#include"windows.h"
int _tmain(int argc, _TCHAR* argv[])
{    
    
    double dft,dff,dfm;  //用于计算时间的变量
    LARGE_INTEGER litmp;
    long long qt1,qt2;  //存放时间的变量
    QueryPerformanceFrequency(&litmp);//获得时钟频率
    dff=(double)litmp.QuadPart;
    QueryPerformanceCounter(&litmp);//获得初始值
    qt1=litmp.QuadPart;
    
    for(int i=6000;i--;);//测试的程序
   
    QueryPerformanceCounter(&litmp);//获得终止值
    qt2=litmp.QuadPart;
    dfm=(double)(qt2-qt1);//获得对应的时间值
    dft=dfm/dff;
    printf("时间:%lf\n",dft);//输出时间单位秒
    
    printf("周期:%lf\n",dfm); //输出程序所用周期
    printf("周期每秒:%lf\n",dff);//输出时钟周期
    
    return 0;
}

3

主题

101

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2009-9-15 11:09:00 | 显示全部楼层

Re:请教关于程序运行时间测定的一个问题。。。

QueryPerformanceCounter,在多核时代,是不精确的.参考MSDN
---->GetTickCount
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 19:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表