Graphbasierte Zwischenrepräsentationen von Compilern wie libFirm bieten
die Möglichkeit, Aliasinformationen direkt im Graph zu kodieren. Dazu wird
die üblicherweise totale Ordnung von Seiteneffekten wie Speicherzugriffen
zu einer Halbordnung relaxiert. Antiketten in dieser Halbordnung
entsprechen genau Seiteneffekten, die sich gegenseitig nicht beeinflussen,
so dass beispielsweise die Befehlsanordnung größere Freiräume hat.
Insbesondere Speicherzugriffe beeinflussen sich gegenseitig nicht, wenn die
zugegriffenen Adressen in keiner Aliasrelation zueinander stehen. Der
libFirm-Pass parallelize-mem legt Antiketten auf dieser Grundlage
in unterschiedlichen Speicherpartitionen ab.
Bisher findet diese Speicherpartitionierung erst kurz vor der
Befehlsauswahl statt. Damit frühere Optimierungspässe von der reicheren
Graphstruktur profitieren können, wäre es aber denkbar, die Paritionierung
schon früher vorzunehmen.
Ziel dieser Arbeit ist es, parallelize-mem so früh wie möglich in
der Optimierungs-Pipeline auszuführen und den Aufbau auf Synergieeffekte
hin zu untersuchen. Dabei werden Inkompatibilitäten und Fehlverhalten in
verschiedenen Pässen zutage treten, die in geeigneter Weise behandelt
werden müssen. Da Aliasinformation in früheren Pässen bereits als externes
Analyseresultat verfügbar ist, gilt es, den Nutzen dieser Änderung
abzuschätzen.
Aufgabe:
- Ein frühzeitiger Pass von parallelize-mem
- Auftretende Probleme behandeln
- Den Nutzen abzuschätzen
Voraussetzungen
- Programmierkenntnisse in C
- Interesse am Compilerbau und Optimierungen
- Erfahrung in libFirm vorteilhaft
Schlüsselworte
Compiler, libFirm, Optimierung
Veröffentlichungen
Betreuer
Studenten
PDF:
pdf