※この記事はASCII.jpからの転載です(文中リンクはASCII.jpの記事に飛ぶことがあります)
コアの使い分けは“ゲームか否か”
2種類の特性の異なるコアを備えるインテルの第12世代・第13世代コアの場合、PコアとEコアの使い分けはCPU内に搭載された「ITD(Intel Thread Director)」とOSのスケジューラー(Windows 11が最適だが、Linuxでも対応が進んでいる)の連携で実装されている。
各CPUコアの負荷や電力効率がOSのタスクスケジューラーに随時フィードバックされ、処理の内容(命令の種類、フォアグラウンドかバックグラウンドか、など)を加味した上で適切なコアに処理が振り分けられる。
一方AMDはITDのようなハードウェア的な仕組みではなく、ソフトウェア的なアプローチを選択した。チップセットドライバー(5.01.0.3.005以降)に搭載された「AMD 3D V-Cache Performance Optimizer Driver」とAGESA 1.0.0.5c以降のBIOSの組み合わせが振り分け技術の核心部分だ。
この3D V-Cache Performance Optimizer Driverが“どのコアに処理を振り分けるべきか”を決める。専門的な言い方をすればPreferred Coreが処理の内容により変更される。Preferred Coreの最上位はクロックの高いCCD1側のコアであり、通常の処理ではこれが選ばれる。しかし、ゲームの処理ではPreferred Coreが変更されL3キャッシュの多いCCD0側のコアに処理が割り当てられる。正確なところはもう少し複雑(キー入力のフォーカス等も勘案する)なのだが、概要はこんなところだ。
では3D V-Cache Performance Optimizer Driverは「何をもって」ゲームか否かを判断しているのだろうか? それは「Windowsのゲームモードか、Mixed Realityモードが発動すればゲームと判断」している。つまりCPU側で「こういう命令ならばゲームである/ない」かという判断をせずに、ゲームか否かの判断はWindows側に丸投げしているのだ。よってRyzen 9 7950X3D/7900X3D利用時はWindows側のゲームモードを有効にする必要がある。
となると必然的にWindows側のデータベースの不備でゲームモードが発動しないゲームが出てくる可能性も考えなければならない。その場合は慌てず騒がず「Xbox Game Bar」を起動し、「これをゲームとして記憶する」にチェックを入れればよい。
ITDのようなハードウェアありき、かつ汎用性を強く志向した仕組みだとコア仕分けのルール変更はそう簡単ではない(アプリ側の更新、根本ルールを変えるならマイクロコードレベルの更新も必要)が、AMDのやり方なら即時更新が期待できないゲームでも対処できる。
また、Windowsのゲームモードは実行ファイルのファイル名で判断しているため、ファイル名を既知のゲームのファイル名と同じにするというかなり古典的な方法も使える。ITDよりも“先端技術の結晶”感は乏しく、OSの特定の機能に強く依存する一方で、人間の手による介在の余地を大きく残しているのが面白い。
CCD0/ CCD1のどちらを優先するのかはBIOS設定で固定することも可能だ。Ryzen 7000X3Dシリーズ対応BIOSでは、「SMU Common Options」内に「CPPC Dynamic Preferred Cores」なる設定が出現し、「Auto」「Driver」「Cache」「Frequency」の4択から挙動を選択できる。
「Cache」を選んだ場合は処理の内容に関係なく常にCCD0のコアが優先、「Frequency」ならCCD1が優先、デフォルトの「Auto」あるいは「Driver」であれば3D V-Cache Performance Optimizer Driverに任せるということになる。
AMDチップセットドライバーと共に導入される「AMD PPM Provisioning File Driver」も、3D V-Cacheを有効活用するための大きなカギだ(このドライバーは従来のチップセットドライバーにも含まれている)。
このドライバーはWindowsのゲーム/Mixed Realityモード下において、性能の順位の低いコアの動作を止める(コアパーキング)ことでキャッシュヒット率を高める役割を持つ。CPU全体の占有率が一定レベルより高くなった場合はコアパーキングは解除され、手空きのCCDにも仕事が割り振られるため、コア数が不当に制限される訳ではない。
以上のことを踏まえて、実際のゲームにおける挙動を確認してみよう。ここでは「Tiny Tina’s Wonderlands」を使用した。解像度フルHD、画質“最低”状態で立ち止まった時のクロックを観察してみる。まずはCPPC Dynamic Preferred Cores設定がAuto(=Driver)、次にFrequency、最後はAuto設定だがWindowsゲームモードをオフにした時のものだ。
1枚目のスクリーンショットから分かるように、ゲームとそれに関連する処理がCCD0に集められ、パフォーマンス(フレームレート)も大きく向上する。3枚目のようにコア全体に負荷を散らしてしまうと、逆にCCDをまたぐ処理が多くなり、結果的にパフォーマンスが上がりきらない。
そしてゲームモードをオフにすると、3D V-Cache Performance Optimizer DriverやProvisioning File Driverが判断できなくなり、処理がCPU全体に分散してしまうことが分かる。
3D V-Cache Performance Optimizer Driver等が働いている状況下では、ゲームから見るとRyzen 9 7950X3Dは実質8コアCPU、Ryzen 9 7900X3Dは実質6コアCPUのように見えると考えることもできる。もちろんアクティブコア数や処理の並列度が一定の閾値を上回れば、即時にコアパーキングは解除されるので単なる6コア/ 8コアCPUと同じではない。必要に応じスケールするCPUと言うべきだろうか。何とも面白い挙動をするCPUに仕上がっている。
ここまで読んで頂いた読者の皆様はもう分かったと思うが、3D V-Cache Performance Optimizer Driverは複数のCCDを持つRyzen特有の挙動(欠点)をねじ伏せるためのドライバーである。つまり1CCDしか持たないRyzen 7 7800X3Dでは、BIOS設定も3D V-Cache Performance Optimizer Driverも必要ないと考えることができる。