Ansätze der Optimierung per Software (Fortsetzung)
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.
Diesen Artikel bookmarken oder senden an ...