Coelacanth's Dream

他 RDNA 2 GPU とは対応コーデックが異なる Yellow Carp APU と Beige Goby GPU

RDNA 2 アーキテクチャ を採用し、マルチメディアエンジンには VCN 3.0 を搭載する Yellow Carp APUBeige Goby GPU だが、最近になって Linux Kernel における AMD GPU ドライバーに投稿されたパッチはそれら APU/GPU が、同じく VCN 3.0 を搭載する他 RDNA 2 APU/GPU から一部機能が削られていることを示している。

Index

AV1 等、一部コーデックのデコード機能が削られている Yellow Carp

Yellow Carp APU は、オープンソースドライバー上では VanGogh APU の次に登場した RDNA 2 APU だが、マルチメディアエンジンが対応するコーデックは VanGogh よりも少ない。

下引用部は、Sienna CichlidYellow Carp がハードウェアデコードに対応するコーデックを示したドライバー中のコード部。
Yellow Carp では、RDNA 2 アーキテクチャ の特徴としてアピールされていた AV1 HWデコードをサポートせず1、それ以外にも MPEG2・MPEG4・VC1 がサポートされていない。

Sienna Cichlid (sc_video_codecs_decode_array)
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG2, 4096, 4906, 3)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4, 4096, 4906, 5)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VC1, 4096, 4906, 4)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_AV1, 8192, 4352, 0)},
 +/* Yellow Carp*/
 +static const struct amdgpu_video_codec_info yc_video_codecs_decode_array[] = {
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)},
 +	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_JPEG, 4096, 4096, 0)},
 +};

これにより Yellow Carp は 8Kサイズの HWデコードには対応するが、対応コーデックの幅は前世代の Renoir/Lucienne/Cezanne (Green Sardine) APU 2 よりも狭まることとなる。
だがそれら MPEG2・MPEG4・VC1 コーデックは現在ではほとんど使われておらず、H.264/MPEG-4 AVC・H.265/HEVC・VP9 といった広く普及し、主流となっているコーデックの対応は残されている。一部コーデックの削除は、活用する機会が少ない無駄な固定機能を省き、ダイサイズを最適化するため行ったのかもしれない。

ただ、普及しつつある AV1 HWデコードを省いたのは少し疑問に思え、またそれ以上に惜しいと感じる部分だ。 Intel Gen12 GPUアーキテクチャを採用する Tiger LakeRocket LakeAlder Lake は AV1 HWデコードに対応しているため、それらと Yellow Carp を比較した時、弱点になるとも言える。
Intel Gen12 GPU は AV1コーデックのHWデコードをサポート | Coelacanth’s Dream

また、VanGogh が GPU L2キャッシュ 1MiB を持つのに対し、Yellow Carp はその倍のサイズ、2MiB を持つとされている。
このことから Yellow Carp は、VanGogh よりも大きい規模のメモリインターフェイス、GPUコアを持つ可能性が考えられるが、その一方でマルチメディアエンジン部は VanGogh のが どれだけそのコーデックが使われているかはともかく 多機能だということになる。コード中では、VanGoghSienna Cichlid と同じコーデックに対応するとしている。
RDNA 2 APU 「Yellow Carp」 をサポートするパッチが Linux Kernel に投稿される ―― DCN3.1 / VanGogh より大きいキャッシュ | Coelacanth’s Dream 設計時期、設計に掛けられる期間によるものか、あるいは実装コストか、AV1 HWデコードを削ってその分を GPUコア部に割いた方が有益と判断したか。

可能性をただただ並べても仕方ないが、オープンソースドライバーでは将来の GPU をサポートするためのパッチが公開されている分、今後変更されることがある、ということだけは留意したい。

エンコード機能を持たず、デコード機能も一部削られている Beige Goby

Beige Goby が HWエンコード機能を持たないことは、AMD GPUドライバーにサポートを追加する最初のパッチで既に示されていたが、HWデコードに関しても、Yellow Carp 同様 MPEG2・MPEG4・VC1 コーデック、それと JPEG にも対応しないことが明かされた。
新たな RDNA 2 GPU、「Beige Goby」 をサポートするパッチが投稿される | Coelacanth’s Dream

対応コーデックの削減については、上記 Yellow Carp と同じ理由しか自分には思い付かないため省略する。

Yellow Carp とは異なり、JPEG HWデコードのサポートも外されていることは、Renoir APUNavi1x GPU に搭載されている前世代の VCN 2.0 から、IPブロックを VCN と JPEGデコーダーとで分けられたため、JPEGデコーダーを省いた構成は以前から想定していたのではないかと思われる。
省いたこと自体からは、Beige Goby が dGPU としては切り詰めた構成を採っている、という印象を受ける。

 /* Beige Goby*/
 static const struct amdgpu_video_codec_info bg_video_codecs_decode_array[] = {
 	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_MPEG4_AVC, 4096, 4906, 52)},
 	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_HEVC, 8192, 4352, 186)},
 	{codec_info_build(AMDGPU_INFO_VIDEO_CAPS_CODEC_IDX_VP9, 8192, 4352, 0)},
 };

Sienna Cichlid/Navi21Navy Flounder/Navi22Dimgrey Cavefish/Navi23Beige GobyVanGogh APUYellow Carp APU ――、オープンソースドライバーに RDNA 2 アーキテクチャ を採用する GPU/APU のサポートが増えるにつれ、規模以外で他とは異なる部分が見えてきた。
Yellow Carp APU は他よりも進んだ DCN 3.1 を採用し、そして Yellow CarpBeige Goby のマルチメディアエンジンは一部機能が削られている。
一方で LLVM にも GFX10.3/gfx103x のサポートが追加されてきているが、現時点で ISA、機能が削られているもの 特にハードウェアレイトレーシングに関する命令等 は見当たらない。
こうした違いからは、GPUコア部のアーキテクチャを統一し、シェーダーコンパイラー等において性能最適化に関わる部分は変えず、代わりにマルチメディアエンジンやディスプレイエンジンといった固定機能部を変更することでターゲット帯に合わせて最適化するという方針が見えてくる。
これまで通り GPUコア部の規模の変更に加えて固定機能部を変更することで、省電力機能、ダイサイズといった面でより進んだ最適化が可能になると考えられる。

VCN 3.0

VCN 3.0
(D = Decode, E = Encode)
Sienna Cichlid,
Navy Flounder,
Dimgrey Cavefish,
VanGogh
Beige Goby Yellow Carp
MPEG2 D - -
MPEG4 D - -
VC1 D - -
MPEG4 AVC D/E D D/E
HEVC D/E D D/E
VP9 D D D
JPEG D - D
AV1 D - -

参考リンク