あなたが知っている優れたプロファイラーは何ですか?
C++ MFC アプリケーションのパフォーマンスを測定して微調整する良い方法は何ですか?
アルゴリズムの分析は本当に必要ですか? http://en.wikipedia.org/wiki/Algorithm_analysis
あなたが知っている優れたプロファイラーは何ですか?
C++ MFC アプリケーションのパフォーマンスを測定して微調整する良い方法は何ですか?
アルゴリズムの分析は本当に必要ですか? http://en.wikipedia.org/wiki/Algorithm_analysis
Windows プラットフォームを使用している場合は、AQTimeを強くお勧めします。静的コード分析を含む多数のプロファイラーが付属しており、Visual C++、.NET、Delphi、Borland C++、Intel C++、さらには gcc など、最も重要な Windows コンパイラーおよびシステムで動作します。また、Visual Studio に統合されますが、スタンドアロンでも使用できます。大好きです。
(まだ) Visual C++ 6.0 を使用している場合は、組み込みのプロファイラーを使用することをお勧めします。最新バージョンについては、 Compuware DevPartner Performance Analysis Community Editionを試すことができます。
Windows の場合は、Windows SDK に無料で同梱されているXperfを確認してください。サンプリングされたプロファイルを使用し、便利な UI を備えており、インストルメンテーションは必要ありません。パフォーマンスの問題を追跡するのに非常に役立ちます。次のような質問に答えることができます。
最も多くの CPU を使用しているのは誰ですか? コール スタックを使用して関数名にドリルダウンします。最も多くのメモリを割り当てているのは誰ですか? レジストリ クエリを最も多く行っているのは誰ですか? ディスク書き込み?ボトルネックを見つけたときは、おそらく予想していた場所ではないので、かなり驚かれることでしょう。
ソース行のヒット カウントを表示できるツール (DevPartner の true time など) を使用すると、「Big O」の複雑さが悪いアルゴリズムをすばやく見つけることができます。複雑さを軽減する方法を決定するには、アルゴリズムを分析する必要があります。
Vtune パフォーマンス アナライザーによるインテル スレッド チェッカー - この図で、私が最もよく使用するビューを確認してください。どの関数が最も多くの時間を消費しているかがわかります。
内部をさらに掘り下げて、内部のどの関数がより多くの時間を消費するかなどを分解できます。見ているもの (合計時間 = fn + 子内の時間)、自己時間 (内部で実行されているコードでのみ費やされた時間) に基づいて、さまざまなビューがあります。機能など)。
このツールはプロファイリング以外にも多くのことを行いますが、すべてを調査したわけではありません。私は間違いなくそれをお勧めします。このツールは、30 日間実行できる完全に機能する試用版としてダウンロードすることもできます。コストの制約がある場合は、問題を特定するために必要なのはこのウィンドウだけです。
試用版のダウンロードはこちら - https://registrationcenter.intel.com/RegCenter/AutoGen.aspx?ProductID=907&AccountID=&ProgramID=&RequestDt=&rm=EVAL&lang=
ps : 私も Rational Rational で遊んだことがありますが、何らかの理由であまり使いませんでした。Rational も Intel よりも高価かもしれないと思います。
ほとんどの場合、AQTime と Compuwares DevPartner の両方を持っている AQTime を 2 番目に使用します。その理由は、AQTime は有効な PDB ファイルを持つ実行可能ファイルをプロファイリングするのに対し、TrueTime ではインストルメント化されたビルドを作成する必要があるためです。これにより、アドホック プロファイリングが大幅に高速化され、簡素化されます。これが問題になる場合、DevPartner もかなり高価です。DevPartner が本領を発揮するのは BoundsChecker です。これは、AQTimes 実行プロファイラーよりもリークや上書きを検出するための優れたツールであると私は評価しています。TrueTime は AQTime よりもわずかに正確ですが、これが問題になることはありません。
プロファイリングは価値があります.IMOはい、ローカルアプリケーションでパフォーマンスの向上が必要な場合. また、プログラムとアルゴリズムが実際にどのように機能するか、およびデータの格納と反復処理に特定のタイプのオブジェクト クラスを使用する場合のコストの影響についても、多くのことを学んだと思います。
アンマネージ コードのプロファイリングを行ってからしばらく経ちましたが、行ったときは Intel の vtune で良い結果が得られました。それが追い越された場合、他の誰かが私たちに教えてくれると確信しています。
アルゴリズム分析には、プロファイラーで見つけられるものよりも大幅にパフォーマンスを向上させる可能性がありますが、特定のクラスのアプリケーションに対してのみです。かなり大規模なデータ セットを処理する場合、アルゴリズム分析により、CPU/メモリ/その両方でより効率的な方法が見つかる可能性がありますが、アプリが主にストレージ用のリレーショナル データベースを使用したフォーム フィルである場合、あまり効果がない可能性があります。
参考までに、Visual Studio の一部のバージョンには、最適化されていないコンパイラしか付属していません。私の MFC アプリの 1 つで、MINGW/MSYS (gcc コンパイラー) で -o3 を指定してコンパイルすると、Visual Studio でコンパイルした私のリリースの約 5 倍から 10 倍の速さで実行されます。
たとえば、私は openstreetmap xml コンパイラを使用しており、2.7 GB の xml ファイルを処理するのに約 3 分 (gcc コンパイル バージョン) かかります。同じコードの Visual Studio コンパイルは、実行に約 18 分かかります。
Glowcodeは非常に優れたプロファイラーです (機能する場合)。実行中のプログラムにアタッチでき、必要なのはシンボル ファイルのみです。再構築する必要はありません。
Visual Studio 2005 (およびおそらく 2008) の一部のバージョンには、実際にはかなり優れたパフォーマンス プロファイラーが付属しています。
持っている場合は、ツール メニューで使用できるはずです。
または、「パフォーマンス エクスプローラー」ウィンドウを開いて新しいパフォーマンス セッションを開始する方法を検索することもできます。
MSDN へのリンク