インテル® Inspector XE 2013 を使用してアプリケーションのメモリー使用量の増加を検出する方法

同カテゴリーの次の記事

インテル® Inspector XE 2015 スタンドアロン GUI の使用方法

この記事は、インテル® ソフトウェア・サイトに掲載されている「How to detect application memory growth using Intel® Inspector XE 2013」の日本語参考訳です。


背景

インテル® Inspector XE 2013 は、メモリーとスレッドの正当性エラーの検出と修正に利用できます。そのほかにも便利な機能として、プログラムでメモリー使用量が増加している場所を特定する機能があります。この記事では、インテル® Inspector XE 2013 を使用して、いつ、どこで、アプリケーションのメモリー使用量が増加しているかを見つける方法を説明します。

はじめに

次の手順で、インテル® Inspector XE 2013 を使用してアプリケーションのメモリー使用量の増加を検出できます。ここでは、インテル® Inspector XE 2013 に含まれる tachyon サンプルコードを例に説明します。

  1. tachyon サンプルは次の場所にあります:
    C:\Program Files (x86)\Intel\Inspector XE 2013\samples\en\C++\tachyon_insp_xe.zip
    このパッケージを次の場所に展開するとします: C:\tachyon_insp_xe

  2. tachyon サンプル・アプリケーションをビルドするため、次の Microsoft* Visual Studio* ソリューション・ファイルをダブルクリックします: C:\tachyon_insp_xe\vc9\tachyon_insp_xe.sln
    • Visual Studio* のメニューから、[ビルド] > [ソリューションのビルド] を選択します。Microsoft* Visual Studio* で tachyon アプリケーションがコンパイルされ、リンクされます。

  3. ツールバーにある [New Analysis (新しい解析)] アイコン (水色の再生ボタン) をクリックします。

  4. [New Analysis (新しい解析)] アイコンをクリックすると、実行する解析タイプを設定するダイアログが表示されます。

  5. この例では、[Detect Memory Problems (メモリー問題の検出)] 解析タイプを実行します。

  6. [Start (開始)] ボタンをクリックして、解析を開始します。

  7. [Start (開始)] ボタンをクリックした後に、アプリケーションが実行されます (解析には少し時間がかかりますので、表示が始まったら中止してもかまいません)。

  8. メモリー使用量の増加を測定するため、インテル® Inspector XE 2013 は測定範囲を示す開始と終了の 2 つのポイントが必要です。ステップ 6 のスクリーンショットにある [Set Transaction Start (トランザクション開始の設定)] ボタンをクリックして、測定範囲の開始ポイントをマークします。

  9. アプリケーションを数秒間実行した後に、[Set Transaction End (トランザクション終了の設定)] ボタンをクリックします。

  10. アプリケーションが終了すると、プログラムの診断結果が表示されます。

  11. ステップ 10 のスクリーンショットにあるビューで、[Problem (問題)] タイプが [Memory Growth (メモリー使用量の増加)] のもの (P8) に注目します。[ID] の隣にある “+” アイコンをクリックすると、その行が展開され、領域内でメモリー使用量の増加が見つかったすべての場所を確認できます。レポートされる診断数は、[Set Transaction Start (トランザクション開始の設定)] と [Set Transaction End (トランザクション終了の設定)] をクリックするタイミングに直接関係します。

  12. 個々の問題の行をクリックすると、そのエラーとソースが表示されます。

  13. 問題の行をダブルクリックすると、ソースファイルを表示して、編集できます。

  14. さらに解析を実行する必要があれば、[New Analysis (新しい解析)] をクリックして、最初からプロセスを開始することができます。

API によるメモリー使用量の増加の測定

インテル® Inspector XE 2013 で提供される API を使用して、メモリー使用量の増加を測定することもできます。この API を使用するには、アプリケーションのソースファイルで次のヘッダーファイルをインクルードします: C:\Program Files (x86)\Intel\Inspector XE 2013\include\ittnotify.h

  1. メモリー使用量の増加の測定範囲の開始をマークするには、__itt_heap_record_memory_growth_begin() 関数を呼び出します。
  2. メモリー使用量の増加の測定範囲の終了をマークするには、__itt_heap_record_memory_growth_end() 関数を呼び出します。

次のサンプルコードでは、ittnotify API を使用してメモリー使用量の増加を測定します。インクルード・パスに次のディレクトリーを追加します: C:\Program Files (x86)\Intel\Inspector XE 2013\include

#include "ittnotify.h"
main()
{
    __itt_heap_record_memory_growth_begin();
    << メモリー使用量の増加を測定するコードをここに挿入します >>
    __itt_heap_record_memory_growth_end();
}

そして、アプリケーションをリビルドしてから、[New Analysis (新しい解析)] を実行します。インテル® Inspector XE 2013 は、ittnotify API を認識し、API 呼び出しで指定されたメモリー領域を正確にマークします。

まとめ

インテル® Inspector XE 2013 は、コードの正当性エラーの検証を支援する強力なツールです。アプリケーションのメモリー使用量の増加を検出する機能により、気付かないうちにメモリー使用量が増加しているコード領域を簡単に追跡することができます。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事