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

4 Implementierung var0 neg var1 add Kosten 2 5 sub add neg Kosten 3 var0 Abbildung 4.4: Beispiel zu komplexeren Mustern höherer Kostenstufen. Reihenfolge der erzeugten Muster Für die Geschwindigkeit des Generierungsvorgangs ist es von Vorteil, wenn allgemeinere Muster vor spezielleren Mustern erzeugt werden. Ein Muster m ist dann allgemeiner als ein Muster m ′ , wenn sich m und m ′ nur dadurch unterscheiden, dass eine oder mehrere Konstanten in m ′ durch eine Variable in m ersetzt sind, wie dies beispielsweise in Abbildung 4.5 der Fall ist. Dadurch wird erreicht, dass auch allgemeinere Regeln zuerst erzeugt werden und so viele speziellere Muster gar nicht erst betrachtet werden müssen. Aus diesem Grund werden zunächst Variablen als Operanden verwendet, bevor im Anschluss Konstanten die Operanden bilden (vgl. Abbildung 4.5). Existiert bereits eine Regel für ein Muster mit Variablen, müssen alle spezielleren Muster nicht mehr von der Musteranalyse berücksichtigt werden. Hierauf wird in Abschnitt 4.3.1 noch einmal eingegangen. var0 var0 m add m1 var1 erzeugt vor erzeugt vor 1 m ′ var0 1 Abbildung 4.5: Allgemeinere Muster (links) werden vor spezielleren Mustern (rechts) erzeugt. 28 add m ′ 1

4.2.3 Normalisierung 4 Implementierung Die Menge der möglichen Muster nimmt aufgrund der vielen Kombinationsmöglichkeiten von Operationen und Operanden schnell zu. Es sind jedoch nicht alle Muster für den Generierungsvorgang nötig. Durch Vereinheitlichung bzw. Normalisierung können bereits bei der Mustererzeugung überflüssige Muster ausgeschlossen werden. Normalisierung bezüglich mehrerer Variablen Viele Muster unterscheiden sich lediglich in der Anordnung ihrer Variablen, sind aber ansonsten bezüglich ihres Aufbaus identisch. Für n Variablen lassen sich n! fast identische Muster erzeugen, die sich nur durch eine andere Reihenfolge ihrer Variablen bei einer Postorder-Traversierung des Mustergraphen unterscheiden. Für eine Regel ist die konkrete Benennung der Variablen jedoch unerheblich. Entscheidend ist nur, dass die relative Position jeder einzelnen Variablen erhalten bleibt. Dies soll durch die beiden in Abbildung 4.6 dargestellten Regeln verdeutlicht werden. Obwohl sich die Benennung der Variablen (Knoten 1 und Knoten 2) in den Regeln r und r ′ unterscheidet, drücken beide Regeln dieselbe Transformationsvorschrift aus. Knoten 1 var0 add Knoten 1 var1 add 2 2 Knoten 2 sub var1 sub Knoten 2 sub var0 sub 1 Regel r 1 Regel r ′ ⇒ ⇒ var0 var1 var1 sub 3 add var0 sub 3 Abbildung 4.6: Viele Regeln unterscheiden sich lediglich in der Benennung ihrer Variablen, beschreiben aber dieselbe Transformationsvorschrift. add 29

4 Implementierung<br />

var0<br />

neg var1<br />

add<br />

Kosten 2<br />

5<br />

sub<br />

add<br />

neg<br />

Kosten 3<br />

var0<br />

Abbildung 4.4: Beispiel zu komplexeren Mustern höherer Kostenstufen.<br />

Reihenfolge der erzeugten Muster<br />

Für die Geschwindigkeit des <strong>Generierung</strong>svorgangs ist es von Vorteil, wenn allgemeinere<br />

Muster vor spezielleren Mustern erzeugt werden. Ein Muster m ist dann allgemeiner<br />

als ein Muster m ′ , wenn sich m und m ′ nur dadurch unterscheiden, dass eine oder<br />

mehrere Konstanten in m ′ durch eine Variable in m ersetzt sind, wie dies beispielsweise<br />

in Abbildung 4.5 der Fall ist. Dadurch wird erreicht, dass auch allgemeinere Regeln<br />

zuerst erzeugt werden und so viele speziellere Muster gar nicht erst betrachtet werden<br />

müssen. Aus diesem Grund werden zunächst Variablen als Operanden verwendet, bevor<br />

im Anschluss Konstanten die Operanden bilden (vgl. Abbildung 4.5). Existiert bereits<br />

eine Regel für ein Muster mit Variablen, müssen alle spezielleren Muster nicht mehr von<br />

der Musteranalyse berücksichtigt werden. Hierauf wird in Abschnitt 4.3.1 noch einmal<br />

eingegangen.<br />

var0<br />

var0<br />

m<br />

add<br />

m1<br />

var1<br />

erzeugt vor<br />

erzeugt vor<br />

1<br />

m ′<br />

var0 1<br />

Abbildung 4.5: Allgemeinere Muster (links) werden vor spezielleren Mustern (rechts)<br />

erzeugt.<br />

28<br />

add<br />

m ′ 1

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!