1 / 42

Grundlagen der Übersetzung und Optimierung von Programmiersprachen

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

axel
Download Presentation

Grundlagen der Übersetzung und Optimierung von Programmiersprachen

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: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Grundlagen der Übersetzung und Optimierung von Programmiersprachen Betreuer: Martin Schulz Referent: Markus Ibba

  2. Übersicht • Grundlagen der Übersetzung eines Programmes • Konzepte zur Optimierung • Ausblick

  3. Grundlagen der Übersetzung eines Programmes • Übersicht eines Übersetzungsvorganges • Analyse des Quellprogramms • Lexikalische Analyse • Syntaxanalyse • Semantische Analyse • Fehlerbehandlung

  4. Übersicht eines Übersetzungsvorganges

  5. Analyse des Quellprogramms • Lexikalische Analyse (Scanner) (=Lineare Analyse) • Lesen des Zeichenstromes • Aufteilung in Symbole (tokens) • Aufbau der Symboltabelle

  6. Lexikalische Analyse (Scanner) • Aufbau der Symboltabelle position = initial + rate * 100

  7. Analyse des Quellprogramms • Syntaxanalyse (Parser) (= hierarchische Analyse) • Beschreibung der Syntax der Programmiersprache (kontextfreie Grammatiken, BNF) • Zusammenfassen der Symbole zu grammatikalischen Sätzen

  8. Syntaxanalyse (Parser) • Der Parse-Baum position = initial + rate * 100

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

  10. Fehlerbehandlung • Recovery-Strategien • Panische Recovery • Konstrukt-orientierte Recovery • Fehlerproduktion • Globale Korrektur

  11. Konzepte zur Optimierung -> Ziel: Laufzeit und/oder Größe eines Programmes reduzieren • Übersicht eines Übersetzungsvorganges eines optimierenden Compilers • Analyse • Codetransformation • Optimierungstechniken

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

  13. Übersicht eines Übersetzungsvorganges

  14. ‚Control dependence‘ 1: if (3 == a) 2: b = 10; Abhängigkeit zwischen Ausdruck 1 und 2. -> Generierung des ‚Control Flow Graph‘ (CFG).

  15. CFG - Control Flow Graph

  16. ‚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

  17. Codetransformation -> Bestandteil jeder Optimierung • Allgemeiner Ablauf einer Transformation • Beispiel einer Transformation

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

  19. Beispiel einer Transformation

  20. Beispiel einer Transformation

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

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

  23. Optimierungstechniken • Partial Evaluation (Early Optimizations) -> nur bei einigen Datenflußanalyse notwendig • Redundancy Elimination -> Entfernung redundanter Codestücke -> Daten- und Kontrollflußanalyse notwendig

  24. Partial Evaluation • Constant Folding • Algebraic Simplification • Reassociation • Constant Propagation • Copy Propagation • Statement Substitution • Induction Variable Elimination • Function Cloning

  25. Constant Folding Konstante Ausdrücke werden zur Übersetzungszeit ausgerechnet. X = 3 * 2; -> X = 6; -> Es ist keine Datenflußanalyse notwendig

  26. Algebraic Simplification Vereinfachung algebraischer Ausdrücke X = (Y + 1) / N; wobei N = 1; zu X = (Y + 1); -> Keine Datenflußanalyse notwendig

  27. Reassociation Umgruppierung von Additionen und Multiplikationen in einem Ausdruck Kann die Anzahl der ‚Common Subexpressions‘ vergrößern. Keine Datenflußanalyse notwendig

  28. Constant Propagation Konstanten im Programm werden durch ihren eigentlichen Wert ersetzt. Hierzu wird das Ergebnis der Datenflußanalyse benötigt.

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

  30. Copy Propagation - ACP Table of available copy instructions.

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

  32. Induction Variable Elimination -> Entfernen der Index-Variable - Folgt meist auf ‚Strength Reduction of Induction Variable Expressions‘

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

  34. Function Cloning - Beispiel

  35. Redundancy Elimination • Loop-invariant Code Motion • Unreachable Code Elimination • Useless Code Elimination • Dead Variable Elimination • Common-Subexpression Elimination

  36. Loop-invariant Code Motion Ausdrücke, welche ihren Wert in keiner Iteration ändern, werden außerhalb der Schleife gestellt. -> Datenflußanalyse notwendig

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

  38. Useless Code Elimination ‚Unnütze‘ Codestücke werden zum Teil durch andere Optimierungen (z.B.: Unreachable Code Elimination) verursacht. -> Datenflußanalyse notwendig

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

  40. Common-Subexpression Elimination (CSE) -> Identische Ausdrücke (Berechnungen) können gespeichert werden, damit der entsprechende Wert nicht neu berechnet werden muß. -> Datenflußanalyse notwendig

  41. Common-Subexpression Elimination (CSE) - Beispiel

  42. Ausblick • Weitere Optimierungen • Function Inlining • Schleifen-Optimierungen (Vortrag 4) • Laufzeitsysteme (Vortrag 8)

More Related