Analyse der vermuteten Zen-Architektur

Artikel-Index:

Schon im März wuss­ten wir über ein ers­tes Code­frag­ment zu AMDs kom­men­der Zen-Archi­tek­tur zu berich­ten. Erst­mals wur­de hier der Befehls­satz ange­ge­ben, der alle moder­nen Erwei­te­run­gen bis AVX2 und FMA umfasst. Unser Foren­mit­glied Dres­den­boy hat in sei­nem eng­lisch­spra­chi­gen Blog nun über wei­te­re Details berich­tet und ein Block­schalt­bild ent­wor­fen, wel­ches Zen nach aktu­el­lem Wis­sens­stand, gewürzt mit eini­gen Ver­mu­tun­gen, zei­gen könn­te. Auf des­sen Basis haben wir eine detail­lier­te Dar­stel­lung erstellt und zie­hen einen Ver­gleich mit Skylake:

Architekturskizze nach AMDs Compilerpatch. Fehldarstellungen aufgrund von Copy-Paste-Fehlern im Code sind möglich!
Archi­tek­tur­skiz­ze nach AMDs Com­pi­ler­patch.
Fehl­dar­stel­lun­gen auf­grund von Copy-Pas­te-Feh­lern im Code sind möglich!

Archi­tek­tur­be­schrei­bung
Auf­fal­lend ist erst ein­mal die Brei­te des Designs. Mit 10 Ports, von denen 8 direkt zu Aus­füh­rungs­ein­hei­ten (blau) füh­ren, setzt man ein deut­li­ches Zei­chen. Älte­re Semes­ter wer­den sich viel­leicht an Alphas EV8 erin­nern, der ers­ten CPU-Archi­tek­tur, für die SMT imple­men­tiert wer­den soll­te. Aus dem Chip wur­de am Ende zwar nichts, aber das noch brei­te­re EV8-Design, bestehend aus 8 INT-Pipes, 4 AGUs und 4 FPU-Pipes, zeigt, dass für SMT vie­le Aus­füh­rungs­ports kein Hin­der­nis, son­dern im Gegen­teil ide­al sind. Aus die­sem Grund soll­te auch AMDs Zen (sehr) gut mit zwei­fa­chem SMT ska­lie­ren, da die Wahr­schein­lich­keit, dass sich zwei Threads einen Port strei­tig machen, sinkt, je brei­ter das Design aus­ge­führt wird. Eigent­lich ist es bis auf sel­te­ne Spe­zi­al­fäl­le fast unmög­lich, da die häu­fig genutz­ten Ein­hei­ten wie Addie­rer und Mul­ti­pli­zie­rer (jeweils für INT und Floats) dop­pelt zur Ver­fü­gung ste­hen und an ver­schie­de­nen Ports hän­gen. Intel hat im Ver­gleich nur 4 Ports ins­ge­samt, an wel­chen sowohl alle INT- als auch alle FP-Ein­hei­ten hän­gen, was die Ver­tei­lung der Instruk­tio­nen ein­schränkt. Aller­dings kann man mit SMT immer­hin Pro­fit aus den immer vor­han­de­nen Cache- und Spei­cher­la­ten­zen zie­hen. Wenn ein Thread auf Daten war­ten muss, hat der ande­re schließ­lich auto­ma­tisch alle Ports zur Verfügung.

Doch wo bei Zen Licht ist, ist natür­lich auch Schat­ten. Intels enges Port-Design und der gemein­sa­me INT+FP-Scheduler ermög­lich­ten z.B., dass die FP-Ein­heit die Daten­lei­tun­gen zum Cache der am sel­ben Port hän­gen­den INT-Ein­heit (und umge­kehrt) ver­wen­den kann. Schließ­lich kann im sel­ben Takt kein Befehl an die jeweils ande­re Aus­füh­rungs­ein­heit erfol­gen. Bei AMD ist das nicht der Fall, d.h. dass AMD für vol­le 256 Bit zum Cache den dop­pel­ten Auf­wand hät­te, qua­si 512 Lei­tun­gen ver­le­gen müss­te. Das scheint AMD im Moment noch zu viel zu sein. 256-Bit-x86-Befeh­le wer­den wie üblich in soge­nann­te Dou­bles deco­diert, d.h. sie wer­den in 2 Sub­in­struk­tio­nen (Macro­Ops) zer­legt, was logi­scher­wei­se 128-Bit-Instruk­tio­nen sein müs­sen. Aus dem Grund kann man dann das übli­che AMD-Cache­de­sign erwar­ten: dual-por­ted mit 128 Bit für Lese­ope­ra­tio­nen, ein­fach für Schrei­b­ope­ra­tio­nen (grün). Die Adres­sen wer­den dabei von zwei Adress­ge­nerie­rungs-Units (AGUs) berechnet.