GPU 上で実行する DPC++ アプリケーションのプロファイル

同カテゴリーの次の記事

マルチプロセッサー・システムにおける NUMA のパフォーマンスへの影響を測定する

この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® VTune™ Profiler Performance Analysis Cookbook」の「Improving Hotspot Observability in a C++ Application Using Flame Graphs」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


バージョン: 2022
更新日: 2022 年 2 月 28 日

このレシピでは、データ並列 C++ (DPC++) アプリケーションを作成してコンパイルし、インテル® VTune™ プロファイラーで GPU 解析を実行して、結果を調査する方法を紹介します。

コンテンツ・エキスパート: Vladimir Tsymbal (英語)

使用するもの

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

  • アプリケーション: matrix_multiply_vtune (英語)。このサンプル・アプリケーションは、インテル® oneAPI ツールキットのサンプルコード・パッケージ (英語) に含まれています。
  • コンパイラー: DPC++ アプリケーションをコンパイルするには、インテル® oneAPI ツールキットに含まれるインテル® oneAPI DPC++/C++ コンパイラー (dpcpp) (英語) が必要です。
  • ツール: インテル® VTune™ プロファイラー – GPU オフロード解析および GPU 計算/メディア・ホットスポット解析

    注:

    • バージョン 2020 から、インテル® VTune™ Amplifier の名称がインテル® VTune™ プロファイラーに変わりました。
    • インテル® VTune™ プロファイラー・パフォーマンス解析クックブックの大部分のレシピは、異なるバージョンのインテル® VTune™ プロファイラーにも適用できます。バージョンにより、調整が必要になる場合があります。
    • 最新バージョンのインテル® VTune™ プロファイラーは以下から入手できます。
  • マイクロアーキテクチャー:
    • 第 8 世代、第 9 世代、または第 11 世代インテル® プロセッサー・グラフィックス
    • インテル® マイクロアーキテクチャー開発コード名 Kaby Lake、Coffee Lake、または Ice Lake
  • オペレーティング・システム:
    • Linux* カーネルバージョン 4.14 以降
    • Windows* 10
  • Linux* 向けグラフィカル・ユーザー・インターフェイス:
    • GTK+* (2.10 以降、2.18 以降を推奨)
    • Pango* (1.14 以降)
    • X.Org* (1.0 以降、1.7 以降を推奨)

DPC++ アプリケーションを作成してコンパイルする

Linux*:

  1. サンプル・ディレクトリーに移動します。
    cd <sample_dir>/VtuneProfiler/matrix_multiply_vtune
    
  2. src ディレクトリーの multiply.cpp ファイルには、行列乗算のいくつかの DPC++ バージョンが含まれています。multiply.hpp の対応する #define MULTIPLY 行を編集してバージョンを選択します。
  3. サンプル DPC++ アプリケーションをコンパイルします。
    cmake .
    make
    

    matrix.dpcpp 実行ファイルが生成されます。

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

    make clean
    

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

Windows*:

  1. サンプル・ディレクトリーに移動します。
    <sample_dir>\VtuneProfiler\matrix_multiply_vtune
    
  2. matrix_multiply.sln という名前の Visual Studio* プロジェクト・ファイルを開きます。
  3. multiply.cpp ファイルには、行列乗算のいくつかの DPC++ バージョンが含まれています。multiply.hpp の対応する #define MULTIPLY 行を編集してバージョンを選択します。
  4. Release 構成でプロジェクト全体をビルドします。

    matrix_multiply.exe 実行ファイルが生成されます。

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

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

  1. インテル® VTune™ プロファイラーを起動して、[Welcome (ようそこ)] ページで [New Project (新規プロジェクト)] をクリックします。

    [Create a Project (プロジェクトの作成)] ダイアログボックスが表示されます。

  2. プロジェクトの名前と場所を指定したら、[Create Project (プロジェクトの作成)] をクリックします。

    [Configure Analysis (解析の設定)] ダイアログボックスが開きます。

  3. [WHERE (どこを)] ペインで [Local Host (ローカルホスト)] が選択されていることを確認します。
  4. [WHAT (何を)] ペインでは、[Launch Application (アプリケーションを起動)] が選択されていることを確認して、[Application (アプリケーション)]matrix_multiply バイナリーを指定します。
  5. [HOW (どのように)] ペインで [Accelerators (アクセラレーター)] グループから [GPU Offload (GPU オフロード)] 解析タイプを選択します。

    これは、インテル® VTune™ プロファイラーでサポートされるインテル® グラフィックスおよびサードパーティー製 GPU 搭載プラットフォームで実行するアプリケーションに対して、最も干渉が少ない解析タイプです。

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

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

コマンドラインから解析を実行するには、次の操作を行います。

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

      export <install_dir>/env/vars.sh

    2. 解析を実行します。

      vtune -collect -gpu-offload — ./matrix.dpcpp

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

      export <install_dir>\env\vars.bat

    2. 解析を実行します。

      vtune.exe -collect gpu-offload — matrix_multiply.exe

収集データを解析する

[GPU Offload (GPU オフロード)] ビューポイントから調査を開始します。[Summary (サマリー)] ウィンドウで CPU と GPU リソースの利用に関する統計を確認して、アプリケーションが GPU 依存か、CPU 依存か、あるいはシステムの計算能力を効率良く利用できているかどうかを判断します。この例では、アプリケーションは計算集約型の処理に GPU を使用すべきです。しかし、解析結果から、実際の GPU 利用率が低いことが分かります。

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

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

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

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

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

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


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

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

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

計算タスクを詳しく解析するため、GPU 計算/メディア・ホットスポット解析を実行します。

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

GPU 計算/メディア・ホットスポット解析を実行する

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

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

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

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

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

  • Linux*:

    vtune -collect gpu-hotspots — ./matrix.dpcpp

  • Windows*:

    vtune.exe -collect gpu-hotspots — matrix_multiply.exe

計算タスクを調査する

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

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

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


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

関連情報

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


製品および性能に関する情報

1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。

関連記事