ARM64_Lab

Snapdragon X Elite の12コアを Windows がどう見せているか(L3キャッシュが0と報告される)

この記事の見出し
  1. 返ってきた値をそのまま置く
  2. 12コアで12論理プロセッサ
  3. Architecture が 12
  4. L3 が 0 なのをどう読むか
  5. CurrentClockSpeed も信用していない
  6. 周辺の数字
  7. 何が確かで、何が確かでないか

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項目しかなかった。

a
arm64lab — 個人運営

Surface Pro 11th Edition(Snapdragon X Elite)を2025年5月から常用機にしている個人の記録です。ARM64 版 Windows で詰まったところと、その場で測った値をそのまま書き残しています。特定の企業・団体とは関係がなく、いかなる組織を代表する見解でもありません。