Zen 2 — AMD Ryzen 7 3700X und Ryzen 9 3900X im Test

Artikel-Index:

Technische Details: Kerne, Caches, FPU, Integer

Bereits von der letz­ten AMD-Archi­tek­tur namens Bull­do­zer hin zu Zen konn­te AMD eine mitt­le­re Leis­tungs­stei­ge­rung pro Takt (“IPC”) von 52 Pro­zent errei­chen, nach­dem 40 Pro­zent die ursprüng­li­che Design-Vor­ga­be waren. Das ist ein enor­mer Sprung! Manch­mal mag man sich fra­gen, ob nicht irgend­wann ein­mal ein Limit erreicht ist, nach­dem das nun schon seit Jahr­zehn­ten so geht. Aber anschei­nend sind wir noch nicht so weit, denn für Zen 2 stellt AMD aber­mals eine IPC-Stei­ge­rung von ca. 15 Pro­zent in Aus­sicht. Wir zei­gen auf die­sen Sei­ten, woher die­se kom­men soll.

Präsentation zu Ryzen 3000

L0-Cache
Mit der Ein­füh­rung von Zen brach­te AMD ein Design-Ele­ment zur Anwen­dung, das bis­he­ri­ge AMD-Archi­tek­tu­ren noch nicht genutzt hat­ten, bei Intel aber seit dem Pen­ti­um 4 (Trace-Cache), spä­tes­tens seit San­dy Bridge in der heu­ti­gen Form zum Ein­satz kam: ein Micro-Op-Cache. Die­ser Cache, manch­mal auch L0-Cache genannt, hält fer­tig deko­dier­te Befeh­le vor, die von den Rechen­ein­hei­ten sofort aus­ge­führt wer­den kön­nen, ohne zuvor noch ein­mal aus den x86-Befeh­len deko­diert wer­den zu müs­sen. Das ent­las­tet den Deko­der und spart Strom. Anschei­nend hat sich das Kon­zept bewährt, denn AMD hat den Cache gegen­über Zen 1 gleich mal auf 4K Instruk­tio­nen ver­dop­pelt.

L3-Cache
Ver­dop­pelt hat AMD auch die Grö­ße des L3-Cache. Das ist eine oft prak­ti­zier­te Vor­ge­hens­wei­se, wenn sich durch Ver­klei­ne­rung der Fer­ti­gungs­struk­tu­ren – hier 12 nm auf 7 nm – Spiel­räu­me erge­ben, die ein­ge­spar­te Die-Flä­che mög­lichst güns­tig in mehr Leis­tung zu reinves­tie­ren. Da bie­ten sich die Caches natür­lich an, da an die­ser Stel­le zum einen kaum Ent­wick­lungs­auf­wand anfällt und zum ande­ren Cache ohne wei­te­res Zutun der Soft­ware-Ent­wick­ler zu mehr Leis­tung führt. Die Mehr­leis­tung gibt’s hier auto­ma­tisch, auch für älte­re Soft­ware, die nicht mehr z.B. an neu ein­ge­führ­te SIMD-Befeh­le ange­passt wird. Da AMD die Core-Com­plex-Bau­wei­se bei­be­hal­ten hat (CCX), ste­hen je 4 Ker­nen nun nicht mehr 8 MiB, son­dern 16 MiB L3-Cache zur Ver­fü­gung. Je Die kommt AMD damit nun auf 32 MiB L3-Cache.

Präsentation zu Ryzen 3000

L1-Cache
Auch tie­fer im Kern, an den L1-Caches, hat AMD geschraubt. Wäh­rend Zen 1 noch einen L1-Inst­ruc­tion-Cache von 64 KiB auf­wies, muss Zen 2 nun mit 32 KiB aus­kom­men. Natür­lich ver­klei­nert man einen Cache nor­ma­ler­wei­se nicht ohne Hin­ter­ge­dan­ken. Klei­ne­re Caches kön­nen eine kür­ze­re Latenz auf­wei­sen, wenn sie ent­spre­chend kon­zi­piert sind. Zudem hat AMD als Gegen­maß­nah­me die Asso­zia­ti­vi­tät von 4-way auf 8-way ver­dop­pelt, was den Cache fle­xi­bler und effi­zi­en­ter nutz­bar macht. Zudem dürf­te bei der Desi­gn­über­le­gung auch der ver­grö­ßer­te Micro-Op-Cache eine Rol­le gespielt haben. Wäh­rend der L1-Inst­ruc­tion-Cache x86-Befeh­le vor dem Deko­der puf­fert, hält der Micro-Op-Cache die bereits deko­dier­ten RISC-ähn­li­chen Befeh­le vor. Das ver­rin­gert den Druck auf den Deko­der und damit auch auf den L1-I-Cache, wes­we­gen AMD hier Flä­che spa­ren konn­te ohne groß Leis­tung ein­zu­bü­ßen.

Präsentation zu Ryzen 3000

Präsentation zu Ryzen 3000

Wie bei jeder Archi­tek­tur­über­ar­bei­tung darf auch bei Zen 2 der Pas­sus “impro­ved branch pre­dic­tion” nicht feh­len. Die Sprung­vor­her­sa­ge zu ver­bes­sern muss auch Ziel einer moder­nen Out-of-Order-Archi­tek­tur mit hohen Takt­fre­quen­zen und damit rela­tiv lan­gen Pipe­lines sein, denn der­ar­ti­ge Pro­zes­so­ren spe­ku­lie­ren, wohin die Rei­se im Fort­lauf des Codes gehen könn­te und war­ten nicht ab, bis die Ent­schei­dung “Sprung ja oder nein” im Code wirk­lich fest­steht. Statt­des­sen arbei­ten sie Pro­gramm­zwei­ge schon auf Ver­dacht ab und ver­las­sen sich dabei auf die Sprung­vor­her­sa­ge. Lag sie rich­tig, hat der Pro­zes­sor schon jede Men­ge Arbeit vor­ab auf Ver­dacht erle­digt und damit Rechen­zeit ein­ge­spart, wo ein In-Order-Pro­zes­sor erst jetzt anfan­gen wür­de zu rech­nen. Teu­er wird es jedoch wenn die Sprung­vor­her­sa­ge falsch lag. Dann müs­sen alle vor­ab erle­dig­ten Sachen rück­gän­gig gemacht, Ergeb­nis­se ver­wor­fen und die Pipe­line geleert wer­den. Ein sol­cher Pipe­line-Flush dau­ert etli­che Tak­te und der gesam­te Ablauf kommt ins Sto­cken, sodass eine Sprung­vor­her­sa­ge mit mög­lichst hoher Tref­fer­quo­te unab­ding­bar ist. Wie hoch sie bei Zen 2 liegt, ver­rät AMD lei­der nicht – üblich sind mitt­ler­wei­le jedoch weit über 90 Pro­zent – nur, dass die Wahr­schein­lich­keit, dane­ben zu lie­gen, um 30 Pro­zent redu­ziert wor­den ist. Nach eige­nen Anga­ben setzt AMD bei Zen 2 einen TAGE Branch Pre­dic­tor ein.

Mit der Sprung­vor­her­sa­ge ein­her gehen die Ver­bes­se­run­gen des Branch Tar­get Buf­fer (BTB). Auch hier hat AMD gefeilt und den L1BTB auf 512 Ein­trä­ge ver­dop­pelt und den L2BTB von 4K auf 7K ver­grö­ßert.

Präsentation zu Ryzen 3000

Eine mas­si­ver Umbau wur­de an der Fließ­kom­ma-Ein­heit (FPU) vor­ge­nom­men: AMD hat die Brei­te der FPU glatt ver­dop­pelt. 256 Bit kön­nen nun auf einen Rutsch ver­ar­bei­tet wer­den, wohin­ge­gen bis ein­schließ­lich Zen 1 der­art brei­te Zah­len auf zwei 128-Bit-Berech­nun­gen auf­ge­teilt wer­den muss­ten. Die letz­te Ver­grö­ße­rung der FPU-Brei­te ist schon eine Wei­le her. Beim Wech­sel von K8 auf K10 im Jahr 2007 wur­de hier zuletzt Hand ange­legt, als es von 64 Bit auf 128 Bit ging. So ein grund­le­gen­der Design­schritt will gut über­legt sein, denn er kos­tet Flä­che und natür­lich gibt es die höhe­re Leis­tung auch in Sachen Strom­ver­brauch nicht umsonst. Zudem nut­zen nur AVX/A­VX2-Befeh­le der­art brei­te Daten­ty­pen, sodass folg­lich auch nur sol­che Berech­nun­gen davon pro­fi­tie­ren. Anschei­nend hat AMD ent­schie­den, dass nun die Zeit reif dafür ist und mitt­ler­wei­le genü­gend Anwen­dun­gen AVX nut­zen, damit sich eine auf­wän­di­ge­re FPU lohnt. Wir wer­den das natür­lich spä­ter bei den Bench­marks im Auge behal­ten.

Präsentation zu Ryzen 3000

Neben der FPU hat auch die Inte­ger-Ein­heit eini­ges an Fein­schliff erfah­ren. Diver­se ver­grö­ßer­te Puf­fer sowie ver­län­ger­te War­te­schlan­gen sind obli­ga­to­risch bei Shrinks. Aber dabei blieb es nicht. AMD hat Zen 2 eine zusätz­li­che Address Genera­ti­on Unit (AGU) spen­diert, sodass nun ins­ge­samt 7 (statt 6) Befeh­le gleich­zei­tig aus­ge­führt wer­den kön­nen, sofern der Befehls­mix genau zur Anzahl der Ein­hei­ten passt. Zudem soll AMDs Imple­men­tie­rung von Simul­ta­ne­ous Mul­ti­threa­ding (SMT) ver­bes­sert wor­den sein und zu weni­ger Locks füh­ren, was den Gesamt­durch­satz ver­bes­sern soll.

Präsentation zu Ryzen 3000

Präsentation zu Ryzen 3000

Bezüg­lich Load/Store hat AMD offen­bar eini­ge Fla­schen­häl­se im Kern gewei­tet. Nicht nur die Latenz beim Zugriff auf den L2 DTLB soll ver­kürzt wor­den sein, auch die Band­brei­te wur­de an meh­re­ren Stel­len erhöht, beim L1 glatt ver­dop­pelt, sodass die brei­te­ren Rechen­wer­ke auch schnell genug mit Daten ver­sorgt wer­den kön­nen und nicht leer­lau­fen. Dank der höhe­ren Trans­fer­ra­te kön­nen auch die Pre­fet­cher etwas größ­zü­gi­ger agie­ren ohne dabei die “nor­ma­len” Trans­fers zu brem­sen.

Vom Cache-Auf­bau her bleibt alles beim alten. Der L2-Cache ist uni­fied, trägt also Daten und Instruk­tio­nen und steht jedem Kern “pri­vat” in 512 KiB Grö­ße zur Ver­fü­gung. Der L3-Cache – nun in dop­pel­ter Grö­ße vor­han­den – ist wei­ter­hin ein Vic­tim-Cache des L2. Das heißt, im L3-Cache lan­det das, was vor­her aus den L2-Caches her­aus­ge­fal­len ist, in der Hoff­nung, dass es im wei­te­ren Pro­gramm­ver­lauf noch­mal benö­tigt wird. Durch die­se Design-Phi­lo­so­phie lie­gen Daten – anders als bei Intel – nie­mals gleich­zei­tig in L2- und L3-Cache.

Präsentation zu Ryzen 3000