Thu 8 Nov 2018 16:15 - 16:37 at Studio 2 - Potpourri Chair(s): Anders Møller

Solver-aided tools rely on symbolic evaluation to reduce programming tasks, such as verification and synthesis, to satisfiability queries. Many reusable symbolic evaluation engines are now available as part of solver-aided languages and frameworks, which have made it possible for a broad population of programmers to create and apply solver-aided tools to new domains. But to achieve results for real-world problems, programmers still need to write code that makes effective use of the underlying engine, and understand where their code needs careful design to elicit the best performance. This task is made difficult by the all-paths execution model of symbolic evaluators, which defies both human intuition and standard profiling techniques.

This paper presents symbolic profiling, a new approach to identifying and diagnosing performance bottlenecks in programs under symbolic evaluation. To help with diagnosis, we develop a catalog of common performance anti-patterns in solver-aided code. To locate these bottlenecks, we develop SymPro, a new profiling technique for symbolic evaluation. SymPro identifies bottlenecks by analyzing two implicit resources at the core of every symbolic evaluation engine: the symbolic heap and symbolic evaluation graph. These resources form a novel performance model of symbolic evaluation that is general (encompassing all forms of symbolic evaluation), explainable (providing programmers with a conceptual framework for understanding symbolic evaluation), and actionable (enabling precise localization of bottlenecks). Performant solver-aided code carefully manages the shape of these implicit structures; SymPro makes their evolution explicit to the programmer.

To evaluate SymPro, we implement prototype profilers for the Rosette solver-aided language and the Jalangi program analysis framework. Applying SymPro to 15 published solver-aided tools, we discover 8 previously undiagnosed performance issues. Repairing these issues improves performance by orders of magnitude, and our patches were accepted by the tools’ developers. We also conduct a small user study with Rosette programmers, finding that SymPro helps them both understand what the symbolic evaluator is doing and identify performance issues they could not otherwise locate.

Thu 8 Nov

splash-2018-OOPSLA
15:30 - 17:00: OOPSLA - Potpourri at Studio 2
Chair(s): Anders MøllerAarhus University
splash-2018-OOPSLA15:30 - 15:52
Talk
Michael PradelTU Darmstadt, Koushik SenUniversity of California, Berkeley
splash-2018-OOPSLA15:52 - 16:15
Talk
Dan Barowy, Emery BergerUniversity of Massachusetts, Amherst, Benjamin ZornMicrosoft Research
splash-2018-OOPSLA16:15 - 16:37
Talk
James BornholtUniversity of Washington, Emina TorlakUniversity of Washington
splash-2018-OOPSLA16:37 - 17:00
Talk
Saswat PadhiUniversity of California, Los Angeles, Prateek JainMicrosoft Research Lab, India, Daniel PerelmanUniversity of Washington, USA, Alex PolozovMicrosoft Research, Sumit GulwaniMicrosoft Research, Todd MillsteinUniversity of California, Los Angeles