为什么整个计划优化现在不再普遍?

Jon*_*ock 5 language-agnostic optimization

主要问题:为什么一般甚至专业的整体计划优化者都不是我们日常生活的一部分?

我开始思考这个阅读SuperCompilers后,LLC的白皮书,其中讨论了他们的"supercompiling"或方法metacompiling程序的源(通常情况下)实现了更快的版本,做相同的功能原来的程序.基本上,他们逐步执行程序并重新编译为相同的目标语言.通过这样做,自然优化发生; 例如,如果输入程序经常使用100个项目的数组,则通用二进制搜索功能可能专门用于二进制搜索100个项目的数组.

部分求值是一个或许更窄的类型整个程序优化,其中该程序的源减少/同时留下未知的输入开在运行时评估基于一些组固定输入的评估的.例如,如果给定y = 5,则一般函数x ^ y可以减少到x ^ 5或者可能是(x*x)*(x*x)*x.

(我为这两种技术的粗略描述道歉)

从历史上看整个程序的优化,如上述两个就太内存密集型执行,而是用我们的机器已经的内存(或者使用类似云)演出,为什么没有我们看到许多开源部分评估和如春吗?我见过一些,但我认为这将成为我们工具链的常规部分.

  • 是恐惧(程序员担心他们的代码转换引入错误)?
  • 它是不值得的(即对于Web应用程序而言,瓶颈是I/O,这种优化似乎可以节省CPU时间)?
  • 这种软件难以写吗?
  • 或者,我对此的看法是错的吗?

Jer*_*fin 3

我认为主要是你的认知是错误的。大多数编译器支持“整个程序”(过程间)优化,以及配置文件引导优化以根据实际使用来指导优化器。

大多数人没有注意到的主要原因是,最终,这些很少会产生足够的影响来真正注意到并关心。此类工具的普遍可用性也发生在它们对于大多数用途来说并不那么重要的时期。现在的 CPU 速度如此之快,以至于没有人会三思而后行,让代码在 Java 虚拟机上运行,​​而 Java 虚拟机本身就在 VMWare 虚拟机之类的东西中运行(并且拥有第三个虚拟机层也不是特别罕见)。

这增加了开销,使您通常可以从全局优化中获得的改进相形见绌。对于大多数人来说,速度差异必须相当才有意义(并且全局优化的改进很少符合条件)。