Coelacanth's Dream

Cyan Skilfish APU の GPUクロックと CPUコア数

RDNA アーキテクチャ APU Cyan Skilfish の各種クロックを、他 AMD GPU/APU 同様に取得し表示するパッチ、GPUクロックと電圧を範囲内で設定可能にするパッチが投稿された。
HWレイトレーシングをサポートする RDNA APU 「Cyan Skilfish (gfx1013)」 | Coelacanth’s Dream

Cyan Skilfish では、GPUクロック (SCLK, GPU gfx/compute engine clock) と、電圧の目標値 (target value) が設定可能となっている。ただ、Cyan Skilfish は (現時点のドライバーで?) DPM (Dynamic Power Management) をサポートしておらず、設定可能な値は 1つだけとなる。
GPUクロックは 1000 MHz - 2000 MHz、電圧は 700 mv - 1129 mv の範囲内で設定可能とされている。

 +/* unit: MHz */
 +#define CYAN_SKILLFISH_SCLK_MIN			1000
 +#define CYAN_SKILLFISH_SCLK_MAX			2000
 +#define CYAN_SKILLFISH_SCLK_DEFAULT			1800
 +
 +/* unit: mV */
 +#define CYAN_SKILLFISH_VDDC_MIN			700
 +#define CYAN_SKILLFISH_VDDC_MAX			1129
 +#define CYAN_SKILLFISH_VDDC_MAGIC			5118 // 0x13fe
 +

恐らくは設定した値が実質最大 GPUクロック、電圧として動作するのだと思われる。
GPUクロックがデフォルトで 1800 MHz、最大で 2000 MHz というのは、AMD Radeon™ RX 5700 XT 50th Anniversary の最大クロックが 1980 MHz であるから、RDNA アーキテクチャ らしいクロックと言えるかもしれない。
RDNA 2 アーキテクチャ では高クロック動作に向けた設計により、同じ消費電力で RDNA アーキテクチャ より 30% 高いクロックを実現している。1

Cyan Skilfish の CPUコア数は 8 か 6 か

最近の AMD APU では、AMD GPU ドライバー側でも CPUコア、CPU L3キャッシュのクロック、温度、消費電力を取得するようになっている。
ドライバーにはそれら読み取った値を格納する変数が用意されている訳だが、そこに使われている配列のサイズから APU のコア数を言わば逆に読み取ることができる。
例えば VanGogh APU (Zen 2 + RDNA 2) であれば以下のように 4コア、L3キャッシュ 1基 (CCX 1基) という CPU構成が、

   //3rd party tools in Windows need info in the case of APUs
   uint16_t CoreFrequency[4];     //[MHz]
   uint16_t CorePower[4];         //[mW]
   uint16_t CoreTemperature[4];   //[centi-Celsius]
   uint16_t L3Frequency[1];       //[MHz]
   uint16_t L3Temperature[1];     //[centi-Celsius]

Renoir APU (Zen 2 + Vega) では 8コア、L3キャッシュ 2基 (CCX 2基) という構成が読み取れる。

   uint16_t CoreFrequency[8];            //[MHz]
   uint16_t CorePower[8];                //[mW]
   uint16_t CoreTemperature[8];          //[centi-Celsius]
   uint16_t L3Frequency[2];              //[MHz]
   uint16_t L3Temperature[2];            //[centi-Celsius]

ちなみに Yellow Carp APU (Zen 3 ? + RDNA 2) では 8コア、L3キャッシュ 1基 (CCX 1基) となっている。2

今回で Cyan Skilfish に対しても同様のコードが追加されたのだが、以前は存在した、8コアであることを示すような記述を削除して、6コアを想定した記述が追加されている。
L3キャッシュは 2基 (CCX 2基) となっているため、Cyan Skilfish APU の CPUアーキテクチャは CCX を 4コアで構成する Zen/+/2 アーキテクチャ だと考えられる。コア数から、各 CCX から 1コアを無効化した 3+3 という設定だろうか。

 +typedef struct SmuMetricsTable_t {
 +	//CPU status
 +	uint16_t CoreFrequency[6];              //[MHz]
 +	uint32_t CorePower[6];                  //[mW]
 +	uint16_t CoreTemperature[6];            //[centi-Celsius]
 +	uint16_t L3Frequency[2];                //[MHz]
 +	uint16_t L3Temperature[2];              //[centi-Celsius]
 +	uint16_t C0Residency[6];                //Percentage
	
 -#define NUMBER_OF_PSTATES		8
 -#define NUMBER_OF_CORES			8

以前は、Cyan Skilfish のディスプレイエンジンがドライバーでサポートされていないこと、CPU 8コアを持つこと、また Cyan Skilfish (gfx1013) がレイトレーシング命令をサポートしていること等から、AMD 4700S Desktop Kit が Cyan Skilfish ではないかと考えた。
公式に発表はされていないが AMD 4700S Desktop Kit はパッケージ、ダイの形状から PS5 SoC の一部、主に GPU を無効化した CPU ではないかと言われており3、PS5 SoC もまた HWレイトレーシングに対応しているため、Cyan Skilfish・AMD 4700S・PS5 で繋がりが生まれる。
HWレイトレーシングをサポートする RDNA APU 「Cyan Skilfish (gfx1013)」 | Coelacanth’s Dream だが Cyan Skilfish が 6コアだとすると、その正体がまた少し戻って曖昧となる。
AMD 4700S 以外に PS5 SoC をベースにしたモデルが存在する 可能性 もある。

それと、AMD 4700S ではアーキテクチャのバックエンド部に変化があるらしく、FPU の性能が他の Zen 2 アーキテクチャ を採用する AMD CPU より低いらしいが、FPUパイプラインのデータ幅がどうなっているか気になる所だ。
Zen系 CPU では FPUパイプラインのデータ幅を示す情報を CPUID 命令を使って読み取れるようになっており、EAXレジスタに 0x8000001A を入れて CPUID 命令を実行し、EAXレジスタに出力された値の bit 2 が 1 であれば FP256 (256-bit) 、bit 0 が 1 であれば FP128 (128-bit) を示す。4
Zen/+ アーキテクチャ では FP128、Zen 2/3 アーキテクチャ であれば FP256 と表示される。
Zen 2 アーキテクチャ を採用する AMD 4700S が FP256 か FP128 のどちらだとしても、他とは部分的に異なる謎の Zen 2? アーキテクチャ であることに変わりはないが。

参考リンク