Doping für CPUs — Möglichkeiten der Leistungssteigerung
Ansätze der Optimierung per Software (ILP/TLP/VLIW)
Steigerung des Instruction Level Parallelism (ILP)
Eine Ebene über der Optimierung einzelner Instruktionen an bestehende Hardwarestrukturen und Befehlssätze steht der Instruction Level Parallelism (zu Deutsch: Parallelismus der Instruktionen). Dies ist nichts anderes als die Fähigkeit, möglichst viele Instruktionen parallel abarbeiten zu können. Je höher der ILP, desto flotter kann der Prozessor theoretisch arbeiten. Eine Steigerung kann auf verschiedene Arten erreicht werden, beispielsweise Anpassung des Programmcodes an bestimmte Prozessorarchitekturen oder massive Nutzung von Parallelisierungsmechanismen aktueller Prozessoren.
Trotz der Tatsache, dass moderne Prozessoren beim Vorgang der Parallelisierung einen großen Teil der Arbeit von sich aus erledigen (der Pentium 4 sei an dieser Stelle mal außen vor gestellt), entfällt der Löwenanteil immer noch auf den Programmierer/Compiler. Eine Anpassung des Programmcodes an bestimmte generationsübergreifende Prozessoreigenschaften kann beispielsweise den Prozessor effektiver auslasten, was zu einem höheren Durchsatz an gleichzeitig verarbeiteten Instruktionen und somit einem gesteigerten ILP führt.
Prozessoren bringen genügend Möglichkeiten, den Parallelismus zu steigern, beispielsweise Superskalare Arbeitsweise oder Out-of-Order Execution.
Die hierfür verwendeten Hebel sind beispielsweise die superskalare Arbeitsweise oder die Out-of-Order Execution.
Steigerung des Thread Level Parallelism (TLP)
Ähnlich wie der ILP, jedoch wiederum eine Ebene höher als dieser, ist der Thread Level Parallelism (zu Deutsch: Parallelismus der Threads). Ein moderner Computer muss sehr viele Aufgaben gleichzeitig erledigen. So wird beispielsweise während dem Download einer Datei auf die Festplatte auf dieser gleichzeitig ein Anti-Viren Check vorgenommen, während der MP3-hörende Anwender fröhlich an einem Text tippt.
All diese einzelnen Anwendungen haben dutzende von einzelnen Threads gleichzeitig offen, die, um eine optimale Performance zu erreichen, möglichst parallel abgearbeitet werden (jeder dieser Threads führt pro Sekunde selber wiederum tausende bis Millionen von Instruktionen aus). Diesen Faktor der parallelen Abarbeitung von Threads bezeichnet der TLP. Selbstverständlich kann es — wie beim ILP auch — auch hier zu Konflikten zwischen einzelnen Threads oder zu gegenseitigen Abhängigkeiten kommen, die Aufgabe des Compilers liegt an der optimalen Anpassung des Programmcodes an die Gegebenheiten der Hardware
Letztendlich kann auch per Hardware der TLP deutlich erhöht werden, beispielsweise durch mehrere Prozessoren, in Hardware integriertes Multi-Threading oder andere Techniken, auf die ebenfalls im weiteren Verlauf des Artikels noch genauestens eingegangen wird.
VLIW: Very long instruction word
Ein letzter Ansatz der Parallelisierung per Software ist die sog. VLIW-Technik. Diese Art der Optimierung per Compiler ist gleichzeitig die erfolgsversprechendste als auch die radikalste Lösung. Nicht nur braucht der erzeugte Programmcode zwingend speziell angepasste und auf die Software optimierte Hardware, er ist auch noch dazu inkompatibel zum spezifikationskonformem x86 Maschinencode. Effektiv betrachtet arbeiten hier jedoch Hardware und Software Hand in Hand, um eine optimale Ausnutzung der vorhandenen Ressourcen und somit einen möglichst hohen ILP und TLP zu erreichen.
VLIW ist eine Erweiterung der superskalaren Arbeitsweise von Prozessoren und basiert auf folgender Technik:
Bei der bereits bekannten superskalaren Arbeitsweise erfolgt die optimale Anordnung und Zusammenfassung einzelner Instruktionen zur Laufzeit des Programms im Leitwerk des Mikroprozessors. Vorteile sind verhältnismäßig kurze Instruktionen und der somit niedrige Speicherbedarf der Software. Nachteil ist die niemals optimale Ausnutzung der vorhandenen Ressourcen.
Bei VLIW hingegen erfolgt die Optimierung auf die Mikroprozessorarchitektur und Verteilung der parallel ausführbaren Instruktionen auf die einzelnen Recheneinheiten bereits zum Zeitpunkt der Compilierung des Programms in Maschinencode. Der Vorgang der Übersetzung dauert dadurch zwar deutlich länger, die Laufzeiten der daraus entstehenden Programme können hierdurch jedoch drastisch reduziert werden. Ein Nachteil ist hingegen die Länge der einzelnen Instruktionen und der somit gesteigerte Speicherbedarf der Programme.