高级程序中数据结构的优化

蒂亚克·隆普夫,阿文德·苏吉思,纳达·阿明,凯文·布朗,沃金·约万诺维奇,HyoukJoong Lee(李孝忠),马诺哈尔·琼纳拉赫达,昆勒·奥卢科顿,马丁·奥德斯基.高级程序中数据结构的优化.在POPL 2013中。ACM出版社,2013年1月。

摘要

高级数据结构是现代编程的基石,同时也阻碍了编译器的优化。为了解释用户或库定义的数据结构,编译器需要具有可扩展性。扩展编译器的常见机制分为两类。前端宏、分段或部分求值系统可用于在程序进入编译器之前以编程方式删除抽象和专门化程序。或者,一些编译器允许通过在编译链的不同点添加新的转换传递或添加新的中间表示(IR)类型来扩展内部工作。这些机制都不足以应对高级数据结构带来的挑战。本文展示了一种新颖的方法,将它们结合起来,以产生大于各部分之和的效益。

我们不仅将staging用作前端,还使用staging实现了内部编译器传递。这些内部传递委托回程序执行,以构建转换后的IR。众所周知,分段可以简化程序生成,同样也可以简化程序转换。将转换定义为分级IR解释器比实现低级IR到IR转换器更简单。使用自定义IR节点,可以将许多表示为从IR节点到分段程序片段的重写的优化组合为一次通过,从而缓解阶段排序问题。推测性重写可以保留循环周围的乐观假设。

我们使用这种架构演示了几种针对数据结构的强大程序优化:一种新颖的循环融合和毁林算法、数组结构到数组结构的转换、对象映射和异构并行设备的代码生成。我们通过几个非平凡的案例研究验证了我们的方法,这些案例在实验中显示出数量级的加速。