买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】软件性能优化方法、可存储介质、计算机、计算机程序_广州景派科技有限公司_201711499169.6 

申请/专利权人:广州景派科技有限公司

申请日:2017-12-29

公开(公告)日:2021-07-16

公开(公告)号:CN108197027B

主分类号:G06F11/36(20060101)

分类号:G06F11/36(20060101)

优先权:

专利状态码:有效-授权

法律状态:2021.07.16#授权;2018.07.17#实质审查的生效;2018.06.22#公开

摘要:本发明属于计算机软件技术领域,公开了一种软件性能优化方法、可存储介质、计算机、计算机程序,二进制代码转换成中间语言,提取程序依赖关系;没有依赖关系的语句归于一类,得到多个行并行执行运行组;不同的运行组划分到不同的运算组件上,重新生成二进制代码。本发明能够将串行二进制程序转换为并行二进制程序,充分利用高性能计算设备的并行计算能力,提到程序运行效率。本发明提高了软件的并行运行能力,同时提高了在高性能硬件上的性能。

主权项:1.一种软件性能优化方法,其特征在于,所述软件性能优化方法将整个程序循环以外能够并行化的语句进行并行化,采用程序依赖性分析,判定语句间的控制流依赖关系和数据流依赖关系;所述软件性能优化方法具体包括:第一步,二进制代码转换成中间语言,提取程序依赖关系;将二进制代码翻译成为容易处理的中间语言,二进制代码由指令集决定,当前主流的指令集有:x86、x64、arm、PowerPC、MIPS;第二步,没有依赖关系的语句归于一类,得到多个行并行执行运行组;第三步,不同的运行组划分到不同的运算组件上,重新生成二进制代码;所述软件性能优化方法具体包括:步骤一,将二进制代码翻译成为中间语言;步骤二,从中间语言代码中提取程序依赖关系,包括控制流依赖和数据流依赖并形成程序依赖图;步骤三,将没有依赖关系的语句分为不同的组;步骤四,二进制重写,经过分组处理的语句写入并行执行单元中,生成并行二进制文件;所述步骤三具体包括:第一步,搜索程序依赖图,找到所有的叶子节点;第二步,根据程序依赖图,从当前运行组节点向下回溯,直到分叉节点为止,并将回溯到的节点划分到同一个运行组;第三步,在每个分叉点位置判断是否其依赖的语句全部执行完,如果不是则等待,如果是则将分叉点的状态设置为就绪,并把分叉点归到一个新的运行组;第四步,判断当前节点是否为程序依赖图的根节点,如果不是,则返回第二步,如果是,则分组完毕。

全文数据:软件性能优化方法、可存储介质、计算机、计算机程序技术领域[0001]本发明属于计算机软件技术领域,尤其涉及一种软件性能优化方法、可存储介质、计算机、计算机程序。背景技术[0002]没有相关的专利。[0003]存在一类相关的技术,即循环并行化。该技术把单个循环拆成多个可以独立运行的循环,然后在多个运行组件上并行的运行这些循环,达到提高循环运行效率的目的。[0004]综上所述,现有技术存在的问题是:循环并行化只关注循环,而对于循环以外的程序部分就没有处理。发明内容[0005]针对现有技术存在的问题,本发明提供了一种软件性能优化方法、可存储介质、计算机、计算机程序。[0006]本发明是这样实现的,一种软件性能优化方法,所述软件性能优化方法包括:[0007]第一步,二进制代码转换成中间语言,提取程序依赖关系;[0008]第二步,没有依赖关系的语句归于一类,得到多个行并行执行运行组;[0009]第三步,不同的运行组划分到不同的运算组件上,重新生成二进制代码。[0010]进一步,所述软件性能优化方法具体包括:[0011]步骤一,将二进制代码翻译成为中间语言;[0012]步骤二,从中间语言代码中提取程序依赖关系,包括控制流依赖和数据流依赖并形成程序依赖图;[0013]步骤三,将没有依赖关系的语句分为不同的组;[0014]步骤四,二进制重写,经过分组处理的语句写入并行执行单元中,生成并行二进制文件。[0015]进一步,所述步骤三的语句分组具体包括:[0016]第一步,搜索程序依赖图,找到所有的叶子节点;[0017]第二步,根据程序依赖图,从当前运行组节点向下回溯,直到分叉节点为止,并将回溯到的节点划分到同一个运行组;[0018]第三步,在每个分叉点位置判断是否其依赖的语句全部执行完,如果不是则等待,如果是则将分叉点的状态设置为就绪,并把分叉点归到一个新的运行组;[0019]第四步,判断当前节点是否为程序依赖图的根节点,如果不是,则返回第二步,如果是,则分组完毕。[0020]本发明的另一目的在于提供一种所述软件性能优化方法的软件性能优化系统,所述软件性能优化系统包括:[0021]翻译模块,用于将二进制代码翻译成为中间语言;[0022]提取模块,用于从中间语言代码中提取程序依赖关系;[0023]分组模块,用于将没有依赖关系的语句分为不同的组;[0024]重写模块,用于经过分组处理的语句写入并行执行单元中,生成并行二进制文件。[0025]本发明的另一目的在于提供一种实现所述软件性能优化方法的计算机程序。[0026]本发明的另一目的在于提供一种应用所述软件性能优化方法的计算机。[002y]本发明的另一目的在于提供一种存储有所述软件性能优化方法的可存储介质,所述可存储介质为ROM只读存储器、RAM可读写存储器、EPROM可编程存储器。[〇〇28^本发明能够将串行二进制程序转换为并行二进制程序,充分利用高性能计算设备的并行计算能力,提到程序运行效率。本发明提高了软件的并行运行能力,同时提高了在高性能硬件上的性能。附图说明[0029]图1是本发明实施例提供的软件性能优化方法流程图。[0030]图2是本发明实施例提供的软件性能优化方法实现流程图。[0031]图3是本发明实施例提供的程序依赖图。具体实施方式[GG32]为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。[0033]本发明与现有的循环并行化技术不同,将整个程序能够并行化的语句进行并行化,而循环并行化只关注循环;与循环并行化也不相同,采用程序依赖性分析,判定语句间的控制流依赖关系和数据流依赖关系;而循环并行化主要采用循环分析技术,对循环涉及的不同变量、不同语句之间的依赖关系进行分析。[0034]下面结合附图对本发明的应用原理作详细的描述。[0035]如图1所示,本发明实施例提供的软件性能优化方法包括以下步骤:[GG36]S101:将串行程序二进制代码转换成中间语言;[0037]S102:计算每条语句的相互依赖关系;[0038]S103:构建语句依赖图;[0039]S104:将相互依赖的语句放到一个执行线程中;[0040]S105:利用二进制重写技术生成并行二进制程序。[0041]本发明实施例提供的软件性能优化方法具体包括以下步骤:[0042]1翻译,翻译组件的实施首先需要选择或者设计简单易用的中间语言,目前,有多种中间语言格式可供选择,如:vex、llvm等。本发明实施例采用llvm中间语言。’[0043]2程序依赖性分析,包括数据流依赖和控制流依赖,采用的是Austin等人在《DynamicDependencyAnalysisofOrdinaryPrograms》提出的算法绘制程序依赖关系图。、[0044]⑶语句分组,用CC++编程,编写llvm的插件,直接在llvnLt实现。[0045]⑷二进制重写,可以采用各种二进制重写工具,如:dyninst等。直接用llvm,将已经完成分组的llvm中间语句进行重新编译,生成并行二进制文件。[0046]下面结合附图对本发明的应用原理作进一步的描述。[0047]如图2所示,本发明实施例提供的软件性能优化方法输入是一个软件的二进制文件,不需要软件的源程序。输出是经过优化处理过后的并行二进制文件,文件运行结果与原来的串行二进制文件是相同的,区别在于如果并行二进制文件运行在高性能设备上,则会取得更高的运行性能。[0048]翻译,将二进制代码翻译成为容易处理的中间语言。二进制代码由指令集决定,当前主流的指令集有:x86、x64、arm、PowerPC、MIPS等等。不同的指令集,指令的格式以及语义差别很大,因此需要一种统一的中间语言形式,能够屏蔽指令集的差异,实现一种统一的优化装置。第二,有些指令集非常复杂,以x86指令集为例。x86指令集包含了数百种指令,指令是不定长的,指令的操作数可以有0个、1个和2个,操作数类型可以有立即数、寄存器和内存地址。因此,直接对二进制代码进行操作和分析非常困难。所以,本发明需要将二进制文件转换成一种简单的,类似于精简指令集的中间语言,这种语言只包含10几20种语句类型,且语义简单,可以方便分析。[0049]程序依赖性分析,从中间语言代码中提取程序依赖关系,包括控制流依赖和数据流依赖并形成程序依赖图。一个程序依赖图的例子如图3所示。这个例子中,程序一共被翻译为11条中间语句,依赖关系由箭头标注,例如语句5依赖于语句1,2,3。[0050]语句分组,将没有依赖关系的语句分为不同的组,从而可以交给高性能计算硬件并行执行。语句分组具体包括:[0051]第一步,初始化过程,搜索程序依赖图,找到所有的叶子节点,即不依赖于任何节点的节点,如图2的1、2、3、4、10。将每一个叶子节点划分到一个运行组,所以,例子中初始条件下有5个运行组。节点状态有两种,分别为未就绪和就绪,在初始条件下,所有的叶子节点处于就绪状态而其他节点标注为未就绪状态。[0052]第二步,根据程序依赖图,从当前运行组节点向下回溯,直到分叉节点为止,并将回溯到的节点划分到同一个运行组。所以,语句10和11在同一个运行组,表示他们不能并行执行。[0053]第三步,在每个分叉点位置判断是否其依赖的语句全部执行完,如果不是则等待,如果是则将分叉点的状态设置为就绪,并把分叉点归到一个新的运行组。就图2的例子而言,语句6必须要等到语句4和语句11执行完毕才能把状态修改为就绪,并且归入一个新的运行组。[0054]第四步,判断当前节点是否为程序依赖图的根节点,如果不是,则返回第二步,如果是,则分组完毕。[0055]二进制重写,将经过分组处理的语句写入并行执行单元中(如:线程),最后生成并行二进制文件。[0056]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

权利要求:1.一种软件性能优化方法,其特征在于,所述软件性能优化方法包括:第一步,二进制代码转换成中间语言,提取程序依赖关系;第二步,没有依赖关系的语句归于一类,得到多个行并行执行运行组;第三步,不同的运行组划分到不同的运算组件上,重新生成二进制代码。2.如权利要求1所述的软件性能优化方法,其特征在于,所述软件性能优化方法具体包括:步骤一,将二进制代码翻译成为中间语言;步骤二,从中间语言代码中提取程序依赖关系,包括控制流依赖和数据流依赖并形成程序依赖图;步骤三,将没有依赖关系的语句分为不同的组;步骤四,二进制重写,经过分组处理的语句写入并行执行单元中,生成并行二进制文件。3.如权利要求2所述的软件性能优化方法,其特征在于,所述步骤三的语句分组具体包括:第一步,搜索程序依赖图,找到所有的叶子节点;第二步,根据程序依赖图,从当前运行组节点向下回溯,直到分叉节点为止,并将回溯到的节点划分到同一个运行组;第三步,在每个分叉点位置判断是否其依赖的语句全部执行完,如果不是则等待,如果是则将分叉点的状态设置为就绪,并把分叉点归到一个新的运行组;第四步,判断当前节点是否为程序依赖图的根节点,如果不是,则返回第二步,如果是,则分组完毕。4.一种如权利要求1所述软件性能优化方法的软件性能优化系统,其特征在于,所述软件性能优化系统包括:翻译模块,用于将二进制代码翻译成为中间语言;提取模块,用于从中间语言代码中提取程序依赖关系;分组模块,用于将没有依赖关系的语句分为不同的组;重写模块,用于经过分组处理的语句写入并行执行单元中,生成并行二进制文件。5.—种实现权利要求1〜3任意一项所述软件性能优化方法的计算机程序。6.—种应用权利要求1〜3任意一项所述软件性能优化方法的计算机。7.—种存储有权利要求1〜3任意一项所述软件性能优化方法的可存储介质,其特征在于,所述可存储介质为ROM只读存储器、RAM可读写存储器、EPROM可编程存储器。

百度查询: 广州景派科技有限公司 软件性能优化方法、可存储介质、计算机、计算机程序

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。