Monday, August 03, 2009

軟體設計備忘錄《QueryPerformanceCounter()》

星期天沒出去玩,在家裡寫一個Anonymous Pipe Client & Server小程式來熟析Win32的Pipe IPC機制。寫完之後就想來測測看Pipe和另外某個Design的效能差異,就來評測一下IPC的Round-Trip Time。Win32底下要拿到High Resolution的CPU Tick,大概就屬QueryPerformanceCounter()最方便。不過在Modern Architecture下,有幾件事情要注意:

  1. 現代的CPU都有動態調頻的機制,就算你把Escaped CPU Tick算出來,要還原成Second還是需要功夫。
  2. 在SMP的環境下,CPU Tick不是同步的,要把你計算的目標都綁在同一個CPU上,這樣量出來Tick才會準。
  3. 千萬不能假設QueryPerformanceFrequency()就是CPU Clock Freq. (同樣的也不能假設QPC就是CPU Tick?)

另外,有誰可以和我清楚解釋AMD的TSC-Drift問題嗎? XD

 

延伸閱讀:

http://www.virtualdub.org/blog/pivot/entry.php?id=106

http://forums.indiegamer.com/showthread.php?p=95424

http://lkml.org/lkml/2005/11/4/173

http://blogs.msdn.com/oldnewthing/archive/2008/09/08/8931563.aspx

No comments: