420 likes | 626 Views
Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen. Grundlagen der Übersetzung und Optimierung von Programmiersprachen. Betreuer: Martin Schulz Referent: Markus Ibba. Übersicht. Grundlagen der Übersetzung eines Programmes Konzepte zur Optimierung
E N D
Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Grundlagen der Übersetzung und Optimierung von Programmiersprachen Betreuer: Martin Schulz Referent: Markus Ibba
Übersicht • Grundlagen der Übersetzung eines Programmes • Konzepte zur Optimierung • Ausblick
Grundlagen der Übersetzung eines Programmes • Übersicht eines Übersetzungsvorganges • Analyse des Quellprogramms • Lexikalische Analyse • Syntaxanalyse • Semantische Analyse • Fehlerbehandlung
Analyse des Quellprogramms • Lexikalische Analyse (Scanner) (=Lineare Analyse) • Lesen des Zeichenstromes • Aufteilung in Symbole (tokens) • Aufbau der Symboltabelle
Lexikalische Analyse (Scanner) • Aufbau der Symboltabelle position = initial + rate * 100
Analyse des Quellprogramms • Syntaxanalyse (Parser) (= hierarchische Analyse) • Beschreibung der Syntax der Programmiersprache (kontextfreie Grammatiken, BNF) • Zusammenfassen der Symbole zu grammatikalischen Sätzen
Syntaxanalyse (Parser) • Der Parse-Baum position = initial + rate * 100
Analyse des Quellprogramms • Semantische Analyse • Konsistenz zwischen Deklaration und Definition (Methoden, Variablen) • Statische Überprüfungen • Typüberprüfung • Überprüfung des Kontrollflusses • Überprüfung auf Eindeutigkeit
Fehlerbehandlung • Recovery-Strategien • Panische Recovery • Konstrukt-orientierte Recovery • Fehlerproduktion • Globale Korrektur
Konzepte zur Optimierung -> Ziel: Laufzeit und/oder Größe eines Programmes reduzieren • Übersicht eines Übersetzungsvorganges eines optimierenden Compilers • Analyse • Codetransformation • Optimierungstechniken
Idee einer Optimierung • Anwendungsprogrammierer braucht kein umfangreiches Wissen über die Maschinenarchitektur auf der er programmiert. • Hardwarehersteller brauchen nur noch Schnittstelle für den Compiler selber zu designen.
‚Control dependence‘ 1: if (3 == a) 2: b = 10; Abhängigkeit zwischen Ausdruck 1 und 2. -> Generierung des ‚Control Flow Graph‘ (CFG).
‚Data dependence‘ e = f * 4 + g; g = 2 * h; ‚anti dependence‘ a = b * c; a = d + e; ‚output dependence‘ a = c * 10; d = 2 * a + c; ‚flow dependence‘ Die Datenflußanalyse wird im 3. Vortrag behandelt
Codetransformation -> Bestandteil jeder Optimierung • Allgemeiner Ablauf einer Transformation • Beispiel einer Transformation
Allgemeiner Ablauf einer Transformation • Programmstück finden, welches sich für die Optimierung eignet • Sicherstellen, daß die Transformation die Semantik des Programmes nicht ändert • Programm transformieren
Beispiel einer Transformation • Fehler 1: Überlauf Eingabe: b[k] = max. Floatzahl - 1.0; a[1] = -2.0; Überlauf bei C = b[k] + 2.0; • Fehler 2: Ergebnisabweichung Unterschiede im Ergebnis durch die Vertauschung der Additionsreihenfolge
Beispiel einer Transformation • Fehler 3: Zugriffsfehler Eingabe: k = m + 1; n = 0; Referenz zu b[k] nicht definiert. Tritt im Original durch n = 0 nicht auf.
Optimierungstechniken • Partial Evaluation (Early Optimizations) -> nur bei einigen Datenflußanalyse notwendig • Redundancy Elimination -> Entfernung redundanter Codestücke -> Daten- und Kontrollflußanalyse notwendig
Partial Evaluation • Constant Folding • Algebraic Simplification • Reassociation • Constant Propagation • Copy Propagation • Statement Substitution • Induction Variable Elimination • Function Cloning
Constant Folding Konstante Ausdrücke werden zur Übersetzungszeit ausgerechnet. X = 3 * 2; -> X = 6; -> Es ist keine Datenflußanalyse notwendig
Algebraic Simplification Vereinfachung algebraischer Ausdrücke X = (Y + 1) / N; wobei N = 1; zu X = (Y + 1); -> Keine Datenflußanalyse notwendig
Reassociation Umgruppierung von Additionen und Multiplikationen in einem Ausdruck Kann die Anzahl der ‚Common Subexpressions‘ vergrößern. Keine Datenflußanalyse notwendig
Constant Propagation Konstanten im Programm werden durch ihren eigentlichen Wert ersetzt. Hierzu wird das Ergebnis der Datenflußanalyse benötigt.
Copy Propagation Eliminiert redundante Kopien einer Variable. -> Benötigt die Ergebnisse der Datenflußanalyse. -> Es wird eine Tabelle verwendet, um die einzelnen Instruktionen (copy instructions) zu speichern.
Copy Propagation - ACP Table of available copy instructions.
Statement Substitution(Forward Substitution) Ersetzung einer Variable durch ihre Definition. -> Allgemeine Form von ‚Copy Propagation‘ -> Kann die Analyse von Ausdrücken innerhalb einer Schleife vereinfachen
Induction Variable Elimination -> Entfernen der Index-Variable - Folgt meist auf ‚Strength Reduction of Induction Variable Expressions‘
Function Cloning Konstante Argumente einer Funktion werden in einer Kopie durch ihren Wert ersetzt. -> Constant Propagation Dies erhöht zwar die Codegröße, die kopierten Funktionen können aber zum Teil wesentlich schneller ausgeführt werden.
Redundancy Elimination • Loop-invariant Code Motion • Unreachable Code Elimination • Useless Code Elimination • Dead Variable Elimination • Common-Subexpression Elimination
Loop-invariant Code Motion Ausdrücke, welche ihren Wert in keiner Iteration ändern, werden außerhalb der Schleife gestellt. -> Datenflußanalyse notwendig
Unreachable Code Elimination Ein Codestück wird unerreichbar durch: • Bedingungen,welche immer true oder immer false sind • Schleifen, welche nie durchlaufen werden -> Datenflußanalyse notwendig
Useless Code Elimination ‚Unnütze‘ Codestücke werden zum Teil durch andere Optimierungen (z.B.: Unreachable Code Elimination) verursacht. -> Datenflußanalyse notwendig
Dead Variable Elimination Nicht benutzte Variablen werden entfernt. Folgt meist auf die Optimierungen: • Unreachable Code Elimination • Useless Code Elimination Durch die Datenflußanalyse kann festgestellt werden, ob die Variable noch benutzt wird.
Common-Subexpression Elimination (CSE) -> Identische Ausdrücke (Berechnungen) können gespeichert werden, damit der entsprechende Wert nicht neu berechnet werden muß. -> Datenflußanalyse notwendig
Ausblick • Weitere Optimierungen • Function Inlining • Schleifen-Optimierungen (Vortrag 4) • Laufzeitsysteme (Vortrag 8)