2012-11-26 39 views
2

迭代基準的不同算法的效率,對簡單的任務,比較它們的數量,我發現最常見的方式是設置的時間一常數來遍歷任務,並測量時間每個算法花費的時間間隔。基準每恆定間隔

但是,如果次數設置得太小,則算法中的間隔差將會太小,並且可以通過外部因素掩蓋。如果您將次數設置得太大,那麼執行時間將會很長。所以你必須通過試用結束錯誤來猜測正確的次數。

而不是做這種方式,我覺得它更有意義來設置要運行每個算法一定的時間間隔,然後測量多少次迭代可以在區間每種算法進行。

通過這樣做,基準的可靠性將更加穩定。以傳統方式,對於需要時間的任務,基準將更加可靠。

我還沒有見過這種基準測試方式。人們是否真的這樣做了,這種測量方式是否有基準框架?我問這是一個非語言特定的問題,但如果有這樣的框架,特別是對於Ruby,請介紹一些。或者我錯了這個想法?

+0

我已經看到了它這樣做的方式,但它實際上只是對我們如何使用Ruby的內置'Benchmark'做旋轉。如果你在測試中使用的時間間隔太小,你可能會部分運行一個複雜的例程,並且必須迭代地增加值,直到你最終得到一些有意義的東西,所以基本上它只有六個,另外一個是六個。 –

+0

@theTinMan對於固定的時間間隔,我記住至少幾秒或者幾十秒,並且通過我在問題中提到的「簡單任務」,我的意思是足夠簡單,能夠運行一個有意義的數字的時間間隔內。 – sawa

+0

它仍然是我們現在所做的一個變化。我們不需要指定循環次數,而是指定要循環的秒數並計算迭代次數。我們仍然會爲了得到有意義的差異而煩惱值。系統上的虛假事件仍可能影響測試,因此仍需要多次測試才能降低測試結果。 –

回答

1

看看perfer:

https://github.com/jruby/perfer

這有幾個機制,包括迭代/秒。不要擔心,這是一個JRuby的回購協議,它適用於所有的Ruby實現,被寫爲2012編程之夏

+0

它看起來很有趣。 – sawa