用于执行自稳定编译的系统和方法

文档序号:35133332发布日期:2023-08-15 09:48阅读:59来源:国知局
用于执行自稳定编译的系统和方法

本公开整体涉及计算机系统中的编译器基础结构,并且具体地涉及用于执行自稳定编译的系统和方法。


背景技术:

1、主流编译器在给定输入程序上执行大量优化遍。优化可指变换计算机程序以提供优点如提高的执行速度、减小的程序大小、减少的功率消耗、增强的安全性、降低的空间利用等。典型地,优化可涉及检查和变换的多个交替阶段。在检查阶段,可读出各种程序抽象,诸如程序的中间表示(ir)、程序分析的结果等,以发现优化该程序的机会。随后,通过在程序的中间表示诸如抽象语法树(ast)、三地址代码等上调用适当的写入器来在变换阶段中变换该程序。

2、在变换程序时,通过各种分析生成的程序抽象诸如指向图、常量图等可能与该程序的所修改的状态不一致。这阻止了下游变换的正确应用,直至经由增量更新或经由无效且完成的重新计算稳定相关抽象为止。因此,除非采取明确步骤来确保程序抽象总是反映该程序在被访问时的正确状态,否则无法确保下游优化的检查阶段的正确性,这又会对最优性且甚至优化的正确性产生负面影响。

3、一般来讲,现有编译器框架不执行这种抽象的自动稳定。因此,优化写入器具有识别(i)要稳定与程序抽象相关联的什么数据结构、(ii)要在哪里稳定数据结构和(iii)如何执行实际稳定的附加负担。此外,添加新的分析成为挑战,因为现有优化可能对其产生影响。此外,在用于并行语言的编译器的情况下,这些挑战变得更困难,其中在代码的一个部分中进行的变换可能保证一些看似未连接的部分的程序抽象的稳定,这是因为这两个部分之间存在并发性关系。

4、响应于串行程序的编译器中的程序变换,已经针对实现特定程序抽象的自动稳定进行了各种尝试。然而,这些努力存在不同缺点。例如,carle和pollock[1989]、以及reps等人[1983]要求程序抽象必须表达为语言构造的上下文相关属性,这非常有限制性。carroll和polychronopoulos[2003]不处理并行程序的遍依赖性和编译器。blume等人[1995]、brewster和abdelrahman[2001]仅处理一小组程序抽象,并且因此是不够的。

5、此外,还存在了一些与数据流分析的增量更新相关的出版物。arzt和bodden[2014]已经提供实现基于ide-/ifds的数据流分析的增量更新的方法。ryder[1983]基于allen/cocke间隔分析[allen和cocke 1976]来讨论了用于前向和后向数据流问题的两种强大的增量更新算法,sreedhar等人[1996]公开了为基于消除的数据流分析执行增量更新的方法。carroll和ryder[1987,1988]已经给出一些用于基于间隔对数据流问题的增量更新和基于消除的分析的重要方法。由于在并行程序诸如openmp程序中存在任务间边(或通信边),因此在这种程序的控制和数据流表示中存在大量不适当区域(不可缩减子图),从而使任何形式的结构数据流分析在该图上不可行[muchnick 1998],其他出版物包括marlowe和ryder[1989]的著作和来自由pollock和coffa[1989]给出的用于数据流分析的迭代版本的两阶段增量更新算法,然而,在这些出版物中,遍写入器需要提供附加信息以确保它们的数据流分析的增量更新。[0008]鉴于数据流分析的重要性,已经有众多出版物都已经提供针对增量更新及其并行性的分析特定方法。例如,在c程序的上下文中,yur等人[1997]已经提供用于副作用分析的增量更新机制。chen等人[2015]已经提供针对java程序的基于包含的点分析的增量更新。类似地,liu等人[2019]已经提供指针分析的增量且并行的版本。然而,这些和其他出版物本质上是不通用的。因此,不存在解决上文讨论的挑战并保证通用自稳定(尤其是在并行程序的上下文中)的编译器设计或具体实施。相比之下,所公开的方法向现有和未来迭代数据流分析(idfa)的写入器完全地隐藏了并行语义的具体实施和自稳定的增量模式。


技术实现思路

1、公开了一种用于程序的自动自稳定编译的计算机实现的方法。该方法包括接收输入程序。使用多个分析操作来生成该输入程序的多个抽象,其中该多个抽象中的每个抽象表示与在编译时的程序状态相关联的信息。接下来,该方法包括对根据一个或多个预定基本变换表达的该多个抽象中的一个抽象执行一个或多个优化操作。该预定基本变换捕获与所修改的程序状态相关联的信息。在稳定模式下由稳定器使用由该一组预定基本变换捕获的信息来稳定该多个抽象中的一个或多个抽象。该稳定包括使用所捕获的信息来更新该一个或多个抽象以维持该抽象与所修改的程序状态的一致性。

2、在各种实施方案中,预定基本变换包括添加、删除或修改该程序的语法部分。在一些实施方案中,该稳定模式是懒惰无效稳定模式、懒惰更新稳定模式、急切更新稳定模式、急切无效稳定模式中的一者或它们的任何组合。在各种实施方案中,该一个或多个抽象表示与串行或并行程序相关联的信息。在一些实施方案中,该多个抽象包括中间表示、控制流图和抽象语法树。在一些实施方案中,该多个抽象包括迭代数据流分析,并且其中使用自动懒惰更新稳定模式来稳定该迭代数据流分析。在一些实施方案中,该方法包括响应于执行新的优化操作而稳定该一个或多个抽象,其中该稳定包括更新该一个或多个抽象以维持该抽象与所修改的程序状态的一致性。

3、根据另一个实施方案,公开了一种用于执行程序的自动自稳定编译的系统。该系统包括分析部件,该分析部件被配置为接收输入程序并执行该输入程序的多个分析操作以生成多个抽象,其中该多个抽象中的每个抽象表示与在编译时的程序状态相关联的信息。该系统包括优化部件,该优化部件被配置为通过基于一组预定基本变换修改与该抽象相关联的该程序状态来对该多个抽象中的一个抽象执行一个或多个优化操作,该组预定基本变换捕获与所修改的程序状态相关联的信息。该系统还包括稳定器,该稳定器被配置为使用由该一组预定基本变换捕获的该信息来稳定该多个抽象中的一个或多个抽象,其中该稳定包括使用所捕获的信息来更新该一个或多个抽象以维持该抽象与所修改的程序状态的一致性。

4、在各种实施方案中,该分析部件包括预处理单元、词法分析单元、语法分析单元和语义分析单元。在一些实施方案中,该稳定器被配置为在稳定模式下操作,其中该稳定模式是懒惰无效稳定模式、懒惰更新稳定模式、急切更新稳定模式、急切无效稳定模式或它们的任何组合中的一者。在一些实施方案中,该优化部件包括一个或多个抽象读出器和一个或多个抽象写入器。该一个或多个抽象读出器被配置为读出该一个或多个抽象,并且该一个或多个抽象写入器被配置为修改该一个或多个抽象。

5、本文中描述了这个和其他方面。



技术特征:

1.一种用于程序的自动自稳定编译的计算机实现的方法,所述方法包括:

2.根据权利要求1所述的方法,其中所述预定基本变换(408)包括添加、删除或修改所述程序的语法部分。

3.根据权利要求1所述的方法,其中所述稳定模式是懒惰无效稳定模式、懒惰更新稳定模式、急切更新稳定模式、急切无效稳定模式或它们的任何组合中的一者。

4.根据权利要求1所述的方法,其中所述一个或多个抽象表示与串行或并行程序相关联的信息。

5.根据权利要求1所述的方法,其中所述多个抽象包括中间表示、控制流图和抽象语法树。

6.根据权利要求1所述的方法,所述方法包括响应于执行新的优化操作而稳定所述一个或多个抽象,其中所述稳定包括更新所述一个或多个抽象以维持所述抽象与所修改的程序状态的一致性。

7.根据权利要求1所述的方法,其中所述多个抽象包括迭代数据流分析,并且其中使用自动懒惰更新稳定模式来稳定所述迭代数据流分析。

8.一种用于执行程序的自动自稳定编译的系统,所述系统包括:

9.根据权利要求8所述的系统,其中所述分析部件(208)包括预处理单元(304)、词法分析单元(306)、语法分析单元(308)和语义分析单元(310)。

10.根据权利要求8所述的系统,其中所述稳定器(212)被配置为在稳定模式下操作,其中所述稳定模式是懒惰无效稳定模式、懒惰更新稳定模式、急切更新稳定模式、急切无效稳定模式或它们的任何组合中的一者。

11.根据权利要求8所述的系统,其中所述优化部件包括一个或多个抽象读出器(402)和一个或多个抽象写入器(406),并且其中所述一个或多个抽象读出器(402)被配置为读出所述一个或多个抽象,并且所述一个或多个抽象写入器(406)被配置为修改所述一个或多个抽象。


技术总结
本发明公开了用于程序的自动自稳定编译的系统和方法。该方法包括由分析部件(208)接收输入程序并使用多个分析操作来生成该输入程序的多个抽象。该多个抽象中的每个抽象表示程序状态。优化部件(210)基于一组预定基本变换(408)来对该多个抽象(316)中的一个抽象执行优化操作以修改该程序状态。稳定部件(212)在稳定模式下使用由该一组预定基本变换捕获的信息来执行对该多个抽象(316)中的一个或多个抽象的稳定。该稳定包括更新该一个或多个抽象(316)以维持该抽象与该程序状态的一致性。

技术研发人员:K·楠迪瓦达,A·努格拉希亚
受保护的技术使用者:印度理工学院马德拉斯分校
技术研发日:
技术公布日:2024/1/14
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1