問題タブ [gprof]
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.
performance - 選択したループの実行時間の測定
C プログラムで選択したループの実行時間を測定して、プログラム (Linux 上) の合計実行時間の何パーセントがこれらのループに費やされているかを確認したいと考えています。パフォーマンスを測定するループを指定できるはずです。ここ数日、いくつかのツール (vtune、hpctoolkit、oprofile) を試しましたが、どれもこれを行うようには見えません。それらはすべて、パフォーマンスのボトルネックを見つけて、それらの時間を表示するだけです。これは、これらのツールがしきい値 (~1ms) を超えた時間のみを保存するためです。したがって、1 つのループの所要時間がそれよりも短い場合、その実行時間は報告されません。
gprof の基本的なブロック カウント機能は、現在サポートされていない古いコンパイラの機能に依存しています。
またはそのようなものを使用して単純なタイマーを手動で作成できますgettimeofday
が、場合によっては正確な結果が得られません。例:
ここで、内側のループで費やされた合計時間を測定したいのでgettimeofday
、最初のループ内に呼び出しを入れる必要があります。そのgettimeofday
ため、それ自体が 1000 回呼び出され、独自のオーバーヘッドが発生し、結果が不正確になります。
profiling - gprof の g++ でのコンパイル
gprof でプロファイリングするためにプログラムをコンパイルする方法に関する gprof のドキュメントがわかりません。-g
g++では、オプションに加えてオプション(デバッグ情報)を付けてコンパイルする必要があり-pg
ますか? それぞれの場合で異なる結果が得られます。アプリケーションのボトルネックがデバッグ モードではなくリリース モードでどこにあるのかを確認したいと思います。
c++ - main()から1回だけ呼び出される関数が102回呼び出されるとgprofが教えてくれるのはなぜですか?
私は初心者で、次のプログラムを楽しく作成して、ディレクトリを検索し、出現するすべての単語を別の単語に置き換えます。crt_ls_file()関数を1回だけ呼び出しますが、gprofは102回呼び出されていることを通知します。これがなぜなのか誰かが知っているのだろうか。私はプログラムをコンパイルしようとしましたが、最適化はすべて行われていません。
c++ - 実時間に基づいて gprof をプロファイリングしますか?
私の理解では、デフォルトで gprof は CPU 時間を考慮に入れています。実時間に基づいてプロファイルする方法はありますか?
私のプログラムは多くのディスク I/O を行うため、使用する CPU 時間は実際の実行時間のほんの一部にすぎません。ディスク I/O のどの部分が最も時間を消費しているかを知る必要があります。
linux - プロファイリング用にコンパイルされたときに、コードが単一のスレッドよりも複数のスレッドで実行されるのが遅いのはなぜですか(-pg)?
私はレイトレーサーを書いています。
最近、i5クアッドコアの追加コアを活用するために、プログラムにスレッドを追加しました。
奇妙な出来事の中で、アプリケーションのデバッグバージョンの実行速度は遅くなりましたが、最適化されたビルドは、スレッドを追加する前よりも速く実行されています。
デバッグビルドの場合は「-g-pg」フラグをgccに渡し、最適化ビルドの場合は「-O3」フラグを渡します。
ホストシステム:Ubuntu Linux10.4AMD64。
デバッグシンボルがプログラムにかなりのオーバーヘッドを追加することは知っていますが、相対的なパフォーマンスは常に維持されています。つまり、より高速なアルゴリズムは、デバッグビルドと最適化ビルドの両方で常に高速に実行されます。
なぜ私がこの振る舞いを見ているのか、何か考えはありますか?
デバッグバージョンは「-g3-pg」でコンパイルされます。「-O3」で最適化されたバージョン。
これは、「-g3」が奇妙なパフォーマンスデルタのせいではなく、むしろ「-pg」スイッチであることを私に確信させます。「-pg」オプションは、スレッドのパフォーマンスを測定するための何らかのロックメカニズムを追加する可能性があります。
とにかくスレッド化されたアプリケーションでは「-pg」が壊れているので、削除します。
gcc - gprof の出力から除外するにはどうすればよいですか?
持っているアプリケーションのプロファイルを作成しようとしていますが、(wxWidgets で作成された) UI に関連するものを gprof のコールグラフなどに表示したくありません。どうすればよいですか?
c++ - ソケットでの gprof の使用
gprof でプロファイリングしたいプログラムがあります。問題は (一見) ソケットを使用していることです。だから私はこのようなものを得ます:
私はしばらく前にこの問題にぶつかり、あきらめて先に進みました。しかし、可能であれば gprof を使用して、自分のコードをプロファイリングできるようにしたいと考えています。私に何ができる?不足している gprof オプションはありますか? ソケットオプション?これらのタイプのシステムコールが存在する場合、gprof はまったく役に立たないのですか? もしそうなら、実行可能な代替手段はありますか?
編集:プラットフォーム:
- Linux 2.6 (x64)
- GCC 4.4.1
- gprof 2.19
c++ - プロファイラーの奇妙な動作: 同じ機能、異なるパフォーマンス
gprof の使い方を学んでいたところ、このコードで奇妙な結果が得られました。
これはプロファイラーの出力です
1 つを呼び出してから 2 つを呼び出すと、結果は逆になり、2 つが 1 つよりも時間がかかります
が、どちらも同じ関数ですが、最初の呼び出しは常に 2 番目の呼び出しよりも時間がかかりません
何故ですか?
注: アセンブリ コードはまったく同じであり、コードは最適化なしでコンパイルされています。
c++ - C++ main は gprof によると ~20% の時間しか使用しない
gprof を使用して C++ プログラムのプロファイリングを試みました。プログラム自体は約 53 秒間実行されたので、main は約 8.29 秒間しか実行されなかったと言う理由がわかりません。これについての説明はありますか?
ここに抜粋があります:
c++ - ユキヒョウの問題に関する gprof
問題は、gmon.out ファイルが正しいデータを表示しないことにあります。すべての時間は 0 で、何も測定されません。gmon.out ファイルは正常に生成されます。私はC ++にEclipse ideを使用しており、通常どおりプログラムをリンク、コンパイル、実行しています。
何か助けはありますか?