基于树型程序分支的计算机程序即时编译方法技术

技术编号:15398253 阅读:95 留言:0更新日期:2017-05-22 13:59
基于树型程序分支的计算机程序即时编译方法,属于编译方法技术领域。本发明专利技术中结构化基本块流图的程序执行中按照控制流的指示,依次解释执行每个基本块,遇到循环结构时则统计程序分支的出现次数。在出现次数大于给定的阈值,将当前分支设置为热点分支;对其中每个基本块进行编译处理,生成并保存目标程序分支。如果当前分支中包含其他热点分支、分支入口属于其他热点分支或部分基本块属于其他热点分支,则按照不同的策略,将当前分支与其他热点分支进行合并。本方法编译处理粒度较小,具有良好的动态可扩展性,减少了在运行时刻频繁地切换执行方式所带来的额外负担,可以大幅度提高基本块制流图的运行效率。

Computer program immediate compiling method based on tree type program branch

The utility model relates to a computer program immediate compiling method based on a tree type program branch, belonging to the technical field of compiling methods. In the program execution of a structured block stream diagram in the present invention, each basic block is interpreted in accordance with the instructions of a control flow, and the number of occurrences of a program branch is calculated when a cyclic structure is encountered. When the number of occurrences is greater than the given threshold, the current branch is set as a hot branch; each of the base blocks is compiled, and the target program branch is generated and saved. If the current branch contains other hot branches and other hot branch or part of entrance to basic blocks belonging to other hot branch, according to different strategies, the current branch and other hot branch merger. The compilation of the particle size is small, has good scalability, reducing the frequent switching burden brought by at run time, can greatly improve the efficiency of the basic block flow graph system.

【技术实现步骤摘要】
基于树型程序分支的计算机程序即时编译方法
本专利技术涉及计算机系统中运行程序的编译优化方法,属于计算机语言技术,用于在程序运行的过程中适时地改变程序的执行方式以其整体性能。
技术介绍
计算机程序设计语言的实现通常采用编译实现方法。通过编译系统事先将高级程序设计语言描述的程序翻译等价的、执行效率更高的目标语言程序,避免逐句解释高级语言程序所需要的解释负担,能够十分有效地提高程序的执行效率。然而,对于网络环境下使用的众多程序设计语言,描述计算功能的实用程序可能构造于未知的其他站点,或者是动态生成,无法预先采用编译技术进行优化处理。为了利用编译技术带来的性能改善,此类程序设计语言的有效实现常采用某种即时编译技术。例如,著名的Java虚拟机系统中,采用了这种即时编译技术,设法在程序解释执行的过程中,统计各个程序片段的执行频度,识别出执行频度较高的程序片段,进行编译处理;以编译产生的目标程序的执行代替原程序的解释执行,以求获得程序执行效率的整体提升。鉴于计算机程序设计语言的多样性,以及程序片段的复杂性,现有的即时编译技术通常采用程序中的函数或子例程作为即时编译处理的基本单元,进而在程序执行中统计各个函数和子例程的执行次数,获得执行频度较高的热点函数,进行编译处理。然而,即时编译处理的程序粒度越大,则编译处理的开销越大,有可能在很大程度上抵消编译优化所带来的好处。为此,本专利技术提出一种基于执行路径的即时编译方法,允许以程序分支等更小粒度的热点程序片段作为即时编译的处理对象,能够更准确地识别出执行频度较高的程序分支,更有效地利用编译技术来提高程序的执行效率。和其他基于程序分支的即时编译方法相比,本专利技术针对程序运行的结构化的基本块控制流图,适用于所有能够将控制逻辑转化为结构化基本块控制流图的程序设计语言,在程序解释和编译执行的过程中,允许将新发现的执行路径编译处理后,扩展到已经编译好的目标程序中,形成一种树型的热点程序分支,具有良好的动态可扩展性,减少了在运行时刻频繁地切换执行方式所带来的额外负担。
技术实现思路
本专利技术的目的是为符合结构化控制流的计算程序,提供高效灵活、便于高执行频度程序的识别、便于执行方式切换的即时编译方法,以支持高性能程序执行的解释编译系统的实现。本专利技术的特征为:1、本专利技术基于树型程序分支的计算机程序即时编译方法,其特征在于计算机程序是按照结构化基本块流图的表示,实现步骤如下:步骤S1按照控制流的指示,依次解释执行每个基本块,遇到循环结构时则记录程序分支的起点;步骤S2如果再次遇到相同循环结构的起点时,则记录程序分支信息,累计该分支的出现次数;步骤S3如果当前分支路径的出现次数大于给定的阈值,则按照以下步骤对当前分支进行编译处理:步骤S3.1为当前分支设置编译标记,表示为热点分支;步骤S3.2按照以下步骤,对当前分支中的每个基本块进行编译处理:步骤S3.2.1将当前基本块翻译为目标代码模块;步骤S3.2.2遇到其他分支入口,则生成出口指令;步骤S3.2.3将步骤S3.2.1和S3.2.2生成的代码合并为目标程序分支;步骤S3.3保存步骤S3.2所生成的目标程序分支;步骤S3.4如果当前分支和其他分支有包含关系,则按照以下步骤进行处理:步骤S3.4.1如果当前分支中包含了其他热点分支,则将其他热点分支作为当前分支的子分支,合并为树型的程序分支;步骤S3.4.2如果当前分支入口属于其他热点分支,则将当前分支作为其他热点分支的子分支,合并为树型的程序分支;步骤S3.4.3如果当前分支中部分基本块属于其他热点分支,且分支入口相同,则将其他热点分支作为当前分支的子分支,合并为树型的程序分支;步骤S4每当再次执行循环结构时,如果该循环已经具有编译标记,则将解释执行方式切换为编译执行方式,按照以下步骤进行执行目标程序中的每条指令:步骤S4.1将解释执行环境的上下文信息转换为目标程序的上下文信息,并保留返回地址;步骤S4.2按照控制指令顺序执行目标程序中的指令序列;步骤S4.3如果遇到了出口指令,则将编译执行方式切换为解释执行方式,按照目标程序的上下文信息恢复解释执行环境的上下文信息,随后按照出口指令的指示继续程序的解释执行。步骤S4.4如果目标程序执行结束,则将编译执行方式切换为解释执行方式,按照目标程序的上下文信息恢复解释执行环境的上下文信息,随后按照预留的返回地址,继续下一基本块的解释执行。本专利技术可以取得如下有益效果:本专利技术针对程序运行的结构化的基本块控制流图,适用于所有能够将控制逻辑转化为结构化基本块控制流图的程序设计语言,与其他基于程序分支的即时编译方法相比,本方法编译处理粒度较小,在程序解释和编译执行的过程中,允许将新发现的执行路径编译处理后,扩展到已经编译好的目标程序中,形成一种树型的热点程序分支,具有良好的动态可扩展性,减少了在运行时刻频繁地切换执行方式所带来的额外负担。在基本块控制流图和入数据具有一定的规模的情况下,可以大幅度提高基本块制流图的运行效率。附图说明图1:基于基本块控制流的程序解释执行和即时编译过程图2:程序分支的编译执行过程图3:具体实施举例具体实施方式本专利技术提供的即时编译方法用于实现各种程序设计语言的处理系统,将其解释执行方式转换为解释执行和编译执行混合执行方式。具体实施方法如下:采用传统的SECD抽象机模型作为程序设计语言的实现模型,采用常见的SECD抽象机指令作为中间语言。对于程序设计语言的特殊功能,设置一组专用的SECD抽象机指令来表示计算功能。SECD指令系统的设计中,参数栈、上下文环境和转储栈必须为程序的执行提供完整的动态上下文,以保证程序设计语言的语义正确性。为程序设计语言的实现提供翻译程序,将程序设计语言描述的程序翻译为SECD抽象机指令组成的中间语言程序,进而转化为严格结构化的基本块控制流图。在翻译过程中,保证由SECD控制指令的组合符合结构化程序设计的要求。为描述计算逻辑的基本块控制流图,提供解释编译执行系统。按照控制流图中控制指令的指示,依次解释执行每个基本块。遇到循环入口的基本块B3则为程序分支的起点;当每次遇到程序分支起点时,则记录程序分支的执行次数;如果当前分支的出现次数大于给定的阈值,则为当前分支作为热点程序分支,设置编译标记,并且对当前分支中的每个基本块进行编译处理,在示例中,B6所在分支(以加粗线进行标示)运行次数首先超过阈值,进行编译处理。在编译处理过程中,将当前基本块翻译为目标代码模块;遇到其他分支入口,则生成出口指令,因为B6分支不包括基本块B5、B8,因此需要在此生成出口指令;将所有基本块翻译得到的目标代码模块合并为目标程序分支。如果当前分支中包含了其他热点分支,说明当前分支所在的循环处于其他循环的内部,则将其他热点分支作为当前分支的子分支,合并为树型的程序分支;如果当前分支入口属于其他热点分支,则将当前分支作为其他热点分支的子分支,合并为树型的程序分支;如果当前分支中部分基本块属于其他热点分支,且分支入口相同,那么说明当前分支所在的循环中有其他分支是热点分支,已经被编译处理过,则将其他分支作为当前分支的子分支,合并为树型的程序分支,从而使得多个热点分支合并为一个热点分支,减少了过多的上下文环境切换过程带来的额外负载,在示例中,如果B本文档来自技高网
...
基于树型程序分支的计算机程序即时编译方法

【技术保护点】
基于树型程序分支的计算机程序即时编译方法,其特征在于:计算机程序是按照结构化基本块流图的表示,实现步骤如下:步骤S1按照控制流的指示,依次解释执行每个基本块,遇到循环结构时则记录程序分支的起点;步骤S2如果再次遇到相同循环结构的起点时,则记录程序分支信息,累计该分支的出现次数;步骤S3如果当前分支路径的出现次数大于给定的阈值,则按照以下步骤对当前分支进行编译处理:步骤S3.1为当前分支设置编译标记,表示为热点分支;步骤S3.2按照以下步骤,对当前分支中的每个基本块进行编译处理:步骤S3.2.1将当前基本块翻译为目标代码模块;步骤S3.2.2遇到其他分支入口,则生成出口指令;步骤S3.2.3将步骤S3.2.1和S3.2.2生成的代码合并为目标程序分支;步骤S3.3保存步骤S3.2所生成的目标程序分支;步骤S3.4如果当前分支和其他分支有包含关系,则按照以下步骤进行处理:步骤S3.4.1如果当前分支中包含了其他热点分支,则将其他热点分支作为当前分支的子分支,合并为树型的程序分支;步骤S3.4.2如果当前分支入口属于其他热点分支,则将当前分支作为其他热点分支的子分支,合并为树型的程序分支;步骤S3.4.3如果当前分支中部分基本块属于其他热点分支,且分支入口相同,则将其他热点分支作为当前分支的子分支,合并为树型的程序分支;步骤S4每当再次执行循环结构时,如果该循环已经具有编译标记,则将解释执行方式切换为编译执行方式,按照以下步骤进行执行目标程序中的每条指令:步骤S4.1将解释执行环境的上下文信息转换为目标程序的上下文信息,并保留返回地址;步骤S4.2按照控制指令顺序执行目标程序中的指令序列;步骤S4.3如果遇到了出口指令,则将编译执行方式切换为解释执行方式,按照目标程序的上下文信息恢复解释执行环境的上下文信息,随后按照出口指令的指示继续程序的解释执行;步骤S4.4如果目标程序执行结束,则将编译执行方式切换为解释执行方式,按照目标程序的上下文信息恢复解释执行环境的上下文信息,随后按照预留的返回地址,继续下一基本块的解释执行。...

【技术特征摘要】
1.基于树型程序分支的计算机程序即时编译方法,其特征在于:计算机程序是按照结构化基本块流图的表示,实现步骤如下:步骤S1按照控制流的指示,依次解释执行每个基本块,遇到循环结构时则记录程序分支的起点;步骤S2如果再次遇到相同循环结构的起点时,则记录程序分支信息,累计该分支的出现次数;步骤S3如果当前分支路径的出现次数大于给定的阈值,则按照以下步骤对当前分支进行编译处理:步骤S3.1为当前分支设置编译标记,表示为热点分支;步骤S3.2按照以下步骤,对当前分支中的每个基本块进行编译处理:步骤S3.2.1将当前基本块翻译为目标代码模块;步骤S3.2.2遇到其他分支入口,则生成出口指令;步骤S3.2.3将步骤S3.2.1和S3.2.2生成的代码合并为目标程序分支;步骤S3.3保存步骤S3.2所生成的目标程序分支;步骤S3.4如果当前分支和其他分支有包含关系,则按照以下步骤进行处理:步骤S3.4.1如果当前分支中包含了其他热点分支,则将其他热点分支作为当前分支的子分支,合并为树型的程序分支;步骤S3.4.2如果当前分支入口属于其他热点分支,则将当前分支作为其他热点分支的子分支,合并为树型的程序分支;步骤S3.4.3如果当前分支中部分基本块属于其他热点分支,且...

【专利技术属性】
技术研发人员:廖湖声武辰之于成龙高红雨苏航
申请(专利权)人:北京工业大学
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1