Document Sample

Register Allocation via Coloring of Chordal Graphs Fernando M Q Pereira Jens Palsberg UCLA 95% of the interference graphs produced from Java Methods by the JoeQ compiler are Chordal. • Java 1.5 library: 95.5% (23,681 methods). • Public ML graphs: 94.1% (27,921 IG’s). – Not considering pre-colored registers. • But, what is a chordal graph? Why is this good news? • Many problems that are NP-complete for general graphs are linear time for chordal graphs. Ex. graph coloring. • Simpler register allocation algorithms, but still competitive! Register Allocation is Complicated… • Iterated Register Coalescing [George and Appel 96] build simplify actual spill select coalesce freeze potential spill The Proposed Algorithm. SEO pre-spilling phase coloring phase coalescing phase • • • • Simple Modular Efficient Works with non-chordal interference graphs. Some terminology: – Induced subgraphs: H = G[VH] A C D E D B A C B – Induced cycles: H is a cycle. A C D A C E B B A D B E – Clique: H is a complete graph. A C D E D Chordal Graphs. • A graph G is chordal iff the size of the largest induced cycle is 3 (it is a triangle). • non-chordal: Chordal: A B A B D E D E Why are Interference graphs Chordal? • Chordal graphs are the intersection graphs of subtrees of a tree: E B D C F A But CFG’s are not trees… int m(int a, int d) { int b, c; if(a > 0) { b = 1; c = a; } else { c = 2; b = d; } return b + c; } } a b d c Interference graphs of programs in SSA form are chordal. • Independently proved by Brisk[2005], Hack[2005], Bouchez[2005]. • Intuition: – The chordal graphs are the intersection graphs of subtrees of a tree. – Live ranges in SSA are subtrees of the dominance tree. Why only 95% of chordal graphs? • Executable code is not in SSA form. • SSA elimination. – Phi-functions are abstract constructions. – In executable code, phi functions are replaced by copy instructions. • We call programs after SSA elimination PostSSA programs. • Some Post-SSA programs are non-chordal :( The Proposed Algorithm. The pre-spilling version: SEO pre-spilling phase coloring phase coalescing phase The post-spilling version: SEO coloring phase post-spilling phase coalescing phase The Example. Two registers available for allocation: R1 and R2 R1 R2 1 2 3 4 5 6 7 8 int B = R1; int A = R2; int F = 1; int E = A + F; int D = 0; int C = D; R2 = C + E; R1 = B; A B C F E D The Simplicial Elimination Ordering. SEO Simplicial Elimination Ordering (SEO) pre-spilling phase coloring phase coalescing phase Simplicial Elimination Ordering R1 A F R2 B E C D Simplicial Elimination Ordering (SEO) Neighbors of N that precede N constitute a clique: S1 = (A, F, B, E, D, C, R2, R1) are SEO’s S2 = (R2, B, E, F, A, D, C, R1) But S3 = (R2, R1, D, F, E, C, A, B) is not a SEO. Why? } A third definition of chordal graph. • A graph G = (V, E) is chordal if, and only if, it has a simplicial elimination ordering [Dirac 61]. • There exist O(|V| + |E|) algorithms to find a simplicial elimination ordering: – Maximum Cardinality Search, – Lexicographical Breadth First Search. Simplicial Elimination Ordering (SEO) The Pre-Spilling Phase. The pre-spilling phase pre-spilling phase coloring phase coalescing phase SEO The Pre-Spilling Phase • Chromatic number = size of largest clique. 1 - List all the maximal cliques in the graph. 2 - Remove nodes until all maximal cliques have K or less nodes. 2.1 - Which registers to remove? – For each register r: • n = number of big cliques that contain r. • f = frequency of use. • s = size of r’s live range. The pre-spilling phase – Spill factor = n * s / f Only look into cliques greater than K = 2. R1 A R2 B C The pre-spilling phase F S1 = ( A, F, A B, A F E, B F E D, B E C, B D R2, R1 ) B R2 Node B is present in most of the cliques, and must be removed. Resulting graph: R1 A R2 C The pre-spilling phase F S1 = ( A, F, A E, F E D, E C, B D R2, R1 ) B R2 Node B is present in most of the cliques, and must be removed. The Coloring Phase. The coloring phase pre-spilling phase coloring phase coalescing phase SEO Coloring Chordal Graphs. • Feed the greedy coloring with a simplicial elimination ordering. C The coloring phase R1 R2 A F E D S1 = ( A, F, E, D, C, R2, R1 ) Coloring Chordal Graphs. The coloring phase C R1 R2 A F E D S1 = ( A, F, E, D, C, R2, R1 ) Coloring Chordal Graphs. The coloring phase C R1 R2 A F E D S1 = ( A, F, E, D, C, R2, R1 ) Coloring Chordal Graphs. The coloring phase C R1 R2 A F E D S1 = ( A, F, E, D, C, R2, R1 ) Coloring Chordal Graphs. The coloring phase C R1 R2 A F E D S1 = ( A, F, E, D, C, R2, R1 ) Coloring Chordal Graphs. The coloring phase C R1 R2 A F E D S1 = ( A, F, E, D, C, R2, R1 ) Coloring Chordal Graphs. The coloring phase C R1 R2 A F E D S1 = ( A, F, E, D, C, R2, R1 ) Register Coalescing. The coalescing phase SEO pre-spilling phase coloring phase coalescing phase Register Coalescing • Greedy coalescing after register allocation. – Why not before graph coloring? Algorithm: Register Coalescing Input: (G, color(G)) Output: (G, color’(G)) begin for every non-interfering move instruction (x := y) do let color(x) = color(y) = unused color(N(x) U N(y)); end The coalescing phase Register Coalescing The coalescing phase R2 R1 D A F E C Register Coalescing The coalescing phase R2 R1 D A F E C The Post-Spilling Phase. The Post-Spilling Phase SEO coloring phase post-spilling phase coalescing phase • Remove nodes assigned same color. E.g: – Remove least used color. – Remove greatest color. • Faster implementation, but generates worse code. What about a Non-Chordal Graph? • Coloring is no longer optimal. • The number of colors will be between the optimal, and twice the optimal for almost every possible graph [Bollobas 1988]. Benchmark • The Java 1.5 standard libraries. – 23,681 methods. • Algorithms implemented in the JoeQ framework. • Two test cases: – Code without any transformation: 90% chordal. – Programs in Post-SSA form: 95% chordal. Non-transformed Programs Chordal coloring Chordal coloring 16 registers 18 registers # registers / method # spills / method IRC 18 registers 4.13 4.20 4.25 0.0055 131 17 0.29 0.0044 105 15 0.34 0.0050 115 16 0.31 Total # spill Maximum # spill Coalescing / moves Post-SSA Programs Chordal coloring Chordal coloring 16 registers 18 registers # registers / method # spills / method IRC 18 registers 4.12 4.13 4.17 0.0053 125 16 0.68 0.0040 94 17 0.72 0.0049 118 27 0.70 Total # spill Maximum # spill Coalescing / moves Registers per Method - Post-SSA Program 6000 5000 Number of methods 4000 3000 2000 1000 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Number of registers MCS Iterated Coalescing Methods in Java 1.5 • • • • 23,681 methods; 22,544 chordal methods. 85% methods could be colored with 6 regs. 99.8% could be colored with 16 regs. 28 methods demanded more than 16 regs. Time and Complexity: G = (V, E) • • • • SEO: O(|V| + |E|); Pre-spilling: O(|V| + |E|); Coloring: O(|E|); Coalescing: O(|V|3); coalescing coloring spilling Related Work. • All the 27,921 public ML interference graphs are 1-perfect [Andersson 2003]. – Structured programs have 1-perfect IG? • Polynomial register allocation [Brisk 2005], [Hack 2005]. – SSA-Interference graphs are chordal. Conclusions • Many interference graphs of structured programs are chordal; • New algorithm: – Modular; – Efficient; – Competitive; • We have an extended version of the algorithm implemented on top of GCC: – http://compilers.cs.ucla.edu/fernando/projects/ Are Java Interference Graphs 1-Perfect? • 1-Perfect graph: minimum coloring equals largest clique. – It is different of perfect graphs. • All the 27,921 IG of the ML compiler compiling itself are 1-perfect [Andersson, 2003]. – Not considering pre-colored registers: 94.5% of chordal graphs. SSA and Post-SSA Graphs. • SSA interference graphs: – Chordal – Perfect – 1-Perfect • Post SSA graphs: – If phi functions are replaced by copy instructions, than register allocation is NPcomplete. Non-1-Perfect Example int m(it a, int d) { int e, c; if(in() > 0) { e = 0; c = d; } else { b = 0; c = a; e = b; } return c + e; } d a b e c The Post SSA Interference Graph. x b = 0; c1 = d; e1 = b; d e2 c2 e c a b c1 e1 e2 = 0; c2 = d; e = e2; c = c2; c = c1; e = e1; return c + e; References • [Andersson 2003] Christian Andersson, Register Allocation by Optimal Graph Coloring, 12th Conference on Compiler Construction • [Brisk 2005] Philip Brisk and Foad Dabiri and Jamie Macbeth and Majid Sarrafzadeh, Polynomial-Time Graph Coloring Register Allocation, 14th International Workshop on Logic and Synthesis • [Hack 2005] Sebastian Hack and Daniel Grund and Gerhard Goos, Towards Register Allocation for Programs in SSA-form.

DOCUMENT INFO

Shared By:

Categories:

Tags:

Stats:

views: | 50 |

posted: | 9/16/2009 |

language: | English |

pages: | 47 |

Docstoc is the premier online destination to start and grow small businesses. It hosts the best quality and widest selection of professional documents (over 20 million) and resources including expert videos, articles and productivity tools to make every small business better.

Search or Browse for any specific document or resource you need for your business. Or explore our curated resources for Starting a Business, Growing a Business or for Professional Development.

Feel free to Contact Us with any questions you might have.