Du befindest dich hier: FSI Informatik » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 2 » Übersetzerbau 2 2017-06-09 (Übersicht)
no way to compare when less than two revisions
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
— | pruefungen:hauptstudium:ls2:ueb2-2017-08-09_2 [10.08.2017 13:00] (aktuell) – angelegt Alicen | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== Übersetzerbau 2 2017-06-09 ====== | ||
+ | **Fach:** Optimierungen in Übersetzern | ||
+ | |||
+ | **Prüfer: | ||
+ | |||
+ | **Beisitzer: | ||
+ | |||
+ | Wie üblich stellt der Beisitzer die Fragen, Prof. Philippsen selbst fragt nach, falls die Antwort nicht eindeutig oder tiefgehend genug war. Papier und Stift liegen bereit und dürfen (und sollen) bei Beantwortung der Fragen genutzt werden. | ||
+ | |||
+ | ===== Fragen ===== | ||
+ | |||
+ | In Übersetzerbau 2 haben wir diverse Analysen gemacht. Wozu brauchen wir Analysen überhaupt, warum sind die so wichtig? (Datenfluss- und Kontrollflussanalyse kurz erklärt und warum man sie braucht.) | ||
+ | |||
+ | Ich bekommen Code, der etwa folgende Struktur hatte: | ||
+ | |||
+ | < | ||
+ | int b = 0; | ||
+ | |||
+ | | ||
+ | if(p == 2){ | ||
+ | if(b == 1234){ | ||
+ | a = 3; | ||
+ | } else { | ||
+ | b++; | ||
+ | } | ||
+ | } else { | ||
+ | a = 5; | ||
+ | } | ||
+ | a = a * 91; | ||
+ | } | ||
+ | |||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | Wir möchten nun Variablennutzung, | ||
+ | |||
+ | Bekomme den KFG fertig aufgebaut mit den jeweiligen Instruktionen auf einem Zettel. Und wie sieht die Datenflussanalyse für das Problem aus? | ||
+ | |||
+ | Datenflussanalyseverfahren beschreiben, | ||
+ | |||
+ | Wir haben ja auch noch SSA gemacht, was ist SSA? (SSA erklären, nur eine Starke, keine schwache Definition, einmal statisch im Code, Phi-Funktionen erwähnen, wichtig!) | ||
+ | |||
+ | Warum ist das toll? (Erleichtert Datenflussanalyse, | ||
+ | |||
+ | Lass uns das mal machen, wir funktioniert das? (Zwei Verfahren, Dominanzgrenzverfahren und Wertnummerierung) | ||
+ | |||
+ | Was ist eine Dominanzgrenze, | ||
+ | |||
+ | Bekomme Dominanzgrenzen fertig auf einem Papier zum KFG. Mach mal Dominanzgrenzverfahren! (Dominanzgrenzverfahren am Beispiel gemacht, mit jeweiligen Phi-Funktionen und jeweiligen Werten) | ||
+ | |||
+ | Können wir damit herausfinden, | ||
+ | |||
+ | Wir haben uns auch mit Alias-Analyse beschäftigt. Hier ist etwas Code: | ||
+ | |||
+ | < | ||
+ | |||
+ | int *p, a, b, c; | ||
+ | | ||
+ | // Code der nicht bekannt ist, aber was mit a, b, c macht | ||
+ | | ||
+ | if(x == 1) { p = &a; } else {p = &b; } | ||
+ | | ||
+ | *p = 5; | ||
+ | // Hier wird a gelesen | ||
+ | |||
+ | if(x == 2) {p = &c; } else {p = &c} | ||
+ | | ||
+ | *p = 3; | ||
+ | // Hier wird a gelesen | ||
+ | |||
+ | | ||
+ | |||
+ | </ | ||
+ | |||
+ | Wir möchten nun herausfinden, | ||
+ | |||
+ | |||
+ | Wir haben hier noch eine Schleife, warum sind Optimierungen an Schleifen so wichtig oder interessant für uns (Code wird mehrfach ausgeführt, | ||
+ | |||
+ | Hier ist Code: | ||
+ | |||
+ | < | ||
+ | | ||
+ | a[i] = a[i-1] + b[i+1]; | ||
+ | | ||
+ | c[i] = c[i+3] + c[i-1]; | ||
+ | } | ||
+ | b[i] = a[i] + c[M]; | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Diese Schleife ist anders als die, die wir in Compilerbau 2 sonst angeschaut haben, warum? (In Vorlesung und Übung waren es (fast) immer kanonische Schleifen, also perfekt geschachtelt, | ||
+ | |||
+ | Genau, das ist blöd. Was machen wir nun? (Schleifenrumpfteilen, | ||
+ | |||
+ | Wie funktioniert das? (Abhängigkeitsgraph aufstellen, gleiche starke Zusammenhangskomponente muss bleiben, bei Pfaden zwischen Instruktionen die Schleife jeweils davor. Sollte ich dann auch mal am Beispiel machen) | ||
+ | |||
+ | Danach noch Frage nach Parallelisierbarkeit und wie man das an den Abhängigkeitsdistanzen erkennt. | ||