现在我正在使用 valgrind/callgrind 来衡量和比较不同的算法实现。假设一个算法有两种实现,处理链如下:
void main()
{
//Procedure 1
fun1();
//Procedure 2
fun2();
//Procedure 3
Algorithm_imp_1(); //Algorithm_imp_2();
//Procedure 4
fun4();
}
这两种实现的区别在于第三个过程,其中执行了两种不同的算法实现。为了看看哪个实现更好,我现在在 kachegrind 的帮助下使用 valgrind/callgrind。
据我所知,ifAlgorithm_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%)
由于这两种方法的整个过程都是一样的,除了第三部分,如果第三部分消耗的时间百分比很小,我们可以预计运行程序的总时间也应该很小。然而,我们在上面观察到的是矛盾的。我想知道我的分析有什么问题。谢谢!