25.10.2012 Aufrufe

Generierung lokaler Optimierungen - IPD Snelting

Generierung lokaler Optimierungen - IPD Snelting

Generierung lokaler Optimierungen - IPD Snelting

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

4 Implementierung<br />

Muster (auch optimale) (Zeile 2–4). Die Funktion CreateNextPattern (Zeile 6 und<br />

29) erzeugt, wie in Abschnitt 4.2.2 beschrieben, das jeweilige nächste Muster, basierend<br />

auf der Menge der bisher erzeugten Muster MErz. Dies wird solange fortgeführt bis die<br />

in limit festgelegte Kostenobergrenze überschritten wird (Zeile 7). In Zeile 8–29 erfolgt<br />

die Musteranalyse. Zunächst wird durch die Funktion RuleApplicableTest geprüft,<br />

ob eine der bisher ermittelten Regeln auf das neu erzeugte Muster m anwendbar ist (siehe<br />

Abschnitt 4.3.1). Als nächstes folgt die Suche nach einem semantisch äquivalenten<br />

Muster. Hierbei werden alle Muster p berücksichtigt, die eine Permutation der Variablen<br />

von m darstellen. Die Funktion CreateNextPermutation erzeugt dazu jeweils die<br />

nächste Permutation von m. Für jedes dieser Muster p folgt zunächst die Analyse durch<br />

den Vorabtest, der aus der Menge der optimalen Muster MOpt eine Kandidatenmenge<br />

MCand bestimmt, wie in Abschnitt 4.3.2 erläutert. Diese besteht aufgrund der Verwendung<br />

von Zeugen aus nur einem Muster mcand. Anschließend wird dieses Muster durch<br />

den Erfüllbarkeitstest auf seine semantische Äquivalenz zu m untersucht. Ist mcand semantisch<br />

äquivalent zu m, so wird eine neue Regel erzeugt (Zeile 16–17) und mit dem<br />

nächsten Muster m fortgefahren. Existiert kein semantisch äquivalentes Muster, handelt<br />

es sich bei m um ein optimales Muster und m wird zur Liste MOpt hinzugefügt (Zeile<br />

24).<br />

4.4.2 Beispiel<br />

Für das Beispiel wird eine stark vereinfachte Zwischensprache betrachtet, die lediglich<br />

eine Addition als Operation kennt, Variablen mit einer Datentypbreite von einem Bit<br />

und die beiden Konstanten 0 und 1.<br />

Zunächst werden nacheinander die in Abbildung 4.16 gezeigten Basismuster mit Kosten<br />

0 für eine Variable var0, die Konstante 0 und die Konstante 1 erzeugt. Bisher existieren<br />

noch keine Regeln, also wird auch kein Muster verworfen. Wie man leicht erkennen kann,<br />

ist zudem keines der Muster semantisch äquivalent zu einem anderen, weswegen es auch<br />

keine neue Regel gibt.<br />

var0<br />

(a)<br />

0<br />

(b)<br />

Abbildung 4.16: Abbildung aller Basismuster (Operationen: add, Datentypbreite: 1 Bit).<br />

Im nächsten Iterationsschritt werden die Muster mit Kosten 1 aus den Basismustern<br />

und einer Operation, der Addition gebildet. Abbildung 4.17 zeigt diese Muster, sowie<br />

die daraus resultierenden Aktionen.<br />

Für das erste Muster der Kostenstufe 1, das Muster (d), welches aus der Addition und<br />

dem Basismuster (a) gebildet wurde, existiert mit dem Muster (b) aus Abbildung 4.16 ein<br />

48<br />

1<br />

(c)

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!