GPU 上で実行する OpenMP* オフロード・アプリケーションのプロファイル

この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® VTune™ Profiler Performance Analysis Cookbook」の「Profiling an OpenMP* Offload Application running on a GPU (NEW)」の日本語参考訳です。


バージョン: 2020 (最終更新日: 2021 年 3 月 26 日)

このレシピでは、インテル® GPU へオフロードされる OpenMP* アプリケーションをコンパイルする方法を示し、インテル® VTune™ プロファイラーで OpenMP* アプリケーションの GPU 解析 (HPC パフォーマンス特性、GPU オフロード、および GPU 計算/メディア・ホットスポット) を実行して、結果を調査する方法を紹介します。

コンテンツ・エキスパート: Sunny Gogar、Nikita Kiryuhin

使用するもの

以下は、このパフォーマンス解析の最小ハードウェアおよびソフトウェア要件です。

OpenMP* オフロード・アプリケーションをコンパイルする

Linux*:

  1. サンプル・ディレクトリーに移動します。
    cd <sample_dir>/DirectProgramming/C++/StructuredGrids/iso3dfd_omp_offload
    
  2. OpenMP* オフロード・アプリケーションをコンパイルします。
    mkdir build; 
    cd build;
    cmake -DVERIFY_RESULTS=0 -DCMAKE_CXX_FLAGS="-g -mllvm -parallel-source-info=2"  ..
    make -j
    

    src/iso3dfd 実行ファイルが生成されます。

    プログラムを削除するには、次のコマンドを実行します。

    make clean
    

    make コマンドによって作成された実行ファイルとオブジェクト・ファイルが削除されます。

Windows*:

  1. サンプル・ディレクトリーに移動します。
    cd <sample_dir>/ DirectProgramming/C++/StructuredGrids/iso3dfd_omp_offload
    
  2. OpenMP* オフロード・アプリケーションをコンパイルします。
    mkdir build
    cd build
    icx /Zi -mllvm -parallel-source-info=2 /std:c++17 /EHsc /Qiopenmp /I../include\ /Qopenmp-targets:spir64 /DUSE_BASELINE /DEBUG ..\src\iso3dfd.cpp ..\src\iso3dfd_verify.cpp ..\src\utils.cpp
    

OpenMP* オフロード・アプリケーションの HPC パフォーマンス特性解析を実行する

OpenMP* オフロード・アプリケーションのパフォーマンスに関する高レベルのサマリーを取得するには、HPC パフォーマンス特性解析を実行します。この解析タイプは、アプリケーションが CPU、GPU、およびメモリーをどのように利用しているかを理解するのに役立ちます。また、コードがどの程度ベクトル化されているかも確認できます。

OpenMP* オフロード・アプリケーションでは、HPC パフォーマンス特性解析は各 OpenMP* オフロード領域に関連したハードウェア・メトリックを示します。

必要条件: GPU 解析を実行するシステムを準備します。「GPU 解析用にシステムをセットアップ」 (英語) を参照してください。

  1. インテル® VTune™ プロファイラーを開き、[New Project (新規プロジェクト)] をクリックしてプロジェクトを作成します。
  2. [Welcome (ようこそ)] ページで [Configure Analysis (解析の設定)] をクリックして解析を設定します。
  3. 次の解析設定を選択します。
    • [WHERE (どこを)] ペインでは、[Local Host (ローカルホスト)] ターゲット・システム・タイプを選択します。
    • [WHAT (何を)] ペインでは、[Launch Application (アプリケーションを起動)] を選択して、プロファイルするアプリケーションとして iso3dfd_omp_offload バイナリーを指定します。
    • [HOW (どのように)] ペインでは、解析ツリーの [Parallelism (並列処理)] グループから [HPC Performance Characterization (HPC パフォーマンス特性)] 解析タイプを選択します。

    HPC パフォーマンス特性解析の設定

  4. [Start (開始)] ボタンをクリックして、解析を実行します。

コマンドラインから解析を実行する

コマンドラインから HPC パフォーマンス特性解析を実行するには、次の操作を行います。

  • Linux*:
    1. スクリプトをエクスポートしてインテル® VTune™ プロファイラーの環境変数を設定します。

      export <install_dir>/vtune-vars.sh

    2. HPC パフォーマンス特性解析を実行します。

      vtune -collect hpc-performance – src/iso3dfd 256 256 256 16 8 64 100

  • Windows*:
    1. バッチファイルを実行してインテル® VTune™ プロファイラーの環境変数を設定します。

      <install_dir>\vtune-vars.bat

    2. HPC パフォーマンス特性解析を実行します。

      vtune -collect hpc-performance – iso3dfd.exe 256 256 256 16 8 64 100

HPC パフォーマンス特性データを調査する

[Summary (サマリー)] ペインから調査を開始します。[Effective Physical Core Utilization (効率的な物理コア利用率)] (または [Effective Logical Core Utilization (効率的な論理コア利用率)]) と [GPU Utilization when Busy (ビジー時の GPU 利用率)] セクションでハイライトされている問題を確認します。

[GPU Utilization when Busy (ビジー時の GPU 利用率)] セクションでは、オフロード時間でソートされた OpenMP* オフロード領域の上位に注目します。これらのオフロード領域の GPU 利用率を確認します。

ビジー時の GPU 利用率メトリック

完全なデバッグ情報付きでアプリケーションをコンパイルした場合、領域名にソースの場所に関する次の情報が含まれます。

  • 関数名
  • ソースファイル名
  • 行番号

この例では、オフロード・アクティビティーのほぼすべてが [Compute (計算)] アクティビティーとして分類されています。また、1 つのオフロード領域がオフロード時間の大部分を消費しています。このオフロード領域名をクリックして [Bottom-Up (ボトムアップ)] ビューに切り替えます。OpenMP* オフロード領域の時間、領域インスタンス数、GPU および CPU メトリックを含むグループ化されたテーブルを調査します。

タイムライン・ビューの上部にある領域マーカーにホバーすると、各オフロード領域の名前と時間、領域内のオフロード操作が表示されます。タイムラインの GPU メトリックは、オフロード領域の各インスタンスが時間経過とともにどのように動作するのかを理解するのに役立ちます。

これらの詳細は、このアプリケーションのパフォーマンスにおいて GPU アクティビティーが重要な役割を果たしていることを明確に示しています。次に、GPU オフロード解析に移動して詳細を見てみましょう。

OpenMP* オフロード・アプリケーションの GPU オフロード解析を実行する

必要条件: まだ行っていない場合は、GPU 解析を実行するためシステムを準備します。「GPU 解析用にシステムをセットアップ」 (英語) を参照してください。

  1. 解析ツリーの [Accelerators (アクセラレーター)] グループから [GPU Offload (GPU オフロード)] 解析タイプを選択します。
  2. 次の解析設定を選択します。

    GPU オフロード解析の設定

  3. [Start (開始)] ボタンをクリックして、解析を実行します。

コマンドラインから解析を実行する

コマンドラインから GPU オフロード解析を実行するには、次のコマンドを使用します。

  • Linux*:
     vtune -collect gpu-offload - src/iso3dfd 256 256 256 16 8 64 100
    
  • Windows*:
     vtune -collect gpu-offload - iso3dfd.exe 256 256 256 16 8 64 100
    

GPU オフロード解析データを調査する

[GPU Offload (GPU オフロード)] ビューポイントから調査を開始します。

[Summary (サマリー)] ウィンドウで CPU および GPU リソースの利用に関する統計を確認します。このデータからアプリケーションの特性を判断します。

  • GPU 依存
  • CPU 依存
  • システムの計算リソースの非効率的な利用

この例では、アプリケーションは計算集約型の処理に GPU を使用すべきです。しかし、解析結果から、実際の GPU 利用率が低いことが分かります。

OpenMP* アプリケーションの GPU 利用率メトリック

[Platform (プラットフォーム)] ウィンドウに切り替えます。ここでは、ソフトウェア・キューの GPU 利用率の解析に役立つ基本的な CPU および GPU メトリックを確認できます。このデータは、タイムラインで CPU 利用率に関連付けられます。

GPU 利用率メトリックを示すプラットフォーム・ビュー

[Platform (プラットフォーム)] ウィンドウの情報は、いくつかの推論に役立ちます。

GPU 依存アプリケーション CPU 依存アプリケーション
プロファイル時間の大部分で GPU がビジー

プロファイル時間の大部分で CPU がビジー

ビジーである間に小さなアイドル時間がある

ビジーである間に大きなアイドル時間がある

GPU ソフトウェア・キューがほとんどゼロにならない


ほとんどのアプリケーションでは、ここに示すような明らかな状況は発生しません。すべての依存関係を理解するには、詳細な解析が重要です。例えば、ビデオ処理とレンダリングを行う GPU エンジンが交互にロードされる場合、これらのエンジンはシリアルに使用されます。アプリケーション・コードを CPU で実行する場合、GPU のスケジュールが非効率になります。これにより、誤ってアプリケーションが GPU 依存であると解釈される可能性があります。

計算タスク・リファレンスと [GPU Utilization (GPU 利用率)] メトリックに基づいて GPU 実行フェーズを特定します。そして、タスクの作成とキューへの配置のオーバーヘッドを定義します。

計算タスクを調査するには、[Graphics (グラフィックス)] ウィンドウに切り替えて、スレッドごとに GPU 上で実行しているワークの種類 (レンダリングまたは計算) を調べます。[Computing Task (計算タスク)] グループを選択して、テーブルでタスクのパフォーマンス特性を調べます。

iso3dfd_omp_offload コードのほかの実装をプロファイルするには、サンプルの README ファイルに従ってください。

次のセクションでは、「GPU 計算/メディア・ホットスポット解析」 (英語) を使用して調査を続けます。

OpenMP* オフロード・アプリケーションの GPU 計算/メディア・ホットスポット解析を実行する

必要条件: まだ行っていない場合は、GPU 解析を実行するためシステムを準備します。「GPU 解析用にシステムをセットアップ」 (英語) を参照してください。

解析を実行するには、次の操作を行います。

  1. [Accelerators (アクセラレーター)] グループで [GPU Compute/Media Hotspots (GPU 計算/メディア・ホットスポット)] 解析タイプを選択します。
  2. 前のセクションで説明したように解析オプションを設定します。
  3. [Start (開始)] ボタンをクリックして、解析を実行します。

コマンドラインから解析を実行する

コマンドラインから解析を実行するには、次のコマンドを使用します。

  • Linux*:

    vtune -c gpu-hotspots -knob profiling-mode=source-analysis – src/iso3dfd 256 256 256 16 8 64 100

  • Windows*:

    vtune -collect gpu-hotspots – iso3dfd.exe 256 256 256 16 8 64 100

計算タスクを調査する

デフォルトの解析設定は、Overview (概要) メトリックセットを含む [Characterization (特性)] プロファイルを実行します。[GPU Offload (GPU オフロード)] 解析で提供される個々の計算タスクの特性に加えて、GPU メモリー階層ごとに分類されたメモリー帯域幅メトリックを取得できます。

計算タスクでグループ化

メモリー階層を視覚的に確認するには、[Memory Hierarchy Diagram (メモリー階層ダイアグラム)] を使用します。このダイアグラムは、現在の GPU マイクロアーキテクチャーを反映しており、メモリー帯域幅メトリックを提供します。このダイアログからメモリーユニットと実行ユニット間のデータ・トラフィックを理解できます。また、EU ストールの原因となる潜在的なボトルネックも特定できます。

メモリー階層ダイアグラム

ソースコード・レベルで計算タスクを調査することもできます。例えば、特定のタスクやメモリー・レイテンシーにより費やされた GPU クロックサイクル数を特定できます。これには、[Source Analysis (ソース解析)] オプションを使用します。

コマンドラインからメモリー・レイテンシーのソース解析を実行する

コマンドラインからメモリー・レイテンシーのソース解析オプションを指定して解析を実行するには、次のコマンドを使用します。

  • Linux*:

    vtune -c gpu-hotspots -knob profiling-mode=source-analysis -knob source-analysis=mem-latency -r iso_ghs_src-analysis_mem – src/iso3dfd 256 256 256 16 8 64 100

ソースビューで、オフロードカーネルの [Average Latency Cycles (平均レイテンシー・サイクル)] を調べます。

メモリー・レイテンシーのソース解析

コマンドラインから基本ブロック・レイテンシーのソース解析を実行する

コマンドラインから基本ブロック・レイテンシーのソース解析オプションを指定して解析を実行するには、次のコマンドを使用します。

  • Linux*:

    vtune -c gpu-hotspots -knob profiling-mode=source-analysis -r iso_ghs_src-analysis – src/iso3dfd 256 256 256 16 8 64 100

ソースビューで、オフロードカーネルの [Average Latency Cycles (平均レイテンシー・サイクル)] を調べます。

基本ブロック・レイテンシーのソース解析


このレシピの情報は、インテル® VTune™ プロファイラー・デベロッパー・フォーラム (英語) を参照してください。

関連情報

インテル® VTune™ プロファイラーを使用してインテル® GPU 向けにアプリケーションを最適化 (英語)
HPC パフォーマンス特性解析 (英語)
GPU オフロード解析 (英語)
GPU 計算/メディア・ホットスポット解析 (英語)

製品とパフォーマンス情報

1実際の性能は利用法、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) を参照してください。

関連記事