程序最小化


10

电路最小化是最小化给定电路尺寸的问题。一般程序有什么类似的东西吗?

我的问题尤其是-

是否存在用于最小化给定程序的指令数量的算法。我知道这是一个无法确定的问题,但我不是在寻找能够返回最佳结果的解决方案。

虽然可以应用现有的编译器转换来完成此操作,但我正在寻找不需要定义一组非常狭窄的转换和算法来预先搜索它们的东西。

编辑:我还有另一个问题是,是否可以进行一个合理而完整的演算,以使我们能够探索这种语义上等效的程序的整个空间,或者这是不可能的。


2
您对其他问题的答案取决于您对“演算”的定义。 HALT不在CORE中的事实使大多数此类定义的答案为“否”。

这两个领域是相关的,另一种方法是将程序转换为不同输入大小Fñ
vzn

Answers:


10

对于具有有限大小输入的程序,有一种幼稚的算法:按长度增加(或执行时间,即长度的有界函数)的顺序枚举所有程序。如果可以证明该程序与原始程序等效,请停止;否则,请停止。否则继续搜索。

该算法是合理的。为了使其完整,您需要能够证明所有被拒绝的程序都不等同于原始程序。只要您对输入尺寸有限制,这在最终机器模型中是可能的。

注意,当程序执行时间取决于输入时,可能没有最佳解决方案。如果您寻找例如最坏情况的边界,则在对所有可能的无边界输入进行量化时,您将很快遇到无法确定的等价关系;如果有边界,则将陷入难以解决的问题。

十年前,Rajeev Joshi,Greg Nelson和Keith Randall撰写的“ Denali:一个目标导向的超级优化器”能够找到约5条机器指令的最佳程序。我没有看最近的结果。


5
萨塞克斯大学的一位学生在这里使用超优化来缩短某些核心Java例程(例如加法)的长度。为此,他燃烧了大量的Amazon EC2计算。他的论文在这里。显然,除了真正简短的程序之外,它不是可行的方法。
Martin Berger 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.