Scaling Program Synthesis by Exploiting Existing Code
Scaling Program Synthesis by Exploiting Existing Code
复制标题
通过利用现有代码扩展程序综合
DOI:
--
复制
发表时间:
2015
期刊:
影响因子:
--
通讯作者:
James Bornholt
中科院分区:
文献类型:
--
作者:
James Bornholt
Program synthesis automatically produces a program that meets a desired behavioral specification. While synthesis has seen success in a number of domains, interesting applications such as approximate computing and hardware synthesis require more scalability than existing approaches provide. The current approach in synthesis is to achieve scalability by decomposing the problem manually. Inspired by recent success in statistical language models, we propose instead exploiting existing code, using machine learning to guide the synthesis search and automatically decompose the problem. 1. The Need for Scalable Synthesis Program synthesis is the task of automatically producing a program that meets a desired correctness specification. Search-based synthesis [1, 5, 7, 12, 14, 15] searches for a correct program in a space of candidate implementations. Existing synthesis techniques include brute-force enumeration of the candidate space using dynamic programming [15]; random search with heuristics to explore more fruitful candidates [12]; or formulating the synthesis problem in a logic for an SMT solver to consume [5]. All of these techniques have advantages on particular classes of problems [1], and searchbased synthesis has seen success as a programming model in a variety of domains, including low-power spatial computing [9], bulk-synchronous distributed programming [16], and cache coherence protocols [15]. But many promising future applications of synthesis are impeded by the limited scalability of existing techniques: • Automated synthesis of symbolic execution engines [4] improves the reliability and reach of those tools, but existing work requires significant manual intervention to make the search tractable. • Our own recent work1 on applying synthesis to approximate computing [2] focused on approximations of small, manually identified kernels, because the synthesizer could not reason about the entire program. • Program synthesis could be used to automatically generate hardware implementations from programs. High-level synthesis tools [8] address this problem, but they make 1 Currently under submission. mov