2009-11-25 9 views
27

誰もが、最適化を実行する前にあなたのプログラムをプロファイルすると言っていますが、誰もこれを行う方法を説明していません。C Profilersに関する推奨事項?

Cコードをプロファイリングする方法は? gccを使用

+2

あなたはどのコンパイラとOSを使用していますか? – LnxPrgr3

答えて

21

(例えばhere説明したように)、私は、プログラムを実行する(原理に従っても、そのURLに提案)とgprofを使用して続行し、-pgでコンパイルおよびリンク。異なるコンパイラ& cを使用している場合はツールが変わりますが、コードをどのようにプロファイルするのかについての一般的なアイデアに関する部分についても、URLは引き続き推奨されます。

+1

重要なことは、アプリケーションが通常どおりに使用され、再現可能であることを示す方法でプロファイラでアプリケーションを実行することです。特定の一連のテストケースが役立ちます。 – caf

12

Linuxを使用している場合は、ValGrindCallGrind and KCacheGrindの組み合わせをお勧めします。 ValGrindはメモリリークを検出する優れた方法であり、CallGrind拡張機能は優れたプロファイラを作成します。

:私だけlearned Valgrindのは、今もマックOSX上で動作します。しかし、CallGrindとKCacheGrindは2005年から更新されていません。other front-endsを見てください。

1

Shark/Instruments(dtraceを使用)は、Macで利用できるプロファイラです。彼らはかなり良いです。

+1

私は特にサメが好きです。非常に便利です(無料!)。 – justin

3

あなたは逆張り、これらの答えをチェックして気にしない場合は、 :-)尋ねうれしい:

レッツを私はしようとする簡単に言えば:

  1. プログラムはあなたを待っていますか、それとも待っていますか?あなたがそれを待たせることができなければ、あなたは問題がないので、そのままにしておきます。

  2. お待ちください、お待ちください。

私はそれは(あなたを待っていない)忙しいときにプログラムが何をしているかのストロボX線を得ることでサンプリングを、お勧めします。プログラムカウンタだけでなく、少なくとも呼び出しスタックのサンプルを取得します。プログラムカウンタのサンプルしか取得できない場合は、プログラムがI/Oやライブラリルーチンでかなりの時間を費やしている場合は無意味ですので、それを解決しないでください。

多くのサンプルを取得するには、プロファイラが必要です。少々必要なのであれば、デバッガの一時停止ボタンが正常に機能します。私の経験では、20以上で十分であり、5で十分であることが多い。

なぜですか?コールスタックのサンプルが1000個あるとします。各サンプルは、スタック上のすべての1行のコードがそれを要求したためにを要求したため、壁時計の時間が少ししかかからないことを表しています()。したがって、1000行中の557個のサンプルに表示されるコード行がある場合、その行が557/1000件であると見なすことができます。つまり、実行時間全体で100ドルのコストがかかる場合は、その行だけで55.70ドルのコストが発生し、1.50ドルを払うか、または取ることになります。本当に必要かどうかを調べる必要があります。

1000個のサンプルが必要ですか?もしそのラインが時間の約55.7%を費やしているのであれば、10サンプルしか取っていなければ、6サンプルで1.5サンプルを出したり、取ったりします。したがって、10個のサンプルのうち6個のサンプルについての声明が表示されている場合、その100ドルのうちおよそ45ドルから75ドルの間のコストがかかることがわかります。たとえ$ 45のコストしかかからないとしても、それが本当に必要かどうか分かりませんか?

多くのサンプルを必要としないため、多くの精度を必要としません。あなたが必要とするのは、スタックサンプルが与えるものです。最適化するために最も貴重な行を正確に指しています。

**サンプル数の標準偏差は、sqrt(f * (1-f) * nsamp)です。ここで、fは、ラインを含むサンプルの割合です。

+0

この非常に洞察力のあるポストに感謝します! lldbにこのようなランダムな休止をさせる方法がありますか? –

+0

@Koz:私はIldbを知らない。私はCtrl-Breakが可能なデバッガを使用しています。 –

1

完了のために、oprofileを追加します。カーネルをベンチマークしたい場合は特に興味深いです。

関連する問題