このページの本文へ

最新パーツ性能チェック 第357回

“big.LITTLE”デザインを採用したAlder Lake-Sの実力は?

CINEBENCH最強の座を奪還!Core i9-12900K、Core i7-12700K、Core i5-12600K速報レビュー

2021年11月04日 22時00分更新

文● 加藤勝明(KTU) 編集● ジサトラユージ/ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

ベンチマーク前に押さえたい技術的トピックまとめ
PコアとEコアの仕様をチェック

 第12世代Coreは前世代から大きく刷新され、変化した部分が非常に多い。ベンチマークのスコアーを見る前に押さえておきたい第12世代Coreの技術的トピックのうち、重要なものを列挙してみた。

【1】EコアとPコアの使い分けは自動で行われる

 第12世代Coreが持つPコアとEコアの使い分けは完全に自動で行われる。CPU内のITDがコアの状況を細かくモニタリングし、OS側にスレッドをどのコアに振り分けるべきかを助言する。アプリ側は性能が必要な処理と性能があまり必要とされない処理ごとに別々のスレッドのグループ(プール)を用意しておく。前者はPコアへ、後者はEコアに優先的に割り当てられるというわけだ。後者の性能が必要とされない処理とはバックグラウンドでのファイルの読み書きやサウンドの処理、動画の再生処理などが挙げられる。

 Pコアがすべて埋まっている状態で新たなスレッドが追加されれば、Eコアに追い出される処理も出てくる。特に浮動小数点ベクトル演算やAVX2 VNNIといった計算量が高い処理については優先度が高く設定されており、ITDはこれらのスレッドに関しては普通のスレッドよりもPコアへ優先的に配置するよう助言する。つまり、PコアからEコアへ“追い出される”処理が出てくるのだ。優先度の高い処理が終了すれば、再びPコアへ戻される。

 こうしてPコアに優先度の低いスレッドを割り当てないようにすることで、性能を左右するようなスレッドがほかのスレッドに邪魔されず実行しやすくなる。例えば、ゲームのレンダリング処理のスレッドが重要度の低いスレッドに邪魔されなくなれば、より安定したフレームレートを出せるようになる、といったイメージだ。

 実際のゲームでのCPUの使われ方はそのタイトルの設計に強く依存するが、「Apex Legends」の場合はPコアの物理コア側にのみ負荷がかかり、ハイパースレッディング(以下、HT)で増えた論理コア側の負荷は0%になる。これまでのCPUだと論理コア側にも数%程度の負荷が乗ってくるが、第12世代Coreではこのような処理はすべてEコアにまとめられる。ゆえに、Pコアの手がより空くようになるため、ゲームの処理効率が良くなり、何か別の処理が突発で入っても空いているPコアが吸収してくれる可能性が高くなる。

「Apex Legends」をCore i9-12900K環境でプレイした時のCPU占有率(このオーバーレイ表示は「CapFrameX」によるもの)。Pコアは基本的に物理コア側が使われ、Pコアの論理コアはほぼ使われていない。そして、Eコアは全部埋まっている

 ITDとOSの連携こそが第12世代Coreのパワーの核心部分といえるが、これを最も効率良く発揮できるOSはWindows 11であるとインテルは主張している。Windows 10でもITDは動作するし、PコアとEコアも使い分けられるが、時にはEコアへ行くべき処理がPコアへ行くかもしれない。

 その差異がどの程度かまではまだ検証できていないが、第12世代Coreの性能をすべて出し切りたければ、Windows 11環境が現状最高の選択のようだ。もちろん、アプリ側もスレッドの重要度を加味した設計にすることで、第12世代Coreにより最適化させられる、というのがインテルの主張だ。

 また、PコアとEコアは、各々BIOS経由でコア単位で無効化できる。Eコアはゼロにすることも可能だが、Pコアは最低1基は残しておかねばならない。Eコアを無効化すればそのぶんの電力をPコアに回せるため、単一アプリでのパフォーマンスが向上する可能性はあるが、マルチスレッド性能やその時のレスポンス性が落ちる可能性がある。これはユーザーの裁量次第になるだろう。

Eコアについては稼働させるコア数を指定したり、あるいは特定のコアだけを無効化することもできる

Pコアは最低1基は残しておかねばならないため、Eコアのみの運用はできない

【2】タスクマネージャーではPコア→Eコアの順で列挙される

 Windowsのタスクマネージャー上では、左上から右下へかけてまずPコアが列挙され、その後にEコアが並ぶ。PコアはHTに対応しているのでマス2個でコア1基、これに対してEコアはHT非対応なのでマス1個がコア1基に対応する。

Core i9-12900KをWindows 10のタスクマネージャーで観察したところ。左上2つがPコアのコア0で、2マスのうち左が本来のコア(物理コア)、右がHTで増えた論理コアとなる。この組み合わせが8回続いた後でEコアのコア0、コア1……と続く

先に掲示したApex Legendsプレイ中のCPU負荷をタスクマネージャーで見るとこんな感じになる。8基のEコアにはすべて弱い負荷がかかっており、ほとんどがカーネル時間として計上されている。OSやドライバーの処理であまり重要度の高くない処理がEコアに割り当てられていることがわかる

「Coreinfo」でCore i9-12900Kの構造を表示させてみた。Physical Processor 0〜7がHT対応なのでPコア(論理コア16基ぶん)、Physical Processor 8〜15までがHTに対応しないEコアを示す

CoreinfoによるCPUコアとキャッシュのトポロジー。上から4段目のL3キャッシュがすべてのコアに対して接続しているほか、Eコア4基のクラスターにはそれぞれ共有L2キャッシュが存在する

上の図をキャッシュとコアのトポロジーにフォーカスしてまとめたもの

【3】手動による関連付け(Hard Affinity)は非推奨

 優先度の高いスレッドがPコアを使い、低いスレッドをEコアに割り振ることは基本的にOSが決定する。これはコンテキストスイッチのコストやスレッドの予想実行時間などを元に導き出す。しかし、強制的にPコアで動作させたい場合、アプリによってはタスクマネージャーで「関連付け」(Processor Affinity)を設定することもできる。

 ただし、このような“Hard Affinity”をインテルは推奨していない。Hard Affinityを実施すると、OSはITDのサジェストをすべて無視し、結果としてOSのスケジューリング能力を制限してしまうため、と主張している。だが、アプリの設計次第ではPコアが適切に使用されない場合もある。

 例えば、今回検証した範囲では、動画エンコードアプリ「HandBrake v1.4.2」でエンコードのスレッドが“ほぼ”Eコアのみに割り当てられてしまう現象に遭遇した。「Media Encoder 2021」や「DaVinci Resolve Studio」などではPコアも普通に使われるため、HandBrakeの設計によるものであることは間違いない。

 こうした際にどうしてもHandBrakeの処理性能を稼ぎたい場合は、HandBrakeのエンコード用プロセス(HandBrake.Worker.exe)の優先度をタスクマネージャーでデフォルトの“通常以下”から“通常以上”に変更してやることで、PコアもEコアもすべて使ってエンコードするようになる。

HandBrake v1.4.2でH.264やH.265を使ってエンコードしようとすると、第12世代CoreではEコアのみに処理が集中する。Pコアも使われることはあるが、Pコアの処理はごく短時間で終わってしまう。原稿執筆時点のNightlyビルド(20211031)でも変わっていない

Hard Affinityを使わずにHandbrakeにPコアを使わせるには、Handbrakeのエンコード用プロセス(HandBrake.Worker.exe)の優先度を「通常以上」に設定する

するとPコアもEコアも全力で回して処理するようになる。HandBrakeの場合、優先度は“通常”ではダメで、“通常以上”にする必要があった。なお、第12世代Core発売後のHandbrakeではこの点は改善されている可能性が高い

カテゴリートップへ

この連載の記事

注目ニュース

ASCII倶楽部

ピックアップ

ASCII.jpメール アキバマガジン

ASCII.jp RSS2.0 配信中