myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

Befehlsverarbeitung mit Pipelining

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 21.03.15, 12:51   #1
Elektrotechnik
Anfänger
 
Registriert seit: Jan 2013
Beiträge: 19
Bedankt: 6
Elektrotechnik ist noch neu hier! | 0 Respekt Punkte
Standard Befehlsverarbeitung mit Pipelining

Hallo,

Kennt sich jemand zufälligerweise mit der Befehlsverarbeitung über das Pipelining aus im Zusammenhang mit Mikroprozessoren? Vielleicht kann ja jemand erwähnen ob er damit etwas anfangen kann. Die Musterlösungen habe ich hier alle stehen, doch leider kann ich absolut rein gar nichts nachvollziehen. Das Skript hilft mir auch absolut nicht weiter. Also wenn jemand damit etwas anfangen kann würde ich mich sehr freuen zu verstehen wie man hier den vorgeht.

Mal eine Beispielaufgabe:

,,Eine RISC-Maschine mit Befehlspipelining arbeitet load-Befehle in 5 Zyklen (IF, ID,
ALU, DM, WB) ab. Arithmetische Befehle werden in jeweils 4 Zyklen abgearbeitet
(IF, ID, ALU, WB). Sprungbefehle werden in 3 Zyklen abgearbeitet (IF, ID, ALU).
Folgende Befehlsfolge soll untersucht werden:

Start: Load r1, y (lade Speicherzelle y in Register r1)
Bnz r1, L1 (springe nach L1, wenn r1 ≠ 0, sonst nächster Befehl)
Load r2, x (lade Speicherzelle x in Register r2)
Add r2,r2,r1 (r2 := r1 + r2)
L1: Sub r2,r2,#1 (r2 := r2 – 1)

Skizzieren Sie den zeitlichen Ablauf in der Pipeline bei maximaler Überlappung der
Befehle für die Befehlsfolge mit
a) y=0 (5 Punkte)"
b) y=1 (5 Punkte)

Die Musterlösung sieht im übrigen ,,einfach" aus, ich komme jedoch einfach nicht dahinter wie sie zustande kommt.
Elektrotechnik ist offline   Mit Zitat antworten
Ungelesen 22.03.15, 20:25   #2
spartan-b292
Echter Freak
 
Benutzerbild von spartan-b292
 
Registriert seit: Mar 2010
Ort: /home/spartan-b292
Beiträge: 2.866
Bedankt: 1.700
spartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punktespartan-b292 leckt gerne myGully Deckel in der Kanalisation! | 230828 Respekt Punkte
Standard

Aus dem Kopf würde ich sagen dass das etwa so aussieht.

Zunächst musst du gucken wie für y=0 der Programmablauf ist, das wäre dann so:

Load r1, y
Bnz r1, L1 (Kein Sprung da y=0)
Load r2, x
Add r2,r2,r1

Damit hast du folgende Typen von Befehlen:
Load, Branch, Load, Arithmetik

Das Müsste dann iin der Pipeline irgendwie so aussehen:
Befehl n : IF,ID,EX,DM,WB
Befehl n+1: ##,IF,ID,EX,##,##
Befehl n+2: ##,##,IF,ID,EX,DM,WB
Befehl n+3: ##,##,##,IF,ID, EX,##,WB

Leerstellen habe ich als ## gesetzt und ALU mal wegen der Formatierung durch EX(ecute) ersetzt.
__________________
"They who can give up essential liberty to obtain a little temporary safety, deserve neither liberty nor safety"
spartan-b292 ist offline   Mit Zitat antworten
Die folgenden 2 Mitglieder haben sich bei spartan-b292 bedankt:
Ungelesen 22.03.15, 23:15   #3
Delta538
Newbie
 
Registriert seit: Oct 2010
Beiträge: 96
Bedankt: 80
Delta538 zeigt Immunität gegen Parfüm! | 253 Respekt PunkteDelta538 zeigt Immunität gegen Parfüm! | 253 Respekt PunkteDelta538 zeigt Immunität gegen Parfüm! | 253 Respekt Punkte
Standard

Zitat:
Zitat von spartan-b292 Beitrag anzeigen
Das Müsste dann iin der Pipeline irgendwie so aussehen:
Takt......... : 1 , 2 , 3 , 4, 5, 6, 7, 8 (ergänzung von mir)
Befehl n....: IF, ID, EX, DM, WB
Befehl n+1: ##,IF, ID, EX, ##,##
Befehl n+2: ##,##,IF, ID, EX, DM,WB
Befehl n+3: ##,##,##,IF, ID, EX, ##, WB
So hätte ich das auch gemacht

Als kleine Ergänzung noch dazu. Jeder Befehl besteht aus mehreren Operationen wie zum beispiel dem decodieren des Befehls, das laden der Operatoren usw..

Ohne Pipelining würde immer nur ein Befehl alle seine Operationen ausführen bis er fertig ist. Das ist aber (offensichtlich) sehr langsam, wesswegen die Befehle die Operationen parallel durchlaufen.
Zum Beispiel kann gleichzeitig ein Operator von Befehl 2 geladen werden, während Befehl 3 decodiert wird und Befehl 1 die ALU beansprucht.

Das ganze bringt ungefähr einen Geschwindigkeitsvorteil in Abhängigkeit von der Anzahl der Pipelinestuffen (Bei einer vierstufigen Pipeline (Decode, Fetch, Execute, Store) hättest du also den Faktor x4).

Probleme: Da die CPU nicht in die Zukunft gucken kann, muss ein Compiler/Entwickler darauf achten, dass die Befehle sich nicht behindern. Es kann nämlich passieren, dass Befehle die voneinander abhängen falsch bearbeitet werden (Pipeline-Hazard).
Beispiel: Du addierst etwas in einem register und verwendest den erzeugten Wert im nächsten Befehlsaufruf (Data-Hazard). Nun kann es sein, dass dein zweiter Befehl den alten Wert geladen hat bevor der erste Befehl den Wert in das register zurückgeschrieben hat (aufgrund der Pipeline-Schritte). Abhilfe schaffen hier sogenannte NOP-Befehle (No Operation), die nichts machen (bzw. keine Auswirkung haben). Diese werden regulär in die Pipeline gepackt und abgearbeitet und schaffen Zeit. Anstatt NOP-Befehle kann man die bestehdenen Befehle (sofern möglich) neu anordnen, so dass diese richtig in der Pipeline landen (ist für die Performance besser!). Alternativ gibt es auch die Möglichkeit ein berechneten Wert an den nächsten Befehl weiterzugeben (forwarding) wofür aber extra Hardware benötigt wird.

Neben den Data-Hazards gibt es das gleiche noch für Sprünge (Control-Hazards) wenn du z.B. bei einem bne-Befehl vorher abhängigkeiten hast (du willst bei 0 Springen aber in der Pipeline wurde der Befehl noch nicht zurückgeschrieben und es wird ein falscher Wert geladen und verglichen). Auch hier kann man mit NOPs arbeiten oder aber man benutzt die Branch-Prediction in dem man den Sprung "vorhersagt" (über Analyse/Anmerkungen), z.B. ist es wahrscheinlicher in einer Schleife diese zu wiederholen so das ein Sprung innerhalb der Schleife wahrscheinlicher ist als ein Sprung aus der Schleife raus. Sollte man sich geirrt haben wird die Pipeline geleert und zurückgesetzt.
Delta538 ist offline   Mit Zitat antworten
Folgendes Mitglied bedankte sich bei Delta538:
Ungelesen 25.03.15, 11:48   #4
Elektrotechnik
Anfänger
 
Registriert seit: Jan 2013
Beiträge: 19
Bedankt: 6
Elektrotechnik ist noch neu hier! | 0 Respekt Punkte
Standard

Das ist wirklich nicht mein Ding, trotzdem danke an euch Zwei! Aus welchen Grund auch immer möchte ich das nicht verstehen, obwohl ich wirklich überdurchschnittlich Zeit darin investiert habe im Gegensatz zu anderen Bereichen. Ich werde mir das nach der Klausur aus Eigeninteresse nochmal ansehen. Wir schreiben demnächst (morgen^^) eine Klausur die sich in Hochfrequenztechnik, Nachrichtentechnik und Digitale Kommunikationsnetze aufteilt. Letzteres wird mit 1/7 gewichtet, wobei eine Teilaufgabe von letzteres davon das oben genannte ist und das die einzige Aufgabe ist die ich absolut nicht verstehe. Kann man das nicht ohne ein Verstädnis lösen? Ich weiss zwar grob wie die CPU aufgebaut ist und wie die Befehlsverarbeitung funktioniert, aber naja hier nützt mir das irgendwie doch nichts...

Mir ist jetzt aufgefallen das die Lösungen doch relativ ähnlich aussehen, wobei ab und zu ein bzw. mehrere ,,ST" zwischen den Zyklen vorkommen. Kann man das eventuell erkennen ohne ein großes Verständnis dafür zu besitzen ? Das gleiche würde mich im Zusammenhang mit ,,Abbr" interessieren.

Ich weiss man sollte was lernen aber der Stoff ist wirklich viel zu viel, da reicht es mir erstmal paar Punkte zu holen und später nochmal alles besser zu verstehen.... Es handelt sich dieses mal um eine recht ähnliche Aufgabe:

[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ]
Elektrotechnik ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.


Sitemap

().