Pipeline (computing)
Im Computer, a Pipeline, auch bekannt als a Datenpipeline,[1] ist ein Satz von Daten Verarbeitungselemente in Reihe, wobei die Ausgabe eines Elements die Eingabe des nächsten ist. Die Elemente einer Pipeline werden häufig parallel oder in zeitgeschnittener Weise ausgeführt. Einige Menge von Pufferspeicher wird oft zwischen Elementen eingefügt.
Zu den computerbezogenen Pipelines gehören:
- Unterrichtspipelines, so wie die Klassische RISC -Pipeline, die verwendet werden in Zentrale Verarbeitungseinheiten (CPUs) und andere Mikroprozessoren Um überlappende Ausführung mehrerer Anweisungen mit demselben zu ermöglichen Schaltkreis. Die Schaltung wird normalerweise in Stufen unterteilt und jede Stufe verarbeitet jeweils einen bestimmten Teil einer Anweisung und übergibt die Teilergebnisse an die nächste Stufe. Beispiele für Stadien sind Anweisungsdecodes, Arithmetik/Logik und Registrierungsabruf. Sie beziehen sich auf die Technologien von Superscalar -Ausführung, Operanden weiterleiten, Spekulative Ausführung und Ausführende Ausführung.
- Grafikpipelines, in den meisten Grafikverarbeitungseinheiten (GPUs), die aus mehreren bestehen Arithmetische Einheiten, oder vollständig CPUs, die die verschiedenen Stufen gemeinsamer Rendering -Operationen umsetzen (Perspektivprojektion, Fenster Ausschnitt, Farbe und hell Berechnung, Rendering usw.).
- Software -Pipelines, die aus einer Folge von Computer bestehen Prozesse (Befehle, Programmläufe, Aufgaben, Threads, Prozeduren usw.), konzeptionell parallel ausgeführt, wobei der Ausgangsstrom eines Prozesses automatisch als Eingabestream der nächsten eingespeist wird. Das Unix Systemanruf Rohr ist ein klassisches Beispiel für dieses Konzept.
- HTTP -Pipelining, die Technik der Ausgabe mehrerer Http Anfragen durch das gleiche TCP -Verbindung, ohne auf die vorherige zu warten, bevor sie einen neuen ausstellen.
Etwas Betriebssysteme[Beispiel erforderlich] kann liefern Unix-artig Syntax an mehrere Programmläufe in einer Pipeline, implementieren Sie jedoch die letztere als einfache serielle Ausführung und nicht als echtes Pipelining - nämlich darauf warten, dass jedes Programm vor dem Start der nächsten abgeschlossen ist.
Konzept und Motivation
Pipelining ist ein häufig verwendetes Konzept im Alltag. Zum Beispiel in der Fließband Von einer Autofabrik erfolgt jede spezifische Aufgabe - wie bei der Installation des Motors, der Installation der Motorhaube und der Installation der Räder - häufig von einem separaten Arbeitsplatz. Die Stationen erledigen ihre Aufgaben parallel, jeweils auf einem anderen Auto. Sobald ein Auto eine Aufgabe erledigt hat, zieht es zur nächsten Station. Variationen der Zeit, die zum Erfüllen der Aufgaben erforderlich ist .
Nehmen wir an, dass das Zusammenbau eines Autos drei Aufgaben erfordert, die 20, 10 bzw. 15 Minuten dauern. Wenn dann alle drei Aufgaben von einer einzelnen Station ausgeführt würden, würde die Fabrik alle 45 Minuten ein Auto ausgeben. Durch die Verwendung einer Pipeline von drei Stationen würde die Fabrik das erste Auto in 45 Minuten und dann alle 20 Minuten eine neue ausgeben.
Wie dieses Beispiel zeigt, verringert Pipelining das nicht LatenzDas heißt, die Gesamtzeit für ein Element, das das gesamte System durchläuft. Es erhöht jedoch das System des Systems DurchsatzDas heißt, die Rate, mit der neue Elemente nach dem ersten verarbeitet werden.
Entwurfsüberlegungen
Die Bühnen ausbalancieren
Da der Durchsatz einer Pipeline nicht besser sein kann als der des langsamsten Elements, sollte der Designer versuchen, die Arbeit und die Ressourcen auf die Phasen zu teilen, damit sie alle die gleiche Zeit nehmen, um ihre Aufgaben zu erledigen. Im obigen Beispiel des Autobaugruppens, wenn die drei Aufgaben jeweils 15 Minuten dauerte, dann würde die Latenz noch 45 Minuten beträgt, aber ein neues Auto würde dann alle 15 Minuten anstelle von 20 abgeschlossen sein.
Pufferung
Unter idealen Umständen, wenn alle Verarbeitungselemente synchronisiert sind und die gleiche Zeit zum Verarbeiten nehmen, kann jedes Element von jedem Element so empfangen werden, wie es von der vorherigen in einem einzigen freigegeben wird Uhr Kreislauf. Auf diese Weise fließen die Gegenstände mit konstanter Geschwindigkeit durch die Pipeline, wie Wellen in einem Wasserkanal. In solchen "Wellenpipelines",[2] Zwischen den Stadien ist neben dem für die Datenelemente benötigten Speicher keine Synchronisation oder Pufferung erforderlich.
Im Allgemeinen ist die Pufferung zwischen den Pipeline -Stufen erforderlich, wenn die Verarbeitungszeiten unregelmäßig sind oder wenn Elemente entlang der Pipeline erstellt oder zerstört werden können. Zum Beispiel kann in einer Grafikpipeline, die Dreiecke verarbeitet, auf dem Bildschirm, ein Element, das die Sichtbarkeit jedes Dreiecks überprüft versteckt. Pufferung ist auch erforderlich, um Unregelmäßigkeiten in den Raten, zu denen die Anwendung Elemente in die erste Stufe zustimmt, aufzunehmen und die Ausgabe der letzten zu konsumieren.
Der Puffer zwischen zwei Stufen kann einfach a sein Hardwareregister mit geeigneter Synchronisation und Signallogik zwischen den beiden Stufen. Wenn in einem Stadium A ein Datenelement im Register gespeichert ist, sendet es ein "verfügbar verfügbares" Signal an die nächste Stufe B. Sobald B diese Daten verwendet hat, reagiert es mit einem "Daten empfangenen" Signal auf A. Stufe A, das wartet und wartet Für dieses Signal, bevor Sie das nächste Datenelement in das Register speichern. Stufe B hält an und wartet auf das Signal "Daten verfügbar", wenn es bereit ist, das nächste Element zu verarbeiten, aber die Stufe A hat es noch nicht bereitgestellt.
Wenn die Verarbeitungszeiten eines Elements variabel sind, muss die gesamte Pipeline häufig aufhören und auf dieses Element und alle vorherigen warten, um die Elemente in ihren Eingangspuffern zu konsumieren. Die Häufigkeit solcher Pipeline Stände kann reduziert werden, indem mehr als ein Element im Eingangspuffer dieser Stufe Platz bereitgestellt wird. Ein solcher Puffer mit mehreren Elementen wird normalerweise als implementiert Erstes, First-out-Warteschlange. Die stromaufwärts gelegene Stufe muss möglicherweise noch gestoppt werden, wenn die Warteschlange voll wird, aber die Häufigkeit dieser Ereignisse nimmt ab, wenn mehr Pufferschlitze bereitgestellt werden. Warteschlangenentheorie Kann die Anzahl der benötigten Pufferschlitze abhängig von der Variabilität der Verarbeitungszeiten und der gewünschten Leistung erkennen.
Nichtlineare Pipelines
Wenn eine Stufe viel länger dauert (oder dauert) viel länger als die anderen und nicht beschleunigt werden kann, kann der Designer zwei oder mehr Verarbeitungselemente bereitstellen, um diese Aufgabe parallel mit einem einzelnen Eingangspuffer und einem einzelnen Ausgangspuffer auszuführen. Während jedes Element die Verarbeitung seines aktuellen Datenelements beendet, liefert es es an den gemeinsamen Ausgangspuffer und nimmt das nächste Datenelement aus dem gemeinsamen Eingangspuffer. Dieses Konzept der "nichtlinearen" oder "dynamischen" Pipeline wird von Geschäften oder Banken veranschaulicht, die zwei oder mehr Kassierer haben, die Kunden aus einer einzigen wartenden Warteschlange bedienen.
Abhängigkeiten zwischen Elementen
In einigen Anwendungen kann die Verarbeitung eines Elements y nach einer Stufe A von den Ergebnissen oder Wirkung der Verarbeitung eines vorherigen Punktes X bis zu einem späteren Stadium B der Pipeline abhängen. In diesem Fall kann Stufe A Element Y nicht korrekt verarbeiten, bis Artikel X Stufe B. gelöscht hat.
Diese Situation tritt sehr oft in Anleitungsleitungen auf. Angenommen, y ist ein arithmetischer Anweisungen, der den Inhalt eines Registers liest, das durch eine frühere Anweisung X geändert worden sein sollte Operandenund b ist die Bühne, die das Ergebnis in das angegebene Register schreibt. Wenn die Stufe A versucht, die Anweisung y vor der Anweisung X zu verarbeiten, kann das Register immer noch den alten Wert enthalten und der Effekt von y wäre falsch.
Um solche Konflikte korrekt zu behandeln, muss die Pipeline mit zusätzlicher Schaltung oder Logik versehen werden, die sie erkennt und die entsprechende Maßnahmen ergriffen. Zu den Strategien dafür gehören:
- Stalling: Jede betroffene Stufe wie A wird angehalten, bis die Abhängigkeit behoben ist - das heißt, bis die erforderlichen Informationen verfügbar sind und/oder der erforderliche Zustand erreicht wurde.
- Reordingelemente: Elemente: Anstelle des Abblendens kann Stage A Element y beiseite legen und nach einem nachfolgenden Punkt Z in seinem Eingabestream suchen, der mit einem früheren Artikel keine Abhängigkeiten aufweist. In Anweisungsleitungen wird diese Technik genannt Ausführende Ausführung.
- Ratet und Backtrack: Ein wichtiges Beispiel für die Abhängigkeit von Gegenstand zu Element ist die Behandlung von a bedingter Zweig Anweisung X durch eine Anweisungspipeline. Die erste Stufe der Pipeline, in der die nächste Anweisung y ausgeführt werden soll, kann seine Aufgabe erst ausführen, wenn X seinen Operand abgerufen hat und festgestellt hat, ob der Zweig genommen werden soll oder nicht. Dies kann viele Taktzyklen dauern, da der Operand von X wiederum von früheren Anweisungen abhängt, die Daten aus dem Hauptspeicher abrufen.
- Anstatt aufzuhalten, während er darauf wartet, dass X fertig ist, kann die Stufe A erraten, ob der Zweig genommen wird oder nicht, und holen Sie die nächste Anweisung y basierend auf dieser Vermutung. Wenn sich die Vermutung später als falsch herausstellt (hoffentlich selten), müsste das System mit der richtigen Wahl zurückverfolgen und fortgesetzt werden. Nämlich alle Änderungen, die in der Stufe A und nach den nachfolgenden Stadien, die auf dieser Vermutung basieren das richtige Anweisungszeiger. Dies Zweigvorhersage Strategie ist ein Sonderfall von Spekulative Ausführung.
Kosten und Nachteile
Ein pipeliniertes System benötigt normalerweise mehr Ressourcen (Schaltungselemente, Verarbeitungseinheiten, Computerspeicher usw.) als eines, das jeweils eine Stapel ausführt Elemente.
Darüber hinaus kann die Übertragung von Elementen zwischen separaten Verarbeitungselementen die Latenz erhöhen, insbesondere für lange Pipelines.
Die zusätzlichen Komplexitätskosten für Pipelining können beträchtlich sein, wenn es Abhängigkeiten zwischen der Verarbeitung verschiedener Elemente gibt, insbesondere wenn eine Rate-and-Backtrack-Strategie verwendet wird. In der Tat haben die Kosten für die Implementierung dieser Strategie für komplexe Unterrichtssätze einige radikale Vorschläge zur Vereinfachung motiviert Rechnerarchitektur, wie zum Beispiel RISC und VLIW. Compiler Sie wurden auch mit der Aufgabe belastet, die Maschinenanweisungen neu zu ordnen, um die Leistung von Anweisungsleitungen zu verbessern.
Neue Technologien
Es ist wahr, dass in den letzten Jahren die Anforderungen an Anwendungen und ihre zugrunde liegende Hardware erheblich waren. Zum Beispiel ist das Erstellen von Pipelines mit einzelnen Knotenanwendungen, die durch die Datenzeile durch Zeile fahren Große Daten. Mit dem Aufkommen von Datenanalyse -Motoren wie z. Hadoopoder in jüngerer Zeit Apache FunkenEs war möglich, große Datensätze über mehrere Verarbeitungsknoten hinweg zu verteilen, sodass Anwendungen eine hundertmal höhere Effizienzhöhe erreichen können, als es zuvor für möglich gehalten wurde.Der heutige Effekt ist, dass selbst ein PC auf mittlerer Ebene, der auf diese Weise verteilte Verarbeitung unter Verwendung von Big Data-Pipelines verwendete.[3]
Siehe auch
- Datenfluss
- Durchsatz
- Parallelität
- Anweisung Pipeline
- Grafikpipeline
- Pipeline (Software)
- Pipeline (UNIX)
- Hartmann Pipeline für VM
- Batchpipes für MVs
- Geometrie -Pipelines
- XML -Pipeline
- Inszenierte ereignisgesteuerte Architektur
Verweise
- ^ Datenpipeline -Entwicklung Veröffentlicht von dativa, abgerufen am 24. Mai 2018 abgerufen
- ^ O. Hauck; Sorin A. Huss; M. Garg (1999). Zweiphasige asynchron. Semantischer Gelehrter. S. 219–228. doi:10.1109/async.1999.761536. ISBN 0-7695-0031-5. S2CID 206515615. Abgerufen 14. September 2019.
- ^ Was ist eine Datenpipeline? Veröffentlicht von Data Pipelines, abgerufen am 11. März 2021
Literaturverzeichnis
- Perez Garcia, Pablo (2018). Pipeline DSL A DSL, um eine CI/CD -Pipeline für Ihre Projekte zu erstellen. ISBN 978-0-134-69147-3.
- Für eine Standarddiskussion über Pipelining im parallelen Computer siehe Quinn, Michael J. (2004). Parallele Programmierung in C mit MPI und OpenMP.Dubuque, Iowa: McGraw-Hill Professional. ISBN 0072822562.
- Pogonyi, Roland (Februar 2021). "Was ist eine Datenpipeline?". Abgerufen 11. März, 2021.