首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

怎么精确知道算法的运行时间

2012-03-13 
如何精确知道算法的运行时间?本人常听论坛上的有些朋友说起某某程序、算法执行多少多少时间,本人水平有限,

如何精确知道算法的运行时间?
本人常听论坛上的有些朋友说起某某程序、算法执行多少多少时间,本人水平有限,虽然也不时编写一些小算法,但却不知各位高手是如何得到的运行时间,请各位高人指教,谢谢了。

[解决办法]
在windows平台,至少有3个级别的函数取得系统时间,他们是:

1。GetTickCount,返回在开机后的毫秒数,两次调用它的差即为程序运行时时间,这个函数的精度只能到毫秒级。

2。使用API 函数 QueryPerformanceCounte,这个函数的精度可到微秒级,下面给出为封装的函数(currTime)的代码。

3。使用一条CPU指令,RDTSC,这条指令可取得自开机后经历的CPU时钟的个数,CPU时钟频率越高,用这条指令得到的时间的的精度也愈高,如果你的CPU主频为2G,那么他的精度为0.5*10^-9秒,关于更详细的资料,请参阅:http://www.cppfans.com/articles/system/cpuspd_usdly.asp


static LARGE_INTEGER freq;

static bool initFreq()
{
if ( !QueryPerformanceFrequency( &freq) )
return false;
else
return true;
}

double currTime() //使用高精度计时器
{
if (freq.QuadPart==0)
{
bool bRet=initFreq();
if (!bRet)
return 0;
}
LARGE_INTEGER performanceCount;
BOOL result=QueryPerformanceCounter( &performanceCount );
double time= performanceCount.HighPart * 4294967296.0 + performanceCount.LowPart;
time=time / ( freq.HighPart * 4294967296.0 + freq.LowPart);
return time;
}

热点排行