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.

4 Implementierung<br />

Codesequenz, ebenso wie Bansal und Aiken [3]. Im Unterschied dazu, ist das hier vorgestellte<br />

Verfahren auf eine maschinenunabhängige Zwischensprache ausgerichtet, weswegen<br />

für eine Operation keine explizite Anzahl der notwendigen Taktzyklen angeben<br />

werden kann. Einfach den Ansatz von Massalin zu übernehmen und die Anzahl der<br />

Operationen als Kostenmaß zu verwenden erscheint allerdings auch etwas restriktiv, da<br />

gewisse Beziehungen bezüglich der benötigten Taktzyklen eines Befehls eigentlich für<br />

allen Architekturen bestehen (z. B. zwischen Addition und Multiplikation). Aus diesem<br />

Grund wird, als Kompromiss zwischen beiden Kostenmodellen, jeder Operation ein fester<br />

Kostenwert zugeordnet, so dass die Verhältnismäßigkeit im Sinne von teurer als oder<br />

günstiger als, wie sie beispielsweise bei einer IA32-Architektur besteht, gewahrt bleibt.<br />

Die Addition erhält deshalb einen niedrigeren Wert als die Multiplikation. Eine Aufstellung<br />

der entsprechenden Kosten findet sich in Tabelle 4.1, die auch in Kapitel 5 als<br />

Kostenmodell dient. Eine andere Kostenzuteilung ist allerdings genauso möglich.<br />

Tabelle 4.1:<br />

Knotentyp: neg add sub mul not or and xor<br />

Kosten: 1 1 1 2 1 1 1 1<br />

Übersicht über Operationen und deren Kosten. Bei den Operationen<br />

not, or, and, xor handelt es sich nicht um logische Operationen, sondern um<br />

Bit-Operationen.<br />

Prinzipiell können Muster beliebig groß werden wodurch sich beliebig viele Kombinationsmöglichkeiten<br />

ergeben. Daher ist eine Beschränkung der Mustergröße notwendig. Die<br />

einfachste Möglichkeit wäre, die Anzahl der Operationen oder die Anzahl der Knoten als<br />

Maß heranzuziehen. Allerdings wird dann die Menge der auffindbaren Optimierungsregeln<br />

eingeschränkt, indem Muster nicht mehr berücksichtigt werden, die zwar mehr Operationen<br />

oder Knoten, aber einen niedrigeren Kostenwert besitzen. Aus diesem Grund<br />

wird die Mustergröße anhand des Kostenmaßes beschränkt. Dies stellt sicher, dass alle<br />

Muster bis zu einer definierten Kostenobergrenze auch erzeugt werden.<br />

4.2.2 Erzeugen neuer Muster<br />

Der erste Schritt zur <strong>Generierung</strong> einer Regel besteht in der Erzeugung eines neuen<br />

Musters. Hierzu wird eine Operation mit einem, bzw. zwei bereits bekannten Mustern<br />

aus der Menge MErz zu einem neuen Muster kombiniert, das im Anschluss von der<br />

Musteranalyse untersucht wird.<br />

Da zu Beginn des <strong>Generierung</strong>svorgang noch keine Muster bekannt sind, müssen zunächst<br />

die Basismuster erzeugt werden. Ein Basismuster besteht aus einem einzelnen Knoten<br />

und repräsentiert einen Operanden, genauer eine Variable oder eine Konstante. Da Variablen<br />

und Konstanten einen Wert repräsentieren, aber keine Veränderung dieses Wertes<br />

darstellen und somit auch keine Rechenzeit erfordern, werden ihnen die Kosten 0<br />

zugeordnet. Auf Assembler-Ebene entspricht diese Annahme dem Fall, dass sich die er-<br />

26

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!