第2世代Threadripperは、第1世代の延長線上にある2ダイ構成の“X付き”モデルと、4ダイに強化して究極のマルチスレッド性能を追求した“WX付き”モデルの2ライン構成となっている。
そのWX付きモデル、即ちThreadripper 2990WXや2970WXは、物理32コア64スレッド、あるいは物理24コア48スレッドという強烈なマルチスレッド性能を獲得したが、内部構造が他のCPUと違いやや特殊で、この特性を理解していないと“コア数が多いのに性能を活かしきれない!”という結果を生む。
この原因はWX付きモデルの4基のダイのうち2基のダイはメモリーアクセスに対しハンデのある設計になっており、メモリーアクセス頻度の高い処理がハンデのあるダイ(コンピュートダイ)で実行されると遅くなる、というものだ。
それを回避するにはコア1/2モードでコンピュートダイを無効化するほかに、コンピュートダイの特性を考えて作業を割り振ってくれるLinuxで運用する、といった方法がある。しかしWindows環境でもっとエレガントにWX付きのThreadripperを運用する方法が生まれた。それがRyzen Master v1.5より実装された「Dynamic Localモード」だ。メモリーアクセスがありそうな処理をハンデのないダイ(IOダイ)に優先的に割り振ることができる。
このあたりの詳しい技術的解説は、Threadripper 2920X/2970WXのレビュー記事で触れているので、そちらも参照頂きたい。
2920Xと2970WXの価格はお得か?Ryzen Threadripper全モデル検証
さて今回の検証の目的は、このDynamic Localモードがゲームに及ぼすパフォーマンスを、別のゲームで検証しようというものである。ちょうどBattlefield Vもスタートした所ではあるし、Threadripper環境でのパフォーマンスも検証しておきたい。
検証環境をまず紹介
今回の検証の解説に入る前に、検証環境を紹介しておこう。Dynamic Localモードを試せるCPUの中でも最も速い、Threadripper 2990WXをベースにしたシステムを準備した。このようなシステムにRyzen Masterをインストールすると、デフォルトでDynamic Localモードが有効になる……。つまりWindows環境でもうまくダイの使い分けをしてくれるシステムになる訳だが、今回はあえてそれを崩して、Dynamic Localモードの動きを見てみようという訳だ。
検証環境 | |
---|---|
CPU | AMD Ryzen Threadripper 2990WX(32C64T、3GHz〜4.2GHz) |
マザー | ASUSTeK ROG ZENITH EXTREME(AMD X399、BIOS 1501) |
メモリ | G.Skill F4-3200C14D-16GFX×2(DDR4-2933で運用) |
グラフィック | GeForce RTX 2080Ti Founders Edition |
ストレージ | インテル SSDPEKKW512G7X1(NVMe M.2 SSD、512GB) |
電源 | Silverstone SF85F-PT(850W、80PLUS Platinum) |
CPUクーラー | Enermax ELC-LTTR240-TBP(簡易水冷、240mmラジエーター) |
OS | Windows 10 Pro 64bit版(October 2018 Update) |
これ以降、2990WXの中に入っているダイは“ノード”と表記する。WX付きThreadripperのダイは、OS側からは4基のNUMAノード、即ち「ノード0」〜「ノード3」として区別されるからだ。マイクロソフト製のツール「coreinfo」を使って調べると、ノード0とノード2がメモリーコントローラーに直結されている「IOダイ」、ノード1と3が「コンピュートダイ」となる。
ゲームにより異なる結果に
今回のテストは、シンプルにゲームにおけるパフォーマンスチェックだ。Dynamic Localモードを有効にした場合と無効にした場合で性能がどう変化するかを確認する。ただDynamic Localモードを無効化しても、コンピュートダイに全ての処理が割り当てられるとは限らない。
そこでタスクマネージャーから手動でゲームをノード1と3でのみ処理するよう設定した場合をワーストケースとして測定した。理論的には「Dynamic Local有効」が一番性能が高く、続いて「Dynamic Local無効」、そして「ノード1&3のみ」 の順で性能が落ちるはずだ。これを検証してみたい。
まずは「Battlefield V」(BFV)だ。GPUはレイトレーシング対応のRTX 2080Tiを使っているが、DXRを有効にするとGPU側が強烈なボトルネックになるため、DXRは使わない状態で検証する。同様に解像度を上げてもGPU側のボトルネックが出てくるためフルHD固定とした。
今回の検証では、画質はプリセットの“最高”とし、シングルプレイヤー用の“ティライユール”のステージ“平等”内にある一定のコースを移動した際のフレームレートを「OCAT」で測定した。
まずはっきりとわかるのは、コンピュートダイに処理を全振りすると10fps程度下がるということ。コンピュートダイで処理されるとGPUにつながるPCI-Expressコントローラーからも遠くなるので、下がって当然といえる。ただ正直なところ、GPUにRTX 2080Tiを使っているとはいえ「10fps」という数値はかなり軽微な影響ともいえる。
ただDynamic Localモードを無効にしても、フレームレートは変わらない。タスクマネージャーでBFVの処理がどのノードで処理されているか観察すると、Dynamic Localモードが無効でもノード0とノード2に負荷がかかりつつ、ノード1や3の負荷は微増というパターンが圧倒的に多かった。逆にDynamic Localモードを有効にすると、ノード0とノード2以外の負荷がほとんど発生しないパターンが増える。
BFVの検証で終わらせようと目論んでいたが、Dynamic Localモード有効でも劇的にフレームレートが上がらなかったので(むしろ無効でも下がらない方を褒めるべきだろう)、別の重量級ゲーム「Shadow of the Tomb Raider」(SotTR)でも試してみる。APIはDX12モード、画質“最高”、アンチエイリアス“TAA”とし、内蔵ベンチマークモードを利用して計測した。“CPU-Min”(最低)等とCPU-がつくものは、CPUで処理されるフレームレートを、“Avg”は実際に画面に表示されるフレームレートを意味する。
BFVよりもDynamic Localモード無効時に一気にフレームレートが落ち込んでいることから、ゲームの設計によりDynamic Localモードの効きも変化することがわかった。Dynamic Localモード有効時と無効時のCPU占有率を比較してみよう。
BFVだとDynamic Localモード無効時でもほとんどノード1や3に処理が落ちてこなかったが、SotTRだと簡単にノード1に処理が落ちてきた。その場合のノード負荷はノード0より少し少ない程度なので、メモリーかPCI-Expressへのアクセスが遠くなったことによる速度的ハンデがフレームレートに強く影響したものと考えられる。
最後に同じ重量級として「Assassin’s Creed: Odyssey」でも試してみよう。画質は“最高”とし、内蔵ベンチマーク機能を利用して平均fpsを測定した。
このゲームではDynamic Localモードの影響は非常に軽微であり、BFVよりも小さくなっている。ベンチマーク中のCPU占有率は非常に高いが、GPU負荷が高いためCPU側のボトルネックが見えにくい状況になっていることと推測できる。
上のCPU占有率はあくまで一例だが、ノード2に負荷が集中し、その他のノードに処理が分散するパターンが見られた。試行回数を増やせばまた別のパターンも見られるだろうが、Dynamic Localモードを使わないとこのように負荷が“とっちらかる”と考えてよいだろう。
2990WXや2970WXも、Dynamic Localモードを使えばゲームにだって活用できる
もともとAMDは、Threadripperはクリエイターや研究者向けとし、ゲーマーには素直な挙動を占めるX付きモデルが最適、と謳っていた。WX付きモデルはCPU自体のクロックが低いことに加え、コンピュートダイの存在がゲームには向かないからだと筆者は推測するが、Dynamic Localモードを使うことでゲームによってはかなり改善できることがわかった。Ryzen Masterを導入するだけで利用でき、デフォルトで有効になるため、2990WXや2970WXユーザーは忘れずに導入しておこう。