Hat Ryzen Probleme mit bestimmtem FMA3-Code?

Der Ent­wick­ler Alex­an­der “Mys­ti­ci­al” Yee ist bei sei­nem selbst ent­wi­ckel­ten Bench­mark namens Flops auf einen Feh­ler gesto­ßen, der mit sei­nem AMD-Ryzen-Sys­tem zum sofor­ti­gen Absturz des gesam­ten PCs führt. Dabei han­delt es sich um hoch­op­ti­mier­ten Code, der Sin­gle-Pre­ci­si­on-128-bit-FMA3-Befeh­le ver­wen­det. Nach sei­nem Pos­ting bei HWBot haben eini­ge User den Feh­ler nach­ge­stellt, sodass man aus­schlie­ßen kann, dass es ein indi­vi­du­el­ler Defekt sei­nes CPU-Exem­plars oder ein Bug sei­nes Main­boards ist. Nur ob der Absturz auf­grund eines Bugs im Ryzen-Pro­zes­sor geschieht oder auf­grund eines feh­ler­haf­ten Codes durch einen Bug im Com­pi­ler, ist noch nicht abschlie­ßend geklärt, da sich AMD laut Hei­se dazu noch nicht geäu­ßert hat.

Wem nun ein Hor­ror­sze­na­rio vom Schla­ge des Phe­nom-TLB-Bugs vor dem inne­ren Auge abläuft, der kann (ver­mut­lich) beru­higt wer­den. Der TLB-Bug — oder bes­ser gesagt der dar­auf fol­gen­de leis­tungs­min­dern­de Work­a­round — bestraf­te prak­tisch jeg­li­che Soft­ware, da in einem moder­nen Betriebs­sys­tem mit vir­tu­el­ler Adress­ver­wal­tung jedes Pro­gramm von einem funk­tio­nie­ren­den Trans­la­ti­on-Looka­si­de-Buf­fer pro­fi­tiert. Wenn hier ein Bug durch Deak­ti­vie­ren von Fea­tures umschifft wer­den muss – wirk­lich fixen kann man einen Feh­ler ja nur mit einem neu­en Step­ping – so wirkt sich das natür­lich nega­tiv auf die Leis­tung aus.

Soll­te sich wirk­lich ein Bug in die FMA3-Sek­ti­on der Ryzen-FPU geschli­chen haben, der per AGE­SA-Micro­code-Update umschifft wer­den müss­te, so wäre das zwar ärger­lich für AMD, für den Anwen­der unter dem Strich aber nur wenig rele­vant, von der Trag­wei­te her eher ver­gleich­bar mit dem IDIV-Bug des Lla­no, als mit dem TLB-Bug des Phe­nom. Damals hat­te AMD sei­ner K10-basier­ten APU Lla­no eine Hard­ware-IDIV-Ein­heit spen­diert; die jedoch unter bestimm­ten Umstän­den feh­ler­haft arbei­te­te. Daher muss­te AMD den neu­en Pfad per BIOS-Update wie­der deak­ti­vie­ren, was die Leis­tung bei den äußerst sel­ten vor­kom­men­den Inte­ger-Divi­sio­nen wie­der auf K10-Niveau redu­zier­te. Ähn­lich liegt der Fall bei Ryzen. Kaum eine Soft­ware nutzt FMA3-Code.

Ver­wun­der­lich wäre es den­noch – soll­te es sich wirk­lich um einen Bug in Ryzens FMA3-Ein­heit han­deln –, da Fused-Mul­ti­ply-Add mit 3 Ope­ran­den nichts Neu­es ist bei AMD-Pro­zes­so­ren, im Gegen­satz zu IDIV bei Lla­no damals. Schon Bull­do­zer unter­stütz­te Fused-Mul­ti­ply-Add, und zwar nicht nur das simp­le FMA3, son­dern sogar das vom ein­ge­stampf­ten SSE5-Pro­jekt abge­lei­te­te FMA4. Seit Ryzen ver­zich­tet AMD jedoch auf FMA4 und beschei­det sich wie Intel mit FMA3.

Dass kom­ple­xe Gebil­de wie Pro­zes­so­ren unzäh­li­ge Feh­ler auf­wei­sen, ist nor­mal. Vom Intel Has­well zum Bei­spiel sind aktu­ell 172 Bugs doku­men­tiert, von Sky­la­ke 141. Zu AMDs Ryzen ist lei­der noch kein Revi­si­on Gui­de online. Unge­wöhn­lich ist eher, dass es so ein Bug tat­säch­lich auch mal repro­du­zier­bar in die freie Wild­bahn schafft. Nor­ma­ler­wei­se wird der Groß­teil davon bereits in der Test­pha­se neu­tra­li­siert oder die Umstän­de sind so uto­pisch, dass sie in der Pra­xis so gut wie nie auf­tre­ten. Aber hier merkt man dann wohl doch die kom­plett tau­fri­sche Archi­tek­tur.