Parallelität auf Befehlsebene

Parallelität auf Befehlsebene (ILP) ist der parallel oder gleichzeitige Ausführung einer Sequenz von Anweisungen in einem Computer Programm. Insbesondere ILP bezieht sich auf die durchschnittliche Anzahl von Anweisungen pro Schritt dieser parallele Ausführung.[2]: 5
Diskussion
ILP darf nicht verwechselt werden mit Parallelität. In ILP gibt es ein einzelnes Spezifikum Faden der Ausführung von a Prozess. Auf der anderen Seite beinhaltet die Zuordnung mehrerer Threads zu a ZentralprozessorKern in einer strikten Wechsel oder in der wahren Parallelität, wenn genügend CPU -Kerne vorhanden sind, idealerweise ein Kern für jeden Runnable -Faden.
Es gibt zwei Ansätze zur Parallelität auf Anleitungsebene: Hardware- und Software.
Die Hardware -Ebene arbeitet auf dynamische Parallelität, während die Software -Ebene auf statischer Parallelität arbeitet. Dynamische Parallelität bedeutet, dass der Prozessor zur Laufzeit entscheidet, welche Anweisungen parallel ausgeführt werden sollen, während statische Parallelität die bedeutet Compiler entscheidet, welche Anweisungen parallel ausgeführt werden sollen.[3][Klarstellung erforderlich] Das Pentium Prozessor arbeitet an der dynamischen Abfolge der parallelen Ausführung, aber der Itanium Der Prozessor arbeitet auf der statischen Ebene parallelität.
Betrachten Sie das folgende Programm:
e = a + bf = c + dm = e * f
Der Betrieb 3 hängt von den Ergebnissen der Operationen 1 und 2 ab, daher kann er erst berechnet werden, wenn beide abgeschlossen sind. Die Operationen 1 und 2 hängen jedoch nicht von einer anderen Operation ab, daher können sie gleichzeitig berechnet werden. Wenn wir davon ausgehen, dass jeder Vorgang in einer Zeiteinheit ausgeführt werden kann, können diese drei Anweisungen in insgesamt zwei Zeiteinheiten abgeschlossen werden, was eine ILP von 3/2 ergibt.
Ein Ziel von Compiler und Prozessor Designer müssen so viel ILP wie möglich identifizieren und nutzen. Gewöhnliche Programme werden in der Regel unter einem sequentiellen Ausführungsmodell geschrieben, bei dem Anweisungen nach dem anderen und in der vom Programmierer angegebenen Reihenfolge eine ausführen. ILP ermöglicht es dem Compiler und dem Prozessor, die Ausführung mehrerer Anweisungen zu überlappen oder sogar die Reihenfolge zu ändern, in der Anweisungen ausgeführt werden.
Wie viel ILP in Programmen existiert, ist sehr anwendungsspezifisch. In bestimmten Bereichen wie Grafiken und Wissenschaftliches rechnen Die Menge kann sehr groß sein. Workloads wie jedoch wie Kryptographie kann viel weniger Parallelität aufweisen.
Zu den mikroarchitekturalen Techniken, die zur Ausnutzung von ILP verwendet werden, gehören:
- Unterrichtspipelining wo die Ausführung mehrerer Anweisungen teilweise überlappt werden kann.
- Superscalar Hinrichtung, VLIWund die eng verwandten explizit parallele Anweisungsrechnung Konzepte, in denen mehrere Ausführungseinheiten werden verwendet, um mehrere Anweisungen parallel auszuführen.
- Ausführende Ausführung Wo Anweisungen in jeder Reihenfolge ausgeführt werden, die keine Datenabhängigkeiten verletzt. Beachten Sie, dass diese Technik sowohl von Pipelining- als auch von Superscalar -Ausführung unabhängig ist. Aktuelle Implementierungen der Ausführung außerhalb der Bestellung dynamisch (d. h. während das Programm ausführt und ohne Hilfe vom Compiler) ILP aus normalen Programmen extrahieren. Eine Alternative besteht darin, diese Parallelität bei zu extrahieren Zeit kompilieren und übermitteln Sie diese Informationen irgendwie an die Hardware. Aufgrund der Komplexität der Skalierung der Ausführungstechnik außerhalb der Ordnung hat sich die Branche erneut untersucht Anweisungssätze die ausdrücklich mehrere unabhängige Operationen pro Anweisung codieren.
- Umbenennen registrieren Dies bezieht sich auf eine Technik, die verwendet wird, um unnötige Serialisierung von Programmvorgängen zu vermeiden, die durch die Wiederverwendung von Registern durch diese Operationen auferlegt werden, um die Ausführung außerhalb der Ordnung zu ermöglichen.
- Spekulative Ausführung Dies ermöglicht die Ausführung vollständiger Anweisungen oder Teile von Anweisungen, bevor sich diese Ausführung feststellen sollte. Eine häufig verwendete Form der spekulativen Ausführung ist Kontrollflussspekulation, bei der Anweisungen über einen Kontrollflussanweis (z. B. ein Zweig) hinaus ausgeführt werden, bevor das Ziel des Kontrollflussanweisung bestimmt wird. Es wurden mehrere andere Formen der spekulativen Ausführung vorgeschlagen und werden verwendet, einschließlich einer spekulativen Ausführung, die durch Wertvorhersage gesteuert wird, Vorhersage der Gedächtnisabhängigkeit und Cache -Latenzvorhersage.
- Zweigvorhersage Dies wird verwendet, um zu vermeiden, dass die Behebung von Kontrollabhängigkeiten gelöst werden. Die Vorhersage der Zweig wird mit spekulativer Ausführung verwendet.
Es ist bekannt, dass der ILP sowohl vom Compiler- als auch vom Hardware-Support ausgenutzt wird, der Compiler jedoch auch inhärente und implizite ILP in Programmen zur Hardware durch Kompilierungszeitoptimierungen bietet. Einige Optimierungstechniken zum Extrahieren der verfügbaren ILP in Programmen würden die Planung umfassen. Zuteilung registrieren/Umbenennen und Optimierung des Speicherzugriffs.
DataFlow -Architekturen sind eine weitere Klasse von Architekturen, in denen ILP ausdrücklich angegeben ist, für ein aktuelles Beispiel siehe das Reisen Architektur.
In den letzten Jahren wurden ILP -Techniken verwendet, um die Leistungsverbesserungen trotz der wachsenden Ungleichheit zwischen den Betriebsfrequenzen der Prozessor und den Speicherzugriffszeiten zu bieten (frühe ILP -Designs wie die IBM System/360 Modell 91 verwendete ILP -Techniken, um die durch eine relativ kleinen Registerdatei auferlegten Einschränkungen zu überwinden).Derzeit kostet ein Cache -Missstaat dem Hauptspeicher mehrere Hundert von CPU -Zyklen.Während es im Prinzip möglich ist, ILP zu verwenden, um selbst solche Speicherlatenzen zu tolerieren, sind die zugehörigen Kosten für Ressourcen und Stromversorgung unverhältnismäßig.Darüber hinaus führt die Komplexität und häufig die Latenz der zugrunde liegenden Hardwarestrukturen zu einer verringerten Betriebsfrequenz, die die Vorteile weiter verringert.Daher erweisen sich die oben genannten Techniken unzureichend, um zu verhindern, dass die CPU für die Off-Chip-Daten zum Stillstand kommt.Stattdessen fährt die Branche dazu, ein höheres Maß an Parallelität auszunutzen, die durch Techniken wie z. Multiprozessierung und Multithreading.[4]
Siehe auch
Verweise
- ^ "Die Geschichte des Computers". mason.gmu.edu. Abgerufen 2019-03-24.
- ^ Goossens, Bernard; Langlois, Philippe; Parello, David; Petit, Eric (2012). "Perpi: Ein Werkzeug zur Messung der Anweisungsniveau Parallelität". Parallele und wissenschaftliches Computer angewendet. 7133: 270–281. doi:10.1007/978-3-642-28151-8_27.
- ^ Hennessy, John L.; Patterson, David A. Computerarchitektur: Ein quantitativer Ansatz.
- ^ Reflexionen der Speicherwand
Weitere Lektüre
- Aiken, Alex; Banerjee, Utpal; Kejariwal, Arun; Nicolau, Alexandru (2016-11-30). Unterrichtsniveau Parallelität. Professional Computing (1 ed.). Springer. ISBN 978-1-4899-7795-3. ISBN1-4899-7795-3. (276 Seiten)