400 likes | 482 Views
Seminar “Progammanalyse” (SS 2009) Referent: Lorenz Schauer Vortrag: 24.06.2009. Datenflussanalyse - Klassisch. Agenda. Agenda Einleitung Einführung in die Sprache WHILE Die Intraprozedurale Analyse Available Expressions Analysis Reaching Definitions Analysis
E N D
Seminar “Progammanalyse” (SS 2009) Referent: Lorenz Schauer Vortrag: 24.06.2009 Datenflussanalyse - Klassisch
Agenda Agenda • Einleitung • Einführung in die Sprache WHILE • Die Intraprozedurale Analyse • Available Expressions Analysis • Reaching Definitions Analysis • Very Busy Expressions Analysis • Live Variables Analysis • Live Variables Analysis - Richtigkeit
Einleitung • Was bedeutet “Datenflussanalyse”? • Ermittlung der Zusammenhänge zwischen einzelnen Stellen im Programm und den darin berechneten Werten. • Typische Fragen sind: • o Was genau wird in dem Programmabschnitt berechnet? • o Wie und wo wird eine bestimmte Variable berechnet? • o Welche Werte kann sie annehmen? • o Welche Befehle beinflussen welche Variable zu welchem Zeitpunkt?
Einleitung • Datenflussanalyse – wie und wozu? • Wozu? • Primär zur Codeoptimierung • Gegebenenfalls zur Lösung von entstandenen Problemen Wie? - Programmcode analysieren und verstehen (Hilfsmittel: Flussgraph) - Datenflussprobleme erkennen und Gleichung aufstellen - Code optimieren bzw. Probleme lösen
Einführung in WHILE Die Sprache: WHILE • Imperative Sprache • Programmcode glieder sich in Blöcke • Jeder Block besitzt ein eindeutiges Etikett (Label) • Bezeichnen Zuweisungen und boolsche Bedingungen • Haben intern keinen Datenfluss Folgende Elemente werden definiert: o Zuweisung [x := a] o Skip [skip] o Bedingung if [b] then S1 else S2 o Sequenz S1 ; S2 o While-Schleife while [b] do S
Intraprozedurale Analyse • Intraprozedurale Analyse • Beschäftigt sich mit Elementaraussagen • Gliedert sich in mehrere Datenflussanalysen (spätere Folien) • Unterscheidet Vorwärts- und Rückwärtsanalysen Flussfunktionen (Um Flussgraph aufzustellen) Fluss-Funktion: flow: Stmt P(Lab x Lab) Rückflussfunktion: flow : Stmt P(Lab x Lab) Beschreiben den Fluss zwischen den Lables der Aussagen
Intraprozedurale Analyse - Flussfunktion Wie sieht der Flussgraph von folgendem Code aus ? Die Flussfunktion liefert folgende Menge an Werten: {(1,2),(2,3),(3,4),(4,2)} • Damit können wir den nachfolgenden Graphen zeichnen…
Intraprozedurale Analyse - Flussgraph [z:=1] no [x>0] yes [z:=z*y] [x:=x-1]
Available Expressions Analysis • Available Expressions Analysis • o Analyse Algorithmus (Vorwärtsanalyse) • o Beschreibt die Verfügbarkeit einzelner Ausdrücke an bestimmten Programmstellen • o Frage: Welche Ausdrücke / Werte sind an einer bestimmten • Programmstelle gültig? • o Ziel: Codeoptimierung • o Beispiel:
Available Expressions Analysis Definition von kill- und gen-Funktionen Kill-Funktion: Ausdruck ist killed, wenn eine der Variablen verändert wird (Innerhalb des Blocks). killAE : Blocks P(AExp) Gen-Funktion: Ausdruck wird im Programmbereich generiert und keine Variable davon innerhalb des Blocks verändert. genAE : Blocks P(AExp)
Available Expressions Analysis kill- und gen-Funktionen bei AEA
Available Expressions Analysis • Entry- & Exit-Funktionen • Durch diese beiden Funktionen wird die Analyse bestimmt: Falls:
Available Expressions Analysis – Beispiel1 • Beispiel 1: • o Nur Block 1 generiert den Ausdruck: {x+y} • o Andere generieren / killen keine Ausdrücke • o Der Flussgraph sieht wie folgt aus: […] no […] yes […]
Available Expressions Analysis – Beispiel1 Gesucht wird: größte Lösung der Gleichung für AEentry Bestimmen der AE-Gleichungen:
Available Expressions Analysis – Beispiel1 • Wir erhalten: • Deutung: • o Es gibt 2 Lösungen für die Gleichung: • - {x+y} • - die leere Menge • o Informativ aber nur {x+y} • o {x+y} stellt die größte Lösung der Gleichung dar. • => Der Ausdruck {x+y} ist jedesmal verfügbar, wenn • l’ betreten wird (hier: Schleifeneintritt)
Available Expressions Analysis – Beispiel2 • Beispiel 2: • Aufstellen der kill & gen Funktionen: • ----------------------------------------------------
Available Expressions Analysis – Beispiel2 • Aufstellen der AE-Funktionen:
Available Expressions Analysis – Beispiel2 Als Ergebnis erhält man folgende Tabelle: ---------------------------------------------- [x:=a+b] [y:=a*b] [y>a+b] [a:=a+1] [x:=a+b]
Available Expressions Analysis – Beispiel2 • Deutung: • o Der Ausdruck a wird innerhalb der Schleife neu definiert • o Der Ausdruck {a+b} ist immer am Schleifeneingang verfügbar • o {a*b} nur beim ersten Schleifeneingang verfügbar • wird vor dem nächsten Durchlauf gekilled
Reaching Definition Analysis • Reaching Definition Analysis • o sehr ähnlich zur AE-Analyse (Vorwärtsanalyse) • o Frage: Welche Definition/Zuweisung ist bei einer • bestimmten Stelle im Programm gültig? • o Ziele: Kenntnis über die jeweilige Gültigkeit einer Zuweisung • o Beispiel: • Nach Label 2: (x,1),(y,2) • Nach Label 3: (x,1),(y,2),(a,4),(x,5)
Reaching Definition Analysis - Vorgehensweise • Vorgehensweise • o Definieren der killRD, genRD, RDentry und RDexit funktionen:
Reaching Definition Analysis - Beispiel • o Funktionen am Programmteil anwenden: • Beispiel: • Es entsteht folgende Tabelle der kill & gen Funktionen: • ------------------------------------------------------------------------- • 1 • 2 • 3 • 4 • 5
Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (1): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5
Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (2): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5
Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (3): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5
Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (4): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5
Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (5): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5 • Somit sind alle RD-Funktionen aufgelöst. • Deutung: Man erkennt nun, welche Zuweisung an welcher Stelle existiert!
Very Busy Expressions Analysis • Very Busy Expressions Analysis • o Ein Ausdruck wird als „very busy“ bezeichnet, wenn: • - am Ende eines Labels sichergestellt ist, dass er im weiteren Verlauf auf jeden Fall gebraucht wird. • => Wichtig: Der Ausdruck muss verwendet bzw. betrachtet werden • bevor einer seiner Werte verändert wird! • o Es handelt sich um eine Rückwärtsanalyse • o Ziel: Codeoptimierung
Very Busy Expressions Analysis • Veranschaulichung und Analyse am Beispiel: • o Die Ausrücke {a-b} und {b-a} sind „very busy“ zum Zeitpunkt 1 • o Um das Programm zu analysieren müssen wieder alle Funktionen • aufgestellt werden!
Very Busy Expressions Analysis • o Hier gleich angewendet (allgemeine Formeln nachlesen!) • o kill & gen Funktionen: • o VB Funktionen:
Very Busy Expressions Analysis • Nach Vereinfachung erhält man: • o Deutung: Aus dieser Tabelle lässt sich nun jeder Ausdruck, der • zu einem bestimmten Zeitpunkt „very busy“ ist, ablesen.
Live Variables Analysis • Live Variables Analysis • o Eine Variable wird als „live“ bezeichnet, wenn: • - sie am Ende eines Labels einen Wert enthält, der später benötigt werden könnte. • o Rückwärtsanalyse • o Verwendung: • - Dead code elimination • (Variable nicht live – Zuweisungsblock löschen) • - Registerzuweisung
Live Variables Analysis • Beispiel: • Frage: Welche variablen sind zu welchem Zeitpunkt „live“? • Antwort: x nach Label 1 ist nicht live • x nach Label 3 live • y nach Label 2 live • => Erste Zuweisung ist Redundant, kann also gelöscht werden.
Live Variables Analysis • Definitionen der kill, gen und LV Funktionen:
Live Variables Analysis • Analyse nach Aufstellen der gen, kill und LV Funktionen ergibt folgendes:
Live Variables Analysis • Durch einsetzten und vereinfachen erhält man wieder die Ergebnistabelle: • Deutung: - Alle „live“-Variablen bzgl ihrem Programmpunkt ablesbar • - Am Programmende sind alle Variablen tot – nicht „live“
Live Variables Analysis - Richtigkeit • Die Richtigkeit der Live Variables Analysis • o Um Richtigkeit zu zeigen, benutzen wir folgendes Theorem: • 1. • 2.
Live Variables Analysis - Richtigkeit • Veranschaulichung am Beispiel: • , V1 = {y,z} und V2 = {x} • o • o • o • o Nach Theorem und • folgt, dass wenn V2 nach dem Block live ist, • muss V1 davor live sein.
Servus • Vielen Dank für die Aufmerksamkeit!