Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
Generierung lokaler Optimierungen - IPD Snelting
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)