1 / 40

Datenflussanalyse - Klassisch

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

ina
Download Presentation

Datenflussanalyse - Klassisch

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Seminar “Progammanalyse” (SS 2009) Referent: Lorenz Schauer Vortrag: 24.06.2009 Datenflussanalyse - Klassisch

  2. 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

  3. 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?

  4. 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

  5. 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

  6. 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

  7. 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…

  8. Intraprozedurale Analyse - Flussgraph [z:=1] no [x>0] yes [z:=z*y] [x:=x-1]

  9. 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:

  10. 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)

  11. Available Expressions Analysis kill- und gen-Funktionen bei AEA

  12. Available Expressions Analysis • Entry- & Exit-Funktionen • Durch diese beiden Funktionen wird die Analyse bestimmt: Falls:

  13. 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 […]

  14. Available Expressions Analysis – Beispiel1 Gesucht wird: größte Lösung der Gleichung für AEentry Bestimmen der AE-Gleichungen:

  15. 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)

  16. Available Expressions Analysis – Beispiel2 • Beispiel 2: • Aufstellen der kill & gen Funktionen: • ----------------------------------------------------

  17. Available Expressions Analysis – Beispiel2 • Aufstellen der AE-Funktionen:

  18. 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]

  19. 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

  20. 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)

  21. Reaching Definition Analysis - Vorgehensweise • Vorgehensweise • o Definieren der killRD, genRD, RDentry und RDexit funktionen:

  22. Reaching Definition Analysis - Vorgehensweise

  23. Reaching Definition Analysis - Beispiel • o Funktionen am Programmteil anwenden: • Beispiel: • Es entsteht folgende Tabelle der kill & gen Funktionen: • ------------------------------------------------------------------------- • 1 • 2 • 3 • 4 • 5

  24. Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (1): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5

  25. Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (2): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5

  26. Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (3): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5

  27. Reaching Definition Analysis - Beispiel • Damit ergibt sich für die RD Funktionen (4): • _______________________________________________________ • 1 • 2 • 3 • 4 • 5

  28. 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!

  29. 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

  30. 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!

  31. Very Busy Expressions Analysis • o Hier gleich angewendet (allgemeine Formeln nachlesen!) • o kill & gen Funktionen: • o VB Funktionen:

  32. 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.

  33. 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

  34. 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.

  35. Live Variables Analysis • Definitionen der kill, gen und LV Funktionen:

  36. Live Variables Analysis • Analyse nach Aufstellen der gen, kill und LV Funktionen ergibt folgendes:

  37. 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“

  38. Live Variables Analysis - Richtigkeit • Die Richtigkeit der Live Variables Analysis • o Um Richtigkeit zu zeigen, benutzen wir folgendes Theorem: • 1. • 2.

  39. 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.

  40. Servus • Vielen Dank für die Aufmerksamkeit!

More Related