2010-12-03 5 views
6

AFAIKプロファイラは、各機能にどれくらいの時間が費やされているかだけを知ることができます。しかし、C++コンパイラはコードを積極的にインライン化する傾向があり、また、いくつかの関数がそれほど短くはないので、各構文がどれくらいの時間を消費するか、より詳細を知ることはしばしば役に立ちます。機能レベルを超えてコードをプロファイルするにはどうすればよいですか?

コードを小さな機能に再構成する以外は、どうすれば実現できますか?あなたはサンプリングプロファイラ(例えばZoomまたはShark)ではなく、インストルメントプロファイラ(例えばgprofを)を使用している場合

答えて

5

あなたはダウンの文と命令レベルまで、非常に細かい粒度のプロファイルを得ることができます。

+1

++試してみるか、** stack **サンプルをランダムに取得する任意のプロファイラ** wall-clock ** times、気になる**インターバル**で** line ofコード** **に表示されるサンプルの**パーセント。 [ここに理由のリストがあります。](http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343)プロファイラがどれだけ「取得」しないかは驚くべきことです。 –

+0

@sharptooth:ラインパーセンテージウォールタイムスタックサンプラーを効果的にするのは、(IMHO)よりも効果的な[手動方法]を自動化することです(http://stackoverflow.com/questions/375913/what-c​​an -i-use-to-profile-c-code-in-linux/378024#378024) - ランダムな一時停止。 –

2

callgrindを使用することができれば、どの方法が処理時間のほとんどを占めているかの概要を得ることができます。その後、kcachegrindを使用して結果を表示することができます。それはあなたが簡単にボトルネックをブラウズして見つけることができる非常に良いグラフを提供します。

関連する問題