是否存在针对终端程序完全优化的编译器?


20

在安德鲁·W·阿佩尔(Andrew W. Appel)的《现代编译器在ML中的实现》一书中,他说,在第17章中,可计算性理论表明,总是有可能发明新的优化转换,并继续证明完全优化的编译器将解决停顿问题:不产生输出且永不停止的Q可以轻松地用其最佳表示Opt(Q)代替,即“ L:goto L”。因此,完全优化的编译器可以解决停止问题。

所以我的问题是:是否存在用于终端程序的完全优化的编译器?我唯一的想法是:即使保证某个程序可以终止,它仍然可以任意复杂,对于任何具体的优化编译器C,一个人也许可以构造一个以C作为输入的程序,并以某种方式生成较差的程序,如下所示:某种特殊情况。

另外,将自己限制为终止程序有什么含义?


2
甚至没有控制流的情况下,甚至很难为单个代码块找到最佳指令序列。Wikipedia上的超级优化文章提供了很好的介绍(带有引文。)
Wandering Logic

Wikipedia文章提到超优化着眼于无环指令序列。我想没有循环是终止的另一种说法。通过简短地查看可用的参考文献,这似乎是可行的,但极其昂贵。
西蒙“恢复莫妮卡”的光芒

2
“优化”在这里是什么意思?运行时间较小?如果是这样,哪一个:最坏情况,平均情况,每种情况,某些情况...?
拉斐尔

Answers:


16

我假设您对优化运行时感兴趣。正如我在评论中所写的那样,这还不足以说明目标:优化是否会减少任何输入,每个输入,所有最坏情况的输入甚至平均的运行时间

我将证明所有这些都是不可能的。证明扩展到优化程序的长度。

回想一下以下问题是不可计算的:

给定具有上下文字母Σ的上下文无关文法,请确定 LG = Σ GΣL(G)=Σ

还要注意,给定上下文无关文法,我们可以为该文法对CYK算法进行硬编码。用C Y K G表示该算法。我们观察到C Y K G终止于所有输入(来自Σ )。GCYKGCYKGΣ

现在假设有一个优化器,在总是终止算法A的情况下,该算法输出一个等效结果算法,该算法对运行时间而言是最佳的。显然,OptA

Opt(CYKG)='return true;'L(G)=Σ

因此,我们为一个无法解决的问题构造了一个决策者,与假设相矛盾。


谢谢你的论点。一些澄清的问题:什么是?我认为LG 是语法G生成的语言。ΣL(G)G
西蒙“恢复莫妮卡”的光芒

3
@Simon:是所有单词的集合。拉斐尔:很好的证明。实际上,您不需要上下文无关的语法。相反,给定一个图灵机中号可以创建程序P中号模拟中号如果机器达到接受状态的步骤和返回true。然后OPT P中号将是' - [R é ü ř Ñ ˚F 小号ë ; 当且仅当中号不会暂停。ΣMPM(i)MiOPT(PM)'return false;'M
sdcvvc
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.