問題タブ [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.

0 投票する
4 に答える
3259 参照

c++ - Kcachegrind。自分のコードの関数のみを表示

コードをプロファイリングしたい。私もです:

今、私はkcachegrindこのようなウィンドウを持っています:

ここに画像の説明を入力

多くのコア関数とライブラリ関数がありますが、コード内にある関数のみを設定valgrindまたはトレースするにはどうすればよいですか (もちろん、ライブラリ関数を呼び出します)。kcachegrind

予想される出力は次のようなものです。

0 投票する
4 に答える
2330 参照

c++ - C/C++ アプリケーションでメモリ アクセスに費やされた時間をプロファイリングする方法は?

アプリケーション内の関数が費やした合計時間は、次の 2 つの要素に大きく分けることができます。

  1. 実際の計算に費やされた時間 (Tcomp)
  2. メモリ アクセスに費やされた時間 (Tmem)

通常、プロファイラーは、関数が費やした合計時間の見積もりを提供します。上記の 2 つのコンポーネント (Tcomp と Tmem) に関して費やされた時間を見積もることは可能ですか?

0 投票する
1 に答える
1676 参照

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 の出力:

提供できるあらゆる支援に非常に感謝しています。

0 投票する
1 に答える
214 参照

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 フラグを使用してコンパイルし、最適化をオンにしています。