"Pipelining" dient dazu, mehrere Instruktionen gleichzeitig, in verschiedenen Stadien, auf dem Chip zu halten.
Stellen wir uns der Einfachheit haber vor, ein Befehl wäre eine Bestellung an der Ladentheke und der Laden wäre der Prozessor.
Damals, also vor dem Pipelining, funktionierte das Abarbeiten eines Befehls wie das Bedienen eines Kunden an der Fleischtheke: Du bestellst und deine Ware wird zusammengestellt, du zahlst, bekommst die Waren, und der Vorgang ist zuende. Die anderen Kunden müssen warten, bis du abgfertigt bist.
"Pipelining" Kann man ganz gut mit der Bedienung eines Kunden an einem McDrive vergleichen: Für dich als Kunden ändert sich nicht viel, die Schritte der Bestellung sind gleich, doch werden dort mehrere Kunden in der "pipeline" gehalten, also: Sobald der erste Schritt getan ist, die Bestellung, bei dem die Ware zusammengestellt wird, erfolgt der zweite Schritt, das Zahlen, an einer anderen Station und du erlaubst es, dass ein weiterer Kunde (=Befehl) in den Arbeitsprozess eintritt (und zwar mit seiner Bestellung), wenn nun der erste Kunde die Ware abholt, rückt Kunde 2 nach, bezahlt und Kunde 3 tritt in den Prozess ein und gibt seine Bestellung auf.. und so weiter..
Du hältst also in diesem Fall 3 Kunden gleichzeitig in deiner Pipeline, jeder der Kunden in einem verschiedenen Stadium des Vorgangs.
Genau so macht das der Prozessor mit seinen Befehlen, wenn er "Pipelining" macht (also eigentlich jeder moderne Prozessor).
Der Grund ist einfach: Es ist ein Ansatz, die Geschwindigkeit zu steigern.
Wenn dir jemand erzählt, es gibt eine lange Pipeline, gibt es viele, kleine Einzelschritte. Je mehr Schritte, desto höher kann man die Taktrate steigern, das hat folgenden Grund: überleg dir mal, wir haben einen unterbesetzten McDrive, wir haben nur ein Fenster, an dem kassiert wird UND Ware ausgegeben.
Nun, dieser Vorgang dauert z.B. wesentlich länger als die Bestellung entgegen zu nehmen, also müssen alle folgenden Kunden in der Pipeline warten. Wenn die Luft brennt, verlängerst du die Pipeline: du brichst diesen großen Schritt (zahlen+entgegen nehmen) in 2 Schritte auf, und du hast diesen Flaschenhals entsorgt und kannst deine Taktrate steigern, zumal auch jede Station mit weniger Problemen beschäftigt ist.
Kürzere Takte -> Höhere Frequenz.
Deswegen kommt der Pentium4 mit seiner 20 stufigen (!!) Pipeline auch auf diese hohen Taktfrequenzen (derzeit um die 3 GHz).
Nein, nicht unbedingt!
Leider ist es nämlich nicht ganz so einfach, denn eine lange Pipeline hat auch einen großen Nachteil: "Pipeline Bubbles".
Um zu erklären, was Pipeline-Bubbles sind, stell dir unseren Mc Drive vor: Wenn's ans Warenausgeben geht, merkt McDonalds, dass keine "Royal TS" mehr im Lager sind und die neue Charge erst in einer halben Stunde eintrifft. Was nun? Im Grunde musst die die Pipeline leer machen und alle Kunden neu bestellen lassen, die einen Royal TS geordert haben. Weil es in einem Prozessor, aber auf die Reihenfolge ankommt, kannst du nicht einfach einen Kunden durchlaufen lassen, damit der sich wieder hinten anstellt, nene.. du musst die Pipeline komplett leer machen und den, der nun was anderes bestellen muss, wieder neu in die Pipeline holen. Und alle anderen müssen sich wieder hinter ihm anstellen.
In einer CPU gehen nicht plötzlich Funktionseinheiten aus, wie dem McDonalds der "Royal TS", doch es werden in einer CPU auch viele Befehle mal auf "Verdacht" hin ausgeführt. Wenn sich herausstellt, dass sich die Sprungvorhersage aber geirrt hat, und ein anderer Befehl an der Reihe ist, als der, den man bereits mal, auf Verdacht, in die Pipeline geholt hat, kommt es genau zu diesem Phänomen.
Lange Pipeline -> Großer Verlust bei Pipeline Bubbles, weil viel Arbeit nochmal gemacht werden muss. Bei dieser Zwangsräumung der Pipeline enteht sowas, wie eine Luftblase: Statt nem Kunden (=Befehl) hat man nur Luft, die nix bestellen (=rechnen) kann. Deswegen redet man auch von "Pipeline-Bubbles" (Luftblasen in der Leitung).
Bei einer langen Pipeline ist der Zeitverlust natürlich viel gröer, weil viel mehr nochmal gemacht werden muss, als bei einer kurzen Pipeline. Eine lange Pipeline funktioniert also nur mit einer guten Sprungvorhersage.
Nein.
Der G4 von Motorola hat zwar, mit einer 7-Stufigen Pipeline eine recht kurze Pipeline, im Vergleich zu der 20-stufigen Pipeline des Pentium 4, doch verfolgt er einen anderen Ansatz.
Stellen wir uns noch einmal unser McDonalds-Beispiel vor: Bisher hielten wir uns am McDrive auf, aber besagtes Schnellrestaurant hat nicht nur einen McDrive: im Innern geht es genau so schnell voran, obwohl man dort keine Pipeline hat. Die Lösung des Problems ist dort ganz anders gelungen: man arbeitet dort massiv parallel, indem man mehrere Kassen aufmacht. Der G4 verfolg genau diese Philosophie. Er protzt mit vielen Funktionseinheiten, die möglichst parallel arbeiten sollen. Der Vorteil ist, dass der Verlust, der bei Pipeline-Bubbles anfällt, wesentlich geringer ist, doch der Nachteil dieser Methode ist es, dass nicht immer mehrere Befehle gleichzeitig voneinander abgearbeitet werden können, weil es oft vorkommt, dass 2 Befehle in ihrer exakten Reihenfolge abgearbeitet werden müssen. Dazu stellt man sich einfach vor, dass man zwei Kollegen hat, die sich beide an eine andere Kasse angestellt haben. Man hat abgesprochen, dass wenn der einen Chicken Nuggets bestellt, sich der andere einen Satz Fritten holt, damit sie sich an beidem bedienen können. Nun kommen beide gleichzeitig dran, aber die Fritten brauchen noch etwas. Befehle in einem Computer sind leider nicht sehr kommunikativ, so dass man nicht davon ausgehen kann, dass der eine bereits vorher ankündigt, was er bestellen wird. So wartet der eine auf den anderen und es kommt zu einem Geschwindigkeitsverlust, der den Vorteil der kleineren Pipeline-Bubbles wieder auffrisst.
Unter dem Strich haben also beide Konzepte ihre Nachteile und Vorteile, doch am Ende kommt in etwa die gleiche Geschwindigkeit raus.