Coelacanth's Dream

AMD Picassoベースの Dali APU が存在するらしい?

Zen APUにまつわるややこしい仕様、特に PicassoRaven2 にはこれまでに何回か触れてきたけど、自分がそれを把握しているという自信が揺らいできたし、そもそも正しく把握できている人がいるのか不安になってきた。
それでも、Dali については一応以下を参照してほしい。
AMD Dali APU Database | Coelacanth’s Dream

きっかけは Coreboot へのあるパッチとそれに付随するメッセージだ。
soc/amd/picasso/soc_util: rework reduced I/O chip detection (I9eb57595) · Gerrit Code Review soc/amd/picasso/soc_util: add comment on the silicon and soc types (I71704ab2) · Gerrit Code Review

Index

Picasso シリコンをベースにした Dali ?

パッチの中身としては、上が、RV2 (Raven2) シリコンをベースとする DaliPollockRaven /Picasso から外部 I/O の規模が減らされているため、それを検出するコードとなり、
下がそのパッチの補足メッセージをさらに補足して、ソースコード内にコメントとして記述するというもの。

で、問題がメッセージの内容で、
まず RV2 (Raven2) シリコンは RV (Raven) / PCO (Picasso) から PCIE、USB3、Displayport が減らされている、と述べており、これは過去これまでの情報と一致する。

  /*
  * The Zen/Zen+ based APUs can be RV (sometimes called RV1), PCO or RV2 silicon. RV2 has less
  * PCIe, USB3 and Displayport connectivity than RV(1) or PCO. A Picasso SoC is always PCO
  * silicon, a Dali SoC can either be RV2 or fused-down PCO silicon that has the same
  * connectivity as the RV2 one and Pollock is always RV2 silicon. Picasso and Dali are in a FP5
  * package while Pollock is in the smaller FT5 package.
  */

引用元: soc/amd/picasso/soc_util: add comment on the silicon and soc types (I71704ab2) · Gerrit Code Review

そして Picasso は常に PCO シリコンをベースとする。ここに疑問は特に無い。
だがその後が一番問題で、DaliRV2 シリコンか、外部 I/O の規模を RV2 同等までに減らした PCO シリコンになるとしている。

問題と考えるのは、自分はこれまで、Dali はすべて RV2 シリコンをベースとするものの、一部は CPUID を Picasso と共用し、x86_ModelPicasso と同じ 18h になるため、ソフトウェアからは Picasso と認識される、と考えていたが、
それだけでなく、ベースとするシリコン自体が PCO シリコンであるものもある、と述べられているからだ。
この場合 Dali には最大 3種類あることとなり、シリコン/CPUID の形で記述すると、RV2/RV2RV2/PCOPCO/PCO になる。

PollockRV2 シリコンのみをベースとし、パッケージには FT5パッケージを使うこと、
PicassoDali は FP5パッケージを使う、ということに問題、疑問は特に浮かばない。

疑問と考察

まず、PicassoRaven2 の違いには、CPU、GPU、I/O(PCIe/USB/Display) の規模があり。Raven2 の方が小さい。
次に製造プロセスの違いがあり、Picasso は 12nmプロセス、Raven2 は 14nmプロセスとなる。
そして、GPUのアーキテクチャが微妙に異なり、Raven2 GPU の gfx909 は、Raven /Picasso GPU の gfx902 に存在したバグを修正したものとなる。

Picasso Raven2
CPU
 Max CPU Core/Thread 4/8 2/4
 Max CPU L3cache 4MB 4MB
GPU gfx902 gfx909
 Max GPU CU 11CU 3CU
 Max GPU RB 2
(8ROP)
1
(4ROP)
 Max GPU L2cache 1024KB 512KB
Process 12nm 14nm

Dali (RV2/PCO) ≠ Dali (PCO/PCO) ?

表面上 Dali とされるが、内部で CPUID と x86_Model は Picasso となるプロセッサには、Athlon Silver 3050UAthlon Gold 3150URyzen 3 3250U が確認されているが、
それらは AMD公式の仕様ページに CMOS: 14nm とあるため1RV2 シリコンであると思われる。

そのため、CPUID、x86_Model が Picasso だからといって、シリコンも PCO になるとは限らないと言える。

OPN で異なる?

考えられるのは OPN(Ordering Part Number) でベースとなるシリコンが異なる可能性だ。

最近そのコスパから話題となった Ryzen 5 1600 (AF) は、Ryzen 1000シリーズ(Summit Ridge) でありながら、シリコンは Ryzen 2000シリーズ(Pinnacle Ridge) と同一のものだった。
それと同様に、今後 Dali APU製品を一時的に PCO シリコンをベースとして提供する予定がある、もしくは既に一部で行なっているのかもしれない。

問題

そうした場合に考えられる問題がいくつかある。

Ryzen 5 1600 (AF) は、Pinnacle Ridge の CPU、I/O 規模が Summit Ridge と同じであったから特に問題は発生しなかった。
対応するマイクロコードは異なるが、Pinnacle Ridge のみをピンポイントでサポートしていない UEFI(BIOS) というのは考えにくいし、実際あったという話も聞かない。
しかし、PCO シリコンと RV2 シリコンでは CPU、GPU、I/O の規模が違う。
結果、判定部分のコードがさらに複雑となっている。
コードを読むと、is_mystery_silicon 関数を呼び、その先でシリコンのタイプを取得して判定を行なっている。
関数名からどこか投げやりなものを感じるのは自分だけだろうか。

GPUアーキテクチャの違いに関しては、バグ修正くらいであるため、問題ないと考えているのかもしれない。
gfx909 も LLVM のバージョンが古い場合は、 gfx902 として判定されるようになっていた。

PCO シリコンは RV2 シリコンよりシリコンダイのサイズが大きいため、同様のコア、クロック設定で動作させた場合、PCO シリコンの方が冷却が容易となる、
といった利点のようなものが存在しなくもない。

ただ、最も懸念されるのは、OPNで違うとして、その情報が早くに公開されるかどうかだ。
わずかでも、実質的に同じでも、違いはやはり違いであり、区別できた方が良い。

コードネームの元ネタである サルバドール・ダリ は数々のエピソード(奇行)を残しているが、もしかしたらそれが由来になったんじゃないか、なんて考えに及んでいたりする。
さすがにこれ以上複雑にならないことを願う。
Dali というコードネームから簡潔に説明できないのでは、コードネームの意義が揺らいでしまう。