TU Wien:Codegeneratoren VO (Krall)/Prüfung WS2012
Zur Navigation springen
Zur Suche springen
Registerallokation[Bearbeiten | Quelltext bearbeiten]
Gegeben Konfliktgraph (ca 8 Knoten). Berechne mit
(a) dem Algorithmus von Chatin, und (b) dem Algorithmus von Briggs
wieviele Register benötigt man um den Graphen ohne spills einzufärben und außerdem eine Registerbelegung.
Web Algorithmus[Bearbeiten | Quelltext bearbeiten]
Gegeben call graph (Knoten A-I), 3 globale Variablen, L_REF.
Berechne P_REF, C_REF die Webs und eine Registerbelegung für die globalen Variablen.
List scheduling[Bearbeiten | Quelltext bearbeiten]
Ein Program in Pseudo-Assembler (8 Instruktionen) die Latenzen der Befehle.
Berechne den Interferenzgraphen und einen Schedule mittels list scheduling.
Software pipelining[Bearbeiten | Quelltext bearbeiten]
Gegeben eine Schleife. Berechne eine gepiplinete Version der Schleife.
Schleife:
load R0, (R1) // deref R1 and load into R0 add R1, R1 + 1 // increment R1 beqz R0 // branch to load if R0 == 0
Anmerkung (WS20): Bei uns war dasselbe Beispiel. Wichtig beim Verstehen der letzten Aufgabe:
- Load hatte ein Latenz von 2 Zyklen (branch und add 1 Zyklus).
- Prozessor konnte 1 Load, 1 Add und 1 Branch pro Zyklus ausführen
- Es gabe den Hinweis, dass es auch einen "negierten" Sprungbefehl gab (bnqz oder ähnlich), welche springt wenn RX != 0 ist.