Upload
dinhdan
View
214
Download
0
Embed Size (px)
Citation preview
0
Impact of Economics on Compiler Optimization Arch D. Robinson
Kai Software
Seminar „Zwischensprachen & Codegenerierung“
IPD GoosDimitar Dimitrov
Betreuer Rubino Geiß
1
Überblick
ÜberblickProblem
Übersetzer in der PraxisÜbersetzermarkt
LösungTemplate MetaprogrammingForschungsrichtung und DesiderataAndere Komponentenlösungen
PräprozessorPlug-in OptimiererPartielle EvaluierungBenutzerdefinierte Abstrakte Interpretationen
Checkliste
2
Übersetzer in der Praxis
Register Promotion eine vieler Optimierungen
InliningConstant Propagation
Branch Simplification
Register Promotion
Copy EliminationRedundancy Elimination
Loop UnrollingRegister AllocationSoftware Pipelining
Instruction Scheduling
Alias Analysis
Algebraic Simplifier
Data Flow
3
Übersetzer in der Praxis
Optimierer als Teil der Übersetzer
Zerteiler
Optimierer
Ausgabe(Objektdatei)
Standartbibiliothek
Templateinstanzierung
Debug Inforamtionen
4
Übersetzer in der Praxis
Übersetzer im ProduktDriver / IDE
Kundenbetreuung
Übersetzer Handbuch
MarketingLinker
Lizenz ManagerDebugger
5
Übersetzermarkt
Anforderungen
StandartkonformKundenbetreuungDebuggingSchnelles ÜbersetzenPreisEntwicklungsumgebungOptimierungen
6
Übersetzermarkt
Erwarteter Nutzwert der Optimierungen
Optimierung
Nutzwert
niedrig
hoch
schwach stark
Die Annahme ist:
Bei monatelangen Berechnungen auf SuperrechnerRichtig
Im AllgemeinemFalsch
7
Eigentlicher Nutzwert der Optimierungen
Übersetzermarkt
Nutzwert
Grossen Vorteil ab gewisser Grenze:Wechsel zu höherer Programmiersprache(Assembler -> CFortran -> C++)
Akzeptable Performanz von schwachen OptimiererKein Quellcode
8
Übersetzermarkt
Alternativen für schnellere Programmen1. mehr Speicher2. schnelleren Prozessor3. mehrere Prozessoren4. anderen Algorithmus
•1. und 2. sind am effektivsten
•3. und 4. erfordern viel mehr technisches Wissen
9
Übersetzermarkt
Fazit
Optimierungen bringen nicht allen den gewünschten NutzwertÜbersetzer sind:
kompliziertteuer zu entwickeln
AnsatzOptimierungen von dem Übersetzer entkoppelnOptimierungen als Komponenten
10
Möglichkeiten
C++ Schablonen
Alternative KomponentenmethodenPräprozessorPlug-insPartielle EvaluierungBenutzerdefinierte Abstrakte Interpretationen
11
Template Metaprogramming
C++ Schablonen Exkurs
Typ als Parameter verwendenZu Übersetzungszeit instanziert
template <class T> class Stack {
public:
void push(T element);
T pop();
};
12
Template Metaprogramming
Schablonen Spezialisierung
Auf bestimmte Typen oder Werte spezialisieren
template<> class Stack<int>{
public:
int push(int element);
int pop();
};
13
Template Metaprogramming
Rekursion
template<int n> class Factorial {
public: enum
{ RET = n * Factorial<n-1>::RET };
};
template<> class Factorial<0> {
public: enum { RET = 1 };
};
14
Template Metaprogramming
Schablonen - funktionale Programmiersprache
Komplizierte Datenstrukturen auch möglich
Turing vollständig
Keine Übersetzer spezifische Funktionen
Integraler Teil von der Sprache
15
Template Metaprogramming
Schablonen Nachteile
Nicht geplant – Seiteneffektschwer lesbare Syntaxlangsam
BeitragEntkoppelung der Optimierungen
16
Optimierer als Komponente
Aufgaben der Optimierer:
Zulässigkeit nachprüfen
Vorteil schätzen
Transformation machen
17
Weitere gewünschte Eigenschaften
Semantische Repräsentation visualisierenvor und nach der Optimierung
MächtigkeitDen Übersetzer entlastenPortabel – standardisiert und mehrere Anbietern
18
Präprozessor
Transformationen in der QuellspracheEigene Erfahrungen des AutorsNachteile
Die ganze Sprache muss erkennt werdenOptimierung in den Präprozessor oft falsch gesetztOptimierung in der Sprache nicht ausdrückbarNicht skalierbar
Extra Zerteilen für jede Optimierung
19
Plug-In Optimierungen
Jeder Pass als Bibliothek implementieren
Verbreitete ErweiterungsstrategieForschungsübersetzer schon entwickeltNachteile
Wissen über die interne Darstellung notwendigInterne Repräsentation kann sich ändern
20
Partielle Evaluierung
Auswertung von Programmteilen zu ÜbersetzungszeitRoutinen und Strukturen für bestimmte Instanzen kopierenSchablonen Metaprogrammierung ist auch partielle Evaluierung
21
Partielle Evaluierung(2)
Benutzerdefinierte Optimierungenbool p = Informationen über das Programm sammeln;
if(true_at_compile_time(p)) {
spezialisierte Form benutzten;
} else {
allgemeine Form benutzen;
}
22
Partielle Evaluierung(3)
Keine Metasprache einführendient der Einfachheitkeine klare Unterscheidung zwischen Übersetzung und LaufzeitevaluierungenProgrammierer muss den Evaluator kennenPerformance Hit bei Fehlern
23
Benutzerdefinierte AbstrakteInterpretation
Statische Analyse des Programmverhaltens beeinflusst die TransformationenDer Benutzer könnte das auch machenlexikalische Instanzvariablen
Variable pro Klasseninstanz in der internen Repräsentation
Dekorieren des ParsebaumsBerechnung zu Übersetzungszeit von benutzerdefinierten Attributen
24
Praxistauglichkeit
Vorgestellte Methoden sind:
zu komplex von den Entwicklern einzusetzen
können in Bibliotheken realisiert werden
25
Checkliste für erweiterbare Übersetzer
parallele ProgrammierungFehler Behandlung zu ÜbersetzungszeitDead operation eliminationLoop FusionObjekt inliningGarbage collectionSerializationC++ Bibliothek Optimierungen
26
Zusammenfassung
Für den Übersetzer sind nicht nur Optimierungen wichtigRuf nach erweiterbarem Übersetzer, benutzerdefinierten OptimierungenTemplate Metaprogramming demonstriert solche OptimierungenWeitere Möglichkeiten sind vorhanden
27
Zusammenfassung(2)
Erweiterungen in BereichenAnalysis Transformation
Übersetzerhersteller dabei nicht weiter belasten