C/C++ コードのプロファイリングを行い、どの部分に最も時間がかかっているかを判断するための最適なツールを教えてください。現在、私はログに頼っていますが、不要な遅延が発生するため、もちろん情報は正確ではありません.
好ましくは、ツールが存在する場合、そのツールは、最適化できる領域を検出/提案することもできます。
プラットフォーム: Linux
アプリケーションは組み込み環境で使用されるため、軽量で外部にある必要があります (一部の IDE のプラグインではありません)。
KCachegrindcallgrind
との組み合わせを心からお勧めします。
linux/freebsd の「gprof」は、実行時にどのルーチンが CPU を占有しているかを特定するための非常にシンプルで効率的なツールです。関数のネストされたプロファイルとフラットなプロファイルの両方を提供します。プロファイラーの実行時に実行される各関数の CPU 時間のパーセンテージ、関数自体での CPU 時間のパーセンテージ、およびその子関数でのパーセンテージが示されます。これにより、問題のある機能を簡単に分離できます。
私は Microsoft Visual C++ のプロファイラーを使用して良い経験をしました。Intels VTuneのような他の外部プログラムもありますが、それらのほとんどは無料ではありません。
これには、Quantify や KCachegrind などの優れたプロファイリング ツールが多数あります。これらのツールの 1 つの問題は、実行時のパフォーマンスが低下するため、一部の大規模システムでは十分に拡張できない可能性があることです。
場合によっては、デバッガーで実行して ctrl-c を押し、スタック トレースを見て、これを 4 回繰り返すだけで十分です。
コードの同じ部分に常にいる場合は、おそらくほとんどの時間を費やしている場所を見つけたことになります。
あなたは明らかに2つのことを望んでいます:
コードをプロファイリングして測定します。
最適化できる領域を検出する。
これらは異なる問題です。あなたが何を言われたとしても、それらは同じではありません。
問題 (1) については、多くの優れたプロファイラーが提案されます。
問題 (2) については、プロファイラーは間接的にしか役に立ちません。
はるかに単純で、通常はより効果的な手法があります。
プラットフォームによって異なります。MSVC を使用している場合、一部のバージョンにはプロファイラーが組み込まれています。AMD と Intel の両方にもプロファイラーが用意されています (CodeAnalyst と VTune)。
Linuxでは、私が使用したのはgprofだけですが、他にもあることは知っています(LinuxバージョンでもAMDまたはIntelのものを利用できると思います)
もちろん、Valgrind スイート全体も役立つ場合があります。callgrind や cachegrind などのツールを使用すると、パフォーマンスに関する多くの情報を得ることができます。
Windows を使用している場合は、AQTimeをお勧めします。.NET、Delphi、VB (もちろん、すべての C++ コンパイラ (; ) を含む) を含む、ほぼすべてのコンパイラをサポートしており、私が今まで試した中で最高のプロファイリング ツールです。パフォーマンス プロファイラだけではありません。
Linux Tools Projectには eclipse 用のユーザーフレンドリーなプラグインが存在するため、パフォーマンス測定にはoprofile が適しています。