====== Rechnerarchitektur ====== **Prüfer:** Prof. Fey\\ **Beisitzer:** Franz Richter Zettel und Stift stehen zur Verfügung. Laut Vorlesung ist die 5 ECTS-Prüfung identisch zur 7,5 ECTS-Prüfung. Prof. Fey holt sich zwischendurch immer Ideen für Fragen von einem beiliegenden Blatt. Es wirkt so, als soll jedes Thema zumindest einmal angesprochen werden. Note: sehr gut ===== CISC ===== **F:** Wie funktioniert ein Mikroprogrammwerk und warum nutzt man es?\\ **A:** Mikroprogrammwerk aufgemalt und dabei einzelnde Komponenten erklärt: Makroinstruktion | v Decoder | v Sequencer ---------------------------> CAR ^ | | v | Mikroprogrammspeicher | | | v | CBR | | | v |------------------------------ Decoder | CPU-interne und Speicherbussignale v **F:** Ist es auch ohne Decode hinter CBR möglich?\\ **A:** Ja, aber das ist dann wieder weniger flexibel; **Anm.:** Etwas viele Prozessorsignale zu speichern (tausende) **F:** Hat der Sequencer auch noch anderen Eingänge?\\ **A:** Ja, die ALU-Flags und natürlich die Clock. **F:** Welchen Vorteil hat nun ein Mikroprogrammwerk?\\ **A:** Es sind Fehler behebbar, man kann Kompatibiltität mit anderen Befehlssätzen herstellen und auch Kompatibilität mit anderen Befehlssatzversionen ist möglich. **F:** Warum wollte man dann von CISC weg?\\ **A:** Befehle sind unterschiedlich lang, komplex, und haben viele Adressierungsarten und Berechnungen dieser in einem Befehl. Mit Aufkommen den Pipelines wollte man das vereinfachen -> RISC **F:** Was sind die Vorteile von RISC?\\ **A:** Immer gleich große Befehlsworte, festverdrahteter Decoder (kein Mikroprogrammwerk mehr nötig), höheres Takten aufgrund der Pipeline **F:** Wie ist der Durchsatz einer Pipeline bei k Stufen und tau Stufenzeit?\\ **A:** (Wollte erst Speedup erklären:) Speedup bei unendlich Instruktionen ist k. Ein Schritt dauert tau Sekunden, jeden Schritt wird ein weiterer Befehl fertig, außer beim ersten, der braucht k Schritte, bevor einer fertig wird. **F:** Und damit ist jetzt der Durchsatz?\\ **A:** 1/tau **F:** Welche Probleme gibt es beim Pipelining?\\ **A:** Strukturhazard ("zu wenig Hardware"), Steuerungshazard ("Sprünge"), Datenhazard ("Ergebnisabhängigkeiten") **F:** Steuerungshazard wurde bereits in einer anderen Prüfung behandelt. Welche Datenhazards gibt es alles?\\ **A:** RAW (behebbar durch Forwarding), WAW, WAR RAW: div r0, r1, r2 add r3, r0, r4 r0 ist hierbei in der Operandenholphase unter Umständen noch nicht berechnet worden WAR: div r0, r1, r2 add r1, r3, r4 Unter Umständen kann r1 vom add-Befehl geschrieben werden, bevor div ihn als Operand geholt hat. WAW ist so ähnlich wie WAR. **F:** Wann passiert so etwas? (WAR)\\ **A:** Superskalare Ausführung. (**Anm.:** Eigentlich war gewünscht zu sagen, dass div eventuell die Operanden noch nicht geholt hat, weil auf r2 gewartet werden muss)\\ **A:** Das kann man aber ganz einfach durch Kopieren des Wertes Lösen wie bei Tomasulo. **F:** Das ist die Lösung! Wie heißt denn der Fachbegriff zu Tomasulo?\\ **A:** Reservierungsstationen? **F:** ... beinhalten Register ...?\\ **A:** Registerumbenennung! **F:** Noch einen Schritt zurück: Wie funktioniert das Scoreboard? (Es war nichts vorgegeben)\\ **A:** Die DE-Phase wird in DE1 und DE2 (auch Operandenholphase) getrennt. Beim Warten werden stalls eingefügt.\\ \\ DE1: WAW-Hazard auflösen durch Prüfung, ob Zielregister nicht von anderer Operation beschrieben werden wird.\\ DE2: RAW-Hazard auflösen durch Prüfung, ob Operandenregister fertig sind\\ EX: Langweilig fürs Scoreboard\\ WB: WAR-Hazard auflösen durch Prüfung, ob eine Instruktion das Zielregister noch als Operandenregister benötigt **F:** Und was ist das Scoreboard?\\ **A:** Datenstrukturen, speichern beispielsweise Busy, Zielregister, Operandenregister, Operandenregisterfüllende FU (das wollte er hören) ===== Multiprozessorsysteme ===== **F:** Warum Multiprozessorsysteme?\\ **A:** Pollacks Regel, Inverse Pollacks Regel erklärt und Vorteile gezeigt. Grund für diese Überlegungen war, dass man durch Drehen an der Taktschraube an der thermischen Belastungsgrenze ankam. Daher: Mehr Prozessoren/Kerne, obwohl schwieriger zu programmieren (macht nicht die Hardware selbst, wie beim Pipelining). **F:** Ein bisschen weiterführendes Thema: Um was muss sich ein Programmierer kümmern?\\ **A:** Starten weiterer Instruktionsströme, Teilen des Problems in Teilprobleme, die parallel ausgeführt werden können. **F:** Annahme, das sei gegeben, aber die Befehlsströme müssen sich koordinieren.\\ **A:** Synchronisation, z.B. per gegenseitigem Ausschluss. Kann aber unter Umständen Deadlocks provozieren. **F:** Auch etwas weg vom Stoff der Vorlesung: Warum sind Multiprozessorsysteme auch besonders in Hinsicht auf Echtzeitsysteme problematisch?\\ **A:** Prioritätsumkehr, die man durch Priority-Ceiling-Protokolle umgehen kann **F:** Das Problem hat man auch bei Singlecore! Tipp: Was ist mit den Caches?\\ **A:** Bei Echtzeitsystemen rechnet man damit, dass jeder Speicherzugriff ein Miss ist. (**Anm.:** Man deaktiviert einfach die Caches) Cache-Kohärenz muss eingehalten werden, was vielleicht wieder nicht ganz vorhersagbar ist. **F:** Und wie behebt man das?\\ **A:** Message-Passing, dann ist es gar nicht nötig, Cache-Kohärenz-Protokolle zu verwenden. ===== Roofline ===== **F:** Was ist das Roofline-Modell?\\ **A:** Vereinfachtes Modell um herauszufinden, ob ein Kernel ("bestimmter Problemalgorithmus") memory-bound oder CPU-bound ist. FLOPS ^ | -------------------------------------------- | / | / | / | / | / --------------------------------------------------------> operationelle Intensität (FLOP/Byte) | | Kernel 1 Kernel 2 Kernel 1 ist memory-bound (kleine operationelle Intensität), Kernel 2 CPU-bound (höhere operationelle Intensität) **F:** Wie kann man die Leistung verbessern?\\ **A:** CPU-Begrenzung: SIMD, Speicherbegrenzung: NUMA beachten **F:** Was ist NUMA?\\ **A:** Unterschiedliche physikalische Anbindungen des Speichers. Memory 0 <--> CPU 0 <--> Verbindung (Hypertransport/QuickpathInterconnect) <--> CPU 1 <---> Memory 1 Zugriff von CPU 0 auf Memory 0 schneller als Zugriff auf Memory 1 von CPU 0. **F:** Unit-Stride-Access ist auch eine Möglichkeit. Was ist das?\\ **A:** Daten gleich in größeren Happen ("Wortbreite") holen, anstelle einzeln. Dabei außerdem DDR-Speicher ausnutzen, der gleich blockweise Daten holt. Also möglichst auf hintereinander liegende Daten zugreifen. ===== Spezialprozessoren ===== **F:** Was ist der Unterschied zwischen Universalprozessoren, FPGAs und ASICs?\\ **A:** Universalprozessoren: Können alles, flexibel, komplex, teuer, "wenige"; ASICs: Spezieller Anwendungsfall, eher simpel, "billig in großer Stückzahl", "viele"; FPGAs: Bei geringerer Stückzahl ASICs vorzuziehen, programmierbare Hardware **F:** Wie funktionieren FPGAs?\\ **A:** "Logikblöcke", die programmiert werden können, was an dem Ausgang bei welchem Eingang anliegen soll. Vernetzung untereinander. Beispiel für Belegung: Eingang | Ausgang --------|-------- 00 | 0 01 | 1 10 | 1 11 | 0 **F:** Welches System ist am energieeffizientesten?\\ **A:** ASICs, da sie ohne Dekodierlogik (im Gegensatz zum Universalprozessor) auskommen. (**Anm.:** Auch Befehlspipeline kann man sich sparen)