在做涉及到算法的時候,想驗證一下算法的實現(xiàn)優(yōu)劣的時候總是需要一個算法的計算時間的判斷的,可惜Windows和linux等操作系統(tǒng)提供的記時貌似都不是很準(zhǔn),這個可能和現(xiàn)在的操作系統(tǒng)的時間片輪轉(zhuǎn)有關(guān)吧,也可能是我比較老土啦,反正我一直在x86體系的機器上是沒有找到太好的計時方式的,最近偶然和同事聊天的時候知道了一個比較精確地記時方式,感覺不錯哦,使用的是CPU指令級別的判定應(yīng)該是比較準(zhǔn)的哦,Windows系統(tǒng)的代碼如下
1 inline unsigned __int64 GetCycleCount()
2 {
3 __asm _emit 0x0F
4 __asm _emit 0x31
5 }
簡單的幾句,在VC下面是可以編譯通過的哦,算出來的結(jié)果是系統(tǒng)開機以來的CPU時鐘節(jié)拍數(shù),理論上說這個結(jié)果應(yīng)該是比較準(zhǔn)的哦,至于是不是CPU時鐘節(jié)拍那我也不是很清楚啦?感覺好像是這么個名詞哦,以前學(xué)的組成原理忘得差不多了哦,不過我可以確定的是算出來的最終結(jié)果的計量單位是一個CPU時鐘周期的八分之一。
同樣的在linux系統(tǒng)下面也有類似的方式,對應(yīng)的實現(xiàn)方法
__inline__ unsigned long long int rdtsc()
{
__asm__ volatile (".byte 0x0f, 0x31");
}