Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
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