Analyse der vermuteten Zen-Architektur

Schon im März wussten wir über ein erstes Codefragment zu AMDs kommender Zen-Architektur zu berichten. Erstmals wurde hier der Befehlssatz angegeben, der alle modernen Erweiterungen bis AVX2 und FMA umfasst. Unser Forenmitglied Dresdenboy hat in seinem englischsprachigen Blog nun über weitere Details berichtet und ein Blockschaltbild entworfen, welches Zen nach aktuellem Wissensstand, gewürzt mit einigen Vermutungen, zeigen könnte. Auf dessen Basis haben wir eine detaillierte Darstellung erstellt und ziehen einen Vergleich mit Skylake:

Fehldarstellungen aufgrund von Copy-Paste-Fehlern im Code sind möglich!
Architekturbeschreibung
Auffallend ist erst einmal die Breite des Designs. Mit 10 Ports, von denen 8 direkt zu Ausführungseinheiten (blau) führen, setzt man ein deutliches Zeichen. Ältere Semester werden sich vielleicht an Alphas EV8 erinnern, der ersten CPU-Architektur, für die SMT implementiert werden sollte. Aus dem Chip wurde am Ende zwar nichts, aber das noch breitere EV8-Design, bestehend aus 8 INT-Pipes, 4 AGUs und 4 FPU-Pipes, zeigt, dass für SMT viele Ausführungsports kein Hindernis, sondern im Gegenteil ideal sind. Aus diesem Grund sollte auch AMDs Zen (sehr) gut mit zweifachem SMT skalieren, da die Wahrscheinlichkeit, dass sich zwei Threads einen Port streitig machen, sinkt, je breiter das Design ausgeführt wird. Eigentlich ist es bis auf seltene Spezialfälle fast unmöglich, da die häufig genutzten Einheiten wie Addierer und Multiplizierer (jeweils für INT und Floats) doppelt zur Verfügung stehen und an verschiedenen Ports hängen. Intel hat im Vergleich nur 4 Ports insgesamt, an welchen sowohl alle INT- als auch alle FP-Einheiten hängen, was die Verteilung der Instruktionen einschränkt. Allerdings kann man mit SMT immerhin Profit aus den immer vorhandenen Cache- und Speicherlatenzen ziehen. Wenn ein Thread auf Daten warten muss, hat der andere schließlich automatisch alle Ports zur Verfügung.
Doch wo bei Zen Licht ist, ist natürlich auch Schatten. Intels enges Port-Design und der gemeinsame INT+FP-Scheduler ermöglichten z.B., dass die FP-Einheit die Datenleitungen zum Cache der am selben Port hängenden INT-Einheit (und umgekehrt) verwenden kann. Schließlich kann im selben Takt kein Befehl an die jeweils andere Ausführungseinheit erfolgen. Bei AMD ist das nicht der Fall, d.h. dass AMD für volle 256 Bit zum Cache den doppelten Aufwand hätte, quasi 512 Leitungen verlegen müsste. Das scheint AMD im Moment noch zu viel zu sein. 256-Bit-x86-Befehle werden wie üblich in sogenannte Doubles decodiert, d.h. sie werden in 2 Subinstruktionen (MacroOps) zerlegt, was logischerweise 128-Bit-Instruktionen sein müssen. Aus dem Grund kann man dann das übliche AMD-Cachedesign erwarten: dual-ported mit 128 Bit für Leseoperationen, einfach für Schreiboperationen (grün). Die Adressen werden dabei von zwei Adressgenerierungs-Units (AGUs) berechnet.
Links zum Thema:
- Erste Anzeichen für 2016 kommende AMD-APUs im BIOS-Update entdeckt ()
- Jim Keller verlässt AMD abermals ()
- AMD Piledriver vs. Steamroller vs. Excavator — Leistungsvergleich der Architekturen ()
- AMDs Zen-Architektur zeigt sich in Compiler-Quellcode ()
- Der gesockelte Kabini — Athlon 5350 im Test ()