Windows* 環境でのインテル® MPI ライブラリー向けのパフォーマンス解析とチューニングおよびデバッグ

2016 年 4 月© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

内容• デバッグとテスト**• チューニング• MPI tuner (インテル® MPI ライブラリー**)• パフォーマンス解析• インテル® MPI ライブラリー**• 統計収集• インテル® Trace Analyzer & Collector***• アプリケーションのトレース• Performance Snapshot• インテル® VTune™ Amplifier XE****:インテル® Parallel Studio XE Cluster Edition に含まれる、またはスタンドアロン版も入手可能***: インテル® Parallel Studio XE Cluster Edition が必要
2© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

MPI アプリケーションのデバッグとテスト• インテル® MPI ライブラリーは、Microsoft* Visual Studio* デバッガーをサポートします
Microsoft* MPI Windows* デバッガー拡張 (MS-MPI v6 WinDbg 拡張以降) で利用可能なメッセージ・キュー・デバッガー機能をサポートしています。この機能は、Windows* プラットフォーム上の任意の MPI ツールやデバッガーが、標準化されたメッセージ・キュー・インターフェイスを使用してインテル® MPI ライブラリーと相互運用することを可能にします• インテル® MPI ライブラリーはデバッグ機能をサポートします• ログ (デバッグ情報) の取得• アプリケーションのトレース• 正当性チェック3© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® MPI ライブラリーのログ取得機能
アプリケーションのデバッグよりも、ログを利用することが有効なことがあります。環境変数 I_MPI_DEBUG は、実行中の MPI アプリケーションの情報を取得する非常に便利な機能を提供します:> mpiexec.exe -genv I_MPI_DEBUG 5 -n 8 ./my_application

注意
I_MPI_DEBUG に大きな値を設定すると、多くの情報を取得できますが、アプリケーションの実行パフォーマンスを大幅に低下させます。始めに一般的なエラーを検出するには、I_MPI_DEBUG=5 で開始することを推奨します。I_MPI_DEBUG に関する詳しい情報は、『インテル® MPI ライブラリーfor Windows* リファレンス・マニュアル』をご覧ください4© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

ステップ 1 - クラスターレベルの解析
インテル® MPI ライブラリー

アプリケーションの計算時間の並列効率を個別に計算し描画

5•

並列効率: E[p] = S[p]/p•

48 コア (2 ノード) までの MPI 時間はごくわずか•

96 ランク (4 ノード) を超えると計算パフォーマンスが超線形 (スーパーリニア) にス
ケーリング

•

ほぼ同じ辺り (96 ランク付近) で MPI 時間が低効率の最大の原因となる© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

ステップ 2 - ランタイム解析• ソースコードを変更せずに MPI パフォーマンスを向上することが可能• インテル® MPI ライブラリーの環境変数を使用するか、計算ノードへのランクのプロセス割り当てを変更する• ノードへのプロセス割り当てを変更するには、マシンや設定ファイルで行うか、またはコミュニケーター内でランクを並べ替える• 1 つの方法はグローバル操作に絞ってチューニングを開始• 環境変数 I_MPI_DEBUG = 5 に設定• 使用されている変数、ネットワーク・ファブリック、プロセスの割り当てに関する情報を出力• I_MPI_DEBUG を 6 に設定すると、集合アルゴリズムのデフォルトのアルゴリズムも出力される

6© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

ステップ 2 – ランタイム解析• 『インテル® MPI ライブラリー・リ
ファレンス・マニュアル』にMPI_Allreduce の 8 つの異なるアルゴリズムが記載されている• 環境変数I_MPI_ADJUST_ALLREDUCE を1 ～ 8 の整数値に設定することで簡単にアルゴリズムの変更が可能

7© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® MPI ライブラリーのチューニング
MPI tuner

インテル® MPI ライブラリーには、特定のクラスターやアプリケーション向けの最適な設定が含まれる、設定ファイルを作成する mpitune ユーティリティー (MPI tuner) が含まれています
クラスター固有モード:• 利用するクラスター構成で一度だけ実行します。クラスター環境に最適化された設定ファイルが生成されます
アプリケーション固有モード:• 利用するアプリケーション毎に実行します。アプリケーションに最適化された設定ファイルが生成されます8© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

なぜ自動チューニング?
• インテル® MPI ライブラリーは、幅広い設定オプションで利用できます - さまざまな環境変数が用意されています• 集合操作のための異なるアルゴリズム• 異なるファブリックのサポート• ライブラリーの振る舞いによる異なるしきい値 (rendezvous 、キャッシュバイパスなど...)• 異なるバッファーサイズ
• …

• アプリケーションではなく、ライブラリー自身をチューニング
• しかし、ライブラリーには、すでに適切なアウトオブボックス設定があります ...
• MPITune は、自動的に空間を探索できるツールです9© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

mpitune によるクラスター固有のチューニング
特定のクラスターやアプリケーション環境上で、ライブラリー・チューニングの最適値を探します• インストール後に一度、そしてクラスターの設定を変更した後に実行します• 最良の構成は、通信デバイス、ノード数、MPI ランク、そしてプロセスの分散モデルの組み合わせごとに記録されます• 設定はインテル® MPI ライブラリー・フォルダーに保存され、すべてのユーザーが利用できます# 設定値を収集:$ mpitune [options]10# 収集された値を再利用:$ mpirun –tune ./application© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

mpitune によるアプリケーション固有のチューニング
特定のクラスターやアプリケーション環境上で、ライブラリー・チューニングの最適値を探します• アプリケーションごとに、そしてアプリケーションもしくはクラスターの構成を変更した後に実行します• 最良の構成は、通信デバイス、ノード数、MPI ランク、そしてプロセスの分散モデルの組み合わせごとに記録されます• 設定はユーザーのホームに保存されます# 設定値を収集:$ mpitune [options] --application ¥”mpirun application¥”# 収集された値を再利用:$ mpiexec –tune ./app.conf ./application
11© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

mpitune パラメーター

12パラメーター

効果--application | -a ¥"<app_ cmd_line>¥“アプリケーション固有モード--fabric-list | -fl [f1[,f2...[,fN]]]

使用するファブリックの選択--host-range | -hr {min:max|min:|:max}

テストに使用するホストの範囲を設定--perhost-range| -pr {min:max|min:|:max}

ホストごとのプロセッサー数の範囲を設定--application-regexp | -ar ¥"reg-expr¥"

パフォーマンス・インデックスとしてアプリケーションの出力値を使用--application-value | -avd {min|max}

値の最適化の方向性を指定--session-file | -sf [file-path]

チューニング・プロセスを継続 ...

--collectives-only | -co

集合操作のみチューニング

--valuable-improvement | -vi {percent}

最小の成功基準を定義--iterations | -i <count>

各チューニング過程での実行回数を定義--options-set | -os <opt1,...,optN>

要求したオプションのみをチューニング ...

© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

mpitune ランタイムの削減 - スケジュールを理解• mpitune の実行には長い時間がかかることがあります• アプリケーションだけをチューニングする固有の設定があります• プロセスを実際に起動することなくスケジュールをチェックできます$ mpitune --scheduler-only | -so …

13© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

MPI tuner の使い方例
クラスター固有モード:> mpitune> mpitune -hf <hostfile>> mpitune -hf <hostfile> -odr <path_to_result_directory>> mpiexec -tune -ppn 8 -n 128 .¥my_app> mpiexec -tune <path_to_result_directory> -ppn 8 -n 128 .¥my_app
アプリケーション固有モード:> mpitune --application ¥"mpiexec -n 32 .¥myprog¥" -of .¥myprog.conf> mpiexec -tune .¥myprog.conf -n 32 .¥myprog
14© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® MPI ライブラリー統計収集
インテル® MPI ライブラリーは、アプリケーションの実行を妨げることなく、パフォーマンス・データを収集する組込み統計収集機能を持っています。収集された情報はテキストファイルに書き込まれます
環境変数 I_MPI_STATS で統計収集を制御します

15

モード
ネイティブ統計形式

説明
全ての MPI 関数の情報と通信およびデータ転送

IPM 統計形式

統合パフォーマンス・モニタリング (IPM) サマリー形式(ウォールクロック、システム、ユーザー、MPI 時間と主要な MPI 関数の情報)© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® MPI ライブラリー統計収集
インテル® MPI ライブラリーは、アプリケーションの実行を妨げることなく、パフォーマンス・データを収集する組込み統計収集機能を持っています。収集された情報はテキストファイルに書き込まれます
環境変数 I_MPI_STATS で統計収集を制御します
I_MPI_STATS=[native:][n-] mn, m

出力情報の統計レベル。

1

各プロセスが送信したデータ量を出力2セル数と転送されたデータ量を出力

3

統計出力は、実際の引数に応じて組み合わせられます4

バケットリストで定義された統計出力

10

すべての通信コンテキストの集団操作の統計出力20

すべての MPI 関数の時間情報を追加して出力16© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

n,m は正の整数値です。出力する情報の範囲を定義します。
レベル n から レベル m の統計 (n と m を含む) が出力されます。n が指定されない場合、デフォルト値は 1 です© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

17

インテル® Trace Analyzer & Collector• 開発者を支援• 並列アプリケーションの動作を視覚化して確認• プロファイル統計とロードバランスを評価• 通信 hotspot を特定• 機能• イベントベースのアプローチ• 低オーバーヘッド• 優れたスケーラビリティー• 強力な集合およびフィルター関数• イデアライザー (理想化)• パフォーマンス・スナップショット

18© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

実行時にパフォーマンス問題とその影響を自動検出

MPI とハイブリッド・クラスターのスケーラブルなプロファイル
MPI Performance Snapshot
軽量 – 低オーバーヘッド、最大32K ランクをプロファイル

スケーラビリティー - スケーリン
グによるパフォーマンスの変化を迅速に検出
主要メトリック – PAPI カウンタ
ー、MPI/OpenMP* のインバラン
スを表示

19

実行時のパフォーマンス・スナップショットの取得は、Linux* 環境でのみサポートされます© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Performance snapshot の取得
Windows* 環境でパフォーマンス・スナップショット・レポートを取得する手順：
1. I_MPI_STATS=20 を設定

2. mpiexec コマンドで MPI プログラムを実行
3. mps –g stats.txt を実行

mps_report.html

実際のクラスターでの取得例:> mpiexec –machine mfile2 –genv I_MPI_STATS=20 pi_mpiomp
20© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® VTune™ Amplifier XE• OpenMP* のスケーラビリティーを迅速にチューニング
• 使いやすい MPI ハイブリッド解析• 簡単な OpenCL*/GPU 解析• 優れた帯域幅解析• 素早く、簡単にインストールして使用可能• VM サポート• 最新のプロセッサーと OS21

© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

OpenMP* の効率とスケーラビリティーをチューニング
インテル® VTune™ Amplifier XE で必要なデータを素早く取得必要なデータ:1) アプリケーションのシリアル時間はスケーリングに影響するほど長いか?
2) OpenMP* をチューニングすることでどの程度パフォーマンスが向上するか?

3) チューニングにより最も大きな利点が得られるのはどの OpenMP* 領域/ループ/バリアか?
4) 各領域の効率が悪い原因は? (リンクをクリックすると詳細が表示される)

1)
2)
3)4)
22

インテル® VTune™ Amplifier XE のサマリーレポート:© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

OpenMP* の効率とスケーラビリティーをチューニング
効率が悪い部分のウォールクロック時間を確認し原因を特定
重要な点に注目Fork• 効率が悪いのはどの領域か?

実際の実行時間

Join• チューニングにより十分なパフォーマンスの向上が得られるか?
• 効率が悪い原因は ? インバランス ? スケジュール ? ロックスピン ?
• インテル® Xeon Phi™ コプロセッサー搭載システムをサポート
インバランス ロック Fork スケジュール

23© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

パフォーマンス向上の可能性
理想的な実行時間

パフォーマンス向上の可能性

新機能: インテル® Advisor XE
ベクトル化による最適化
New!
• データに基づくベクトル化:• 問題:• どのベクトル化により最も大きな利• インテル® AVX2 向けに再コンパ点が得られるか?
イルしてもパフォーマンスがそれほど向上しない• ベクトル化を妨げているものは? その原因は?
• どこをベクトル化すべきか?
• ループがベクトル化に適しているか?
• 新しいアーキテクチャー向けに組込み関数のコードを変更したい• データを再構成することでパフォーマンスが向上するか?
• コンパイラー・レポートの見方が良く分からない• ＃pragma simd だけで大丈夫か?

24© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

設計して実装インテル® Advisor XE - スレッド・プロトタイプの生成• 並列化の設計

1) 解析• 通常の開発作業に影響なし• すべてのテストケースを継続して使用可能• 実装する前にチューニングしてデバッグ

2) 設計(コンパイラーはこれらのアノテーションを無視)

3) チューニング

4) 検証

並列化の実装5) 実装!

より少ない労力とリスクで、より大きな効果
25© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

インテル® Advisor XE
MPI アプリケーションのヒントを得る

mpiexec コマンドからインテル® Advisor XE を起動して、各ノード上でインテル® Advisor XE で解析を行う:> mpiexec -n 10 advixe-cl -collect survey --project-dir my_proj your_app
インテル® Advisor XE を使用した、MPI アプリケーションの解析はコマンドラインのみがサポートされます• クラスターノード上にインテル® Advisor XE が無い場合、ホストシステムへ結果をコピーして解析します• クラスターノードでは、コマンドラインでレポートを取得できます• 異なるランクの結果を統合しないで、個別に解析します© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

2

まとめインテル® MPI ライブラリー、インテル® Trace Analuzer and Collector
およびインテル® VTune™ Amplifier XE を活用して、MPI アプリケーションを;• 効率よくデバッグ• 自動的にクラスター環境をチューニング

• 最適化のヒントを取得• 通信と計算を解析• パフォーマンスのボトルネックを特定
14© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

参考資料
インテル® MPI ライブラリー関連日本語マニュアル:• ゲッティング・スタート・ガイド (Windows | Linux)• インテル® MPI ライブラリー・ユーザーズ・ガイド (Windows | Linux)• インテル® MPI ライブラリー・リファレンス・マニュアル (Windows | Linux)• MPI tuner チュートリアル (Windows | Linux)• インテル® Trace Analyzer & Collector チュートリアル:
MPI アプリケーションを解析する (OS 共通)© 2016 iSUS. 無断での引用、転載を禁じます。* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。