在做涉及到算法的时候,想验证一下算法的实现优劣的时候总是需要一个算法的计算时间的判断的,可惜Windows和linux等操作系统提供的记时貌似都不是很准,这个可能和现在的操作系统的时间片轮转有关吧,也可能是我比较老土啦,反正我一直在x86体系的机器上是没有找到太好的计时方式的,最近偶然和同事聊天的时候知道了一个比较精确地记时方式,感觉不错哦,使用的是CPU指令级别的判定应该是比较准的哦,Windows系统的代码如下
1 inline unsigned __int64 GetCycleCount()
2 {
3 __asm _emit 0x0F
4 __asm _emit 0x31
5 }
简单的几句,在VC下面是可以编译通过的哦,算出来的结果是系统开机以来的CPU时钟节拍数,理论上说这个结果应该是比较准的哦,至于是不是CPU时钟节拍那我也不是很清楚啦?感觉好像是这么个名词哦,以前学的组成原理忘得差不多了哦,不过我可以确定的是算出来的最终结果的计量单位是一个CPU时钟周期的八分之一。
同样的在linux系统下面也有类似的方式,对应的实现方法
__inline__ unsigned long long int rdtsc()
{
__asm__ volatile (".byte 0x0f, 0x31");
}