Doping für CPUs — Möglichkeiten der Leistungssteigerung
Ansätze der Optimierung per Hardware (SMT Fortsetzung)
Simultaneous Multi-Threading (Fortsetzung)
Register Renaming
Das sog. Register Renaming befindet sich seit einiger Zeit in allen Mikroprozessoren. Die RR-Logik benennt die acht GPRs (General Purpose Registers) auf physikalisch endlich vorhandene Register um. Dadurch wird die Verwendung des Stack optimiert, auf dem nicht mehr der Inhalt aller Register sondern lediglich deren physikalische Adresse gespeichert werden muss. Der Pentium III hatte hier jedoch einen schweren Bug, der dieses Feature manchmal unnütz machte und den Prozessor enorm ausbremste, der sog. “Partial Register Stall”.
Die eigentliche Umwandlung der somit nur noch virtuell vorhandenen GPRs erfolgt mit Hilfe einer sog. RAT (Register Allocation Table, zu deutsch etwa Register Belegungstabelle). Da jeder logische Mikroprozessor seine eigenen Register hat, benötigt er auch seine eigene RAT, die daher doppelt vorhanden ist.
Instruction Scheduling
Hier liegt das eigentliche Herz der Out-of-Order Execution Engine. Diese sorgt dafür, dass die Instruktionen, sobald die entsprechenden Recheneinheiten verfügbar sind, weitergeleitet werden, unabhängig vom eigentlichen Programmfluss. Die einzige Einschränkung sind voneinander abhängige Instruktionen. Rechnet beispielsweise Instruktion A mit dem Ergebnis aus Instruktion B, so kann A logischerweise nicht vor B ausgeführt werden.
Der Instruction Scheduler empfängt alle Instruktionen und kümmert sich um die zeitgerechte Zuteilung an die Recheneinheiten. Genau genommen sind es fünf Instruction Scheduler, die zusammen pro Taktzyklus bis zu sechs µOps durchreichen können. Jeder Scheduler verfügt über eine eigene Scheduler Queue, welche sich die beide logischen Prozessoren teilen müssen. Hierbei wird nicht zwischen µOps des einen oder anderen Prozessors bei der Zuteilung entschieden, lediglich der Status der Instruktionen sowie die Verfügbarkeit der Recheneinheiten spielen eine Rolle. Um jedoch Gleichheit zu wahren, sind die Queues partitioniert, jeder Prozessor kann also nur eine bestimmte Anzahl an Einträgen belegen.