Archiv verlassen und diese Seite im Standarddesign anzeigen : Wozu benötigt ein Prozessor Pipelines?
Xioner
2004-12-04, 11:21:48
Hi Leute,
gestern bei meine ITS (Informations & Telekommunikations Systeme) Klausur tauchte die frage "Wozu benötigt ein Prozessor Pipelines?" auf. Ich konnte die Frage nicht beantworten, da wir sowas im Unterricht nicht besprochen hatten (oder ich war wieder am schlafen *gg*). Jetzt hab ich grad mal ein bisschen im I-net nach der Antwort gesucht aber bissher ohne Erfolg. Könnt ihr mir vieleicht weiterhelfen?
mfg Xioner
StefanV
2004-12-04, 11:28:21
Damit er nicht jeden Befehl der Reihe nach abarbeiten muss und mehrere gleichzeitig bearbeiten kann?!
saaya
2004-12-04, 12:33:36
stells dir wie ne fabrik vor, wenn man nur einen arbeiter (nur eine unit) haette der nach und nach jeden schritt einer arbeit durchfuehren muss wuerde man kaum voran kommen, wenn man mehrere haette die nebeneinander arbeiten wuerde es schneller gehen, aber ein riesen chaos geben.
also stelle man sie alle in eine reihe und jeder wird auf einen schritt spezialisiert den er dann besonders effiizent und schnell ausfuehrt. :)
geordnete arbeitsteilung :)
Damit er nicht jeden Befehl der Reihe nach abarbeiten muss und mehrere gleichzeitig bearbeiten kann?!
Eine Pipeline hat nichts mit Out of Order Execution zu tun.
Eine Pipeline wird benötigt, um einen komplexen Befehl in meherere einfachere Teilschritte zu zerlegen. Wenn der (ursprünglich) komplexe Befehl 5 CPU Zyklen benötigt hat und er nach dem "Aufbrechen" sich in 5 "ein-Zyklen-Teilen" darstellen läßt, kann die CPU mit dieser Pipeline jeden Takt einen neuen Befehl bearbeiten. Bis das Ergebniss vorligt, dauert es immer noch 5 Takte, dafür kommt nach dieser (anfänglichen) Verzögerung dann jeden Takt ein Ergebnis aus der CPU raus.
StefanV
2004-12-04, 13:17:02
Eine Pipeline hat nichts mit Out of Order Execution zu tun.
Eine Pipeline wird benötigt, um einen komplexen Befehl in meherere einfachere Teilschritte zu zerlegen. Wenn der (ursprünglich) komplexe Befehl 5 CPU Zyklen benötigt hat und er nach dem "Aufbrechen" sich in 5 "ein-Zyklen-Teilen" darstellen läßt, kann die CPU mit dieser Pipeline jeden Takt einen neuen Befehl bearbeiten. Bis das Ergebniss vorligt, dauert es immer noch 5 Takte, dafür kommt nach dieser (anfänglichen) Verzögerung dann jeden Takt ein Ergebnis aus der CPU raus.
Ja, genau, so meinte ichs (eigentlich)
Bei einem gepipelinten Prozessor können mehrere Befehle gleichzeitig in Bearbeitung sein (und nicht bearbeitet werden ersteres ist seriell zweiteres parallel)...
BlackBirdSR
2004-12-04, 15:05:45
Eine Pipeline hat nichts mit Out of Order Execution zu tun.
Eine Pipeline wird benötigt, um einen komplexen Befehl in meherere einfachere Teilschritte zu zerlegen. Wenn der (ursprünglich) komplexe Befehl 5 CPU Zyklen benötigt hat und er nach dem "Aufbrechen" sich in 5 "ein-Zyklen-Teilen" darstellen läßt, kann die CPU mit dieser Pipeline jeden Takt einen neuen Befehl bearbeiten. Bis das Ergebniss vorligt, dauert es immer noch 5 Takte, dafür kommt nach dieser (anfänglichen) Verzögerung dann jeden Takt ein Ergebnis aus der CPU raus.
Das stimmt auch nicht.
Ein Du kannst einen ADD Befehl der genau 1 Takt zur Ausführung braucht nicht in 5 Teile zerlegen.
Allerdings muss dieser ADD befehl aus dem Cache geholt werden, decodiert werden, ausgeführt werden und anschließend zurückgeschrieben und aus der Pipeline geworfen werden.
Ihr vermischt hier munter Parallelität/Pipelining/Pipelinestufen und Anzahl von Pipelines, habe ich das Gefühl.
Kommt schönes Rührei dabei raus *g*
Jesus
2004-12-04, 15:22:35
Das stimmt auch nicht.
Ein Du kannst einen ADD Befehl der genau 1 Takt zur Ausführung braucht nicht in 5 Teile zerlegen.
Allerdings muss dieser ADD befehl aus dem Cache geholt werden, decodiert werden, ausgeführt werden und anschließend zurückgeschrieben und aus der Pipeline geworfen werden.
Ihr vermischt hier munter Parallelität/Pipelining/Pipelinestufen und Anzahl von Pipelines, habe ich das Gefühl.
Kommt schönes Rührei dabei raus *g*
Denke der Gast bezog sich auch auf diesen ganzen IFetch/Decode/Execute/Writeback zeugs, für einen einzlenen Befehl..
BlackBirdSR
2004-12-04, 15:29:25
Hi Leute,
gestern bei meine ITS (Informations & Telekommunikations Systeme) Klausur tauchte die frage "Wozu benötigt ein Prozessor Pipelines?" auf. Ich konnte die Frage nicht beantworten, da wir sowas im Unterricht nicht besprochen hatten (oder ich war wieder am schlafen *gg*). Jetzt hab ich grad mal ein bisschen im I-net nach der Antwort gesucht aber bissher ohne Erfolg. Könnt ihr mir vieleicht weiterhelfen?
mfg Xioner
Ich finde die Frage blöd!
Sind damit jetzt die Pipelines direkt gemeint ? (dann = sau blöde Frage)
Oder Pipelining bei superskalaren CPUs ( = beschissene Fragestellung)
Oder vielleicht doch nur der Zweck einer Pipeline schlechthin? (= wie stelle ich blöde Fragen noch blöder?)
Im Grunde bezeichnet eine Pipeline akbstrakt den Arbeitsfluss innerhalb der CPU. Vom Holen des Befehls, bis zum rauswerfen nach getaner Arbeit.
Alle Befehle haben einige Stufen lang die gleichen Arbeitsschritte bei CPUs.
Also gibt es erstmal nur eine einzige Pipeline.
Bei der Ausführung trennt sich das Ganze dann auf. Integer und Gleitkommabefehle werden nicht gleich behandelt.
Kurz vor der Ausführung werden die Befehle dann an die Ausführungseinheiten verteilt. Man könnte hier von einer Pipelinelinie pro Einheit sprechen.
Ich würde darauf antworten, dass die Pipelines im Zuge der Parallelität benötigt werden.
Nachdem ich geschrieben habe: "Was ist das für eine doofe Frage?"
Hi Leute,
gestern bei meine ITS (Informations & Telekommunikations Systeme) Klausur tauchte die frage "Wozu benötigt ein Prozessor Pipelines?" auf. Ich konnte die Frage nicht beantworten, da wir sowas im Unterricht nicht besprochen hatten (oder ich war wieder am schlafen *gg*). Jetzt hab ich grad mal ein bisschen im I-net nach der Antwort gesucht aber bissher ohne Erfolg. Könnt ihr mir vieleicht weiterhelfen?
mfg XionerWas eine Pipeline macht wurde ja schon erklärt (IFetch/Decode/Execute/Writeback)! Mehrere Pipelines in einer CPU arbeiten Befehle parallel ab. Das heißt, je mehr Pipes man voll ausnutzen kann, desto "höher" die Rechengeschwindigkeit.
Damit man die Anzahl der Pipes in einer CPU erhöhen kann, ohne stark an Effizienz zu verlieren braucht man einmal optimierte Kompiler und eine gute Branchprediktion.
Ein Branch tritt dann auf, wenn eine Pipe auf das Ergebnis einer Instruktion einer anderen Pipe zugreifen möchte, diese allerdings noch nicht fertig ist. Dann muß grob vereinfacht die Pipe solange auf das Ergebnis warten, oder wird "geleert" und für eine andere Instruktion freigemacht. So mehr Pipelines man hat, desto schwieriger wird es diese vollkommen auszunutzen.
Als bestes Beispiel für die Ineffizient siehe den Vergleich des P4 mit einem Athlon auf einer pro MHZ Basis. Man kann vermuten, daß der P4 offensichtlich mehr Pipelines hat, was auch stimmt.
Leonidas
2004-12-04, 15:50:33
Hi Leute,
gestern bei meine ITS (Informations & Telekommunikations Systeme) Klausur tauchte die frage "Wozu benötigt ein Prozessor Pipelines?" auf. Ich konnte die Frage nicht beantworten, da wir sowas im Unterricht nicht besprochen hatten (oder ich war wieder am schlafen *gg*). Jetzt hab ich grad mal ein bisschen im I-net nach der Antwort gesucht aber bissher ohne Erfolg. Könnt ihr mir vieleicht weiterhelfen?
mfg Xioner
Siehe hier:
http://www.hardtecs4u.com/reviews/2001/pentium4_2ghz/index4.php
http://www.hardtecs4u.com/reviews/2001/pentium4_2ghz/pipelining.png
BlackBirdSR
2004-12-04, 20:31:50
Siehe hier:
Das ist auch wieder nur "Pipelining" erklärt, nicht der Nutzen von Pipelines.
Wie gesagt.. das ist eine doofe Frage, die man da gestellt hat.
Als bestes Beispiel für die Ineffizient siehe den Vergleich des P4 mit einem Athlon auf einer pro MHZ Basis. Man kann vermuten, daß der P4 offensichtlich mehr Pipelines hat, was auch stimmt.
Der P4 hat mehr Pipelines?
Der P4 hat längere, aber auch mehr? dachte eher weniger...
Kann das wer verifizieren? :)
StefanV
2004-12-04, 22:28:58
Der P4 hat mehr Pipelines?
Der P4 hat längere, aber auch mehr? dachte eher weniger...
Kann das wer verifizieren? :)
Stimmt, siehe diverse HT4U Artikel.
Der Athlon hat z.B. 3 FPU Pipes, der P4 nur eine, bei den ALUs/AGUs schauts nicht wirklich anders aus...
Stimmt, siehe diverse HT4U Artikel.
Der Athlon hat z.B. 3 FPU Pipes, der P4 nur eine, bei den ALUs/AGUs schauts nicht wirklich anders aus...Verwechselt Ihr da nicht die Units mit den Pipelines!? ;) Schließlich bedienen sich die Pipelines der ALUs/FPUs etc. Und ja, der P4 hat eine "längere"/"breitere" Pipe, was ihn ineffizienter macht (Branches). Bei Grakas ist es gang und gebe, daß sich mehrere Pipelines einzelne FP Einheiten sogar teilen (XP4).
Verwechselt Ihr da nicht die Units mit den Pipelines!? ;) Schließlich bedienen sich die Pipelines der ALUs/FPUs etc. Und ja, der P4 hat eine "längere"/"breitere" Pipe, was ihn ineffizienter macht (Branches). Bei Grakas ist es gang und gebe, daß sich mehrere Pipelines einzelne FP Einheiten sogar teilen (XP4).Zu dem Artikel von HT4U, der oben angegeben wurde. Es ist so nicht ganz korrekt, vielleicht deshalb auch das Mißverständnis. Die eine CPU hat eine 1-stufige Pipeline, die andere eine 5-stufige, also 5 1-stufige (die aber miteinander verkettet sind -> Branches). Man nennt es aber auch 5 Pipelines!
saaya
2004-12-04, 23:49:13
jetzt bin ich verwirrt :confused:
BlackBirdSR
2004-12-05, 00:03:32
Zu dem Artikel von HT4U, der oben angegeben wurde. Es ist so nicht ganz korrekt, vielleicht deshalb auch das Mißverständnis. Die eine CPU hat eine 1-stufige Pipeline, die andere eine 5-stufige, also 5 1-stufige (die aber miteinander verkettet sind -> Branches). Man nennt es aber auch 5 Pipelines!
Hmm jetzt bin ich auch verwirrt.
Die CPU hat beides mal 5 Pipeline Stufen. Anders gehts auch gar nicht.
In dem Beispiel ging es nur um Pipelining und Stufenanzahl.
Es ist nicht jede Stufe eine eigene Pipeline.
hier gehts echt drunter und drüber :)
Piffan
2004-12-05, 01:31:33
Jetzt habe ich auch ne doofe Frage. Warum braucht man lange Pipelines, um hohe Taktzahlen zu erreichen? :D
Wie kann das Sinn machen, wo es doch Programmabzweigungen gibt, die vom Ergebnis der Berechnungen abhängen? :D :D
Schrotti
2004-12-05, 02:18:33
Ihr macht mir irre.
Wo ist GloomY wenn man ihn braucht.
Mfg Schroti
MechWOLLIer
2004-12-05, 09:44:05
Jetzt habe ich auch ne doofe Frage. Warum braucht man lange Pipelines, um hohe Taktzahlen zu erreichen? :D
Ich vermute mal, dass bei einer langen Pipeline es mehr "Lücken" gibt, wo derzeit nichts an Daten unterwegs ist. Es gibt weniger Wärmeentwicklung und somit kann man die Pipeline noch mehr befüllen, unter anderem mit einem höheren Takt.
Sry, für die Ratestunde:D
BlackBirdSR
2004-12-05, 10:55:33
Ich vermute mal, dass bei einer langen Pipeline es mehr "Lücken" gibt, wo derzeit nichts an Daten unterwegs ist. Es gibt weniger Wärmeentwicklung und somit kann man die Pipeline noch mehr befüllen, unter anderem mit einem höheren Takt.
Sry, für die Ratestunde:D
Das hängt eher mit Singallaufzeiten zusammen.
Jeder Arbeitsschritt braucht Zeit. Und je höher der CPU Takt, desto weniger Zeit steht zur Verfügung.
Und bei 2GHz, also 0.5ns mal eben schnell einen befehl holen, decodieren, ausrechnen zurückschreiben und rauswerfen? :nono:
Pipelinestufen sind nun voneinander getrennt. Jede Stufe erledigt ihren Teil der Arbeit. Das ist mitunter nicht sehr viel. Befehl holen ODER Befehl decodieren, ODER Befehl weiterleiten...
Man unterteilt den ganzen Arbeitsschritt in einzelne kleinere Schritte, die an sich weniger Zekt benötigen.
Ganz pauschal (und völlig realitätsfremd, aber sonst leider viel zu unüberschaubar)... wenn man 5 Stufen einsetzt, und man annimmt, dass jede Stufe nur 1/5 der Zeit der einen Stufe braucht um ihre Arbeit zu erledigen, dann könnte man die CPU fast 5x so schnell takten.
Erst dann stößt man wieder an das Limit der einzlenen Stufen.
Mehr Stufen sind also eine vorraussetzung für höheren Takt. Aber das ist inzwischen schon so komplex geworden, mit so vielen anderen Einflüssen, dass auch ein Prozessor mit 12 Stufen 2.6GHz erreichen kann (K8) während ein anderer mit 31 Stufen (P4) irgendwo bei 4GHz rumgurkt.
Pipelining dagegen ist die Möglichkeit, dass jede Stufe an einem anderen Befehl arbeiten kann. (Siehe das Bild, das Leonidas verlinkt hat).
Wenn also Befehl 1 Stufe 1 durchlaufen hat, darf Befehl 2 die Stufe 1 anfangen.
Würde man das nicht machen, wäre bei 12 Stufen erstmal 11 Stufen/Taktzyklen Pause. -> Bye Performance!
Insofern ist das Bild allerdings etwas falsch. Es müsste heissen: CPU ohne Pipelining/ CPU mit Pipelining. Denn eine CPU ohne Pipeline, hätte nur 1 Stufe und das wäre etwas suboptimal.
mrdigital
2004-12-05, 16:29:31
Eine Pipeline hat nichts mit Out of Order Execution zu tun.
Eine Pipeline wird benötigt, um einen komplexen Befehl in meherere einfachere Teilschritte zu zerlegen. Wenn der (ursprünglich) komplexe Befehl 5 CPU Zyklen benötigt hat und er nach dem "Aufbrechen" sich in 5 "ein-Zyklen-Teilen" darstellen läßt, kann die CPU mit dieser Pipeline jeden Takt einen neuen Befehl bearbeiten. Bis das Ergebniss vorligt, dauert es immer noch 5 Takte, dafür kommt nach dieser (anfänglichen) Verzögerung dann jeden Takt ein Ergebnis aus der CPU raus.
Das war mein Post
Das stimmt auch nicht.
Ein Du kannst einen ADD Befehl der genau 1 Takt zur Ausführung braucht nicht in 5 Teile zerlegen.
Allerdings muss dieser ADD befehl aus dem Cache geholt werden, decodiert werden, ausgeführt werden und anschließend zurückgeschrieben und aus der Pipeline geworfen werden.
Ihr vermischt hier munter Parallelität/Pipelining/Pipelinestufen und Anzahl von Pipelines, habe ich das Gefühl.
Kommt schönes Rührei dabei raus *g*
Ich sehe den Widerspruch zu meinem Post nicht :confused:
Ich hab von einem komplexen Befehl als Beispiel gesprochen, ich wollte das nicht unnötig verkomplizieren. Es ging mir um das Prinzip einen (umfangreichen) Arbeitsschritt in mehrere kleinere (und simplere) Teilschritte zu zerlegen. Wo ich dann aber Paralellität, Pipelining und Pipelinestufen verwechselt haben soll, ist mir nicht klar.
BlackBirdSR
2004-12-05, 17:30:12
Ich sehe den Widerspruch zu meinem Post nicht :confused:
Ich hab von einem komplexen Befehl als Beispiel gesprochen, ich wollte das nicht unnötig verkomplizieren. Es ging mir um das Prinzip einen (umfangreichen) Arbeitsschritt in mehrere kleinere (und simplere) Teilschritte zu zerlegen. Wo ich dann aber Paralellität, Pipelining und Pipelinestufen verwechselt haben soll, ist mir nicht klar.
Pipelines brechen Befehle nicht in kleinere Stücke auf.
Das ist der ganze Widerspruch an sich.
Du hast versch. Arbeitsschritte, die jeder Befehl durchlaufen muss.
Hier kann man aufbrechen. Nicht jedoch den Befehl.
Einen komplexen befehl in mehrere kleine zu zerlegen, macht der Decode/Microcode.
Das hat aber nichts mit Pipelines an sich zu tun.
Ob ich jetzt einen 486 habe, der komplexe CISC Befehle abhandelt, oder einen K5 der diese in RISC-artige OPs zerlegt. Sie alle haben mehrere Pipelinestufen.
Bei den Verwechslungen habe ich nicht dich gezielt angesprochen. Aber du musst doch zugeben, hier wird munter durchgemixt.
Pipelines, Pipelining, Pipelinestufen...
mrdigital
2004-12-05, 19:15:54
Genau das ist doch Pipelining, das Zerlegen und Serialisieren von Teilschritten und dazu muss man eben eine Aufgabe in kleinere Teile zerlegen. Dass man Load / Execute / Store nicht weiter zerlegen kann hat damit dann doch nichts im speziellen zu tun.
Aber mit dem Mix stimmt schon :(
GloomY
2004-12-07, 00:30:29
Ihr macht mir irre.
Wo ist GloomY wenn man ihn braucht.
Mfg SchrotiHrhr :D
Der GloomY ist genau dann wenn man ihn braucht natürlich über's WoE weggefahren und kommt auch erst am Montag abend zurück ;)
Genau das ist doch Pipelining, das Zerlegen und Serialisieren von Teilschritten und dazu muss man eben eine Aufgabe in kleinere Teile zerlegen.Im Prinzip richtig. Bloss sind für beide Vorgänge die dahinterliegenden Gründe andere, daher würde ich diese nicht so zusammenwerfen:
Einmal versucht man die Signallaufzeit zu optimieren, indem man die Abarbeitung nicht als Ganzes vornimmt, sondern es auf mehrere Stufen (und damit Takte) verteilt, so dass jede Stufe für sich gesehen relativ wenig Verzögerung mit sich bringt.
Signallaufzeit ist hier also die kritische Größe.
Beim Zerlegen der Befehle in mehrere kleinere ist eher eine Frage der Komplexität. Will man wirklich für z.B. jede noch so absurde Adressierungsart der ISA eine Hardware bauen, die diese (nativ) unterstützt, so wird man Unmengen an Transistoren dafür verbrauchen. Wenn man einen Befehl jedoch in mehrere einfache(re) Befehle zerlegt, so muss man bei den komplexeren Adressierungsmodi z.B. nur ein paar Vorberechnungen oder Speicherzugriffe machen und kann das dann auf einen einfacheren Adressierunsmodus zurückführen.
Das spart (wohl) effektiv Transistoren.
Dass man Load / Execute / Store nicht weiter zerlegen kann hat damit dann doch nichts im speziellen zu tun.Hehe, irgendwann sind die Operationen einfach mal atomar ;)
vBulletin®, Copyright ©2000-2024, Jelsoft Enterprises Ltd.