アプリケーション・パフォーマンス・スナップショット入門 (Linux* 版)

同カテゴリーの次の記事

インテル® コンパイラーを使用したインテル® Xeon® プロセッサー向けのアプリケーションの最適化

この記事は、インテル® デベロッパー・ゾーンに公開されている「Get Started with Application Performance Snapshot for Linux*」の日本語参考訳です。


この記事の PDF 版はこちらからご利用になれます。

アプリケーション・パフォーマンス・スナップショットを利用して、共有メモリーや MPI アプリケーションによる利用可能なハードウェア (CPU、FPU、メモリー) の使用状況を素早く確認できます。アプリケーション・パフォーマンス・スナップショットは、アプリケーションが MPI に費やした時間、MPI と OpenMP* のインバランス、メモリーアクセス効率、FPU 利用率、I/O とメモリー使用量を解析します。解析後、インテル® プラットフォームを使用するシステムの基本的なパフォーマンス向上の可能性を示します。このツールをアプリケーション・パフォーマンス解析の開始点として使用し、主な最適化領域の概要を取得して、特定のアプリケーション・パフォーマンスに特化したプロファイル・ツールについて学びます。

アプリケーション・パフォーマンス・スナップショットは、インテル® デベロッパー・ゾーン (https://software.intel.com/performance-snapshot (英語)) から無料でダウンロードできます。また、次の製品にプリインストールされています。

  • インテル® VTune™ プロファイラー
  • インテル® Parallel Studio XE
  • ベータ版インテル® oneAPI ベース・ツールキット
  • ベータ版インテル® システム・ブリングアップ・ツールキット

必要条件

(オプション) アプリケーション・パフォーマンス・スナップショットの実行中に高度なメトリックを収集するには、次のソフトウェアを使用します。

  • 推奨コンパイラー: インテル® C/C++ または Fortran コンパイラー (その他のコンパイラーも使用できますが、OpenMP* インバランスに関する情報はインテルの OpenMP* ライブラリーでのみ利用できます。)
  • インテル® MPI ライブラリー 2017 以降 (ほかの MPICH ベースの MPI 実装も使用できますが、MPI インバランスに関する情報は、インテル® MPI ライブラリーでのみ利用できます。)

(オプション) 収集のオーバーヘッドを軽減し、メモリー帯域幅の測定値を収集するには、システム全体のモニタリングを有効にします。システム全体のモニタリングを有効にするには、次のいずれかのオプションを使用します。

  • /proc/sys/kernel/perf_event_paranoid 値を 0 (またはそれ以下) に設定します。
  • インテル® VTune™ プロファイラーのドライバーをインストールします。ドライバーのソースは、<APS_install_dir>/internal/sepdk/src にあります。インストール手順は、https://software.intel.com/en-us/vtune-help-building-and-installing-the-sampling-drivers-for-linux-targets (英語) を参照してください。

    インテル® Omni-Path ファブリック (インテル® OP ファブリック) メトリックは、インテル® VTune™ プロファイラーのドライバーがインストールされている場合のみ利用できます。

ツールを実行する前に、環境を設定する必要があります。

  1. コマンドプロンプトを開きます。
  2. ツールを実行するため、適切な環境変数を設定します。

    <install-dir>/apsvars.sh を実行します。ここで <install-dir> は、アプリケーション・パフォーマンス・スナップショットがスタンドアロン・パッケージまたはインテル® Parallel Studio XE の一部としてインストールされている場所です。

    例:

    $ source /opt/intel/performance_snapshots/apsvars.sh

共有メモリー・アプリケーションの解析

  1. 次のコマンドを実行します。

    $ aps <my app> <app parameters>

    ここで、<my app> はアプリケーションの場所、<app parameters> はアプリケーション・パラメーターです。

    アプリケーション・パフォーマンス・スナップショットは、アプリケーションを起動してデータ収集を実行します。

  2. 解析が完了すると、コマンドウィンドウにレポートが表示されます。サポートされるブラウザーで同じ情報を含む HTML レポートを開くこともできます。HTML レポートのパスは、コマンドウィンドウに示されます。以下に例を示します。
    $ firefox aps_result_01012017_1234.html
  3. レポートに表示されているデータを解析します。後述のメトリックの説明を参考にしてください。HTML レポートでは、メトリックにホバーすると詳細情報が表示されます。
  4. 結果の解析に基づいて、適切な次のステップを決定します。一般的な次のステップには、アプリケーションのチューニング、またはインテル® VTune™ プロファイラーやインテル® Advisor などのパフォーマンス解析ツールによる詳しい調査が含まれます。

MPI アプリケーションの分析

  1. 次のコマンドを実行して、MPI アプリケーションに関するデータを収集します。
    $ <mpi launcher> <mpi parameters> aps <my app> <app parameters>

    説明:

    • <mpi launcher> は、mpirun、srun、aprun などの MPI ジョブランチャーです。
    • <mpi parameters> は、MPI ランチャーのパラメーターです。

      aps は最後の <mpi launcher> パラメーターでなければなりません。

    • <my app> は、アプリケーションの場所です。
    • <app parameters> はアプリケーション・パラメーターです。

    アプリケーション・パフォーマンス・スナップショットは、アプリケーションを起動してデータ収集を実行します。解析が完了すると、aps_result_<date> ディレクトリーが作成されます。

  2. 次のコマンドを実行して、解析を完了します。
    $ aps –report=aps_result_<date>

    解析が完了すると、コマンドウィンドウにレポートが表示されます。サポートされるブラウザーで同じ情報を含む HTML レポートを開くこともできます。

  3. レポートに表示されているデータを解析します。後述のメトリックの説明を参考にしてください。HTML レポートでは、メトリックにホバーすると詳細情報が表示されます。

    ヒント

    アプリケーションが MPI 依存の場合、次のコマンドを実行して、メッセージサイズ、ランク間またはノード間のデータ転送、集合操作に費やされた時間など、メッセージパッシングに関する詳細を得ることができます。

    $ aps-report <option> app_result_<date>

    例えば、ランク間のグラフィック表現を生成するには、次のコマンドを使用します。
    $ aps-report -x –format=html <result name>

    $ aps-report –help で利用可能なオプションを確認できます。

  4. 結果の解析に基づいて、適切な次のステップを決定します。一般的な次のステップには、mpitune ユーティリティーによる通信のチューニング、またはインテル® Trace Analyzer & Collector やインテル® VTune™ プロファイラーなどのパフォーマンス解析ツールによるさらなる調査が含まれます。

次のステップ

  • 一時停止/再開機能や選択的収集を使用してアプリケーション・パフォーマンス・スナップショットを実行することで、収集されるデータの精度を高め、サイズを制限できます。例えば、-start-paused オプションを使用してアプリケーションを一時停止した状態で開始し、ウォームアップ・フェーズの後に _itt_resume()MPI_Pcontrol(1) を追加します。詳細は、『アプリケーション・パフォーマンス・スナップショット・ユーザーズガイド』 (英語) を参照してください。
  • インテル® Trace Analyzer & Collector: MPI アプリケーションの動作を理解し、ボトルネックを素早く特定し、正当性を向上し、インテル® アーキテクチャーで動作する並列クラスター・アプリケーションで優れたパフォーマンスを実現するためのグラフィカルなツールです。アプリケーションのスケーリングを向上します。入門ガイド (英語)
  • インテル® VTune™ プロファイラー: アルゴリズムのホットスポット解析、OpenMP* スレッド、マイクロアーキテクチャー全般解析、メモリーアクセス効率など、ノードレベルのパフォーマンスの詳細を提供します。C/C++、Fortran、Java*、Python*、およびコンテナーのプロファイルをサポートします。入門ガイド (英語)
  • インテル® Advisor: Fortran、C、および C++ アプリケーションが最新のプロセッサーのパフォーマンスを最大限に引き出せるように支援する 2 つのツールを提供します。入門ガイド (英語)
    • ベクトル化アドバイザー: ベクトル化により恩恵を得られるループを特定し、効率良いベクトル化を妨げている原因を解析し、代替データ再構成の利点を予測する最適化ツールです。
    • スレッド化アドバイザー: 通常の環境に干渉することなく、スレッド化設計の選択肢を解析、設計、チューニング、および確認できるスレッド化設計/プロトタイプ生成ツールです。

メトリックのクイック・リファレンス

アプリケーション・パフォーマンス・スナップショットでは、次のメトリックが収集されます。各メトリックの詳細は、インテル® VTune™ プロファイラーのオンラインヘルプ (英語) を参照してください。

Elapsed Time (経過時間): 指定したアプリケーションの実行時間 (秒)。収集が一時停止された時間は含まれません。

SP GFLOPS: 1 秒間に計算された単精度ギガ浮動小数点操作の数。すべての倍精度操作は 2 つの単精度操作に変換されます。SP GFLOPS メトリックは、第 3 世代インテル® Core™ プロセッサー、第 5 世代インテル® プロセッサー、および第 6 世代インテル® プロセッサーでのみ利用できます。

Cycles per Instruction Retired (CPI) (リタイアした命令ごとのサイクル数): 実行された各命令にかかった時間 (サイクル数)。CPI =1 は、ハイパフォーマンス・コンピューティング (HPC) アプリケーションでは許容値と見なされますが、アプリケーション・ドメインごとに期待値は異なります。CPI 値は、レイテンシーの長いメモリー操作、浮動小数点操作、SIMD 操作、分岐予測ミスによりリタイアしない命令、またはフロントエンドの命令スタベーションがあると、大きくなる傾向にあります。

MPI Time (MPI 時間): MPI 呼び出しに費やされたプロセスごとの平均時間。MPI_Finalize に費やされた時間は含まれません。値が大きい場合、ライブラリー内の長い待機時間、アクティブな通信、MPI ライブラリーの最適でない設定が原因の可能性があります。このメトリックは、MPICH ベースの MPI で利用できます。

MPI Imbalance (MPI インバランス): ランクが通信操作の待機でスピンに費やした CPU 時間。値が大きい場合、ランク間のアプリケーション・ワークロードのインバランス、最適でない通信スキーム、MPI ライブラリーの最適でない設定が原因の可能性があります。このメトリックは、インテル® MPI ライブラリー 2017 以降でのみ利用できます。

OpenMP* Imbalance (OpenMP* インバランス): ロードインバランスのためアプリケーションが OpenMP* 同期バリアで浪費した経過時間の割合。このメトリックは、インテルの OpenMP* ランタイム・ライブラリーでのみ利用できます。

Intel Omni-Path Fabric Interconnect Bandwidth and Packet Rate (インテル® Omni-Path ファブリックのインターコネクト帯域幅とパケットレート): 計算ノードごとの平均インターコネクト帯域幅とパケットレート (送信値と受信値)。値がインターコネクトの上限に近くなると、ネットワーク通信の待ち時間が長くなります。インターコネクト・メトリックは、インテル® VTune™ プロファイラーのドライバーがインストールされている場合にインテル® Omni-Path ファブリックで利用できます。

CPU Utilization (CPU 利用率): アプリケーションによるシステムのすべての論理 CPU コアの利用率の予測。このメトリックは、アプリケーションの並列効率を評価するのに役立ちます。100% の利用率は、アプリケーションの実行中ずっと、すべての論理 CPU コアがビジーに保たれていることを意味します。このメトリックは、アプリケーションの有用なワークと並列ランタイムで費やされた時間を区別しないことに注意してください。

Memory Stalls (メモリーストール): アプリケーションのパフォーマンスに影響を与えるメモリー・サブシステムの問題の数。要求ロード/ストア命令によりパイプラインがストールする可能性のあるスロットの割合を測定します。値が大きい場合、キャッシュストール、DRAM ストール、およびリモートアクセスの割合メトリックを確認して、メモリー関連のパフォーマンス・ボトルネックの性質を理解します。平均メモリー帯域幅がシステム帯域幅の上限に近い場合、メモリーストールを回避するため、メモリー依存アプリケーション向けの最適化手法が必要になる可能性があります。

FPU Utilization (FPU 利用率): アプリケーション実行中の FPU 利用率。このメトリックは、アプリケーションのベクトル効率を評価するのに役立ちます。この値は、FPU で実行される操作の割合を予測して計算されます。100% の値は FPU が完全にロードされていることを意味します。50% 未満の値は、詳しい解析が必要です。FPU メトリックは、第 3 世代インテル® Core™ プロセッサー、第 5 世代インテル® プロセッサー、および第 6 世代インテル® プロセッサーでのみ利用できます。

I/O Operations (I/O 操作): ディスクからのデータの読み取りまたはディスクへのデータの書き込みにアプリケーションが費やした時間。Read (読み取り) 値と Write (書き込み) 値は、経過時間中に読み書きされるデータの平均と最大量を示します。このメトリックは、MPI アプリケーションでのみ利用できます。

Memory Footprint (メモリー使用量): 仮想メモリーと常駐メモリーのランクごとおよびノードごとの平均使用量。

ドキュメントとリソース

リソース 説明
パフォーマンス・スナップショットのユーザーフォーラム (英語) アプリケーション・パフォーマンス・スナップショットを含む、インテルのすべてのパフォーマンス・スナップショット・ツール用のユーザーフォーラム。
アプリケーション・パフォーマンス・スナップショット (英語) アプリケーション・パフォーマンス・スナップショットの製品ページ。サポートとオンライン・ドキュメントに関する情報を入手できます。
アプリケーション・パフォーマンス・スナップショット・ユーザーズガイド (英語) 各メトリックの詳細やアプリケーション最適化のベスト・プラクティスなど、アプリケーション・パフォーマンス・スナップショットについて詳しく説明したマニュアル。

著作権と商標について

Intel、インテル、Intel ロゴ、Intel Core、VTune は、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

Microsoft および Windows は、米国 Microsoft Corporation の、米国およびその他の国における登録商標または商標です。

© 2016-2020 Intel Corporation.

本ソフトウェアおよび関連ドキュメントは、インテルが著作権を有する著作物であり、その使用には付随する明示的なライセンス (「ライセンス」) が適用されます。ライセンスに明記されている場合を除き、インテルから事前に書面による許可なしに、ソフトウェアまたは関連ドキュメントを使用、改変、複製、公開、配布、開示、転送してはなりません。

本ソフトウェアおよび関連ドキュメントは現状のまま提供され、ライセンスに明記されている場合を除き、明示されているか否かにかかわらず、いかなる保証もいたしません。

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

関連記事