过去几年中,编译器优化技术有哪些新内容?


14

我对数据流和控制流图的优化感兴趣,尤其是在计算复杂性方面。但是,了解窥孔优化领域的最新发明也将很有趣。


2
在我的论文幻灯片)中,我讨论并实现了LLVM中的调用图展平;基本上,这是一个过程间转换,它摆脱了“功能”的概念,因为它将所有代码合并在一起,从而提供了许多有趣的可能性,例如过程间代码移动,调用站点优化的调用约定,无堆栈执行等。
CAFxX 2011年

@CAFxX:幻灯片在Open Office中崩溃了..您恰好有在线图片吗?
Yttrill 2012年


谢谢,能够进行查看,尽管图形可以正常显示,文字还是不错的。
Yttrill 2012年

Answers:


8

我不确定它是否新颖,或者在应用方面它是否对您而言太过有趣,但是Hoopl展示了如何对控制/数据流优化进行模块化,并且控制图顶点的事实传播独立于控制图顶点。语言和特定的优化。

他们引用了2002年Lerner,Grove和Chambers的算法,该算法将简单的优化组合为“超优化”。



6

经过验证的优化编译器已有一些复兴。除了Lerner的论文(在先前的评论中提到)之外,您还可以查看Xavier Leroy领导的CompCert项目。他们通过将优化指定为机器可检查的证明(使用Coq)做了很酷的事情。我还没有读过这些论文,但是普林斯顿大学的“ 经过验证的软件工具链”项目在该领域似乎也产生了有趣的结果。


1
我们还在从事类似于CompCert:CerCo(cerco.cs.unibo.it)的项目。与CompCert不同,我们的目标是为大型C子集生成经过验证的节省成本的编译器(CompCert仅显示源程序的扩展属性通过编译保留)。我们还在编译器中实现了一些中等复杂的循环优化,以及像CompCert所采用的“温和”优化,这些当然需要进行验证以保持成本。
Dominic Mulligan

5

认识到双FOR循环中的baz [i] + = force(foo [i],foo [j])具有(i,j)的独立结果,并将调用重新排序为(i,j)上的空间填充曲线,以减少缓存未命中。

不是很“窥孔”,但是让缓存忽略了“免费”行为是很好的。

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.