25.10.2012 Aufrufe

Generierung lokaler Optimierungen - IPD Snelting

Generierung lokaler Optimierungen - IPD Snelting

Generierung lokaler Optimierungen - IPD Snelting

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

3 Verwandte Arbeiten<br />

Ein wichtiger Teilaspekt der Arbeit eines heutigen Übersetzers bildet die Optimierung<br />

des von ihm generierten Codes, wie bereits in Kapitel 1 angeführt. Dies gilt sowohl für<br />

die Zwischen- als auch für die Zieldarstellung. <strong>Optimierungen</strong> transformieren die Darstellung<br />

eines Programms unter Beachtung dessen Semantik mit dem Ziel, eine Verbesserung<br />

dieser Darstellung bezüglich eines gewählten Kostenmodells zu erreichen. Es ist<br />

nicht sichergestellt, dass eine angewandte Optimierung bzw. die Menge der angewandten<br />

<strong>Optimierungen</strong> auch zu einem optimalen Ergebnis führen.<br />

Massalin beschäftigt sich in [14] als einer der Ersten mit diesem Problem. Er setzt sich<br />

in dieser Arbeit mit der Frage auseinander, wie die optimale Codesequenz zu einer gegebenen<br />

Funktion aussieht und wie diese ermittelt werden kann. Als Kostenmaß legt Massalin<br />

die Anzahl der involvierten Instruktionen einer Codesequenz zugrunde. Die Idee<br />

seines Ansatzes basiert auf der Aufzählung aller Codesequenzen aufsteigender Länge<br />

und dem Vergleich jeder dieser Codesequenzen mit der ursprünglichen Codesequenz,<br />

hinsichtlich ihrer Semantik. Wird eine semantisch äquivalente Sequenz gefunden, folgt<br />

aus der Aufzählungsreihenfolge, dass es sich hierbei um eine kürzeste und somit optimale<br />

Sequenz, bezogen auf sein Kostenmodell handelt. Eine besondere Herausforderung stellt<br />

die Überprüfung der Äquivalenz zweier Codesequenzen dar. Massalin drückt hierzu eine<br />

Codesequenz als Menge von Termen aus, die aus booleschen Operationen und den Argumenten<br />

und Konstanten der Funktion bestehen und vergleicht diese anschließend mit den<br />

ebenso erzeugten Termen der ursprünglichen Codesequenz. Dieser Vergleich entspricht<br />

einem SAT-Problem. Da es sich bei diesem Vergleich um eine sehr Laufzeit-intensive<br />

Aufgabe handelt, verwendet Massalin zuvor einen weiteren Test. Dieser besteht darin,<br />

die beiden zu vergleichenden Funktionen bzw. Codesequenzen in ein ausführbares Programm<br />

zu übersetzen und mit einer Menge von Testdaten in Form von Eingabevektoren<br />

auszuführen. Anschließend werden die Ergebnisse verglichen. Unterscheiden sie sich, folgt<br />

daraus, dass auch die Semantik der Funktionen unterschiedlich sein muss. Eine weitere<br />

Reduktion der zu vergleichenden Codesequenzen erreicht Massalin durch den Ausschluss<br />

von Sequenzen, welche bereits als nicht-optimal bekannt sind. Dies ist möglich, da jede<br />

Codesequenz, die eine nicht-optimale Sequenz beinhaltet, durch eine kürzere Sequenz repräsentiert<br />

werden kann. Massalin gibt in seiner Arbeit einige interessante Beispiele von<br />

superoptimierten Programmen bzw. Codesequenzen an, denen ihre eigentliche Semantik<br />

nicht direkt anzusehen ist. Abbildung 3.1 zeigt als Beispiel die Signum-Funktion, einmal<br />

als C-Programm und einmal in ihrer Darstellung als superoptimiertes 8068-Assembler<br />

Programm mit lediglich 3 Instruktionen.<br />

19

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!