インテル® VTune™ プロファイラー・ユーザーガイド

コマンドラインから OpenMP* を解析

インテル® コンパイラーでコンパイルされた OpenMP* アプリケーションの解析に、インテル® VTune™ プロファイラーのコマンドライン・インターフェイスを使用します。

必要条件:

OpenMP* は、OpenMP* プログラムが単一のマスター・シリアルコードのスレッドで実行開始するフォーク・ジョイン・モデルを導入しています。並列領域に到達すると、スレッドは並列領域を実行する複数のスレッドにフォークします。並列領域の終わりで各スレッドはバリアでジョインして、マスタースレッドがシリアルコードの実行を続行します。マスタースレッドが並列領域にフォークし、barriersingle などの構造でワークを調整する、MPI プログラムのように OpenMP* プログラムを記述することもできます。しかし、OpenMP* プログラムでは、シリアルコードが点在する並列領域のシーケンスで構成される方が一般的です。

理想的な並列アプリケーションでは、実行開始から終了までワーカースレッドが有効なワークを実行して、利用可能な CPU コアの処理時間を 100% 利用します。実際には、ワーカースレッドがアクティブにスピンしたり (この場合、短い待機時間が想定されます)、CPU を消費せずに受動的に待機することで、有効な CPU 利用率は低くなります。ワーカースレッドが待機し、有効なワークを実行しない理由はいくつかあります。

インテル® Composer XE 2013 Update 2 以降のバージョンでインテル® VTune™ プロファイラーを使用すると、アプリケーションが利用可能な CPU をどのように利用しているか理解し、CPU が未使用である原因を特定できます。

解析の設定と実行

コマンドラインから OpenMP* 解析を実行するには、threading または hpc-performance 解析タイプを使用します。次に例を示します。

vtune -collect hpc-performance -- myApp  

HPC パフォーマンス特性は、OpenMP* メトリックと検出されたパフォーマンスの問題の説明を含むサマリーレポートを生成します。

スレッド化および HPC パフォーマンス特性解析タイプでは、OpenMP* 解析オプションがデフォルトで有効になります。また、カスタム解析を作成し、knob オプション analyze-openmp=true で明示的に有効にすることもできます。次に例を示します。

vtune -collect-with runsa -knob analyze-openmp=true -knob enable-user-tasks=true -- myApp  

サマリー・レポート・データの表示

データ収集が完了すると、インテル® VTune™ プロファイラーは自動的にサマリーレポートを生成します。GUI で利用可能な [サマリー] ウィンドウと同様に、サマリーレポートはターゲットのパフォーマンス・データの概要を提供します。

既存の結果からレポートを生成するには、次のコマンドラインを使用します。

vtune -report summary -result-dir <result_path>

HPC パフォーマンス特性解析では、コマンドライン・サマリー・レポートに、事前定義されたしきい値を超えるメトリックに対する問題の説明が示されます。サマリーレポートの問題をスキップする場合、以下のいずれかの操作を行います。

アプリケーションの非効率な並列化については、サマリーレポートの OpenMP* 解析セクションを調査します。

Serial Time: 0.069s (0.3%)
Parallel Region Time: 23.113s (99.7%)
    Estimated Ideal Time: 14.010s (60.4%)
    OpenMP Potential Gain: 9.103s (39.3%)
     | The time wasted on load imbalance or parallel work arrangement is
     | significant and negatively impacts the application performance and
     | scalability. Explore OpenMP regions with the highest metric values.
     | Make sure the workload of the regions is enough and the loop schedule
     | is optimal.

このセクションには、収集時間に加えて、プログラムのシリアル領域 (並列領域外) と並列領域の持続時間が表示されます。シリアル領域が長い場合、さらに並列処理を導入するか、並列化が困難なシリアル領域ではアルゴリズムやマイクロアーキテクチャーのチューニングを行って、シリアル実行を短縮することを検討してください。スレッドカウントの多いマシンのシリアル領域は、潜在的なスケーリング (アムダールの法則) に悪影響を与えるため、可能な限り最小にすべきです。

潜在的なゲインを予測

コードの並列領域で CPU 利用率の効率を予測するには、潜在的なゲインメトリックを使用します。このメトリックは、実測された経過時間と並列領域の理想化された経過時間の差を予測します。理想化された経過時間とは、スレッドのバランスが完璧で OpenMP* ランタイムのオーバーヘッドがゼロであると仮定した場合の経過時間です。このデータを使用して、並列実行を改善することで短縮できる最大時間を見積ることができます。

最もホットなプログラム領域を特定するには、hotspots レポートを使用します。次のコマンドを使用して、潜在的なゲインのメトリック値が最も高い 5 つの並列領域を表示します。

vtune -report hotspots -result-dir r001hpc -group-by=region -sort-desc="OpenMP Potential Gain:Self" -column="OpenMP Potential Gain:Self" -limit 5  

説明:

上記のコマンドは次の出力を生成します。

OpenMP Region                 OpenMP Potential Gain
----------------------------------------------------------------  ---------------------
compute_rhs_$omp$parallel:24@/root/work/apps/OMP/SP/rhs.f:17:433                 3.417s
x_solve_$omp$parallel:24@/root/work/apps/OMP/SP/x_solve.f:27:315                 0.920s
z_solve_$omp$parallel:24@/root/work/apps/OMP/SP/z_solve.f:31:321                 0.913s
y_solve_$omp$parallel:24@/root/work/apps/OMP/SP/y_solve.f:27:310                 0.806s
pinvr_$omp$parallel:24@/root/work/apps/OMP/SP/pinvr.f:20:41                      0.697s

特定の領域の潜在的なゲインが大きい場合、バリアの影響によるインバランスなどの非効率性を示すメトリックを詳しく解析します。次のコマンドを使用します。

vtune -report hotspots -result-dir r001hpc -group-by=region,barrier -sort-desc="OpenMP Potential Gain:Self" -column="OpenMP Potential Gain" -limit 5

説明:

上記のコマンドは、次のデータを含む出力を生成します。

OpenMP* 領域 OpenMP* バリアからバリアのセグメント OpenMP* 潜在的なゲイン OpenMP* 潜在的なゲイン、負荷インバランス OpenMP* 潜在的なゲイン、ロックの競合 OpenMP* 潜在的なゲイン、生成 OpenMP* 潜在的なゲイン、スケジュール
compute_rhs_$omp$parallel:24@/root/work/OMP/SP/rhs.f:17:433 compute_rhs_$omp$loop_barrier_segment@/root/work/OMP/SP/rhs.f:285 0.985s 0.982s 0s 0s 0.000s
x_solve_$omp$parallel:24@/home/root/work/OMP/SP/x_solve.f:27:315 x_solve_$omp$loop_barrier_segment@/root/work/OMP/SP/x_solve.f:315 0.920s 0.904s 0.012s 0.000s 0.000s
z_solve_$omp$parallel:24@/root/work/OMP/SP/z_solve.f:31:321 z_solve_$omp$loop_barrier_segment@/root/work/OMP/SP/z_solve.f:321 0.913s 0.910s 0.000s 0.000s 0.000s
y_solve_$omp$parallel:24@/root/work/OMP/SP/y_solve.f:27:310 y_solve_$omp$loop_barrier_segment@/root/work/OMP/SP/y_solve.f:310 0.806s 0.803s 0.000s 0.000s 0.000s

OpenMP* スレッド数で正規化された非効率なコスト (経過時間) によりその領域の潜在的なゲインの内訳を示す OpenMP* 潜在的なゲインカラムのデータを解析します。経過時間のコストは、特定のタイプの非効率性に対応すべきかどうか判断するのに役立ちます。インテル® VTune™ プロファイラーは、次のタイプの非効率性を認識できます。

制限事項

インテル® VTune™ プロファイラーの並列 OpenMP* 領域の解析には、次のような制限があります。

関連情報