インテル® Inspector XE 2013 を使用してアプリケーションのメモリー使用量の増加を検出する方法
この記事は、インテル® ソフトウェア・サイトに掲載されている「How to detect application memory growth using Intel® Inspector XE 2013」の日本語参考訳です。
背景
インテル® Inspector XE 2013 は、メモリーとスレッドの正当性エラーの検出と修正に利用できます。そのほかにも便利な機能として、プログラムでメモリー使用量が増加している場所を特定する機能があります。この記事では、インテル® Inspector XE 2013 を使用して、いつ、どこで、アプリケーションのメモリー使用量が増加しているかを見つける方法を説明します。
はじめに
次の手順で、インテル® Inspector XE 2013 を使用してアプリケーションのメモリー使用量の増加を検出できます。ここでは、インテル® Inspector XE 2013 に含まれる tachyon サンプルコードを例に説明します。
- tachyon サンプルは次の場所にあります:
C:\Program Files (x86)\Intel\Inspector XE 2013\samples\en\C++\tachyon_insp_xe.zip
このパッケージを次の場所に展開するとします: C:\tachyon_insp_xe - tachyon サンプル・アプリケーションをビルドするため、次の Microsoft* Visual Studio* ソリューション・ファイルをダブルクリックします: C:\tachyon_insp_xe\vc9\tachyon_insp_xe.sln
- Visual Studio* のメニューから、[ビルド] > [ソリューションのビルド] を選択します。Microsoft* Visual Studio* で tachyon アプリケーションがコンパイルされ、リンクされます。
- ツールバーにある [New Analysis (新しい解析)] アイコン (水色の再生ボタン) をクリックします。
- [New Analysis (新しい解析)] アイコンをクリックすると、実行する解析タイプを設定するダイアログが表示されます。
- この例では、[Detect Memory Problems (メモリー問題の検出)] 解析タイプを実行します。
- [Start (開始)] ボタンをクリックして、解析を開始します。
- [Start (開始)] ボタンをクリックした後に、アプリケーションが実行されます (解析には少し時間がかかりますので、表示が始まったら中止してもかまいません)。
- メモリー使用量の増加を測定するため、インテル® Inspector XE 2013 は測定範囲を示す開始と終了の 2 つのポイントが必要です。ステップ 6 のスクリーンショットにある [Set Transaction Start (トランザクション開始の設定)] ボタンをクリックして、測定範囲の開始ポイントをマークします。
- アプリケーションを数秒間実行した後に、[Set Transaction End (トランザクション終了の設定)] ボタンをクリックします。
- アプリケーションが終了すると、プログラムの診断結果が表示されます。
- ステップ 10 のスクリーンショットにあるビューで、[Problem (問題)] タイプが [Memory Growth (メモリー使用量の増加)] のもの (P8) に注目します。[ID] の隣にある “+” アイコンをクリックすると、その行が展開され、領域内でメモリー使用量の増加が見つかったすべての場所を確認できます。レポートされる診断数は、[Set Transaction Start (トランザクション開始の設定)] と [Set Transaction End (トランザクション終了の設定)] をクリックするタイミングに直接関係します。
- 個々の問題の行をクリックすると、そのエラーとソースが表示されます。
- 問題の行をダブルクリックすると、ソースファイルを表示して、編集できます。
- さらに解析を実行する必要があれば、[New Analysis (新しい解析)] をクリックして、最初からプロセスを開始することができます。
API によるメモリー使用量の増加の測定
インテル® Inspector XE 2013 で提供される API を使用して、メモリー使用量の増加を測定することもできます。この API を使用するには、アプリケーションのソースファイルで次のヘッダーファイルをインクルードします: C:\Program Files (x86)\Intel\Inspector XE 2013\include\ittnotify.h
- メモリー使用量の増加の測定範囲の開始をマークするには、__itt_heap_record_memory_growth_begin() 関数を呼び出します。
- メモリー使用量の増加の測定範囲の終了をマークするには、__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 は、コードの正当性エラーの検証を支援する強力なツールです。アプリケーションのメモリー使用量の増加を検出する機能により、気付かないうちにメモリー使用量が増加しているコード領域を簡単に追跡することができます。
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。