RISC-Pipelines im Detail

Daten-Hazards

Bei der Ausführung von Programmen kommt es aber niemals zu einer Beschleunigung um den Faktor vier gegenüber einer Version ohne Phasen-Pipelining. In der Praxis treten immer wieder Störungen (Hazards) auf. Diese Hazards lassen sich in drei Kategorien einteilen: Kontrollfluss-, Daten- und strukturelle Hazards

Der in folgendem Bild dargestellte Codeabschnitt, in der Assembler-Sprache von MPM3 verfasst, zeigt Datenabhängigkeiten zwischen unmittelbar aufeinander folgenden Befehlen. In dieser Sequenz tritt zweifach der Fall auf, dass die Decode-/Load-Phase einer Instruktion Daten benötigt, die am Ende der Write-back-Phase der vorangegangenen Instruktion erst mit Sicherheit in den Registern stehen. Eine Pipeline, die auf diese Abhängigkeiten keine Rücksicht nimmt, würde falsche Ergebnisse liefern.

Das falsche Ergebnis verhindert man am einfachsten, indem man den Ablauf in der Pipeline so lange stoppt, bis die korrekten Inhalte vorliegen. Die weiter unten beschriebenen alternativen Maßnahmen erschweren das Design einer CPU erheblich. Das Stoppen des Ablaufs in der Pipeline erfolgt durch Einfügen von Verzögerungen, meist als Bubble (Blase) oder Injected Instruction bezeichnet.

Im Fall des Beispielprogramms ergibt dies das im unteren Bild dargestellte Verhalten. Die Performance des Prozessors leidet unter der Injected Instruction erheblich. Im Beispiel verlängert sie den Ablauf von theoretisch drei Zyklen für die drei Befehle auf sieben Zyklen (0,43 Instruktionen/Takt, IPC, Instructions per Cycle).