Intel Advisor

バージョン システムA システムB システムC
Intel Advisor XE 2021 (default) + +
Intel Advisor XE 2020 + +
Intel Advisor XE 2019 + +
Intel Advisor XE 2018 + +

+ : 利用可能
― : 利用不可

バージョン moduleファイル名
2021 iutils/xe2021
2020 iutils/xe2020
2019 iutils/xe2019
2018 iutils/xe2018

Intelコンパイラ が利用できる状態で,以下のようにmoduleコマンドを実行してください.

$ module load iutils

moduleコマンドの詳細は Modules をご覧ください.

コマンド 説明
advixe-gui GUI版のIntel Advisorを起動します.
advixe-cl コマンドライン版のIntel Advisorを起動します.

Intel Advisorを使用する場合,分析を行うツールに応じたコンパイルオプションを指定する必要があります.

ツール コンパイルオプション
SurveyおよびSuitability -g -O2
Correctness -g

詳細は, マニュアル に掲載されている Intel Advisor HelpChoosiing and Building a Target => Build Settings for C/C++ Applications および Build Settings for Fortran Applications を参考にしてください.

オプション 説明
-collect=string 分析を行うタイプを指定します.
-help このコマンドのヘルプを表示します.

オプションの詳細は advixe-cl -help の出力を参考にしてください.

タイプ 説明
survey 処理時間の計測
suitability 処理向上率を推定
correctness 並列時の問題を検出

最初は Survey ツールを使用しますので, -g -O2 オプションを指定してコンパイルを行ってください.

Surveyツールを使用する場合のコンパイル例

$ icc -g -O2 test.c

Exceed onDemand で, advixu-gui コマンドを実行するとIntel Advisorが起動します. xrun コマンドの詳細は 会話型処理 をご覧ください.

$ xrun advixe-gui 

File => New => Project を選択すると以下のような画面が表示されますので,適切な Project name を入力して, Create Project を押してください.

続いて, Project Properties の画面が表示されますので,対象とするプログラムを Application で指定して OK を押してください.引数等が必要な場合はここで指定します.

プロジェクトのプロパティ設定が完了すると,画面左側に Advisor XE Workflow が表示されます.Intel Advisorの作業はこのWorkflowに従って進めることになります.

まず最初に Advisor XE Workflow1. Survey Target にある Collect Survey Data を開始します. Surver Target ではアプリケーションを実行し,並列化の候補となるループや関数を見つけます.アプリケーションの実行が終了すると以下のような Survey Report の画面が表示されます.また,画面上部の Summary を押すと結果の概要が確認できます.

Survey Target の結果を元に,並列化の候補となる処理に,Intel Advisorのアノテーションを追加します.アノテーションを追加しコンパイルし直したアプリケーションを実行することで,並列化した場合の性能の予測ができます.

  1. アノテーション用のヘッダファイル(advisor-annotate.h)をインクルードする
  2. 並列化対象のループ全体を ANNOTATE_SITE_BEGIN(sitename)ANNOTATE_SITE_END() で囲む
  3. ループの内部の並列実行させる処理を ANNOTATE_TASK_BEGIN(taskname)ANNOTATE_TASK_END() で囲む

#include "advisor-annotate.h"
.....
    ANNOTATE_SITE_BEGIN(sitename1);
    for ( .... 
    {
        ANNOTATE_TASK_BEGIN(taskname1);
        ...
        ANNOTATE_TASK_END();
    }
    ANNOTATE_SITE_END();

  1. アノテーション用のモジュールの利用宣言( advisor_annotate)を追加する
  2. 並列化対象のループ全体を call annotate_site_begin(sitename)call annotate_site_end() で囲む
  3. ループの内部の並列実行させる処理を call annotate_task_begin(taskname)call annotate_task_end() で囲む

use advisor_annotate
.....
call annotate_site_begin(sitename1)
do .....
    call annotate_task_begin(taskname1)
    ....
    call annotate_task_end()
enddo
call annotate_site_end()

アノテーションを追加したプログラムをコンパイルします.コンパイル時には -g -O2 オプションの他, -I オプションでアノテーション用のインクルードファイルのパスを設定する必要があります.

$ icc -g -O2 test.c -I${ADVISOR_XE_2016_DIR}/include
$ ifort -g -O2 test.f90  -I${ADVISOR_XE_2016_DIR}/include/intel64

コンパイルし直したアプリケーションに対して, Advisor XE Workflow3.Check Suitability にある Collect Suitability Data を実行し,並列性能のチェックを行ってください.

次に, Advisor XE Workflow4. Check Correctness を実施し,並列化した場合に発生しうる問題の予測を行います.この Check Correctness の実施時には最適化オプションは付与せず,デバッグオプション -g を指定してコンパイルしたアプリケーションを使用する必要があります.

 $ icc -g test.c

コンパイルし直したアプリケーションを指定して, Advisor XE Workflow4. Check Correctness にある Collect Correctness Data を実行してください.

ここまでの実行結果をもとに,並列処理を実装してください.

最初は Survey ツールを使用しますので, -g -O2 オプションを指定してコンパイルを行ってください.

$ icc -g -O2 test.c

-collect オプションに survey を指定して, advixe-cl でCUI版のIntel Advisorを実行します. tssrun コマンドの詳細は 会話型処理 をご覧ください.

$ tssrun advixe-cl -collect=survey ./a.out

結果の確認は, Exceed onDemand など X(GUI)が利用できる環境で, advixe-gui コマンドを実行し,GUI版のIntel Advisorで行ってください.

-collect-survey を指定したチェックを行った結果を元に,並列化の候補となる処理に,Intel Advisorのアノテーションを追加します.アノテーションを追加しコンパイルし直したアプリケーションを実行することで,並列化した場合の性能の予測ができます.

  1. アノテーション用のヘッダファイル(advisor-annotate.h)をインクルードする
  2. 並列化対象のループ全体を ANNOTATE_SITE_BEGIN(sitename)ANNOTATE_SITE_END() で囲む
  3. ループの内部の並列実行させる処理を ANNOTATE_TASK_BEGIN(taskname)ANNOTATE_TASK_END() で囲む

#include "advisor-annotate.h"
.....
    ANNOTATE_SITE_BEGIN(sitename1);
    for ( .... 
    {
        ANNOTATE_TASK_BEGIN(taskname1);
        ...
        ANNOTATE_TASK_END();
    }
    ANNOTATE_SITE_END();

  1. アノテーション用のモジュールの利用宣言( advisor_annotate)を追加する
  2. 並列化対象のループ全体を call annotate_site_begin(sitename)call annotate_site_end() で囲む
  3. ループの内部の並列実行させる処理を call annotate_task_begin(taskname)call annotate_task_end() で囲む

use advisor_annotate
.....
call annotate_site_begin(sitename1)
do .....
    call annotate_task_begin(taskname1)
    ....
    call annotate_task_end()
enddo
call annotate_site_end()

アノテーションを追加したプログラムをコンパイルします.コンパイル時には -g -O2 オプションの他, -I オプションでアノテーション用のインクルードファイルのパスを設定する必要があります.

$ icc -g -O2 test.c -I${ADVISOR_XE_2016_DIR}/include
$ ifort -g -O2 test.f90  -I${ADVISOR_XE_2016_DIR}/include/intel64

コンパイルし直したアプリケーションに対して, -survey オプションに suitability を指定し, advixe-cl でCUI版のIntel Advisorを実行し並列性能のチェックを行います.

$ tssrun advixe-cl -collect=suitability ./a.out

結果の確認は,同様に Exceed onDemand など X(GUI)が利用できる環境で, advixe-gui コマンドを実行し,GUI版のIntel Advisorで行ってください.

次に,並列化した場合に発生しうる問題の予測を行います.この場合は最適化オプションは付与せず,デバッグオプション -g を指定してコンパイルしたアプリケーションを使用する必要があります.

 $ icc -g test.c

コンパイルし直したアプリケーションに対して, -survey オプションに correctness を指定し, advixe-cl でCUI版のIntel Advisorを実行します.

$ tssrun advixe-cl -collect=correctness ./a.out

結果の確認は,同様に Exceed onDemand など X(GUI)が利用できる環境で, advixe-gui コマンドを実行し,GUI版のIntel Advisorで行ってください.

ここまでの実行結果をもとに,並列処理を実装してください.


Copyright © Academic Center for Computing and Media Studies, Kyoto University, All Rights Reserved.