AMD Ryzen 7 1800X Review – Teil 2

Artikel-Index:

Tiefenanalyse der Architektur

Um zu unter­su­chen, wie sich die Aus­füh­rung von Befeh­len zwi­schen Ryzen und ande­ren aktu­el­len x86-Archi­tek­tu­ren unter­schei­det, haben wir die Laten­zen und Durch­sät­ze ver­schie­de­ner Befeh­le mit Hil­fe von AIDA64 gemes­sen und ver­gli­chen. Hier­für wur­den zusätz­lich der Excava­tor-Core in Bris­tol Ridge (wel­cher bei AMD als IPC-Ver­gleichs­ba­sis dien­te) und Kaby Lake herangezogen.

In die­sen Ergeb­nis­sen sagt die Befehls­la­tenz aus, nach wie­viel Takt­zy­klen ein fol­gen­der Befehl mit dem Ergeb­nis des betrach­te­ten Befehls wei­ter­ar­bei­ten kann. Das spielt dann eine Rol­le, wenn die Out-of-Order-Aus­füh­rung des Pro­zes­sors und der Com­pi­ler nicht in der Lage sind, die­se Laten­zen durch geeig­ne­te Anord­nung der Befeh­le zu “ver­ste­cken”. Die Aus­wir­kung auf die durch­schnitt­li­che Rechen­leis­tung ist nicht so groß wie beim Durch­satz. Letz­te­rer bezif­fert, wie vie­le die­ser Befeh­le pro Takt maxi­mal gleich­zei­tig aus­ge­führt wer­den kön­nen und stellt das obe­re Limit des­sen dar, was Out-of-Order-Aus­füh­rung und der Com­pi­ler beim Zusam­men­stel­len des Pro­gramm­codes aus­nut­zen kön­nen. Von den Befeh­len wur­den zur Ver­mei­dung von Ver­zer­run­gen eini­ge Befeh­le und Befehls­kom­bi­na­tio­nen her­aus­ge­nom­men. Das betrifft z.B. die Befeh­le für tri­go­no­me­tri­sche Funk­tio­nen (kei­ne star­ken Unter­schie­de), Zufalls­zah­len­ge­ne­ra­tor (sel­ten genutzt), CPUID (eben­falls sel­ten genutzt) und non-tem­po­ral Moves (dazu spä­ter mehr).

Wir zei­gen hier für ver­schie­de­ne Befehls­grup­pen jeweils ein Latenz- und ein Durch­satz-Dia­gramm. Im ers­ten Bild  ist zu sehen, dass die Laten­zen der Inte­ger-Befeh­le (AMD64, X86) und MMX-Befeh­le beim Ryzen ähn­lich zum Kaby Lake und deut­lich nied­ri­ger sind als beim Excava­tor-Core. Die klas­si­chen x87-Floa­ting-Point-Befeh­le zei­gen leicht nied­ri­ge­re Laten­zen als selbst beim Kaby Lake.  In den Inte­ger-Divi­si­ons-Befeh­len setzt sich Ryzen dage­gen sicht­bar ab. Das wirkt sich u.a. auf den CPU-Z-Bench­mark (Per­lin-Noi­se-Berech­nung) als auch Tri­al Fac­to­ring in Prime95 aus.

In den Durch­satz-Wer­ten die­ser Befeh­le im zwei­ten Dia­gramm fal­len die MMX-Wer­te posi­tiv auf. Die­se Wer­te kön­nen aber auch nur für einen gro­ben Ver­gleich her­hal­ten, da die Befeh­le im real auf­tre­ten­den Befehls­mix ver­schie­de­ner Soft­ware mit ganz ande­ren Häu­fig­kei­ten auf­tre­ten. Letz­te­re wer­den bei­spiels­wei­se in die­sem Arti­kel gezeigt.

Die nächs­ten bei­den Dia­gram­me befas­sen sich mit den heu­te übli­chen SIMD-Erwei­te­run­gen. Da ist Ryzen von den Laten­zen her gegen­über Kaby Lake gut auf­ge­stellt und hat sich vor allem im Ver­gleich zu sei­nem Vor­gän­ger Bris­tol Ridge deut­lich ver­bes­sert. Sei­tens des Befehls­durch­sat­zes liegt Ryzen bei 128bittigen AVX-Befeh­len sogar etwas vor Kaby Lake, muss die­sen Vor­sprung aber bei AVX2 abge­ben. Das ist vor allem durch die gerin­ge Anzahl getes­te­ter 128-bit-AVX2-Befeh­le erklär­bar, wel­che vor­wie­gend VPMASKMOV-Vari­an­ten und Bit­schie­be­be­feh­le beinhal­ten. Bei 256bittigen AVX- und AVX2-Befeh­len war der deut­li­che Unter­schied im Ver­gleich zu Kaby Lake zu erwar­ten, da der Zen-Kern bekann­ter­ma­ßen nur 128-bit brei­te FPU-Ein­hei­ten besitzt. Den­noch schafft es Ryzen – trotz inter­ner Aus­füh­rung von 256-bit-Befeh­len als zwei 128-bit Micro-Ops – dabei eine gerin­ge­re Durch­schnitts­la­tenz vor­zu­wei­sen. Im Ver­gleich ist die gemit­tel­te 128­bit-AVX-Latenz deut­lich höher, was aber von einem grö­ße­ren Anteil getes­te­ter Divi­si­ons- und Wur­zel-Befeh­le ver­ur­sacht wird.

Bei den meis­ten Befehls­er­wei­te­run­gen der SSE-Fami­lie mit maxi­mal 128-bit Brei­te kann Ryzen in bei­den “Dis­zi­pli­nen” punk­ten. Das ist vor allem für älte­re Soft­ware interessant.

In den letz­ten bei­den Dia­gram­men sind die meis­ten der vie­len Spe­zi­al­be­fehls­er­wei­te­run­gen zusam­men­ge­fasst. Nur in einem der Pro­zes­so­ren vor­han­de­ne Erwei­te­run­gen wur­den von uns dabei weg­ge­las­sen. Da die­se Befehls­er­wei­te­run­gen oft nur in spe­zi­el­ler Soft­ware ver­wen­det wer­den, kön­nen sie zwar ent­spre­chen­de Aus­rei­ßer gut erklä­ren, aber nicht viel über die gene­rel­le Leis­tung der Pro­zes­so­ren aus­sa­gen. Hier ste­chen im Wesent­li­chen die Bit-Mani­pu­la­ti­ons-Befeh­le her­vor (ABM, BMI, BMI2, POPCNT), wo Ryzen gute Wer­te lie­fert, als auch die AES-Befeh­le, wel­che z.B. den hohen Durch­satz in ent­spre­chen­den Bench­marks (bspw. AES-Sub­test in Geek­bench) erklä­ren. Nicht ent­hal­ten sind auch die Befeh­le für non-tem­po­ral Loads und Stores, wel­che mög­li­cher­wei­se zu gerin­ge­rer Per­for­mance in Ashes of the Sin­gu­la­ri­ty führ­ten. In AIDA64 wird deren Latenz und Durch­satz u. a. in der Kom­bi­na­ti­on NT Load + NT Store gemes­sen. Mit über 700 Tak­ten ist die Latenz dabei fast dop­pelt so hoch als bei Kaby Lake. Neben der star­ken Ska­len­ver­zer­rung im Dia­gramm ist hier auch der Rea­li­täts­be­zug frag­lich, da zwi­schen und nach die­sen Befeh­len noch ande­rer Code aus­ge­führt wer­den würde.

 

 Ins­ge­samt zeigt sich der Zen-Kern inner­halb der Ryzen-Pro­zes­so­ren auch auf die­ser Ebe­ne als flott und durchsatzstark.