インテル® HD グラフィックスとインテル® Iris™ グラフィックスを使用するアプリケーションの解析

同カテゴリーの次の記事

インテル® VTune™ Amplifier の新機能

この記事は、インテル® デベロッパー・ゾーンに公開されている、インテル® VTune™ Amplifier のオンラインヘルプの一部「Analyzing Applications Using Intel® HD Graphics and Intel® Iris™ Graphics」の日本語参考訳です。Windows* 用のヘルプではありますが、その他の OS 環境でも十分ご利用いただけます。また、構成は英語版のヘルプと同じ階層構造にしてあります。


レンダリング、ビデオ処理、および計算向けにグラフィックス処理ユニット (GPU) を使用するアプリケーションのプロファイルを行うためインテル® VTune™ Amplifier を使用します。インテル® VTune™ Amplifier は、CPU と GPU の両方のアクティビティーを監視し、解析して関連付けることができます。

必要条件: Linux* ターゲットの場合、GPU 上でインテル® HD グラフィックスおよびインテル® Iris™ グラフィックス (以下、「インテル® グラフィックス」と表記) のハードウェア・イベントを解析するには、インテル® Media Server Studio 2015 R5 以降をインストールし、Getting Started Guide (英語) に従ってカーネルドライバーをビルドします。

インテル® VTune™ Amplifire による GPU 解析には、次の手順が考えられます。

  1. アプリケーションが GPU 依存であるかどうかを特定するため、CPU/GPU 並行性解析を実行します。
  2. インテル® Media SDK と OpenCL* ソフトウェア・テクノロジーを使用する GPU 依存のアプリケーションを詳しく解析するため、GPU Hotspots (GPU ホットスポット) 解析を実行します。

注:

カスタム解析を設定して、GPU 使用率データを収集することもできます。これには、解析設定にある [Analyze GPU usage (GPU 使用率を解析)] オプションをオンにします。このオプションは、収集中のオーバーヘッドを軽減します。[Analyze Processor Graphics hardware events (プロセッサー・グラフィックスのハードウェア・イベントを解析)] を追加するとオーバーヘッドは中程度、そして [Trace OpenCL and Intel Media SDK programs (OpenCL* とインテル(R) Media SDK プログラムをトレース)] オプションを追加すると最大のオーバーヘッドとなります。

CPU/GPU の並行性を調査

CPU/GPU 並行性解析 (英語) を実行して、時間軸における GPU 使用率を調査し、アプリケーションや処理フェーズの一部が CPU もしくは GPU 依存であるかを確認します。これは、インテル® VTune™ Amplifier でサポートされるインテル® グラフィックスと他のサードパーティー製の GPU を搭載したプラットフォーム上で実行されるアプリケーションで利用可能な、最も直感的な解析です。

インテル® VTune™ Amplifier はデータを収集し、解析結果を [GPU Hotspots viewpoint (GPU ホットスポット・ビューポイント)] に表示します。デフォルトで最初に開く [Summary (サマリー)] ウィンドウ (英語) には、アプリケーションが CPU と GPU をどのように使用しているか高度な統計情報が示され、アプリケーションが GPU 依存であるかどうか理解するのに役立ちます。

次の例は、GPU 依存のアプリケーションの解析結果を示しています。[Summary] ウィンドウで、Elapsed time (経過時間) の大部分を GPU Time (GPU 時間) が占めていることが分かります。

[Platform (プラットフォーム)] ウィンドウ (英語) に切り替えて、ソフトウェア・キュー上の GPU 使用率を解析する基本 CPU および GPU メトリックを開き、タイムライン上の CPU 利用率のデータと関連付けます。[Platform] ウィンドウが、GPU が頻繁にビジーになり、ビジー状態と次のビジー状態の間のアイドル時間が非常に短く、GPU ソフトウェアのキューがほとんどゼロにならないことを示す状況では、理論的にはアプリケーションは GPU に依存しています。ビジー状態の間のギャップが長く、この間 CPU がビジーになる場合、アプリケーションは CPU 依存であると言えます。しかし、このような明確な状況はまれであるため、詳細な解析によりすべての依存関係を明らかにする必要があります。例えば、GPU エンジンがシリアル化されている場合 (GPU エンジンがビデオ処理とレンダリング処理を交互に実行するなど)、誤って GPU 依存と見なされる可能性があります。このケースでは、CPU で実行されるアプリケーションによって、GPU 上で非効率なスケジューリングが生じます。

GPU が時間の経過とともにビジーになる場合、[Graphics (グラフィックス)] ウィンドウ (英語) に切り替えて、スレッドごとに実行されているワーク (レンダリングや計算) の種類を理解するため詳しく調査します。

[Graphics] ウィンドウにある同じ結果の [Timeline (タイムライン)] ペインでは、GPU Usage (GPU 使用率) にギャップがありません。

この例は、レンダーと GPGPU エンジン上のアクティビティー (黄色) と同様に、ブリッター (Blitter) エンジンのアクティビティー (ピンク) を示しています。

GPU 依存のアプリケーションの GPU 使用率を解析

アプリケーションやその処理ステージが GPU 依存であることが判明している場合、GPU ホットスポット (英語) 解析を実行して GPU エンジンが効率良く実行されているか、また改善の余地があるかを調査します。これは、インテル® VTune™ Amplifier のインテル® グラフィックスのレンダーと GPGPU エンジン向けのハードウェア・メトリックの収集により解析できます。

GPU ハードウェア・メトリックを調査

GPU ハードウェア・メトリックは、GPU アクティビティーをさらに詳しく解析するための情報を提供し、パフォーマンス向上の可能性を示唆します。インテル® グラフィックス上のレンダーと GPGPU エンジン上で、次のタイプの GPU イベントメトリック (英語) を収集するには、[GPU Hotspots (GPU ホットスポット)] 解析を設定する必要があります: [Overview (概要)] (デフォルトで収集)、[Compute Basic (計算の基本情報)] (グローバル/ローカル・メモリー・アクセスを含む)、および [Compute Extended (計算の追加情報)] (インテル® Core™ M プロセッサー以降向け)。解析設定で [Analyze Processor Graphics hardware events] オプションをオンにして、必要なグループを指定することで、これらの収集を有効にします。一般的に、[Overview] イベントグループで一般的な GPU 実行ユニット、サンプラー、メモリーとキャッシュ・アクセス解析から開始し、[Compute Basic] グループで異なるタイプの GPU メモリーへのアクセス解析を行うことを推奨します。[Compute Basic] メトリックは、GPU ハードウェア・メトリックと実際の GPU 負荷を関連付けることを可能にする、[Analyze GPU usage] イベントオプションをオンにして (GPU ホットスポット解析ではデフォルトでオン)、GPU で計算ワークを解析する場合に最も効果的です。また、[Overview][Compute Basic] で事前定義されているメトリックを組み合わせた [Full Compute (計算の完全な情報)] イベントグループ (プレビュー機能) を選択して、同じビューにそれらを表示することで、GPU 実行ユニットが待機している理由を調査するのに役立ちます。このイベント設定を使用するには、ターゲット・プロパティーで [Allow multiple runs (複数回の実行を許可)] (英語) がオンになっていることを確認してください。

データが収集されたら、[Summary] ウィンドウの [EU Array Stalled/Idle (EU 配列ストール/アイドル)] セクションを調査して、実行ユニットが待機している最も典型的な原因を特定します。

設定した事前定義イベントに応じて、インテル® VTune™ Amplifier は実行ユニットのストール/アイドル向けのメトリックを解析します。GPU ホットスポット解析は、サンプラービジー、サンプラーがボトルネック、そして GPU L3 帯域幅などの一般的な GPU メモリーアクセスを追跡するメトリックを含む、[Overview] で事前定義されているメトリック (英語) をデフォルトで収集します。これにより、[EU Array Stalled/Idle] セクションの [Sampler Busy (サンプラーがビジー)] には、頻繁にサンプラーにアクセスする GPU 計算タスクと、GPU L3 帯域幅に依存する最もホットな GPU 計算タスクのリストが表示されます。

解析設定で、[Compute Basic] (英語) 事前定義を選択すると、インテル® VTune™ Amplifier は GPU 上の異なるタイプのデータアクセスを特定するメトリックを解析し、占有率の低い GPU タスクの識別に役立つ [Occupancy (占有率)] セクションを表示します。

占有率 (occupancy) がアプリケーションの問題であると通知されている場合、タスクが大きすぎるか、または小さすぎることで、EU 配列がアイドルになることが考えられるため、計算タスクのサイズを変更することを検討してください。

解析設定で、[Full Compute] 事前定義と [Allow multiple runs] (英語) が選択されている場合、インテル® VTune™ Amplifier は、データ収集に [Overview] と [Compute Basic] イベントグループの両方を使用し、同じビューに EU 配列ストール/アイドルのすべての原因を表示します。

注:

Linux* ターゲット上で、インテル® HD グラフィックスとインテル® Iris™ グラフィックスのハードウェア・イベントを解析するには、インテル® Media Server Studio 2015 R5 以降がインストールされており、インテル® Media Server Studio Getting Started Guide (英語) に示される方法でカーネルドライバーがビルドされていることを確認してください。

時間経過における HW メトリックごとの GPU パフォーマンス・データを解析するには、[Graphics] ウィンドウを開き、[Timeline] ペインに注目します。[Graphics] ウィンドウに表示される GPU メトリックのリストは、解析設定で選択されたハードウェア・イベントの事前定義に依存します。

次の例は、GPU 依存のアプリケーションで収集された [Overview] メトリックのグループです。

最初に [GPU Execution Unit (GPU 実行ユニット)][EU Array Idle (EU 配列アイドル)] メトリックを見てみましょう。アイドルサイクルは無駄なサイクルです。スケジュールされているスレッドがなく、EU の貴重な計算リソースが活用されません。[EU Array Idle] がゼロの場合、GPU は効率良く活用されており、すべての EU にスレッドがスケジュールされています。

ほとんどの場合、最適化では [EU Array Stalled (EU 配列ストール)] メトリックを最小にし、[EU Array Active (EU 配列アクティブ)] を最大にします。ただし、メモリー帯域幅に制約されるアルゴリズムは例外です。この場合、([EU Array Active] を最大にするのではなく) メモリー帯域幅を特定のプラットフォームのピークに近づけるように最適化します。

メモリーアクセスは、しばしばストールの原因になります。メモリーレイアウトと注意深く設計されたメモリーアクセスの重要性を軽視することはできません。[EU Array Stalled] がゼロでなく、GPU L3 ミスに関連しており、アルゴリズムがメモリー帯域幅に制約されていない場合は、メモリーアクセスとレイアウトの最適化を試してみるべきでしょう。

サンプラーアクセスはコストが高く、容易にストールを引き起こします。サンプラーアクセスは、[Sampler Is Bottleneck (サンプラーがボトルネック)][Sampler Busy] メトリックによって測定できます。

[GPU Hotspots viewpoint] で、[Platform] タブに切り替えて、CPU データ、メモリー帯域幅、割り込み (収集されていれば) などがどのように GPU メトリックデータに関連するか解析します。タイムライン上で対象とする領域を選択して右クリックし、コンテキスト・メニューから [Filter In by Selection (選択でフィルター)] を選択して、右にあるペインでコンテキスト固有の GPU メトリックを調査します。

この例では、選択された範囲で使用されている GPU 実行ユニットごとの統計が表示されています。赤く強調された値は、占有率が低いため GPU 時間の大部分がアイドルであることを示しています。この原因は、非効率なワークのスケジューリングであると考えられます。[GPU Usage] セクションは、GPU エンジンが利用されている場合の GPU エンジンごとの [GPU Time] とアプリケーションの経過時間の比率を表示します。

OpenCL* カーネル実行の調査

アプリケーションが、OpenCL* ソフトウェア・テクノロジーを使用している場合、[Graphics] ウィンドウの [Timeline] ペインで [GPU Computing Threads Dispatch (GPU 計算スレッドのディスパッチ)] メトリックを使用して、アプリケーションが GPU 上で多くのワークを計算していることを確認してから、解析を続行しインテル® グラフィックス上で実行されている OpenCL* カーネルの情報を取得します。この解析を行うには、解析の設定で [Trace OpenCL and Intel Media SDK programs] オプションをオンにします。[GPU Hotspots] 解析では、デフォルトでこのオプションがオンになっています。

[Summary] ビューでは、[Hottest GPU Computing Tasks (最もホットな GPU 計算タスク)] セクションで GPU 上で実行される OpenCL* カーネルを表示し、パフォーマンス上クリティカルなカーネルを通知します。カーネル名をクリックして、[Computing Task (GPU) / Instance (計算タスク (GPU) / インスタンス)] でグループ化された [Graphics] ウィンドウを開きます。また、計算タスク (Computing Task) でグリッド内のデータをグループ化することもできます。インテル® VTune™ Amplifier は、次の計算タスクを識別します: Compute (カーネル)、Transfer (OpenCL* ルーチンがホストから GPU へのデータ転送を行います)、および Synchronization (例えば、clEnqueueBarrierWithWaitList)。

対応する列に GPU でのカーネルの実行時間と 1 回の呼び出しの平均時間 (clEnqueueNDRangeKernel の 1 回の呼び出しに対応)、ワークグループのサイズ、カーネルの平均 GPU ハードウェア・メトリックが表示されます。メトリック列のヘッダーにカーソルを移動すると、メトリックの説明とメトリックを求めるために使用された計算式が表示されます。計算タスクのメトリック値が、インテル® アーキテクチャー向けに設定されているしきい値を超えると、値はピンク色でハイライトされ、パフォーマンス上の問題があることを示します。表示されている値のセルにカーソルを移動すると、問題の説明が表示されます。

最初に、実行時間が最も長いホットなカーネルを解析し最適化します。ホットなカーネルには、平均実行時間が長い、あるいは平均実行時間は短くても頻繁に呼び出されるといった特徴があります。どちらの場合も注目すべきです。

OpenCL* カーネルへの転送の詳細を表示し、キュー内で費やされた時間を解析する (英語) には、[Graphics] または [Platform] ウィンドウの [Timeline] ペインにある、[Computing Queue (計算キュー)] データを調査します。

インテル® Media SDK タスクの実行を調査 (Linux* のみ)

[Analyze GPU usage][Trace OpenCL and Intel Media SDK programs] オプションの両方をオンにして、インテル® Media SDK プログラム解析 (英語) を行う場合、[Graphics] ウィンドウを使用してインテル® Media SDK タスクの実行データと GPU ソフトウェア・キューのデータを関連付けます。

[Platform] ウィンドウ (英語) ウィンドウに切り替えて、[GPU Engine (GPU エンジン)] 領域を調査することで、インテル® Media SDK アプリケーション向けの GPU ソフトウェア・キューと GPU パケット転送の詳細を表示できます。

上位トピック: チューニング手法

関連項目

GPU 解析
インテル® Media SDK プログラム解析の設定 (英語) (Linux* のみ)
コマンドラインから GPU 解析を実行する (英語)

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

関連記事

  • インテル® VTune™ Amplifier による GPU 解析インテル® VTune™ Amplifier による GPU 解析 この記事は、インテル® デベロッパー・ゾーンに公開されている、インテル® VTune™ Amplifier のオンラインヘルプの一部「GPU Analysis」の日本語参考訳です。Windows* 用のヘルプではありますが、その他の OS […]
  • インテル® VTune™ Amplifier の新機能インテル® VTune™ Amplifier の新機能 この記事は、インテル® デベロッパー・ゾーンに公開されている、インテル® VTune™ Amplifier のオンラインヘルプの一部「What's New in Intel® VTune™ Amplifier」の日本語参考訳です。Windows* 用のヘルプではありますが、その他の OS […]
  • インテル® プロセッサー・グラフィックスインテル® プロセッサー・グラフィックス この記事は、インテル® デベロッパー・ゾーンに掲載されている「インテル® Processor グラフィックス」の日本語参考訳です。 インテル® プロセッサー・グラフィックス向けの開発者ドキュメント インテル® プロセッサー・グラフィックスは、第 6 世代インテル® Core™ プロセッサーを含むインテル® […]
  • ビデオ・ストリーミング処理 – 環境への配慮ビデオ・ストリーミング処理 – 環境への配慮 この記事は、インテル® デベロッパー・ゾーンに公開されている「Video Streaming Processing - Going Green」(https://software.intel.com/en-us/blogs/2016/03/15/video-streaming-going-green) […]
  • VTune™ Amplifier XE 2015 を使用して GPU 上の OpenCL* カーネル解析を解析するVTune™ Amplifier XE 2015 を使用して GPU 上の OpenCL* カーネル解析を解析する この記事は、インテル® デベロッパー・ゾーンに公開されている「Practice of using VTune™ Amplifier XE 2015 on GPU for OpenCL™ kernel analysis」の日本語参考訳です。 インテル® SDK for OpenCL™ Application […]