Analyse der vermuteten Zen-Architektur

Artikel-Index:

INT- und FP-Rechenwerke

Die INT-Rechen­wer­ke beschrän­ken sich auf das Übli­che: Alle vier ALUs kön­nen die Stan­dard­be­feh­le abar­bei­ten, die drit­te Inte­ger Exe­cu­ti­on Unit (IEU2) ver­fügt über eine Inte­ger­di­vi­si­ons- und IEU1 über eine Inte­ger­mul­ti­pli­ka­ti­ons-Ein­heit, IEU0 und IEU3 kön­nen auch noch Call-Befeh­le abar­bei­ten. Erwäh­nens­wert ist, dass die bei Bull­do­zer ver­wen­de­ten AGLUs kei­ne Erwäh­nung mehr fin­den, die dort abge­ar­bei­te­te LEA-Instruk­ti­on wird in den nor­ma­len ALUs berechnet:

Zens INT-Einheiten laut Compiler-Quellcode
Zens INT-Ein­hei­ten laut Compiler-Quellcode

Bei den FP-Ein­hei­ten ist die Sache etwas weni­ger über­sicht­lich. Grob kann man eine Zwei­tei­lung erken­nen, die ers­ten bei­den Ein­hei­ten FP0 und FP1 arbei­ten Vec­tor-Mul­ti­pli­ka­tio­nen (SSE/AVX) und MMX-Addi­tio­nen ab, wäh­rend FP2 und FP3 für Vec­tor-Addi­tio­nen zustän­dig sind. FP3 ver­fügt außer­dem über eine Divi­si­ons­ein­heit, alte x87-Instruk­tio­nen wer­den an FP0 und FP3 geschickt; FP1 und FP2 sind die Kan­di­da­ten für logi­sche Berech­nun­gen mit AVX. Zwar gibt es auch eine FMA-Fähig­keit, aller­dings die­se wird — wie die bereits erwähn­ten 256-Bit-Befeh­le — nur mit Dou­bles imple­men­tiert. Bei FMA arbei­tet die Add-Ein­heit FP3 ent­we­der mit den Mul­ti­pli­ka­tor­re­chen­wer­ken an FP1 oder FP2 zusam­men. Wie­so die Adder von FP2 nicht berück­sich­tigt wer­den, ist im ers­ten Moment unklar. Dres­den­boy fie­len auf den zwei­ten Blick hin­ge­gen die War­te­zy­klen der bei­den Mul­ti­pli­ka­tor­ein­hei­ten auf. Laut den Ein­trä­gen in besag­tem Code­frag­ment kön­nen die­se nur alle fünf Tak­te Befeh­le ent­ge­gen­neh­men. Ein ein­zel­ner Adder wäre rech­ne­risch also genug, um im Schnitt alle 2,5 Tak­te ein Add-Ergeb­nis zur FMA-Berech­nung zur Ver­fü­gung zu stellen:

Zens FPU laut Compiler-Quellcode
Zens FPU laut Compiler-Quellcode

Soll­te sich die­ser Umstand bewahr­hei­ten, kann man gleich­wohl auch wei­te­re Schluss­fol­ge­run­gen zie­hen: Seit dem K7 waren AMDs FPUs immer “ful­ly pipe­lined”, d.h. sie konn­ten die Befeh­le wie am Fließ­band abar­bei­ten, mit­un­ter also jeden Takt Befeh­le ent­ge­gen­neh­men. Nur die klei­ne Mul­ti­pli­ka­ti­ons­ein­heit der Puma-Ker­ne war nicht “ful­ly pipe­lined”. Der Code könn­te also ein Indiz dafür sein, dass sich AMD im Fal­le von Zens Aus­füh­rungs­ein­hei­ten im Cat-Regal bedient hat. Wie schwer die­ser Umstand aus Leis­tungs­sicht ins Gewicht fal­len wird, bleibt abzu­war­ten. Immer­hin gibt es je zwei Ein­hei­ten statt nur einer, außer­dem wird AMD sicher­lich die umlie­gen­den Puf­fer, Caches, etc. opti­mie­ren, um die Ein­hei­ten bes­ser aus­las­ten zu kön­nen. Solan­ge man den Kern nicht mit SMT belas­tet, könn­te das also durch­aus in einer guten IPC resultieren.

Ins­ge­samt fällt am Design der FPU auf, dass die Ein­heit “FP2” eher schwach mit Aus­füh­rungs­ein­hei­ten aus­ge­stat­tet ist, wäh­rend FP3 eher zu vie­le hat. Even­tu­ell liegt hier noch ein Feh­ler im Code vor, z.B. wäre die FMA-Fähig­keit eher bei FP2 sinn­voll, um alle Ports aus­ba­lan­ciert zu halten.