6

データのロードと保存にかなりの時間が費やされるプログラムがあります。ここで、合計実行時間のパーセンテージで各関数にかかる時間を知りたいと思います。ただし、プロファイラーが考慮する合計時間から、関数のロードと保存にかかる時間を除外したいと考えています。gprof やその他の一般的なプロファイラーを使用してこれを行う方法はありますか?

4

4 に答える 4

12

同様に、使用できます

valgrind --tool=callgrind --collect-atstart=no --toggle-collect=<function> 

その他のオプション:

--instr-atstart    # to avoid runtime overhead while not profiling

命令レベルの統計を取得するには:

--collect-jumps=yes
--dump-instr=yes

または、その場で「リモート コントロール」するcallgrind_controlか、ソース コードに注釈を付けることができます (IIRC には分岐予測統計も含まれます) callgrind_annotate

優れたツールkcachegrindは、素晴らしい視覚化/ナビゲーション ツールです。私はそれを十分にお勧めできません:

ここに画像の説明を入力

于 2011-07-07T21:53:12.390 に答える
5

gprofなど、より現代的なものを使用することを検討しOProfileます。を使用してレポートを生成する場合、興味のない関数を除外するオプションをopreport使用できます。--exclude-symbols

詳細については、OProfile Web ページを参照してください。ただし、クイック スタート ガイドについては、OProfile ドキュメントページを参照してください。

于 2011-07-07T21:46:15.253 に答える
2

RotateRight のZoomは、Linux 用のシステム全体の時間プロファイルを提供します。コードが I/O に多くの時間を費やす場合、その時間は CPU の時間プロファイルに表示されません。または、I/O に費やされた時間を考慮したい場合は、「スレッド時間プロファイル」を試してください。

于 2011-07-20T18:00:37.623 に答える
0

シンプルで基本的なソリューションとして、データを csv ファイルに記録したい場合があります。

例: Format [functionKey,timeStamp\n]

...それを Excel に読み込みます。デルタを取得し、if 関数に基づいて含めたり除外したりします。派手なものはありません。良い面としては、いくつかのビジュアライゼーションをかなり安く手に入れることができます。

于 2011-07-07T21:53:11.753 に答える