現在、valgrind/callgrind を使用して、さまざまなアルゴリズムの実装を測定および比較しています。アルゴリズムに 2 つの実装があり、処理チェーンが次のようになっているとします。
void main()
{
//Procedure 1
fun1();
//Procedure 2
fun2();
//Procedure 3
Algorithm_imp_1(); //Algorithm_imp_2();
//Procedure 4
fun4();
}
これら 2 つの実装の違いは、2 つの異なるアルゴリズムの実装が実行される 3 番目の手順にあります。どちらの実装が優れているかを確認するために、現在、kachegrind の助けを借りて valgrind/callgrind を使用しています。
私がイメージできる限り、Algorithm_imp_1()
が よりも効率的である場合Algorithm_imp_2()
、その 2 つの指標: 1 つはプログラムの実行に使用された絶対時間であり、もう 1 つは 3 番目の手順にかかる時間の割合であり、小さいはずです。ただし、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%)
両方の方法の全体の手順は、3 番目の部分を除いて同じであるため、3 番目の部分の消費時間の割合が小さければ、プログラムの実行にかかる全体の時間も短くなるはずです。しかし、上記で観察したことは矛盾しています。私の分析の何が問題なのか疑問に思っていました。ありがとう!