以前とりあえず GPUView を起動させてみることはやってみました。今回はそんな GPUView をもっと簡単に試せる方法が見つかったのでブログにまとめてみます。
通常の方法
簡単に使える版の前に通常の導入・使用方法をまとめておきます。
Windows Performance Kit の導入
GPUView は Windows Performance Kit の一部として含まれています。現時点ではこれが所属するパッケージが OS の種類によって異なります。
Windows7 の場合(がメインだった時代) においては、 Windows Performance Kit は Windows SDK の一部になっています。そのため WindowsSDK 7.1 をインストールすることで導入することができます。インストール時に、 Windows Performance Kit を選択してインストールできるのですが、これ単独だけでなく問題のなさそうなものは含めておいた方が良さそうです。
Windows10 の環境でも GPUView は使用することができます。 現時点においては Windows Performance Kit は Windows ADK(Assessment and Deployment Kit) の中に含まれています。 Windows ADK をインストールの際に、 Windows Performance Kit を選択してインストールすることが可能です。
ログの採取
GPUView のインストールされたパスに、log.cmd があります。
管理者権限付きでコマンドプロンプトを開いて、この log.cmd を実行します。
1度目の実行でログ取得の開始、2度目の実行でログ取得の終了となります。
うまくいけば、この段階で Merged.etl というファイルが作成されます。
この Merged.etl ファイルを GPUView で開いて動作を確認しますWindows7 の環境では、ログ取得の log.cmd 実行の際にエラーが出ることがあります。
そのときにはこちらで紹介しているように、環境変数を設定します。 手元の Windows10 の環境では今のところ発生していないようです。
簡単な方法
今回の本題である簡単な方法について説明します。
UIforETWを使う
こちらの UIforETW を利用するのが現時点で一番楽な方法だと思っています。試したのは ver 1.40 というバージョンのものです。 リンクから etwpackage.zip を取得して、適当なフォルダに展開します。
この中に含まれる UIforETW.exe をマウスダブルクリックで実行すると、必要があれば Windows Performance Kit をインストールするようです。また管理者権限を最初から必要としている Windows アプリケーションのため、管理者権限コマンドプロンプトが不要です。
ログの採取
UIforETW のウィンドウで、 Start Tracing のボタンを押してトレースを開始します。
トレース終了の際は Stop Tracing を押します。ただし、トレース結果がほしいので、実際のところ Save Trace Buffers を押した後で、 Stop Tracing を押すことになると思います。
このようにしてログを採取するとウィンドウ左下部の部分にトレース結果が出てきます。この項目を選択して、右クリックすると以下のようにメニューが出現します。
ここで Open trace in GPUView という項目が出ているのでこちらを選択すると、結果を GPUView で表示することができます。
動作確認
Windows7 で動作確認してみました。適当な DirectX11 のサンプルを実行してログをとってみました。
ウィンドウモードで起動しての結果を以下に貼ってみました。うまく取得できているとこのような感じで表示されます。各所で説明されていますが、ハッチのブロックが Present パケットです.
フルスクリーンモードでの結果を以下に貼ってみました。こちらも Window モードと同様な感じになっています。ただ Present パケットがハッチのブロックとして表示されず GPU ハードウェアキューにも出てこないようです。
Windows10 の環境で同様にフルスクリーンモードでキャプチャすると以下のような感じになりました。
アプリケーションからの Present パケットはハッチにならないものの、 Flip Queue には Present パケットからの何らかのパケットがハッチがけになっているようです(Present パケットを選択すると、同時に選択されるようです)。
まとめ
GPUView の詳しい読み方はまだこれからになりますが、まずは情報を取得するための手順について紹介しました。従来のやり方に比べ UIforETW を使うと少し手間が減る分、導入の敷居が下がるのではと思っています。
その他
フルスクリーン時に Present パケットが Window モードとの挙動の差が出ている点について、ご存じの方は教えていただけると助かります。