Developing efficient and maintainable software systems is both hard and time consuming. In particular, non-functional performance requirements involve many design and implementation decisions that can be difficult to take early during system development. Choices -- such as selection of data structures or where and how to parallelize code -- typically require extensive manual tuning that is both time consuming and error-prone. Although various auto-tuning approaches exist, they are either specialized for certain domains or require extensive code rewriting to work for different contexts in the code. In this paper, we introduce a new methodology for writing programs with holes, that is, decision variables explicitly stated in the program code that enable developers to postpone decisions during development. We introduce and evaluate two novel ideas: (i) context-sensitive holes that are expanded by the compiler into sets of decision variables for automatic tuning, and (ii) dependency-aware tuning, where static analysis reduces the search space by finding the set of decision variables that can be tuned independently of each other. We evaluate the two new concepts in a system called Miking, where we show how the general methodology can be used for automatic algorithm selection, data structure decisions, and parallelization choices.
翻译:开发高效和可维护的软件系统既困难又费时。 特别是,不起作用的性能要求涉及许多在系统开发过程中难以早期作出的设计和实施决定。选择 -- -- 例如选择数据结构或数据结构,或在哪里和如何平行代码 -- -- 通常需要大量手工调整,既费时又容易出错。虽然存在各种自动调试方法,但它们或专门用于某些领域,或需要大量代码重写,以在代码的不同背景下工作。在本文件中,我们引入了一种新的写法方法,用洞写程序,即程序代码中明确规定的决定变量,使开发者能够在开发过程中推迟决定。我们引入并评价了两种新想法:(一) 环境敏感漏洞,由编译者扩大为自动调用的决策变量集,以及(二) 依赖感应变调,静态分析通过寻找可相互独立调整的决策变量来减少搜索空间。我们评价了称为Miking的系统中的两个新概念,我们在这里展示如何使用一般方法进行自动算法选择。