elixir
play

Elixir A System for Synthesizing Concurrent Graph Programs - PowerPoint PPT Presentation

Elixir A System for Synthesizing Concurrent Graph Programs Prountzos D., Manevich R. & Pingali K. Christopher Little Motivation Best solution to problems depends on: - Data - Machine Architecture - Intra-algorithm tuning -


  1. Elixir A System for Synthesizing Concurrent Graph Programs Prountzos D., Manevich R. & Pingali K. Christopher Little

  2. Motivation Best solution to problems depends on: - Data - Machine Architecture - Intra-algorithm tuning - … Dream: let the compiler worry about it all

  3. Running Example: SSSP (Single-Source Shortest Path) Dijkstra Bellman-Ford

  4. Graph Algorithm Operators Schedule Order Activity Identify New Processing Activities Static Dynamic Schedule Schedule

  5. SSSP Elixir Specification Graph [ nodes( node : Node, dist : int) Graph Type Definition edges( src : Node, dest : Node, wt : int) ] relax = [ nodes( node a, dist ad) nodes( node b, dist bd) Operator Definition edges( src a, dest b, wt w) bd > ad + w ] -> [bd = ad + w] Fixpoint Statement sssp = iterate relax >> schedule

  6. SSSP Elixir Specification Graph [ nodes( node : Node, dist : int) edges( src : Node, dest : Node, wt : int) ] relax = [ nodes( node a, dist ad) Redex Pattern nodes( node b, dist bd) edges( src a, dest b, wt w) Guard bd > ad + w ] -> [bd = ad + w] Update sssp = iterate relax >> schedule

  7. SSSP Elixir Specification d a d b Graph [ nodes( node : Node, dist : int) w edges( src : Node, dest : Node, wt : int) a b ] relax = [ nodes( node a, dist da) Redex Pattern If d b > d a + w nodes( node b, dist db) edges( src a, dest b, wt w) Guard db > da + w ] -> [db = da + w] Update d a d a + w sssp = iterate relax >> schedule w a b

  8. Scheduling Parallel - Metric C++ - Group Galois Program - Fuse - Unroll - Ordered/unordered

  9. Graph Algorithm Operators Schedule Order Activity Identify New Processing Activities Static Dynamic Schedule Schedule

  10. c c a a a b b b c c a a a b b b

  11. assume ( da + w < db ) c assume !( dc + w’ < db ) w’ new_db = da + w a b assert !( dc + w’ < new_db ) w SMT Solver ✅

  12. assume ( da + w < db ) c assume !( db + w’ < dc ) w’ new_db = da + w w a b assert !( new_db + w’ < dc ) SMT Solver ❌

  13. Evaluation

  14. Experiments Explored Dimensions group Statically group multiple instances unroll k Statically unroll operator applications dynamic scheduler different worklist policy/implementation ...

  15. Complexity

  16. Conclusion - Elixir can beat hand-written implementations - “High-level” specification could be simpler - Not very accessible paper (unhelpful formalisms) - Dynamic graphs unsupported - Is auto-tuning integrated yet?

Recommend


More recommend