コマンドライン・インターフェイスを使用して GPU 上で実行する DPC++ アプリケーションのパフォーマンスを解析
この記事は、インテル® デベロッパー・ゾーンに公開されている「Intel® VTune™ Profiler Performance Analysis Cookbook」の「Using the Command-Line Interface to Analyze the Performance of a DPC++ Application running on a GPU (NEW)」の日本語参考訳です。
バージョン: 2020 (最終更新日: 2021 年 3 月 26 日)
このレシピでは、インテル® VTune™ プロファイラーのコマンドライン・インターフェイス (CLI) を使用して、インテル® GPU にオフロードされたデータ並列 C++ (DPC++) アプリケーションのパフォーマンスを解析する方法を紹介します。また、収集したデータを使用してレポートをカスタマイズする方法も説明します。
コンテンツ・エキスパート: Egor Suldin (英語)、Mariya Petrova (英語)
インテル® VTune™ プロファイラーは、リモート解析、スクリプトコマンド、およびソフトウェアのパフォーマンスを長期的に監視するパフォーマンス・リグレッション・チェック用にコマンドライン・インターフェイス (vtune ツール) を提供しています。vtune コマンドライン・インターフェイス (CLI) は、GUI で可能なほぼすべてのタスクを実行できる豊富なオプションセットを備えています。コマンドラインから解析を開始して (バックグラウンド・タスクとして、またはリモートシステムで実行して)、結果を表示したり、レポートを生成できます。
このレシピでは、CLI を効率良く使用して、次の目的でホットスポットに関するレポートを生成する方法を説明します。
- gpu-offload 解析と gpu-hotspots 解析を実行して CPU/GPU 側のホットスポットを調査します。
- 最もホットな GPU 計算タスクを、次の情報とともに表示します。
- 実行時間
- データ転送
- ワークグループ・サイズ
- SIMD 幅
- 平均 GPU ハードウェア・メトリック
- ソース/アセンブリー・コード・ビューを生成して、パフォーマンスの問題に関連する可能性のある命令を調査します。
以下は、CLI を効率良く使用して GPU パフォーマンス解析を行うために必要なものと手順です。
使用するもの
以下は、このパフォーマンス解析の最小ハードウェアおよびソフトウェア要件です。
- アプリケーション: matrix_multiply_vtune (英語)。このサンプル・アプリケーションは、インテル® oneAPI ツールキットのサンプルコード・パッケージ (英語) に含まれています。
- コンパイラー: DPC++ アプリケーションをコンパイルするには、インテル® oneAPI ベース・ツールキット (英語) に含まれるインテル® oneAPI DPC++/C++ コンパイラー (dpcpp) (英語) が必要です。
- ツール: インテル® VTune™ プロファイラー 2021 – GPU オフロード解析 (英語) および GPU 計算/メディア・ホットスポット解析 (英語)
注
- バージョン 2020 から、インテル® VTune™ Amplifier の名称がインテル® VTune™ プロファイラーに変わりました。
- インテル® VTune™ プロファイラー・パフォーマンス解析クックブックのほとんどのレシピは、異なるバージョンのインテル® VTune™ プロファイラーにも適用できます。バージョンにより、わずかな調整が必要になる場合があります。
- 最新バージョンのインテル® VTune™ プロファイラーは以下から入手できます。
- マイクロアーキテクチャー:
- インテル® Iris® Pro グラフィックス 580
- インテル® マイクロアーキテクチャー開発コード名 Skylake S
- オペレーティング・システム:
- Ubuntu* 20.04 LTS
DPC++ アプリケーションをコンパイルする
- サンプル・ディレクトリーに移動します。
cd <sample_dir>/VtuneProfiler/matrix_multiply_vtune
- src ディレクトリーの multiply.cpp ファイルには、行列乗算のいくつかの DPC++ バージョンが含まれています。multiply.hpp の対応する #define MULTIPLY 行を編集してバージョンを選択します。
- サンプル DPC++ アプリケーションをコンパイルします。
cmake . && make
このコマンドは、matrix.dpcpp 実行ファイルを生成します。
プログラムを削除するには、次のコマンドを実行します。
make clean
このコマンドは、make コマンドによって作成された実行ファイルとオブジェクト・ファイルを削除します。
GPU 解析の必要条件を確認する
GPU オフロード解析または GPU 計算/ホットスポット解析を実行する前に次のステップを完了します。
- GPU 解析を実行するためシステムを準備します。「GPU 解析用にシステムをセットアップ」 (英語) を参照してください。
- インテル® ソフトウェア・ツールの環境変数を設定します。
source $ONEAPI_ROOT/setvars.sh
DPC++ アプリケーションの GPU オフロード解析を実行する
GPU オフロード解析を開始点として、アプリケーションが CPU 依存か、GPU 依存かを特定します。データ転送解析により GPU オフロード効率を調査して、パフォーマンス・クリティカルなカーネルを見つけ、さらに詳しく解析して最適化します。
GPU オフロード解析を実行する
CLI で次のコマンドを実行します。
vtune -collect gpu-offload -r ./result_gpu-offload -- ./matrix.dpcpp
デフォルトでは、インテル® VTune™ プロファイラーはデータ収集後にサマリーレポートを生成します。レポートには、次の情報が含まれます。
- 経過時間
- GPU 利用率
- ホットな計算タスク
- 推奨事項
サマリーレポートを表示するには、次のコマンドを実行します。
vtune -report summary -r ./result_gpu-offload
データ収集後すぐにサマリーレポートを表示しない場合は、-finalization-mode オプションを使用して設定を変更できます。
vtune -collect gpu-offload -finalization-mode=none -r ./result_gpu-offload -- ./matrix.dpcpp
その他のレポートを生成して収集データを表示する
- 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.dpcpp -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 依存のアプリケーションやそのステージのパフォーマンスをさらに向上するのに役立ちます。
解析を実行するには、次のコマンドを使用します。
vtune -collect gpu-hotspots -r ./result_gpu-hotspots -- ./matrix.dpcpp
サマリーレポートを表示するには、次のコマンドを実行します。
vtune -report summary -r ./result_gpu-hotspots
その他のレポートを生成して収集データを表示する
- 計算タスクと L3 メトリック
次のコマンドは計算タスクの L3 メトリックのみをリストするレポートを生成します。
vtune -report hotspots -r result_gpu-hotspots -group-by=computing-task -column='L3' -q
- 動的命令数と SIMD 利用率
特性化モードで解析を実行して、動的命令数と SIMD 利用率のデータを収集します。
vtune -collect gpu-hotspots -knob characterization-mode=instruction-count -r ./result_gpu-hotspots_inst-count -- ./matrix.dpcpp
- 特定の計算タスクのソースコード
次のコマンドは、特定の計算タスクのソースコードを取得します。
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
注
このレシピの情報は、インテル® VTune™ プロファイラー・デベロッパー・フォーラム (英語) を参照してください。
関連情報
インテル® VTune™ プロファイラーでインテル® GPU 向けにアプリケーションを最適化 (英語)
GPU オフロード解析 (英語)
コマンドラインからの GPU オフロード解析 (英語)
GPU 計算/メディア・ホットスポット解析 (英語)
コマンドラインからの GPU 計算/メディア・ホットスポット解析 (英語)
製品とパフォーマンス情報
1実際の性能は利用法、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) を参照してください。