私は C/C++ を初めて使用し、プログラムの実行が非常に遅いというパフォーマンスの問題に直面しています。コードの全体的な実行時間を短縮することがホット スポットであることを見つけたいと考えています。Windows で C/C++ アプリケーションをプロファイリングする最も一般的で最も簡単な方法は何ですか? Mini Prolerを使用して .NET アプリケーションのプロファイルを作成するのがいかに簡単であるかには、非常に驚かされました。最小限の追加コードで高品質で信頼性の高い結果が得られる C/C++ の類似ライブラリはありますか? または、 RedGate ANTS パフォーマンス プロファイラーに似た、実行中のコードに関する洞察に満ちた情報を提供するツールはありますか?
2 に答える
Intel の VTune または AMD の CodeAnalyst は、どちらも非常に優れたツールです。Linux では、Perf または OProfile が同じことを行います。
プロファイラーを探しているときに、デバッガーIDEでプログラムを実行し、この方法を試してください。
一部のプログラマーはそれに依存しています。使用方法の例をここに示します。
その例では、次のようになります。一連の問題が検出され、削除されます。
最初の反復で33%の時間を節約できました。(スピードアップファクター1.5)
残り時間のうち、2回目の反復で17%節約されました。(スピードアップファクター1.2)
残り時間のうち、3回目の反復で13%節約されました。(スピードアップファクター1.15)
残り時間のうち、4回目の反復で66%節約されました。(スピードアップファクター2.95)
残り時間のうち、5回目の反復で61%節約されました。(スピードアップファクター2.59)
残り時間のうち、6回目の反復で98%節約されました。(スピードアップファクター45.9)
これらの大きな変化はすべて元の時間の大きな変化ではありませんでしたが、他の問題が取り除かれた後にそうなりました。元のプログラムから節約された合計時間は99.8%を超えました。スピードアップは730倍でした。
このようなプロセスを経ていないほとんどのプログラムにはスピードアップの余地がたくさんありますが、プロファイラーだけを使用してそれを実現する可能性は低いです。なぜなら、それらは測定を行うだけだからです。彼らはあなたが修正する必要があるものを常にあなたに指摘するわけではありません、そしてあなたが見逃すそれぞれの問題はあなたが本当に重要なスピードアップを得るのを妨げます。
言い換えれば、最終的なスピードアップ要因は、これらすべての個々の要因の積であり、それらのいずれかが欠落している場合、それは製品に存在しないだけでなく、次の要因を減らします。そのため、パフォーマンス診断では、「十分に良い」では十分ではありません。あなたはすべての問題を見つけなければなりません。