Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Optimierungen in Übersetzern (Übersicht)
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Nächste Überarbeitung | Vorherige Überarbeitung | ||
pruefungen:hauptstudium:ls2:ueb2-2015-08-19 [19.08.2015 11:49] – angelegt Rachus | pruefungen:hauptstudium:ls2:ueb2-2015-08-19 [19.08.2015 19:11] (aktuell) – Rachus | ||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
**Prüfer: | **Prüfer: | ||
**Beisitzer: | **Beisitzer: | ||
+ | |||
+ | Das Prüfungsprotokoll beinhaltet zwei Prüfungen. | ||
===== Allgemein ===== | ===== Allgemein ===== | ||
Bleistift und Papier gegeben. Desweiteren werden im Laufe der Prüfung Zettel präsentiert: | Bleistift und Papier gegeben. Desweiteren werden im Laufe der Prüfung Zettel präsentiert: | ||
+ | |||
+ | Diese Prüfung wurde an diesem Tag mindestens zweimal in ähnlicher Weise gehalten. Am Ende wurd wie bei Prüfungen von Herrn Philippsen üblich die Frage nach der eigenen Einschätzung der Note gestellt. | ||
===== Prüfungsverlauf ===== | ===== Prüfungsverlauf ===== | ||
Zeile 14: | Zeile 18: | ||
... | ... | ||
+ | OUTER: | ||
if ... goto END | if ... goto END | ||
Zeile 23: | Zeile 28: | ||
| | ||
e = b + c; | e = b + c; | ||
- | | + | |
d -= 1; | d -= 1; | ||
goto INNER | goto INNER | ||
Zeile 30: | Zeile 35: | ||
... | ... | ||
+ | |||
+ | goto OUTER; | ||
END: | END: | ||
Zeile 39: | Zeile 46: | ||
* Kontrollflussgraph erstellen | * Kontrollflussgraph erstellen | ||
* Dominatoren bestimmen | * Dominatoren bestimmen | ||
- | | + | * Prüfung Variante 1: |
- | * Warum funktioniert er? | + | |
- | * Warum kann ein Knoten in der Menge eines Vorgängerknotens nicht Dominator des momentanen Knotens sein, wenn der andere Vorgängerknoten diesen nicht auch als Dominator hat? | + | * Warum funktioniert er? |
+ | * Warum kann ein Knoten in der Menge eines Vorgängerknotens nicht Dominator des momentanen Knotens sein, wenn der andere Vorgängerknoten diesen nicht auch als Dominator hat? | ||
+ | * Prüfung Variante 2: | ||
+ | * Lengauer Tarjan: Wie funktioniert er. Nach vier Basisblöcken wurde dann der gesamte Domtree vorgegeben. | ||
* Schleifen bestimmen | * Schleifen bestimmen | ||
* Rückwärtskante finden: Kante von dominiertem zu dominierenden Knoten | * Rückwärtskante finden: Kante von dominiertem zu dominierenden Knoten | ||
- | * Und in schnell? (Nur Kopf einer wichtigen Region kann Schleifenkopf sein) | + | * Variante 1: Und in schnell? (Nur Kopf einer wichtigen Region kann Schleifenkopf sein) |
- | * Worklistalgorithmus zum Schleifenknotensammeln | + | * Variante 2: |
+ | * Und sie haben jetzt erwähnt, dass es schneller geht, wenn man Regionen hat. Was sind wichtige Regionen? Siehe Folien | ||
+ | * Warum beschleunigt dies das Schleifenfinden? | ||
+ | * Worklistalgorithmus zum Schleifenknotensammeln | ||
* Einfache Induktionsvariable ist Variable, die bei jedem Schleifendurchlauf nur konstant inkrementiert wird. | * Einfache Induktionsvariable ist Variable, die bei jedem Schleifendurchlauf nur konstant inkrementiert wird. | ||
* Einschub: Schleifeninvarianz. | * Einschub: Schleifeninvarianz. | ||
* d ist einfache Induktionsvariable | * d ist einfache Induktionsvariable | ||
- | * Zugriff auf Array kann mögliche abhängige Induktionsvariable tmp (d, 4, 0), oder ähnlich erzeugen | + | * Variante 1: Zugriff auf Array kann mögliche abhängige Induktionsvariable tmp (d, 4, 0), oder ähnlich erzeugen |
+ | * Variante 2: Zugriff auf Array kann mögliche abhängige Induktionsvariable tmp (d, 4, array_b) erzeugen, wobei array_b Anfangsadresse des array ist | ||
* Eliminiere d | * Eliminiere d | ||
* tmp durch tmp', startend mit d, um 4 am Ende der Schleife inkrementiert ersetzen. | * tmp durch tmp', startend mit d, um 4 am Ende der Schleife inkrementiert ersetzen. | ||
Zeile 59: | Zeile 73: | ||
* Kann vorgeschoben werden | * Kann vorgeschoben werden | ||
* Bedingung: Dominierung aller Schleifenausgänge | * Bedingung: Dominierung aller Schleifenausgänge | ||
+ | * Variante 2: Reicht aber doch nicht aus. Welche Bedingungen noch? (Einzige Zuweisung, alle Verwendungen strikt dominiert) | ||
* while {} -> if() { do {} while (); } am Beispiel gemacht | * while {} -> if() { do {} while (); } am Beispiel gemacht | ||
- | | + | |
+ | * Kann ich doch immer rausziehen? Nein. z.B. temp = a/b, b könnte 0 sein,... | ||
+ | * Ist umgebende Bedingung auch bei Teilausdrücken nötig? Nein, nicht zwingend, aber meist zieht man Teilausdrücke raus, die teuer sind -> spart also im Mittel Laufzeit. | ||
+ | * Wo wird dann der herausgezogene Code genau platziert? | ||
+ | * Variante 1: Dominatorgrenzen | ||
* Was ist das? | * Was ist das? | ||
* Wofür kann man diese verwenden? (Kontrollflussabhängigkeit, | * Wofür kann man diese verwenden? (Kontrollflussabhängigkeit, | ||
* Wie berechnet man diese (erklären und an einem Beispiel vormachen) | * Wie berechnet man diese (erklären und an einem Beispiel vormachen) | ||
* Bitte formal DGup angeben. | * Bitte formal DGup angeben. | ||
+ | * Variante 2: Kontrollflussanalyse/ | ||
+ | * Was ist das? | ||
+ | * Wie kann ich die Kontrollflussabhängigkeit berechnen? (Graph invertieren, | ||
+ | * Dominanzgrenzen: | ||