最も時間のかかる GPU カーネルを解析し、GPU ハードウェア・メトリックをベースに GPU の使用状況を特徴付け、メモリー・レイテンシーや非効率なカーネル・アルゴリズムによって引き起こされるパフォーマンスの問題を特定して、命令タイプごとの GPU 命令周波数を解析します。
これは、プレビュー機能です。プレビュー機能は、正式リリースに含まれるかどうかは未定です。有用性に関する皆さんからのフィードバックが、将来の採用決定の判断に役立ちます。プレビュー機能で収集されたデータは、将来のリリースで下位互換性が保証されません。
GPU 計算/メディア・ホットスポット解析を使用して以下を行います。
GPU 利用率の高い GPU カーネルを調査し、この利用率の有効性を予測してストールまたは低占有率の原因を特定します。
選択した GPU メトリックで時間経過ごとにアプリケーションのパフォーマンスを調査します。
最も効率の悪い SYCL* または OpenCL* カーネルを解析して、非効率なカーネルコードのアルゴリズムや不適切なワーク項目の構成を特定します。
GPU 計算/メディア・ホットスポット解析は、GPU オフロード解析を行った後の次のステップとして実行すると良いでしょう。
パフォーマンスが重要なカーネルを解析し、最適化します。
パフォーマンスが重要なカーネルは、プログラムの別のカーネルと密接に関連し、それらのパフォーマンスを低下させる可能性があります。
GPU とは、小さなコアアレイ (実行ユニット (EU)) でグラフィックスや計算処理を行う高度な並列マシンです。各 EU は、複数の軽量なスレッドを同時に実行します。スレッドの 1 つが実行されると、ほかのスレッドがメモリーなどからのデータを待機するためストールしていても、そのストールを隠蔽することができます。
GPU の性能を最大限に利用するため、アプリケーションはできるだけ多くのスレッドをスケジュールして、アイドルサイクルを最小限に抑えようとします。グラフィックスと汎用計算 GPU アプリケーションでは、ストールを最小限にすることも非常に重要です。
インテル® VTune™ プロファイラーは、インテル® グラフィックスのハードウェア・イベントを監視し、サンプリング期間の GPU リソースの使用状況に関するメトリックを表示します。例えば、EU がアイドル状態、ストール状態、アクティブ状態であったサイクルの比率や、メモリーアクセスとほかの機能ユニットに関する統計情報などが分かります。インテル® VTune™ プロファイラーで GPU カーネルの実行をトレースすると、GPU メトリックで各カーネルをアノテート (注釈) できます。
以下のスキームは、インテル® グラフィックス Gen9 (英語) のさまざまな処理においてインテル® VTune™ プロファイラーによって収集されるメトリックを示します。
GPU メトリックは、GPU ハードウェアが程度効率的に利用されているか、そしてパフォーマンス向上のため改善の余地があるか特定するのに役立ちます。メトリックの多くは、サンプリング中のすべてのサイクルに対して GPU 機能ユニットが特定の状態であったサイクルの比率で表されます。
システムを設定し、GPU 解析に必要な権限が有効であることを確認してください。
SYCL* アプリケーションをプロファイルするには、-gline-tables-only および -fdebug-info-for-profiling インテル® oneAPI DPC++ コンパイラー・オプションを使用してコードがコンパイルされていることを確認してください。
プロジェクトを作成して、解析システムおよびターゲットを指定します。
ツールバーの (スタンドアロン GUI)/ (Visual Studio* IDE) [解析の設定] ボタンをクリックして、[解析の設定] ウィンドウを開きます。
[どのように] ペインのタイトルバーをクリックします。[解析] ツリーを開き、[アクセラレーター] グループから [GPU 計算/メディア・ホットスポット (プレビュー)] 解析を選択します。この解析は、GPU 使用データを収集し、GPU タスクのスケジュールを解析して、アプリケーションが CPU 依存であるか GPU 依存であるかを識別するように事前設定されています。
システムに複数のインテル製 GPU が接続されている場合、選択した GPU または接続されているすべての GPU で解析を実行します。詳細については、「複数の GPU の解析」を参照してください。
解析モードの選択と設定します。
インターコネクト (Xe リンク) 接続を備えた GPU では、[Xe リンクの使用を解析] オプションを使用して、GPU インターコネクト (Xe リンク) 間のトラフィックを調べます。この情報は、GPU 間のデータフローと GPU 間のインターコネクトの使用状況を評価するのに役立ちます。
[開始] をクリックして解析を実行します。
コマンドラインから GPU 計算/メディア・ホットスポット解析を実行するには、次のコマンドを入力します。
vtune -collect gpu-hotspots [-knob <knob_name=knob_option>] -- <target> [target_options]
下部の [コマンドライン] ボタンを使用して、この設定のコマンドラインを生成できます。
システムに複数のインテル製 GPU が接続されている場合、インテル® VTune™ プロファイラーは接続されているすべてのアダプターを [ターゲット GPU] プルダウンメニューで識別します。次のガイドに従ってください。
解析が完了すると、インテル® VTune™ プロファイラーは [サマリー] ウィンドウにタイル情報を含む GPU ごとのサマリー結果を表示します。
GPU 計算/メディア・ホットスポット解析がデータ収集を完了すると、[サマリー] ウィンドウにメトリックが表示されます。
複数のインテル GPU で実行されているアプリケーションをプロファイルすると、GPU 計算/メディアホットスポット解析の [サマリー] ウィンドウに、同じインテル® マイクロアーキテクチャーの GPU でグループ化された結果が表示されます。各アーキテクチャー・グループには、そのグループのメトリック情報が含まれます。
アーキテクチャー・グループごとに、次のメトリックの値を確認できます。
アーキテクチャー・グループ内のすべてのアダプターに対し、XVE アレイのアクティブ/ストール/アイドルを示すメトリック値を確認できます。
GPU プロファイル解析の結果は、エイリアスにより GPU アダプターを参照します。
システムに接続されている複数のインテル GPU (またはマルチスタック GPU) 全体の GPU 解析を実行すると、[サマリー] ウィンドウに GPU トポロジー図の GPU 間のインターコネクトが表示されます。この図には、システムに接続されている最大 2 つのソケットと 6 つの GPU 間の情報が示されています。
GPU トポロジー図には、ソケット (GPU 接続に使用) および GPU 間のインターコネクト (Xe リンク) 接続に関する情報が表示されます。GPU トポロジー図の GPU は、バスデバイス機能 (BDF) 番号で識別できます。
GPU スタックにマウスを移動すると、アクティブに使用されているリンク (緑色のハイライト表示) と対応する帯域幅メトリックが表示されます。
ここに示される情報を基に、転送される以下の平均データを確認します。
Xe リンクを備えた GPU では、(解析を実行する前に) インターコネクト (Xe リンク) の使用状況を解析するオプションを確認すると、[サマリー] ウィンドウに GPU インターコネクト (Xe リンク) を介して収集された帯域幅とトラフィック・データを表示するセクションが含まれています。この情報を GPU トポロジー図と併用して、GPU 間のトラフィック分散のインバランスを検出します。一部のリンクがほかのリンクよりも利用頻度が高い場合、その理由を確認します。
[サマリー] ウィンドウの Xe リンク利用率と、[プラットフォーム] ウィンドウには、経時的な帯域幅データが表示されます。
この情報を使用して、次のことを行うことができます。
特性化設定オプションを使用して、次のことを行います。
[特性化] ラジオボタンを選択すると、設定セクションが展開され、追加オプションが表示されます。
概要メトリックには、メモリーリード/ライト帯域幅などの GPU メモリーアクセス、GPU L3 ミス、サンプラービジー、サンプラー・ボトルネック、および GPU メモリーのテクスチャー・リード/ライト帯域幅を含むメトリックが含まれます。これらのメトリックは、グラフィックスと計算集約型のアプリケーションに役立ちます。
基本計算 (グローバル/ローカルメモリー・アクセス含む) メトリックグループは、GPU 上の異なるタイプのデータアクセスを区別するメトリックを含みます。型なしリード/ライト帯域幅、型付きリード/ライト・トランザクション、SLM リード/ライト帯域幅、レンダラー/GPGPU コマンド・ストリーマーのロード、および GPU EU アレイの使用。これらのメトリックは、GPU 上の計算集約型のワークロードに役立ちます。
計算拡張メトリックグループは、インテル® プロセッサー開発コード名 Broadwell 以降の GPU 解析のみをターゲットとする追加メトリックを含みます。それ以外のシステムでは、この事前定義は利用できません。
完全な計算メトリックグループは、概要と基本計算イベントセットの組み合わせです。
動的命令カウントメトリックグループは、特定の命令クラスの実行頻度をカウントします。このメトリックグループを使用すると、各カーネルの SIMD 利用率に関する情報も得られます。
[特性化] ドロップダウン・メニューには、プラットフォーム固有の事前定義された GPU メトリックが用意されています。動的命令カウントを除くすべてのプリセットは、実行ユニット (EU) のアクティビティー・データを収集します。EU アレイアクティブ、EU アレイストール、EU アレイアイドル、計算スレッドの開始、およびコア周波数 (それぞれに追加メトリックがあります)。
特性化解析では、追加のデータを収集することもできます。
トレース GPU プログラミング API オプションを使用すると、インテル® プロセッサー・グラフィックスで実行されている SYCL*、OpenCL*、またはインテル® メディア SDK プログラムを解析できます。このオプションは、CPU 側でアプリケーションのパフォーマンスに影響する可能性があります。
SYCL* または OpenCL* アプリケーションでは、最もホットなカーネルを特定し、パフォーマンスの問題が検出された GPU アーキテクチャー・ブロックを特定できます。
インテル® メディア SDK プログラムでは、タイムラインでインテル® メディア SDK タスクの実行を調査し、このデータをそれぞれの時間軸で GPU の利用状況と関連付けることができます。
サポートの制限
OpenCL* カーネル解析は、インテル® グラフィックス上で動作する Windows* と Linux* ターゲットで利用できます。
インテル® メディア SDK プログラム解析は、インテル® グラフィックス上で動作する Windows* と Linux* ターゲットで利用できます。
[アプリケーションを起動] または [プロセスにアタッチ] ターゲットタイプのみがサポートされます。
[プロセスにアタッチ] モードでは、計算キューがすでに作成されているプロセスにアタッチすると、インテル® VTune™ プロファイラーはこのキューの OpenCL* カーネルのデータを表示しません。
メモリー帯域幅の計算に必要なデータを収集するには、[メモリー帯域幅の解析] オプションを使用します。このタイプの解析には、インテル・サンプリング・ドライバーがインストールされている必要があります。
GPU ハードウェア・メトリック収集の GPU サンプルの間隔を指定する、[GPU サンプリング間隔 (ミリ秒] オプションを使用します。デフォルトで、インテル® VTune™ プロファイラーは 1 ミリ秒のインターバルを使用します。
ソース解析では、インテル® VTune™ プロファイラーは、GPU カーネルのメモリーアクセスによって引き起こされる、パフォーマンスが重要な基本ブロックを特定するのを支援します。
[ソース解析] ラジオボタンを選択すると、[設定] ペインにドロップダウン・メニューが表示され、解析する問題のタイプを指定するプロファイル・モードを選択できます。
[基本ブロック・レイテンシー] または [メモリー・レイテンシー] プロファイル・モードでは、GPU 計算/メディア・ホットスポット解析は次のメトリックを使用します。
予測 GPU サイクル: GPU がプロファイルされた命令を実行するのに要した平均サイクル数。
平均レイテンシー: サイクル単位のメモリーリードと同期命令の平均レイテンシー。
インスタンスごとに実行された GPU 命令: カーネル・インスタンスごとの平均 GPU 命令実行数。
スレッドごとに実行された GPU 命令: カーネル・インスタンスごとに 1 つのスレッドで実行された平均 GPU 命令数。
[命令数] プロファイル・モードを有効にすると、インテル® VTune™ プロファイラーはカーネルにより実行された命令の内訳を次のグループで表示します。
[制御フロー] グループ |
ip レジスターを明示的に変更する if、else、endif、while、break、cont、call、calla、ret、goto、jmpi、brd、brc、join、halt および mov、add 命令 |
[送信 & 待機] グループ |
send、sends、sendc、sendsc、wait |
[Int16 & HP Float] | [Int32 & SP Float] | [Int64 & DP Float] グループ |
ビット操作 (整数型のみ): and、or、xor など 算術演算: mul、sub などavg、frc、mac、mach、mad、madm ベクトル算術演算: line、dp2、dp4 など 拡張数学演算 |
[その他] グループ |
nop を含むほかのすべての操作。 |
[命令数] モードでは、インテル® VTune™ プロファイラーは、次の実行された命令のウェイトを合計して計算された、[1 秒あたりの操作数] メトリックも提供します。
ビット操作 (整数型のみ):
算術演算:
add、addc、cmp、cmpn、mul、rndu、rndd、rnde、rndz、sub - ウェイト 1
avg、frc、mac、mach、mad、madm - ウェイト 2
ベクトル算術演算:
拡張数学演算:
math.inv、math.log、math.exp、math.sqrt、math.rsq、math.sin、math.cos(ウェイト 4)
math.fdiv、math.pow(ウェイト 8)
操作 (演算) のタイプはデスティネーション・オペランドのタイプにより決定されます。
インテル® VTune™ プロファイラーは解析を実行して、[GPU 計算/メディア・ホットスポット] ビューポイントでデータを開き、次のウィンドウにさまざまなプラットフォーム・データを表示します。
[サマリー] ウィンドウは、エンジン全体とエンジンごとの GPU 利用率、EU ストールまたはアイドル時間のパーセンテージとその原因、および最もホットな GPU 計算タスクを表示します。
[グラフィックス] ウィンドウは、スレッドごとの CPU と GPU 利用率データを表示して、さまざまなタイプの GPU メモリーへのアクセスを解析するのに役立つ GPU ハードウェア・メトリックの拡張リストを示します。グリッドの列の名前にマウスオーバーするか、右クリックして [このカラムの意味は?] コンテキスト・メニュー・オプションを選択すると、GPU メトリックの説明を見ることができます。
このセクションでは、GPU 計算/メディア・ホットスポット解析のバックエンドで OpenCL* または oneAPI レベルゼロ API (英語) を実行する SYCL* アプリケーションのサポートについて説明します。インテル® VTune™ プロファイラーは、oneAPI レベルゼロ API のバージョン 0.91.10 をサポートします。
サポート対象 |
バックエンドで OpenCL* を使用する SYCL* アプリケーション |
バックエンドでレベルゼロを使用する SYCL* アプリケーション |
---|---|---|
オペレーティング・システム |
Linux* Windows* |
Linux* Windows* |
データ収集 |
インテル® VTune™ プロファイラーは、GPU 計算タスクと GPU 計算キューを収集して表示します。 |
インテル® VTune™ プロファイラーは、GPU 計算タスクと GPU 計算キューを収集して表示します。 |
データ表示 |
インテル® VTune™ プロファイラーは、収集された GPU HW トリックを特定のカーネルにマップし、それらを図に表示しま。 |
インテル® VTune™ プロファイラーは、収集された GPU HW トリックを特定のカーネルにマップし、それらを図に表示しま。 |
ホスト側の API 呼び出しを表示 |
はい |
はい |
計算タスクのソース・アセンブラー |
はい |
はい |
GPU コードのインストルメント ([ソース解析] オプション、または [動的命令カウント] 特性化オプション) |
はい |
はい |
GPU 上で実行される SYCL* アプリケーションのプロファイルの利用例については、クックブックのレシピ「GPU 上で実行する SYCL* アプリケーションのプロファイル」を参照してください。
このセクションでは、CPU ホストで動作する Microsoft® DirectX* アプリケーションをトレースする GPU 解析で利用可能なサポートについて説明します。このサポートは、アプリケーションを起動モードでのみ利用できます。
サポート対象 | DirectX* アプリケーション |
---|---|
オペレーティング・システム |
Windows* |
API のバージョン |
DXGI、Direct3D 11、Direct3D 12、Direct3D 12 上の 11 |
ホスト側の API 呼び出しを表示 |
はい |
ダイレクト・マシンラーニング (DirectML) API |
はい |
デバイス側の計算タスク |
いいえ |
計算タスクのソース・アセンブラー |
いいえ |