Skip to content

パフォーマンスに関する推察

b00t0x edited this page Jan 23, 2022 · 2 revisions

I don't have enough English skill to write this document in English, so I'll be happy if anyone could translate it.
これを英語でまとめるには英語力が不足しているので、誰か翻訳してくれると助かります。

TL;DR

Using -ctrsmt is recommended configuration for better performance.
性能を発揮するためには、-ctrsmt を使ったほうが良いと思われます。

はじめに

このドキュメントでは、CpuTopologyRebuild.kext が Alder Lake においてどのようなパフォーマンス上の効果が期待できるかについて推察しています。

ここでは、私の利用している Core i9-12900KF の下記トポロジを例にとって説明をしています。

Topology BIOS Configuration Description
24c24t 8P+8E+HT ProvideCurrentCpuInfo 24c = 8P*2 + 8E
24t = 8P*2 + 8E
All logical cores are assumed equivalent
16c24t 8P+8E+HT ProvideCurrentCpuInfo
+ CpuTopologyRebuild.kext
16c = 8P + 8E
24t = 8P*2 + 8E
Correct topology for Alder Lake
8c24t 8P+8E+HT ProvideCurrentCpuInfo
+ CpuTopologyRebuild.kext
+ -ctrsmt
8c = 8P
24t = 8P*2 + 8E
3-way SMT spoofing
8c16t 8P+HT Default 8c = 8P
16t = 8P*2
E-Cores disabled

8c16t は、比較用のために定義しています。

マルチコアパフォーマンス

この kext は Geekbench のような一般的なベンチマークで効果が見えることはあまりないようです。これは、マルチコアベンチマークにおいては全ての論理コアが 100% 稼働するため、どのようなトポロジであっても結果に違いが出ないためだと考えられます。

シングルコアパフォーマンス

例えば Cinebench R23 においては、シングルコアのスコアに以下のような違いが見られます。

Topology Score(single)
24c24t 1,703
16c24t 1,591
8c24t 1,803
8c16t 1,823

8c24t が最も高く、16c24t が最も低いスコアとなっています。この理由は以下の仮定の下で推察できます。

  1. P-Core 単体の性能が「100」、E-Core単体の性能が「70」であると仮定する
  2. Cinebench R23 のシングルコアのベンチマークにおいては、ある一定の時間スライスやレンダリングブロックごとに 1 コアがランダムに選ばれてレンダリングが行われる、と考える
  3. 選ばれた 1 コアの中でどの論理コア(スレッド)が使われるかについては、トポロジ内の論理コアの並びから順に選ばれる、とする ( 8c24t においては P→P→E )

そうすると、24c24t 構成では 16c が P-Core、8c が E-Core であるため、P-Core が 16/24 = 2/3、E-Core が 8/24 = 1/3 の確率で選ばれることになります。その結果、ベンチマーク全体を通した性能の期待値は、

100 * 16/24 + 70 * 8/24 = 90

と考えることができます。同じように考えると、16c24t 構成では P-Core、E-Core がそれぞれ 8c ずつとなるため、性能の期待値は

100 * 8/16 + 70 * 8/16 = 85

となり、8c24t / 8c16t 構成では、3. の仮定により P-Core のみが使われ 100 になると考えることができます。

まとめると、

Topology Score(single) Score% Expected performance rating
24c24t 1,703 93% 90 (100 * 16/24 + 70 * 8/24)
16c24t 1,591 87% 85 (100 * 8/16 + 70 * 8/16)
8c24t 1,803 99% 100 (100 * 8/8)
8c16t 1,823 100% 100 (100 * 8/8)

のようになります。P-Core / E-Core のパフォーマンス比は推定ですが、8c24t > 24c24t > 16c24t の序列についてある程度説明できているのではないかと思います。

実用性能

ベンチマークと異なり、実用上の性能を推し量るのは難しいですが、差異を見つけられたものとして、「Hackintosh 上の Windows VM に割り当てる仮想 CPU 数を変化させたときのパフォーマンス」がありました。

VM に 8vcpu / 12vcpu を割り当てたときそれぞれについて、VM の Windows 上で Geekbench 5 を実行したときのマルチコアスコアは以下の通りになりました。

Topology 8vcpu 8v% 12vcpu 12v%
24c24t 7,729 72% 10,331 90%
16c24t 8,425 79% 9,996 87%
8c24t 10,641 100% 11,537 100%
8c16t 10,689 100% 11,507 100%

ここで興味深いのが、8vcpu と 12vcpu のときで 24c24t と 16c24t のスコアが逆転していることです。

……これについても考察を加えたかったのですが、HyperThreading が絡んでくる場合の P-Core のパフォーマンス推定は難しく、これをうまく説明できる仮定は置けませんでした。

ただ、どのようなケースにおいても 8c24t 構成がよくパフォーマンスを発揮できているように見えるので、「E-Core 無効時と比較してデメリットを生じさせないためには、-ctrsmt 有効で利用すると良い」ということは言えそうです。