以前 Intel CPU の CPUID から Family, Model, Stepping
を読み取る方法に触れたが、AMD CPU はまだ自分自身理解していない部分があったため、整理も兼ねて書く。
Alder Lake-P を搭載する Chromebookボード 「Brya」、そして Alder Lake-M | Coelacanth’s Dream
そして、過去の主張を訂正するための記事。
CPUID
CPUID とひと括りにしているが、CPUID にも色々ある。そもそも CPUID は CPU の各種情報を出力する命令である。
CPUID命令は EAXレジスタに特定の値をセットしてから実行することで、ある情報が取得、出力される。
そうして得られる情報の中で、Family, Model, Stepping
の識別情報が、ベンチマーク結果から得られる CPU情報と照らし合わせたりと活用しやすいから注目されやすい、収集されやすいという話。
CPUID から Family, Model, Stepping
を読み取る方法に関しては当然 AMD からドキュメントが出されているし1、Coreboot のコードにも分かりやすく記述されている。2
そのため CPUID から読み取ることは難しくない。
例えば Zen+ CPU / Pinacle Ridge の CPUID は 0x00800f82
だが、その文字列を Family, Model, Stepping
に対応させると以下の表のようになる。
CPUID | (Reserved) | Ext.Family | Ext.Model | (Reserved) | Base.Family | Base.Model | Stepping |
---|---|---|---|---|---|---|---|
Pinaccle Ridge | 0x0 | 0x08 | 0x0 | 0x0 | 0xF | 0x8 | 0x2 |
それをさらによく見る形式に変換すると、Family: 0x17 (23), Model: 0x8 (8), Stepping: 0x2
のようになる。
Microcode
CPUID については、あまり見掛ける機会は無いが、マイクロコードはそれなりにある。
というのもベンチマーキングプラットフォームである Phoronix Test Suite は、マイクロコードのバージョンを取得し、CPU情報の 1つとして記録するからだ。
今回調べるきっかけとなったのも、Cezanne APU の Model について、Coreboot には Model: 0x51 (81)
であるように記述されているが、Geekbench の結果等では Model: 0x50 (80)
となっていたことだ。この 1 違いにもっとまともな答えを見出したかった。3
以下はとりあえず OpenBenchmarking.org から集めた Zen系 CPU のマイクロコードバージョンだが、Family: 0x17(23)
である Zen+/2 CPU は先頭が同じ 0x8
になっていることから、マイクロコードバージョンは Family, Model, Stepping
に対応していると推測できる。
Microcode Patch Level | |
---|---|
Zen+ Ryzen | 0x800820d |
Zen+ APU4 | 0x8108109 |
Zen2 EPYC5 | 0x830101c |
Zen2 Ryzen6 | 0x8701021 |
Zen3 APU7 | 0xa500009 |
そして、それぞれを比較、CPUID の各値と照らし合わせた結果、以下のように対応していると考えられる。
Base と Ext を合わせることで、Family と Model が求められる。
Microcode | Ext.Family | Ext.Model | (Reserved?) | Base.Model | Stepping | Version? |
---|---|---|---|---|---|---|
Zen+ Ryzen | 0x8 | 0x0 | 0x0 | 0x8 | 0x2 | 0x0d |
Zen+ APU | 0x8 | 0x1 | 0x0 | 0x8 | 0x1 | 0x09 |
Zen2 EPYC | 0x8 | 0x3 | 0x0 | 0x1 | 0x1 | 0x1c |
Zen2 Ryzen | 0x8 | 0x7 | 0x0 | 0x1 | 0x0 | 0x21 |
Zen3 APU | 0xA | 0x5 | 0x0 | 0x0 | 0x0 | 0x09 |
ここでも Cezanne は Model: 0x50 (80)
となった。
訂正といのはこのことで、Cezanne は Model: 0x51 (81)
ではなく、Model: 0x50 (80)
可能性のが高く、Coreboot のは誤字かもしれない。あるいは Cezanne とは別の APU に向けたものである可能性もあるが、それは GPU部に Cezanne と同じ DeviceIDを用い 、Model は 1 違いというややこしいものとなる。
8
Stepping 0
であるから Model: 0x51 (81)
となっていないのではないか、とも書いたが、Zen 2 EPYC (Rome) も Zen 2 Ryzen (Matisse) も Stepping 0
であるため根拠にはなり得ず、思い切り外した推測であった。
マイクロコードバージョンの読み方を知っていたら、少しはまともな見方が出来ただろう、という後悔。
-
Coreboot に Renoir と Lucienne/Cezanne らしき DeviceID が追加される | Coelacanth’s Dream Cezanne APU、Ryzen 7 5800U が Geekbench に現る | Coelacanth’s Dream ↩︎
-
AMD Cezanne APU ベンチマーク結果 ―― 8-Core/16-Thread, 3.6GHz、構成は Zen 3 + Vega か | Coelacanth’s Dream ↩︎
-
Cezanne の Coreboot 対応が進行中 ―― MI200, Mero, Rembrandt のネームプレート | Coelacanth’s Dream ↩︎