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