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

forderlichen Werte bereits in den dafür vorgesehenen Registern befinden und somit kein<br />

separater Ladebefehl oder ähnliches erforderlich ist. Alternativ wäre es auch denkbar,<br />

den Ladebefehl mit dem der Wert einer Konstanten in ein Register geladen werden<br />

muss zu berücksichtigen. In diesem Fall ist auch für eine Konstante Rechenzeit erforderlich,<br />

weswegen ihr auch ein höherer Kostenwert als 0 zugeordnet werden könnte. Da ein<br />

solcher Ladebefehl allerdings nicht bei jeder Operation, die eine Konstante verwendet<br />

erforderlich ist, sondern das Laden einer Konstante auch implizit bei der Ausführung<br />

einer Operation erfolgen kann, wird diese Möglichkeit nicht weiter berücksichtigt. Einige<br />

Beispiele solcher Basismuster zeigt Abbildung 4.2. Entsprechend der Definition der<br />

Kostenfunktion costM für Muster ergibt sich für die Basismuster ein Kostenwert von 0.<br />

var0<br />

Kosten 0<br />

0<br />

Kosten 0<br />

1<br />

Kosten 0<br />

−1<br />

Kosten 0<br />

Abbildung 4.2: Muster ohne Operationen mit Kosten 0 (Basismuster).<br />

Im nächsten Iterationsschritt werden Muster m mit einem Kostenwert costM(m) = 1 erzeugt.<br />

Hierzu wird eine Operation mit einem oder zwei Basismustern 1 , je nachdem ob es<br />

sich um eine unäre oder binäre Operation handelt, kombiniert und so ein neues Muster<br />

erzeugt. Die Kosten des neuen Musters ergeben sich aus den Kosten der verwendeten<br />

Operation und den Kosten der involvierten Basismuster. In diesem Iterationsschritt<br />

können daher nur Operationen mit einem Kostenwert von 1 verwendet werden. Der beschriebene<br />

Vorgang wird fortgeführt, bis jede mögliche Kombination aus Operationen<br />

und Basismustern behandelt wurde, die für die aktuelle Kostenstufe zulässig ist. Der<br />

Fall, dass dasselbe Basismuster beide Operanden einer binären Operation bildet wird<br />

ebenfalls erlaubt. Dies ist für Ausdrücke wie beispielsweise x + x, also eine Addition<br />

einer Variablen x mit sich selbst nötig. Entsprechende Beispiele zu Mustern mit Kosten<br />

1 werden in Abbildung 4.3 gezeigt.<br />

var0<br />

neg<br />

Kosten 1<br />

var0<br />

add<br />

Kosten 1<br />

var0<br />

add<br />

Kosten 1<br />

var1<br />

var0 0<br />

sub<br />

Kosten 1<br />

Abbildung 4.3: Abbildung einiger Muster der Kostenstufe 1.<br />

Analog wird dieser Vorgang wiederholt und die Kostenstufe bei jeder Iteration um eins<br />

erhöht. So werden sukzessive alle möglichen Muster bis zu einer definierten Kostenobergrenze<br />

2 gebildet. Zur Veranschaulichung zeigt Abbildung 4.4 zwei Beispiele komplexerer<br />

Muster mit höherem Kostenwert.<br />

1 sofern diese von der Musteranalyse als optimal erkannt wurden<br />

2 die Kostenobergrenze ist als Parameter aufzufassen und kann für jeden <strong>Generierung</strong>svorgang variieren<br />

27

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!