42
Grundlagen der Grundlagen der Übersetzung und Übersetzung und Optimierung von Optimierung von Programmiersprachen Programmiersprachen Seminar: Techniken der Code- Optimierung für moderne Rechnerarchitekturen Betreuer: Martin Schulz Referent: Markus Ibba

Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Embed Size (px)

Citation preview

Page 1: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Grundlagen der Grundlagen der Übersetzung und Übersetzung und Optimierung von Optimierung von ProgrammiersprachenProgrammiersprachen

Seminar: Techniken der Code-Optimierung für

moderne Rechnerarchitekturen

Betreuer: Martin Schulz Referent: Markus Ibba

Page 2: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

ÜbersichtÜbersicht

• Grundlagen der Übersetzung eines Grundlagen der Übersetzung eines ProgrammesProgrammes

• Konzepte zur OptimierungKonzepte zur Optimierung

• AusblickAusblick

Page 3: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Grundlagen der Grundlagen der Übersetzung eines Übersetzung eines ProgrammesProgrammes• Übersicht eines ÜbersetzungsvorgangesÜbersicht eines Übersetzungsvorganges

• Analyse des QuellprogrammsAnalyse des Quellprogramms– Lexikalische AnalyseLexikalische Analyse

– SyntaxanalyseSyntaxanalyse

– Semantische AnalyseSemantische Analyse

• FehlerbehandlungFehlerbehandlung

Page 4: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Übersicht eines Übersicht eines ÜbersetzungsvorgangesÜbersetzungsvorganges

Q uellprogramm (Zeichenfolge)

LexikalischeAnalyse

Syntax-Analyse

SemantischeAnalyse

Symbolfolge

Zw ischencode

Zw ischencode

Code-Erzeugung

Ausführbarer P rogrammcode

Symboltabelle Schnittstelle zumBetriebssystem

Page 5: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Analyse des Analyse des QuellprogrammsQuellprogramms

• Lexikalische Analyse (Scanner)Lexikalische Analyse (Scanner)(=Lineare Analyse)(=Lineare Analyse)

– Lesen des ZeichenstromesLesen des Zeichenstromes

– Aufteilung in Symbole (tokens)Aufteilung in Symbole (tokens)

– Aufbau der SymboltabelleAufbau der Symboltabelle

Page 6: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Lexikalische Analyse Lexikalische Analyse (Scanner)(Scanner)

• Aufbau der SymboltabelleAufbau der Symboltabelle

position = initial + rate * 100position = initial + rate * 100

0

LexemPtr Symbol

100 EO S

Page 7: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Analyse des Analyse des QuellprogrammsQuellprogramms

• Syntaxanalyse (Parser)Syntaxanalyse (Parser)(= hierarchische Analyse)(= hierarchische Analyse)

– Beschreibung der Syntax der Beschreibung der Syntax der ProgrammierspracheProgrammiersprache(kontextfreie Grammatiken, BNF)(kontextfreie Grammatiken, BNF)

– Zusammenfassen der Symbole zu Zusammenfassen der Symbole zu grammatikalischen Sätzengrammatikalischen Sätzen

Page 8: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Syntaxanalyse (Parser)Syntaxanalyse (Parser)

• Der Parse-BaumDer Parse-Baum

position = initial + rate * 100position = initial + rate * 100

Zuw eisung

Bezeichner Ausdruck

Ausdruck

AusdruckAusdruck

Ausdruck

position

=

+

*Bezeichner

initial

Bezeichner

rate

Zahl

100

Page 9: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Analyse des Analyse des QuellprogrammsQuellprogramms

• Semantische AnalyseSemantische Analyse– Konsistenz zwischen Deklaration und Konsistenz zwischen Deklaration und

Definition (Methoden, Variablen)Definition (Methoden, Variablen)

– Statische ÜberprüfungenStatische Überprüfungen• TypüberprüfungTypüberprüfung

• Überprüfung des KontrollflussesÜberprüfung des Kontrollflusses

• Überprüfung auf EindeutigkeitÜberprüfung auf Eindeutigkeit

Page 10: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

FehlerbehandlungFehlerbehandlung

• Recovery-StrategienRecovery-Strategien– Panische RecoveryPanische Recovery

– Konstrukt-orientierte RecoveryKonstrukt-orientierte Recovery

– FehlerproduktionFehlerproduktion

– Globale KorrekturGlobale Korrektur

Page 11: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Konzepte zur OptimierungKonzepte zur Optimierung

-> Ziel: Laufzeit und/oder Größe eines -> Ziel: Laufzeit und/oder Größe eines Programmes reduzierenProgrammes reduzieren

• Übersicht eines Übersetzungsvorganges Übersicht eines Übersetzungsvorganges eines optimierenden Compilerseines optimierenden Compilers– AnalyseAnalyse

– CodetransformationCodetransformation

• OptimierungstechnikenOptimierungstechniken

Page 12: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Idee einer OptimierungIdee einer Optimierung

• Anwendungsprogrammierer braucht Anwendungsprogrammierer braucht kein umfangreiches Wissen über die kein umfangreiches Wissen über die Maschinenarchitektur auf der er Maschinenarchitektur auf der er programmiert.programmiert.

• Hardwarehersteller brauchen nur Hardwarehersteller brauchen nur noch Schnittstelle für den Compiler noch Schnittstelle für den Compiler selber zu designen.selber zu designen.

Page 13: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Übersicht eines Übersicht eines ÜbersetzungsvorgangesÜbersetzungsvorganges

Lexikalische Analyse

Syntaxanalyse

Kontrollflußanalyse

Datenfluß- undAbhängigkeitsanalyse

Codetransform ation

Codeerzeugung

Q uellprogram m

Sym bole

‘Front-end’

Analyse

Sym boltabelle

CFG

Transform ation

Zw ischencode

‘Back-end’

SSA / PDG

Page 14: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

‚‚Control dependence‘Control dependence‘

1:1: if (3 == a)if (3 == a)

2:2: b = 10; b = 10;

Abhängigkeit zwischen Ausdruck 1 Abhängigkeit zwischen Ausdruck 1 und 2.und 2.

-> Generierung des ‚Control Flow -> Generierung des ‚Control Flow Graph‘ (CFG).Graph‘ (CFG).

Page 15: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

CFG - Control Flow GraphCFG - Control Flow Graph

Entry

Exit

c = a + bd = c * a

c > d ?

c = c + d d = a

a < b ?

a = a * 2

Page 16: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

‚‚Data dependence‘Data dependence‘

a = c * 10;a = c * 10;

d = 2 * a + c;d = 2 * a + c;

‚‚flow flow dependence‘dependence‘

e = f * 4 + g;e = f * 4 + g;

g = 2 * h;g = 2 * h;

‚‚anti anti dependence‘dependence‘

a = b * c;a = b * c;

a = d + e;a = d + e;

‚‚output output dependence‘dependence‘

• Die Datenflußanalyse wird im 3. Vortrag behandelt

Page 17: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

CodetransformationCodetransformation

-> Bestandteil jeder Optimierung-> Bestandteil jeder Optimierung

• Allgemeiner Ablauf einer Allgemeiner Ablauf einer TransformationTransformation

• Beispiel einer TransformationBeispiel einer Transformation

Page 18: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Allgemeiner Ablauf einer Allgemeiner Ablauf einer TransformationTransformation

• Programmstück finden, welches sich Programmstück finden, welches sich für die Optimierung eignetfür die Optimierung eignet

• Sicherstellen, daß die Sicherstellen, daß die Transformation die Semantik des Transformation die Semantik des Programmes nicht ändertProgrammes nicht ändert

• Programm transformierenProgramm transformieren

Page 19: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Beispiel einer Beispiel einer TransformationTransformation

Page 20: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Beispiel einer Beispiel einer TransformationTransformation

Page 21: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Beispiel einer Beispiel einer TransformationTransformation

• Fehler 1: ÜberlaufFehler 1: Überlauf

Eingabe: b[k] = max. Floatzahl - 1.0;Eingabe: b[k] = max. Floatzahl - 1.0;

a[1] = -2.0;a[1] = -2.0;Überlauf bei C = b[k] + 2.0;Überlauf bei C = b[k] + 2.0;

• Fehler 2: ErgebnisabweichungFehler 2: Ergebnisabweichung

Unterschiede im Ergebnis durch dieUnterschiede im Ergebnis durch dieVertauschung der AdditionsreihenfolgeVertauschung der Additionsreihenfolge

Page 22: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Beispiel einer Beispiel einer TransformationTransformation

• Fehler 3: ZugriffsfehlerFehler 3: Zugriffsfehler

Eingabe: k = m + 1;Eingabe: k = m + 1; n = 0; n = 0;

Referenz zu b[k] nicht definiert.Referenz zu b[k] nicht definiert.

Tritt im Original durch n = 0 nicht Tritt im Original durch n = 0 nicht auf.auf.

Page 23: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

OptimierungstechnikenOptimierungstechniken

• Partial Evaluation (Early Optimizations)Partial Evaluation (Early Optimizations)

-> nur bei einigen Datenflußanalyse -> nur bei einigen Datenflußanalyse notwendignotwendig

• Redundancy EliminationRedundancy Elimination

-> Entfernung redundanter Codestücke-> Entfernung redundanter Codestücke

-> Daten- und Kontrollflußanalyse -> Daten- und Kontrollflußanalyse notwendignotwendig

Page 24: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Partial EvaluationPartial Evaluation

• Constant FoldingConstant Folding

• Algebraic Simplification Algebraic Simplification

• ReassociationReassociation

• Constant PropagationConstant Propagation

• Copy PropagationCopy Propagation

• Statement SubstitutionStatement Substitution

• Induction Variable EliminationInduction Variable Elimination

• Function CloningFunction Cloning

Page 25: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Constant FoldingConstant Folding

Konstante Ausdrücke werden zurKonstante Ausdrücke werden zurÜbersetzungszeit ausgerechnet.Übersetzungszeit ausgerechnet.

X = 3 * 2; X = 3 * 2;

-> X = 6;-> X = 6;

-> Es ist keine Datenflußanalyse -> Es ist keine Datenflußanalyse notwendignotwendig

Page 26: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Algebraic SimplificationAlgebraic Simplification

Vereinfachung algebraischer AusdrückeVereinfachung algebraischer Ausdrücke

X = (Y + 1) / N;X = (Y + 1) / N;

wobei N = 1;wobei N = 1;

zu X = (Y + 1);zu X = (Y + 1);

-> Keine Datenflußanalyse notwendig-> Keine Datenflußanalyse notwendig

Page 27: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

ReassociationReassociation

Umgruppierung von Additionen und Umgruppierung von Additionen und Multiplikationen in einem AusdruckMultiplikationen in einem Ausdruck

Kann die Anzahl der ‚Common Kann die Anzahl der ‚Common Subexpressions‘ vergrößern.Subexpressions‘ vergrößern.

Keine Datenflußanalyse notwendigKeine Datenflußanalyse notwendig

Page 28: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Constant PropagationConstant Propagation

Konstanten im Programm werden Konstanten im Programm werden durchdurch

ihren eigentlichen Wert ersetzt.ihren eigentlichen Wert ersetzt.

Hierzu wird das Ergebnis derHierzu wird das Ergebnis derDatenflußanalyse benötigt.Datenflußanalyse benötigt.

Page 29: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Copy PropagationCopy Propagation

Eliminiert redundante Kopien einerEliminiert redundante Kopien einerVariable.Variable.

-> Benötigt die Ergebnisse der -> Benötigt die Ergebnisse der Datenflußanalyse.Datenflußanalyse.

-> Es wird eine Tabelle verwendet, um -> Es wird eine Tabelle verwendet, um die einzelnen Instruktionen (copy die einzelnen Instruktionen (copy instructions) zu speichern.instructions) zu speichern.

Page 30: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Copy Propagation - ACPCopy Propagation - ACP

Table of available copy instructions.Table of available copy instructions.

Position Code Before ACP Code AfterNULL

1 b <- a b <- a{<b,a>}

2 c <- b + 1 c <- a + 1{<b,a>}

3 d <- b d <- a{<b,a>,<d,a>}

4 b <- d + c b <- a + c{<d,a>}

5 b <- d b <- a{<d,a>,<b,a>}

Page 31: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Statement SubstitutionStatement Substitution(Forward Substitution)(Forward Substitution)

Ersetzung einer Variable durch ihreErsetzung einer Variable durch ihreDefinition.Definition.

-> Allgemeine Form von ‚Copy -> Allgemeine Form von ‚Copy Propagation‘Propagation‘

-> Kann die Analyse von Ausdrücken -> Kann die Analyse von Ausdrücken innerhalb einer Schleife innerhalb einer Schleife vereinfachenvereinfachen

Page 32: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Induction Variable Induction Variable EliminationElimination

-> Entfernen der Index-Variable-> Entfernen der Index-Variable

- Folgt meist auf ‚Strength Reduction - Folgt meist auf ‚Strength Reduction of Induction Variable Expressions‘of Induction Variable Expressions‘

Page 33: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Function CloningFunction Cloning

Konstante Argumente einer FunktionKonstante Argumente einer Funktionwerden in einer Kopie durch ihren Wertwerden in einer Kopie durch ihren Wertersetzt.ersetzt.

-> Constant Propagation-> Constant Propagation

Dies erhöht zwar die Codegröße, dieDies erhöht zwar die Codegröße, diekopierten Funktionen können aber zum kopierten Funktionen können aber zum

TeilTeilwesentlich schneller ausgeführt werden.wesentlich schneller ausgeführt werden.

Page 34: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Function Cloning - BeispielFunction Cloning - Beispiel

Page 35: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Redundancy EliminationRedundancy Elimination

• Loop-invariant Code MotionLoop-invariant Code Motion

• Unreachable Code EliminationUnreachable Code Elimination

• Useless Code EliminationUseless Code Elimination

• Dead Variable EliminationDead Variable Elimination

• Common-Subexpression EliminationCommon-Subexpression Elimination

Page 36: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Loop-invariant Code Loop-invariant Code MotionMotion

Ausdrücke, welche ihren Wert in Ausdrücke, welche ihren Wert in keinerkeiner

Iteration ändern, werden außerhalb Iteration ändern, werden außerhalb derderSchleife gestellt.Schleife gestellt.

-> Datenflußanalyse notwendig-> Datenflußanalyse notwendig

Page 37: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Unreachable Code Unreachable Code EliminationElimination

Ein Codestück wird unerreichbar Ein Codestück wird unerreichbar durch:durch:– Bedingungen,welche immer true oder Bedingungen,welche immer true oder

immer false sindimmer false sind

– Schleifen, welche nie durchlaufen Schleifen, welche nie durchlaufen werdenwerden

-> Datenflußanalyse notwendig-> Datenflußanalyse notwendig

Page 38: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Useless Code EliminationUseless Code Elimination

‚‚Unnütze‘ Codestücke werden zum Unnütze‘ Codestücke werden zum TeilTeil

durch andere Optimierungendurch andere Optimierungen(z.B.: Unreachable Code Elimination)(z.B.: Unreachable Code Elimination)verursacht.verursacht.

-> Datenflußanalyse notwendig-> Datenflußanalyse notwendig

Page 39: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Dead Variable EliminationDead Variable Elimination

Nicht benutzte Variablen werden entfernt.Nicht benutzte Variablen werden entfernt.

Folgt meist auf die Optimierungen:Folgt meist auf die Optimierungen:– Unreachable Code EliminationUnreachable Code Elimination

– Useless Code EliminationUseless Code Elimination

Durch die Datenflußanalyse kannDurch die Datenflußanalyse kannfestgestellt werden, ob die Variable nochfestgestellt werden, ob die Variable nochbenutzt wird.benutzt wird.

Page 40: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Common-Subexpression Common-Subexpression Elimination (CSE)Elimination (CSE)

-> Identische Ausdrücke (Berechnungen) -> Identische Ausdrücke (Berechnungen) können gespeichert werden, damit der können gespeichert werden, damit der entsprechende Wert nicht neu berechnet entsprechende Wert nicht neu berechnet werden muß.werden muß.

-> Datenflußanalyse notwendig-> Datenflußanalyse notwendig

Page 41: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

Common-Subexpression Common-Subexpression Elimination (CSE) - Elimination (CSE) - BeispielBeispiel

Entry

b < - a + 2c < - 4 * b b < c ?

b < - 1

d < - a + 2

Exit

Y

N

B1

B2

B3

Entry

t1 < - a + 2b < - t1c < - 4 * b b < c ?

b < - 1

d < - t1

Exit

B1

B3

B2Y

N

Page 42: Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der Code-Optimierung für moderne Rechnerarchitekturen Betreuer: Martin

AusblickAusblick

• Weitere OptimierungenWeitere Optimierungen– Function InliningFunction Inlining

– Schleifen-Optimierungen (Vortrag 4)Schleifen-Optimierungen (Vortrag 4)

• Laufzeitsysteme (Vortrag 8)Laufzeitsysteme (Vortrag 8)