インテル® VTune™ Amplifier 2018 ヘルプ

MPI コードの解析

MPI アプリケーションをプロファイルするため、インテル® VTune™ Amplifier コマンドライン・インターフェイス (amplxe-cl) を使用します。

ハイパフォーマンス・コンピューティング (HPC) アプリケーションは、現代のクラスターのマルチノード・アーキテクチャーの影響を受けます。このようなアプリケーションのチューニングでは、単一ノードのパフォーマンス解析に加え、ノード間でのアプリケーションの動作を解析する必要があります。インテル® Parallel Studio Cluster Edition は、そのようなパフォーマンス解析に有用なアプリケーション・パフォーマンス・スナップショット (英語)、インテル® Trace Analyzer & Collector、およびインテル® VTune™ Amplifier などの解析ツールを提供し、MPI アプリケーションのパフォーマンス解析を詳しく調査するのに役立ちます。以下に例を示します。

インテル® 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 アプリケーションのインバランスの問題を解析します。

  1. Linux* ホストで MPI 解析向けに設定し実行します。

  2. インテル® VTune™ Amplifier を利用して MPI 解析を設定し実行します。

  3. MPI モジュールのシンボルを解決します。

  4. 収集されたデータを表示します。

MPI 解析に関する追加情報を調査します。

Linux* ホストの MPI 解析向けのインストール設定

Linux* クラスター上で MPI アプリケーションを解析する場合、インテル® Parallel Studio XE Cluster Edition をインストール際に、[Per-user Hardware Event-based Sampling (ユーザーごとのハードウェア・イベントベース・サンプリング)] モードを有効にできます。このオプションは、インテル® VTune™ Amplifier がデータを収集する際に、現在のユーザーのデータのみを対象とします。インストール時に管理者によって一度有効にされると、一般ユーザーはこのモードを無効にすることはできません。これは、他のユーザーのアクティビティーを含むノード全体のパフォーマンス・データを個別のユーザーが観測できないようにするためです。

インストール後に、対応する *-vars.sh スクリプトを使用して、現在のターミナルセッションで適切な環境 (PATH、MANPATH) を設定できます。

インテル® VTune™ Amplifier での MPI 解析の設定

インテル® VTune™ Amplifier で MPI アプリケーションのパフォーマンス・データを収集するには、コマンドライン・インターフェイス (amplxe-cl) を使用します。インテル® VTune™ Amplifier ユーザー・インターフェイスの [Analysis Target (解析ターゲット)] 設定オプションを利用して収集の設定を完了することもできます。詳細は、任意のターゲットの設定を参照してください。

通常、MPI ジョブは mpirunmpiexecsrunaprun などの MPI ランチャーで開始されます。ここでは、mpirun を使用して説明します。一般に MPI ジョブの起動には次のシンタックスが使用されます。

mpirun [options] <program> [<args>]

インテル® VTune™ Amplifier は、<program> として起動され、アプリケーションはインテル® VTune™ Amplifier のコマンドライン引数を使用して起動されます。インテル® VTune™ Amplifier を使用して、MPI アプリケーションを起動するには次のシンタックスを使用します。

mpirun [options] amplxe-cl [options] <program> [<args>]

mpirunamplxe-cl には、必須または強く推奨されるいくつかのオプションがあります。一般にコマンドは次のシンタックスを使用します。

mpirun -n <n> -l amplxe-cl -quiet -collect <analysis_type> -trace-mpi -result-dir <my_result> my_app [<my_app_options>]

mpirun には次のオプションがあります。

amplxe-clamplxe-cl には次のオプションがあります。

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

例:

  1. この例は、推奨される最初の解析である、(サンプリング・ドライバーをベースの) HPC パフォーマンス特性解析タイプを実行します。

    > mpirun -n 4 amplxe-cl -result-dir my_result -collect hpc-performance -- my_app [my_app_options]

  2. ホストに分散されるジョブの内、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 番目のノードに配置されるます)。

  3. 代替方法として、次のような設定ファイルを作成します。

    # 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 結果ディレクトリーが作成されます。

  4. この例は、すべてのノード上のすべてのランクで、メモリー・オブジェクト・プロファイルとメモリーアクセス解析を実行します。

    > mpirun n 16 -ppn 4 amplxe-cl -r my_result -collect memory-access -knob analyze-mem-objects=true -my_app [my_app_options]

  5. この例は、ランク 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]

実際のジョブでは、mpiexecmpiexec.hydra が使用されることがありますが、上記の例では mpirun コマンドを使用しています。mpirun は、mpiexecmpiexec.hydra へディスパッチを行う上位レベルのコマンドであり、現在のデフォルトやオプションを引き渡すことができます。上記の例は、mpiexec* コマンドでも利用できます。

MPI モジュールのシンボル解決

データ収集後、インテル® 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 実装の詳細を示します。コールスタック・モードは次のように動作します。

インテル® 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.host1result_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

MPI 実装のサポート

インテル® VTune™ Amplifier を使用して、インテル® MPI ライブラリーの実装とほかの MPI 実装の両方を解析できます。その場合、次の点に留意してください。

インテル® VTune™ Amplifier で認識される MPI システムモジュール

インテル® VTune™ Amplifier は、MPI 実装モジュールを分類するため、次のような Perl シンタックスの正規表現を使用します。

このリストは参考のために記載しています。シンタックスは、バージョンによって異なる可能性があります。

解析の制限

関連情報

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 に含まれるその他のツールの使い方についても、オンラインのリソースが用意されています。

関連情報