データのロードと保存にかなりの時間が費やされるプログラムがあります。ここで、合計実行時間のパーセンテージで各関数にかかる時間を知りたいと思います。ただし、プロファイラーが考慮する合計時間から、関数のロードと保存にかかる時間を除外したいと考えています。gprof やその他の一般的なプロファイラーを使用してこれを行う方法はありますか?
4 に答える
同様に、使用できます
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
は、素晴らしい視覚化/ナビゲーション ツールです。私はそれを十分にお勧めできません:
gprof
など、より現代的なものを使用することを検討しOProfile
ます。を使用してレポートを生成する場合、興味のない関数を除外するオプションをopreport
使用できます。--exclude-symbols
詳細については、OProfile Web ページを参照してください。ただし、クイック スタート ガイドについては、OProfile ドキュメントページを参照してください。
RotateRight のZoomは、Linux 用のシステム全体の時間プロファイルを提供します。コードが I/O に多くの時間を費やす場合、その時間は CPU の時間プロファイルに表示されません。または、I/O に費やされた時間を考慮したい場合は、「スレッド時間プロファイル」を試してください。
シンプルで基本的なソリューションとして、データを csv ファイルに記録したい場合があります。
例: Format [functionKey,timeStamp\n]
...それを Excel に読み込みます。デルタを取得し、if 関数に基づいて含めたり除外したりします。派手なものはありません。良い面としては、いくつかのビジュアライゼーションをかなり安く手に入れることができます。