問題タブ [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++ - Qt Valgrind Function Profiler でコードをスキップする
Qt では、 valgrindを統合してコードを分析できます。分析モードで Valgrind Function Profiler を使用し、[開始]ボタンをクリックします。問題は、興味のない巨大な起動シーケンスがあることです。
valgrind/callgrind.hで定義が見つかりました。
- CALLGRIND_START_INSTRUMENTATION
- CALLGRIND_STOP_INSTRUMENTATION
- CALLGRIND_DUMP_STATS
この記事によると、次のオプションでvalgrindを実行する必要があります。
valgrind --tool=callgrind --instr-atstart=no ./application
しかし、Qt内でそれを行うにはどうすればよいですか? 素敵な GUI とナビゲーションを引き続き使用したいと思います。ありがとう!
c++ - KCachegrind と Callgrind を使用してコードの一部のみを測定する方法は?
valgrindを使用してコードを分析したいと考えています。問題は、興味のない巨大な起動シーケンスがあることです。
valgrind/callgrind.hで定義が見つかりました。
- CALLGRIND_START_INSTRUMENTATION
- CALLGRIND_STOP_INSTRUMENTATION
- CALLGRIND_DUMP_STATS
この記事によると、次のオプションでvalgrindを実行する必要があります。
valgrind --tool=callgrind --instr-atstart=no ./application
これを行うと、次の 2 つのファイルが作成されます。
- callgrind.out.16060
- callgrind.out.16060.1
次に、kcachegrind を使用して結果を視覚化します。これはうまく機能しますが、スタートアップ シーケンスをスキップするためのマクロは何もしていないようです。測定したい場所だけでパフォーマンスを測定するにはどうすればよいですか?
c++ - Valgrind - callgrind Profiler : どの関数がより多くの時間を取っているかを知る方法
valgrind - callgrind ツールを使用して、特定の実行可能ファイルのプロファイルを作成しようとしています。を使用して注釈付き出力を作成しましcallgrind_annotate --auto=yes
た。作成された出力は、私の理解によれば、特定の命令が呼び出された回数である Ir count について教えてくれますが、コードのどのセクションの実行に最大の時間がかかっているかを知りたいです。
どうすればそれを知ることができますか?
私のアプリケーションで、より時間がかかっている部分を見つけたい...特定の関数が他の関数よりも多くの回数呼び出される場合があります..しかし、呼び出される回数が少ない関数は、その関数よりも時間がかかっています他の
valgrind - callgrind に kcachegrind コールグラフ内のすべての関数呼び出しを表示させる
大規模なプロジェクトのプロファイリングに valgrind ツールの callgrind と kcachegrind を使用していましたが、callgrind がすべての関数 (最も高価な関数だけでなく) の統計を報告する方法があるかどうか疑問に思っていました。
具体的に言うと、kcachegrind でコールグラフを視覚化したところ、かなり高価な関数だけが含まれていましたが、プロジェクトのすべての関数をコールグラフに含める方法があるかどうか疑問に思っていました。プロファイリング情報を生成するために使用されるコマンドを以下に示します。
valgrind にオプションを指定する必要があるかどうか、または別の最適化でアプリケーションをコンパイルする必要があるかどうかはわかりません。これは些細なことかもしれませんが、解決策を見つけることができませんでした。これに関するポインタは高く評価されています。
ありがとう !
c++ - kcachegrind の理解に助けが必要
kcachegrind を理解しようとしていますが、そこにはあまり情報がないようです。たとえば、左側のウィンドウには、「Self」とは何ですか、「incl.」とは何ですか? ( 1 コアを参照)。
私はいくつかの弱いスケーリング テストを行いましたが、通信がないため、キャッシュ ミスと関係があると思います。しかし、私が見る限り、1 コアと 16 コアの両方で同じ数のデータ ミスがあります。 16 コアを参照してください。
1 コアと 16 コアの間に見られる唯一の違いは、16 コアでは memcpy の呼び出しが大幅に少ないことです (これについては説明できます)。しかし、1 つのコアでは実行時間が 0.62 秒であるのに対し、16 コアでは実行時間が 1 秒に近い理由はまだわかりません。各プロセッサは同じ量の作業を行っています。誰かが kcachegrind で何を探すべきか教えてくれたら、それは素晴らしいことです。kcachegrind と valgrind を使用するのはこれが初めてです。
編集:私のコードは、行列を圧縮された行形式で連結します。サブマトリックスのエントリをループし、memcpy を使用して値を結果マトリックスにコピーする必要があります。コードは次のとおりです: - 2 つ以上のリンクを投稿できないので、コメントに投稿します。
ループ自体で valgrind を開始しただけです。ループは、0.62 秒の実行時間と 1 秒の実行時間の違いを生んでいるものでもあります。最も時間がかかる部分は memcpy の呼び出しです (以下の github gist の 37 行目)。これをコメントアウトすると、コードは 0.2 秒未満で実行されますが、1 コアから 16 コアの間でまだ増加しています (約30%増)。
24 個のコア (2 つの Intel® Xeon® Processor E5-2690 v3) で構成される haswell ノードでコードを実行しています。
各コアには 5 GB のメモリが搭載されています。
c++ - セグメントのオーバーフローを報告する Valgrind
valgrind / callgrind でプログラムを実行すると、次のメッセージが頻繁に表示されます。
==21734== brk segment overflow in thread #1: can't grow to 0x4a39000
(住所が違う)
スタック オーバーフロー メッセージが先行しないことに注意してください。
このメッセージに関するドキュメントが見つかりません。何がオーバーフローしているのか正確にはわかりません。
問題が何であるかを理解するのを手伝ってくれる人はいますか? これは valgrind の問題ですか、それとも私のプログラムの問題ですか?
c++ - C++ プロファイリングは、ベクトルのホットスポットを明らかにします。最適化する方法は?
での多くの操作を含む callgrind / qcachegrind を使用して、いくつかの信号処理コードをプロファイリングしていstd::vector<float>
ます。
Mac OS のビルトインnearbyint
機能からかなり深刻なホットスポットが発生しています。
これは、このベクトル関数によってほぼ完全に呼び出されているようです。
これは、多くのクラス メンバー関数から呼び出されます。私には、_push_back_slow_path
割り当てのボトルネックのように見えますが、その理由は完全にはわかりません。実行ループのどの時点でも、ベクトルのサイズを変更していません。起こっていることはすべて、参照によってコピーされたり、反復されたり、data()
op を使用して vDSP 操作の生のポインターを取得したりすることがあります。例えば 。. .
vector
ホットスポットに未加工のデータ ポインターを渡しているときに、vDSP 関数がこのホットスポットの原因になるのはなぜですか?- このホットスポットの原因として考えられるものは何ですか?
- 登場する理由は
basic_string
?プロファイルされたライブラリは文字列を使用しません。 std::array
可能な限り に切り替えることは賢明な次の動きでしょうか?
さらに詳しい情報をお気軽にお尋ねください。喜んで質問を編集します。
編集1
最初の答えに応えて、私は明示的にpush_back
どこにも電話していません。ホットスポットは、フロートでのインライン化されたログ操作など、一見おかしな場所で発生しています。これは奇妙なことをしているコンパイラの最適化でしょうか?