2011-01-19 75 views
2

我編寫了自己的字符串匹配算法,我想精確地測量它的時間, 將它與其他算法進行比較,以檢查我的實現是否更好。RDTSC與秒錶

我試過(StopWatch),但由於Windows操作系統運行多個進程,每次運行都會給出不同的時間。我聽說(RDTSC)可以得到 循環的消耗數量,但我不知道它是否在每次執行中給出不同的循環次數?

請幫幫我; Can(RDTSC)能夠爲C#函數提供精確且相同的循環測量,或者與(StopWatch)類似?在沒有其他正在運行的進程的情況下,單獨獲取C#函數的週期數的最佳方法是什麼?並非常感謝任何幫助或提示

回答

4

由於多個進程運行Windows操作系統,它在每次運行中給予不同的時間。

這就是所有基準的性質。

良好的基準測試通過統計方法抵消了這一點,即經常測量足以抵消來自其他正在運行的程序的任何副作用。 這是是要走的路。就精度而言,StopWatch對基準測試綽綽有餘。

這需要幾件事情(沒有進入統計的細節,這我不太擅長其一):

  1. 的個人應該持續足夠長的時間,以抵消由測量方法(甚至RDTSC介紹測量不精確並不完全準確),並抵消調用開銷。畢竟,你想測量你的算法,而不是運行測試循環和調用測試方法所花費的時間。
  2. 足夠的測試運行對結果有信心:數據越多,統計的穩健性就越高。
  3. 儘量減少外部影響,特別是系統性偏見。也就是說,在相同條件下在同一臺機器上運行所有測試,否則無法比較結果。完全一樣。此外,如果您運行多次測試(並且您應該!)交錯使用不同的方法。
+0

+1爲統計手段。這對於瞭解平均運行時間可能是最好的方法。您可以進一步計算標準偏差,以瞭解大多數採樣樣本的變化程度。 – 2011-01-19 16:33:04