1. Einzyklus 2. Mehrzyklus 3. Überlappende Abarbeitung (Pipelining) Einzyklus: 1. Befehl holen 2. Befehl dekodieren Überlappende und taktsynchrone Verarbeitung Die Stufen sind voneinander getrennte Schaltnetze Pipeline-Stufe, Pipeline-Phase: Kombinatorische Schaltnetze Pipeline-Stufen sind über Pipeline-Register voneinander getrennt Pipeline-Register: Nicht sichtbare Puffer-Register Schaltnetze Si Die Pipeline-Register werden om selben Taktsignal gesteuert und arbeiten synchron Je nach Tiefe und Gatter-Anzahl = Schaltnetz hat verschiedene Verzögerungszeiten Da synchron: Muss gewartet werden. Das Schaltnetz mit längster Verzögerungszeit: Kritischer Pfad Minimal mögliche Taktperiode Latenz einer Pipeline: Anzahl der Takte, die ein Befehl braucht um alle Stufen einer Pipeline zu durchlaufen k: Anzahl der Pipeline-Stufen Durchsatz: Anzahl der Befehle die eine Pipeline pro Takt verlassen können Prozessor ohne Pipeline: n*k Takte, bei n Befehlen k-stufige Pipeline: k+n-1 Beschleunigung - Speedup S = (n*k)/(k+n-1) Stufen: 1. Befehl holen 2. Befehl dekodieren 3. Operanden in der ALU bereitstellen 4. Operation in der ALU ausführen bzw. Speicherzugriff 5. Resultat ins Architekturregister zurückschreiben MIPS-Pipeline IF, ID, EX, MEM, WB IF-ID: Ir, PC+4 Ir: Befehlsregister ID-EX: Ai1, Ai2 Ai1, Ai2: ALU-Eingaberegiser EX-MEM: Ao ALU-Ausgaberegister: Ao IF-Phase: Befehl wird von der Befehlsbereitstellungseinheit in die Pipeline geladen: Wird aus dem Code-Cache geladen und in Ir übertragen Befehlszähler wird um 4 erhöht ID-Stufe: Befehl wird aus Befehlsregister entnommen und dekodiert Es werden Steuersignale erzeugt Es werden Operanden aus dem Registersatz geladen und in Ai1 und Ai2 gespeichert EX-Phase: Eigentliche Operation in der ALU wird ausgeführt MEM-Stufe: Für Lade, Speicher und Sprungbefehle Speicherbefehl: Aus Ao in den Speicher schreiben Ladebefehl: Ins Ladewert-Register Lv übertragen Sprungbefehl: Sprungziel-Addresse aus Jta in den Befehlszähler WB-Phase: Entweder der Wert des ALU-Ergebnisregister oder des Ladewert-Registers ins Universalregister Pipeline-Konflikte Die Situationen die zu Pipeline-Konflikten führen: Pipeline-Hemmisse (Hazards) Datenkonflikte: Operand noch nicht verfügbar Das Resultat soll in ein Register geschrieben werden, was noch von einem vorherigen Befehl genutzt wird Steuerflusskonflikte: Programmsteuerbefehle: Zieladdresse noch nicht berechnet oder nicht klar: Ob überhaupt gesprungen wird Struktur und Ressourcen-Konflikte Befehle, Instructions I1, I2 Datenabhängigkeiten zwischen den Befehlen Datenabhängigkeit führt zu Datenkonflikt Drei Arten von Datenabhängigkeiten 1. Echte Datenabhängigkeit - True Dependency - Lese-nach-Schreib-Konflikt - Read after Write (RAW) 2. Gegenabhängigkeit - Anti Dependency - Schreibe-nach-Lese-Konflikt Write after Read (WAR) 3. Ausgabeabhängigkeit - Output Dependency - Write after Write - WAW True - Anti - Output RAW WAR WAW True - RAW Anti - WAR Output - WAW ED: Echte Datenabhängigkeit GA: Gegenabhängigkeit AA: Ausgabeabhängigkeit Gegenabhängigkeiten und Ausgabeabhängigkeiten: Scheinbare Datenabhängigkeiten, Name Dependency, Namensabhängigkeit Sind nicht probelmimmanent Können durch Variablenumbennenung entfernt werden Echte Datenabhängigkeiten: Datenabhängigkeiten Wenn die Befehle nur weit genug entfernt sind, spielen Datenabhängigkeiten keine Rolle Echte Datenabhängigkeit: Befehle, die in-order ausgeführt werden I1: $t1 in WB I2: $t1 in ID Software-Lösungen: 1. Einfügen von Leerbefehlen: Fügt entsprechend Leerbefehle ein 2. Statische Befehlsumordnung Hardware-Lösungen: 1. Lehrlauf der Pipeline 2. Forwarding 3. Dynamische Befehlsumordnug Leerlauf der Pipeline: Anhalten der Pipeline Datenabhängigkeit muss erkannt werden Pipeline-Sperrung, Interlocking, Stalling Pipeline-Leerlauf Pipeline-Blase (Bubble) Forwarding: Mehr Aufwand: Wird nicht aus dem Architekturregister sondern direkt aus dem ALU-Ausgaberegister geladen Nach WB und in ID Ao: Nach EX IF, ID, EX, MEM, WB $t1: Nach WB Ao: Nach EX Da ID auf EX folgt, passt! Forwarding mit Interlocking Wie implementieren: Vergleich von Register-Quell und Ziel-Addresse, entsprechend schalten Steuerflusskonflikte Sprungbefehl: Erst nach MEM Also, drei Takte IF, ID, EX, MEM, WB MEM: Drei Takte Software-Lösungen, Steuerflusskonflikte 1. Verzögerte Sprungtechnik: Einfügen von Verzögerungszeitschlitze - Delay Slots 2. Statische Befehlsumordnung: Die Verzögerungszeitschlitze wird vom Compiler mit Befehlen, die in der logischen Reihenfolge vor dem Sprung liegen gefüllt 3. Statische Sprungvorhersage: Bei bedingten Sprüngen: Ausführen oder nicht ausführen Keine reine Softwarelösung Hardware-Lösungen: 1. Pipeline-Leerlauf 2. Dynamische Sprungvorhersage DLX: Deluxe von Hennesy und Patterson stark mit MIPS verwandt