Frage Pipelining

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Frage Pipelining
Ich hätte drei Fragen zu Hazards, da ich leider in der Tutoriumsstunde nicht anwesend sein konnte:

Bei bedingten Sprüngen wird dann einfach der nächste sequentielle Befehl sofort in die Pipeline geschoben und falls der bedingte Sprung in der BA Phase woanders hin sprang, abgebrochen?

Bei nicht-bedingten Sprüngen wird also in der BA Phase der jeweils richtige Befehl in die Pipeline geschoben und davor Leerlauf der Pipeline?

Datenhazards treten auch auf, wenn der benötigte Parameter nur gelesen nicht verändert wird oder?


ja.

Nein. Wir brechen den Befehl IMMER ab, wenn die Pipeline nicht spekuliert. Selbst wenn wir nicht springen sollten, müssen wir also den Befehl ERNEUT holen. Zumindest war es bei den letzten Aufgaben meistens so.

Meistens stand in den Aufgaben, dass der Program Counter bei Sprüngen in der DE- oder OH-Phase gesetzt wird. Auch sehr häufig wird zumindest immer der nächste Befehl unbedingt geholt. Für etwaige weitere Stufen - sofern wir denn wissen, dass eine Sprunginstruktion in der Pipeline ist - bedeutet das aber, wie du schreibst, Leerlauf.

Ohne Beispiel ist das schwer zu beantworten. Ein Datenhazard benötigt in jedem Fall einen Schreibzugriff. Wenn nämlich nur zwei Instruktionen hintereinander lesen, dann lesen sie so oder so immer den gleichen Wert. Hier tritt also kein Hazard auf. Dafür kann aber eine davor ausgeführte schreibende Instruktion für potenzielle Datenhazards bei weiteren nachfolgenden lesenden Instruktionen führen.

1 „Gefällt mir“

Okay, danke das war sehr hilfreich