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