-
Notifications
You must be signed in to change notification settings - Fork 9
パフォーマンスに関する推察
I don't have enough English skill to write this document in English, so I'll be happy if anyone could translate it.
これを英語でまとめるには英語力が不足しているので、誰か翻訳してくれると助かります。
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 が最も低いスコアとなっています。この理由は以下の仮定の下で推察できます。
- P-Core 単体の性能が「100」、E-Core単体の性能が「70」であると仮定する
- Cinebench R23 のシングルコアのベンチマークにおいては、ある一定の時間スライスやレンダリングブロックごとに 1 コアがランダムに選ばれてレンダリングが行われる、と考える
- 選ばれた 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
有効で利用すると良い」ということは言えそうです。