MASCHINENUNABHÄNGIGE CODEOPTIMIERUNG Philip Demey SEMINAR: ÜBERSETZUNG VON KÜNSTLICHEN SPRACHEN.
-
Upload
werner-kast -
Category
Documents
-
view
114 -
download
2
Transcript of MASCHINENUNABHÄNGIGE CODEOPTIMIERUNG Philip Demey SEMINAR: ÜBERSETZUNG VON KÜNSTLICHEN SPRACHEN.
MASCHINENUNABHÄNGIGECODEOPTIMIERUNG
Philip Demey
SEMINAR: ÜBERSETZUNG VON KÜNSTLICHEN SPRACHEN
2
Agenda
Einordnung und Motivation
Optimierungsmöglichkeiten
Datenflussanalyse
Verfahren der Datenflussanalyse
Zusammenfassung und Ausblick
3
Einordnung
Dem Codegenerator
optional vorgeschaltet
Agiert global auf Flussgraph
Maschinenunabhängig
Optimierung im Sinne
von Verbesserung
Lexikalische Analyse
Syntaxanalyse
Semantische Analyse
Zwischencodegenerator
MaschinenunabhängigeCodeoptimierung
Codegenerator
MaschinenabhängigeCodeoptimierung
4
Motivation
3AC erzeugt temporäre Variablen
Konstrukte höherer Programmiersprachen z. B. durch Arrayzugriff
Redundanzen und teure Operationen
Ziel: Vermeidung von Ineffizienz Entfernung unnötiger Befehle
Ersetzung von Befehlen
Beispiel:a = b + c * d
3AC:t1 = c * da = b + t1
Beispiel:a = 8 * b
Beispiel:b = a[i][j]
3AC: t1 = i * w1t2 = j * w2t3 = t1 + t2b = a[t3]
5Optimierungsmöglichkeiten
6
Optimierungsmöglichkeiten 1/5 Globale gemeinsame Teilausdrücke
Wiederverwendung einer Berechnung ohne
Änderung der benötigten Werte
B2
B1
a = 8 * b
i = i – 1c = 8 * ie = a + 8
B3
d = 8 * b
B2
B1
a = 8 * bt = a
i = i – 1c = 8 * ie = a + 8
B3
d = t
7
Optimierungsmöglichkeiten 2/5 Kopiepropagation
Entfernung von Kopieranweisungen
B2
B1
a = 8 * bt = a
i = i – 1c = 8 * ie = a + 8
B3
d = t
B2
B1
a = 8 * bt = a
i = i – 1c = 8 * ie = a + 8
B3
d = a
8
Optimierungsmöglichkeiten 3/5 Eliminierung von totem Code
Entfernung nicht genutzter Variablen
B2
B1
a = 8 * bt = a
i = i – 1c = 8 * ie = a + 8
B3
d = a
B2
B1
a = 8 * b
i = i – 1c = 8 * ie = a + 8
B3
d = a
9
Optimierungsmöglichkeiten 4/5 Kostenreduzierung
Ersetzung von teuren Operationen
B2
B1
a = 8 * b
i = i – 1c = 8 * ie = a + 8
B3
d = a
B2
B1
a = 8 * bc = 8 * i
i = i – 1c = c – 8e = a + 8
B3
d = a
10
Optimierungsmöglichkeiten 5/5 Codeverschiebung
Verlagerung von Codeteilen aus Schleifen
B2
B1
a = 8 * bc = 8 * i
i = i – 1c = c – 8e = a + 8
B3
d = a
B2
B1a = 8 * bc = 8 * ie = a + 8
i = i – 1c = c – 8
B3
d = a
11
„Oberste Direktive“
Semantikerhaltende Transformationen
Sichere / Konservative Verfahren Keine Änderungen der Berechnungen
Aber: Versäumung von
Codeverbesserungen möglich
Konservative Datenflussanalyse
12 Datenflussanalyse
13
Datenflussabstraktion
Nur Extraktion der nötigen Informationen Beispiel: Verfügbare Ausdrücke
Ausdruck x + y ist an Punkt p verfügbar: Alle Pfade zu p werten x + y aus
Nach letzter Auswertung keine Zuweisung zu x
oder y
a = b + cd = c + eb = a + e
1234
14
Datenflussanalyse 1/3
Sammeln von Informationen
Operiert auf Flussgraph
Zustände an Programmpunkten
Mathematischer Lösungsansatz
Datenflussgleichungen
15
Datenflussanalyse 2/3
Pfade durch Flussgraph
Informationen zu Anfang und Ende der
Blöcke
DFA-Framework
Iterativer Algorithmus
16
Datenflussanalyse 3/3
Programmpunkte
Definitionen
Menge von
Datenflusswerten
Pfade: z. B. 1,2,3,4,5,6,7,8
z. B. 1,2,3,4,5,6,7,5,6,7,8
B2
B1
B3
d1: a = 8 * bd2: c = 8 * id3: e = a + 8
d4: i = i – 1d5: c = c – 8 goto B2
d6: d = a
1234
567
8
IN[B1]
OUT[B1]
IN[B2]
OUT[B2]
IN[B3]
OUT[B3]
17
DFA-Framework Komponenten
Datenflussrichtung Vorwärts oder rückwärts
Halbverband Menge von Definitionen
Durchschnittsoperator
Familie von Transferfunktion Transformiert Datenflusswerte
Ein- und Ausstiegsknoten im Datenflussgraph
Initialisierungswerte für Ein- und Ausstiegsknoten
18
Iterativer Algorithmus
(Vorwärts gerichteter Datenfluss)
19
Lösung des Datenflussproblems
Iterativer Algorithmus konvergiert und
findet Lösung (MFP)
Ideallösung (IDEAL) nicht erreichbar
Näherung möglich (Meet-over-Path,
MOP)
Es gilt:
MFP ist sicher
20
Beispiel: Erreichende Definitionen
Ziel: z. B. Ermittlung von Konstanten
Definition d erreicht Punkt p, wenn d
nicht auf Pfad zu p zerstört wird
Definition d wird zerstört, wenn auf Pfad
zu p eine andere Definition zur Variable
existiert
21
Beispiel: Erreichende Definitionen
Iterativer Algorithmus:
22 Verfahren der Datenflussanalyse
23
Konstantenpropagation 1/2
Ziel: Ausdrücke die bei jeder Ausführung
konstant sind durch Konstante ersetzen
Halbverband:
UNDEF
NAC
-3 -2 -1 10 32 ......
24
Konstantenpropagation 2/2
Transferfunktion(für x = y+z)
Problem:
x = 3y = 4
x = 4y = 3
z = x + y
B1
B3
B2
m(y) m(z) m‘(x)
UNDEF
UNDEF UNDEF
c2 UNDEF
NAC NAC
c1
UNDEF UNDEF
c2 c1+c2
NAC NAC
NAC
UNDEF NAC
c2 NAC
NAC NAC
25
Eliminierung teilweiser Redundanz 1/2
Ziel: Anzahl der Auswertungen reduzieren Globale gemeinsame Teilausdrücke
Schleifeninvariante Ausdrücke
Teilweise redundante Ausdrücke
B2
B1
a = b + c
B2
B1
t = b + c
a = t
26
Eliminierung teilweiser Redundanz 2/2
Mehrfacher Durchlauf erforderlich
Evtl. Einfügen neuer Blöcke nötig
Evtl. Duplizierung von Code nötig
Wünschenswert: Alle Redundanzen entfernt, die ohne
Codeduplizierung entfernt werden können
Keine neuen Berechnungen
Möglichst späte Berechnung von Ausdrücken
27
Schleifen in Flussgraphen
Ziel: Natürliche Schleifen identifizieren Auswirkung auf die Laufzeit von
Programmanalysen
Algorithmus kann auf hierarischer Struktur
operieren
28
Schleifen in Flussgraphen
Konzepte zur Identifizierung z. B. Dominatorbaum, Spannbaum
8
76
543
2
11
8
5
7
2
43
6
a dom b
29
Weitere Verfahren
Bereichsbasierte Analyse
Symbolische Analyse
B3
B1
R1
R2
R3
R5
R6
R4
B2
B4
B5
B6
R10
R9R8
R7
1) a = input();
2) b = a + 2;
3) c = b + 1;
4) if(c < a)
5) b = 1;
30 Zusammenfassung und Ausblick
31
Zusammenfassung
Optimierungsmöglichkeiten
Datenflussanalyse als Werkzeug
Generisches Datenflussanalyse-
Framework
Iterativer Algorithmus findet Lösung
Optimierungen müssen sicher sein
32
Praxis: GCC
GNU Compiler Collection: Hier C-Compiler
Mehrere Optimierungslevel -o0 bis -o3
Einzeloptionen, z. B. -fmerge-constants
-ftree-dominator-opts
-funswitch-loops
http://gcc.gnu.org/onlinedocs/gcc/Optimize-
Options.html
33
Ausblick
Maschinenabhängige Optimierung z. B. Parallelisierung
Spezialgebiete z. B. Objektorientierte Programmierung
Neue Methoden z. B. Static Single Assignment Form
z. B. Convergent Compiling
VIELEN DANK!
FRAGEN?
35
Referenzquelle
Aho, Lam, Sethi, Ullmann: Compiler –
Prinzipien, Techniken und Werkzeuge,
Addision-Wesley, 2008.
36
Spannbaum
8
7 6
3
5
4
2
1