优化编译器的最终目的是在程序空间中搜索等价于原始程序但速度更快的程序。这已经在实践中用于非常小的基本块:https://en.wikipedia.org/wiki/Superoptimization验证程序的等价性
听起来很难的部分是搜索空间的指数性质,但实际上它不是;最难的部分是,假设你找到了你想找的东西,你如何证明这个新的,更快的程序与原始程序真的是相同的?
上次我研究过它,在某些情况下证明程序的某些属性已经取得了一些进展,特别是当你在谈论标量变量或小的固定位向量时,在一个非常小的范围内,但没有真正验证当您谈论复杂的数据结构时,程序的等价性将会更大。
有没有人想出了一种方法来做到这一点,甚至'模解决这个NP难搜索问题,我们不知道如何解决'?
编辑:是的,我们都知道停止问题。它是根据一般情况来定义的。人类是存在的证据,这可以用于许多实际感兴趣的案例。
可能是https://cstheory.stackexchange.com/或https://cs.stackexchange.com/? – mustaccio
看起来你会再次遇到[停止问题](https://en.wikipedia.org/wiki/Halting_problem)。但通过使用类似[B方法](https://en.wikipedia.org/wiki/B-Method)的方法,可以证明两种算法都实现了相同的规范,因此可以认为它们具有足够的等效性,仍然不足以找到它们。 –
Julien是正确的 - 这个问题在一般情况下是无法解决的(至少不是图灵等价系统),如果你找到了一个oracle,你可以这样做,但在这种情况下,我建议你使用它来购买乐透券而不是优化代码)。 – Patrick87