Date post: | 06-Apr-2015 |
Category: |
Documents |
Upload: | mette-ratke |
View: | 106 times |
Download: | 0 times |
Efficient Alias Set Analysis Using SSA Form
Proseminar ProgrammanalyseWS 11/12
André Hunke
2Efficient Alias Set Analysis Using SSA Form
• Ziele• Alias Sets• SSA Form• Verwendete Datenstruktur• Benchmark-Ergebnisse
16.12.2011
Übersicht
3Efficient Alias Set Analysis Using SSA Form
• Alias Sets werden vom Compiler genutzt• Effiziente Alias Set Analyse– nur intra-prozedual– hierfür: Nutzung der SSA-Form
• Nutzung einer geeigneten Datenstruktur
16.12.2011
Ziele
4Efficient Alias Set Analysis Using SSA Form
• Menge der lokalen Pointer-Variablen, die auf ein gemeinsames Objekt zeigen
• Zu einem gegebenen konkreten Objekt o: o# = { p | p zeigt auf o}
• Jedes alias set repräsentiert höchstens ein Objekt• ρ#: Menge aller alias sets• falls für Variablen x, y: {x,y} o⊆ #, so ist x ein Alias von y• Sichere Entscheidung, falls x und y immer gemeinsam
in einem o#, oder nie gemeinsam in einem o#
16.12.2011
Alias Sets
5Efficient Alias Set Analysis Using SSA Form
• betrachten Zuweisungen s der Forms ::= v1 ← v2 | v ← e | e ← v | v ← null | v ← new
wobeiv, v1, v2 lokale Variablen sind und e eine Position auf
dem Heap repräsentiert• Heap wird als Black-Box behandelt
16.12.2011
Alias Sets
6Efficient Alias Set Analysis Using SSA Form
• Bei Unsicherheit, ob ein alias set eine Variable enthält, wird es aufgeteilt
16.12.2011
Alias Sets - Übergangsfunktion
7Efficient Alias Set Analysis Using SSA Form
class Node {int value;Node next;
Node (int v, Node n) {value = v;next = n;
}
}16.12.2011
Alias Sets - Beispiel
8Efficient Alias Set Analysis Using SSA Form
…void foo(int i) {
Node a, b, c;a = new Node(i, null);c = a;if (i < 42)
b = new Node(42+i, a);else
b = a;c = b;b = b.next;
}…
16.12.2011
Alias Sets - Beispiel
a = new Node(i, null);
b = new Node(42+i,a);
c = b;
b = a;
b = b.next;
Kontrollflussgraph
c = a;
9Efficient Alias Set Analysis Using SSA Form16.12.2011
Alias Sets – Beispiel
ρ# = {{a}}
ρ# = {{a,c},{b}} ρ# = {{a,b,c}}
ρ# = {{a}, {a,b}, {c}, {b,c}, {a,c}, {a,b,c}}
a = new Node(i, null);
b = new Node(42+i,a);
c = b;
b = a;
b = b.next;
c = a;
ρ# = {{a,c}}
ρ# = {{a}, {b,c}, {a,b,c}}
10Efficient Alias Set Analysis Using SSA Form
• SSA = Single Static Assignment• pro Variable höchstens eine Zuweisung– Jede Zuweisung erzeugt eine neue Variable
• Transformation in SSA form
16.12.2011
SSA Form
11Efficient Alias Set Analysis Using SSA Form16.12.2011
SSA Form - Beispiel
Lösung?
a = new Node(i, null);
b = new Node(42+i,a);
c = b;
b = a;
b = b.next;
c = a;
a1 = new Node(i, null);
b1 = new Node(42+i,a1);
c2 = b?;
b2 = a1;
b? = b?.next;
c1 = a1;
12Efficient Alias Set Analysis Using SSA Form
• Problem: Zuweisungen mit mehr als einer reaching definition
• Lösung: „φ-Funktion“ einfügen– wählt den Wert des tatsächlich genommenen
Kontrollflusses– Zuweisung dann an eine neue Variable
• Hier: φ-Funktion an jedem Merge-Knoten 16.12.2011
SSA Form
13Efficient Alias Set Analysis Using SSA Form16.12.2011
SSA Form - Beispiel
a = new Node(i, null);
b = new Node(42+i,a);
c = b;
b = a;
b = b.next;
c = a;
a1 = new Node(i, null);
b1 = new Node(42+i,a1);
b3 = φ(b1,b2)c2 = b3;
b2 = a1;
b4 = b3.next;
c1 = a1;
14Efficient Alias Set Analysis Using SSA Form
• Erweiterung der Übergangsfunktion für Knoten mit φ-Funktion nötig
• Strategie:– für jede Eingehende Kante p:– aktualisiere die Alias-Sets entsprechend der
Auswahl der φ-Funktion für p
16.12.2011
Alias Sets & SSA Form
15Efficient Alias Set Analysis Using SSA Form16.12.2011
Alias Sets & SSA Form
a1 = new Node(i, null);
b1 = new Node(42+i,a1);
b3 = φ(b1,b2)c2 = b3;
b2 = a1;
b4 = b3.next;
c1 = a1;
ρ# = {{a1}}
ρ# ={{a1,c1}}
ρ# = {{a1,c1},{b1}} ρ# = {{a1,c1,b2}}
ρ# = {{a1,c1}, {b1,b3,c2}} {{a1,c1,b2,b3,c2}}∪
ρ# = {{a1,c1}, {a1,c1,b4}, {b1,b3,c2}, {b1,b3,c2,b4},{a1,c1,b2,b3,c2}, {a1,c1,b2,b3,c2,b4}}
16Efficient Alias Set Analysis Using SSA Form
• Beobachtung: Für nicht φ-Knoten ist die Mengendifferenz in der Übergangsfunktion überflüssig
• Weitere Analyse für φ-Knoten nötig
16.12.2011
Alias Sets & SSA Form
17Efficient Alias Set Analysis Using SSA Form
• es können lineare Listen verwendet werden• eine Liste repräsentiert ein alias set• neues Element hinzufügen: neuer Listenkopf
– Restliste bleibt unverändert• Element entfernen: nicht nötig!Þ gemeinsame Nutzung von Restlisten möglich
16.12.2011
Datenstruktur
ec dba
gf
drei alias sets: {d,e}, {a,b,c,d,e},{d,e,f,g}
Beachte: Für φ-Knoten gibt es eine andere Übergangsfunktion, d.h. es ist eine andere Listenoperation nötig
18Efficient Alias Set Analysis Using SSA Form16.12.2011
Alias Set-Analyse mit Listen
a1 = new Node(i, null);
b1 = new Node(42+i,a1);
b3 = φ(b1,b2)c2 = b3;
b2 = a1;
b4 = b3.next;
c1 = a1;a1
a1
a1b2
c1
c1
a1c1
b1
a1b2 c1b3c2
b1b3c2
a1b2 c1b3c2
b1b3c2b4
b4
b4
19Efficient Alias Set Analysis Using SSA Form
Laufzeit:
• Im Schnitt etwa doppelt so schnell
16.12.2011
Benchmark-Ergebnisse
20Efficient Alias Set Analysis Using SSA Form
Speicherverbrauch (nur Alias-Analyse):
• Im Schnitt etwa 45% weniger Speicher• etwa 7% zusätzlicher Speicherverbrauch für SSA-Form16.12.2011
Benchmark-Ergebnisse
21Efficient Alias Set Analysis Using SSA Form16.12.2011
Vielen Dank für die Aufmerksamkeit
Noch Fragen?