[发明专利]一种计算机程序的优化方法及系统有效
申请号: | 200910243303.5 | 申请日: | 2009-12-18 |
公开(公告)号: | CN101876899A | 公开(公告)日: | 2010-11-03 |
发明(设计)人: | 程旭;聂久焘;刘先华 | 申请(专利权)人: | 北京北大众志微系统科技有限责任公司 |
主分类号: | G06F9/44 | 分类号: | G06F9/44 |
代理公司: | 北京律诚同业知识产权代理有限公司 11006 | 代理人: | 梁挥;祁建国 |
地址: | 100032 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 计算机 程序 优化 方法 系统 | ||
技术领域
本发明涉及计算机程序,尤其涉及一种计算机程序的优化方法及系统。
背景技术
计算机系统中运行的程序通常是使用高级语言编写,经编译器翻译和优化得到的结果。对程序的优化处理效果决定了程序在计算机系统上的运行性能。使用有些语言(比如Java和C#等)编写的程序需要在程序运行期间对其进行翻译和优化。此时优化方法本身的执行效率也会影响到整个程序的运行时间。因此,计算机系统中需要运行效率高且优化效果好的优化方法。
标量优化是相对于并行优化(包括指令级、数据级、线程级等)的一类优化技术。常见的很多优化,比如公共子表达式消除、循环不变代码移动、常数传播、复制传播、强度削弱、部分冗余消除和死代码消除等都属于标量优化。它们都具有共同的优化目标:减少程序中的计算数量和降低计算强度,从而提高程序的执行效率。
各种优化技术通常都是工作在程序的某种中间表示上的。传统的标量优化技术使用普通的命令式语言作为中间表示,优化中需要的各种属性信息由数据流分析方法计算得到,运行效率较低。静态单赋值(Static Single Assignment,SSA)形式是命令式语言的一种特殊形式,要求每个变量在程序中只有一个被赋值(定义)的语句,且一个变量的所有使用语句都被该变量的定义语句所支配,即从程序入口出到达每个使用语句的所有控制流路径都经过该变量的定义语句。将一个程序变换为静态单赋值形式需要对变量进行换名和在适当的合并节点处(假设有m条入边)插入特殊的语句,phi节点:x_0=phi(x_1,…,x_m)来合并不同路径的值。其语义是:当程序执行路径沿第i个前驱进入该phi节点所在的程序节点,则x_0=x_i。
静态单赋值形式的程序中的所有变量的定义-使用关系都被显式表示出来,通过追溯变量的赋值语句即可得到数据流信息。因此,采用静态单赋值形式作为中间表示,使很多传统的标量优化技术得到了简化,运行效率更高,实现也更容易。美国专利号为6026241和6128775的两个发明分别为采用静态单赋值形式进行部分冗余消除和寄存器提升的两个优化方法。美国专利号为6301704的发明描述了一种采用静态单赋值形式作为中间表示进行多种标量优化的方法和系统。
然而,上述采用静态单赋值的优化方法都是基于“语法”等值关系的优化方法,即只能消除语法上完全相同的表达式间的冗余计算或访存语句,优化能力受到很大限制。通常需要同时采用多种辅助方法(值编号、表达式重结合等)对程序进行一系列预处理以尽量增加标量优化方法的优化机会。比这种组合方案更彻底的解决方案是采用基于“语义”等值关系的优化方法。但现有的基于“语义”等值的方法采用的仍然是传统的非静态单赋值形式的中间表示,通过构造一个庞大的值流图并在其上进行数据流分析来计算如何对输入程序进行变换,运行效率非常低下,因而无法实际应用。如何将“语义”等值关系显式表示在程序中间表示中以提高优化方法的效率仍然没有得到解决。
发明内容
为了解决上述的技术问题,提供了一种计算机程序的优化方法及系统,其目的在于,利用“稀疏值流图”(Sparse Value Flow Graph,SVFG)形式,将程序中的“语义”等值关系显式包含在程序的中间表示中,并在此基础上进行高效率的标量优化以实现效率高且优化效果更好的优化方法。
本发明提供了一种计算机程序的优化方法,包括:
步骤1,通过值编号分析计算得到每个变量和表达式的值编号;
步骤2,将静态单赋值形式的计算机程序转换为半稀疏值流图形式的计算机程序;
步骤3,计算半稀疏值流图形式的计算机程序进行标量优化所需的初始属性;如果初始属性已经包含所有所需优化信息则执行步骤4,否则扩展半稀疏值流图形式的计算机程序为稀疏值流图形式的计算机程序,并计算进行标量优化所需的属性,直到所有所需属性计算完毕,执行步骤4;
步骤4,根据计算得到的属性对半稀疏值流图形式的计算机程序或稀疏值流图形式的计算机程序进行程序变换以优化计算机程序;
半稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,具有相同值编号的程序节点间的全局等值关系被连接起来;
稀疏值流图形式的计算机程序中:所有的值传输流都不能越过与其“语义”等值的计算,所有的全局等值关系都必须被一值传输流所连接。
步骤2中,半稀疏值流图为每个值编号插入phi节点并使用静态单赋值的变量将在不同位置的同一个值编号连接起来。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京北大众志微系统科技有限责任公司,未经北京北大众志微系统科技有限责任公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200910243303.5/2.html,转载请声明来源钻瓜专利网。