まとめ:
・Windows 10、Intel P/Eコア混在CPU(12世代以降)の環境ではEコアを含むヘテロジニアスコア環境に最適化されておらず、Intellisense(コード補完)使用時などプチフリーズを起こすことがある
解決方法:
・BIOS/UEFIからEコアを無効化する。
・Windows 11 以降にバージョンアップする。
・アプリ実行時にプロセッサのアフィニティマスクを設定する。
※これにより、ゲームやゲームエンジンでのビルドが高速化されたり、別の問題も解決することもある。
目次
Introduction:
最近、Visual Studio 2022 でWPF/XAMLで開発していると、プチフリを起こすのがうっとうしくてしょうがなく困っていました。
別環境のPCでは特に問題がなく、再インストールや拡張機能も疑いましたが特に解決せず悩んでいたところ、CPUの問題に行き当たったので本件を共有します。
Prerequisites:
まず前提として、最近のIntel CPUでは異なる性質のコアを混在した設計となっています。Performance-cores……つまり性能重視のPコアと、Efficient-cores……効率重視のEコアです。ゲームなど要求性能の高いアプリはPコアが担当し、普段のネットやメールなどは低消費電力なEコアで処理するという一見賢そうな設計というわけです。
ですがこれには「Windows OSがそもそもそんな変態構成を想定していない」という致命的な欠点が存在し、全部同じだと思ってるウブな Windows 10 は低性能なEコアにゲームだろうが重たいクリエイティブアプリケーションだろうが割り当てはじめやがります。
※同じコア構成をホモジニアス、異種混在環境をヘテロジニアスと呼びます。
そのため、無策で Intel 第12世代以降のヘテロジニアス・マルチコアCPUを使うと新しい高性能なモデルなのに前世代やRyzenの下級モデルより遅くなる問題が生じます。
参考: Unreal Engineでのビルドパフォーマンスの比較
https://wlog.flatlib.jp/2024/01/14/windows-10-intel-cpu/
Intel CPUには Thread Director というP/Eコアをうまく使える仕組みがあるのですが、最適化されているのは Windows 11 からです。
電力について:
Eコアは本来低消費電力なのがウリです。なのでPコアのみにするとEコアがなくなった分、アイドル時の消費電力は上がりそうなイメージがあります。
が、実際はたかだか+3W程度でしかなく、Pコアも別に省電力モード(C State)に入るので電気代も年間で数百円程度の差でしかありません。(電力契約による)
そのため、いずれにせよEコアを無効化するのが最善策だと思われます。
HowTo:
🔵Windows 11 に移行
もっとも簡単なのは Windows 11 にアップグレードすることです。手段は割愛します。
ただしこれができていればこの記事を見ていない気がするので、今回は Windows 10 で回避する手段を紹介します。
🔵BIOS/UEFIで変更する
知識がある前提ですが、以下の方法でEコアを無効化します。
1. 管理者権限でコマンドプロンプトを開きます。
2. 以下のコマンドを入れます。Shutdown /r /fw /t 3
3秒後に再起動し、自動でファームウェアの設定画面に入ります。
ここからはメーカーによりけりなのですが、最近はUEFIで検索ができるので「Efficient」とか「E-core」などの単語で調べると早かったりします。Eコア使用数を「0」にするか、全体的に無効化する設定があるならそれを使います。
ついでに、できれば元々の高すぎる電力設定も変えておきます。
従来までの「TDP」相当の設定が「PBP」「MTP」(*)です。この2つの値をやはり検索等で探し出してそれぞれ65W程度・120W程度まで下げます。デフォルトでは最大で250W超に設定されており電力的にもCPUの破損問題的にも大変よろしくないです。
「PL1」「PL2」や、「Long Duration~」「Short Duration~」と書かれている場合もあります。
* 参考:
https://akiba-pc.watch.impress.co.jp/img/ah/docs/1468/703/html/11.jpg.html
🔵アプリごとに設定する
Windows にはアプリごとにどのプロセッサを使用するか設定できる機能があります。これをアフィニティマスクと呼び、タスクマネージャーかコマンドで指定します。
アプリ起動後に設定するには、タスクマネージャーで該当プロセスを右クリックし、「関係の設定」からコアを指定します。
今回は Visual Studio でPコアを使わせたいので、適当にお使いのCPUモデルに応じて0に近いコアをいくつか指定します。
⚠P/Eコア混在環境では、タスクマネージャー → パフォーマンス → CPU の「コア」の値は参考になりません。
または最初から指定する場合、アフィニティマスク設定を行います。
今回の Visual Studio であれば「Developer Command Prompt for VS 2022」(検索) などから次のコマンドを使用します。たとえば、↓では4~7を指定しています。start /affinity F0 devenv.exe
参考: 「F0」の指定方法
https://note.com/kani_elbow/n/n154d010d59dd
パスが通っているので使っただけであって、アフィニティマスクによるプロセッサの指定は普通のコマンドプロンプトからも行えます。
🔵AMD系CPUに買い替える
こちらもシンプルながら手っ取り早いです。
ぶっちゃけよほど特殊な環境でない限り AMD Ryzen のほうが性能も価格も優秀なので、今からちょうどPCを替えようと思っているならこれがベストだと思います。
– – – – – –
以上です。
Intel 第12世代以降のヘテロジニアス構成はめんどくさい割にさほどワットパフォーマンスは高くなく、その上 Intel は近年ずっとプロセッサに致命的な設計問題を抱えていることもあり、できれば使用を避けたいメーカーです。
一時期はエミュレーターの性能で Intel 系のほうが有利だったこともありますが、今ではRyzen 3Dシリーズで遜色ないどころか上回っているというベンチマーク結果もあり、よほどCPUアーキテクチャに依存するソフトウェアでない限り、 Intel を選ぶ理由はほぼなくなったと言っていいでしょう。
(私も今は環境移行が面倒なので変えてませんが、政治的な意味合いも考えるとますます変えたくなります。)
ただし、今後AMDをはじめ他のメーカーもヘテロジニアスや少なくともホモジニアスなコア構成ではなくなる可能性は大いにあり、いずれにせよ Windows 10 ではセキュリティ面を抜きにしてもクリエイティブ・デベロップメントワークでは通用しなくなるかもしれない、と考えることは必要でしょう。