Doping für CPUs — Möglichkeiten der Leistungssteigerung
Mögliche Hebel zum Zweck der Leistungssteigerung (Superskalare Arbeitsweise)
Superskalare Arbeitsweise
Die von-Neumann Architektur für Mikroprozessoren definiert einen Computer sehr genau. So hat ein von-Neumann Prozessor strikt seriell und immer nach bestimmtem Schema zu arbeiten. Wer mit der von-Neumann Architektur noch nicht vertraut ist, dem sei empfohlen, dem Link zu folgen, schließlich stellt diese Architektur bis heute die Grundlage jeglicher Mikroprozessoren dar.
Mit einem strikt dieser Architektur folgenden Mikroprozessor würde man jedoch niemals eine IPC > 1 erreichen können. Die Tatsache, dass heutige Prozessoren einen IPC » 1 haben, gründet schlicht und ergreifend auf der Tatsache, dass die Ingenieure die von-Neumann Architektur nach eigenen Vorstellung etwas verbogen haben und den Mikroprozessoren, beginnend mit dem Intel Pentium (586), die superskalare Arbeitsweise beigebracht haben.
Ein superskalarer Mikroprozessor unterscheidet sich hauptsächlich im Leitwerk von einem nicht-superskalaren Mikroprozessor. So teilt dieses einer Recheneinheit nicht mehr lediglich eine Instruktion pro Takt zu, sondern gleich mehrere unterschiedliche Instruktionen für mehrere unterschiedliche Recheneinheiten. Der Mikroprozessor ist somit in der Lage, mehrere Instruktionen parallel abzuarbeiten, solange diese oder ihr Ergebnis nicht voneinander abhängig sind. Somit kann ein zweifach superskalarer Mikroprozessor bei gleichem Takt im Idealfall doppelt so viele Instruktionen pro Sekunde abarbeiten, wie ein serieller Mikroprozessor.
Dieser Effekt wird erreicht, indem an unterschiedlichen Stellen der Mikroprozessor optimiert wird. So muss beispielsweise der Decoder mehr als nur eine Instruktion pro Taktzyklus decodieren können, es müssen mehrere voneinander unabhängige Recheneinheiten vorhanden sein und auch die interne Bandbreite muss stimmen. So versauern beispielsweise im Falle des Pentium 4 pro Taktzyklus sechs Recheneinheiten, da der Trace-Cache lediglich einen Durchsatz von 3 µOps/Takt erreicht.
Die erste Implementierung superskalarer Arbeitsweise fand im 586 (Intel Pentium) statt, der grundsätzlich nicht mehr ist, als ein superskalarer 80486 mit zweistufigem Decoder. Die sog. U‑V Struktur des Decoders wurde alsbald von der 4–1‑1 Struktur des Decoders des 686 (Intel Pentium Pro), der nun dreistufig arbeitet, abgelöst.
Out-of-order Execution
Eine weitere Möglichkeit der Laufzeitoptimierung ist die sog. Out-of-Order Execution (zu Deutsch: “Ausführung außerhalb der Reihenfolge”). Sie bietet einen enormen Zuwachs an Geschwindigkeit, denn plötzlich können Instruktionen bereits ausgeführt werden auch wenn sie noch gar nicht an der Reihe wären (Stichwort: Serieller Programmfluss der von-Neumann Architektur). Um dies besser verständlich zu machen, ein kleines Beispiel:
Nehmen wir an, dass eine Instruktion Daten aus dem Speicher einlesen muss. Dies führt dazu, dass der Prozessor für mehrere hundert bis tausend Taktzyklen auf die Daten warten muss und quasi zum Nichtstun verdammt ist. Gibt es jedoch in der Pipeline Instruktionen, die von der derzeit auf Daten aus dem Speicher wartenden Instruktion weder abhängen noch mit ihr in Zusammenhang stehen, kann der Prozessor die nötige Wartezeit mit der Ausführung dieser Instruktionen überbrücken.
In Zusammenhang mit hohem ILP und TLP (siehe folgendes Kapitel) kann eine enorme Verbesserung der Performance, ohne notwendige Eingriffe seitens des Programmierers oder Compilers, erreicht werden.