Doping für CPUs — Möglichkeiten der Leistungssteigerung

Artikel-Index:

Mögliche Hebel zum Zweck der Leistungssteigerung (Superskalare Arbeitsweise)

Super­ska­la­re Arbeitsweise
Die von-Neu­mann Archi­tek­tur für Mikro­pro­zes­so­ren defi­niert einen Com­pu­ter sehr genau. So hat ein von-Neu­mann Pro­zes­sor strikt seri­ell und immer nach bestimm­tem Sche­ma zu arbei­ten. Wer mit der von-Neu­mann Archi­tek­tur noch nicht ver­traut ist, dem sei emp­foh­len, dem Link zu fol­gen, schließ­lich stellt die­se Archi­tek­tur bis heu­te die Grund­la­ge jeg­li­cher Mikro­pro­zes­so­ren dar.

Mit einem strikt die­ser Archi­tek­tur fol­gen­den Mikro­pro­zes­sor wür­de man jedoch nie­mals eine IPC > 1 errei­chen kön­nen. Die Tat­sa­che, dass heu­ti­ge Pro­zes­so­ren einen IPC » 1 haben, grün­det schlicht und ergrei­fend auf der Tat­sa­che, dass die Inge­nieu­re die von-Neu­mann Archi­tek­tur nach eige­nen Vor­stel­lung etwas ver­bo­gen haben und den Mikro­pro­zes­so­ren, begin­nend mit dem Intel Pen­ti­um (586), die super­ska­la­re Arbeits­wei­se bei­gebracht haben.
Ein super­ska­la­rer Mikro­pro­zes­sor unter­schei­det sich haupt­säch­lich im Leit­werk von einem nicht-super­ska­la­ren Mikro­pro­zes­sor. So teilt die­ses einer Rechen­ein­heit nicht mehr ledig­lich eine Instruk­ti­on pro Takt zu, son­dern gleich meh­re­re unter­schied­li­che Instruk­tio­nen für meh­re­re unter­schied­li­che Rechen­ein­hei­ten. Der Mikro­pro­zes­sor ist somit in der Lage, meh­re­re Instruk­tio­nen par­al­lel abzu­ar­bei­ten, solan­ge die­se oder ihr Ergeb­nis nicht von­ein­an­der abhän­gig sind. Somit kann ein zwei­fach super­ska­la­rer Mikro­pro­zes­sor bei glei­chem Takt im Ide­al­fall dop­pelt so vie­le Instruk­tio­nen pro Sekun­de abar­bei­ten, wie ein seri­el­ler Mikroprozessor.
Die­ser Effekt wird erreicht, indem an unter­schied­li­chen Stel­len der Mikro­pro­zes­sor opti­miert wird. So muss bei­spiels­wei­se der Deco­der mehr als nur eine Instruk­ti­on pro Takt­zy­klus deco­die­ren kön­nen, es müs­sen meh­re­re von­ein­an­der unab­hän­gi­ge Rechen­ein­hei­ten vor­han­den sein und auch die inter­ne Band­brei­te muss stim­men. So ver­sau­ern bei­spiels­wei­se im Fal­le des Pen­ti­um 4 pro Takt­zy­klus sechs Rechen­ein­hei­ten, da der Trace-Cache ledig­lich einen Durch­satz von 3 µOps/Takt erreicht.

Die ers­te Imple­men­tie­rung super­ska­la­rer Arbeits­wei­se fand im 586 (Intel Pen­ti­um) statt, der grund­sätz­lich nicht mehr ist, als ein super­ska­la­rer 80486 mit zwei­stu­fi­gem Deco­der. Die sog. U‑V Struk­tur des Deco­ders wur­de als­bald von der 4–1‑1 Struk­tur des Deco­ders des 686 (Intel Pen­ti­um Pro), der nun drei­stu­fig arbei­tet, abgelöst.

Out-of-order Exe­cu­ti­on
Eine wei­te­re Mög­lich­keit der Lauf­zeit­op­ti­mie­rung ist die sog. Out-of-Order Exe­cu­ti­on (zu Deutsch: “Aus­füh­rung außer­halb der Rei­hen­fol­ge”). Sie bie­tet einen enor­men Zuwachs an Geschwin­dig­keit, denn plötz­lich kön­nen Instruk­tio­nen bereits aus­ge­führt wer­den auch wenn sie noch gar nicht an der Rei­he wären (Stich­wort: Seri­el­ler Pro­gramm­fluss der von-Neu­mann Archi­tek­tur). Um dies bes­ser ver­ständ­lich zu machen, ein klei­nes Beispiel:
Neh­men wir an, dass eine Instruk­ti­on Daten aus dem Spei­cher ein­le­sen muss. Dies führt dazu, dass der Pro­zes­sor für meh­re­re hun­dert bis tau­send Takt­zy­klen auf die Daten war­ten muss und qua­si zum Nichts­tun ver­dammt ist. Gibt es jedoch in der Pipe­line Instruk­tio­nen, die von der der­zeit auf Daten aus dem Spei­cher war­ten­den Instruk­ti­on weder abhän­gen noch mit ihr in Zusam­men­hang ste­hen, kann der Pro­zes­sor die nöti­ge War­te­zeit mit der Aus­füh­rung die­ser Instruk­tio­nen überbrücken.
In Zusam­men­hang mit hohem ILP und TLP (sie­he fol­gen­des Kapi­tel) kann eine enor­me Ver­bes­se­rung der Per­for­mance, ohne not­wen­di­ge Ein­grif­fe sei­tens des Pro­gram­mie­rers oder Com­pi­lers, erreicht werden.