如何精确知道算法的运行时间?
本人常听论坛上的有些朋友说起某某程序、算法执行多少多少时间,本人水平有限,虽然也不时编写一些小算法,但却不知各位高手是如何得到的运行时间,请各位高人指教,谢谢了。
[解决办法]
在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;
}