コマンドライン・インターフェイスを使用して GPU 上で実行する SYCL* アプリケーションのパフォーマンスを解析

インテル® VTune™ プロファイラー

この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® VTune™ Profiler Performance Analysis Cookbook」の「Using the Command-Line Interface to Analyze the Performance of a SYCL* Application running on a GPU」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


バージョン: 2023
更新日: 2022年12月16日

このレシピでは、インテル® VTune™ プロファイラーのコマンドライン・インターフェイス (CLI) を使用して、インテル® GPU にオフロードされた SYCL* アプリケーションのパフォーマンスを解析する方法を紹介します。また、収集したデータを使用してレポートをカスタマイズする方法も説明します。

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

インテル® VTune™ プロファイラーは、リモート解析、スクリプトコマンド、およびソフトウェアのパフォーマンスを長期的に監視するパフォーマンス・リグレッション・チェック用にコマンドライン・インターフェイス (vtune ツール) を提供しています。vtune コマンドライン・インターフェイス (CLI) は、GUI で可能なほぼすべてのタスクを実行できる豊富なオプションセットを備えています。コマンドラインから解析を開始して (バックグラウンド・タスクとして、またはリモートシステムで実行して)、結果を表示したり、レポートを生成できます。

このレシピでは、CLI を効率良く使用して、次の目的でホットスポットに関するレポートを生成する方法を説明します。

  • gpu-offload 解析と gpu-hotspots 解析を実行して CPU/GPU 側のホットスポットを調査します。
  • 最もホットな GPU 計算タスクを、次の情報とともに表示します。
    • 実行時間
    • データ転送
    • ワークグループ・サイズ
    • SIMD 幅
    • 平均 GPU ハードウェア・メトリック
  • ソース/アセンブリー・コード・ビューを生成して、パフォーマンスの問題に関連する可能性のある命令を調査します。

以下は、CLI を効率良く使用して GPU パフォーマンス解析を行うために必要なものと手順です。

使用するもの

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

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

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

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

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

    make clean

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

GPU 解析の必要条件を確認する

GPU オフロード解析または GPU 計算/ホットスポット解析を実行する前に次のステップを完了します。

  1. GPU 解析を実行するためシステムを準備します。「GPU 解析用にシステムをセットアップ」 (英語) を参照してください。
  2. インテル® ソフトウェア・ツールの環境変数を設定します。
    source $ONEAPI_ROOT/setvars.sh

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

GPU オフロード解析を開始点として、アプリケーションが CPU 依存か、GPU 依存かを特定します。データ転送解析により GPU オフロード効率を調査して、パフォーマンス・クリティカルなカーネルを見つけ、さらに詳しく解析して最適化します。

GPU オフロード解析を実行する

CLI で次のコマンドを実行します。

vtune -collect gpu-offload -r ./result_gpu-offload -- ./matrix.icpx -fsycl

デフォルトでは、インテル® VTune™ プロファイラーはデータ収集後にサマリーレポートを生成します。レポートには、次の情報が含まれます。

  • 経過時間
  • GPU 利用率
  • ホットな計算タスク
  • 推奨事項

サマリーレポートを表示するには、次のコマンドを実行します。

vtune -report summary -r ./result_gpu-offload

データ収集後すぐにサマリーレポートを表示しない場合は、-no-summary オプションを使用して設定を変更できます。

vtune -collect gpu-offload -no-summary -r ./result_gpu-offload -- ./matrix.icpx -fsycl

注:
インテル® Arc™ GPU (開発コード名 DG2) 以降のインテル® Xe グラフィックス製品では、従来の製品で使用されていた GPU 用語が変更されています。用語の変更についての詳細と新旧の対照表については、「インテル® Xe グラフィックスの GPU アーキテクチャー用語」 (英語) を参照してください。

その他のレポートを生成して収集データを表示する

  • CPU ホットスポット・レポート

    このレポートは、実行された関数のリストを、CPU 時間メトリック、モジュール名、ソースファイル・パス、その他のパラメーターとともに表示します。最もパフォーマンス・クリティカルなものから順にホットなプログラム単位も表示します。データを表形式で表示するには、-column-filter、および -limit オプションを使用します。

    vtune -report hotspots -r ./result_gpu-offload

    ホットスポット・レポート

  • モジュールでフィルター処理され、関数でグループ化された CPU ホットスポット・レポート

    -filter (英語) オプションを使用して、特定のモジュールなど、レポートの特定の部分に注目できます。そして、-group-by (英語) オプションを使用して、特定のシーケンスで結果をグループ化できます。

    vtune -report hotspots -r ./result_gpu-offload -group-by=function -filter module=matrix.icpx -fsycl -q

    関数名、モジュール、ソースファイル・パス、計算タスクなどで生成されたデータをグループ化できます。

    特定の結果で利用可能なグループ (英語) を表示するには、次のコマンドを実行します。

    vtune -report hotspots -r ./result_gpu-offload -group-by=?
  • 昇順/降順でソートされた CPU ホットスポット

    sort-desc (英語) と sort-asc (英語) オプションを使用して、ホットスポットに関する特定の情報を降順または昇順でソートできます。最大 3 つのカラムの順番を指定することが可能です。

    vtune -report hotspots -r result_gpu-offload -group-by module -sort-desc="CPU Time:Execution" -q

    以下に、別の例を示します。

    vtune -report hotspots -r result_gpu-offload -group-by module -sort-asc="CPU Time:Idle" -q

    特定の結果で利用可能なカラム (英語) を表示するには、次のコマンドを実行します。

    vtune -report hotspots -r ./result_gpu-offload -column=?

    レポートデータには、CPU Time:Self (CPU 時間: セルフ)Module (モジュール)Source File (ソースファイル) などのカラムがあります。

  • 上位 'n' 個の時間がかかるプログラムモジュールのレポート

    limit (英語) オプションを使用して上位 'n' 個のホットスポットに関する情報を表示できます。例えば、アプリケーションの上位 5 個の時間がかかるプログラムモジュールの詳細を理解するには、次のコマンドを実行します。

    vtune -report hotspots -r result_gpu-offload -group-by module -sort-desc="CPU Time" -limit=5 -q

  • (GPU にオフロードされた) 計算タスクでグループ化された、転送カラムを含むホットスポット・レポート

    このコマンドは、GPU 計算タスクでグループ化されたホットスポット情報と、CPU と GPU 間の転送サイズと転送時間の詳細を表示します。

    vtune -report hotspots -r ./result_gpu-offload -group-by=computing-task -column=Transfer -q

    レポートには、それぞれの計算タスクに起因するデータ転送が含まれます。

  • GPU オフロード計算タスクでグループ化された、時間カラムを含むホットスポット・レポート

    このコマンドは、オフロード計算タスクでグループ化されたホットスポット情報と、CPU と GPU 間の転送時間の詳細を表示します。

    vtune -report hotspots -r ./result_gpu-offload -group-by=computing-task-offload -column='Time' -q

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

次に、GPU 計算/メディア・ホットスポット解析を実行します。この解析は、GPU 依存のアプリケーションやそのステージのパフォーマンスをさらに向上するのに役立ちます。

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

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

vtune -collect gpu-hotspots -r ./result_gpu-hotspots -- ./matrix.icpx -fsycl

サマリーレポートを表示するには、次のコマンドを実行します。

vtune -report summary -r ./result_gpu-hotspots

計算タスクと L3 メトリックを表示するレポートを生成する

次のコマンドは計算タスクの L3 メトリックのみをリストするレポートを生成します。

vtune -report hotspots -r result_gpu-hotspots -group-by=computing-task -column='L3' -q

動的命令数と SIMD 利用率を含む GPU 計算/メディア・ホットスポット解析を実行する

特性化モードで GPU 計算/メディア・ホットスポット解析を実行して、動的命令数と SIMD 利用率のデータを収集します。

vtune -collect gpu-hotspots -knob characterization-mode=instruction-count -r ./result_gpu-hotspots_inst-count -- ./matrix.icpx -fsycl

ソースとアセンブリー・メトリックを表示するレポートを生成する

  • 特定の計算タスクのソースコード

    次のコマンドは、特定の計算タスクのソースコードを取得します。

    vtune -report hotspots -r result_gpu-hotspots_inst-count -source-object computing-task="Matrix1_1<float>" -group-by=gpu-source-line -column="Source","GPU Instructions Executed:Int32 & SP Float" -q

  • 特定の計算タスクのアセンブリー・コード

    次のコマンドは、特定の計算タスクのアセンブリー・コードを取得します。

    vtune -report hotspots -r result_gpu-hotspots_inst-count -source-object computing-task="Matrix1_1<float>" -group-by=address -limit=5 -q

  • CSV ファイルとしてレポートを保存する

    -report-output (英語) オプションを使用して、生成されたレポートをファイルに保存します。.csv 形式のレポートを生成するには、-format (英語) と -csv-delimiter (英語) オプションを使用します。

    vtune -report hotspots -r result_gpu-hotspots_inst-count -source-object computing-task="Matrix1_1<float>" -group-by=address -limit=5 -report-output=result.csv -format=csv -csv-delimiter=comma -q

GPU プログラミング API 統計を含むカスタム解析を実行する

GPU 計算カーネルに関連する時間と統計の詳しい情報を得るには、GPU 計算/メディア・ホットスポット解析を行った後に、[GPU Programming API (GPU プログラミング API)] 統計を収集するカスタム解析を行います。

これによって得られるカーネルデータは、CLIntercept ツール (DevicePerformanceTiming (英語) オン) および Summary モードの nvprof ツールを実行して収集されるデータに似ています。

GPU プログラミング API 統計を収集する

コマンドラインで、次のコマンドを入力します。

vtune -collect-with runss -knob collect-programming-api=true -no-summary -r ./result_gpu-programming-api -- ./matrix.icpx -fsycl

GPU 計算カーネルに関連する時間と統計を用事するレポートを生成する

このコマンドは、計算タスクに関連する時間とインスタンス数を表示するレポートを生成します。データは、[Total Time (合計時間)] の降順でソートされます。

vtune -report hotspots -group-by=source-computing-task -column="Total Time,Average Time,Instance Count" -sort-desc="Total Time" -r ./result_gpu-programming-api/ -q

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

関連情報

インテル® VTune™ プロファイラー・パフォーマンス解析クックブックのトップに戻る


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

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

タイトルとURLをコピーしました