Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke.

Ähnliche Präsentationen


Präsentation zum Thema: "Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke."—  Präsentation transkript:

1 Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke

2 Ziele Alias Sets SSA Form Verwendete Datenstruktur Benchmark-Ergebnisse 16.12.20112Efficient Alias Set Analysis Using SSA Form Übersicht

3 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.20113Efficient Alias Set Analysis Using SSA Form Ziele

4 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.20114Efficient Alias Set Analysis Using SSA Form Alias Sets

5 betrachten Zuweisungen s der Form s ::= v 1 v 2 | v e | e v | v null | v new wobei v, v 1, v 2 lokale Variablen sind und e eine Position auf dem Heap repräsentiert Heap wird als Black-Box behandelt 16.12.20115Efficient Alias Set Analysis Using SSA Form Alias Sets

6 Bei Unsicherheit, ob ein alias set eine Variable enthält, wird es aufgeteilt 16.12.20116Efficient Alias Set Analysis Using SSA Form Alias Sets - Übergangsfunktion

7 class Node { int value; Node next; Node (int v, Node n) { value = v; next = n; } 16.12.20117Efficient Alias Set Analysis Using SSA Form Alias Sets - Beispiel

8 … 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.20118Efficient Alias Set Analysis Using SSA Form Alias Sets - Beispiel a = new Node(i, null); b = new Node(42+i,a); c = b; b = a; b = b.next; Kontrollflussgraph c = a;

9 16.12.20119Efficient Alias Set Analysis Using SSA Form 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}}

10 SSA = Single Static Assignment pro Variable höchstens eine Zuweisung – Jede Zuweisung erzeugt eine neue Variable Transformation in SSA form 16.12.201110Efficient Alias Set Analysis Using SSA Form SSA Form

11 16.12.201111Efficient Alias Set Analysis Using SSA Form 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;

12 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.201112Efficient Alias Set Analysis Using SSA Form SSA Form

13 16.12.201113Efficient Alias Set Analysis Using SSA Form 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;

14 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.201114Efficient Alias Set Analysis Using SSA Form Alias Sets & SSA Form

15 16.12.201115Efficient Alias Set Analysis Using SSA Form 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}}

16 Beobachtung: Für nicht φ-Knoten ist die Mengendifferenz in der Übergangsfunktion überflüssig Weitere Analyse für φ-Knoten nötig 16.12.201116Efficient Alias Set Analysis Using SSA Form Alias Sets & SSA Form

17 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.201117Efficient Alias Set Analysis Using SSA Form Datenstruktur ecdba 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

18 16.12.201118Efficient Alias Set Analysis Using SSA Form 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 b2 c1 a1c1 b1 a1b2c1b3c2 b1b3c2 a1b2c1b3c2 b1b3c2 b4

19 Laufzeit: Im Schnitt etwa doppelt so schnell 16.12.201119Efficient Alias Set Analysis Using SSA Form Benchmark-Ergebnisse

20 Speicherverbrauch (nur Alias-Analyse): Im Schnitt etwa 45% weniger Speicher etwa 7% zusätzlicher Speicherverbrauch für SSA-Form 16.12.201120Efficient Alias Set Analysis Using SSA Form Benchmark-Ergebnisse

21 16.12.201121Efficient Alias Set Analysis Using SSA Form Vielen Dank für die Aufmerksamkeit Noch Fragen?


Herunterladen ppt "Efficient Alias Set Analysis Using SSA Form Proseminar Programmanalyse WS 11/12 André Hunke."

Ähnliche Präsentationen


Google-Anzeigen