インテル® VTune™ Amplifier 2018 ヘルプ
MPI アプリケーションをプロファイルするため、インテル® VTune™ Amplifier コマンドライン・インターフェイス (amplxe-cl) を使用します。
ハイパフォーマンス・コンピューティング (HPC) アプリケーションは、現代のクラスターのマルチノード・アーキテクチャーの影響を受けます。このようなアプリケーションのチューニングでは、単一ノードのパフォーマンス解析に加え、ノード間でのアプリケーションの動作を解析する必要があります。インテル® Parallel Studio Cluster Edition は、そのようなパフォーマンス解析に有用なアプリケーション・パフォーマンス・スナップショット (英語)、インテル® Trace Analyzer & Collector、およびインテル® VTune™ Amplifier などの解析ツールを提供し、MPI アプリケーションのパフォーマンス解析を詳しく調査するのに役立ちます。以下に例を示します。
アプリケーション・パフォーマンス・スナップショットでは、MPI アプリケーションのパフォーマンスの概要を素早く調査できます。
インテル® Trace Analyzer & Collector は、メッセージ・パッシング・インターフェイス (MPI) の利用効率、通信のホットスポット、同期のボトルネック、負荷バランスなどを調査します。
インテル® VTune™ Amplifier は、スレッド化、メモリー、およびベクトル化効率メトリックなど、ノード内のパフォーマンスに注目します。
インテル® Parallel Studio Cluster Edition に含まれるインテル® MPI ライブラリーのバージョンは、mpirun においてデフォルトで Hydra プロセス管理を使用するように切り替えます。これにより、多数のノード間にわたって高いスケーラビリティーを提供します。
ここでは、MPI アプリケーションを解析するためインテル® VTune™ Amplifier のコマンドライン・ツールを使用する方法に注目します。そのほかの解析ツールについては、関連情報セクションをご覧ください。
計算リソースを効率良く使用するため MPI プロセスとスレッド化を組み合わせたハイブリッドコードの解析を始める場合、スレッド化を含む単一ノードの解析にインテル® VTune™ Amplifier を使用します。HPC パフォーマンス特性解析は、CPU 使用率、メモリーアクセス、およびベクトル化効率を理解し、パフォーマンスのギャップに注目してチューニングの方針を定義するのに適しています。CPU 使用率のセクションには、MPI インバランスのメトリックがあります。次のステップとして、インテル® Trace Analyzer & Collector による MPI 通信効率の調査、メモリーの問題をさらに詳しく調査するメモリーアクセス解析、マイクロアーキテクチャーの問題を特定する全般解析、またはベクトル化のチューニングの詳細を探るインテル® Advisor の使用などが考えられます。
次の基本的な手順に従って、インテル® VTune™ Amplifier を使用して MPI アプリケーションのインバランスの問題を解析します。
MPI 解析に関する追加情報を調査します。
Linux* クラスター上で MPI アプリケーションを解析する場合、インテル® Parallel Studio XE Cluster Edition をインストール際に、[Per-user Hardware Event-based Sampling (ユーザーごとのハードウェア・イベントベース・サンプリング)] モードを有効にできます。このオプションは、インテル® VTune™ Amplifier がデータを収集する際に、現在のユーザーのデータのみを対象とします。インストール時に管理者によって一度有効にされると、一般ユーザーはこのモードを無効にすることはできません。これは、他のユーザーのアクティビティーを含むノード全体のパフォーマンス・データを個別のユーザーが観測できないようにするためです。
インストール後に、対応する *-vars.sh スクリプトを使用して、現在のターミナルセッションで適切な環境 (PATH、MANPATH) を設定できます。
インテル® VTune™ Amplifier で MPI アプリケーションのパフォーマンス・データを収集するには、コマンドライン・インターフェイス (amplxe-cl) を使用します。インテル® VTune™ Amplifier ユーザー・インターフェイスの [Analysis Target (解析ターゲット)] 設定オプションを利用して収集の設定を完了することもできます。詳細は、任意のターゲットの設定を参照してください。
通常、MPI ジョブは mpirun、mpiexec、srun、aprun などの MPI ランチャーで開始されます。ここでは、mpirun を使用して説明します。一般に MPI ジョブの起動には次のシンタックスが使用されます。
mpirun [options] <program> [<args>]
インテル® VTune™ Amplifier は、<program> として起動され、アプリケーションはインテル® VTune™ Amplifier のコマンドライン引数を使用して起動されます。インテル® VTune™ Amplifier を使用して、MPI アプリケーションを起動するには次のシンタックスを使用します。
mpirun [options] amplxe-cl [options] <program> [<args>]
mpirun と amplxe-cl には、必須または強く推奨されるいくつかのオプションがあります。一般にコマンドは次のシンタックスを使用します。
mpirun -n <n> -l amplxe-cl -quiet -collect <analysis_type> -trace-mpi -result-dir <my_result> my_app [<my_app_options>]
mpirun には次のオプションがあります。
<n> は、実行する MPI プロセス数です。
mpiexec/mpirun ツールの -l オプションは、MPI ランクを stdout 行に表示します。このオプションは推奨されますが、必須ではありません
。amplxe-clamplxe-cl には次のオプションがあります。
-quiet / -q オプションは、進行状況などの診断メッセージの出力を抑制します。このオプションは推奨されますが、必須ではありません
-collect <analysis type> は、インテル® VTune™ Amplifier で実行する解析タイプを指定します。利用可能な解析タイプのリストを見るには、amplxe-cl-help collect コマンドを使用します。
-trace-mpi は、結果ディレクトリー名にサフィックスを追加し、結果中のプロセス名にランク番号を追加します。インテル以外の MPI を起動するにはこのオプションが必要です。
MPI アプリケーションが複数のノードで起動される場合、インテル® VTune™ Amplifier は、my_result.<hostname1>、my_result.<hostname2>、my_result.<hostnameN>、の形式で現在のディレクトリーに計算ノードごとに結果ディレクトリーを作成し、同じディレクトリー上で実行されるすべてのランクデータをカプセル化します。例えば、高度なホットスポット解析を 4 つのノードで実行し、各計算ノード上でデータを収集します。
> mpirun -n 16 –ppn 4 –l amplxe-cl -collect advanced-hotspots -trace-mpi -result-dir my_result -- my_app.a
それぞれのプロセスデータは、それらが実行されたノードに対応します。
my_result.host_name1 (rank 0-3)
my_result.host_name2 (rank 4-7)
my_result.host_name3 (rank 8-11)
my_result.host_name4 (rank 12-15)
特定のランクをプロファイルする場合 (MPI パフォーマンス・スナップショットで定義される外れ値ランクなど)、ランクを選択してプロファイルを行います。複数バイナリーの MPI 実行を使用し、対象とするランクでインテル® VTune™ Amplifier のプロファイルを行います。これは、解析処理に必要なデータ量を大幅に減少させます。次の例は、ノードあたり 1 ランクで 16 プロセス中の 2 つのプロセスの高度なホットスポット解析データを収集します。
export VTUNE_CL=amplxe-cl -collect memory-access -trace-mpi -result-dir my_result
$ mpirun -host myhost1 -n 7 my_app.a : -host myhost1 -n 1 $VTUNE_CL -- my_app.a :-host myhost2 -n 7 my_app.a : -host myhost2 -n 1 $VTUNE_CL -- my_app.a
代替方法として、次のような設定ファイルを作成します。
# config.txt configuration file
-host myhost1 -n 7 ./a.out
-host myhost1 -n 1 amplxe-cl -quiet -collect memory-access -trace-mpi -result-dir my_result ./a.out
-host myhost2 -n 7 ./a.out
-host myhost2 -n 1 amplxe-cl -quiet -collect memory-access -trace-mpi -result-dir my_result ./a.out
設定ファイルを使用して収集を行うには、次のコマンドラインを使用します。
> mpirun -configfile ./config.txt
インテル® MPI ライブラリー 5.0.2 以降を使用している場合、インテル® MPI プロセスランチャーと -gtool オプションを使用して簡単にプロファイルを行うランクを選択できます。
> mpirun -n <n> -gtool "amplxe-cl -collect <analysis type> -r <my_result>:<rank_set>" <my_app> [my_app_options]
ここで、<rank_set> には、ツールを実行するランクの範囲を指定します。カンマで区切ったり、“-” で隣接するランクのセットを指定できます。
以下に例を示します。
> mpirun -gtool "amplxe-cl -collect memory-access -result-dir my_result:7,5" my_app.a
例:
この例は、推奨される最初の解析である、(サンプリング・ドライバーをベースの) HPC パフォーマンス特性解析タイプを実行します。
> mpirun -n 4 amplxe-cl -result-dir my_result -collect hpc-performance -- my_app [my_app_options]
ホストに分散されるジョブの内、myhost2 で実行される 16 プロセスの 2 つで高度なホットスポット・データを収集します。
> mpirun -host myhost1 -n 8 ./a.out : -host myhost2 -n 6 ./a.out : -host myhost2 -n 2 amplxe-cl -result-dir foo -c advanced-hotspots ./a.out
インテル® VTune™ は現在のディレクトリー foo.myhost2 に結果ディレクトリーを作成します (指定されたプロセスランク 14 と 15 が、2 番目のノードに配置されるます)。
代替方法として、次のような設定ファイルを作成します。
# config.txt configuration file
-host myhost1 -n 8 ./a.out
-host myhost2 -n 6 ./a.out
-host myhost2 -n 2 amplxe-cl -quiet -collect advanced-hotspots -result-dir foo ./a.out
そして、次のようにデータ収集を開始して、前述の例のように結果をアーカイブします。
> mpirun -configfile ./config.txt
foo.myhost2 結果ディレクトリーが作成されます。
この例は、すべてのノード上のすべてのランクで、メモリー・オブジェクト・プロファイルとメモリーアクセス解析を実行します。
> mpirun n 16 -ppn 4 amplxe-cl -r my_result -collect memory-access -knob analyze-mem-objects=true -my_app [my_app_options]
この例は、ランク 1、4-6、10 上で高度なホットスポット解析を実行します。
> mpirun –gtool “amplxe-cl -r my_result -collect advanced-hotspots: 1,4-6,10” –n 16 -ppn 4 my_app [my_app_options]
実際のジョブでは、mpiexec や mpiexec.hydra が使用されることがありますが、上記の例では mpirun コマンドを使用しています。mpirun は、mpiexec や mpiexec.hydra へディスパッチを行う上位レベルのコマンドであり、現在のデフォルトやオプションを引き渡すことができます。上記の例は、mpiexec* コマンドでも利用できます。
データ収集後、インテル® VTune™ Amplifier は自動的にデータをファイナライズ (シンボル参照を解決しデータベースに変換) します。これは、コマンドライン収集が実行された同じ計算ノード上で行われます。インテル® VTune™ Amplifier は、自動的にバイナリーとシンボルファイルの場所を特定します。他の場所に保存されているシンボルファイルを使用する場合、-search-dir オプションを使用して適切な検索パスを指定します。
> mpirun -np 128 amplxe-cl -q -collect hotspots -search-dir /home/foo/syms ./a.out
結果が収集されたら、インテル® VTune™ Amplifier の GUI またはコマンドライン・インターフェイスを使用して結果を開くことができます。
結果をコマンドライン・インターフェイスで表示するには:
-report オプションを使用します。インテル® VTune™ Amplifier で利用可能なレポート機能を見るには、amplxe-cl -help report コマンドを使用します。
結果をグラフィカル・インターフェイスで表示するには:
メニューボタンをクリックし、[Open (開く)] > [Result... (結果...)] を選択して、必要な結果ファイル (*.amplxe) を開きます。
結果を他のシステムへコピーして参照することもできます (例えば、Linux* クラスターで収集した結果を Windows* ワークステーション上で開けます)。
インテル® VTune™ Amplifier は、インテル® スレッディング・ビルディング・ブロックや OpenMP* 関数のように、MPI 関数をシステム関数として分類します。これは、MPI そのものではなくアプリケーションのコードに集中しやすくします。システム関数の表示を有効にし、MPI 実装の内部を解析して見るには、インテル® VTune™ Amplifier GUI の [Call Stack Mode (コールスタック・モード)] フィルターバーのコンボボックスや、CLI の call-stack-mode オプションを使用します。コールスタック・モード、[User functions+1] は、多くの CPU 時間の消費 (基本ホットスポット解析) や、時間を浪費する MPI 関数 (ロックと待機解析) を見つけるのに役立ちます。例えば、呼び出し階層 main() -> foo() -> MPI_Bar() -> MPI_Bar_Impl() -> ... において、MPI_Bar() は実際の MPI API 関数であり、深い階層は MPI 実装の詳細を示します。コールスタック・モードは次のように動作します。
[Only user functions (ユーザー関数のみ)] コールスタック・モードは、どの関数を変更することで実際にパフォーマンスを改善できるか分かるように、ユーザー関数 foo() への MPI 呼び出しで費やされた時間を関連付けます。
[User functions+1 (ユーザー関数 + 1)] モード (デフォルト) は、負荷の高い MPI 呼び出しを容易に特定できるように、MPI 実装が上位レベルのシステム関数 MPI_Bar()で費やされた時間を関連付けます。
[User/system functions (ユーザーとシステム関数)] モードは、実際に時間を費やす MPI ライブラリーを特定できるように、関連付けなしで呼び出し階層を表示します。
インテル® VTune™ Amplifier は、プロファイル・バージョンの MPI 関数にプリフィクス P を追加します。例: PMPI_Init。
インテル® VTune™ Amplifier はインテル® TBB と OpenMP* をサポートします。クラスター全体で CPU リソースの利用を最大化するため、MPI による並列処理とスレッドレベルの並列処理を併用して、インテル® VTune™ Amplifier で並列処理レベルのパフォーマンスを解析することが推奨されます。インテル® VTune™ Amplifier において MPI、OpenMP*、およびインテル® TBB の機能は独立しているため、MPI プロセスで収集された結果を調査する際に、すべての OpenMP* とインテル® TBB の機能が適切にサポートされます。OpenMP*-MPI ハイブリッド・アプリケーションでは、インテル® VTune™ Amplifier は、OpenMP* メトリックを持つ MPI ランクのサマリーテーブルを、低位から上位へ MPI ビジー待機 でソートして表示します。通信時間が短いほど、MPI アプリケーションのクリティカル・パスにおけるプロセスの実行時間は長くなります。さらに詳しく調査するには、クリティカル・パスにある MPI プロセスの OpenMP* 解析を行ってください。
例:
この例は、すべての解析タイプで関数とモジュール解析のパフォーマンス・レポートを表示します。この例は、ノードごとの結果ディレクトリー (result_dir.host1、result_dir.host2) を開き、ノードごとの結果でカプセル化されたプロセスの MPI ランクでデータをグループ化します。
> amplxe-cl -R hotspots -group-by process,function -r result_dir.host1
> amplxe-cl -R hotspots -group-by process,module -r result_dir.host2
インテル® VTune™ Amplifier を使用して、インテル® MPI ライブラリーの実装とほかの MPI 実装の両方を解析できます。その場合、次の点に留意してください。
Linux* のみ: 複数のランクを含む結果でランクを区別しやすくするため、インテル® VTune™ Amplifier は PMI_RANK または PMI_ID 環境変数のいずれか設定されているほうを基に、プロセス名にランク番号を追加します。プロセス名の拡張規則は、<プロセス名> (ランク <N>)のようになります。環境変数を提供しない MPI 実装で MPI ランクの検出を可能にするには、-trace-mpi オプションを使用します。
インテル® MPI ライブラリーを使用する場合、インテル® VTune™ Amplifier は MPI 関数/モジュールをシステム関数/モジュールとして分類し (User functions+1 オプションの場合)、それらの時間をシステム関数として関連付けます。このオプションは、インテル以外の MPI 実装のモジュールと関数には適用されません。その場合インテル® VTune™ Amplifier は、デフォルトで内部 MPI 関数とモジュールを表示します。
インテル以外の MPI 実装では、このヘルプで示されるコマンドラインの例を調整する必要があるかもしれません。例えば、異なるプロセスランクでジョブ中のプロセス数を制限するコマンドラインは、変更する必要があります。
ランチャープロセス (mpirun/ mpiexec) とアプリケーション・プロセスの間にインテル® VTune™ Amplifier プロセス (amplxe-cl) がある場合、MPI 実装で操作する必要があります。つまり、多くの MPI 実装で行われているように、環境変数を使用して通信情報を渡すべきです。インテル® VTune™ Amplifier は、親プロセスから通信情報を受け取るような MPI 実装では動作しません。
インテル® VTune™ Amplifier は、MPI 実装モジュールを分類するため、次のような Perl シンタックスの正規表現を使用します。
impi\.dll
impid\.dll
impidmt\.dll
impil\.dll
impilmt\.dll
impimt\.dll
libimalloc\.dll
libmpi_ilp64\.dll
このリストは参考のために記載しています。シンタックスは、バージョンによって異なる可能性があります。
インテル® VTune™ Amplifier は、MPI の動的解析をサポートしていません (例: MPI_Comm_spawn などの動的なプロセス API)。
MPI アプリケーション解析のさらに詳しい情報については、インテル® Parallel Studio Cluster Edition と MPI のオンライン・ドキュメント、http://software.intel.com/en-US/articles/intel-mpi-library-documentation/ (英語) をご覧ください。クラスター環境でのインテル® VTune™ Amplifier のインストールについては、Linux* 向けのインテル® VTune™ Amplifier インストールガイド (英語) をご覧ください。
また、インテル® VTune™ Amplifier とインテル® Parallel Studio Cluster Edition に含まれるその他のツールの使い方についても、オンラインのリソースが用意されています。
チュートリアル: OpenMP* と MPI アプリケーションの解析 : https://software.intel.com/en-us/articles/intel-vtune-amplifier-tutorials (英語)。
ハイブリッド・アプリケーション: インテル® MPI ライブラリーと OpenMP*: http://software.intel.com/en-US/articles/hybrid-applications-intelmpi-openmp/ (英語)。