680 likes | 813 Views
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
E N D
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 Zusammenfassung • Einleitung • Partielle Evaluation • Binding Time Analyse • Die Implementierung • Verzweigungen und Pointer • Switch Statement • Weitere Analyseprobleme • Zusammenfassung
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.
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
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
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
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
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:
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
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
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
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?
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
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 • ...
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
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
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?)
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
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)}
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)}
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)}
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)}
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)}
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)}
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)}
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)}
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)}
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)}
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)}
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)}
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)
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)}
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)}
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)}
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)}
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)}
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)}
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
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)}
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)}
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)}
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)}
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)}
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)} {}
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={}
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)}
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)}
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)}
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)}
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)}