GPU 使用率

Note

Visual Studio グラフィックス診断は ARM64 Visual Studio では サポートされません。

パフォーマンス プロファイラーに含まれる GPU 使用率ツールを使用すると、Direct3D アプリのハードウェア使用率の概要を適切に把握できます。 アプリのパフォーマンスが CPU バインドまたは GPU バインドのどちらであるかを判断し、プラットフォームのハードウェアをより効率的に使用する方法について分析情報を得ることができます。 GPU 使用率では、Direct3D 12、Direct3D 11、および Direct3D 10 を使用するアプリがサポートされます。 Direct2D や OpenGL などの他のグラフィック API はサポートされません。

[GPU 使用率レポート] ウィンドウの外観を次に示します。

Screenshot of GPU Usage Report, with CPU and GPU timelines

要件

グラフィックス診断の要件に加えて、GPU 使用率ツールを使用するためには以下が必要です。

  • 必要なタイミング インストルメンテーションをサポートする GPU とドライバー。

    Note

    サポートされるハードウェアとドライバーの詳細については、このドキュメントの最後にある「ハードウェアとドライバーのサポート」をご覧ください。

グラフィックス診断の要件の詳細については、使用の開始に関する記事をご覧ください。

GPU 使用率ツールを使用する

GPU 使用率ツールの下でアプリを実行すると、Visual Studio によって診断セッションが作成されます。 このセッションにより、アプリのレンダリング パフォーマンスと GPU 使用率に関する概要情報がリアル タイムでグラフ化されます。

GPU 使用率ツールを開始するには:

  1. メイン メニューで、[デバッグ]>[パフォーマンスと診断] を選択します (または、キーボードで Alt + F2 キーを押します)。

  2. [パフォーマンスと診断] ハブで、[GPU 使用率] の横にあるチェック ボックスをオンにします。 必要に応じて、調査するその他のツールの横のチェック ボックスをオンにします。 複数のパフォーマンスと診断ツールを同時に実行して、アプリのパフォーマンスをさらに多面的に把握することもできます。

    Screenshot of the Performance Profiler, with GPU Usage selected

    Note

    すべてのパフォーマンスと診断ツールを同時に使用することはできません。

  3. [パフォーマンスと診断] ハブの一番下にある [開始] を選択して、選んだツールの下でアプリを実行します。

リアル タイムで表示される概要情報には、フレーム時間、フレーム レート、GPU 使用率などがあります。 これらの情報はそれぞれ個別にグラフ化されますが、すべてに共通のタイムスケールが使用されるため、関係を簡単に把握できます。

[フレーム時間 (ミリ秒)][1 秒あたりのフレーム数 (FPS)] のグラフそれぞれに、1 秒あたり 60 フレームと 30 フレームの目標パフォーマンスを表す 2 本の赤い水平線が表示されます。 フレーム時間グラフでは、アプリが目標パフォーマンスを超えているときはグラフが線の下にあり、下回っているときはグラフが線の上にあります。 1 秒あたりのフレーム数グラフでは、その逆です。アプリが目標パフォーマンスを上回っているときはグラフが線の上にあり、下回っているときはグラフが線の下にあります。 これらのグラフは、主として、アプリのパフォーマンスに関する概要情報を取得し、調査する必要のあるスローダウンを識別するために使用します。 たとえば、フレーム レートが急激に低下した場合や、GPU 使用率が急上昇している場合は、さらに調査が必要になることがあります。

GPU 使用率ツールの下でアプリを実行中には、GPU で実行されたグラフィックス イベントに関する詳細情報も診断セッションによって収集されます。 この情報は、アプリでのハードウェアの使用状況のより詳細なレポートを生成するために使用します。 収集した情報からこのレポートを生成するまでには少し時間がかかるため、診断セッションが情報の収集を完了してからのみ使用可能です。

パフォーマンスまたは使用状況の問題をより詳細に確認する場合、パフォーマンス情報の収集を停止すれば、レポートを生成できます。

GPU 使用率レポートを生成して表示するには:

  1. [診断セッション] ウィンドウの下部で [コレクションの停止] リンクを選択するか、左上隅の [停止] を選択します。

    Screenshot of a diagnostics session window in the GPU Usage tool, showing Frames per second, GPU utilization, the Stop button, and the Stop collection link.

  2. レポートの上部で、調査対象の問題を示している範囲をいずれか 1 つのグラフから選択します。 選択できる期間は最大 3 秒です。 それより長いセクションは、先頭方向に切り捨てられます。

    Screenshot of a diagnostics session window in the GPU Usage tool with part of the diagnostic session timeline selected.

  3. 選択項目の詳細なタイムラインを表示するには、レポートの下部で、[その範囲の GPU 使用率の詳細が表示されます] というメッセージにある [詳細の表示] を選択します。

    Screenshot of the diagnostics session window, with range selected

この選択によって新しいタブ付きのドキュメントが開き、レポートが表示されます。 GPU 使用率レポートは、グラフィックス イベントが CPU 上で始まった時点、それが GPU に到達した時点、およびそれを GPU で実行するのに要した時間の長さを調べるために役立ちます。 この情報を利用して、コードのボトルネックと、並列処理を増やす機会を識別します。

GPUView または Windows Performance Analyzer にエクスポートする

Visual Studio 2017 以降、このデータは GPUViewWindows Performance Analyzer で開くことができます。 診断セッションの右下隅にある [GpuView で開く] リンクまたは [WPA で開く] リンクを選択してください。

Screenshot of the diagnostics session window, with links highlighted

GPU 使用率レポートを使用する

GPU 使用率レポートの上部には、CPU 処理アクティビティ、GPU レンダリング アクティビティ、GPU コピー アクティビティのタイムラインが表示されます。 これらのタイムラインは、ディスプレイの垂直同期 (vsync) を示す薄い灰色の垂直線で分割されています。 この線の周波数は、GPU 使用率データを収集したディスプレイの 1 つ ([ディスプレイ] ドロップダウン リストを使用して選択) のリフレッシュ レートと一致します。

アプリのパフォーマンス目標よりもディスプレイのリフレッシュ レートのほうが高いことがあるので、垂直同期とアプリで実現したいフレーム レートが 1 対 1 の関係にならない可能性があります。 その目標パフォーマンスを達成するには、アプリですべての処理を完了し、レンダリングを行い、目標のフレームレートで Present() を呼び出す必要があります。 ただし、レンダリングされたフレームは、Present() の後の次の垂直同期まで表示されません。

GPU 使用率レポートの下部には、レポートの期間中に発生したグラフィックス イベントの一覧が表示されます。 イベントを選択すると、関連タイムラインの該当イベントにマーカーが表示されます。 通常、CPU スレッドの 1 つのイベントに API 呼び出しが表示され、GPU タイムラインの 1 つの別のイベントに GPU でタスクを完了した時刻が表示されます。 同様に、タイムラインでイベントを選択すると、レポートの下部で対応するグラフィックス イベントが強調表示されます。

レポートの上部でタイムラインを縮小表示すると、時間が最もかかったイベントのみが表示されます。 持続期間の短いイベントを表示するには、タイムラインを拡大します。そのためには、Ctrl キーを押しながらポインティング デバイスのホイールを回すか、上のパネルの左下隅にある拡大/縮小コントロールを使用します。 また、タイムライン パネルの内容をドラッグして、記録されたイベントに移動することもできます。

効率的に検索するには、プロセス名、スレッド ID、イベント名に基づいて GPU 使用率レポートをフィルター処理します。 また、垂直同期線を決定するディスプレイのリフレッシュ レートを選択できます。 アプリでレンダリング コマンドのグループ化に ID3DUserDefinedAnnotation インターフェイスが使用される場合、イベントを階層で並べ替えることができます。

詳細を次に示します。

フィルター コントロール 説明
Process 調査対象のプロセスの名前。 診断セッション中に GPU を使用したすべてのプロセスが、このドロップダウン リストに含まれます。 プロセスに関連付けられている色は、タイムラインでのスレッドのアクティビティの色です。
スレッド 調査対象のスレッド ID。 マルチ スレッド アプリケーションでは、この情報を使用して、調査対象のプロセスに属するスレッドを分離できます。 各タイムラインで、選択されたスレッドに関連付けられたイベントが強調表示されます。
ディスプレイ リフレッシュ レートが表示されるディスプレイの数。 一部のドライバーでは、複数の物理ディスプレイが 1 つの大きな仮想ディスプレイを表すように構成することができます。 コンピューターに複数のディスプレイが接続されている場合でも、一覧に表示されるディスプレイが 1 つだけのことがあります。
Assert 調査対象のキーワード。 レポートの下部に、このキーワードが全体または一部と一致するイベントだけが表示されます。 複数のキーワードを指定するには、セミコロン (;) で区切ります。
階層的に並べ替え イベントの階層 (ユーザー マーカーを使用して定義される) を保持するか無視するかを指定するチェック ボックスです。

GPU 使用率レポートの下部にあるイベント一覧には、各イベントの詳細が表示されます。

説明
イベント名 グラフィックス イベントの名前。 イベントは通常、CPU スレッド タイムライン内の 1 つのイベントと、GPU タイムライン内の 1 つのイベントに対応します。 GPU 使用率でイベントの名前を特定できなかった場合は、イベント名が unattributed になります。 詳細については、この表の下にある注意書きを参照してください。
CPU 開始 (ナノ秒) Direct3D API を呼び出すことによって CPU 上でイベントが開始された時刻。 時間は、アプリケーションの開始時を基準にしたナノ秒単位で測定されます。
GPU 開始 (ナノ秒) GPU 上でイベントが開始された時刻。 時間は、アプリケーションの開始時を基準にしたナノ秒単位で測定されます。
GPU 期間 (ナノ秒) GPU 上でイベントの完了にかかった時間 (ナノ秒)。
プロセス名 イベントの発生元のアプリの名前。
スレッド ID イベントの発生元のスレッド ID。

重要

必要なインストルメンテーション機能が GPU またはドライバーによってサポートされていない場合は、すべてのイベントが unattributed として表示されます。 この問題が発生した場合は、GPU ドライバーを更新して、もう一度試してください。 詳細については、このドキュメントの最後にある「ハードウェアとドライバーのサポート」をご覧ください。

GPU 使用率の設定

アプリが起動した時、すぐに情報の収集を開始するのではなく、プロファイリング情報のコレクションを延期するには、GPU 使用率ツールをそのように構成することができます。 プロファイル情報のサイズはかなり大きくなるため、アプリのパフォーマンス低下がしばらく後になってから現れる場合には、このアクションが便利です。

プロファイリングをアプリケーションの開始時から延期するには:

  1. メイン メニューで、[デバッグ]>[パフォーマンスと診断] を選択します (または、キーボードで Alt + F2 キーを押します)。

  2. [パフォーマンスと診断] ハブで、[GPU 使用率] の横にある [設定] リンクを選択します。

  3. [GPU プロファイリングの構成][全般] プロパティ ページで、[アプリの起動時にプロファイリングを開始] チェック ボックスをオフにして、プロファイリングを延期します。

    Screenshot of Object Property Pages, showing collection options

重要

現時点では、Direct3D 12 アプリのプロファイリングを延期することはできません。

GPU 使用率ツールの下でアプリを実行した後、GPU 使用率ツール ウィンドウの一番下の部分に追加リンクが利用できるようになります。 プロファイリング情報の収集を開始するには、[GPU 使用率データの収集を開始します] メッセージの [開始] リンクをクリックします。

ハードウェアとドライバーのサポート

次の GPU ハードウェアとドライバーがサポートされます。

ベンダー GPU の説明 必要なドライバー バージョン
Intel® 第 4 世代 Intel® Core プロセッサ ('Haswell')

- Intel® HD グラフィックス (GT1)
- Intel® HD グラフィックス 4200 (GT2)
- Intel® HD グラフィックス 4400 (GT2)
- Intel® HD グラフィックス 4600 (GT2)
- Intel® HD グラフィックス P4600 (GT2)
- Intel® HD グラフィックス P4700 (GT2)
- Intel® HD グラフィックス 5000 (GT3)
- Intel® Iris™ グラフィックス 5100 (GT3)
- Intel® Iris™ Pro グラフィックス 5200 (GT3e)
(最新のドライバーを使用)
AMD® AMD Radeon™ HD 7000 シリーズ以降の大部分 (AMD Radeon™ HD 7350 から 7670 を除く)

グラフィックス コア ネクスト (GCN) アーキテクチャを搭載した AMD Radeon™ GPU、AMD FirePro™ GPU、および AMD FirePro GPU アクセラレータ

グラフィックス コア ネクスト (GCN) アーキテクチャを搭載した AMD® E シリーズおよび AMD A シリーズの Accelerated Processing Unit (APU) ('Kaveri'、'Kabini'、'Temash'、'Beema'、'Mullins')
14.7 RC3 以降
NVIDIA® NVIDIA® GeForce® 400 シリーズ以降の大部分

Fermi™、Kepler™、または Maxwell™ アーキテクチャを搭載した NVIDIA® GeForce® GPU、NVIDIA Quadro® GPU、および NVIDIA® Tesla™ GPU アクセラレータ
343.37 以降

NVIDIA® SLI™ と AMD Crossfire™ などのマルチ GPU 構成は、現時点ではサポートされていません。 NVIDIA® Optimus™ および AMD Enduro™ などのハイブリッド グラフィック設定はサポートされています。