Scaling Program Synthesis by Exploiting Existing Code

Scaling Program Synthesis by Exploiting Existing Code
复制标题

通过利用现有代码扩展程序综合

DOI:
--
复制
发表时间:
2015
期刊:
影响因子:
--
通讯作者:
James Bornholt
James Bornholt
中科院分区:
--
文献类型:
--
作者:
James Bornholt

文献摘要

被引文献

相似文献

程序合成会自动产生一个符合所需的行为规范的程序,而综合已经在许多域中获得了成功,诸如近似计算和硬件合成之类的有趣应用程序比现有方法提供了更多的可扩展性。通过手动分解该问题,这是受统计语言模型最近成功的启发代码,使用机器学习来指导综合搜索并自动分解问题1。 ,12、14、15]在现有的合成技术中搜索正确的程序。编程[15];探索更富有成果的候选者[12]或在逻辑中提出综合问题,以使SMT求解器消费[5] ,基于搜索的合成已成为多种域​​中的编程模型,包括低功率空间计算[9],批量同步分布式编程[16]和Cache Cooherence协议[15]。但是,现有技术的有限可扩展性阻碍了许多合成的未来应用:•符号执行引擎的自动综合[4]提高了这些工具的可靠性和覆盖范围,但是现有的工作需要大量的手动干预才能使搜索搜索。我们自己的最新工作1将合成用于近似计算[2]的工作[2]集中在小型,手动识别的内核上,因为合成器无法理解关于整个程序•程序合成可以自动从程序中生成硬件实现[8]
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