Steffen: Frage zur technischen Informatik

Moin!

Kann mir mal jemand das mit dem Pipelining erklären, also wie das genau funktioniert in einem Prozessor? Ich durchblicke insbesondere den folgenden Punkt nicht ganz: Man nimmt eine weitere Registerstufe dazu und unterteilt die Funktion also in Teilaufgaben. Hierdurch erhöht sich zwar die mögliche Taktfrequenz (-->Durchsatz) aber die Latenz erhöht sich.
Was bringt dies also? D.h. ich muss ja immer noch so lange wie vorher auf mein Ergebnis warten, oder?

MfG, Steffen

  1. Hallo,

    [Pipelining]
    Was bringt dies also? D.h. ich muss ja immer noch so lange wie vorher auf mein Ergebnis warten, oder?

    auf ein einzelnes Ergebnis: Ja.
    Viele Optimierungsmöglichkeiten wie Pipelining oder Caching bringen erst dann einen Nutzen, wenn man dieselbe Information (Programmcode oder Daten) mehrmals nacheinander nutzt.

    Bei einem (beispielsweise) vierstufigen Pipelining würde man vier Schritte brauchen, um das Ergebnis einer Operation zu bekommen - aber nur insgesamt sieben, um diese Operation viermal hintereinander durchzuführen. Der Vorteil liegt darin, dass mehrere Arbeitsschritte sich zeitlich überlappen können.

    Ebenso beim Caching: Wenn Informationen von einem langsameren Medium abgerufen werden, dauert es natürlich insgesamt *noch länger*, wenn ich diese Informationen noch erst irgendwo zwischenspeichern (cachen) will. Aber wenn ich dieselbe Information dann noch ein zweites, drittes, viertes Mal brauche, erspare ich mir den Zugriff auf das langsame Medium und habe dadurch einen Zeitvorteil.

    Ciao,
     Martin

    --
    Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
    1. Hallo Martin!

      Hallo,

      [Pipelining]
      Was bringt dies also? D.h. ich muss ja immer noch so lange wie vorher auf mein Ergebnis warten, oder?

      auf ein einzelnes Ergebnis: Ja.
      Viele Optimierungsmöglichkeiten wie Pipelining oder Caching bringen erst dann einen Nutzen, wenn man dieselbe Information (Programmcode oder Daten) mehrmals nacheinander nutzt.

      Bei einem (beispielsweise) vierstufigen Pipelining würde man vier Schritte brauchen, um das Ergebnis einer Operation zu bekommen - aber nur insgesamt sieben, um diese Operation viermal hintereinander durchzuführen. Der Vorteil liegt darin, dass mehrere Arbeitsschritte sich zeitlich überlappen können.

      »»[...]

      Jetzt wirds klarer ;-) Eine Frage hätte ich aber noch: Wie kommst du auf die Anzahl von "7", für eine viermalige Berechnung?

      1. Hello,

        Jetzt wirds klarer ;-) Eine Frage hätte ich aber noch: Wie kommst du auf die Anzahl von "7", für eine viermalige Berechnung?

        sieh es dir am Beispiel der folgenden Pipeline an: du hast die Stufen A, B, C, D und die Anweisungen 1..n - jede nachfolgende Zeile zeigt einen Taktzyklus des Prozessors:
        A  B  C  D
        1                 - Beginne Bearbeitung Operation 1
        2  1              - Operation 1 in Bearbeitung, 2 beginnt
        3  2  1           - Operationen 1, 2 in Bearbeitung, 3 beginnt
        4  3  2  1        - Operationen 1, 2, 3 in Bearbeitung, 4 beginnt
        5  4  3  2        - Operation 1 abgeschlossen, 2, 3, 4 in Bearbeitung, 5 beginnt
        6  5  4  3
        7  6  5  4
        8  7  6  5        - nach dem 7. Taktzyklus sind 1..4 abgeschlossen

        Aber es ist halt wichtig was Jörg sagte: du kannst in Zeile 2 nur dann schon mit der Bearbeitung von (2) beginnen, wenn du weißt, dass dies die nächste Operationen ist. Wenn Operation (1) eine IF-Bedingung ist, die zwei mögliche Ausgänge hast und du erkennst den korrekten Ausgang erst am Ende, was schickst du dann in die Bearbeitung? beide nacheinander, den "wahrscheinlicheren", ...

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
      2. Hi,

        Jetzt wirds klarer ;-)

        dann is' ja gut. :-)

        Eine Frage hätte ich aber noch: Wie kommst du auf die Anzahl von "7", für eine viermalige Berechnung?

        Oh, doch noch nicht so ganz klar?
        Also, versuchen wir's mit einer schematischen Darstellung. Die Kästchen symbolisieren die Stufen der Pipeline, die Buchstaben A bis D die jeweils laufende Operation.

        +---+---+---+---+
        Schritt 1:  | A |   |   |   |
                    +---+---+---+---+

        +---+---+---+---+
        Schritt 2:  | B | A |   |   |
                    +---+---+---+---+

        +---+---+---+---+
        Schritt 3:  | C | B | A |   |
                    +---+---+---+---+

        +---+---+---+---+
        Schritt 4:  | D | C | B | A |  A ist in der letzten Stufe der Pipeline
                    +---+---+---+---+  Nach Schritt 4 purzelt das Ergebnis heraus

        +---+---+---+---+
        Schritt 5:  |   | D | C | B |  Nach Schritt 5 kommt das Ergebnis von B
                    +---+---+---+---+

        +---+---+---+---+
        Schritt 6:  |   |   | D | C |  Nach Schritt 6 kommt das Ergebnis von C
                    +---+---+---+---+

        +---+---+---+---+
        Schritt 7:  |   |   |   | D |  Nach Schritt 7 kommt das Ergebnis von D
                    +---+---+---+---+

        Jetzt etwas klarer?

        So long,
         Martin

        --
        Denken ist wohl die schwerste Arbeit, die es gibt. Deshalb beschäftigen sich auch nur wenige damit.
          (Henry Ford, amerikanischer Industriepionier)
  2. Moin,
    Ich versuch mal mein Glück, obwohl das schon alles länger her bei mir ist :)

    Kann mir mal jemand das mit dem Pipelining erklären, also wie das genau funktioniert in einem Prozessor? Ich durchblicke insbesondere den folgenden Punkt nicht ganz: Man nimmt eine weitere Registerstufe dazu und unterteilt die Funktion also in Teilaufgaben. Hierdurch erhöht sich zwar die mögliche Taktfrequenz (-->Durchsatz) aber die Latenz erhöht sich.

    Soweit ich weiß, erhöht sich die Latenz nicht zwingend. Gemäß dem Wikipedia-Artikel ist das Problem der Latenz nur dann relevant, wenn es zu einem Pipeline-Flush kommt (die Pipeline also verworfen werden muss):
    Dies ist ja auch logisch, wenn ich nur wenig Stufen in der Pipeline habe und dann alles "wegwerfen" muss, ist nicht so viel "hin", wie wenn ich viel Stufen habe, also viele Aufgaben in der Pipeline "stecken".

    Wenn es aber zu wenig Kontrollfluss-Wechseln kommt (= wenig Pipeline-Flushes nötig sind), ist Pipelining IMMER sinnvoll, weswegen das ja auch alle modernen Prozessoren so machen: Während ein Teil der Pipeline mit Aufgabe X beschäftigt ist, kann ein anderer Teil schonmal mit Aufgabe Y anfangen. Je besser ein Programm gewissermassen "vorhersagbar" ist (der Prozessor also im Vorfeld schon weiss, was er die nächste Zeit so tun wird) desto rentabler ist Pipelining.

    Die Taktfrequenz wird IMO dadurch NICHT erhöht, den selbige ist ja abhängig von den Registern (wie schnell diese also schalten können) - es wird aber der DURCHSATZ (wie Du ganz richtig gesagt hast) erhöht, weil in einem Taktzyklus immer gleich mehrere Aufgaben erledigt werden, und nicht mehr so lange bis zum Beginn der Ausführung des nächsten Befehls gewartet werden muss.

    Alles ohne Gewähr :)

    Hope that helps,

    Jörg