問題タブ [callgrind]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C/C++ アプリケーションでメモリ アクセスに費やされた時間をプロファイリングする方法は?
アプリケーション内の関数が費やした合計時間は、次の 2 つの要素に大きく分けることができます。
- 実際の計算に費やされた時間 (Tcomp)
- メモリ アクセスに費やされた時間 (Tmem)
通常、プロファイラーは、関数が費やした合計時間の見積もりを提供します。上記の 2 つのコンポーネント (Tcomp と Tmem) に関して費やされた時間を見積もることは可能ですか?
c++ - コマンドラインからOSXのcallgrind出力で意味のある関数名を取得するにはどうすればよいですか?
目標: callgrind (および後で cachegrind も) の出力を分析できるようになり、callgrind_annotate CLI を使用するときに意味のある変数名を確認したいと考えています。
事前調査: Valgrind ( http://valgrind.org/docs/manual/manual-core.html )の dsym フラグを認識しており、osx でデバッグ シンボルがどのように機能するかを理解していると思います ( LLDB はソース コードを表示しません)。 )。私がこのサイトで見たこの問題についてのほんの一握りの言及は、未回答であるか、-g フラグが含まれていないケースでした。
理論 (間違っている可能性があります...) : valgrind 出力の「dym=」行に基づいて、valgrind が dsym ディレクトリのパスを見つけるのに苦労しているかどうか疑問に思っています。
どのようなデータを提供できますか?
次のソースコードが与えられた場合:
次のコマンド ライン命令が使用されました。
nm -pa ビットは、デバッグ マップ情報が存在することを確認するためのものでした。また、dSYM フォルダーで dwarfdump を実行して、デバッグ情報が存在することを確認しました。annotate コマンドの出力として、「badprime.cpp の情報が収集されていません」という行が表示されます。
コンパイラ情報:
Valgrind 情報:
valgrind からの初期詳細出力:
callgrind_annotate の出力:
提供できるあらゆる支援に非常に感謝しています。
c++ - callgrind で解像度を調整する
申し訳ありませんが、問題は比較的大きなプログラムでのみ発生するため、最小限の完全な例を作成することはできません.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 フラグを使用してコンパイルし、最適化をオンにしています。