在做涉及到算法的時候,想驗證一下算法的實現優劣的時候總是需要一個算法的計算時間的判斷的,可惜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");
}