Coelacanth's Dream

Intel Alder Lake と Rocket Lake に追加される CPUID Model

Intel のソフトウェアエンジニア Cui,Lili 氏より、GCC に Alder Lake, Rocket Lake の CPUID Model を追加するパッチが投稿された。
CPUID (Leaf: 0x1) Model は、CPUアーキテクチャやプロセッサの種類を識別するのに使われる値。

 @@ -415,6 +415,7 @@ get_intel_cpu (struct __processor_model *cpu_model,
        cpu_model->__cpu_subtype = INTEL_COREI7_SKYLAKE;
        break;
      case 0xa7:
 +    case 0xa8:
        /* Rocket Lake.  */
        cpu = "rocketlake";
        CHECK___builtin_cpu_is ("corei7");
 @@ -487,6 +488,7 @@ get_intel_cpu (struct __processor_model *cpu_model,
        break;
      case 0x97:
      case 0x9a:
 +    case 0xbf:
        /* Alder Lake.  */
        cpu = "alderlake";
        CHECK___builtin_cpu_is ("corei7");

プロセッサに割り当てられている CPUID Model は Intel® 64 and IA-32 Architectures Software Developer Manuals 「Volume 4: Model-Specific Registers」に記載されている。
タイムスタンプでは 2021/12/01 に更新されており、GCC へのパッチはそれを反映させたものと思われる。

Alder Lake

Alder Lake ではデスクトップ向け (-S) に 0x97 (151)、モバイル向け (-P/M) に 0x9A (154) が割り当てられている。
今回追加されたのは 0xBF (191) だが、最近になって coreboot でサポートが進められている Alder Lake-N は 0xBE (190) であり、どちらかがタイポ、間違っているのではないかと思われる。
N バリアントも存在する Alder Lake | Coelacanth’s Dream Alder Lake-N については、GPUドライバーにおいてもサポートが進められていることから確かに存在するとされる。それ以外のバリアントが存在して、ドキュメントや coreboot 等で別々にサポート作業が行われているとは考えにくい。

 enum alderlake_model {
 	ADL_MODEL_P_M = 0x9A,
 	ADL_MODEL_N = 0xBE,
 };

Rocket Lake

Rocket Lake に追加された 0xA8 (168) には謎がある。
Rocket Lake は現在デスクトップ向け (-S)、Model: 0xA7 (167) のみがリリースされており、コンパイラやGPUドライバにおいて、それ以外のバリアントをサポートする動きはこれまで無かった。
一応 0xA8 は Rocket Lake のモバイル向けバリアントに割り当てられていたが、サポートもリリースもされなかったことから、キャンセルされたのではないかという考えが多数だった。
第11世代 Intel プロセッサにおけるモバイル向けは Tiger Lake-U が担当しており、デスクトップ向け Rocket Lake-S と棲み分けがなされていた。
CPUID Model だけではあるが、今になってサポートを追加するのは少し不思議に思える。
とはいえサポートを追加したから製品としてリリースされるという確証もないが。
モバイル向けには先日 Alder Lake-P/M の SKU が発表されたばかりであるから、単に非公開の内部ドキュメントとのズレを修正したか、手違いということも考えられる。

それと、以前 Meteor Lake-M/P, N, SRaptor Lake-P, S の CPUID が記載されているとして挙げた intel/dptf には、Rocket Lake-U/Y, H/S も記載されている。
だが CPUID_FAMILY_MODEL_RKL_H は、リリース済みであり、明らかな Rocket Lake-S の CPUID とは異なり、代わりに Tiger Lake-H のものと一致する。
CPUID_FAMILY_MODEL_RKLTiger Lake-U と一致するため、マクロ名とコメント部についてはミスだと思われる。

 #define CPUID_FAMILY_MODEL_RKL      0x000806C0		// Rocket Lake U/Y
 #define CPUID_FAMILY_MODEL_RKL_H    0x000806D0		// Rocket Lake H/S

参考リンク