1 / 68

Design und Implementierung einer Binding Time Analyse für C

Design und Implementierung einer Binding Time Analyse für C. Diplomarbeit von Daniel Kutzmann. Übersicht. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen

isla
Télécharger la présentation

Design und Implementierung einer Binding Time Analyse für C

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. Design und Implementierung einer Binding Time Analyse für C Diplomarbeit von Daniel Kutzmann

  2. Übersicht Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Einleitung • Partielle Evaluation • Binding Time Analyse • Die Implementierung • Verzweigungen und Pointer • Switch Statement • Weitere Analyseprobleme • Zusammenfassung

  3. Einleitung Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Häufiges Problem in der Informatik: Lösen ähnlicher Aufgaben • entweder mit einem generischen Programm, • oder mit vielen speziellen Programmen.

  4. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Generisches Programm • Vorteil • Es muss nur ein Programm entwickelt werden (Zeitersparnis). • Wird mit Parametern an Aufgabe angepasst • Nachteil • Meist langsamer als ein spezielles Programm • Spezielles Programm • Vorteil • Schnell und klein • Nachteil • Nur für eine Aufgabe einsetzbar • Deswegen müssen viele Programme entwickelt werden

  5. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Generische Programme sind nur bei genügend Ressourcen möglich • Ressourcen sind in eingebetteten Systemen meist knapp • Trotzdem soll hier generisch programmiert werden • Lösung: Partielle Evaluation • Automatisches spezialisieren eines generischen Programms

  6. Partielle Evaluation Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Ist eine Technik zur Programmoptimierung • Folgende Idee der Mathematik steht dahinter • Eine Funktion mit 2 Parametern „spezialisieren“ indem man ein Parameter festhält. • Bsp f(x,y)=xy wird zu f(x)=x2 bei y=2 • Projektion der Funktion

  7. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Bei der partiellen Evaluierung werden statt Funktionen Programmtexte benutzt. • Ein partieller Evaluator erstellt aus einem Programm p[in1,in2] und einem Teil seiner Eingabedaten (in1) ein spezialisiertes Programm pin1 • pin1 hat als Eingabe dann nur noch in2

  8. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung Die Funktionalität wird dadurch nicht verändert:

  9. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Das spezialisierte Programm wird in 2 Phasen erstellt • Zunächst werden die Transformationen der einzelnen Programmteile festgelegt • Kann dieser Teil ausgewertet werden oder nicht? • Dazu müssen die tatsächlichen Werte der Variablen nicht bekannt sein • Danach wird mit dieser Information das Programm spezialisiert

  10. Binding Time Analyse Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Ihre Aufgabe: Finde heraus, welche Konstrukte schon während der Spezialisierung berechnet werden können! • Dies sind die Konstrukte, die nur von bekannten (statischen) Werten abhängen. • Hängt ein Konstrukt auch von unbekannten (dynamischen) Werten ab, so muss es residualisiert werden. • Die Partitionierung von globalen Variablen und den Parametern der Startfunktion in statisch und dynamisch wird vom Benutzer vorgegeben

  11. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Beispiel: size, u sind statisch, v ist dynamisch • size= 5 u=[1,5,8,7,2] Binding Time Markierungen Residualprogramm

  12. Bereits existierende BTAs Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Es gibt zwei partielle Evaluatoren für C: C-Mix & Tempo • Beide haben natürlich auch eine BTA • Diese BTAs unterscheiden sich deutlich • Wenn es bereits BTAs für C gibt, warum dann eine neue entwickeln?

  13. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Beide BTAs „verstehen“ nur einen kleinen Teil der C Syntax • Zu analysierende Programme müssen vorher vereinfacht werden • Das Residualprogramm unterscheidet sich sehr stark von Original • C-Mix ist relativ „ungenau“ • Nicht Programmpunkt abhängig • Monovariant

  14. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Tempo ist hier besser... • Flow sensitiv • Also BTs abhängig vom Programmpunkt • Context sensitiv • Polyvariante Analyse von Funktionen • Use sensitiv • Variablendefinitionen können gleichzeitig ausgewertet und residualisiert werden • ...aber es kann nicht alles Analysieren • Versteht keine Switch Statements • Ungenau bei Structs • ...

  15. Die Implementierung Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Die erstellte Implementierung benutzt den selben Ansatz wie die BTA von Tempo, dieser wird • erweitert, so dass annähernd die komplette C Syntax analysiert werden kann • verbessert, so dass die Analyseergebnisse genauer sind • Weniger Überabschätzungen

  16. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Die BTs werden mittels abstrakter Interpretation berechnet • Interpretieren des Programms über die abstrakten Werte statisch/dynamisch • Abstrakter Speicher wird durch einen Zustand (State) repräsentiert • Ergebnis wird außerdem am Konstrukt gespeichert

  17. Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Analyse wird in 2 Phasen durchgeführt • Binding Time Phase (vorwärts) • Berechnet ob ein Konstrukt nur von statischen Werten abhängt (dann ist es statisch) oder auch von dynamischen (dann ist es dynamisch). • Transformation Phase (rückwärts) • Berechnet ob ein Konstrukt während der Spezialisierung ausgewertet und/oder residualisiert wird • Dies hängt natürlich von der BT ab, aber zusätzlich noch von den Kontexten der Variablenbenutzung und dem Typ der Variablen (liftable?)

  18. Binding Time Phase Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Ein Konstrukt bekommt hier immer eines von zwei Werten • Static: Wenn das Konstrukt nur von statischen Werten abhängt • Dynamic: Wenn das Konstrukt auch von dynamischen Werten abhängt • In BTState wird der aktuelle Zustand gespeichert

  19. int plus(inta, b, c) { int res; res= a + b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic)}

  20. int plus(inta, b, c) { int res; res= a + b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic)} BTState={(a,static),(b,static),(c,dynamic)}

  21. int plus(inta, b, c) { int res; res= a + b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic)} BTState={(a,static),(b,static),(c,dynamic)}

  22. int plus(inta, b, c) { int res; res= a + b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic)}

  23. int plus(inta, b, c) { int res; res= a+b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic)}

  24. int plus(inta, b, c) { int res; res= a+b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic)}

  25. int plus(inta, b, c) { int res; res=a+b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic) } , (res,static)}

  26. int plus(inta, b, c) { int res; res=a+b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,static)}

  27. int plus(inta, b, c) { int res; res=a+b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,static)} BTState={(a,static),(b,static),(c,dynamic), (res,static)}

  28. int plus(inta, b, c) { int res; res=a+b; res= res + c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,static)}

  29. int plus(inta, b, c) { int res; res=a+b; res= res+c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,static)}

  30. int plus(inta, b, c) { int res; res=a+b; res= res+c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,static)}

  31. int plus(inta, b, c) { int res; res=a+b; res=res+c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,static) } (res,dynamic)

  32. int plus(inta, b, c) { int res; res=a+b; res=res+c; return res; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

  33. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

  34. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

  35. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

  36. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,dynamic)}

  37. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res=2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung BTState={(a,static),(b,static),(c,dynamic), (res,static)}

  38. Transformation Phase Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung • Hier bekommt jedes Konstrukt eines der folgenden Werte • Bottom: Dieses Konstrukt wird nicht benutzt (z.B. toter Code) • Evaluate: Dieses Konstrukt wird ausgewertet • Residualize: Dieses Konstrukt wird residualisiert • Eval&Res: Dieses Konstrukt wird ausgewertet und residualisiert • Eine globale Variable tr gibt die aktuelle Transformation an • In TrState werden die Transformations der Benutzungen einer Variablen seit ihrer letzten Definition gespeichert

  39. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2; } tr=Bottom TrState={} {(res,Bottom)}

  40. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2; } tr=Bottom TrState={(res,Bottom)}

  41. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; return res; res= 2; } tr=Bottom Residualize TrState={(res,Bottom)}

  42. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; returnres; res= 2; } tr=Residualize TrState={(res,Bottom)} {(res,Residualize)}

  43. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; returnres; res= 2; } tr=Residualize TrState={(res,Residualize)}

  44. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; returnres; res= 2; } tr=Residualize TrState={(res,Residualize)} {}

  45. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; returnres; res= 2; } tr=Residualize TrState={}

  46. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; returnres; res= 2; } tr=Residualize TrState={} {(res,Evaluate)}

  47. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res= res + c; returnres; res= 2; } tr=Residualize TrState={(res,Evaluate),(c,Residualize)}

  48. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res=res+c; returnres; res= 2; } tr=Residualize TrState={(res,Evaluate),(c,Residualize)}

  49. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res=res+c; returnres; res= 2; } tr=Residualize Evaluate TrState={(res,Evaluate),(c,Residualize)} {(c,Residualize)}

  50. int plus(inta, b, c) { int res; res=a+b; res=res+c; returnres; res= 2; } Einleitung Partielle Evaluation Binding Time Analyse Die Implementierung Binding Time Phase Transformation Ph. Verzw. & Pointer Switch Statement Weitere Analysen Zusammenfassung int plus(int a, b, c) { int res; res= a + b; res=res+c; returnres; res= 2; } tr=Evaluate TrState={(c,Residualize)}

More Related