私は自分のプログラムの 2 つのバージョンを書きました。これは C++ の進化的アルゴリズムです。最初のバージョンは手続き型で、うまく動作し、非常に高速です。2 番目のバージョンは完全に OOP であり、プログラムは結果を見つけますが、非常に遅いです (最初のバージョンよりも 10 倍遅いなど)。ループ内のコードのセグメントの時間を測定する方法などはありますか? どんなアドバイスやアイデアも役に立ちます。前もって感謝します。
5 に答える
プログラム内のパフォーマンス関連の問題を見つけるには、プロファイラーが必要です。
Visual Studio のエディションに応じて、Visual Studio にはさまざまなレベルのプロファイリング サポートがあります。幸運にも Visual Studio Ultimate または Premium エディションを使用している場合は、非常に優れたプロファイリング サポートが組み込まれています。
Visual Studio Express または Visual Studio Professional を使用している場合、悲しいことに、Visual Studio にプロファイリング サポートが組み込まれていませんが、このリンクの例の情報を使用して、これらのエディションで無料で手動で行うことができます。
プロファイラーを使用します。どちらが最適かは、プラットフォーム/動作環境によって異なります。たとえば、g++ では gprof を使用できます。または、再コンパイルしたくない場合は、Linux を想定して oprofile を使用できます。Solaris では dtrace を使用できます。Windows や Mac などの他のプラットフォームでは、プラットフォームのタグを質問に追加してください...
特定のケースでは、このツールをダウンロードして使用することをお勧めします: http://www.codersnotes.com/sleepy/
これは非常に単純な (しかし効率的な) サンプリング プロファイラーです。Visual Studio で Ctrl+F5 (リリース) を使用してアプリを起動し、このプログラム (Very Sleepy) を実行し、exe 名をダブルクリックして待機するだけで、関数名を含む詳細なレポートが表示されます。
次のレベルでは、必要に応じて VTune を使用します。
プロファイラーを使用します。gcc でコンパイルしている場合は、たとえば gprof を検索します。
\callcap
VS でコンパイラ フラグを使用できます。ここでそれについて読むことができます。
.cpp
基本的に、分析したいファイルに対してのみこのフラグを追加し、開始/終了関数を定義し、アプリを再ビルドして実行できます。分析しようとしている (そして遅いと思われる) コードを関数に分割することをお勧めします。そうすれば、実行に時間がかかるコードを確認できます。
すでに利用可能なプロファイラーと比べると少し手間がかかりますが、試してみる価値はあります。