2026年7月にAMDは「Advancing AI」イベントの中で第6世代EPYCに関する情報をいくつか公開したという話はこちらで説明した通りである。この時もいろいろと新情報はあったのだが、肝心のコアの中身に関してとかL3キャッシュの持ち方などが不明なままであった。
そんな第6世代EPYCであるが、11月10日(現地時間)に技術イベント「AMD in Depth 2026」が開催され、この辺がかなり公開された。こちらも内容が非常に多いので、いくつかに分けてレポートさせていただきたい。1本目はZen 6/6cコアの内部構造である。
CCDは12/32core構成
これまで「c Variant」(つまりZen 4c/Zen 5c)は、Normal(Zen 4/Zen 5)のサブセット的な扱いであった。つまりHigh Density Libraryを利用してコアの面積を縮小すると共に、L3容量を削減(コアあたり4MB→2MB)することで、より多くのコアを実装するという仕組みになっていた。
これに対しZen 6世代ではZen 6/Zen 6c共にL3はコアあたり4MBで統一された(Photo01)。どうやって実装を? という話はまた後でするとして、アーキテクチャそのものもZen 6とZen 6cでは共通であり、なので異なるのは物理実装(利用するライブラリの違いと、L3の配置場所)のみという事になる。
-

Photo01:恐らくZen 6cではL3はSoICを使った3D積層、Zen 6では平面置きになっているものと考えられる。当然Zen 6cの方が高コストなので、RyzenなどへはZen 6コアのみが使われる格好だろうか?(ThreadRipperはあるいはZen 6cの可能性があるかもしれない)
Front End
ではそのアーキテクチャは? ということでパイプライン全体がこちら(Photo02)。後でZen 5との比較も出てくるが、Decodeの幅とかALU/AGUの数などは基本的には変わっていない。
ただ、より高効率に実行できるような構成になっている事が判る。まずFront End(とL1/L2)だが、ここは「基本的には」Zen 5のものと違いが無い(Photo03)。
-

Photo03:でもDispatchそのものは8-wideのままである。可能性としては、2つのThreadのどちらかがStallしていて、もう片方のThreadが稼働状態というケースで、フルにDispatchが稼働できる様にするには9 Op/Cycleが必要だったということだろうか?
「基本的には」と書くのは、特にOp Cacheの持ち方が変わったようだからだ。Zen 5での表記は“6K Inst/Fused Instで6-wide×2”だったがZen 6では“6.75K Ops, 9-Wide”という表現になっている。
つまり以前はx86命令ないしそれをFusedさせたx86命令の派生型が6K分だったのに対し、Zen 6では恐らく変換後のMicro Op(当然Fusedが終わったのものも含む)が6.75K分で、しかも9-wide×2ということで帯域的には最大18 Op/cycleをDispatchに提供できる様になっている。
Zen 5世代でもOp Cacheからは12 Op/cycleでDispatchにMicroOpが供給されていたはずだが、それでは足りなかったという事なのだろう。また分岐予測周りも強化されており、Branch Prediction Queueの大型化やReturn Address Stackの大型化、Branch Prediction Tableの最適化といった項目が並んでいる。
ところでこれはZen 6からではなくZen 5からであるが、Decoderが2 Threadに対応した構成になっている。以前こちらの記事でも書いたが、構造的にはIntelのTremontとかLion Coveとかと同じ仕組みである。これに関して、第6世代EPYCのWhite Paperでは1ページほどを割いてSMTのメリットを説いている(Photo04)が、その中に「SMTはモデルの推論パスを中心に、多数の軽量で部分的に独立したTaskが並行して実行されるエージェント型AI Sandbox環境において特に重要である。こうしたTaskには、Toolの起動、Code Interpreter、検索Agent、ポリシーチェック、Observability Services、APIリクエスト、Simulation Workload、及びすぐ完了できるMicroservicesなどが含まれる。」(SMT is particularly relevant to agentic AI sandbox environments where numerous lightweight and partially independent tasks execute concurrently around the model inference path. Those tasks include tool invocations, code interpreters, retrieval agents, policy checks, observability services, API requests, simulation workloads and short-lived microservices.)という説明がなされている。
x86にSMTが最初に導入されたのはIntelのHyper Threadingであるが、この時は同一のプロセス空間に属する2つ以上のThreadが効率良く処理できる、というのがSMTの最大の売りであった。ところが上に挙げられた項目はいずれも別プロセス空間に属する、異なるプログラムのThreadを1つのコアで同時に実行するという方向であり、こうした用途向けにはFetch→DecodeまでのPathを別々にした方がトータルでの効率が上がる、という判断が下された結果がZen 5以降でのFetch/Decodeの2セット分離であり、また分岐予測もそれぞれのThreadごとに実施する方が効率が上がるという判断になったものと考えられる。この路線をZen 6でも継承した訳だ。
Scheduler&Execution
次がスケジューラと実行ユニットであるが、これが随分変更になった(Photo05)。
Zen 5世代の構造がこちらだが、Zen 5ではALU SchedulerとAGU Schedulerという構成だったのが、Zen 6では12個ある実行ユニットを6グループ(ALU+AGUが×4、ALU+Branchが×2)に分け、それぞれにSchedulerを搭載するという形になっている。
「どうして?」という説明は無いのだが、Zen 5世代はALUが88、AGUが56 entryだったのに対し、Zen 6ではALU+AGUが96、ALUのみが48(なのでALUを対象にするSchedulerは合計144 entry)という事になり、とりあえずScheduler全体としての容量は大幅に増えている。これに併せてRegisterも240 entryから352 entryと5割弱増えており、On-the-Fly状態に置ける命令がかなり増えたことになる。
命令ユニットの数そのものは増えていないから、理論的なピーク性能という意味ではZen 5とZen 6に違いは無いが、実効性能を高めるために随分手を入れた感じに見える。
ちなみにスライドの説明は無かったが、FPU周りも手が入っている。まず一見して判るのがFPU側のSchedulerが32 entry×3から60 entry×3になったこと。ただ不思議なことにVector Registerは384 entryで据え置きになっているのだが、こちらは要するにZen 5の時点で十分多かったので特に強化する必要が無かったという事なのかもしれない。FPUの実行ユニットの数そのものに変更は無いが、内部構造には多少手が入っており(Photo06)、AVX512のFP16のフルサポートや、VNNI-INT8の高速化など、細かい変更がなされている。ただピーク性能そのものはZen 5から変わっていない。
Load/Store & Cache
Load/Storeユニット(Photo07)に関しては、構造はZen 5から大きくは変更が無い。
ただ細かく見ると細かくQueueのサイズが拡張されるといった変更はなされている。Zen 4→Zen 5ではAVX512のスループットが倍増した関係で大幅に強化されたLoad/Storeユニットだが、Zen 5→Zen 6ではスループットに変更が無いので、大きく性能改善を行う必要が無かったと見ることも出来るが。ただPhoto06にもあるが、Loadに関してはZen 5世代は最大2 Load/cycleだったのが、Zen 6だと512bitなら2 Load/cycleだが256bitだと4 Load/cycleになるように変更されるなど、ちょっとした改良は見られる。
キャッシュ周り(Photo08)に関しては、Zen 5のもの(Photo09)と一見変わらない様に見える。
L3 to Memoryが1280 outstanding missesとされているが、4MBのブロックが32個だから、1ブロック辺りで言えば48となる。Zen 5の場合は4MBのブロックが8個で320 in-flight missesとあるから1ブロックあたり40となる計算で、若干in-flight missesの数を増やしたという違いはあるが、他は大きくは変更されていないようだ。もっとも論理的には変わらないにしても物理的な構造は相当違っている気がするが。
Performance
ということで、改めてZen 5/5cとZen 6/6cの特徴の差をまとめたのがこちら(Photo10)。
Zen 6世代はCCXが大胆に拡張されたな、という気がする。Photo11が新しく追加された命令一覧である。まだEAG(The x86 Ecosystem Advisory Group)が標準化したAVX10.1のフルサポートとかChkTag、ACE(The AI Compute Extensions)への対応は行われていない。こうしたものは恐らくZen 7以降になるのだろう。
Photo12が内部バッファ類のエントリ数の変更をまとめたものである。ROBが640に達するあたり、Zen 5から大分実効性能を引き上げるべく手を尽くしたのだな、という事が実感できる。
性能に関しては、システムとしての性能比較は別記事でご紹介するが、平均で言うと20~31%の性能改善が実現したとしている(Photo13)。
最後に3D V-Cacheについて。前回の記事でも触れたように、HPC向けにはEPYC 9006X SP7が提供されるという話で、これは96coreで1152MB L3とある。
コアとしてはZen 6コアベースなので、定格だと合計で384MBのL3ということになる。なので差分の768MBは3D V-Cacheとして搭載される事になる訳だが、その3D V-Cacheの模式図がこちら(Photo14)。
Zen 5世代ではCPUダイの下に3D V-Cacheのダイを搭載する格好だったが、この図を見ると再びCPUダイの上に3D V-Cacheが搭載されているように見えるのがちょっと不思議である。TSMC N2での実装になにか問題があったのかもしれない。











