インテル® Advisor のパフォーマンス・データ収集制御 API の使い方

同カテゴリーの次の記事

インテル® Advisor 2018 日本語版 (iSUS 翻訳版) のお申し込み

この記事は、インテル® デベロッパー・ゾーンに掲載されている「How to use the Intel® Advisor Collection Control APIs」の日本語参考訳です。


概要

インストルメントとトレース・テクノロジー (ITT) を使用して、インテル® Advisor のパフォーマンス・データ収集のスピードアップとサンプルデータのサイズを軽減します。ITT API は、インテル® Advisor のサーベイ収集では初期のリリースからサポートされていますが、インテル® Advisor 2018 ではトリップカウントと FLOP 収集でも利用できるようになりました。これにより、大規模な長時間実行されるアプリケーションでも、ルーフライン解析を利用することができます。

この記事では、ターゲット・アプリケーションの実行中に、収集制御 API を使用してインテル® Advisor のパフォーマンス・データ収集を開始および停止する方法を説明します。

背景

インテル® Advisor は通常、解析を始めるとデータの収集を開始します。そのため、大きなコードでは注目しないコード領域のデータも収集してしまいます。収集制御 ITT API によって、インテル® Advisor がモニターしパフォーマンス・データを記録するソースコードの領域を選択することができます。

使用例: 特定のコード領域に注目します。

最初に、注目するソースコードの領域を resumepause API で囲んで、インテル® Advisor をポーズモードで開始します。インテル® Advisor は、resume API に到達するとパフォーマンス・データの収集を開始し、pause API に到達すると収集を停止します。

小規模なコードを使用して、一連の手順を説明します。

  1. 最初に、C/C++ アプリケーションは ITT API を理解する必要があります。そのため、インテル® Advisor のインストール・ディレクトリーに含まれる “ittnotify.h” ヘッダーファイルをソースコードでインクルードします。
    Windows* のデフォルトのインストール・ディレクトリーは以下です。
    C:\Program Files (x86)\IntelSWTools\Advisor 2018\include
    
    Linux* のデフォルトのインストール・ディレクトリーは以下です。
    /opt/intel/advisor_2018/include
    

    注: "ittnotify.h" ヘッダーファイルには、コードのインストルメントに使用するすべての ITT API のテンプレートが含まれます。

    コンパイラーがライブラリーを検出できるように、ヘッダーファイルへのパスを指定します。Microsoft* Visual Studio* では、[プロパティ ページ] の [C/C++] > [全般] > [追加のインクルード ディレクトリ] で設定します。環境変数 $(ADVISOR_2018_DIR)include を使用することもできます。

    intel-advisor-visual-studio-itt-notify

  2. 最後に、ITT ライブラリー (libittnotify.lib) をリンクして、アプリケーションを再コンパイルします。Visual Studio* では、[プロパティ ページ] の [リンカー] > [追加のライブラリ ディレクトリ] にライブラリーへのパスを追加します。
    Windows* 環境のデフォルトパスは以下です。
    C:\Program Files (x86)\IntelSWTools\Advisor 2018\lib64\libittnotify.lib
    
    Linux* 環境のデフォルトパスは以下です
    /opt/intel/advisor_2018/
    
    そして、ライブラリーへのパスを含むようにビルドスクリプトを設定し、-ittnotify オプションをコンパイラーに指定して libittnotify.a ライブラリーとリンクします。
  3. 次に、インテル® Advisor をポーズモードで開始します。次のポーズして実行ボタンを使用します。

    Intel-advisor-start-paused-button

    注: インテル® Advisor は、サーベイ解析およびトリップカウントと FLOP 解析で収集制御 API をサポートします。

例:

#include "ittnotify.h"

int main(int argc, char* argv[])
{
        // 初期化を実行
        __itt_resume(); // インテル® Advisor はパフォーマンス・データの記録を開始
        for (int i=0;i<size;i++)
        {
               do_some_math();
        }
        __itt_pause(); // インテル® Advisor はパフォーマンス・データの記録を停止

        for (int i=0;i<size;i++)
        {
               do_some_other_math();
        }

       return 0;
}

上記の例では、インテル® Advisor は do_some_math() 関数を含むループのパフォーマンス・データを収集しますが、do_some_other_math() 関数を含むループのデータは収集しません。ルーフライン・モデルで解析結果のグラフを表示すると、グラフには 1 つのドットのみが表示されます。収集 API を使用しない場合は、2 つのドットが表示されます。

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

関連記事