Instruktionsrohrleitung

:Pipelining adressiert hier um. Für HTTP pipelining, sieh HTTP pipelining.

Eine Instruktionsrohrleitung ist eine Technik, die im Design von Computern und anderen elektronischen Digitalgeräten verwendet ist, um ihren Instruktionsdurchfluss zu vergrößern (die Zahl von Instruktionen, die in einer Einheit der Zeit durchgeführt werden können). Pipelining reduziert die Zeit nicht, um eine Instruktion zu vollenden, aber steigert die Zahl von Instruktionen, die sofort bearbeitet werden können.

Jede Instruktion wird in eine Folge von abhängigen Schritten gespalten. Der erste Schritt ist immer, die Instruktion auswendig herbeizuholen; der Endschritt schreibt gewöhnlich die Ergebnisse der Instruktion zu Verarbeiter-Registern oder zum Gedächtnis. Pipelining bemüht sich, den Verarbeiter an so vielen Instruktionen arbeiten zu lassen, wie es abhängige Schritte gibt, gerade als ein Montageband viele Fahrzeuge sofort baut, anstatt zu warten, bis ein Fahrzeug die Linie vor dem Zulassen des folgenden durchgeführt hat. Da die Absicht des Montagebandes ist, jeden Monteur produktiv zu jeder Zeit zu halten, bemüht sich pipelining, jeden Teil des mit einer Instruktion beschäftigten Verarbeiters zu verwenden. Pipelining lässt die Zykluszeit des Computers die Zeit des langsamsten Schritts sein, und lässt ideal eine Instruktion in jedem Zyklus vollenden.

Der Begriff Rohrleitung ist eine Analogie, die von der Tatsache stammt, dass jeder Teil des Verarbeiters Arbeit tut, weil es Flüssigkeit in jeder Verbindung einer Rohrleitung gibt.

Einführung

In einer Prozession gehende Haupteinheiten (Zentraleinheiten) werden durch eine Uhr gesteuert. Jeder Uhr-Puls braucht nicht dasselbe zu machen; eher leitet die Logik in der Zentraleinheit aufeinander folgende Pulse zu verschiedenen Plätzen, eine nützliche Folge durchzuführen. Es gibt viele Gründe, dass die komplette Ausführung einer Maschineninstruktion sofort nicht geschehen kann. Zum Beispiel, wenn ein Uhr-Puls einen Wert in ein Register zuklinkt oder eine Berechnung beginnt, wird er für den Wert Zeit in Anspruch nehmen, um an den Produktionen des Registers oder für die Berechnung stabil zu sein, um zu vollenden. Als ein anderes Beispiel, eine Instruktion aus einer Speichereinheit lesend, kann zur gleichen Zeit nicht getan werden, dass eine Instruktion ein Ergebnis derselben Speichereinheit schreibt. In pipelining werden Effekten, die zur gleichen Zeit nicht geschehen können, die abhängigen Schritte der Instruktion gemacht.

Zahl von Schritten

Die Zahl von abhängigen Schritten ändert sich mit der Maschinenarchitektur. Zum Beispiel:

  • Das Projekt von IBM Stretch hat die Begriffe Abruf vorgeschlagen, Decodieren Sie und führen Sie Durch, die üblich geworden sind.
  • Die klassische RISC Rohrleitung umfasst:
  • #Instruction holen herbei
  • #Instruction decodieren und schreiben Abruf ein
  • #Execute
  • #Memory Zugang
  • #Register schreiben zurück
  • Der Atmel AVR und der FOTO-Mikrokontrolleur hat jeder eine 2-stufige Rohrleitung.
  • Viele Designs schließen Rohrleitungen nicht weniger als 7, 10 und sogar 20 Stufen (als in Intel Pentium 4) ein.
  • Der spätere "Prescott" und "die Zeder-Mühle" Pentium 4 Kerne (und ihr Pentium D Ableitungen) hatten eine 31-stufige Rohrleitung, das längste im Hauptströmungsverbraucher, der rechnet.
  • Der Xelerated X10q Netzverarbeiter hat eine Rohrleitung mehr als eintausend Stufen lange.

Da die Rohrleitung "tiefer" gemacht wird (mit einer größeren Zahl von abhängigen Schritten), kann ein gegebener Schritt mit dem einfacheren Schaltsystem durchgeführt werden, das die Verarbeiter-Uhr geführt schneller lassen kann.

Wie man

sagt, ist ein Verarbeiter völlig pipelined, wenn er eine Instruktion auf jedem Zyklus herbeiholen kann. Im Ausmaß, dass einige Instruktionen oder einige Bedingungen Verzögerungen verlangen, die bezaubernde neue Instruktionen hemmen, ist der Verarbeiter nicht völlig pipelined.

Gefahren

Ein menschlicher Programmierer, der ein Zusammenbau-Sprachprogramm über das Modell der folgenden Ausführung schreibt, nimmt an, dass jede Instruktion vollendet, bevor der folgende beginnt. Diese Annahme ist auf einem pipelined Verarbeiter nicht wahr. Eine Situation, wo das erwartete Ergebnis problematisch ist, ist eine Gefahr. Stellen Sie sich die folgenden zwei Registerbefehle zu einem hypothetischen RISC Verarbeiter vor, der die 5 Schritte oben verzeichnen ließ:

1: Tragen Sie 1 zu R5 bei.

2: Kopieren Sie R5 zu R6.

Instruktion 1 würde in der Zeit t herbeigeholt, und seine Ausführung würde an t abgeschlossen sein. Instruktion 2 würde an t herbeigeholt und würde an t abgeschlossen sein. Die erste Instruktion könnte die erhöhte Zahl in R5 als sein fünfter Schritt ablegen (Register schreiben zurück) an t. Aber die zweite Instruktion könnte die Zahl von R5 bekommen (um zu R6 zu kopieren), in seinem zweiten Schritt (Instruktion decodieren und schreiben Abruf ein) in der Zeit t. Es scheint, dass die erste Instruktion den Wert bis dahin nicht erhöht hätte. Der obengenannte Code ruft eine Gefahr an.

Ein menschlicher Programmierer, der auf einer kompilierten Sprache schreibt, könnte diese Sorgen nicht haben, weil der Bearbeiter entworfen werden konnte, um Maschinencode zu erzeugen, der Gefahren vermeidet.

Arbeits-Arounds

Das Verarbeiter-Design könnte sich mit der Gefahr befassen, indem es Programmierern empfohlen worden ist, solche Abhängigkeiten in angrenzenden und fast angrenzenden Instruktionen zu vermeiden, erklärend, dass die zweite Instruktion einen alten Wert aber nicht den Sollwert verwendet (im Beispiel oben, könnte der Verarbeiter den unerhöhten Wert gegenintuitiv kopieren), oder dass der Wert, den es verwendet, unbestimmt ist. Der Programmierer kann Arbeit ohne Beziehung haben, die der Verarbeiter inzwischen tun kann; oder, um richtige Ergebnisse zu sichern, kann der Programmierer NOPs in den Code einfügen, teilweise die Vorteile von pipelining verneinend.

Lösungen

Verarbeiter, die die Anwesenheit einer Gefahr schätzen können, können dem Programmierer das erwartete Ergebnis geben, indem sie stecken geblieben wird —, Verarbeitung der zweiten Instruktion (und nachfolgenden Instruktionen) bis zu den Werten verzögernd, die es verlangt, weil Eingang bereit ist. Das schafft eine Luftblase in der Rohrleitung (sieh unten), auch teilweise die Vorteile von pipelining verneinend.

Einige Verarbeiter können die Anwesenheit einer Gefahr nicht nur schätzen, aber können ersetzen, indem sie zusätzliche Datenpfade gehabt wird, die erforderliche Eingänge einem Berechnungsschritt zur Verfügung stellen, bevor eine nachfolgende Instruktion sie sonst schätzen würde, hat ein Attribut Versand genannt.

Einige Verarbeiter können beschließen, dass Instruktionen außer der folgenden folgenden von den aktuellen nicht abhängig sind und ohne Gefahren durchgeführt werden können. Solche Verarbeiter können in Unordnung Ausführung durchführen.

Zweige

Ein Zweig aus der normalen Befehlsfolge schließt häufig eine Gefahr ein. Wenn der Verarbeiter Wirkung dem Zweig in einem einzelnen Zeitzyklus nicht geben kann, wird die Rohrleitung bezaubernde Instruktionen folgend fortsetzen. Solchen Instruktionen kann nicht erlaubt werden zu wirken, weil der Programmierer Kontrolle zu einem anderen Teil des Programms abgelenkt hat.

Ein bedingter Zweig ist noch problematischer. Der Verarbeiter kann, oder kann nicht Zweig abhängig von einer Berechnung, die noch nicht vorgekommen ist. Verschiedene Verarbeiter können einstellen, können Zweigvorhersage versuchen und können im Stande sein zu beginnen, zwei verschiedene Programmfolgen (spekulative Ausführung), sowohl das Annehmen durchzuführen, dass der Zweig ist als auch nicht genommen wird, die ganze Arbeit verwerfend, die der falschen Annahme gehört.

Ein Verarbeiter mit einer Durchführung der Zweigvorhersage, die gewöhnlich richtige Vorhersagen macht, kann die Leistungsstrafe vom Ausbreiten minimieren. Jedoch, wenn Zweige schlecht vorausgesagt werden, kann es mehr Arbeit für den Verarbeiter, wie Spülung von der Rohrleitung der falsche Codepfad schaffen, der Ausführung vor der die Tätigkeit wieder aufnehmenden Ausführung an der richtigen Position begonnen hat.

Programme, die für einen pipelined Verarbeiter absichtlich geschrieben sind, vermeiden sich zu verzweigen, um möglichen Verlust der Geschwindigkeit zu minimieren. Zum Beispiel kann der Programmierer den üblichen Fall mit der folgenden Ausführung und dem Zweig nur beim Ermitteln ungewöhnlicher Fälle behandeln. Das Verwenden von Programmen wie gcov, um Codeeinschluss zu analysieren, lässt den Programmierer messen, wie oft besondere Zweige wirklich durchgeführt werden und Gewinn-Scharfsinnigkeit, mit der man den Code optimiert.

Spezielle Situationen

Das Selbständern von Programmen

Die Technik, Code zu selbstmodifizieren, kann auf einem pipelined Verarbeiter problematisch sein. In dieser Technik soll einer der Effekten eines Programms seine eigenen kommenden Instruktionen modifizieren. Wenn der Verarbeiter ein geheimes Instruktionslager hat, kann die ursprüngliche Instruktion bereits in eine Vorabruf-Eingangswarteschlange kopiert worden sein, und die Modifizierung wird nicht wirken.

Unabhängige Rohrleitungen

Mathematische Rohrleitungen, wie die arithmetischen Verarbeiter in den Produkten von Intel Pentium, bearbeiten große Reihe oder Vektoren durch das Wiederholen eines Prozesses wie Multiplikation Tausende von Zeiten. Videoverarbeiter führen ebenfalls viele Berechnung in der Parallele mit der Ausführung von Verarbeiter-Instruktionen durch. Diese Situationen stellen Gefahren für die Ausführung von Instruktionen nicht von Natur aus auf. Jedoch sind sie darin, nach dem Starten einer Operation ähnlich, der Programmierer muss denken oder prüfen, ob die Operation vor dem Starten einer anderen Operation abgeschlossen ist, die von den Ergebnissen des ersten abhängt, oder der Verarbeiter entworfen werden muss, um die abhängige Operation zu entdecken und einzustellen, bis seine Eingänge bereit sind.

Vorteile und Nachteile

Vorteile von pipelining

Der Hauptvorteil von pipelining besteht darin, dass es alle Teile des Verarbeiters besetzt hält und den Betrag der nützlichen Arbeit vergrößert, die der Verarbeiter in einer gegebenen Zeit tun kann.

  • Das Reduzieren der Zykluszeit des Verarbeiters vergrößert gewöhnlich den Durchfluss von Instruktionen.
  • Durch das Bilden jedes abhängigen Schritts einfacher kann pipelining komplizierte Operationen wirtschaftlicher ermöglichen als das Hinzufügen komplizierten Schaltsystemes, solcher bezüglich numerischer Berechnungen.

Die Vorteile eines pipelined Verarbeiters werden im Ausmaß verringert, dass Ausführung auf Gefahren stößt, die verlangen, dass sich Ausführung unter seiner idealen Rate verlangsamt.

Vorteile des non-pipelined Verarbeiters

Ein non-pipelined Verarbeiter führt nur eine einzelne Instruktion auf einmal durch. Das Neigen, vergrößerte Geschwindigkeit mit pipelining zu verfolgen, kann das resultierende Design einfacher und preiswerter machen, um zu verfertigen.

  • Ein non-pipelined Verarbeiter stößt nie auf eine Gefahr. Zum Beispiel gibt es nie Zweigverzögerungen. (Tatsächlich wird jeder Zweig verzögert.) Die Folgen davon sind wie folgt:
  • Die Programmierung, und Lehrprogrammierer, kann leichter sein.
  • Es ist leichter, das genaue Timing einer gegebenen Folge von Instruktionen vorauszusagen.
  • Ein Bedürfnis eines pipelined Verarbeiters, seine ganze Arbeit in Modulschritte zu organisieren, kann die Verdoppelung von Registern verlangen, die die Latenz von einigen Instruktionen vergrößert.

Illustriertes Beispiel

Nach rechts ist eine allgemeine Rohrleitung mit vier Stufen:

  1. Abruf
  2. Decodieren Sie
  3. Führen Sie durch
  4. Schreiben Sie zurück

Der graue Spitzenkasten ist die Liste von Instruktionen, die warten, um durchgeführt zu werden; grauer Kasten des Bodens ist die Liste von Instruktionen, die vollendet worden sind; und der mittlere weiße Kasten ist die Rohrleitung.

Ausführung ist wie folgt:

Eine Luftblase in der Rohrleitung

Ein pipelined Verarbeiter kann sich mit Gefahren befassen, indem er stecken geblieben wird und eine Luftblase in der Rohrleitung geschaffen wird, auf einen oder mehr Zyklen hinauslaufend, in denen nichts Nützliches geschieht.

In der Illustration am Recht, im Zyklus 3, kann der Verarbeiter nicht die purpurrote Instruktion vielleicht decodieren, weil der Verarbeiter beschließt, dass Entzifferung von durch die Ausführung der grünen Instruktion erzeugten Ergebnissen abhängt. Die grüne Instruktion kann zur Durchführen Bühne und dann zur Zurückschreiben Bühne als vorgesehen weitergehen, aber die purpurrote Instruktion wird für einen Zyklus in der Abruf-Bühne eingestellt. Die blaue Instruktion, die erwartet war, während des Zyklus 3 herbeigeholt zu werden, wird für einen Zyklus eingestellt, wie die rote Instruktion danach ist.

Wegen der Luftblase (die blauen Ovale in der Illustration) Decodiert der Verarbeiter Schaltsystem ist während des Zyklus 3 müßig. Sein, Schaltsystem Durchführen, ist während des Zyklus 4 und sein müßig Zurückschreiben Schaltsystem ist während des Zyklus 5 müßig.

Wenn sich die Luftblase aus der Rohrleitung (am Zyklus 6), normale Ausführungszusammenfassungen bewegt. Aber alles ist jetzt ein Zyklus spät. Man wird 8 Zyklen brauchen (Zyklus 1 durch 8) aber nicht 7, um die vier in Farben gezeigten Instruktionen völlig durchzuführen.

Geschichte

Der Samengebrauch von pipelining war im ILLIAC II Projekt und das Projekt von IBM Stretch, obwohl eine einfache Version früher im Z1 1939 und dem Z3 1941 verwendet wurde.

Pipelining hat als Anzahlung gegen Ende der 1970er Jahre in Supercomputern wie Vektor-Verarbeiter und Reihe-Verarbeiter begonnen. Einer der frühen Supercomputer war die von Control Data Corporation gebaute Reihe von Cyber. Sein Hauptarchitekt, Seymour Cray, hat später Forschung von Cray angeführt. Cray hat sich entwickelt die XMP Linie von Supercomputern, mit pipelining sowohl für multipliziert als auch fügt Funktionen hinzu/abzieht. Später hat Star Technologies Parallelismus (mehrere Pipelined-Funktionen hinzugefügt, die in der Parallele arbeiten), entwickelt von Roger Chen. 1984 hat Star Technologies hinzugefügt, dass die pipelined von James Bradley entwickelten Stromkreis teilen. Durch die Mitte der 1980er Jahre wurde Supercomputerwissenschaft von vielen verschiedenen Gesellschaften um die Welt verwendet.

Heute werden pipelining und die meisten obengenannten Neuerungen innerhalb von den meisten Mikroprozessoren eingebettet.

Siehe auch

  • Warten Sie auf Staat
  • Klassische RISC Rohrleitung
  • Rohrleitung, (rechnend)
  • Parallele, rechnend
  • Instruktionseinheit

Zeichen

Links


Liste von Almanachen / Cochem-Zell
Impressum & Datenschutz