AMD Ryzen 7 1800X Review – Teil 2
Tiefenanalyse der Architektur
Um zu untersuchen, wie sich die Ausführung von Befehlen zwischen Ryzen und anderen aktuellen x86-Architekturen unterscheidet, haben wir die Latenzen und Durchsätze verschiedener Befehle mit Hilfe von AIDA64 gemessen und verglichen. Hierfür wurden zusätzlich der Excavator-Core in Bristol Ridge (welcher bei AMD als IPC-Vergleichsbasis diente) und Kaby Lake herangezogen.
In diesen Ergebnissen sagt die Befehlslatenz aus, nach wieviel Taktzyklen ein folgender Befehl mit dem Ergebnis des betrachteten Befehls weiterarbeiten kann. Das spielt dann eine Rolle, wenn die Out-of-Order-Ausführung des Prozessors und der Compiler nicht in der Lage sind, diese Latenzen durch geeignete Anordnung der Befehle zu “verstecken”. Die Auswirkung auf die durchschnittliche Rechenleistung ist nicht so groß wie beim Durchsatz. Letzterer beziffert, wie viele dieser Befehle pro Takt maximal gleichzeitig ausgeführt werden können und stellt das obere Limit dessen dar, was Out-of-Order-Ausführung und der Compiler beim Zusammenstellen des Programmcodes ausnutzen können. Von den Befehlen wurden zur Vermeidung von Verzerrungen einige Befehle und Befehlskombinationen herausgenommen. Das betrifft z.B. die Befehle für trigonometrische Funktionen (keine starken Unterschiede), Zufallszahlengenerator (selten genutzt), CPUID (ebenfalls selten genutzt) und non-temporal Moves (dazu später mehr).
Wir zeigen hier für verschiedene Befehlsgruppen jeweils ein Latenz- und ein Durchsatz-Diagramm. Im ersten Bild ist zu sehen, dass die Latenzen der Integer-Befehle (AMD64, X86) und MMX-Befehle beim Ryzen ähnlich zum Kaby Lake und deutlich niedriger sind als beim Excavator-Core. Die klassichen x87-Floating-Point-Befehle zeigen leicht niedrigere Latenzen als selbst beim Kaby Lake. In den Integer-Divisions-Befehlen setzt sich Ryzen dagegen sichtbar ab. Das wirkt sich u.a. auf den CPU-Z-Benchmark (Perlin-Noise-Berechnung) als auch Trial Factoring in Prime95 aus.
In den Durchsatz-Werten dieser Befehle im zweiten Diagramm fallen die MMX-Werte positiv auf. Diese Werte können aber auch nur für einen groben Vergleich herhalten, da die Befehle im real auftretenden Befehlsmix verschiedener Software mit ganz anderen Häufigkeiten auftreten. Letztere werden beispielsweise in diesem Artikel gezeigt.
Die nächsten beiden Diagramme befassen sich mit den heute üblichen SIMD-Erweiterungen. Da ist Ryzen von den Latenzen her gegenüber Kaby Lake gut aufgestellt und hat sich vor allem im Vergleich zu seinem Vorgänger Bristol Ridge deutlich verbessert. Seitens des Befehlsdurchsatzes liegt Ryzen bei 128bittigen AVX-Befehlen sogar etwas vor Kaby Lake, muss diesen Vorsprung aber bei AVX2 abgeben. Das ist vor allem durch die geringe Anzahl getesteter 128-bit-AVX2-Befehle erklärbar, welche vorwiegend VPMASKMOV-Varianten und Bitschiebebefehle beinhalten. Bei 256bittigen AVX- und AVX2-Befehlen war der deutliche Unterschied im Vergleich zu Kaby Lake zu erwarten, da der Zen-Kern bekanntermaßen nur 128-bit breite FPU-Einheiten besitzt. Dennoch schafft es Ryzen – trotz interner Ausführung von 256-bit-Befehlen als zwei 128-bit Micro-Ops – dabei eine geringere Durchschnittslatenz vorzuweisen. Im Vergleich ist die gemittelte 128bit-AVX-Latenz deutlich höher, was aber von einem größeren Anteil getesteter Divisions- und Wurzel-Befehle verursacht wird.
Bei den meisten Befehlserweiterungen der SSE-Familie mit maximal 128-bit Breite kann Ryzen in beiden “Disziplinen” punkten. Das ist vor allem für ältere Software interessant.
In den letzten beiden Diagrammen sind die meisten der vielen Spezialbefehlserweiterungen zusammengefasst. Nur in einem der Prozessoren vorhandene Erweiterungen wurden von uns dabei weggelassen. Da diese Befehlserweiterungen oft nur in spezieller Software verwendet werden, können sie zwar entsprechende Ausreißer gut erklären, aber nicht viel über die generelle Leistung der Prozessoren aussagen. Hier stechen im Wesentlichen die Bit-Manipulations-Befehle hervor (ABM, BMI, BMI2, POPCNT), wo Ryzen gute Werte liefert, als auch die AES-Befehle, welche z.B. den hohen Durchsatz in entsprechenden Benchmarks (bspw. AES-Subtest in Geekbench) erklären. Nicht enthalten sind auch die Befehle für non-temporal Loads und Stores, welche möglicherweise zu geringerer Performance in Ashes of the Singularity führten. In AIDA64 wird deren Latenz und Durchsatz u. a. in der Kombination NT Load + NT Store gemessen. Mit über 700 Takten ist die Latenz dabei fast doppelt so hoch als bei Kaby Lake. Neben der starken Skalenverzerrung im Diagramm ist hier auch der Realitätsbezug fraglich, da zwischen und nach diesen Befehlen noch anderer Code ausgeführt werden würde.
Insgesamt zeigt sich der Zen-Kern innerhalb der Ryzen-Prozessoren auch auf dieser Ebene als flott und durchsatzstark.