MASCHINENUNABHÄNGIGE CODEOPTIMIERUNG Philip Demey SEMINAR: ÜBERSETZUNG VON KÜNSTLICHEN SPRACHEN.

Post on 05-Apr-2015

110 views 2 download

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