Details und Analyse der Zen-Architektur nach der Hot-Chips-Konferenz

Artikel-Index:

Die Fließkomma-Einheit im Detail

Hier hat sich ebenfalls viel getan. Einem gemeinsamen Scheduler, wie er auch von der Bulldozer-Reihe und den Cat-Kernen bekannt ist, wurde ein spezieller Puffer vorgeschaltet („NSQ” für „Non Scheduling Queue”), um vom Dispatcher bereits Fließkomma-Befehle zu empfangen. Das ermöglicht selbst bei mangelnden freien Plätzen im Fließkomma-Scheduler die Weiterarbeit des Dispatchers. So kann dieser z.B. die Integer-Einheit beliefern. Zusätzlich können für Befehle in der NSQ bereits Daten aus dem Speichersystem beschafft und bereitgestellt werden. So müssen diese Befehle im Scheduler nicht auf die Daten warten.

Pro Zyklus werden durch den Dispatcher bis zu 4 µOps bereitgestellt. Es ist anzunehmen, dass im Fall von Fließkomma-Befehlen mit Speicheroperanden gleichzeitig die entsprechenden bis zu 2 µOps an die AGUs in der Integer-Einheit gesendet werden. Wenn Daten aus dem Speicher geladen werden, erfolgt dies mindestens mit einer Latenz von 7 Takten aus dem L1-Cache. Das sind immerhin zwei Takte weniger als in der Bulldozer-Linie. Diese Daten (bis 2x128 Bit) durchlaufen noch die Lade-Konvertierungs-Einheit (LDCVT).

Die Fließkomma-Einheit bietet 96 Einträge im Scheduler, was durchschnittlich 24 Einträgen pro Pipeline entspricht. Allerdings gibt es durch dessen Ausführung als vereinter Scheduler für alle Fließkomma-Pipelines eine deutlich höhere Flexibilität als bei Integer-Code. Das ist hier auch wichtig, da diese Pipelines deutlich spezialisierter sind. Weiterhin stehen der Einheit 160 physische Register zur Verfügung. Neben aktuellen x86-SIMD-Erweiterungen bis AVX2 ist die FPU natürlich weiterhin mit x87-Befehlen kompatibel.

Im Groben gibt es zwei Multiplikations- (FMUL) und zwei Additions-Einheiten/-Pipelines (FADD). Die Fused-Multiply-Add-Befehle (FMA) werden in den FMUL-Pipelines ausgeführt. Da jede Pipeline zwei Leseports in das Fließkomma-Registerfile (FPRF) besitzt, muss für FMA-Befehle ggf. auf einen Port der FADD-Pipeline zurückgegriffen werden, sofern der Wert nicht als Ergebnis eines vorherigen Befehls auf kurzem Wege (Bypass) bereitgestellt wird. Die vielen anderen unterschiedlichen Fließkomma-Befehle und auch die Integer-SIMD-Befehle sind auf die vier Pipelines verteilt. Hier sei auch wieder auf die Grafik im Oktober-Artikel verwiesen. Mit diesen vier Pipelines besitzt ein Zen-Kern auch gleich vier x87-fähige Recheneinheiten, was gerade für Anwendungen mit einem hohem Bedarf an x87-Rechenleistung interessant sein dürfte. Neben einigen wissenschaftlichen Anwendungen gehört der Büro-Klassiker Excel dazu, welcher auch noch für komplexere Berechnungen in breitem Einsatz ist.

Wie Mike Clark ausführte, hat jede MUL-Einheit eine eigenständige FMA-Pipeline. Dieser Hinweis – zusammen mit den GCC-Patch-Informationen – könnte bedeuten, dass für normale Multiplikationen noch einmal eigene Multiplizierer bereitstehen, und zwar in einer Form, wie sie bei den Cat-Kernen verwendet wird. Dort ist eine sehr energiesparende Variante einer Multiplizier-Einheit im Einsatz, die geringe Latenzen aufweist, hingegen bei höheren Genauigkeiten (64-bit Double Precision und 80-bit Extended Precision) ein oder zwei Taktzyklen extra benötigt. Dank zweier FMUL-Einheiten fällt der Latenznachteil jedoch kaum ins Gewicht. Auch wurde in den Katzen-Kernen mit Hilfe dieser kompakten Multiplizierer-Einheit eine effiziente FDIV- und FSQRT-Einheit implementiert. Mit den kleinen Strukturen des 14LPP-Prozesses könnte man sich so eine Redundanz für mehr Energieeffizienz sogar leisten, da selbst die gesamte Jaguar-FPU im 28nm-Prozess nur 0,39 mm² belegt. Ob dies bei Zen aber so umgesetzt wurde, muss sich in weiteren Bekanntmachungen zur Zen-Mikroarchitektur zeigen.

Bei FMA-Berechnungen arbeiten je eine ADD- und MUL-Einheit zusammen, wobei nur der Leseport der ADD-Einheit zum FP-Register benutzt wird. Sollten die Daten in Form eines gerade fertiggestellten Berechnungsergebnisses den Weg über den Bypass zur FMA-Einheit finden, könnten im günstigsten Fall im gleichen Takt neben zwei FMA-Berechnungen auch noch zwei FP-Additionen durchgeführt werden. Das ist ein Vorteil, da in vielen Programmcodes mit Fließkomma-Berechnungen der Anteil von Additionen (was Subtraktionen einschließt) deutlich höher ist als der der Multiplikationen.

Die FMA4-Befehle werden von Zen nicht mehr unterstützt, wie wir bereits berichteten. Damit wird der damit verbundene hohe Aufwand bezüglich des FP-Registerfiles (viele Leseports) vermieden. Und dazu gibt es sogar noch ein Argument von seiten Intels: Dank Move Elimination werden zusätzliche Befehle zur Sicherung von Registern vor dem Überschreiben nebenbei und ohne große Hardware-Belastung ausgeführt.

Der Status der verarbeiteten µOps wird an die Retire-Queue zurückgemeldet, was auch hier bis zu 8 µOps pro Takt bedeutet. Hierzu zählen auch Befehle, die z.B. dank Move Elimination und Zeroing Idioms (effektives Nullsetzen von Registern) nicht explizit ausgeführt werden müssen. Für den Fall eines nicht korrekt vorhergesagten Sprunges wurde die Leerung der Fließkomma-Pipeline beschleunigt. Gegenüber der Bulldozer-Reihe mit geteilter FPU besitzt Zen nun pro Kern effektiv die vierfache Anzahl an AES-Einheiten, was zusammen mit der SHA1-Unterstützung einen deutlichen Schritt zur Unterstützung von Verschlüsselungsaufgaben darstellt. Das ist ein wichtiger Punkt für den Datacenter-Einsatz.

« Die Integer-Einheit im Detail» Die SMT-Umsetzung im Detail