0

申し訳ありませんが、問題は比較的大きなプログラムでのみ発生するため、最小限の完全な例を作成することはできません.callgrindプロファイリングが何を達成することになっているのかという誤解とは対照的に、これ自体が「バグ」でさえあるかどうかはわかりません.

実行時間が約 50 50 の 2 つの連続した部分に分割される大きなプログラムがあります。最初の部分は主にファイルの読み取りであり、2 番目の部分は主に計算です。

私が期待する関数呼び出しの順序は次のとおりです。

呼び出しスコープ、呼び出し先

メイン Part1_main

Part1_main Part1_main_subfunction_1

Part1_main Part1_main_subfunction_2

Part1_main Part1_main_subfunction_3

メイン Part2_メイン

Part2_main Part2_main_subfunction_1

Part2_main Part2_main_subfunction_2

..

..

コードで callgrind を実行すると (そして osx の kcachegrind で結果を表示すると)、関数呼び出しに関するいくつかの結果が得られますが、これは 1 つのことを除いて、ほぼ予想どおりです。 : プロファイルの出力は定性的には

関数、Pct_time、Self_time

Part1_メイン 50 4

Part2_メイン 50 50

Part1_main_subfunction_1 20 4

Part1_main_subfunction_2 15 5

..

..

..

2番目の関数の自己時間が非常に高いという解釈は何ですか? プロファイラーは、他の関数を呼び出していないと考えているようです。可能性は低いですが、関数 2 のすべてがインライン化されている可能性があるため、これ以上の解決策はないはずです。これが正しい場合、これは非常に興味深いプロファイリング結果をもたらしません。

この種のものに遭遇した場合、プロファイラーにさらに解像度を表示させるにはどうすればよいでしょうか? または、私の直感が間違っているとすれば、他に何がこの動作を引き起こしているのでしょうか?

callgrind Web サイトの指示に従って、-g フラグを使用してコンパイルし、最適化をオンにしています。

4

1 に答える 1

1

デフォルトでは、kcachegrind は重みの小さい関数を非表示にしますが、カスタマイズできます。ここで答えを参照してください: make callgrind show all function calls in kcachegrind callgraph

于 2017-03-07T22:27:44.943 に答える