GPU 使用率

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

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

GPU 使用率レポート、CPU タイムラインと GPU タイムラインあり

要件

グラフィックス診断の要件以外の、GPU 使用率ツールを使用するための追加要件を次に示します。

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

    注意

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

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

GPU 使用率ツールの使用方法

GPU 使用率ツールの下でアプリを実行すると、Visual Studio は、アプリのレンダリング パフォーマンスと GPU 使用率に関する概要情報をリアルタイムでグラフに表示する診断セッションを作成します。

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

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

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

    使用する診断ツールを選択します。

    注意

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

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

    フレーム時間、フレーム レート、および GPU 使用率が、リアルタイムの概要情報として表示されます。 これらの情報はそれぞれ個別にグラフ化されますが、共通のタイム スケールを使用しているため、それらの情報を簡単に関連付けることができます。

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

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

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

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

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

    GPU と CPU のタイミング情報を収集します。

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

    収集後、詳細を表示する範囲を選ぶ

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

    収集後、範囲を選択した状態

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

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

Visual Studio 2017 以降では、診断セッションの右下にある [GpuView で開く] または [WPA で開く] リンクをクリックすると、このデータを GPUView および Windows Performance Analyzer で開くことができます。

... で開く

GPU 使用率レポートの使用方法

GPU 使用率レポートの上部には、CPU 処理アクティビティ、GPU レンダリング アクティビティ、および GPU コピー アクティビティのタイムラインが表示されます。 これらのタイムラインは、ディスプレイの垂直同期を表す薄い灰色の垂直線で分けられます。この線の頻度は、GPU 使用率データを取得したディスプレイの 1 つ ([ディスプレイ] ドロップダウンで選択) のリフレッシュ レートと一致します。 アプリのパフォーマンス目標よりもディスプレイのリフレッシュ レートのほうが高いことがあるので、垂直同期とアプリで実現したいフレーム レートが 1 対 1 の関係にならない可能性があります。 パフォーマンス目標を満たすためには、アプリは、すべての処理を完了し、レンダリングを実行し、目標のフレーム レートで Present() 呼び出しを行う必要があります。ただし、レンダリングされたフレームは、Present() より後の次の垂直同期までは表示されません。

下の部分には、レポートの期間中に発生したグラフィックス イベントの一覧が表示されます。

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

GPU 使用率レポート、CPU タイムラインと GPU タイムラインあり

レポートの下部で 1 つのイベントを選択すると、該当するタイムラインの対応するイベントにマーカーが表示されます。通常、CPU スレッドの 1 つのイベントは API 呼び出しを表し、GPU タイムラインの 1 つにあるもう 1 つのイベントは、GPU がタスクを完了した時点を表します。 同様に、タイムラインでイベントのいずれかを選択すると、レポートの下部で対応するイベントが強調表示されます。レポートの上部でタイムラインをズームアウトすると、最も時間のかかるイベントのみが表示されます。 持続期間の短いイベントを表示するには、タイムラインをズームインします。Ctrl キーを押しながらポインティング デバイスのホイールを回すか、上のパネルの左下隅にある拡大/縮小コントロールを使用してください。 また、タイムライン パネルの内容をドラッグして、記録されたイベントに移動することもできます。

探しているものを見つけやすくするために、GPU の使用状況レポートをプロセス名、スレッド ID、およびイベント名でフィルター処理することができます。また、どのディスプレイのリフレッシュ レートによって垂直同期の線を決めるかを選択できます。さらに、アプリが ID3DUserDefinedAnnotation インターフェイスを使用している場合は、イベントを階層的に並べ替えてレンダリング コマンドでグループ化できます。

さらに詳細な情報を次に示します。

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

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

説明
イベント名 グラフィックス イベントの名前。 イベントは、通常、CPU スレッドのタイムライン内の 1 つのイベントと、GPU のタイムライン上の 1 つのイベントに対応します。

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

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

GPU 使用率の設定

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

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

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

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

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

    GPU 使用率の収集の開始時に構成する

重要

プロファイリングの延期は、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™ などのハイブリッド グラフィック設定はサポートされています。

関連項目