+ All Categories
Home > Documents > Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der...

Grundlagen der Übersetzung und Optimierung von Programmiersprachen Seminar: Techniken der...

Date post: 06-Apr-2015
Category:
Upload: vergil-nett
View: 106 times
Download: 0 times
Share this document with a friend
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
Transcript
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)


Recommended