2010-01-27 20 views
1

目前在庫的每個呼叫的perormance,我做多個迭代,測量對各通話時間,然後計算:最好的辦法比較不同版本的庫

    對各通話
  1. 平均時間
  2. 最短時間採取
  3. 最大時間採取
  4. 標準偏差

但似乎它不是一個很好的實現方法具d。由於這些時間取決於機器的狀態,就好像CPU忙於其他處理結果一樣會受到影響。

請給我建議還是如果一個好的way.Or我可以使用一些更好的方法。

+0

在多任務系統確實沒有一個簡單的方法來測試性能對比 - 其他任務,該系統所要做的幾乎總是在你的軟件對性能的影響,但在不同的時間不同程度。 有一個可能的解決方案,可能有助於在進行測試之前提高進程/線程的優先級,然後再降低它。 – icabod 2010-01-27 17:28:00

+0

感謝icabod,我完全同意你的多任務處理。將會有助於計算組裝電話數量嗎? – Satbir 2010-01-27 17:30:41

回答

2

這是算法的基本速度的一個很好的措施,但發現總的表現是取決於你如何使用的東西。指令的數量也沒有用。

例如,假設你有一些FUNC doMath()用C寫的,有些模板doMath呼叫需要3-4個模板參數。在一個簡單的情況下,C函數通常會表現更差的性能。然而,在一箇中等到大的程序中,模板將會增長到幾十甚至幾百甚至幾千個,而不僅僅是一個。這會扼殺指令緩存。同樣適用於數據 - 某些樹實現將具有更多的內存效率,並且更臃腫的將在簡單測試中執行得更好,但在實際使用中,它們的性能會差得多。

同樣,它可能看起來像一棵樹必須通過基本測試中的表現,但你會發現隨着時間的推移它的碎片的記憶,以至於性能下降和下降隨着時間的推移,直到你的程序幾乎沒有作用。

所以,性能總是取決於你實際使用的東西,而不僅僅是它的實現。不是說它總是一個折衷,有些實現比其他實現更好。但是,最終,獲得卓越性能的唯一方法就是深入瞭解計算機在做什麼以及編譯器產生的內容,否則這對您來說永遠是個謎。

這就是爲什麼人建議分析的一部分,但分析只會告訴你這麼多,主要指的方式。你會看到症狀,但往往不是原因。這是因爲性能是基於整個系統的,並不僅僅是將指令計數加起來的簡單事情。