Site icon HWCooling.net

Detaily Zenu 3: rozbor změn a vylepšení nové CPU architektury AMD

CEO AMD Lisa Su představuje procesory s architekturou Zen 3 (Zdroj: AMD)

Jak velké je výšení IPC a koncepce Zenu 3

Minulý měsíc AMD vydalo procesory Ryzeny 5000. Jejich architektura Zen 3 přinesla nakonec možná víc, než se čekalo, výkon na 1 MHz někde převyšuje i IPC nejnovějšího jádra Intelu Willow Cove (Tiger Lake). Zen 3 je podle AMD jeho největší překopání architektury od vůbec prvního Zenu, pročež se podíváme, jaké změny v něm inženýři provedli, aby dokázali porazit Intel i v jednovláknovém a herním výkonu.

Ryzen 5000 je vyráběný 7nm procesem N7 od TSMC. Nemělo by jít o proces N7+ s EUV a zřejmě ani o vylepšenou ne-EUV verzi N7P. Respektive to platí pro tzv. CPU čiplety. Zen 3 však v desktopovém a serverovém provedení přebírá stejnou koncepci jako měl Zen 2. Jádra CPU a jejich propojovací logika plus L3 cache se nachází v malých 7nm křemících (i když s plochou 80,7 mm² větších, než u Zenu 2) tvořených 4,15 miliardami tranzistorů, které se připojují k 12nm „IO čipletu“, který zase obsahuje konektivitu, řídící logiku a zejména řadič pamětí.

Nyní představené desktopové Ryzeny 5000 „Vermeer“ mají tento IO čiplet převzatý z Ryzenů 3000 „Matisse“, takže změny v architektuře jsou víceméně izolované jen do samotných CPU jader a jejich infrastruktury v CPU čipletech. Toto nejspíš bude platit i pro serverový Epyc 7003 „Milan“, jenž asi také bude přejímat IO čiplet z Epyců 7002. Ale pro notebooky by z kraje roku 2021 mělo AMD vydat notebookové APU „Cezanne“, které bude celé monoliticky 7nm a bude mít jádra Zen 3 také. U něj tedy možná nastanou i nějaké další změny. Zatím se ale budeme věnovat Zenu 3 v té podobě, v jaké ho používají procesory Vermeer (tedy AM4 Ryzeny bez integrovaného GPU).

Podle informací, které AMD sdělilo novinářům, je Zen 3 novou architekturou, i když ne bez návaznosti na předchůdce. Zatímco Zen 2 poměrně úzce navazoval na Zen 1 a rozvíjel ho, Zen 3 je výraznější redesign (který by asi zase mohl být dál rozvinutý v Zenu 4). Většina součástí byla údajně aktualizována či se výrazně změnila jejich implementace, i když celková koncepce se dle schémat nezdá zas tak moc odlišná. Je zajímavé, že jádro dosahuje poměrně velkého zvýšení IPC (dejme tomu cca 13–19 % podle měření), ačkoliv nedošlo k nějakému na první pohled patrnému „rozšíření“. Zen 3 pořád dekóduje maximálně čtyři instrukce za cyklus a má také jen čtyři ALU (proti šesti u ARM jader Applu), recept na výkon je tu tedy trochu jiný.

Op Cache místo více dekodérů

Pokud budeme sledovat cestu instrukcí v pipeline procesoru, začneme tzv. frontendem, kde dochází ke zpracování instrukcí před samotnými výpočty. Jak už bylo řečeno, Zen 3 má stále beze změn čtyři dekodéry instrukcí, které zpracovávají instrukce po „fetchi“ z instrukční L1 cache. Pokud jste studovali diskuze o nových ARM procesorech Apple, možná jste narazili na názor, že právě v dekodérech je fatální slabina architektury x86, protože její komplexnost a variabilní délka instrukcí (proti uniformně 32bitovým instrukcím ARM) znemožňuje efektivní paralelizaci procesu dekódování instrukcí – někde se například objevuje (ne úplně podložený) názor, že u x86 je téměř nemožné mít víc než čtyři dekodéry (zpracovávající čtyři instrukce/cyklus).

Komplikace je u x86 v tom, že kvůli nepředvídatelné délce instrukcí není triviálně jasné, kde jednotlivé instrukce začínají (toto lze ovšem řešit předdekódováním hledajícím jejich začátky a Intel už mimochodem má jádra s pěticí dekodérů).

Současné procesory x86 ovšem řeší obtížnější dekódování jinak než dalším přidáváním dekodérů, což platí i pro Zen 3: pomocí tzv. Op Cache (Intel stejné řešení má již od Sandy Bridge). To je cache pro uložení výsledku již dekódovaných instrukcí, z níž například ve smyčkách, kdy se kód opakuje, procesor přebírá dekódované instrukce místo toho, aby kód opět procházel dekodéry. Ona nejobtížnější část procesu pro instrukční sadu x86 se tedy při nalezení potřebných operací v Op cache zcela přeskočí. Tato cesta je energeticky méně náročná i a výkonnější – do dalšího zpracování může jít u Zenu 3 až osm operací za jeden cyklus, zatímco z dekodérů samotných jen ty čtyři.

Procesory x86 počítají s tím, že majoritu času (i když ne úplně vždy) poběží právě z Op cache, ne přes klasické komplexní dekódování. Na toto je proto třeba při poměřování s jádry ARM myslet (dlužno říci, že nejnovější Cortexy už mají Op cache také, ačkoliv Apple ji nepoužívá).

Celkový diagram jádra Zen 3

Vylepšená OP Cache

AMD Zen měl kapacitu Op cache 2000 instrukcí, což Zen 2 zvětšil na 4000 (ale z cenu toho, že se zase zmenšila instrukční L1 cache z 64 na 32 KB, bylo to tedy něco za něco). Zen 3 ponechává kapacitu stejnou a také výstup 8 operací za cyklus se nezvýšil.

Ale přes stejné papírové parametry má být výkon lepší, například v situacích, kdy sekvence instrukcí přechází z jednoho režimu do druhého. Zen 3 má mít rychlejší přepínání režimů mezi klasickým dekódováním a „zkratkou“ přes Op cache a přepínání má vyšší granularitu. Přehození výhybky mezi plným dekódováním a a recyklací operací z cache asi není úplně triviální, takže eliminací zpoždění a zpomalení při přepnutí lze asi získat zpět nějaký předtím ztracený výkon.

Změny v této části údajně samy o sobě zvýšily IPC jádra asi o 2,7 % (proti Zenu 2) z těch 19 %, které AMD uvádí jako celkové zlepšení výkonu na 1 MHz.

Frontend jádra Zen 3. Kromě klasické pipeline přes instrukční dekodéry může CPU pracovat také zkratkou, kdy bere již dekódované instrukce z Op Cache, která může dodávat až osm dekódovaných operací za cyklus

Také instrukční cache, z které proudí instrukce pro klasické dekodéry v případě kompletního nezkráceného zpracování, má být efektivnější, ačkoliv má stejné parametry – kapacita je stejných 32 KB s osmicestnou asociativitou jako u Zenu 2. Ovšem prefetch kódu z L2 cache byl vylepšen a také využití kapacity L1 instrukční cache má být účinnější.

Ať už dekódované instrukce („opy“) jdou z instrukční cache přes dekodéry nebo z Op cache, zařazují se do fronty operací (Op Queue), z níž fáze Dispatch posílá operace k vykonávání. Dispatch umí poslat dál maximálně šest operací za cyklus, což limituje maximální výkon jádra na tuto úroveň. Ačkoliv z Op cache může jít dál až osm operací za cyklus, toto slouží asi hlavně k rychlejšímu naplnění fronty například po špatné predikci, kdy se musí dohánět. Vyšší propustnost Op cache také vyvažuje to, že standardní dekodéry umí jen čtyři instrukce, což by zase bylo pod rychlostí umožněnou dispatchem. Vyšší propustnost, když se berou instrukce z Op Cache, by to v průměru měla kompenzovat.

Vylepšená predikce větvení

Ve frontendu je ještě velmi důležitým faktorem prediktor větvení, jenž reálně běží ještě před dekódováním a fetchem a snaží se uhádnout, kterým směrem se při větvení vydá běh programu, aby nebylo nutné čekat na vyhodnocení podmínky, což by způsobilo velké prostoje. Místo toho se na základě odhadu ihned spekulativně počítá dál a pokud by odhad nevyšel, CPU se pak vrátí nazpět. Úspěšnost odhadu je pro výkon kritická a nové architektury proto predikci stále vylepšují, což platí i pro Zen 3. Používá dále prediktor typu TAGE (zavedený v Zenu 2), ale AMD zvětšilo L1 Branch Target Buffer na dvojnásobek (z 512 na 1024 položek), což by mělo vylepšit úspěšnost. L2 Branch Target Buffer byl mírně zmenšen z 7000 na 6500 položek, asi proto, aby byl energeticky efektivnější (nebo šlo o cenu za zvětšení L1 BTB o podobný počet). Struktura Indirect Target Array se zvětšila z 1024 na 1536 položek.

Toto by mělo zvýšit účinnost (která se asi může zlepšit i jiným laděním, které AMD přímo nepopisuje). Predikce ale má také větší výkon – AMD uvádí, že je možné předvídat více větví za cyklus než dříve (snad dvě větvení místo jednoho?). Současně prý také mají většinou být eliminovány „bubliny“, kdy pár cyklů trvá, než se po predikci procesor přepne na vykonávání z nové adresy. V Zenu 3 prý u většiny predikcí vzniká „nulová bublina“. Údajně by snad také mohla být zredukována cena za špatný odhad (kdy se CPU vrací a musí začít znovu), ale AMD neuvádí, kolik cyklů teď tzv. misprediction penalty čítá.

Prefetch

Kromě predikce větvení AMD také vylepšilo prefetch, tedy spekulativní předběžné načítání dat z paměti předtím, než je CPU hypoteticky bude potřebovat. Také zde bývají architektury kontinuálně vylepšovány. V Zenu 3 by měl být prefetch účinnější v předvídání toho, jaká data bude program požadovat z paměti. Například má být vylepšený prefetch v situacích, kdy vzorec přístupů překračuje hranice paměťových stránek.

Podle AMD tyto věci také mají značný podíl na zlepšení IPC, kterého Zen 3 dosáhl. Vylepšený pretech údajně zvýšil výkon o 2,7 %, k tomu vylepšení predikce větvení o dalších 1,3 %. Ostatní části frontendu mají dávat dalších +4,6 %, ale už není popsáno, z čeho to přesně pramení. Pravděpodobně může být zahrnuté ještě vylepšené optimalizování out-of-order vykonávání instrukcí (zvětšený reorder buffer, o kterém bude řeč později).


Minulý měsíc AMD vydalo procesory Ryzeny 5000. Jejich architektura Zen 3 přinesla nakonec možná víc, než se čekalo, výkon na 1 MHz někde převyšuje i IPC nejnovějšího jádra Intelu Willow Cove (Tiger Lake). Zen 3 je podle AMD jeho největší překopání architektury od vůbec prvního Zenu, pročež se podíváme, jaké změny v něm inženýři provedli, aby dokázali porazit Intel i v jednovláknovém a herním výkonu.

Výpočetní jednotky: částečné rozšíření v ALU i FPU části

Řekli jsme, že počet ALU zůstal stejný, ale svým způsobem jádro přece jen bylo rozšířeno. Zatímco Zen 2 měl v celočíselné výpočetní části čtyři ALU a tři AGU, Zen 1 se lišil jen dvěma AGU (Adress Generation Unit, plní Load/Store operace), Zen 3 má trošku jinou skladbu – schopnosti jednotek byly trošku přerozděleny a zvýšil se počet portů neboli šířka „issue“. Ta je teď deset portů.

Místo sedmi (4×ALU, 3×AGU) má Zen 3 čtyři ALU a tři AGU , ale k tomu ještě novou vyhrazenou jednotku pro zpracování větvení (na schématu „BR“). Ta je již druhá, neboť vedle ní tuto funkcionalitu provádí ještě jedna ALU. Devátý a desátý port jsou také nově přidané separátní porty zpracovávající ukládání dat do paměti (přesněji L1 cache) – na schématu jsou vyznačené jak „ST“.

Celkově tedy jádro může zpracovat čtyři aritmeticko-logické operace za cyklus jako Zen 2. Ovšem v případě, že je třeba provést větvení, tato operace jde do nové jednotky a neubere tedy z kapacity ALU, v takové situaci tedy zlepšení IPC nastane. To je obecně smysl této reorganizace, kdy má jádro sice podobné počty jednotek jako dříve, ale jsou rozdělené mezi větší počet portů – tímto je možné více funkcionality obsloužit současně, zatímco při menším počtu portů operace častěji jedna blokují druhou, protože by potřebovaly jít na stejný port.

U Zenu 3 některé také ALU instrukce mohou být vykonávány ve větším počtu za takt (LAHF, LZCNT, POPCNT, ale i další), nebo s vyšší latencí. Dost se například latence snížila u celočíselného dělení (kde se i zvýšil počet operací dělení proveditelných na jeden cyklus, respektive za určitý počet cyklů).

Výrazné posílení Load/Store

Kapacita Load/Store operací je tři čtení za cyklus a dva zápisy za cyklus, zatímco Zen 2 uměl dvě čtení a jeden zápis za jeden cyklus. Zde je to tedy znatelné navýšení kapacity. Mimochodem, současná jádra Intelu (procesory Ice Lake/Tiger Lake) by měly umět jen dvě čtení a dva zápisy za cyklus. Ovšem u Zenu 3 je tato kapacita trošku omezená – funguje jen u šířek dat do 128 bitů. Pokud je šířka dat 256 bitů, pak Zen 3 zvládne jen dvě čtení a jeden zápis za cyklus. Zen 3 jinak také prohloubil frontu zápisů (store queue), z 48 na 64 položek. Fronta čtení je naopak nezměněná (44 položek).

Toto posílení Load/Store části jádra je jinak jeden z větších faktorů ve zvýšeném IPC Zenu 3. Zlepšuje prý výkon na 1 MHz o 4,6 % v měření AMD. Více, než ostatní změny ve výpočetních jednotkách.

Load/Store subsystém jádra Zen 3

6× Page Walker

Jednotky load/store jsou prý díky přeorganizování jádra flexibilnějši použitelné a měla by být vylepšena schopnost procesoru identifikovat závislosti mezi load/store operacemi (store-to-load forwarding).

Kromě toho byly také výrazně posílené tzv. page walkery u translation lookaside bufferu (TLB), Zen 3 jich má šest místo dvou u Zenu a Zenu 2. Tyto jednotky vyhledávají fyzickou adresu určité požadované logické adresy v paměti, pokud se ji nepodaří najít v TLB (TLB miss). Jejich posílení by tedy mělo pomoci při operacích intenzivně pracující s operační pamětí, kdy se používá větší rozsah paměti a přístupů je paralelně víc najednou.

Velká reorganizace schedulerů

Kromě reorganizace portů podniklo AMD druhou velkou změnu v celočíselné části – překopány byly totiž i schedulery pro jednotlivé jednotky. Zen 1 a 2 měly pět schedulerů, separátní pro každý port ALU a jeden další scheduler společný pro všechny AGU. Jednotlivé schedulery se plnily z předchozí fáze zpracování, tzv. Integer Rename (kde se přemapovávají architektonické registry na větší počet fyzických registrů pro potřeby out-of-order vykonávání instrukcí).

Zen 3 toto mění. Místo pěti schedulerů má jádro nyní schedulery čtyři, kdy na každém je jedna ALU a jedna AGU (ALU jsou jenom tři, na čtvrtém scheduleru je navěšená čtvrtá ALU a k ní ona samostatná jednotka pro větvení). Separátní store data porty jsou zřejmě přidané na druhém a čtvrtém scheduleru. Tyto schedulery mají každý 24 položek. Je zajímavé, že tři schedulery vždy pro pár ALU+AGU už AMD používalo kdysi, v architekturách K7, K8 a K10, takže jde o jistý koncepční návrat k historii.

Schéma celočíselné části Zenu 3 (a srovnání se Zenem 2)

Jde o poměrně zajímavé uspořádání. Intel například používá stále jednotný scheduler pro celé jádro, na kterém jsou připojené všechny porty. V Zenu 1 a 2, jak již bylo řečeno, byly schedulery zcela samostatné pro jednotlivé ALU (měly hloubku 16) a scheduler pro AGU byl společný s hloubkou 28 položek. Jejich sdružení vždy pro pár ALU a AGU by mělo umožnit jejich lepší využití. Součet hloubky těchto front je 96, což je jen malé zvýšení z celkem 92 (4×16 + 28) v Zenu 2.

Onen společný scheduler u Intelu je větší – v Ice Lake/Tiger Lake má hloubku 160, u Skylake 97. Celková unifikace u Intelu by mohla být ještě další plus. Ale je možné, že pak zase Intel naráží na komplexnost implementace, takže to má i nevýhody.

Tato změna v uspořádání portů a schedulerů ve výpočetní části je každopádně asi nejvýraznějším znakem toho, že je Zen 3 opravdu nová architektura.

Hlubší out of order fronty

AMD také zvětšilo počet fyzických registrů, byť jen mírně, na 192 proti 180 registrům u Zenu 2. Tyto fyzické registry slouží pro přemapování architektonických registrů, s nimiž pracuje instrukční sada a je jich mnohem méně. Pro srovnání, 180 fyzických registrů má i Skylake, ovšem Ice Lake nejspíš počet také zvýšilo.

Architektury Intel Ice Lake/Tiger Lake ovšem hlavně výrazně zvýšily hloubkou hlavní out-of-order fronty sloužící pro přehazování a optimalizování pořadí instrukcí, tzv. reorder buffer (ROB) rovnou na 352 položek (Skylake mělo 224). Čekalo se, zda AMD udělá podobné velké navýšení, které u Intelu nejspíš hodně pomohlo ke zvýšení IPC, ale kupodivu se tak nestalo.

Srovnání různých parametrů jader Zen až Zen 3

Zen 2 měl reorder buffer o 224 položkách jako Skylake a Zen 3 ho zvětšil jen mírně, na 256 položek. AMD šlo tedy cestou menších krůčků. Mimochodem, jádro Firestorm od Apple (v čipech M1 a A14) má podle měření reorder buffer hluboký možná až 600 položek – firma přesná čísla neprozrazuje, ale zdá se, že hloubku out of order front má stejně jako šířku jádra (počet ALU je 6) výrazně vyšší než jádra Intelu a AMD. Ovšem zase za cenu nižších taktů.

Obecně u hloubek front a bufferů, o nichž se zde bavíme, platí to, že čím hlubší jsou, tedy čím se do nich vejde víc položek, tím účinnější by měly být. Proč? Hlubší/delší fronta dovoluje lépe zpotimalizovat pořadí instrukcí. Out-of-order vykonávání operací je tím účinnější, čím větší je „okno“, které procesor při tomto optimalizování vidí. Pokud najednou může pracovat s 350 instrukcemi, má lepší příležitost přeházet je pro optimální výkon (tj. dosáhnout maximálního využití prostředků jádra a docílit tím co nejrychlejšího zpracování), než když jich najednou vidí jen 250.

Není to samozřejmě jediný faktor, ale procesor s hlubšími buffery má potenciál pro vyšší IPC (výkon na 1 MHz). Podobně jako přinášejí potenciál k vyššímu IPC větší cache oproti menším a širší jádra (tedy ta s vyšším počtem jednotek) oproti těm užším. Hloubky front jako je Reorder Buffer lze tedy použít k určitému porovnávání jader, ale i když nežříká všechno (podobně jako IPC není vše a je nutné započítávat i frekvenci) a zde zrovna vidíme, že procesory s tak výrazným rozdílem v hloubce Reorder Bufferu jako Tiger Lake a Zen 3 nakonec mohou mít podobné IPC.


Minulý měsíc AMD vydalo procesory Ryzeny 5000. Jejich architektura Zen 3 přinesla nakonec možná víc, než se čekalo, výkon na 1 MHz někde převyšuje i IPC nejnovějšího jádra Intelu Willow Cove (Tiger Lake). Zen 3 je podle AMD jeho největší překopání architektury od vůbec prvního Zenu, pročež se podíváme, jaké změny v něm inženýři provedli, aby dokázali porazit Intel i v jednovláknovém a herním výkonu.

FPU: šest místo čtyř portů, také nové schedulery

Procesory AMD mají dlouhodobě vykonávání operací FPU a SIMD vyčleněné do oddělené FPU části (dost možná proto, že tyto operace pracují na odlišnou sadou registrů). Toto Intel nedělá, jeho unifikovaný scheduler zásobuje jak ALU část, tak FPU. Výhoda Intelu je asi efektivnější využití scheduleru, výhoda AMD je asi ta, že ALU a FPU operace mezi sebou nebojují o volné porty (u Intelu jsou jednotky pro ALU i SIMD/FPU operace prováděné na stejných portech).

Schéma FPU (SIMD) jednotky Zenu 2

FPU měla na rozdíl od celočíselné části u předchozích jader Zen/Zen 2 vlastní unifikovaný scheduler. Zen 3 to ovšem také mění, vypadá to, že AMD udělalo podobnou reorganizaci jako v ALU. Místo jednoho scheduleru používá FPU zdá se nyní dva, ale opět jsou separátní od ALU/AGU schedulerů.

Schéma FPU (SIMD) jednotky Zenu 3: scheduler je rozdělený na dva

AMD dál aplikovalo i ono předělání portů, takže i zde je architektura výrazně změněná. Místo čtyř portů Zenu 1/2 má Zen 3 jednotky rozdělené mezi šest portů. Přímo kapacita výpočtů, tedy kolik lze provést operací FMA za takt, kolik sčítání a násobení, se asi nezměnila. Ale protože jsou tyto jednotky rozděleny mezi více portů, lze se častěji vyhnout blokování kvůli konfliktům, kdy by program chtěl paralelně provést dvě instrukce, ale obě jsou na stejném portu, takže jedna musí počkat. Například by měly být na samostatné porty přesunuté konverze dat z floating-point dat na celočíselná a operace FPU store, aby tyto jednodušší akce neblokovaly výpočetní instrukce.

Každý ze dvou schedulerů obsluhuje tři porty. První port má jednotky zpracovávající (F)MAC a násobení, druhý port má jednotky jen sčítání a podobné jednodušší operace. Na třetím jsou ony konverze dat nebo store operace.

Schéma FPU (a také SIMD) jednotky jádra Zen 3

Nejen v tom je FPU změněná, AMD snížilo latenci operací FMAC z 5 na 4 cykly, což by mělo zlepšit výkon, když na sobě operace závisí. Toto zlepšení latencí by jinak mělo být uplatněno i u některých dalších instrukcí (přehed změn v latencích a počtu uperací proveditelných za cyklus pro tyto instrukce má v tomto článku AnandTech). V SIMD operacích byla přidána podpora pro vektorové operace (de)šifrování – VAES a VPCLMULDQ nad 256bitovými registry (AVX/AVX2), které by měly výkon těchto šifer zlepšit až dvojnásobně proti 128bitovým operacím. Ovšem jen tehdy, pokud je program použije. Zen 3 také odstraňuje pomalost operací PDEP a PEXT patřících do rozšíření BMI2. Zen 1 a Zen 2 tyto instrukce totiž prováděly mikrokódem, což bylo pomalé, kdežto Zen 3 je už zvládá s vysokým (až o dva řídy lepším) výkonem. Mimochodem: nedávno se objevily spekulace, že pomalost těchto instrukcí je důvod, proč Zen 2 nemůže podporovat Smart Access Memory. Tyto věci spolu ale nesouvisí, AMD to dementovalo.

Celkově změny ve výpočetních jednotkách (ALU i jednotky v FPU) podle měření/profilování AMD dosahují zlepšení výkonu na 1 MHz asi o 3,3 % (z celkových 19 %).


Minulý měsíc AMD vydalo procesory Ryzeny 5000. Jejich architektura Zen 3 přinesla nakonec možná víc, než se čekalo, výkon na 1 MHz někde převyšuje i IPC nejnovějšího jádra Intelu Willow Cove (Tiger Lake). Zen 3 je podle AMD jeho největší překopání architektury od vůbec prvního Zenu, pročež se podíváme, jaké změny v něm inženýři provedli, aby dokázali porazit Intel i v jednovláknovém a herním výkonu.

Cache nezměněné – až na L3 a rozdělení bloků CCX

AMD nezměnilo mezipaměti cache. Zůstává 32KB L1 cache pro data s 8cestnou asociativitou a latencí zřejmě 4 cykly, L2 cache je také 512KB s 8cestnou asociativitou a latencí snad pořád 12 cyklů.

Paměťový a cache subsystém Zenu 3

Kde je to ovšem jiné, je L3 cache. Souvisí to s jednou z mála zásadních změn, kterou Zen 3 provedl mimo samotná jádra. U Ryzenů 3000 a 4000 s jádry Zen 2 (a stejně tak u Zenu 1) byla jádra vždy spojena po čtyřech do tzv. CCX (Core Complex), v jehož rámci sdílela jeden blok L3 cache. V osmijádru proto musely být dva CCX každý s vlastní L3, které spolu komunikovaly jen pomocí propojovací logiky Infinity Fabric.

Zen 3 místo toho spojuje jádra do osmijádrových CCX, které celé sdílejí jeden blok L3 cache. U procesorů s počtem jader do osmi je latence komunikace výrazně lepší, protože odpadá přenos informací s druhým CCX. Procesory s více než osmi jádry potřebují použít více CPU čipletů, takže tam už se dopady na výkon opět projevují, ale díky osmijádrovým CCX by měly být zmírněné.

Zen 3 přechází na orgnizaci po osmijádrových blocích CCX se sdílenou 32MB L3 cache. Jeden 7nm CPU čiplet již obsahuje jen jeden jediný CCX místo dvou propojených pomocí Infinity Fabric

Zatímco Zen 1 měl bloky L3 cache o kapacitě 8 MB a Zen 2 o kapacitě 16 MB (pro ta čtyři jádra v CCX), Zen 3 spolu s dvojnásobným počtem jader v CCX také zvedl kapacitu jeho L3 na 32 MB, což je nyní přístupné všem osmi jádrům (je to tedy, jako by se dva předchozí CCX sloučily, včetně jejich cache). Toto zvyšuje výkon tím, že mimo omezení potřeby žádat data z jiných bloků CCX mají také jádra přístup k většímu ucelenému bloku cache. Pokud je totiž aktivní jediné jádro, může teoreticky použít až těch 32 MB místo 16 MB, takže se mohou v některých případech hodně omezit cache missy. V praxi to bude trošku složitější, zdá se, že kapacita TLB bufferů v jádře není dost velká pro maximální využití celé L3 cache (pokud program nepoužívá velké stránky). Nicméně když budou L3 aktivně používat čtyři nebo více jader, už by toto omezení nemělo platit. Uvidíme, zda se TLB zvětší v příštích generacích…

Velká 32MB L3 má i svá negativa. Zdvojnásobení kapacity způsobilo vyšší latenci. Ta se zhoršila o asi 7 cyklů na průměrných 46 cyklů (přesná hodnota se liší podle toho, do které slice z kterého jádra se přistupuje). Také se nezvýšila celková maximální propustnost, takže pokud by v osmijádrovém CCX všechna jádra například četla z cache, dosáhne každé jen poloviční propustnosti proti tomu, co je dosažitelné v čtyřjádrovém CCX v Zenu 2. AMD ale zvětšilo frontu pro požadavky na data z paměti při obsluze „cache miss“ z 96 na 192 položek, takže zde je kapacita fronty na jádro zachována.

L3 cache zůstává převážně exkluzivní, plní se daty, které vypadnou z L2 (a potažmo L1), takže jde o tzv. victim cache.

Mimochodem: zatím vydané procesory s jádry Zen 3 (Ryzeny 5000 „Vermeer“ pro socket AM4) mají 32MB cache, ale nemusí to platit vždy. Mobilní/APU Verze „Cezanne“ pro notebooky bude asi mít kapacitu odlišnou. U APU na bázi Zenu 1 (Raven Ridge, Picasso) a Zenu 2 (Renoir) AMD používalo jen 4MB L3 cache na jeden CCX. Podle úniků se zdá, že mobilní Zen 3 by na tom mohl být lépe a už by mohl mít 16MB L3 cache. Tedy poloviční proti Vermeeru, ale 4× větší (z pohledu jednoho jádra) než dříve. Ale tyto procesory zatím nebyly vydány ani oznámeny, takže zde ještě není jisto.

Paměťový řadič a IO čiplet převzaté z předchodzí generace

Za L3 cache už se dostáváme do stavu, kdy procesor čte nebo zapisuje do operační paměti. Její řadič je už ale v IO čipletu, který je použitý stejný, jako v procesorech Ryzen 3000. Výkon přístupu do paměti se tedy fyzicky příliš nezlepší, ovšem přesto mohou uživatelé pozorovat zlepšení reálného výkoná díky větší/lepší cache v CPU čipletu a lepšímu prefetchi plus třeba oněm page walkerům navíc.

Schéma zapojení procesoru Ryzen 5000 s dvěma CPU čiplety

Mělo by nadále platit, že komunikace s IO čipletem probíhá pomocí logiky Infinity Fabric, a to s datovou šířkou 16 bajtů za cyklus při zápisu a 32 bajtů za cyklus při čtení (propustnost pak závisí na frekvence IF, která je závislá na rychlosti, s jakou běží paměti DDR4). Čtení je tedy dvakrát rychlejší. Toto se může ukázat jako bottleneck v syntetických benchmarcích, kdy procesory s jedním CPU čipletem (6 a 8jádra) mají nižší maximální výkon v zápisu než dvoučipletové modely (12 a 16jádra). V praxi by to asi moc vadit nemělo.


Minulý měsíc AMD vydalo procesory Ryzeny 5000. Jejich architektura Zen 3 přinesla nakonec možná víc, než se čekalo, výkon na 1 MHz někde převyšuje i IPC nejnovějšího jádra Intelu Willow Cove (Tiger Lake). Zen 3 je podle AMD jeho největší překopání architektury od vůbec prvního Zenu, pročež se podíváme, jaké změny v něm inženýři provedli, aby dokázali porazit Intel i v jednovláknovém a herním výkonu.

IPC: zvýšení je různé podle aplikace (či testu)

AMD samotné uvádí, že IPC jádra Zen 3 je o 19 % vyšší než u Zenu 3, čímž se myslí zvýšení výkonu na 1 MHz frekvence. Jinými slovy, dejme tomu, že budeme mít jádro Zen 2 na stejné frekvenci (třeba 4,0 GHz) jako jádro Zen 3. Zen 3 by při stejném taktu měl mít o 19 % vyšší výkon. Toto ovšem platí v průměru či přibližně, reálně se změny IPC různí program od programu. Někde například Zen 3 může mít vyšší IPC než Intel Tiger Lake, jinde ne.

IPC architektury Zen 3 v porovnání se Zenem 2 podle AMD (výsledných 19 % je geometrický průměr těchto úloh)

Oněch 19 % od AMD vychází z měření v 26 aplikacích měřených na osmi jádrech (16 vláknech) při 4,0 GHz. Tyto programy můžete vidět v následujícím grafu, kde je vidět, že reálně bylo naměřené zlepšení IPC od +9 % po +39 %. Všimněte si ale, že největší přínosy AMD naměřilo u her, kde to nebude projev vyššího hrubého výkonu jádra, ale často projev větší L3 cache a toho, že je procesor složený z jednoho CCX a ne ze dvou. Zahrnutí her do průměru jinými slovy možná trošku „smrdí“ a zkreslilo průměr. Proto je oněch +19 % možná příliš optimistické číslo. Podívejme se proto ještě na jiné testy IPC.

ComputerBase skutečně naměřil nižší nárůst. Průměrné zlepšení IPC mu vyšlo jen +11 %, ovšem nešlo o srovnání jednovláknové, ale o srovnání 16jader Ryzen 9 3950X a 5950X zamčených na 3,6 GHz. Je možné, že rozdíl v IPC zkreslilo zase směrem dolů to, že přece jenom při vytížení všech 32 vláken už je asi často saturován dvoukanálový paměťový řadič. Je možné, že Zen 3 by měl na víc, ale už to nedovoluje propustnost pamětí, které má stejně rychlé jako Zen 2 a to výkon limituje.

V jednom vlákně při 3,6 GHz naměřil stejný test zlepšení IPC o 14–15 %, což už je lepší. Ovšem jednovláknový test používal méně aplikací. Toto může, ale nemusí podporovat závěr, že předchozí číslo z multi-threadu je podhodnocené, protože se staly úzkým hrdlem paměti.

Měření IPC jádra Zen 3 proti Zenu 2 v recenzi ComputerBase, single-thread

Další měření provedl Techspot. Ten testoval Cinebench, kompresi v 7-zipu, Blender, Corona a V-Ray (poněkud přílišný důraz na 3D rendering), ale také Adobe Premiere, Photoshop a After Effects a DaVinci Resolve. Tentokrát to bylo měřeno na osmi jádrech a zjištěno bylo zvýšení IPC v průměru o 12 % v aplikacích a o 22 % ve hrách. Celkově v průměru +16 %. Ale opět, měřit IPC na hrách je poněkud problematické – možná to ani moc nedává smysl, i když informativní údaj to asi pro hráče může být.

Naopak AnandTech došel k výsledku, který de facto validuje 19% číslo od AMD, ačkoliv hry k měření nepoužívá. V jeho případě použil jednovláknová měření v testu SPEC a ničem jiném (SPEC má ale mnoho různých subtestů). V souhrnu z jednotlivých subtestů SPEC2006 a SPEC2017 mu vyšlo, že průměrné zvýšení IPC je +21,38 %, ale realističtěji spíše +19,12 %, což je výsledek, pokud se eliminuje problematický test libquantum. Ten typicky hodně ovlivňují triky v kompilátorech (Intel ICC), které jsou určené jen a čistě pro manipulování tohoto testu a nejsou jinak možné v praxi. Zen 3 v něm má IPC vyšší prakticky dvojnásobně, ale tento výstřelek je asi nikoliv vlivem kompilace, ale tím, že se test vejde do jeho 32MB L3 cache a u ostatních CPU ne. Mediánní průměr z testů je 18,86 %. Čísla AnandTechu tedy vycházejí pro Zen 3 hodně dobře. Má podle nich mimochodem o dost vyšší IPC než Intel Tiger Lake/Ice Lake – v SPECint2017 o 13 % a v SPECfp2017 o 3 %.

Měření IPC jádra Zen 3 proti v recenzi AnandTechu, single-thread v SPEC2017

SPEC je ale asi už atypický a vykazuje nejspíš vyšší než průměrný rozdíl mezi Zenem 2 a Zenem 3, pokud tedy AnandTech neudělal nějakou chybu. Trošku problematické je, že neměřil při stejné frekvenci, ale s aktivním turbo boostem a poté výsledná skóre přepočítal podle frekvencí – zde je samozřejmě prostor pro chybu, pokud nebyla průměrná frekvence změřena přesně. Je možné, že třeba počítal s nižší frekvencí, než na které Zen 3 reálně běžel, a u Zenu 2 a jader Intel naopak. Možná výsledek ovlivnily odlišné paměti neo to, že Ice Lake a Tiger Lake byly testované v noteboocích.

Vlastní měření IPC odlišné od ostatních provedl také The Stilt a publikoval ho na Overclock.net. Jde o test v celé řadě programů, některých běžných (x264, x265), jiných poměrně neobvyklých. Celou sadu grafů najdete zde v albu na Imgur. V průměru vychází Stiltovi pro Zen 3 o 18,3 % lepší IPC než pro Zen 2 a 23,9 % vyšší proti Skylake/Comet Lake.

Měření IPC jádra Zen 3 proti v testu od The Stilta, single-thread v 36 programech (Legenda: VMR = Zen 3, CML-S = Intel Comet Lake, 100 % je IPC/výkon Zenu 2. Údaje s poznámkou (ER) jsou očištěné o nejhorší a nejlepší výsledek, tedy výsedky s velkou odchylkou od průměru)

Mimochodem, i zde byly některé výstřelky – pokud se odstraní nejhorší a nejnižší skóre pro každé CPU, tak vyjde průměrné zlepšení IPC pro Zen 3 hůř, vychází už jen o 14,4 % vyšší proti jádru Zen 2. U Zenu 3 má takové abnormálně vysoké zvýšení výkonu test Vampire Numbers (+180 %, takže vypuštění tohoto výsledku je asi na místě). Jinak by tyto testy měly být jednovláknové na fixní frekvenci 4,0 GHz. Ovšem zatímco Zen 2 a Zen 3 měly paměti DDR3-3200, Comet Lake jen DDR4-2933 (protože víc nepodporuje oficiálně).

Zrychlení díky lepší efektivitě místo přidávání jednotek (zatím?)

Zen 3 tedy udělal docela velké změny v jádře (ve výpočetních ALU a FPU částech je dost změněna koncepce), ale AMD nepřikročilo ke změnám jako je zvětšení cache a přidání samotných výpočetních jednotek (ALU, FMAC). Toto jádro tedy zvyšuje efektivitu a IPC téměř vždy jen tím, že pouze lépe využívá stejný počet jednotek, jako měl Zen 2. Například díky omezení konfliktů na portech a změněným schedulerům. Výjimkou je ona posílená Load/Store část.

Podobně jako nerozšířilo jádro o víc ALU, ani AMD nezvětšilo výrazně out of order fronty jako je reorder buffer, jenž je jen 256 proti 352 u Intelu a ~600 u Apple (Apple má jinak také 4× větší L1 cache).

Je možné, že toto „přidání hrubé síly“ si tedy AMD nechává do budoucích dalších architektur, ale samozřejmě těžko hádat, kdy (a zda vůbec), by třeba přidání ALU mohlo nastat. Jádro Zen 4 by asi mohlo opět být spíše evoluční jako byl Zen 2 a přidávat evoluční zlepšení, takže další velké překopání by možná mohl přinést až Zen 5 (rok 2023 nebo 2024?). Vkrádá se otázka, jeslti třeba AMD nemohlo být s cíli architektury ambicióznější: pokud je Zen 3 celkově přepracované jádro, nemohl být cíl vyšší než to o cca 11 až 16 % vyšší IPC, které není zas tak daleko od změn možných s inkrementálním přístupem k vývoji nových jader? Je možné, že hypoteticky mohlo AMD přijít i s agresivnějším redesignem. Ovšem na druhou stranu je nutno pamatovat, že Zen 3 je navržený pro stejný 7nm proces jako Zen 2, inženýři tedy museli dávat velký pozor, aby při zlepšení výkonu nezvýšili i spotřebu. Jinak by totiž kvůli omezení TDP výkon stoupl jen málo. Je možné, že základ Zenu 3 pořádně ukáže, co v něm je, až ve vylepšení podobě na 5nm procesu, tedy v podobě Zenu 4.

Shrnující srovnání Zenu 2 a Zenu 3 od AMD

Co dál Zen 3 nepřináší, je nějaká forma podpory AVX-512, byť i třeba se sníženým výkonem, kdy by se 512bitové operace vykonávaly ve dvou cyklech. Je možné, že toto je strategické rozhodnutí, kdy AMD nechce podporovat toto instrukční rozšíření (značně košaté, protože Intel přidal mnoho různých subsetů), dokud to nebude nezbytné. Možná dokonce může spekulovat na to, že se toto rozšíření mimo superpočítače neprosadí a Intelu zbude jako spíše bagáže než benefit, nebo by ho dokonce mohl sám opustit, alespoň u některých CPU architektur. Přidání AVX-512 by vyžadovalo rozšíření registrů a v FPU na dvojnásobek (512bitové registry ZMM), takže asi nejde o úplně zanedbatelnou křemíkovou investici. Zda se tyto instrukce někdy v procesorech AMD objeví, tak zůstává nejasné.

(Momentálně) nejlepší CPU jádro ve světě x86 procesorů?

Podpora AVX-512 zůstává jednou z výhod Intelu. Zejména na serverových verzích jader, která mají druhou 512bitovou jednotku pro FMAC, ale poměrně užitečná je i základní verze bez ní, kteoru mají jádra Sunny Cove/Willow Cove v procesorech Intel Ice Lake a Tiger Lake – a kterou také budou mít 14nm desktopová Rocket Lake, která Intel proti Ryzenům 5000 vydá za nějaká tři měsíce od nynějška. V aplikacích schopných využít AVX-512 by tedy mohl Intel AMD dál utíkat, ale vypadá to, že v ostatních případech už typicky Zen 3 architektonicky dohnal nejnovější jádra Intelu, ba spíš je často i předhání.

Už remíza by zde byla vzhledem k poměru velikostí a rozpočtů obou firem docela slušný úspěch. Ale vypadá to, že AMD dílem lehce vyšším IPC, dílem vyšším taktem (proti Tiger Lake) Intel poráží. Podle recenzí to vypadá, že Zen 3 v Ryzenech 5000 dobyl pro AMD absolutní výkonnostní trůn.

Zdroje: AMD, AnandTech