Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 3 » Rechnerarchitektur   (Übersicht)

Rechnerarchitektur

Prüfer: Dietmar Fey, Beisitzer: Lars Schwenger

Allgemein

Lockere Atmosphäre. Professor Fey hilft einem auch, wenn man nicht ganz versteht, worauf er hinaus will. Habe mich auch einmal vertan, aber das war auch nicht schlimm am Ende. Habe bei den Fragen bestimmt etwas vergessen; er hat die 30 Minuten voll ausgenutzt.

Als Vorbereitung bin ich die Vorlesungsfolien durchgegangen (v.a. Kapitel 1 und 2, Kapitel 3 war nicht so wichtig) und habe mir ein paar alte Prüfungsprotokolle angeschaut. Es war wirklich nur das relevant, was in der PDF „Contents for Exam“ steht, und auch davon kam längst nicht alles dran. Note: 1,0

Fragen

Kapitel 1

  • Was bedeutet CISC? Was hat es da mit Mikroprogrammierung auf sich?

Komplexe Makrobefehle mit vielen Adressierungsmodi, die einen Einstieg ins Mikroprogramm bilden.

  • Dann hat man ja auch RISC gemacht. Wie ist es denn da?

Simple Befehle, Load-Store-Architektur, dafür Pipelining.

  • Wie sieht so eine simple RISC-Pipeline denn aus?

Hab hier die klassische Pipeline hingemalt und kurz die einzelnen Phasen ein bisschen erklärt:

  1. Instruction Fetch
  2. Decode
  3. Operand Fetch
  4. Execute
  5. Write Back
  • Wie ist so eine Pipeline jetzt schneller? Bei einer Instruktion machts doch keinen Unterschied…

Ja, aber bei mehreren Instruktionen, weil die dann gleichzeitig in den verschiedenen Phasen sein können.

  • Was können da jetzt für Probleme auftreten?

Habe die drei Arten von Hazards genannt und kurz erklärt: Struktur-Hazards, Daten-Hazards und Kontroll-Hazards. (Ich musste aber kurz für den Namen von Kontroll-Hazards überlegen, und dann hat er schon die nächste Frage gestellt, sodass ich das gar nicht wirklich gesagt habe…)

  • Können Sie mir ein Beispiel für einen Write-After-Read-Hazard geben?

Hier habe ich mich vertan, weil WAR ja in skalaren Pipelines gar nicht auftreten kann. Hatte dann zuerst ein Beispiel für RAW gegeben, aber er hat mir dann geholfen, und mit mir ein Beispiel für WAR konstruiert:

add r1 r2 r3

add r3 r4 r5

r3 bei der zweiten Addition darf erst geschrieben werden, nachdem der Wert für die erste Addition gelesen wurde.

  • Was kann man da jetzt machen? Stichwort Scoreboard…

Man kann die Abhängigkeiten verwalten, und sich dann vermerken, dass r3 von der ersten Addition gebraucht wird. Dann wird gewartet, bis der Operand dort gelesen wurde, und erst dann wird r3 von der zweiten Addition zurückgeschrieben.

  • Wieso geht das bei Tomasulo noch besser?

Man hat Reservierungsstationen, und beim Instruction Issue werden die Werte der Operanden dann in die Reservierungsstation kopiert (oder vermerkt, aus welcher Einheit der Operand kommen wird). Man hat dann also nicht zwei mal dasselbe r3, sondern quasi zwei verschiedene Werte, und dementsprechend auch keine Probleme mit dem Überschreiben.

* Wie werden da die Ergebnisse an andere funktionale Einheiten mitgeteilt?

Über den common data bus.

Kapitel 2

  • Warum hat man Multicore gemacht?

Weil man bei Unicore die Transistoren immer kleiner und schneller gemacht hat, aber irgendwann ging das nicht mehr, weil man mit der Spannung nicht mehr runtergehen konnte und deswegen Temperaturprobleme bekommen hat.

  • Es gibt da ja so 'ne Skalierung…

Ja, die Dennard-Skalierung. Habe hierfür dann die Formel für die Energiedichte hingeschrieben:

P_diss = C * p * f * V²

  • Wie verändern sich da jetzt die Werte?

f: geht hoch (da man ja die Spannung anhebt)

p: geht quadratisch hoch (da die Transistoren kleiner werden; quadratisch weil es eine Fläche ist)

V: geht runter (weil Transistoren kleiner werden; quadratisch weil ² in der Formel)

C: geht runter (da abhängig von der Fläche, welche kleiner wird (?))

  • Warum ging das aber nicht mehr?

Man konnte aus physikalischen Gründen die Spannung nicht mehr verringern, weil sonst die Elektronen nicht mehr überall hinkommen würden.

  • Wenn man jetzt Multicore hat, gibt es ja noch das Gesetz von Amdahl. Was ist das?

Habe hierfür auch die Formel hingeschrieben (zuerst etwas falsch, aber er hat mir dann geholfen sie zu korrigieren):

S = 1 / (T_s + T_p / N) [T_s: Anteil sequentiellen Codes, T_p: Anteil parallel Codes, N: Anzahl Kerne]

Maximaler Speedup ist dementsprechend N.

  • Wenn ich in meinem Code jetzt 10 % sequentiellen Anteil habe, dann ist es mit 100 Kernen schneller, aber warum nutze ich jetzt nicht gleich 10000 Kerne?

Wenn man es in die Formel einsetzt, sieht man, dass es keinen wirklich Unterschied macht, weil es durch den sequentiellen Anteil limitiert ist.

  • Warum gibt es dann trotzdem Systeme mit so vielen Kernen?

Weil es normalerweise nicht nur eine Applikation auf einem System gibt.

Kapitel 3

  • Was ist ein FPGA? Und was ein ASIC?

FPGA: Programmierbare Hardware mit Blöcken (LUTs) und Verbindungen dazwischen.

ASIC: Ein Schaltkreis, der für ein konkretes Problem designed wurde.

  • Wie verhält sich das zu Universalprozessoren? Auch hinsichtlich Energie/Kosten.

Universalprozessoren müssen alles können, sind deswegen an sich größer und teurer. ASICs haben hohe initiale Kosten (Schaltplan designen), aber die Kosten pro Stück sind dann sehr gering, und sie sind energetisch sehr effizient. FPGAs liegen dazwischen.

  • Wie ist das jetzt, wenn ich z.B. a + b < c berechnen will?

Siehe Kapitel 3 Folie 27: bei einem ASIC hat man eben nur genau die Gatter, die notwendig für die Operation sind.