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 ist, wenn anstelle einer Konstante mit demselben Wert, im linken Muster der Regel eine symbolische Konstante steht. Im Gegensatz zu Variablen gilt bei symbolischen Konstanten diese Eigenschaft nur für konkrete Konstanten, nicht aber für andere Operationen. Mit symbolischen Konstanten lässt sich also ein Muster so verallgemeinern, dass es speziellere Muster, mit konkreten anstelle von symbolischen Konstanten, überdecken kann. Für die Aufstellung von allgemeineren Regeln im Zusammenhang mit Konstanten ist dies jedoch noch nicht ausreichend. Insbesondere für die Konstantenfaltung müssen nach wie vor alle Regeln mit expliziten Konstanten aufgezählt werden: 0 + 0 → 0 1 + 0 → 1 1 + 1 → 2 . Alleine für die Addition in Z8Bit sind schon 256 2 = 65536 Regeln möglich. Vorteilhaft wäre es jedoch, wenn die Konstantenfaltung für eine Operation in einer einzigen Regel zusammengefasst werden könnte. Es stellt sich also die Frage, wie eine solche Regel aussehen kann: sc0 + sc1 →??? Die linke Seite der Regel gestaltet sich einfach. Es wird eine Operation und je nach Stelligkeit dieser Operation ein oder zwei Operanden in Form von symbolische Konstanten benötigt. Damit lässt sich das entsprechende Muster für die linke Seite der Regel aufstellen, z. B. sc0 + sc1 (siehe Abbildung 4.18). sc0 add sc1 ⇒ ??? Abbildung 4.18: Regel zu Konstantenfaltung – Rechte Seite noch unklar. Zu klären bleibt, wie die rechte Seite der Regel aussehen muss. Eine einfache symbolische Konstante, z. B. sc2 die jede beliebige Konstante repräsentieren kann ist hierfür zu allgemein. Bei Anwendung der Regel, durch beispielsweise einen Übersetzer, wäre nicht definiert wie der Wert von sc2 konkret aussehen muss. Es wird demnach eine symbolische Konstante benötigt, deren Wert in Abhängigkeit von anderen symbolischen Konstanten angegeben werden kann. Hierzu wird das Konzept der symbolischen Konstanten um komplexe symbolische Konstanten erweitert, die nicht nur einen Wert repräsentieren können, sondern denen auch eine Semantik in Form einer Berechnungsfunktion zugeordnet werden kann. Etwas formaler: 52

4 Implementierung Definition 16 (Komplexe symbolische Konstante). Als komplexe symbolische Konstante scclx werden alle symbolischen Konstanten bezeichnet, denen eine Berechnungs- funktion f : SC n → SC mit mindestens einer Operation, sowie Operanden SC n in = {sc0 in , . . . , scn in } in Form von symbolischen Konstanten zugeordnet sind. Die Kosten ei- ner komplexen Konstante betragen, analog zu symbolischen Konstanten 0. Die Forderung nach einem Kostenwert von 0 wie bei Konstanten und symbolischen Konstanten ist trotz der zugehörigen Operationen sinnvoll, da sich aus einer komplexen Konstante bei Anwendung der Regel beispielsweise in einem Übersetzer immer ein konkreter Wert in Form einer Konstante ergibt. Die Operationen, die zur komplexen Konstante gehören müssen zur Laufzeit eines Programms nicht mehr ausgeführt werden. Die Semantik einer komplexen symbolischen Konstante lässt sich in Form eines Musters f darstellen, welches der entsprechenden Berechnungsfunktion entspricht. Der Wert einer komplexen symbolischen Konstante kann dann als Ersetzungsregel aufgefasst werden, die den vom Muster f abhängigen Wert auf den Wert scclx der Konstante abbildet. Ein Beispiel einer solchen Ersetzungsregel zeigt die folgende Formel: Für den Wert gilt also: f : sc0 + sc1 ↦→ scclx0 scclx0 = sc0 + sc1 Mit Hilfe solcher komplexer symbolischer Konstanten lässt sich nun die Semantik der Konstantenfaltung für eine Operation als Ersetzungsregel in einer allgemeinen Form darstellen. Abbildung 4.19 zeigt eine solche allgemeine Regel zur Konstantenfaltung für die Addition. Die Addition der beiden symbolischen Konstanten s0 und s1 wird auf die neue symbolische Konstante scclx0 abgebildet, deren abstrakter Wert sich aus s0 + s1 ergibt. sc0 add sc1 ⇒ sc0 add scclx0 Abbildung 4.19: Durch eine komplexe Konstante kann die rechte Seite der Regel aus Abbildung 4.18 angegeben werden. In Abbildung 4.20 wird ein Muster gezeigt (linke Seite), für das mehrere Optimierungen zusammenspielen müssen, um zu einem optimalen Muster zu gelangen. Dazu sind zunächst durch eine Reassoziierung die Konstanten zusammenzufassen und anschließend sc1 53

4 Implementierung<br />

Definition 16 (Komplexe symbolische Konstante). Als komplexe symbolische Konstante<br />

scclx werden alle symbolischen Konstanten bezeichnet, denen eine Berechnungs-<br />

funktion f : SC n → SC mit mindestens einer Operation, sowie Operanden SC n in =<br />

{sc0 in , . . . , scn in } in Form von symbolischen Konstanten zugeordnet sind. Die Kosten ei-<br />

ner komplexen Konstante betragen, analog zu symbolischen Konstanten 0.<br />

Die Forderung nach einem Kostenwert von 0 wie bei Konstanten und symbolischen Konstanten<br />

ist trotz der zugehörigen Operationen sinnvoll, da sich aus einer komplexen Konstante<br />

bei Anwendung der Regel beispielsweise in einem Übersetzer immer ein konkreter<br />

Wert in Form einer Konstante ergibt. Die Operationen, die zur komplexen Konstante<br />

gehören müssen zur Laufzeit eines Programms nicht mehr ausgeführt werden.<br />

Die Semantik einer komplexen symbolischen Konstante lässt sich in Form eines Musters f<br />

darstellen, welches der entsprechenden Berechnungsfunktion entspricht. Der Wert einer<br />

komplexen symbolischen Konstante kann dann als Ersetzungsregel aufgefasst werden,<br />

die den vom Muster f abhängigen Wert auf den Wert scclx der Konstante abbildet. Ein<br />

Beispiel einer solchen Ersetzungsregel zeigt die folgende Formel:<br />

Für den Wert gilt also:<br />

f : sc0 + sc1 ↦→ scclx0<br />

scclx0 = sc0 + sc1<br />

Mit Hilfe solcher komplexer symbolischer Konstanten lässt sich nun die Semantik der<br />

Konstantenfaltung für eine Operation als Ersetzungsregel in einer allgemeinen Form<br />

darstellen. Abbildung 4.19 zeigt eine solche allgemeine Regel zur Konstantenfaltung für<br />

die Addition. Die Addition der beiden symbolischen Konstanten s0 und s1 wird auf die<br />

neue symbolische Konstante scclx0 abgebildet, deren abstrakter Wert sich aus s0 + s1<br />

ergibt.<br />

sc0<br />

add<br />

sc1<br />

⇒<br />

sc0<br />

add<br />

scclx0<br />

Abbildung 4.19: Durch eine komplexe Konstante kann die rechte Seite der Regel aus<br />

Abbildung 4.18 angegeben werden.<br />

In Abbildung 4.20 wird ein Muster gezeigt (linke Seite), für das mehrere <strong>Optimierungen</strong><br />

zusammenspielen müssen, um zu einem optimalen Muster zu gelangen. Dazu sind<br />

zunächst durch eine Reassoziierung die Konstanten zusammenzufassen und anschließend<br />

sc1<br />

53

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!