Generierung lokaler Optimierungen - IPD Snelting

Generierung lokaler Optimierungen - IPD Snelting Generierung lokaler Optimierungen - IPD Snelting

pp.info.uni.karlsruhe.de
von pp.info.uni.karlsruhe.de Mehr von diesem Publisher
25.10.2012 Aufrufe

1 Einführung so gewonnenen Optimierungsregeln soll unter Zuhilfenahme eines geeigneten Verfahrens (z. B. SAT-Solver oder SMT-Solver) bewiesen werden. Da zu erwarten ist, dass vor allem durch Konstanten eine Vielzahl strukturell ähnlicher Regeln generiert werden, sollen diese in möglichst allgemeinen Regeln zusammengefasst werden. Hierzu soll untersucht werden, wie eine solche Aggregation zu erreichen ist. 1.2 Aufbau der Arbeit In Kapitel 2 werden zunächst die notwendigen Grundlagen behandelt. Es wird genauer auf das Thema lokale Optimierungen eingegangen. Des weiteren werden notwendige Formalisierungen eingeführt und das Konzept der Superoptimierung beschrieben. Zuletzt wird das SAT-Problem und dessen Erweiterung Satisfiability Modulo Theories, kurz SMT sowie die Zwischensprache Firm vorgestellt. In Kapitel 3 werden einige verwandte Ansätze vorgestellt und sowohl untereinander als auch mit dem Ansatz dieser Arbeit verglichen. Darauf aufbauend wird in Kapitel 4 die konkrete Umsetzung dieser Arbeit beschrieben. Der besondere Schwerpunkt liegt dabei auf dem Umgang mit Konstanten bei der Generierung von lokalen Optimierungsregeln. Kapitel 5 belegt anhand von Messergebnissen die Durchführbarkeit dieses Ansatzes, sowie den Nutzen, aber auch dessen Grenzen. Den Abschluss bildet Kapitel 6, in welchem eine Zusammenfassung der Arbeit sowie ein Ausblick auf zukünftige Erweiterungen gegeben wird. 10

2 Grundlagen 2.1 Lokale Optimierungen Der Begriff lokale Optimierungen [2] fasst eine Vielzahl unterschiedlicher Optimierungstechniken zusammen. Das Ziel solcher Optimierungen ist es, die Berechnung von Ausdrücken hinsichtlich eines Kostenmodells1 zu vereinfachen. Allen lokalen Optimierungen ist gemein, dass sie nur wenige Instruktionen berücksichtigen und keine aufwendigen Analyse-Techniken wie beispielsweise eine Datenfluss-Analyse erfordern. Eingesetzt werden solche Optimierungen sowohl zur Verbesserung der von einem Übersetzer erzeugten Zwischendarstellung als auch der Zieldarstellung. Nachfolgend werden einige wichtige lokale Optimierungen vorgestellt (siehe auch [15]). Konstantenfaltung Bei der Konstantenfaltung werden Ausdrücke, die lediglich konstante Operanden besitzen und somit nicht von den Eingabedaten des Programms abhängig sind, bereits während der Übersetzungszeit ausgerechnet und durch ihr Ergebnis ersetzt. Die entsprechenden Operationen können so eingespart werden. Beispielsweise kann der Ausdruck 3+5 direkt durch die Konstante 8 ersetzt werden. Die Addition wird nicht länger benötigt. Algebraische Vereinfachungen Oft lassen sich Ausdrücke durch das Ausnutzen algebraischer Umformungen in eine einfachere bzw. kostengünstigere Form bringen, d. h. es werden weniger oder günstigere Operationen verwendet. Ein häufig gezeigtes Beispiel ist der Ausdruck x + 0, der zu x vereinfacht werden kann. Hier wird ausgenutzt, dass es sich bei 0 um das neutrale Element der Addition handelt. Ein weiteres Beispiel ist der Ausdruck x ∧ 0. Ist ein Operand der ∧-Verknüpfung 0, so ist das Ergebnis unabhängig vom zweiten Operanden ebenfalls 0. Operatorvereinfachung Einige Operationen lassen sich durch günstigere, semantisch äquivalente Operationen ersetzen. Beispielsweise lässt sich eine Multiplikation mit 2 durch eine Addition mit sich selbst ersetzen. Es gilt: x ∗ 2 = x + x. Etwas allgemeiner gilt auch: Eine Multiplikation mit einer 2-er Potenz ist äquivalent zu einem Links-Shift um den Exponenten. Da sowohl die Addition als auch die Shift- Operation auf heutigen Architekturen deutlich schneller ausgeführt werden kann als eine Multiplikation, kann ein Austausch von Vorteil sein. 1 z. B. Anzahl der Instruktionen, Summe der notwendigen Taktzyklen, etc. 11

2 Grundlagen<br />

2.1 Lokale <strong>Optimierungen</strong><br />

Der Begriff lokale <strong>Optimierungen</strong> [2] fasst eine Vielzahl unterschiedlicher Optimierungstechniken<br />

zusammen. Das Ziel solcher <strong>Optimierungen</strong> ist es, die Berechnung von Ausdrücken<br />

hinsichtlich eines Kostenmodells1 zu vereinfachen. Allen lokalen <strong>Optimierungen</strong><br />

ist gemein, dass sie nur wenige Instruktionen berücksichtigen und keine aufwendigen<br />

Analyse-Techniken wie beispielsweise eine Datenfluss-Analyse erfordern. Eingesetzt werden<br />

solche <strong>Optimierungen</strong> sowohl zur Verbesserung der von einem Übersetzer erzeugten<br />

Zwischendarstellung als auch der Zieldarstellung. Nachfolgend werden einige wichtige<br />

lokale <strong>Optimierungen</strong> vorgestellt (siehe auch [15]).<br />

Konstantenfaltung Bei der Konstantenfaltung werden Ausdrücke, die lediglich konstante<br />

Operanden besitzen und somit nicht von den Eingabedaten des Programms<br />

abhängig sind, bereits während der Übersetzungszeit ausgerechnet und durch ihr<br />

Ergebnis ersetzt. Die entsprechenden Operationen können so eingespart werden.<br />

Beispielsweise kann der Ausdruck 3+5 direkt durch die Konstante 8 ersetzt werden.<br />

Die Addition wird nicht länger benötigt.<br />

Algebraische Vereinfachungen Oft lassen sich Ausdrücke durch das Ausnutzen algebraischer<br />

Umformungen in eine einfachere bzw. kostengünstigere Form bringen,<br />

d. h. es werden weniger oder günstigere Operationen verwendet. Ein häufig gezeigtes<br />

Beispiel ist der Ausdruck x + 0, der zu x vereinfacht werden kann. Hier wird<br />

ausgenutzt, dass es sich bei 0 um das neutrale Element der Addition handelt. Ein<br />

weiteres Beispiel ist der Ausdruck x ∧ 0. Ist ein Operand der ∧-Verknüpfung 0, so<br />

ist das Ergebnis unabhängig vom zweiten Operanden ebenfalls 0.<br />

Operatorvereinfachung Einige Operationen lassen sich durch günstigere, semantisch<br />

äquivalente Operationen ersetzen. Beispielsweise lässt sich eine Multiplikation mit<br />

2 durch eine Addition mit sich selbst ersetzen. Es gilt: x ∗ 2 = x + x. Etwas allgemeiner<br />

gilt auch: Eine Multiplikation mit einer 2-er Potenz ist äquivalent zu<br />

einem Links-Shift um den Exponenten. Da sowohl die Addition als auch die Shift-<br />

Operation auf heutigen Architekturen deutlich schneller ausgeführt werden kann<br />

als eine Multiplikation, kann ein Austausch von Vorteil sein.<br />

1 z. B. Anzahl der Instruktionen, Summe der notwendigen Taktzyklen, etc.<br />

11

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!