テストレポート
NVIDIAの遅延計測ツール「LDAT」と消費電力計測ツール「PCAT」は,どんな仕組みでPCの遅延やGPUの消費電力を正確に測るのか?
PCの操作遅延を測定するLDAT
まずは,LDATの話から始めよう。
PCゲームにおける操作遅延とは,ゲーマーがマウスをクリックしたりゲームパッドのトリガーを引いたりしてから,実際にゲーム中のシューティング動作が行われるまでの時間と考えていい。ゲーマーの操作が可能な限り短時間でゲームに反映される,つまり操作遅延は小さいほうが良いことは言うまでもない。
PCにおけるマウスのクリックは,通常,1/1000秒間隔で実行されているポーリング(マウスボタンが押されているかいないかの判定)で取得される。その情報を,OSがゲームプログラムに通知するので,ゲーム側はマウスのクリックに応じた動作とその結果を計算してグラフィックスに反映したうえで,GPUがレンダリングした結果をディスプレイに出力して,ディスプレイが画面の変化として表示することで,プレイヤーの目に情報として伝わるわけだ。
この説明は少々大雑把であるが,マウスのクリック1つとっても,ゲーム内の動作に反映されるまで,かなり多くの処理を経ていることはなんとなく理解してもらえるだろう。
NVIDIAやAMDは近年,遅延を低減する技術をドライバソフトを通じてユーザーに提供するようになった。2019年に,AMDが「Radeon RX 5700」シリーズと同時期にリリースした「Radeon Anti-Lag」が皮切りで,GeForceシリーズの場合は,2019年8月登場の「GeForce 436.02 Driver」で,NVIDIAコントロールパネルに「Ultra
これらの機能は,前掲の概念図でいうGame LatencyとRender Latencyで,ドライバソフトが関与する部分を改善,低減しようとするものだ。
一方,NVIDIAの操作遅延低減技術には,GeForce RTX 30シリーズと同時に発表となり,9月17日に登場した「GeForce 456.38 Driver」に実装となった「NVIDIA Reflex」(以下,Reflex)というものもある。Reflexは,ゲーム開発者に低遅延での表示を実現するソフトウェア開発キットを提供することで,Game Latencyに深く踏み込んで操作遅延を低減する技術と言えよう。いずれも遅延の低減を目指すものではあるが,それぞれ異なる面がある。
いずれにしても,操作遅延を何らかの方法で測定しないと,実際に低減できたのかどうか分からないので,それを計測するのがLDATというわけだ。
4Gamer Latency Checkerの詳細は,発表時の記事を参照してほしいが,簡単にまとめると,FPSにおけるマズルフラッシュを液晶ディスプレイ表面に取り付けた光センサーで捉え,マウスボタン押下からマズルフラッシュが光るまでの時間をマイコン(※Arduino Uno R3)を使って測定する機材だった。
今回紹介するNVIDIA製のLDATは,端的に言えば,4Gamer Latency CheckerのNVIDIA版だ。ただし,もちろん細かな違いはたくさんある。そこで,まずは実物をチェックして違いを確認していこう。
液晶ディスプレイ表面に取り付けた光センサーで,マズルフラッシュを捉えるという仕組み自体は,LDATも同じだ。4Gamer Latency Checkerを開発したときに筆者が困ったことの1つが,光センサーをディスプレイに密着させる方法だったが,LDATはそこがなかなかうまくできている。
LDATは,センサーとマイコンを組み込んだ3Dプリンタ製のボックスで,そのボックスに大きめのゴム製バンドがついている。このゴム製バンドで,LDATのボックスをディスプレイに取り付ける仕掛けだ。
ゴム製バンドなので,センサーの設置位置はある程度自由に変えることができ,マズルフラッシュの位置に固定するのもそれほど難しくない。また,画面とセンサーが密着するので,4Gamer Latency Checkerのように周囲の光に邪魔をされる心配もないというのがLDATの特徴だ。
4Gamer Latency Checkerとの3つめの違いは,LDATが実際のマウスを使う点だ。4Gamer Latency Checkerではビット・トレード・ワン製のHIDデバイス自作キット「REVIVE USB」をマイコンから制御して,マウスボタン押下を行っていた。
一方,LDATでは,マウスを改造して左メインスイッチからケーブルを引き出し,そのケーブルをLDATのボックスに接続する仕組みである。ちなみに貸出機材のマウスは,Logitech製の「Logitech G203 Prodigy Gaming Mouse」であった。
4Gamer Latency Checkerとは異なり,実際のマウスを使ってプレイしながらの測定できるのは利点であるが,測定中はLDATのボックスやゴム製バンド,ケーブルで画面の一部が隠れるので,ゲームをまともにプレイするのは難しい。そのため実際の計測では,NVIDIAの用意したLDAT用測定ツール(以下,LDATツール)を使い,自動でマウスクリックを発生させて測定した。つまり,実用上において,4Gamer Latency Checkerとの大きな差ないと言える。
LDATツールは,測定中にリアルタイムで得た操作遅延時間をヒストグラムとして表示するソフトウェアだ。マウスを実際にクリックしなくても測定できるように,「Auto Fire」という機能もある。非常に便利なツールで,ユーザビリティを考慮していない4Gamer Latency Checkerとは違う。
さすがNVIDIAといったところだが,得られるデータは4Gamer Latency Checkerと同じく,操作遅延時間を記録したCSV形式のファイルだ。複数回の測定を行って,CSVファイルに記録された操作遅延時間の頻度をヒストグラムで解析するという作業は,実のところまったく変わらない。
ちなみに,LDATツール上の「Activation Level」で光センサーの感度を調節できるが,「Auto」(自動)にしてもマズルフラッシュをかなり確実に検出できるのには,少し感心した。4Gamer Latency Checkerの場合,センサーとディスプレイを完全に密着できなかったこともあり,マズルフラッシュを捉える明るさの閾値設定がなかなか難しかった。一方,LDATでは,センサーとディスプレイがおおむね密着しているので,ゲームの背景画面における明るさと,マズルフラッシュで変化する閾値が得やすいのだろうと思う。
いずれにしても,「4GamerではNVIDIAに2年以上も先駆けて操作遅延を測定するツールを作成していたのだ」と胸を張りたいところだが,これには裏話がある。実は2016年頃,4GamerはNVIDIAで,当時は名前すらなかったLDATの原型を見学していたのだ。それをヒントに作成したのが4Gamer Latency Checkerなので,LDATと4Gamer Latency Checkerはルーツが同じなのである。
Windows用の測定ソフトがあり,サウンドの遅延も測定できたりと機能が豊富になっているLDATに対して,4Gamer Latency Checkerはより原型に近いものというところだろうか。
LDATを使って遅延を測定
それではLDATを使って,ドライバソフト側が備える遅延低減技術の効果を調べてみよう。
測定に使った1つは,LDATとともにNVIDIAが公開した「SOLLatencyDX11」(以降,SOL)というソフトウェアだ。「マウスをクリックすると,画面全体の色が変わる」というだけのツールである。4Gamerでも,4Gamer Latency Checkerの関連ツールとして,マウスクリックに反応して画面中央に白い四角を描く「Display Latency Tester」というものを過去に作っているのだが,それと似たようなものだ。
単に画面の色を変えるだけのSOLは,ゲームではないので,前出のGame Latencyに当たる部分が極めて小さい。また,単に色を変えるだけなのでRender Latencyも極めて小さく,つまりゲームで実行時ではないシステム全体の遅延を測定できることになる。
一方,ゲームタイトルでの測定には,Fortniteを利用した。実際の測定時には,Fortniteのクリエイティブで1人練習用の島に入り,武器を撃ってマズルフラッシュをLDATで検出することで,操作遅延を測定した。
なお,FortniteはReflexに対応したゲームタイトルなのだが,残念なことに,筆者がテストを行っていたFortniteのVersion 14.20には,Reflexが機能しないというバグがあった(関連リンク)。そのため,今回はReflexによるテストをできなかったことをことをお断りしておく。Reflexのテストについては,対応タイトルを増やして再挑戦を予定しているので,今後に期待してほしい。
話を戻すと,操作遅延の測定回数は,LDATツールにあるAuto Fireのデフォルト値である20回とする。つまり同一条件で20回のマウスクリックを発生させて,SOLの色変化やマズルフラッシュをLDATで検出して,操作遅延を測定するというものだ。何度か計測したうえでの知見からすると,もう少し測定回数を増やしたほうがきれいな結果を取れそうだったが,今回はデフォルト値を使っている。
用意したグラフィックスカードは,「GeForce RTX 2070 Founders Edition」(以下,RTX 2070)と「Radeon RX 5700 XT」搭載のASRock製グラフィックスカード「Radeon RX 5700 XT Taichi X 8G OC+」(以下,RX 5700 XT)の2製品だ。
また,ディスプレイにはBenQ製液晶ディスプレイ「XL2430T」を使用して,リフレッシュレート144Hzで測定を行った。微細な遅延を測定するのならリフレッシュレート200Hz超級のディスプレイが望ましいが,今回は用意できなかった。その代わりというわけではないが,V-SYNCをオフにして画面の変化ができるだけ早く現れるように設定している。
それ以外に使用した機材は表1のとおりである。
●RX 5700 XTの測定結果
まずは,SOLを使った測定例として,RX 5700 XTの結果から見ていきたい。RX 5700 XTを先に見るのは,遅延低減機能が「Radeon Anti-Lag」(以下,Anti-Lag)のみなので,グラフがシンプルで比較しやすいためである。
グラフ1は,SOLを使ってAnti-Lagのオンとオフ状態における遅延の頻度をヒストグラム化したものだ。横軸が遅延時間(単位はms,ミリ秒)で,縦軸は測定した回数を示す。グラフでは測定回数を実線で,5ms秒の移動平均を点線で入れてみた。移動平均なら変化の傾向を可視化できるので,ピークがどこに出ているかが分かりやすい。サムネイルをクリックすると,実戦を消去した移動平均だけのグラフを参照できる。
実線の測定回数では,Anti-Lagオンとオフの差が分かりにくいものの,移動平均で見ると,Anti-Lagオンのほうが数msほど遅延が大きくなっているようだ。測定回数が20回と少ないことを考えると,Anti-Lagオンとオフで差はないと見ていいだろう。そもそもAnti-Lagは,CPUによる入力処理のサイクルをギリギリまで遅らせることにより,ユーザーの入力が映像に反映されるまでの遅延を軽減する機能なので,単に色を変えるだけのSOLだと,差が出にくいのは納得できるのではないかと思う。
グラフ2は,RX 5700 XTでFortniteでAnti-Lagをオンとオフしたときの操作遅延をヒストグラムで表したものだ。
一見すると,最も頻度の高い遅延時間は29msで差がないようだが,Anti-Lagオフのときには43msで1回,47msに2回の操作遅延が観測されているのに対して,Anti-Lagオンだと29ms前後に操作遅延が集中するという違いがある。
V-SYNCはオフだが,画面の更新はディスプレイ側のリフレッシュレートに合わせて行われるので,更新のタイミングは約7msおきだ。つまり,29ms前後に検出された画面更新の次は36ms前後で,さらに次が43ms前後となる。Anti-Lagがオフでも29ms前後の画面更新に間に合うことは多いが,一部は間に合わず,次やその次にマズルフラッシュが描かれるフレームもあるわけだ。一方,Anti-Lagオンだと29msに間に合わないフレームが減るので,FortniteにおいてはAnti-Lagの効果がある,と見ていいだろう。
●RTX 2070の測定結果
わりとシンプルなRX 5700 XTの結果を踏まえたうえで,RTX 2070の測定結果を見ていこう。
RX 2070では,NVIDIAコントロールパネルの低遅延モードの設定と,新しいReflexという2つの遅延に関する設定がある。GeForceユーザーなら知っているだろうが,低遅延モードにはオフ,オン,ウルトラという3つの選択肢がある。一方,Reflexは,対応タイトルによって異なるが,Fortniteの場合オフ,オン,オン+ブーストという3段階の設定を用意していた(※今回はテストできず)。
そこで,今回は低遅延モードのオフとウルトラを比較してみよう。
グラフ3は,GeForce 452.06 Driverで低遅延モードオフとウルトラを切り替えて,SOLでそれぞれの遅延を測定した結果だ。
頻度のピークが2つの山に分かれているため少し分かりにくいが,5ms移動平均では,おおむねオンとオフとで同じ位置にピークがあるので,SOLでは低遅延モードによる差はないと見ていいだろう。RX 5700 XTのAnti-Lagと同じ理屈で,SOLでは差が出ないというのはある程度納得できる。
RTX 2070とFortniteで低遅延モードによる差を調べたものが,グラフ4だ。
低遅延モードオフでは,36msにピークが集中するのに対して低遅延モードウルトラでは32msと34msにピークが見られる。5ms移動平均でも,低遅延モードのほうが2〜3ms程度小さいピークが出ていることが分かるだろう。つまり,低遅延モードウルトラは,オフ時と比べて2ms程度の遅延改善が見られると結論付けてよかろう。非常にわずかだが,操作遅延は改善するわけだ。
グラフィックスカードのナマの消費電力を測定するPCAT
続いては,PCATを見ていこう。
PCATとは,グラフィックスカード自体の消費電力を測定する機器の一種だ。4Gamerの読者なら,ベンチマークレギュレーションでGPUの消費電力測定に利用している「4Gamer GPU Power Checker」を思い浮かべる人もいるかと思うのだが,PCATはまさにそのNVIDIA版である。
なお,4Gamer Latency Checkerは,NVIDIA製で原型を見学して似たようなものを4Gamerでも作成したわけだが,4Gamer GPU Power CheckerとPCATは,まったく無関係だ。NVIDIAもたまたま同じようなものを作っていた,ということになる。
根本的なところから簡単に説明しておくと,今どきのグラフィックスカードには,カード上に消費電力のセンサーがあるため,「HWiNFO64」といったGPUの情報を表示するツールを使えば,消費電力センサーの値を得られる。そう考えると,「わざわざPCATや4Gamer GPU Power Checkerのような測定機器を作ってまで,グラフィックスカードの消費電力を測る必要はないのでは?」と思う人もいるだろう。
この点に関してNVIDIAは,「消費電力センサーへのアクセスはカードメーカー固有なので,すべてのグラフィックスカードで正しい値が得られる」とは限らないという。また,NVIDIAとAMDでは,GPUやグラフィックスカードの消費電力に対する考え方が異なるため,センサー以外の手段で取得したグラフィックスカード自体の“生”の消費電力を測ることには意義があると主張している。NVIDIAがPCATを作成したのも,それが理由というわけだ。
PCATのシステムは,PCI Express(以下,PCIe)インタフェースとグラフィックスカードの間に挟んで消費電力を測るための専用PCIeライザーカード,ライザーカードやPCIe拡張電源コネクタから取得した消費電力を測るメインボード,それらを接続するケーブル類からなる。メインボード上にはマイコンがあり,取得した消費電力の情報をUSB経由でホストPCに送る仕組みだ。
PCATの消費電力測定方法は,4Gamer GPU Power Checkerとまったく同じだ。PCIeスロットから供給される3.3Vおよび12Vと,PCIe拡張電源コネクタから供給される12Vの消費電力を,電流測定用の抵抗(※シャント抵抗)を使って測定している。
PCATメインボード上には,入力用と出力用のPCIe拡張電源コネクタがそれぞれ3つあり,どのコネクタにもVishay Dale製のシャント抵抗が取り付けられていることが確認できた。ちなみに,4Gamer GPU Power CheckerではPCIe拡張電源コネクタ全体を1つの大型シャント抵抗で測定しているが,PCATでは,コネクタ1基に対して1つのシャント抵抗を使っているので,システムを小型化できている。なるほどといったところだ。
また,4Gamer GPU Power Checkerでは,PCIeの消費電力を測るためにPCIe延長ケーブルを改造したものを利用しているが,PCATでは専用のライザーカードを用意している。このあたりはさすがメーカー製というところか。
PCATが測定した情報は,USB経由で接続したPC上で動作するソフトウェア「PCAT Utility」で監視や保存ができる。PCAT Utilityは,左上に総合消費電力を,その右に各系統ごとの消費電力を表示して,中央のグラフエリアには総合消費電力の推移を示すグラフを表示する。
フレームレートやフレーム時間を集計するNVIDIA製ソフトウェア「FrameView」と連携できるのが,4Gamer GPU Power Checkerと比べてPCATが最も優れている点だと思う。
PCAT Utilityを起動した状態で,FrameViewを起動してフレームレートを測定すると,FrameViewが記録するCSVファイル内に「PCAT Total」という項目が出来て,そこにPCATで測定した総合消費電力が記録されるのだ。
PCATでRX 5700 XTとRTX 2070の消費電力を計測してみる
それでは,PCATを使ってグラフィックスカードの消費電力を測定してみよう。
今回は,4Gamerベンチマークレギュレーション 23.2のタイトルでもある「Call of Duty: Warzone」を使い,「PLUNDER訓練」を1分間プレイしてFrameViewで記録して,グラフィックスカードにおける総合消費電力の推移と,FrameViewの計測データから「MSBetweenPresents」のデータをグラフ化してみた。MSBetweenPresentsとは,フレームと次のフレームを描画するのにかかっている時間(ms)で,時間がかかっているフレームは何らかの理由で描画負荷が高いと考えられる。つまり,負荷の高いフレームを描画するときは,GPUの総合消費電力は増加するのかという疑問を,グラフで確かめてみたわけだ。
グラフ5がRX 5700 XTの例,グラフ6はRTX 2070の例である。
予想に反して,MSBetweenPresentsとグラフィックスカードの総合消費電力の間には,あまり相関がないようだ。RX 5700 XTとRTX 2070の目立つ違いは消費電力の推移で,RTX 2070の150〜200Wに対してRX 5700 XTは250〜300Wの間で推移していた。消費電力のブレ幅はどちらも約50Wであるため,相対的に考えると,RTX 2070のほうがきめ細かい電力制御を行っているのではないかと思われる。
NVIDIAはPCAT Utilityだけでなく,FrameViewの記録を使ってGPUの電力あたり性能などを分析するExcelテンプレートなども提供しているが,今回は割愛した。
いずれにしてもFrameViewによるGPUの動作記録と,グラフィックスカードの消費電力を測るPCATを連携させられるのは,4Gamer GPU Power Checkerにはない利点であろう。4Gamer GPU Power Checkerでも,ハードウェア的にはGPUの動作ログと連携できないわけでもないので,今後の課題として考えておこうかなと考えている。
NVIDIAによるLDATおよびPCATの情報ページ(英語)
- この記事のURL: