2006-07-24

high resolution time

high resolution timeThis entry was originally published at 抓~ 抓到一隻瞌睡蟲

剛剛我哥突然問我要怎麼測一段程式跑的時間, 然後他跟我說他們實驗室的用系統時間去量. 差點昏倒, 用clock(3)去測就已經很不準了. XD

問他要在哪個platform測, 結果是在windows上面, 我記得是要用QueryPerformanceCounter, 可是我已經忘記怎麼寫了. XD 不過最近有看到這篇: 在 Windows 計時, 所以我就不用回去翻自己的code看要怎麼寫.

然後另外一個問題是他說這個東西如果要在Sun的工作站上面跑的話可以用嗎? 當然不行啦, 可是Solaris有一個曾經讓我嚇到的東西. gethrtime(3C), 我真的是被嚇到了. 至於FreeBSD跟Linux上面的話我已經忘光了, 反正我哥要用的話也是在Solaris的上面.

DESCRIPTION
The gethrtime() function returns the current high-resolution
real time. Time is expressed as nanoseconds since some arbi-
trary time in the past; it is not correlated in any way to
the time of day, and thus is not subject to resetting or
drifting by way of adjtime(2) or settimeofday(3C). The hi-
res timer is ideally suited to performance measurement
tasks, where cheap, accurate interval timing is required.

所以說完全是個剛剛好啊. 然後我沒有記錯的話, 應該是這樣的, 在x86的CPU, pentium上面會多一些register, 叫做Performance monitoring counters( — The performance monitoring counters allow processor performance events to be monitored), 這個東西在開機以後, 就會跟著你的CPU的clock(這個我沒有去確認是哪個clock喔)做counting. 根據MSDN上面某篇的說法, 在Windows上面這組QueryPerformanceCounter可以準到100 nanosecond.

我在一台K7 1G的機器測起來是沒有那麼精準就是了, 不過忘了是在哪裡看到, 這個performance counter精準度會跟你的CPU clock有關係.

沒有留言: