現在我正在使用valgrind/callgrind來測量和比較不同的算法實現。假設有兩種實現一種算法,並且處理鏈如下:我可以依靠valgrind/callgrind的絕對成本來衡量和比較不同的實現嗎?
void main()
{
//Procedure 1
fun1();
//Procedure 2
fun2();
//Procedure 3
Algorithm_imp_1(); //Algorithm_imp_2();
//Procedure 4
fun4();
}
這兩種實現之間的差別在於在第三過程,其中執行兩個不同的算法的實現。爲了查看哪個實現更好,我現在在kachegrind的幫助下使用valgrind/callgrind。
據我所知,如果Algorithm_imp_1()
比Algorithm_imp_2()
更有效率,它的兩個指標:一個是用於運行程序的絕對時間,另一個是第三個程序所用時間的百分比,應該更小。然而,我與的valgrind獲得什麼都非常混亂:
Method 1 whole procedure: overall circle 106858896849
Algorithm_imp_1(): circle 2971828457(3.03%)
Method 2 whole procedure: overall circle 137889090577
Algorithm_imp_2(): circle 351826053(0.26%)
因爲對於這兩種方法的整個過程都是一樣的預期。第三部分,如果第三部分所消耗的時間比例很小,我們可以期待運行程序的總時間也應該很小。但是,我們上面看到的是矛盾的。我想知道我的分析有什麼問題。謝謝!
如果您使用Valgrind多次運行程序,您是否總能得到相同的數字? –
謝謝,我已經檢查過。我發現,對於示例程序,我運行了多次callgrind,可以獲得相似或包含編號。 – feelfree
我想你需要顯示其他部分的時間,因爲正如你所指出的那樣,即使唯一改變的部分要小得多,你也會看到30%的增加。或者將main()中的所有內容放在一個循環中進行一百萬次迭代,以清除任何隨機小波動。 –