昨年11月、AMDのGenoaことEPYC 9004シリーズの発表にあわせて概要などをご紹介したが、もう少し深い分析をお届けしたいと思う。競合製品であるSapphire Rapidsシリーズも無事に発表され、やっとデータなども出揃ってきた。以前のレポートでは、AMDはGen 3 Xeonとの比較しか示していなかったし、IntelはIntelでMilan世代との比較がメインで、実際比較するとどうなのか? が気になる方も多いかと思う。このあたりを可能な範囲でもう少し掘り下げてみたいと思う。
CPU Core
GenoaそのものはRaphaelことRyzen 7000 Desktopと完全にコアが同一である。これは、同じGolden Coveベースのコアと言いつつAlder LakeとL2/L3のサイズが異なり、更にアクセラレータなどを大量に実装したSapphire Rapidsとは全く別であり、物理的にGenoaとRaphaelは同一のダイで構成される。異なるのはダイの数(Raphaelは1 or 2個、Genoaは4/8/12個)とIOD(I/O Die)で、このIODは全く別物である。そんなわけでGenoaのMicroarchitectureそのもの(Photo01)はRaphaelと当然同一である。
実はまだZen 4アーキテクチャの詳細そのものをこれまで説明してきていない。まもなく掲載予定のRaptor Lake Deep DiveのRMMAの部分でも要所部分の説明をご紹介しているが、良い機会なのでちょっとまとめて説明したいと思う。
まずDecoderそのもの大きな変更はない。4 x86命令/cycleでDecodeを行い、これを最大8 Micro-Op/cycleにしてMicro-op Queueに格納するだけだ。Zen 3からの最大の変更点は、AVX512命令をサポートすることである。ただしOp Cacheの方は異なり、まず従来の4KOpsから6.75KOpsに容量が拡大。更に最大9 Ops/cycleに帯域が増えている。
あとRaptor Lake Deep Dive(記事は近日掲載予定)の方で細かくグラフを示すが、以下に示すグラフ(参考グラフA)の様にNOP命令に関しては扱いが変わったようで、ピークで12 NOP Ops/cycleもの処理性能を叩き出すようになっている。これはOp CacheでのNOPの持ち方が変わったためと考えられる。
またBranch PredictionについてもL1 BTBが2×1K Entry→2×1.5K Entryに、L2 BTBが2×6.5K Entry→2×7K Entryにそれぞれ大型化された。"Predict 2 taken branches per cycle"そのものはZen 3世代で既に実現しているが、これの精度をさらに引き上げた格好だ。ちなみにBTBがL1/L2共に2setあるのはSMTに対応するためで、Thread毎に別々のBTBが用意されているわけだ。
Backendの方は、基本的には大きな構造の変化こそないものの
- Register FileはINT:160→192、FP:256→320に増量
- ROBのQueue Sizeは256→320に増量
- AVX-512に対応
といった変更が行われている。
このROBに関してはRaptor Lake Deep Dive(記事は近日掲載予定)でも示す予定だが、以下に示すグラフ(参考グラフB/C/D/F)の様に、単に容量増加なだけでなく、On-the-Fly状態の命令数が増えても性能が悪化しにくい、まるでServer向けの様なチューニングとなっている。
他にL2キャッシュの容量が512KB/core→1MB/coreに増量されている(L3容量はZen 3と同じく32MB/CCX)。またLoad/Store improvementに出てくる"Fewer port conflicts"は詳細は明らかにされていないが、ポートの競合を防ぐような対策が施されたとの事だ。
FPU(Photo02)は上に挙げた様にAVX-512のサポートが新たに追加された。元々Zen系列はFPUが2組あり、ただしZen 1は128bit幅×2。2つを組み合わせてAVX2命令を1命令/cycleで実行可能だった。Zen 2はFPUの幅が256bit化された事で、2命令/cycleでの処理が可能になったが、完全な対称型FPUでないため、2つを組み合わせてAVX-512を実行する事は不可能であり、これはZen 3でも引き継がれた。これが完全対称型になったのがZen 4で、この結果一つのAVX-512命令を256bit幅×2のFPUで1命令/cycleで実行可能になった形だ。加えて、VNNIという名前で呼ばれるAI/ML向け命令もサポートしている。
キャッシュ周りも基本的にはZen 3と同じだが、細かく性能改良の手が入っている(Photo03)。こうした積み重ねによって、Zen 4はZen 3比でIPCが14%向上した、とされている(Photo04)。Zen 3からZen 4の主な違いをまとめたのがこちら(Photo05)。流石にL2/L3のLatencyは増えているが、L2が大容量化に伴って2cycleのLatency増加はやむを得ない(Hit率向上とのバーター)だし、L2が遅くなればこれとVictim構成になるL3が遅くなるのも仕方がないところだろう。なんにせよ、デコーダとか実行ユニットの数を増やさずに10%以上のIPC向上を実現したのは流石である。
このIPCの向上に関し、EPYCでは具体例が示されなかったが、Ryzen 7000に関しては同じ4GHz動作の場合にZen 3からの性能向上例として示されたのがこちら(Photo06)。勿論これはAVX-512を使わない場合の性能向上率である。ではAVX-512は? というのがこちら(Photo07)である。実をいうと、この時点でGenoaはがサポートしているAVX-512命令は、かなりSapphire Rapidsに近い。Sapphire RapidsがサポートしてGenoaが未サポートのAVX-512命令は
AVX512_VP2INTERSECT
AVX512_FP16
の2つだけである。このうちAVX512_VP2INTERSECTは従来TigerLakeだけでサポートされており、一方AVX512_FP16はSapphire Rapidsで新規追加された命令である。要するに既存のAVX-512命令を利用したプログラムは原則全てGenoaで動作する筈である。この結果として、特にAI/ML関連のアプリケーションはVNNIを利用する事で大幅に高速化した、というのがPhoto07の右側である。ただVNNIでなくても、AVX512Fを利用するようなアプリケーション(HPC分野)では効果が期待できる事になる。
気になるのがSapphire Rapidsとの性能差である。Skylake-SP以来、Xeon Scalableは1cycleあたり2つのAVX-512命令を実行できる。Skylake-SPはこれを実現するため、Skylakeに無理やりAVX-512ユニットを追加している。これはIce Lake-SPやSapphire Rapidsも同じである。なので同じ動作周波数なら、Sapphire RapidsがGenoaの2倍高速という事になるのだが、実際はもう少し複雑である。というのは
- コア数はGenoaの方が多い:Sapphire RapidsはハイエンドのXeon Platinum 8490Hでも60コア。一方EPYC 9654は96コアである。つまりEPYC 9654の方が60%多い。
- 動作周波数もGenoaの方が高め:Xeon Platinum 8490HはBase 1.9GHz/Boost 3.5GHzである。一方EPYC 9654はBase 2.4GHz/Boost 3.7GHz(All Core Boostでも3.55GHz)である。Boostで比較しても5.7%、Baseで比較すると26.3%ほどEPYC 9654の方が高い。
- 従来Xeon ScalableはAVX Offsetと呼ばれる機能が搭載されていた。これはAVXユニットをフル駆動すると消費電力が急速に上がってしまうため、これを防ぐためにAVXユニットの稼働率がある程度以上になる場合は動作周波数を下げて対応するという仕組みだ。Ice Lake世代ではPower Level 0~2が設定されており、0は動作周波数が変化なし、1は若干下がる程度、2は大きく下がるという感じになっていた。Sapphire Rapidsに関しては、このAVX Offsetがどうなっているかまだ公開されていないが、無くなったという事は無いと考えられる。一方Zen 4の方はもう明示的にAVX Offsetが無いと明言されており、なのでここでも何%かのアドバンテージがEPYC 9654の方にある事になる。
実際のところ、AVX Offsetを考えにいれなくても、Base Frequencyで比較するとXeon Platinum 8490HとEPYC 9654のAVX-512命令の処理性能はほぼ同じ(1.6×1.263≒2.02で、1%ほどEPYC 9654の方が性能が高いという計算が成り立つ)である。実際にはどのSKU同士を組み合わせるのか(同じコア数で比較するのか、同じ価格帯で比較するのか、etc)で比較対象は難しいが、少なくともTop End SKU同士で言う限り最早AVX-512の性能に差はない、と考えられる。
ちなみに同じダイを利用しつつ異なるのがSecurity周り。これに関してはZen 4のコアに最初から搭載されており、ただしRyzen向けには無効化されているという形だが、Zen 4というかGenoaではMilan世代と比べて
- Security Guestの数が倍増(509 Guest→1006 Guest)
- AES128 Encryption/DecryptionがAES256 Encryption/Decryptionに変更
- CXL MemoryもSecurity化の対象に加わった
の3点が相違点となる(Photo09)。
さて、ではこのCPU Coreの性能はどの程度であろうか? これに関してはAMD、Intel共にそれぞれベンチマークの結果を示している。まずAMDの方だがSPECrate_2017_int_baseのスコアをモデルナンバー順に並べたのがこちら(Photo10)。同一(もしくは近似)コア数の、GenoaとIce Lake-SPの比較がこちら(Photo11,12)、ハイエンド製品同士の比較がこちら(Photo13)である。対するIntelは? というと、もうSPECで比較する時代ではない(Photo14)として、今回Sapphire RapidsではSPECのベンチマーク結果を一切示していない。
ということで、実際に結果をSPECのデータベースから引っ張り出してくることにした。幸いFirst Quarter 2023 SPEC CPU2017 Resultには、既にSapphire RapidsやGenoaベースの結果が登録されている。ただこれだけだとIce Lake-SPやMilanのデータが足りない。そこで2023年Q3及びQ4のデータも引っ張り出して纏めたのがグラフ1と2である。
ここで
- データは2 Socket構成のもののみとした(2 Socket構成のデータが一番多かったため)
- SMT/Hyper Threadingは有効のもののみを抽出
- 動作周波数は考慮していない。というのは定格と最大動作周波数はCPUによって定められているが、実際に測定中の動作周波数は必ずしも一意に決まらない。なので動作周波数は排除して考えて居る
- メモリ構成も完全に同一とは限らない
といった結果として、数字には結構バラつきがある。例えばXeon Platinum 8490Hの場合のSPEC CPU2017 FP Rate baseの数字を比較すると
Lenovo ThinkSystem SD650 V3 | 928 |
---|---|
Lenovo ThinkSystem SR650 V3 | 926 |
Lenovo ThinkSystem SR630 V3 | 932 |
Nettrix R620 G50 | 948 |
Nettrix R620 G50 LP | 960 |
Supermicro SuperServer SYS-421GE-TNRT | 982 |
Supermicro SuperServer SYS-741GE-TNRT | 884 |
Supermicro SuperServer SYS-221H-TN24R | 905 |
といった具合に結構幅がある。なので実際グラフでは同一コア数でありながら結構数字に差が出ることになる。そうした傾向を踏まえた上で見て頂きたいが、Ice Lake-SPとSapphire Rapids、あるいはMilanとGenoa同士を比較すると、これはどちらも明確に性能の伸びがはっきり示されていると思う。破線で示した近似直線を見て頂ければこれは明白だ。そのうえでGenoa vs Sapphire Rapidsを比較すると、INT/FPのどちらの場合でも、明確にGenoa側に軍配が上がる事が見て取れると思う。単にコア数が多い分有利なだけでなく、同一コア数同士を比較してもこれである。ちなみにSPECのデータは各サーバーメーカーが自社のマシンで測定してそれを登録するものだから、条件としては公平と考えて良いと思う。なるほど、IntelがPhoto14の様な事を言い出す訳である。
ではアプリケーション性能は? というと、こちらはメモリ回りも関係してくるので、先にメモリ回りの説明をしたいと思う。