ニュース
新世代CPUアーキテクチャ「Zen 5」完全解説。Ryzen 9000シリーズはどのように進化したのか[西川善司の3DGE]
当初のラインナップとして発表となったのは,以下に示す4製品だ。
AMDは,2022年に投入した「Zen 4」マイクロアーキテクチャ世代のRyzen 7000シリーズから,デスクトップPC向けCPUは「Socket AM5」(以下,AM5)プラットフォームに移行しているが,今回のRyzen 9000シリーズも,引き続きAM5向けとなっている。なお,AMDは,AM5プラットフォームを2027年以降までサポートすることを確約している。
本稿では,米国で行われた技術説明会の内容をもとに,Zen 5マイクロアーキテクチャの解説と,Ryzen 9000シリーズの注目ポイントを紹介していこう。
最上位モデルは16コア32スレッド据え置き
まずは,Ryzen 9000シリーズの概要から見ていく。
Ryzen 9000シリーズは,最上位モデルの「Ryzen 9 9950X」が16コア32スレッドで,それに続く「Ryzen 9 9900X」が12コア24スレッドといった具合に,「型番の下3桁とコア数/スレッド数」の組み合わせ自体は,「Zen 3」世代のRyzen 5000シリーズから変わっていない。
クライアントPC向けCPUは今のところ,最大16コア32スレッドで十分という判断なのだとは思う。
ちなみに,サーバー用CPUの「EPYC」シリーズでは,Zen 3世代の64コア128スレッドが,Zen 4世代では96コア192スレッドになり,Zen 5世代では128コア256スレッドまで増えるという。それに比べると,やや寂しい気もする。
たしかに,16コア32スレッドのRyzen
なお,Zen 4と同様にZen 5も,CPUコアそのものを集約させた「CPU Complex Die」(以下,CCD)と,入出力プロセッサの「I/O Die」(以下,I/Oダイ)をCPUパッケージ上に実装する「チップレットアーキテクチャ」を採用している。Ryzen 9系はCCDを2基とI/Oダイ 1基をパッケージに載せており,Ryzen 7/5系以下はCCDとI/Oダイを1基ずつパッケージ化したCPUとなっている。
ちなみに,各ダイを製造しているTSMCにも,「SoIC」(System on Integrated Chips)のような2.5D,あるいは3Dパッケージング技術のメニューは存在する。だが,AMDがこれを採用しなかったのは,少なくともZen 5では,従来のチップレットアーキテクチャで必要十分であると考えたのだろうし,製造コスト的に成熟した方法が最適だ,と判断した可能性も高い。
話を戻すと,Ryzen 9000シリーズのCCDは,製造プロセスとしてTSMCの「N4X」(4nm)を採用している。Ryzen 7000シリーズのCCDは,TSMCのN5(5nm)であった。TSMCのN4Xは,「改良型5nm」とも呼ばれているので,5nmベースのZen 4から,動作特性面で大きなジャンプとはならかった。しかし,低電圧での高クロック動作とTDP削減といった堅実な改良は実現できたと見てよかろう。各ダイのサイズや総トランジスタ数は,公表されていない。
なおZen 5は,3nmプロセスでの物理設計版も存在するとのことだが,これはEPYC用と思われる。
一方のI/Oダイは,今回もTSMCの「N6」(6nm)で製造されている。I/Oダイには,今回もGPUが内蔵されているが,こちらはZen 4世代の内蔵GPUから変更なし。RDNA 2世代のCompute Unite(CU)を2基用いたGPUで,Windowsの画面を映せる程度の性能しかない。理論性能値は,2.2GHz駆動時で0.563 TFLOPS。ビデオプロセッサとしてはH.265/H.264エンコーダ/デコーダを備えるが,AV1についてはデコーダのみを搭載する。
Ryzen 9000シリーズは,1ランク上のCoreプロセッサと同等以上の性能を発揮する
今回のZen 5に対して筆者は,「想像していたよりも,大がかりなアーキテクチャ面での改良が行われている」と感じた。では,どの程度の性能向上が期待できるのか。
次のスライドは,AMDが公開したIntelの第14世代Coreプロセッサの32スレッド,28スレッド,14スレッドモデルと,Ryzen 9000シリーズの24スレッド,16スレッド,12スレッドモデルの非対称な性能テストを行った結果である。
この結果は,いわゆる,「同クラス比較テスト」の結果アピールではない。
AMDとしては「Ryzen 9000シリーズは,たとえコア数,スレッド数が少ない1ランク下のモデルであっても,コア数,スレッド数の多い第14世代Coreシリーズに勝てる」というアピールをしたいのだろう。
最近,GPUでの性能勝負においてAMDは,NVIDIAの最上位ランクとの比較を避け,1ランク下のNVIDIA GPUと非対称な性能比較をやってきた。しかしCPUという戦場において,AMDは強気なのである。
では,「そうした高性能ぶり」がどこから出てくるのかについて,細かく見ていこう。
分岐予測機能を強化。ピークIPC強化のために発行部も強化
まずは,CPUコアのフロントエンド部分から見ていく。
Zen 5のL1命令キャッシュ(I-Cache)は,容量32KBのままで,Zen 4からの変更はない。8wayセットアソシエイティブ方式であるところも同じだ。
ただ,キャッシュへのアクセスが,32byte×2,すなわち2ウェイ分のアクセスを1回で行えるようになった。これはシンプルに,命令キャッシュへのアクセス帯域がZen 4の2倍であり,命令キャッシュアクセスによる遅延を劇的に減らすことが可能になる。
Zen 5では,分岐予測(Branch Prediction)も改良された。ここはZen 5における重要な改良部分ともいえるので,Zenシリーズにおける分岐予測機能の進化を軽く振り返ってみよう。
CPUにおける分岐予測の最も基本的なアルゴリズムは,システム全体の分岐履歴データである「Global History Register」(GHR)と,特定アドレスにおける分岐履歴データ「Branch History Register」(BHR)を参照して,これらの情報をヒストグラム的な管理機構で制御するというものだ。
第1世代のZenシリーズ(ZenとZen+)では,分岐命令実行時において,その分岐命令のアドレスとBHRとGHRの相関情報から分岐先を予測して,予測結果の「当たりや外れ」を学習データとしてフィートバックさせながら,予測精度を上げていく。仕組みとしては,超シンプルな単層式ニューラルネットワーク型分岐予測アルゴリズムである「パーセプトロン型分岐予測」である。
続く「Zen 2」シリーズでは,パーセプトロン型分岐予測に加えて,一段先進的な「TAGE」(テイジと発音)こと,「TAgged GEometric History Length」(タグ付き幾何履歴長)分岐予測器も採用している。
TAGEでは,GHR的なグローバル分岐履歴情報を複数階層的に持ち,それぞれの階層が管理する分岐履歴の統計時間範囲を,幾何数列(Geometric Sequence)的に設定することから,その名称にGeometricが入っている。
「幾何数列とはなんぞや?」という問いに,ごく簡単に答えると,ようするに「等比数列」のことである。たとえば,「公比:2」であれば,階層が1段深い場合には,分岐履歴の統計時間範囲を「2」倍ずつ広げるように設定していくわけである。
次の2-Aheadとは,分岐命令のひとつ先の命令だけでなく,2つ先の命令についてもフェッチと投機実行(予測的な実行)を行うことを意味する。
もし,分岐命令が「条件分岐命令」だった場合は,先述した分岐予測メカニズムを実行して「分岐するか否か」を推測して,その推測に従って投機実行を行う。2-Aheadの場合,分岐予測が外れたとしても,すでにあらかじめフェッチした命令が実行待ち状態にあるため,パイプラインの修正と再開に起因する遅延を最小限にできる利点がある。
さて,x86系CPUでは,パイプラインの実行効率やアウトオブオーダー(命令実行順の並び替え)を行いやすいように,x86命令コードをRISC調の最小単位命令(Micro-Ops,UOP)に分解して実行するのが常である。そして,Micro-Opsの一塊(Macro-Ops)をキャッシュするのが,フロントエンドの「Op Cache」だ。
OP Cacheの容量は6KiBで,「6-wide×2」という記述もある。これはつまり,Zen 5のOP Cacheは「1クロックあたりに6つのMicro-Ops(6-wide)を同時並列に出し入れできるOP Cache」を2つ(デュアル構造)持っていることを意味する。もっと分かりやすく言うなら,「Micro-Op Queue」(図のUOPQ)に対して,1クロック当たり最大12個のMacro-Opsを出力できるということだ。Zen 4では,これが9個だったので,約1.33倍に増えたわけだ。
x86命令をMicro-Opsにデコードする「デコーダ」も,Zen 5では,「4-wide×2」となっている。「1クロック当たり,x86命令を4つ同時にデコードできるデコーダ」をデュアル構造で持つわけで,つまり8命令同時デコードが可能である。Zen 4では,これが4命令同時だったので,2倍にパワーアップしたと言えよう。
「Micro-Op Queue」は「発行を待つMicro-Opsの待機所」的なところだ。ここから適宜,命令発行部(Dispatch)を介して,実際の命令実行部へと進んでいく。フロントエンド部では,Dispatchに「8-wide」とあるように,Micro-Opsの同時発行数は8つだ。Zen 3〜Zen 4では同時発行数が最大6つだったので,大幅強化となった。
「もっと早く,Dispatch数を8に強化すればよかったのに」と言いたくなるRyzenファンもいそうだが,言うほど簡単なことではない。6から8に増やしてまともに動かすために,ここまで解説してきたようにフロントエンドを強化して,続く実行部も強化する必要があるのだ。
アウトオブオーダー実行効率が劇的に強化された整数演算命令実行部
というわけで,Zen 5の実行部から,まずは整数演算命令の実行部を見ていこう。
フロントエンド部から,同時に最大8命令の発行が行われると,整数演算命令の実行部は,アウトオブオーダー実行の処理を含めた命令実行のスケジューリングを行うことになる。
アウトオブオーダー実行の処理フェーズ「Integer Rename,8-wide」には,フロントエンドのDispatchから発行された8命令を,1クロックでそのまま投入できる。Zen 4では,発行された6命令のうち,アウトオブオーダー実行の処理フェーズには,1クロックで4命令しか投入できなかった。残りの2命令は,次のサイクルを待つしかない(※2命令が浮動小数点演算命令であれば,浮動小数点演算命令実行部に投入できる)。
Zen 4発表時に,AMDはそう言わなかったが,筆者は「ここがボトルネックになっている」と感じていた。だからZen 4解説記事では,「Zen 4はZen 3のシンプルな改良版に相当する」と結論づけていたのである。
なお,Zenシリーズでは,アウトオブオーダー実行時は,順不同に実行した演算結果を「リオーダーバッファ」(AMDでは「Instruction Retire Queue」と呼ぶ)へと一時的に保存する。保存可能な最大命令数は,Zen 3が256命令分で,Zen 4は320命令分であったが,Zen 5では,なんと448命令にまで増えている。実に1.4倍だ。
リオーダーバッファの増量が何をもたらすかといえば,順不同の実行を,ここまで多くの命令数に対して行えるようになる。これは「Simultaneous Multi-Threading」(SMT,IntelではHyper Threading)有効時の性能向上も,相当に期待できそうである。
Zen 5における整数演算命令実行部の構成は,以下のとおり。
●Zen 5の整数演算命令実行部
- 乗算器対応の整数演算器(ALU/MUL)×3基
- 条件分岐対応の整数演算器(ALU/BR)×3基
- アドレス生成演算器(AGU)×4基
参考までに,Zen 4/3の整数演算命令実行部はこちら。
●Zen 4/3の整数演算命令実行部
- 乗算器対応の整数演算器(ALU/MUL)×3基
- 条件分岐対応の整数演算器(ALU/BR)×1基
- 条件分岐命令(BR)×1基
- アドレス生成演算器(AGU)×3基
Zen 5では,アドレス生成演算器(AGU)が1基増えている。AGUは地味だが,処理系としては複雑だ。というのも,今どきのCPUは,物理アドレスを確定するためには,仮想アドレスからページテーブルを参照するといった変換が必須だし,オフセット参照でも,インデックスレジスタとスケールファクタに配慮する必要がある。
Papermaster氏は「Zen 5では,分岐命令の実行効率の強化が重要なテーマになっていた」ことを強調していたが,実際,分岐命令実行部の増量だけでなく,AGU増量にまで改良が及んでいるところに,そのこだわりを感じる。
512bitネイティブ化された浮動小数点演算命令実行部
続いては,浮動小数点(Floating Point)演算命令実行部を見ていこう。
Zen 5のNSQは,96エントリー,つまり96個分のロード/ストア命令のアウトオブオーダー処理を管理できることを意味する。ちなみに,96エントリー仕様のNSQ搭載は,Zen 4と変わらない。ただ,Zen 4以前のブロック図では,NSQは「Load/Store Queue」と呼ばれていて,L1データキャッシュやL2キャッシュのマスの近くに描かれていた。そのため,Zen 5でのレイアウト変更に,驚いた人がいるかもしれない。かくいう筆者がそうである。
次の「Vector Rename,6-wide」は,浮動小数点演算命令のアウトオブオーダー実行管理を行う機能部だ。フロントエンド部のDispatchから発行された8命令の中に浮動小数点演算命令があれば,最大6命令までをアウトオブオーダー実行に向けたスケジューリングに回せる。ここもZen 4から変っていない。
Zen 4と異なるのは,アウトオブオーダー実行のためのスケジューラ構成だ。Zen 4では,48エントリーを管理するスケジューラを2基搭載していたが,Zen 5では,32エントリーを管理するスケジューラ(Sch,32-entry)を3基搭載している。
Zen 5における浮動小数点演算命令実行部で,最大の改良ポイントはベクトルレジスタ長が512bitへと倍増した点にある。Papermaster氏によれば,実行部の内部データバスも512bit幅に拡張されたそうで,「AVX-512」系の拡張命令において,512bitレジスタに対して1クロックでアクセス可能となった。Zen 4では,AVX-512命令に対応したものの,レジスタ長は256bitのままだったので,512bitデータを扱う場合には,256bit長のレジスタを2セット使っていたのだ。
昨今のIntelは,クライアントPC向けCPUにおいては,AVX-512命令へのサポートに消極的な姿勢だが,AMDは逆に力を入れてきている格好だ。これに関連してPapermaster氏は,AVX-512命令の実行について,「最大レジスタ長を256bitで管理するZen 4と,同等の動作モードも選択できる」という興味深い発言をしていた。
このモードでは,シンプルにレジスタのリネームエントリー数の上限が2倍に広がる(≒使えるレジスタ数が増える)ので,アウトオブオーダー実行の効率が向上すると期待できる。今後,AVX-512命令の活用が広がらなかった場合,Zen 4と同じ256bit長の動作モードが,意味を成してくるかもしれない。
一方,Papermaster氏は,Zen 5の内部データバスの512bit化によって,「ロード/ストア命令の実効性能が劇的に上がった」とも述べていた。これは筆者の想像だが,内部データバスの512bit化は,AVX-512命令にネイティブ対応することが主目的ではなく,ロード/ストア命令の高速化が主目的だったのではないかと考えている。
さて,Zen 5における浮動小数点演算命令の実行部は,以下のような構成になっている。
●Zen 5の浮動小数点演算命令実行部
- 乗算器付き浮動小数点演算器(FMUL/FMA)×2基
- 浮動小数点加算器(FADD)×2
- ロード/ストア命令(StD/IntD)×2基
構成自体はZen 4/3とほぼ同じだが,各実行ユニットは,少し強化されている。
まず,浮動小数点の加算器のスループットが,3クロック/サイクルだったものが2クロック/サイクルへと短くなった。また,Zen 4/3では,2基あるロード/ストア命令実行部のうち,「浮動小数点→整数」の型変換に対応した実行ユニットは1つだけだった。それがZen 5では,2基とも型変換に対応している。
増量と高速化を施したキャッシュサブシステム
Zen 5におけるキャッシュサブシステムを見ていこう。
Zen 4では,容量32KBで8-Wayセットアソシエイティブ構成であったL1データキャッシュが,Zen 5では12-Wayセットアソシエイティブ構成で容量48KBとなった。容量は1.5倍に増量されたわけだ。なお,キャッシュラインは64byteのこと。「48KB÷64byte」なので,総エントリー数は768となる。
12-Wayセットアソシエイティブ構成では,あるアドレスのデータがキャッシュに存在する場合,そのデータは12個の異なる場所のどれかに格納されている(可能性がある)ということになる。つまり「768エントリ÷12-Way=64セット」となり,64セットに12個ずつのエントリがある計算だ。こうなると,アクセス対象のアドレスが確定しても,そのアドレスのデータがL1データキャッシュに存在するかの判定が,より複雑となってしまいそうに思える。L1データキャッシュは,単純に容量を増やしても遅延も大きくなるので,キャッシュヒット時の恩恵が薄まってしまうのである。
この問題について,Papermaster氏は「L1データキャッシュを48KBの1.5倍に増量したうえで,L1データキャッシュからの読み出しを4クロックで終了させることに成功した」とアピールしている。つまり,「L1データキャッシュが1.5倍に増えても,性能面にマイナスはない」というわけだ。
その実現には,いくつかの新技術が持ち込まれている。ひとつは,先にも述べた内部データバスの512bit化による帯域幅向上だ。
2つめは,L1データキャッシュへのプリフェッチアルゴリズムを刷新したことにある。ロード/ストア命令の発行などに起因して,メモリアクセスの発生を予測できる場合,そのアクセスパターンも予測して,事前にキャッシュから読み込みを先行させるのだ。
Papermaster氏によると,メモリアクセスパターンの予測には「ストライドパターン認識」(Stride Pattern Recognition)という技術が用いられているとのこと。
こうした工夫の結果,Zen 5のL1データキャッシュは,1サイクル当たり4件のロード(読み出し)と2件のライト(書き込み)の発行が可能となっているという。もちろん,予測プリフェッチが「誤り」の場合もあるので,常にベストケースで動作できるわけではないが,かなり高度なキャッシュシステムと言えよう。
なお,先述したように,L1データキャッシュのキャッシュラインサイズは64byte=512bitである。これが,512bit長になったレジスタサイズと一致するのは,もちろん偶然ではなく意図的なものだ。Papermaster氏は,「こうしたキャッシュシステムの劇的な改善は,結果的に,Zen 5における浮動小数点演算命令の実効性能を押し上げた」と述べている。
一方,L2キャッシュメモリの容量は,Zen 4と同じ1MBである。ただ,Zen 4の8-wayセットアソシエイティブ構成から,2倍の16-wayセットアソシエイティブ構成になったのが変更点だ。Way数の倍化は,同一セット内におけるエントリー数の増加につながるので,キャッシュヒット率の向上やキャッシュ競合の減少(≒キャッシュの入れ替えが減る)を狙うときに行う改良の一種である。
ただし,メリットとの引き換えに,キャッシュ検索の時間が増大する(≒遅延の増加)というデメリットが発生する。それでも今回,Way数倍化チューニングを採用したのは,おそらく,先述した新プリフェッチ技術によって,遅延を隠蔽できると考えたから,と筆者は推測している。
なお,Papermaster氏によると,Zen 5では,L2キャッシュとL1データキャッシュ間の内部バス帯域幅は2倍に広げたそうなので,このあたりも,この判断の根拠になっているかもしれない。
DDR5メモリのリアルタイム最適化機能
Zen 4世代でAM5プラットフォームとなってから,Ryzenシリーズのメインメモリは,DDR5メモリへと移行した。しかし,このDDR5がなかなかの曲者で,いわゆる相性問題が発生しやすいし,有名メーカーのメモリモジュール(以下,DIMM)を使っても,複数枚を装着した状態では動作が不安定になることも少なくない。自作PCユーザーで,こうしたトラブルに遭遇した人もいるだろう。
トラブルの原因としてまず考えられるのは,「DIMMとDIMMソケットの端子接点における接触抵抗による信号の減衰」だ。また,DDR5メモリは非常に高いクロックで動作しているため,直流電気信号でありながら交流電気信号的な性質を帯びだし,結果として信号経路におけるインピーダンスの不整合がおきたところで,信号の反射が起きて,動作の不安定さを誘発しているとも言われている。
そんな事態を重く見たAMDは,近々,800シリーズチップセットだけでなく,600シリーズチップセットも含めたすべてのAM5マザーボード向けに,新しいDDR5メモリの動作モードを実現する新UEFIをリリースする予定があると発表した。
機能としては,AM5搭載システムの動作環境や,DDR5メモリの動作プロファイル(※EXPOやXMP)に応じて,リアルタイムに動作クロックを変化させるというものだ。具体的には,「2枚指しだとDDR5-6000で安定動作していたが,4枚指しにしたらDDR5-5600にまで落とさないと動作が安定しなくなった」といったとき,この機能があれば,システムがDDR5メモリの動作クロックを,動的に5600MHzから6000MHzまで変化させる。
この動作モードが対応するDDR5メモリは,JEDECが規定するDDR5-5600仕様から,オーバークロックDDR5メモリのDDR5-8000仕様までとのことだ。
AMDはSMTを継続するのか?
さて最後に,気になっている人も多そうな話題で締めくくろう。
Intelは,COMPUTEX TAIPEI 2024において,TDP15Wクラスの次世代Core Ultraこと開発コードネーム「Lunar Lake」を発表した。これに合わせてIntelは,今後のクライアント向けのCPUにおいて,高性能コア(Performance Core,P-core)でも,SMTに対応しない方針を明らかにした(※E-coreは最初から非対応)。
この判断の論拠としてIntelは,以下のように主張している。
- P-coreにおけるSMT有効化は,スレッド切り換えが多発するため,ゲームのようなシングルスレッド重視のプログラムにおいては,余計な遅延を発生させて,性能面で望ましくない可能性がある
- CPUにSMT機能を搭載するための回路規模(トランジスタ予算)を,高効率コア(Efficiency Core,E-core)の増量に回したほうが,性能向上率や消費電力面で優位である
- P-coreのトランジスタ予算の4分の1で,E-coreを1つ追加できる。E-coreのピークIPCはP-coreと同等なので,SMTよりも効率の良い性能強化が行える
Zen 5の発表において,「AMDは今後もSMTを継続するのか,否か」について関心が高く,多くの記者が,AMDに質問をしようと考えていただろう。ところが,発表イベントのパネルディスカッションにおいて,AMDでRadeonシリーズのアーキテクトを務めるJoe Macri氏が,Zenシリーズのアーキテクトを務めるMike Clark氏に,これについて訊ねたのである。
結論から言えば,Clark氏は「SMT搭載は今のところ,外す予定はない」とのこと。Zen 5においては,SMT機能の実現に要するトランジスタ予算は,コア1基当たりに付き,わずか5〜10%程度の追加で済むという。一方で,SMT有効化で得られる性能向上は,少なく見積もっても20%,最大で50%もあることから,「面積,消費電力両方のコスト対効果から見ても,排除する理由は見当たらない」と,Clark氏は述べていた。
一方で,SMT有効によって余計なスレッド切り換えが発生し,ゲームのようなシングルスレッド性能重視アプリケーションの性能が伸び悩む問題については,「把握している」とも述べており,これについては「SMT機能をオフにするのが分かりやすい対策である」と答えている。まるで冗談のような回答だが,さすがにこれは消極的な対策すぎたと思ったのか,Clark氏はすかさず,「将来的には,スレッドとCPUコア割り当てのスケジューリング精度の向上で対策できるであろう」とフォローを入れた。
ちなみに,筆者が,このパネルディスカッション後の質疑応答時に,この点についてClark氏に深い質問をしたところ,面白い回答が返ってきた。
現在のZenシリーズにおいて,「スレッドとCPUコアの割り当て」は,Windowsにおけるスレッド優先度クラスの情報テーブルを,CPU側(※正確にはスーパーバイザーモードのCPUドライバが担当すると思われる)が,直接参照することで,その管理と制御を行っているそうだ。つまり,この部分のチューニングを推し進めれば,たとえば「ゲームのメインスレッドなどに対しては,スレッド切り換えをなるべく行わせない」というような制御ができるそうである。
Clark氏によると,Intelが第12世代Coreプロセッサ(開発コードネーム:Alder Lake)以降で実装した「Thread Director」のようなハードウェアによるスケジューラ支援機構をZenシリーズが備えていないのは,この仕組みがあるからだとも説明していた。
今後でてくるIntel,AMDの新製品においても,このアーキテクチャ方針の違いが,どのような形で性能に表れてくるのかが楽しみである。
AMDのRyzen 9000シリーズ製品情報ページ
- 関連タイトル:
Ryzen(Zen 5)
- この記事のURL: