Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Übersetzerbau 2
Übersetzerbau 2
- Prüfer: Prof. Phillipsen
- Beisitzer: Patrick Kreutzer
Der Beisitzer stellt die Fragen Prof. Phillippsen wirft nur manchmal Vertiefungsfragen ein. Restlicher Ablauf wie gehabt.
Man sollte sich aufjedenfall sehr gut vorbereiten damit man die Antworten relativ schnell und sicher geben kann sonst kann man leicht von den Transferfragen verunsichert werden.
Die Notengebung ist für eine mündliche Klausur auch eher streng mit sehr guter Vorbereitung kann man aber auch sehr gute Ergebnisse erzielen
Fragen
F: (Gibt Blatt mit Code) Wie wollen mit unserem Übersetzter eine Analyse von Verfügbaren Ausdrücken machen, was muss man dafür tun?
→ KFG, Grundblöcke erklärt und wie man sie bestimmt
F: (Legt den Code in Form eines KFG hinzu) Was muss man für die Datenfluss Analyse jetzt beachten?
→ Ablauf Vorwärts Analyse erklärt Bitvektor und join Operator UND bei Verfügbare Ausdrücke dann GEN KILL Menge und INIT erklärt
F: Warum wird der Entry Knoten mit allen Verfügbaren Ausrücken initialisiert?
→ War da ein bisschen unsicher meinte das man das aufgrund des UND Joins braucht da man sonst kein Wissen generiert da man bei einem UND ja immer auf der kleinsten Menge landet. Weiß nicht wie richtig das ist
F: Welche Optimierung kann man nun mit Verfügbaren Ausdrücken machen?
→ Meinte Herausziehen von Teilausdrücken aber sie wollten Elimination von Teilausdrücken oder so hören aber die Idee ist ja ähnlich meinten sie
F: Dann führ mal die Optimierung auf eine Anweisung aus.
→ Hab es im ersten Block in eine frische Variable gespeichert und dann im zweiten mit einer Kopieroperation ersetzt.
F: Ok aber DFA Analyse ist ja nicht immer so toll was haben wir noch kennengelernt?
→ SSA Form erklärt
F: Und was bringt uns das nun in unserem Beispiel?
→ Man braucht keine Temporärvaribale aber zur Erkennung ist es nicht so hilfreich in anderen Anwedungen bringt es mehr
F: Nun zu Schleifen warum wollen wir vorallem Schleifen optimieren?
→ Code der sehr oft ausgeführt wird → großer Einlfuss auf Laufzeit
F: Wie erkennt der Compiler die?
→ Dominanz und Rückwärtskante erklärt
F: Dann berechne mal die Schleife in dem KFG?
→ Schleifen WL Algo angewendet und alles Knoten markiert
F: (Gibt Blatt ähnlich zum Schleifenrumpfteilen nur mit leicht anderen Datenabhängigkeiten) was ist an diesen Schleifen anders als denen die wir normal angeschaut haben?
→ Kanonische Form erklärt und gemeint man muss Schleifenrumpfteilen anwenden
F: Ok dann Teil die Schleife mal auf
→ Habe zuerst die Schritte erklärt dann die Datenabhängigkeit mit Tabelle herausgezogen und die Schleife aufgeteilt (Phillipsen meinte im Nachgang es ist besser wenn man das vom hinschauen kann, das sollte man unbedingt sehr gut und schnell geübt haben)
F: wir betrachten jetzt nur noch die geschachtelte mittlere Schleife kann man die Parallelisieren?
→ Mehr Datenabhängigkeiten einzeichnen → nein da beide Schleifen eine Abhängigkeit tragen
F: Kann man die Umformen damit man die innere parallelisieren kann?
→ Ja Schleifenneigen und dann tauschen ähnlich wie im Übungsbeispiel
F: Was macht man nun mit der Transformationsmatrix um die Schleife zu transformieren?
→ Brauchen das inverse um die Laufvariablen zu transformieren
F: Diktiert Invertierte Transformationsmatrix
→ Berechne die Transformierten Laufvariablen
F: Ok was muss man jetzt noch machen
→ Schleifengrenzen mit Fourier Motzikn anpassen, Verfahren kurz erklärt zum Anwenden war dann aber zu, Glück die Zeit zu knapp