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.