Themen heute Besprechung des 6. Übungsblattes Datenpfade bei MIPS Daten- und Kontrollabhängigkeiten erkennen und behandeln Aufgaben Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Besprechung des 6. Übungsblattes 1. Aufgabe Es gelten bei MIPS/SPIM auch die allgemeinen Regeln zum Arbeiten mit Gleitkommazahlen Insbesondere sollte man nicht prüfen, ob der Summand in der Taylor-Reihe exakt 0 ist, sondern: Prüfen, ob er klein genug ist, dass sich bei der Addition der aktuelle Wert der Iteration nicht mehr verändert oder Prüfen, ob er kleiner als ein vorgegebenes (sehr kleines) Epsilon ist Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Besprechung des 6. Übungsblattes 2. Aufgabe Bei der Berechnung des Speedups muss beachtet werden, dass die fünf Phasen im sequentiellen Betrieb unterschiedlich lange dauern Es reicht also eigentlich nicht, einfach nur die benötigten Taktzyklen zu betrachten (also „n * k“ im Zähler), man muss die tatsächlich benötigte Zeit betrachen; Anwendung der Vorlesungs-Formel gab aber auch volle Punkte Außerdem bitte beachten: 1000 Nanosekunden (ns) = 1 Mikrosekunde (µs) 1000 Mikrosekunden (µs) = 1 Millisekunde (ms) Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenpfade bei MIPS In der Vorlesung wurden schon die benötigten Komponenten und Datenpfade für MIPS-Befehle vom Typ R und Load-/Store-Befehle besprochen Wir wollen das hier nochmal wiederholen und die sequentielle Ausführung betrachten von... (Tafel) ... der Addition mit einer Konstante: addi (Typ I) … dem unbedingten Sprung zur Adresse in einem Reg.: jr (Typ R) Beim Zeichnen von Leitungen des Datenpfades empfiehlt es sich, die „Breite“ der Leitungen (Bit) daneben zu schreiben, wenn es nicht sowieso aus dem Kontext klar ist Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenpfade bei MIPS (2) Quelle: Vorlesung TI2/RO, © ITEC Uni Karlsruhe Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenpfade bei MIPS (3) Hat man sich die Datenpfade für die sequentielle Ausführung erst mal klar gemacht, ist es leicht, eine Unterteilung in verschiedene möglichst unabhängige Phasen vorzunehmen Pipelining wird dann dadurch möglich, dass man in dieser Unterteilung die einzelnen Phasen durch Latches als Puffer-Register voneinander trennt Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenpfade bei MIPS (4) Quelle: Vorlesung TI2/RO, © ITEC Uni Karlsruhe Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenpfade bei MIPS (5) Quelle: Vorlesung TI2/RO, © ITEC Uni Karlsruhe Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Abhängigkeiten (Übersichtsfolie) Drei verschiedene Typen von Abhängigkeiten bzw. Konflikten: Datenabhängigkeit Kontrollabhängigkeit Zwei Instruktionen lesen/schreiben die selbe Datenressource (z.B. Register) Eine Instruktion bestimmt, ob die andere ausgeführt wird (z.B. bedingter Sprung) Strukturabhängigkeit Zwei Instruktionen versuchen die selbe (nur einmal vorhandene) Ressource gleichzeitig zu verwenden Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenabhängigkeiten Es gibt drei Typen von Datenabhängigkeiten: „Read After Write“ (RAW, auch: „Echte Abhängigkeit“) „Write After Read“ (WAR, auch: „Gegenabhängigkeit“) „Write After Write“ (WAW, auch: „Ausgabeabhängigkeit“) Bei der DLX-Architektur (MIPS auch) können nur RAWKonflikte auftreten, da nur im 2. Takt aus Registern gelesen und im 5. in die Register geschrieben wird Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenabhängigkeiten (2) „Read After Write“ Abhängigkeit liegt vor, wenn Instruktion 1 ein Register schreibt, welches Instruktion 2 liest Beispiel: d := a + b e := c + d Konflikt liegt vor, wenn Instruktion 1 den Schreibvorgang noch nicht durchgeführt hat, sobald Instruktion 2 liest Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenabhängigkeiten (3) „Write After Read“ Abhängigkeit liegt vor, wenn Instruktion 1 ein Register liest, welches Instruktion 2 schreibt Beispiel: c := a + b a := d + e Konflikt liegt vor, wenn Instruktion 1 den Lesevorgang noch nicht durchgeführt hat, sobald Instruktion 2 schreibt Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenabhängigkeiten (4) „Write After Write“ Abhängigkeit liegt vor, wenn Instruktion 1 und Instruktion 2 in das selbe Register schreiben Beispiel: a := b + c a := d + e Konflikt liegt vor, wenn Instruktion 1 nach Instruktion 2 schreibt, also das bereits geschriebene Ergebnis von Instruktion 2 überschreibt Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenabhängigkeiten (5) Behandlung von Datenabhängigkeiten entweder … … in Software → Der Compiler erzeugt konfliktfreien Code Vorteil: Hardware-Architektur bleibt einfach Nachteil: Compiler muss detaillierte Kenntnisse über Aufbau des Ziel-Prozessors haben … in Hardware → Abhängigkeit wird von Hardware erkannt und Konflikt verhindert Vorteil: Keine Anpassung des Compilers nötig Nachteil: Je nach Hardware-Lösung sehr hoher Entwurfs- und Verschaltungsaufwand Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenabhängigkeiten (6) Behandlung von Datenabhängigkeiten in Software: Compiler muss Datenabhängigkeiten erkennen Verhinderung, dass Konflikte entstehen, durch das Einfügen von Tue-Nichts-Operationen (NOP) Wenn möglich, Umordnung von Instruktionen, um die Zahl der benötigten NOPs gering zu halten (Performance!) Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Datenabhängigkeiten (7) Behandlung von Datenabhängigkeiten in Hardware: Schaltung auf Hardware-Ebene muss Abhängigkeiten erkennen Konfliktverhinderung entweder durch Anhalten der Pipeline („Pipeline Interlock“) Forwarding (abhängige Instruktion erhält Daten über verdrahtete „Abkürzung“ von anderer Pipeline-Stufe statt aus dem Register) Forwarding kann nicht alle Konflikte lösen (Beispiel, bei dem es nicht geht?) Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Kontrollabhängigkeiten Behandlung von Kontrollabhängigkeiten wie bei Datenabhängigkeiten in Hardware oder Software möglich Vor- und Nachteile ähnlich (welche waren das?) Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Kontrollabhängigkeiten (2) Behandlung von Kontrollabhängigkeiten in Software: Compiler muss Kontrollabhängigkeiten erkennen Wie bei den Datenabhängigkeiten Behandlung durch Einfügen von NOPs und evtl. Umordnung Hinter Sprungbefehlen stehende Befehle werden (architekturabhängig) unter Umständen mitausgeführt („branch delay slots“, vgl. MIPSTutoriumsfolien) Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Kontrollabhängigkeiten (3) Behandlung von Kontrollabhängigkeiten in Hardware: Schaltung auf Hardware-Ebene muss Abhängigkeiten erkennen Behandlung entweder durch Pipeline-Leerlauf bei erkanntem Sprungbefehl (ineffizient) Sprungvorhersage, entweder statisch („Sprung wird nie genommen“, „Sprung wird immer genommen“) oder mit kleinem Zusatzspeicher und z.B. DEA für die letzten Sprünge Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Aufgaben S1: MUL R2, R2, R5 (R5 := R2 * R2) S2: MUL R4, R2, R1 (R1 := R4 * R2) S3: ADD R5, R3, R5 (R5 := R5 * R3) S4: ADD R1, R5, R1 (R1 := R1 * R5) Aufgabe 1 (Tafel) Unsere Architektur verwende die DLX-Pipeline 1. Alle Datenabhängigkeiten bestimmen 2. Welche der Datenabhängigkeiten führen zu Konflikten? 3. Lösen der Konflikte durch Einfügen von (möglichst wenigen) NOPs 4. Aufgabenteil 2. & 3., wenn Laden von Operanden (Stufe 2) und Rückschreiben von Ergebnissen (Stufe 5) erst am Ende des Taktes? Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Aufgaben (2) lw $t7, 0($v0) lw $s0, 4($v0) add $s0, $s0, $t7 mul $t7, $t7, $s0 Aufgabe 2 (Tafel) 1. Alle Datenabhängigkeiten bestimmen, gibt es Kontrollabhängigkeiten? 2. Welche der Datenabhängigkeiten führen zu Konflikten? 3. Alle Konflikte softwareseitig durch das Einfügen von NOPs lösen 4. Angenommen, Konflikte werden vom Prozessor soweit wie möglich durch Forwarding erkannt (Pipeline anhalten kann die CPU aber nicht!), gibt es dann noch Konflike und falls ja, wo werden noch NOPs benötigt? Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Aufgaben (3) S1: addi $t1, $t0, 1 S2: srli $t2, $t1, 2 S3: or $t3, $t1, $t2 S4: srli $t1, $t3, 4 S5: add $t4, $t2, $t3 Aufgabe 3a (Tafel) Alle Datenabhängigkeiten des gegebenen MIPS-Codes bestimmen Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz Aufgaben (4) S1: anfang: andi $t2, $t1, 1 S2: beqz $t2, weiter S3: subi $t1, $t1, 1 S4: j anfang S5: weiter: srli $t1, $t1, 1 S6: j anfang S7: addi $t3, $t0, 1 Aufgabe 3b (Tafel) Annahme: Hardware erkennt/löst keine Konflikte Alle Konflikte mit (möglichst wenigen) NOPs auflösen Technische Informatik 2 / Rechnerorganisation: Tutorium 25 Tutoriumsfolien erstellt im SS 2009 von Christian Mandery Lizensiert unter „Creative Commons 3.0 Attribution + Share-Alike“-Lizenz