Coelacanth's Dream

VanGogh APU のマーケティングネームは「AMD Custom GPU 0405」

AMD のソフトウェアエンジニア Alex Deucher 氏により、libdrm に新たな AMD GPU/APU のマーケティングネームを追加するパッチ(マージリクエスト) が公開された。
そしてその中に DeviceID: 0x163F, RevisionID: 0xAE、マーケティングネーム AMD Custom GPU 0405 という異質なものがある。

 +163F,	AE,	AMD Custom GPU 0405

名前こそ異質だが、0x163F, 0xAE に該当する AMD APU は既に姿を現しており、2021/03 頃に公開された VanGogh APU のブートログに登場していた。
下引用部は initializing kernel modesetting の後、AMDGPU ASIC NAME, VendorID, DeviceID, SubSystem VendorID, SubSystem DeviceID, RevisionID の順番で表示されている。1
AMD VanGogh APU ブートログ | Coelacanth’s Dream

   [   99.930720] [drm] initializing kernel modesetting (VANGOGH 0x1002:0x163F 0x1002:0x0123 0xAE).

VanGogh APU と Steam Deck

Hot Chips 33 では、VanGogh APU と Steam Deck についてはノーコメントとされたらしいが2、多くの人が考えているように、自分も Steam Deck に採用されている APU が VanGogh だと考えている。

Steam Deck に採用されているカスタム APU は 4-Core/8-Thread、2.4-3.5 GHz の範囲で動作するがこれは上記ブートログのスペックと同じだ。
AMD Eng Sample において、プロセッサ名の末尾 35/24_N はベースクロック 2.4GHz、ブーストクロック 3.5GHz であることを示す。

   [    0.353153] smpboot: CPU0: AMD Eng Sample: 100-000000405-03_35/24_N (family: 0x17, model: 0x90, stepping: 0x1)

また Steam Deck のカスタム APU は GPU に RDNA 2 アーキテクチャ を採用し、CU 8基 (WGP 4基) という規模を取っている。
VanGogh のキャッシュ情報と ShaderEngine の構成は、以前投稿されたパッチである程度明かされていたが、それによると VanGogh は ShaderEngine あたり CU 8基の構成を取る。
AMD GPU のキャッシュ構成情報 ―― Dimgrey Cavefish / Aldebaran / VanGogh | Coelacanth’s Dream となると、VanGogh APU の GPU部は全体 SE (ShaderEngine) 1基、SE あたりの SA (ShaderArray) も 1基、SA あたりの CU数は 8基 (WGP 4基) とされる。
RDNA/2 アーキテクチャ では VanGogh APU 以外、SE あたりの SA 2基という構成を取っており、VanGogh はそこから外れた珍しい構成となる。
SA 1基のみとすることで GL1データキャッシュも 1基となり、キャッシュは減るがダイサイズを小さくすることができる。
VanGogh APU は CPU部も Zen 2 アーキテクチャ 4コアと、CCX 1基という構成であり、CPU, GPU 共にコンパクトな設計となっている。

   +static struct kfd_gpu_cache_info vangogh_cache_info[] = {
   +	{
   +		/* TCP L1 Cache per CU */
   +		.cache_size = 16,
   +		.cache_level = 1,
   +		.flags = (CRAT_CACHE_FLAGS_ENABLED |
   +				CRAT_CACHE_FLAGS_DATA_CACHE |
   +				CRAT_CACHE_FLAGS_SIMD_CACHE),
   +		.num_cu_shared = 1,
   +	},
   +	{
   +		/* Scalar L1 Instruction Cache per SQC */
   +		.cache_size = 32,
   +		.cache_level = 1,
   +		.flags = (CRAT_CACHE_FLAGS_ENABLED |
   +				CRAT_CACHE_FLAGS_INST_CACHE |
   +				CRAT_CACHE_FLAGS_SIMD_CACHE),
   +		.num_cu_shared = 2,
   +	},
   +	{
   +		/* Scalar L1 Data Cache per SQC */
   +		.cache_size = 16,
   +		.cache_level = 1,
   +		.flags = (CRAT_CACHE_FLAGS_ENABLED |
   +				CRAT_CACHE_FLAGS_DATA_CACHE |
   +				CRAT_CACHE_FLAGS_SIMD_CACHE),
   +		.num_cu_shared = 2,
   +	},
   +	{
   +		/* GL1 Data Cache per SA */
   +		.cache_size = 128,
   +		.cache_level = 1,
   +		.flags = (CRAT_CACHE_FLAGS_ENABLED |
   +				CRAT_CACHE_FLAGS_DATA_CACHE |
   +				CRAT_CACHE_FLAGS_SIMD_CACHE),
   +		.num_cu_shared = 8,
   +	},
   +	{
   +		/* L2 Data Cache per GPU (Total Tex Cache) */
   +		.cache_size = 1024,
   +		.cache_level = 2,
   +		.flags = (CRAT_CACHE_FLAGS_ENABLED |
   +				CRAT_CACHE_FLAGS_DATA_CACHE |
   +				CRAT_CACHE_FLAGS_SIMD_CACHE),
   +		.num_cu_shared = 8,
   +	},
   +};

で、Steam Deck のカスタム APU を VanGogh APU とすると、自分はメモリ構成に関して読み間違えていたことになる。
自分はブートログから、VanGogh APU を LPDDR5 64-bit (4x 16-bit) だと考えていたが、Steam Deck のハードウェアスペックには LPDDR5 128-bit (4x 32-bit) と記載されている。
LPDDR5、クアッドチャネルだというところまでは合っていたが、チャネルあたりのバス幅は間違っていた。
ブートログはメモリサイズ 8GB、Steam Deck は 16GB となっているが、チャネル数は同じであるため、メモリチップあたりの容量違いではないかと思われる。
RAM width 256bits DDR5 という表示が間違っていた所は合っていて安心はしたが、不完全だったのは気恥ずかしい。