====== 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)