Snapdragon X Elite の12コアを Windows がどう見せているか(L3キャッシュが0と報告される)
この記事の見出し
Get-CimInstance Win32_Processor が返した L3CacheSize は 0 だった。12コアのハイエンド SoC で三次キャッシュがゼロというのは、まず疑うべき数字だ。
Snapdragon X Elite を積んだ Surface Pro 11th Edition を1年以上使っているが、CPU の構成を真面目に読んだのは2026年8月2日が初めてだった。ベンチマークの数字ばかり見ていて、Windows がこの SoC をどう認識しているかは確かめていなかった。
返ってきた値をそのまま置く
Get-CimInstance Win32_Processor |
Select-Object Name, NumberOfCores, NumberOfLogicalProcessors,
MaxClockSpeed, CurrentClockSpeed,
L2CacheSize, L3CacheSize, Architecture, AddressWidth
| 項目 | 値 |
|---|---|
| Name | Snapdragon(R) X 12-core X1E80100 @ 3.40 GHz |
| NumberOfCores | 12 |
| NumberOfLogicalProcessors | 12 |
| MaxClockSpeed | 3417 |
| CurrentClockSpeed | 3417 |
| L2CacheSize | 36864 |
| L3CacheSize | 0 |
| Architecture | 12 |
| AddressWidth | 64 |
12コアで12論理プロセッサ
物理コアと論理プロセッサが同数なので、この SoC には SMT がない。Intel や AMD の同クラスなら24論理になるところが12で止まる。
タスクマネージャーのグラフが12本しか出ないのを最初は不具合かと思っていた。仕様どおりだった。実際に数え直すまで、24本あるものだと思い込んでいる。
並列度が効く処理では、この差は素直に効いてくる。手元では12並列を超えて投げても速くならず、ビルドやテストの並列数は12を上限に決めた。
Architecture が 12
Architecture の 12 は ARM64 を指す値だ。x64 なら 9、x86 なら 0 が返る。
このプロパティを見れば、スクリプトから「今どのアーキで動いているか」が1行で分かる。環境変数の PROCESSOR_ARCHITECTURE でも取れるが、こちらはエミュレーション下で実行されると x64 と答えてしまうことがあった。手元では実際に食い違いを見ているので、WMI 側を見るように変えた。
L3 が 0 なのをどう読むか
L2CacheSize は 36864、つまり36MB。12コアで割ると1コアあたり3MB になる。この数字自体は妥当に見える。
問題は L3 の 0 だ。
いくつか調べた結果、Windows の WMI プロバイダが返す L3CacheSize は、ARM64 の SoC で正しく埋まらないケースがあると分かった。実際にキャッシュが存在しないのか、報告されていないだけなのかを WMI から区別する方法は、私の環境では見つけられていない。
つまりこの 0 は「L3 がない証拠」ではない。「WMI では確認できない」というだけだ。ここを取り違えると、キャッシュ前提の性能予測を丸ごと外す。
CurrentClockSpeed も信用していない
MaxClockSpeed と CurrentClockSpeed がどちらもぴったり 3417 で一致している。
負荷をかけた状態でも、アイドル状態でも、返ってくる値は 3417 のままだった。動的な周波数を見ているのではなく、公称値をそのまま返しているとしか思えない。
最初はここで勘違いした。「常に最大クロックで張り付いている高性能な SoC」だと読んでしまい、そのつもりで消費電力の話を組み立てかけた。実際にはただ数字が固定されているだけで、何の情報も持っていない。
WMI が返す値は、埋まっているものと埋まっていないものが混ざる。全部を等しく信用してはいけない、という当たり前の話に着地した。
周辺の数字
同じタイミングで拾えたものを並べておく。
- メモリは総量 33099544KB、空き 7279708KB
- GPU は Qualcomm Adreno X1-85、内蔵ディスプレイは 2880x1920 の60Hz
- ストレージは SDDPTQD-1T00-1124-WD、NVMe 接続の SSD で 1024209543168 バイト
- 最終起動は2026年8月1日13時32分
GPU の AdapterRAM は 0 と返ってくる。統合 GPU なので専用メモリを持たない、という意味だと解釈している。ここも L3 と同じで、0 を「無い」と読むか「報告されない」と読むかは分けて考えたほうがいい。
何が確かで、何が確かでないか
同じ Win32_Processor の1回の呼び出しで返ってきた値なのに、信用度がまったく違う。整理するとこうなった。
そのまま使えるのは NumberOfCores の 12、NumberOfLogicalProcessors の 12、Architecture の 12、AddressWidth の 64。ハードウェアの構成として固定されていて、他の手段で取っても同じ値になる。
使えないのは CurrentClockSpeed の 3417 と L3CacheSize の 0。前者は動的な値を返していないし、後者は存在の有無すら判定できない。
判断に迷うのが L2CacheSize の 36864 だ。36MB という数字自体はもっともらしいが、これが12コア合計なのか、クラスタごとの値なのか、WMI の定義からは読み取れなかった。1コアあたり3MB という割り算が正しいかどうかも未確認のまま置いてある。
個人的には、この「確かなもの」と「確かでないもの」を分ける作業のほうが、数字を集めること自体より価値があると思っている。実際、意外だったのは信用できる項目のほうが少なかったことだ。9項目のうち、そのまま使えるのは4項目しかなかった。