发明名称 基于树型程序分支的计算机程序即时编译方法
摘要 基于树型程序分支的计算机程序即时编译方法,属于编译方法技术领域。本发明中结构化基本块流图的程序执行中按照控制流的指示,依次解释执行每个基本块,遇到循环结构时则统计程序分支的出现次数。在出现次数大于给定的阈值,将当前分支设置为热点分支;对其中每个基本块进行编译处理,生成并保存目标程序分支。如果当前分支中包含其他热点分支、分支入口属于其他热点分支或部分基本块属于其他热点分支,则按照不同的策略,将当前分支与其他热点分支进行合并。本方法编译处理粒度较小,具有良好的动态可扩展性,减少了在运行时刻频繁地切换执行方式所带来的额外负担,可以大幅度提高基本块制流图的运行效率。
申请公布号 CN103838616A 申请公布日期 2014.06.04
申请号 CN201410078456.X 申请日期 2014.03.05
申请人 北京工业大学 发明人 廖湖声;武辰之;于成龙;高红雨;苏航
分类号 G06F9/45(2006.01)I 主分类号 G06F9/45(2006.01)I
代理机构 北京思海天达知识产权代理有限公司 11203 代理人 纪佳
主权项 基于树型程序分支的计算机程序即时编译方法,其特征在于:计算机程序是按照结构化基本块流图的表示,实现步骤如下:步骤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如果目标程序执行结束,则将编译执行方式切换为解释执行方式,按照目标程序的上下文信息恢复解释执行环境的上下文信息,随后按照预留的返回地址,继续下一基本块的解释执行。
地址 100124 北京市朝阳区平乐园100号