既報の通り、IntelはLunar Lakeこと次世代Core Ultraの詳細をCOMPUTEXのタイミングで公開した。こちらについて、Intelの資料を基にもう少し掘り下げてご紹介したいと思う。
Package
先の記事にも、ASUSのZenBookの基板に搭載されたLunar Lakeの写真があったが、これの別スナップ(撮影は同じく笠原光氏)をもう少し拡大したのがこちら(Photo01)。パッケージ全体はかなり正方形に近いが、微妙に縦長である(幅27mm×高27.5mm)。Lunar LakeもMeteor Lake同様にFoverosを利用したChiplet構成であるが、Meteor Lakeと異なりLPDDR5Xもパッケージに積層する関係で高さが合わない。Meteor Lakeの周囲にあるシルバーのメタルガイドは、恐らくこの高さの差を埋めるためのものと思われる(Photo02)。
P-Core
Lunar LakeはP-Core×4+E-Core×4という構成であるが、まずそのP-Core。大きな変化はHyper-Threadingの無効化である。Hyper-ThreadingはP-Coreの場合、一般に30%のIPC(またはThroughput)向上が見込める半面、20%の消費電力増加につながる、とする(Photo03)。そこでP-CoreのHyper-Threadingを無効化(というか、削減)したことで、性能/消費電力比などの改善に繋がった(Photo04)としている。当たり前の話として、Hyper-ThreadingというかSMTを有効にすると、当然実行ユニットの利用効率が上がるから、性能は上がるけど(同時に動作する実行ユニットの数が増える分)消費電力も増える。で、SMTを無効化すればトータルの性能は落ちるが、逆にSingle Threadで考えた場合にはこれまで取り合いになっていた実行ユニットを常に自分で独占できる訳で、その分性能は多少ながら向上する。そしてこれはAlder Lake以降のIntelのアーキテクチャでは顕著であるが、本来Hyper-ThreadingというかSMTの対象として利用されやすい「雑多な軽い処理」は、Thread Directorを使って優先的にE-Coreに振り分けされる傾向にある。なので、P-Coreで処理するプログラムがMulti-Threadedなものであれば効果があるが、Single-ThreadedなプログラムであればHyper-Threadingでの効果は得られにくい。後述するように、Lunar LakeはSnapdragon X Eliteを仮想的にしている節があり、少しでも待機時消費電力を減らしたいというニーズが強い。その一方でプロセッサ性能の方は、Single Thread性能が上げられれば、Multi-Thread性能の方はE-Coreとの合わせ技でカバーできる。なるほどSingle-Thread Onlyになるのも無理もないところである。
さて、本来P-CoreからHyper-Threadingを無効化しても、そこで10%を超えるようなエリア削減は難しい「筈である」。実際Hyper-ThreadingというかSMTを有効にしたところで、そこで別々に管理するリソースはそう多くない。PC(Program Counter)を始めとしていくつかのレジスタ類は二重持ちする必要があるだろうが、殆どのレジスタ類はSMTを有効にした際にそれがどちらのThreadのモノなのかを明確にするために1bitの管理bitを追加する程度で済むはずだからだ。ただ実際はSMTで性能を出そうとすると、レジスタ類の増量が必要になる。例えばROB(Re-Order Buffer)、Single Threadで100エントリあるとすれば、SMTの場合は200とは言わないまでも150位にしておかないと、ここがボトルネックになる可能性がある。こうしたものを全部Single Threadに最適化してゆくと、相応の面積削減にはなるだろう。今回IntelはLion CoveはHyper-Threadingを無効化したのではなく、削除したと明確に説明している。恐らく論理設計レベルではSMTを有効化できるオプションはまだ残しているだろう。ただそれを物理設計に移す段階で、SMT削除を行い、冗長なレジスタ類を排除しているのが面積削減に繋がっているものと思われる。このLion Coveは次のArrow Lakeでも使われるらしいので、こちらもHyper-Threadingが無効化されている可能性は大きい。
さてそのLion Coveそのものについて。P-Coreのアーキテクチャは
Alder Lake:Golden Cove
Raptor Lake:Raptor Cove
Meteor Lake:Redwood Cove
Lunar Lake:Lion Cove
という具合に変わっているが、Golden Cove/Raptor Cove/Redwood Coveは基本的には同一アーキテクチャであり、Golden Cove→Raptor Coveの差はL2キャッシュ容量(1.25MB→2MB)でしかないし、Raptor Cove→Redwood Coveは命令L1キャッシュ容量(32KB→64KB)の違いに留まる(細かいBug Fixなどは除く)。これに対してLion Coveは"Overhaul microarchitecture"とある(Photo05)様に、比較的大きく手が入っている。まずFront End。
Decode:6 wide→8 wide
MicroCode:2 wide→4 wide
μOp Cache:9 wide→12 wide
と猛烈な強化が行われた(Photo06)。μOp Cacheが12 wideと言う事は、最悪でも1cycleあたり6 x64命令の供給ができるということで、恐らくアベレージでは9 x64命令近くになるだろう。
次いでBack End。そして実行ユニットは
ALU:5 wide→6 wide
FPU:3 wide→4 wide
とかなり強化されている(Photo07)。これに合わせて当然Instruction Windowも強化されてるし、遂にRetirementが12 wideまで拡張された(Photo08)。先にアベレージで9命令/cycle位を処理できるのではないか?と書いたが、このうちALUが6命令を処理し、残りがLoad/Store Unitという感じになりそうだ。そのALUも、例えばJump/Shiftは2→3になったほか、MulがRedwood CoveではMul+MulHiという変な構成だったのをMul×3にしており、またP0~P5までに割と均等に処理を割り振る様になっている(Photo09)。
一方FPUは、Redwood Coveが3つの発行ポートに無理やりいろんな処理を突っ込んでいたのを整理して、4つにうまく分散させたという格好である(Photo10)。特にRedwood CoveまではFMA256×2+FMA512みたいな変な構成だったのを、恐らくFMA256×2に分散。またFP ALUは3→4に、FP DIVは1→2にと地味に演算能力を引き上げているのが判る。
そして実行ユニットの数と実行効率を改善した以上、それに見合うだけMemory Subsystemも強化する必要がある。まずCacheで言えば、従来のL1 D-CacheがL0 D-Cacheになり、新たに中間的な容量とLatencyのL1 D-Cacheが追加されたほか、全体的に容量の拡大が図られている(Photo11)。またLoad Store Unitも、
Redwood Cove:AGU×5、Store Data×2
Lion Cove:AGU×6、Store Data×2
とAGUが強化され、またD-TLBのエントリ数も強化されている(Photo12)。
改めてRedwood CoveまでのALU/FPUを見ると、ポートを増やさずに無理やり実行ユニットを追加して、なので最適化というかスケジューリングがかなり難しくなってたのを整理し、発行ポートも追加して無理なく実行できるようにした、という感じであり、なるほど「オーバーホール」という言い方がふさわしい感じだ。
加えて電源管理周りも強化された。まず遂に(?)電源管理がAIベースになった(Photo13)ほか、大きな違いとしてClock倍率が16.67MHz刻みになった(Photo14)。説明では、これでよりギリギリまで動作周波数を上げられる様になった、としているし実際そういう面もあるのだが、その一方で同じだけ動作周波数を上げるためにはこれまでよりも煩雑に倍率変更が必要になる(倍率変更の回数が6倍になるから、例えば300MHz上げるのにこれまでなら3回の変更済んだのが18回に増える)事になる。勿論この辺はやりようは幾らでもあり、例えば温度/電力枠にゆとりがある時は6bin単位での更新、ギリギリになったら1bin単位で更新という風にすれば、それほど変更回数が増えない事になる。このあたりの調整も、そのAIに任せているという事なのかもしれない。
こうした積み重ねでIPCを平均で14%改善した(Photo15)、というのがIntelの説明である。その性能改善は動作周波数が低いところほど顕著であり、動作周波数が高いところでは10%程度なのが、低くなるほど増え最大では18%以上になるとされている。ただSnapdragon Xと競合するのであれば、P-Coreそのものの消費電力は5W以下が想定される訳で、こうした領域で大きくIPCを伸ばしているのは好ましい特性と言える。
最後が"Modernize design database"の話(Photo16)。Redwood CoveからLion Coveに移行するにあたり、設計技法をだいぶ変更したらしい。一つは内部の論理構造を大幅に作り替え、より大きい単位でのコンポーネント化を実現したこと、恐らくコンポーネント内部の作り方を変えた(Latch dominated→Flop dominated)こと、それとプロセス依存性からの脱却である。要するに以前は小部品を集めて構成していたものを、より大規模なモジュラ化することで効率化を図ると共に、そのモジュラ同士の接続方式を改善した、という話に読める。恐らくだが、これまでは小さなコンポーネント部品を大量に繋ぎ合わせる関係で、すべてのコンポーネントを連携して動かすためにはLatchを使ってきちんと同期させる必要があった。ところがコンポーネントのサイズが大きくなると、その内部はある意味勝手に動いても構わない(コンポーネント間はLatchを使って同期する必要はあるが)から、コンポーネント内部のLatchの数を大幅に減らすことが可能になったものと思われる。Latchはある意味SRAMであって面積も喰うし、このLatchにClockを分配するのにもそれなりの消費電力(と配線)が必要になるから、Latchを減らせればそれだけで回路規模と消費電力を抑えられる。Process-node-agnosticは「今まではそうなってなかったのか」という驚きも若干あるのだが、Lunar LakeやArrow LakeはTSMCを使って製造される関係で、物理設計は兎も角として論理設計はなるべく特定ファウンダリ/ノードに依存しない様に作らないと、プロセスを変えるたびに論理設計のやり直しが発生する事になる。これを極力抑えるようにした、ということである。とはいえ、99%非依存というのはまだ1%も依存部が残ってるという話であって、P-Coreの規模を考えると結構多いな、という印象も受ける。
E-Core
P-Coreもこれだけ中身が一新されている訳で、E-Coreも当然大幅に改良が施された。主要な設計目標はこの3つである(Photo17)。workload coverageやscalabilityはまぁ判らなくもないのだが、VectorのThroughputを倍増させるというのはやはりXeon向けを意識したもの、と考えるのが妥当なのだろう。そもそも現在のE-Coreは2020年にElkhart Lakeに実装されたTremontコアがベースで、
Tremont:Elkhart Lake
Gracemont:Alder Lake/Raptor Lake
Crestmont:Meteor Lake
Skymont:Lunar Lake
と来ているが、Tremont以来AVX512の実装を行っていない(そうした負荷の高い処理はP-Coreに任せることで消費電力と実装面積を削減する)というポリシーがあり、これはLunar Lakeにも引き継がれている。ただそれでもVector Throughputを増やす必要があったという事で、技術的にはAVX512を1cycleで処理できるThroughputを実現するに至っている。
まずFront Eng側。PredictionとPrefetchであるが、随分また派手に強化したものだ、という感じである。
そして次のDecode段が非常に意味深である(Photo19)。Tremont以来、E-CoreのDecodeは3-wide×2構成だった。Hyper-Threading無効時はこれを6-wideとして処理できるし、有効時はThread毎に3-wide構成のDecodeが可能という仕組みだった訳だが、今回×3構成になったというのは、つまり将来はコアあたり3 Threadが有効になるHyper-Threadingが実装される可能性がある事を示唆している。
Lunar LakeはE-CoreはHyper-Threadingが無効化されているが、Sierra ForectではHyper-Threadingが有効化されており、288コアの製品は最大576 Threadとして動作するデモが2023年に行われている事からもこれは間違いない。Sierra Forestではコアあたり2 Threadだが、Sierra Forestの後継として名前が上がっているClearwater Forestでは、あるいはコアあたり3 Thread動作になっていても不思議ではないことをこのDecode段は示唆している。
話をLunar Lakeに戻すと、これに合わせてμOp Queueも96に増量されている。Hyper-Threading無効の状態で比較した場合、単純にCrestmont世代と比較して1.5倍のDecode Performanceが実装された格好になる。
Backendも、これに合わせて当然強化された(Photo20)。Crestmont世代の構成はこれとか、これを見ていただくのが早いが、
Allocate/Rename:5 wide→8 wide
発行ポート:17→26
Retirement:8→16
と、ほぼ1.5倍の命令発行能力と2倍の実行能力を実装している。実質的には1.5倍位の処理性能で、Hyper-Threadingをフル活用するともう少し性能が上がる、という感じだろうか? これにあわせて、Load/Store Unit周りの強化も凄まじい(Photo21)。バッファ周りも色々強化されているらしいが、今回具体的な数字は示されていない。この辺はまたOptimization Manualが更新されたら具体的な数字が出てくるだろう。
そして実行ユニットだが、Lion Coveを凌ぐぐらいに強化されている。ALU(Photo22)は遂に8つになり、Jumpも5つ、AGUもLoadが×3、Storeが×4である。もっともこれ、Single Threadで使い切れるかといえばかなり厳しい感じで、恐らくはHyper-Threading有効時に性能を引き上げるための方策だろう。その一方で動作周波数は低く抑えられるので、結果的にIPCが上がる(動作周波数を下げてもLLCとかメモリの速度は落ちないから、それだけLatencyが減る事になり、結果としてIPC向上に繋がる)格好だ。
またFPUもCrestmontが3+2(FPU×3、LSU×2)だった発行ポートが4+2(FPU×4、LSU×2)に強化。実質512bit/cycleの処理性能を発揮するに至っている(Photo23)。当然Load Store Unitの強化も著しく、L2のTLBは4192 Entryまで増強されている(Photo24)。L2の容量そのものは増えていないが、帯域が倍増しているとされる(Photo25)。
さて、こういう強化を行ったことでCrestmont比で整数演算で平均1.38倍、浮動小数点演算で1.68倍の性能改善がもたらされた、とする(Photo26)。もう少し具体的に、Lunar Lakeの様なモバイル向けの構成で言えば、まずSingle Threadでの性能と消費電力のカーブがこちら(Photo27)。TSMC N3Bを使っている分もあるとは思うが、同じ性能なら消費電力は大幅に下げられるし、同じ消費電力なら最大1.7倍の性能を発揮するとする。Multi-Threadは更に差が大きいが(Photo28)、こちらはLunar Lakeの方がコアの数が2倍と言う事を勘案すると、おおむねPhoto27と同傾向と言えるかと思う。
一方、これはRaptor Lakeと同等の構成を想定したDesktop向けのシミュレーション結果である(Photo29)が、比較対象はCrestmontではなくRaptor Coveである事に注意。整数演算/浮動小数点演算共にRaptor Lake比で2%増しとなっている。実際Single Thread性能はRaptor Coveをわずかに凌駕している(Photo30)。この青い枠の部分を拡大したのがこちら(Photo31)で、低消費電力領域においては、同じ動作周波数なら消費電力40%減、同じ消費電力なら動作周波数20%増が達成されている。勿論SkymontはPhoto30に示すように動作周波数の頭打ちが早めなので、あまり高速動作には向かないのだが、Raptor Lakeのケースで見ても2~3GHz程度までは動作しそうだし、その範囲ではRaptor Lakeすら凌ぐ性能が出せるというあたりに、コアの強化ぶりが良く判る。
ちょっと長くなったのでNPUやGPU、システム全体のパッケージなどは別記事とさせていただきたい。