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.
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