提高代码性能方法、装置、计算机设备及存储介质与流程
未命名
09-11
阅读:79
评论:0

1.本发明涉及计算机技术领域,具体涉及提高代码性能方法、装置、计算机设备及存储介质。
背景技术:
2.在计算机科学领域中,编译器作为程序优化的关键技术之一,在生成高效代码方面已经取得了显著的成果。编译器嵌入了大量的代码优化技术,其中循环嵌套代码是优化的重点,这些技术经过多年的不断发展与完善。然而,任意两个编译器所生成代码的性能可能由于其各自的中间表示(ir)、已实现的循环转换及其排序、使用的成本模型,以及指令选择和调度等因素而大相径庭。另外,编译器还需要考虑多核处理器中复杂的流水线、多个功能单元、以及复杂内存层次结构等因素对整体性能的影响。因此,现有的代码优化技术由于编译器所生成代码的性能可能无法与其他编译器完全匹配,且无法确定编译器是否接近最佳性能,或者是否存在改进的空间等原因,造成最终生成的目标代码性能较低的问题。
3.鉴于此,亟需一种能够有效提高代码性能的方法。
技术实现要素:
4.有鉴于此,本发明提供了一种提高代码性能方法、装置、计算机设备及存储介质,以解决生成的代码性能较低的问题。
5.第一方面,本发明提供了一种提高代码性能方法,包括:
6.对程序源代码进行函数提取得到主体文件和多个函数文件;所述主体文件包含所述程序源代码的主体代码,每个所述函数文件包含一个第一函数;
7.利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹;每个所述文件夹包含多个第一可执行文件,每个所述第一可执行文件包含一个第二函数,所述第二函数是由第一函数优化处理得到的,所述多个文件夹与所述多个优化器一一对应;
8.执行每个第一可执行文件,以确定每个第一可执行文件中第二函数的执行时间;
9.基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器。
10.本发明提供的提高代码性能方法,通过多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理得到第一可执行文件,能够对函数段代码进行全面搜索,查询到所有可能的优化选项;通过比较优化后函数的执行时间来选择性能最高的函数段代码进行链接得到优化效果最佳的可执行文件,从而达到有效提高生成代码的性能。
11.在一种可选的实施方式中,所述方法还包括:
12.对所述多个函数文件分别使用对应的目标优化器进行编译处理,生成多个第一可重定向文件;所述多个第一可重定向文件与所述多个函数文件一一对应;
13.对所述主体文件使用初始优化器进行编译处理,生成第二可重定向文件;
14.对所述第二可重定向文件和所述多个第一可重定向文件进行合成处理,得到第二可执行文件。
15.本发明提供的提高代码性能方法,通过对分别多个函数文件分别使用对应的目标优化器进行编译生成多个第一可重定向文件,以及对第二可重定向文件和多个第一可重定向文件进行合成处理得到第二可执行文件,能够利用了多个编译器的优点,同时绕过单个编译器的缺点,从而使生成的目标代码的性能更好。
16.在一种可选的实施方式中,所述利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹,包括:
17.步骤1:使用目标优化器对所述主体文件进行编译处理,得到第三可重定向文件;
18.步骤2:使用所述目标优化器分别对所述多个函数文件进行编译处理,得到多个第四可重定向文件;所述多个函数文件与所述多个第四可重定向文件一一对应;
19.步骤3:将所述第三可重定向文件分别与所述多个第四可重定向文件进行合成处理,得到多个第一可执行文件;所述多个第一可执行文件与所述多个第四可重定向文件一一对应;
20.步骤4:基于所述多个第一可执行文件生成与所述目标优化器对应的所述文件夹;
21.步骤5:将所述多个优化器中的每个优化器分别作为目标优化器,重复上述步骤1至步骤4,得到多个文件夹;所述多个文件夹与所述多个优化器一一对应。
22.本发明提供的提高代码性能方法,通过多种代码优化器分别优化每个提取出的第一函数,并将其性能作为整个应用程序的一部分来进行评估,能够对函数段代码进行了全面的搜索,以找到所有可能的优化选项,通过比较优化后函数的执行时间来选择性能最佳的代码进行链接和最终的可执行文件生成,从而达到有效地提高生成的代码的性能的目的。
23.在一种可选的实施方式中,对程序源代码进行函数提取得到多个函数文件,包括:
24.对程序源代码进行函数识别得到多个第三函数;
25.对所述多个第三函数分别设置计时函数,得到多个第一函数;
26.将所述多个第一函数分别进行提取,得到多个函数文件。
27.本发明提供的提高代码性能方法,通过对提取的函数设置计时函数,能够达到对优化后函数的性能进行量化处理的目的,从而判断出优化器对函数的优化效果,为每个函数选择优化效果最佳的优化器提供了可能。
28.在一种可选的实施方式中,所述方法还包括:
29.根据与同一个优化器对应的多个第一可执行文件中第二函数的函数名和执行时间,构建多个执行时间文件;所述执行时间文件包含被同一优化器优化处理得到的多个第二函数的函数名和执行时间,所述多个执行时间文件与所述多个优化器一一对应。
30.本发明提供的提高代码性能方法,通过建立与优化器对应的执行时间文件,执行时间文件包含被同一优化器优化处理得到的多个第二函数的函数名和执行时间,能够有效判断出每个优化器对每个第一函数的优化效果,为每个函数选择优化效果最佳的优化器提供了可能。
31.在一种可选的实施方式中,所述方法还包括:
32.步骤1:利用读取函数对目标执行时间文件进行元素提取得到元素列表;
33.步骤2:对所述元素列表中的每个元素进行分割处理得到被同一优化器优化处理得到的多个第二函数的函数名和执行时间;
34.步骤3:将多个第二函数的函数名作为键,多个第二函数对应的执行时间作为值,生成用于记录多个第二函数执行时间的第一字典;
35.步骤4:将所述多个执行时间文件中的每个执行时间文件分别作为目标执行时间文件,重复上述步骤1至步骤3,得到多个第一字典;所述多个第一字典与所述多个优化器一一对应。
36.本发明提供的提高代码性能方法,通过对执行时间文件进行处理,生成第一字典,能够有效判断出每个优化器对每个第一函数的优化效果,为每个函数选择优化效果最佳的优化器提供了可能。
37.在一种可选的实施方式中,所述基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器,包括:
38.从所述多个第一字典中筛选出与目标函数文件的第一函数具有相同函数名的多个第二函数,所述目标函数文件表示多个函数文件中的任意一个
39.将所述多个第二函数的执行时间进行比较;
40.将具有最少执行时间的第二函数对应的优化器作为目标优化器,所述目标优化器用于对所述目标函数文件进行优化处理。
41.本发明提供的提高代码性能方法,通过将多个第二函数的执行时间进行比较,以及将具有最少执行时间的第二函数对应的优化器作为目标优化器,能够为每个函数选择优化效果最佳的优化器,从而达到有效提高生成代码的目的。
42.第二方面,本发明提供了一种提高代码性能装置,包括:
43.函数提取模块,用于对程序源代码进行函数提取得到主体文件和多个函数文件;所述主体文件包含所述程序源代码的主体代码,每个所述函数文件包含一个第一函数;
44.优化处理模块,用于利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹;每个所述文件夹包含多个第一可执行文件,每个所述第一可执行文件包含一个第二函数,所述第二函数是由第一函数优化处理得到的,所述多个文件夹与所述多个优化器一一对应,所述多个第一可执行文件与所述多个函数文件一一对应;
45.执行时间确定模块,用于执行每个第一可执行文件,以确定每个第一可执行文件中第二函数的执行时间;
46.目标优化器选择模块,用于基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器。
47.第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的提高代码性能方法。
48.第四方面,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的提高代码性能方法。
附图说明
49.为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
50.图1为本发明提供的提高代码性能方法的流程示意图;
51.图2为本发明提供的提高代码性能方法的一种具体实施例的示意图;
52.图3为本发明提供的提高代码性能方法中关于文件夹的结构框图;
53.图4为本发明提供的提高代码性能方法的另一种具体实施例的示意图;
54.图5为本发明提供的提高代码性能方法中关于执行时间文件的结构框图;
55.图6为本发明提供的提高代码性能方法的又一种具体实施例的示意图;
56.图7为本发明提供的提高代码性能装置的结构框图;
57.图8是本发明提供的计算机设备的硬件结构示意图。
具体实施方式
58.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
59.根据本发明实施例,提供了一种提高代码性能方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
60.在本实施例中提供了一种提高代码性能方法,图1是根据本发明实施例的提高代码性能方法的流程图,如图1所示,该流程包括如下步骤:
61.步骤s101,对程序源代码进行函数提取得到主体文件和多个函数文件;所述主体文件包含所述程序源代码的主体代码,每个所述函数文件包含一个第一函数。
62.在该步骤中,程序源代码是指未编译的按照一定的程序设计语言规范书写的源文件;提取得到的主体文件与源文件在结构上相似,其区别点在于将源文件中的函数语句替换为对函数的调用,即对源文件进行函数提取得到的是一个将函数语句替换为函数调用的主体文件和多个函数文件。
63.更具体地,对于函数提取的具体实施方式在本发明中不做具体限定,通过函数提取可以得到一个主体文件和多个函数文件即可。例如可以通过重载rose编译器基础架构中sgtopdownbottomupprocessing类的evaluateinheritedattribute函数遍历源文件的ast分析原文件,以识别出多个函数语句;然后将每个函数语句分别以c++中的文件流的方式提取到一个独立可编译的文件中,通过这种方式可以将多个函数语句一一对应地提取到多个函数文件中,每个函数文件包含一个第一函数。
64.步骤s102,利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹;每个所述文件夹包含多个第一可执行文件,每个所述
第一可执行文件包含一个第二函数,所述第二函数是由第一函数优化处理得到的,所述多个文件夹与所述多个优化器一一对应。
65.在该步骤中,这里的多个优化器是指不同的优化器,可以理解为每个优化器对同一函数具有不同优化手段,以至于通过多个优化器对同一函数进行优化处理最终生成的多个可执行文件也具有作用相同但性能不同的特点。其中,优化器是指编译器,例如gnu gcc编译器、llvm clang编译器和arm compiler编译器以及基于多面体模型的循环编译器polly;可执行文件是指可以由操作系统进行加载执行的文件。
66.更具体地,每个优化器对一个主体文件和多个函数文件进行优化处理后都会得到一个文件夹,例如图2中优化器1对主体文件、函数文件1、函数文件2...以及函数文件n进行优化处理,得到文件夹1,又例如gcc编译器将生成"gcc\_prof"文件夹。每个文件夹中包含多个第一可执行文件,例如图3中文件夹1中包含第一可执行文件1、第一可执行文件2...以及第一可执行文件n。每个可执行文件又包含一个第二函数,其中第二函数是由第一函数优化处理得到的,因此,多个可执行文件与多个函数文件是一一对应的关系,例如第一可执行文件1与函数文件1是一一对应的,第一可执行文件2与函数文件2是一一对应的,第一可执行文件n与函数文件n是一一对应的。
67.步骤s103,执行每个第一可执行文件,以确定每个第一可执行文件中第二函数的执行时间。
68.在该步骤中,为了对比各个优化器对同一函数优化后的性能表现,需要在执行每个第一可执行文件的过程中计算出每个第一可执行文件中第二函数的执行时间。
69.以图2、3为例对上述步骤s103进行说明:
70.步骤1:确定与优化器1对应的文件夹1包含的n个第一可执行文件,例如第一可执行文件1(包含第二函数1)、第一可执行文件2(包含第二函数2)...以及第一可执行文件n(第二函数n);然后分别执行上述n个第一可执行文件,并计算每个第一可执行文件的第二函数的执行时间,例如优化器1-(第二函数1-执行时间1、第二函数2-执行时间2...以及第二函数n-执行时间n);
71.步骤2:通过上述步骤1的方法,计算与其他优化器(除优化器以外的优化器)对应的多个第一可执行文件的第二函数执行时间。
72.步骤s104,基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器。
73.通过以下实施例对步骤s104进行说明:
74.步骤1:从目标优化器(多个优化器中的任意一个)对应的多个第一可执行文件中筛选出与目标函数文件(多个函数文件1中的任意一个)对应的目标第一可执行文件,并确定目标第一可执行文件中第二函数的执行时间;其中目标第一可执行文件中的第二函数是由目标函数文件中的第一函数优化处理得到的。
75.以图2、3对上述步骤进行说明:目标函数文件为函数文件1,目标优化器为优化器1,从优化器1对应的多个第一可执行文件(第一可执行文件1、第一可执行文件2...以及第一可执行文件n)中筛选出第一可执行文件1,并确定第一可执行文件1中第二函数的执行时间a。
76.步骤2:按照上述步骤1从每个优化器对应的多个第一可执行文件中选择与目标函
数文件对应的多个目标第一可执行文件。例如:从优化器1对应的多个第一可执行文件中筛选出一个目标第一可执行文件1,从优化器2对应的多个第一可执行文件中筛选出一个目标第一可执行文件2,从优化器n对应的多个第一可执行文件中筛选出一个目标第一可执行文件n,由此可以得到n个与目标函数文件对应的目标第一可执行文件。
77.步骤3:将多个目标第一可执行文件的第二函数执行时间进行比对,将其中执行时间最少的第二函数的第一可执行文件的优化器作为目标优化器,所述目标优化器用于目标函数文件进行优化。例如:当得到目标第一可执行文件1的第二函数执行时间a、目标第一可执行文件2的第二函数执行时间b...以及目标第一可执行文件n的第二函数执行时间n,然后比较第二函数执行时间a、b....以及n的大小,当第二函数执行时间a最小时,将与第二函数执行时间a的第一可执行文件对应的优化器作为目标优化器,用于对目标函数文件进行优化编译。
78.在一些可选的实施方式中,所述提高代码性能方法还包括以下步骤:
79.步骤s105:对所述多个函数文件分别使用对应的目标优化器进行编译处理,生成多个第一可重定向文件;所述多个第一可重定向文件与所述多个函数文件一一对应。
80.具体地,如图4所示:在通过上述步骤s104为每个函数文件选择出具有最佳优化效果的目标优化器的基础上,对每个函数文件使用对应的目标优化器进行优化编译,得到第一可重定向文件。这里的可重定向文件主要用于编译和链接阶段,用于与其他文件合成为一个可执行文件。
81.步骤s106:对所述主体文件使用初始优化器进行编译处理,生成第二可重定向文件。
82.具体地,如图4所示:初始优化器可以是指默认优化器,对于所有函数替换为函数调用的主体文件,可以通过默认优化器进行优化编译生成第二可重定向文件。
83.步骤s107:对所述第二可重定向文件和所述多个第一可重定向文件进行合成处理,得到第二可执行文件。
84.具体地,当通过优化编译得到一个第二可重定向文件和多个第一可重定向文件后,可以将所有可重定向文件进行链接合成得到优化后的可执行文件。
85.在一些可选的实施方式中,上述步骤s102还包括以下步骤:
86.步骤1:使用目标优化器对所述主体文件进行编译处理,得到第三可重定向文件。
87.步骤2:使用所述目标优化器分别对所述多个函数文件进行编译处理,得到多个第四可重定向文件;所述多个函数文件与所述多个第四可重定向文件一一对应。
88.步骤3:将所述第三可重定向文件分别与所述多个第四可重定向文件进行合成处理,得到多个第一可执行文件;所述多个第一可执行文件与所述多个第四可重定向文件一一对应。
89.例如当存在第三可重定向文件1、第四可重定向文件1、第四可重定向文件2以及第四可重定向文件3时,第三可重定向文件1与第四可重定向文件1进行链接合成得到第一可执行文件1,第三可重定向文件1与第四可重定向文件2进行链接合成得到第一可执行文件2,第三可重定向文件1与第四可重定向文件3进行链接合成得到第一可执行文件3。
90.步骤4:基于所述多个第一可执行文件生成与所述目标优化器对应的所述文件夹。例如目标优化器为gcc编译器,则生成"gcc\_prof"文件夹,在该文件夹中包含gcc编译器针
对每个函数文件生成的优化后的第一可执行文件。
91.步骤5:将所述多个优化器中的每个优化器分别作为目标优化器,重复上述步骤1至步骤4,得到多个文件夹;所述多个文件夹与所述多个优化器一一对应。例如图2中优化器1对应文件夹1、优化器2对应文件夹2...优化器n对应文件夹n。
92.在一些可选的实施方式中,上述步骤s101还包括以下步骤:
93.步骤s1011,对程序源代码进行函数识别得到多个第三函数。
94.步骤s1012,对所述多个第三函数分别设置计时函数,得到多个第一函数。
95.步骤s1013,将所述多个第一函数分别进行提取,得到多个函数文件。
96.在上述步骤中,第三函数是指通过函数提取得到的函数,第一函数是指在提取出来的第三函数前后添加计时函数后得到的函数;第二函数是指第一函数被优化器优化处理得到的函数。其中计时函数可以为gettimeofday计时函数。
97.本发明通过在提取出来的第三函数前后添加的gettimeofday计时函数,可以在执行每个优化器优化后的第一可执行文件的过程中可计算出第一可执行文件中第二函数的性能数据,即第二函数执行时间,可以用于分析优化器对第一函数的优化效果。
98.在一些可选的实施方式中,所述方法还包括:
99.根据与同一个优化器对应的多个第一可执行文件中第二函数的函数名和执行时间,构建多个执行时间文件;所述执行时间文件包含被同一优化器优化处理得到的多个第二函数的函数名和执行时间,所述多个执行时间文件与所述多个优化器一一对应。
100.具体地,当通过上述步骤s103计算出同一个优化器对应的多个第一可执行文件中第二函数的执行时间后,可以通过多个第一可执行文件中第二函数的函数名和执行时间建立与上述同一个优化器对应的执行时间文件,例如图5所示,与优化器1对应的执行时间文件1,该执行时间文件1中的每一行都存储了一个与优化器1对应的第一可执行文件中第二函数的函数名以及对应的执行时间,例如第二函数1-执行时间1、第二函数2-执行时间2以及第二函数3-执行时间3。
101.在一些可选的实施方式中,所述方法还包括:
102.步骤1:利用读取函数对目标执行时间文件进行元素提取得到元素列表。
103.步骤2:对所述元素列表中的每个元素进行分割处理得到被同一优化器优化处理得到的多个第二函数的函数名和执行时间。
104.步骤3:将多个第二函数的函数名作为键,多个第二函数对应的执行时间作为值,生成用于记录多个第二函数执行时间的第一字典。
105.步骤4:将所述多个执行时间文件中的每个执行时间文件分别作为目标执行时间文件,重复上述步骤1至步骤3,得到多个第一字典;所述多个第一字典与所述多个优化器一一对应。
106.具体地,如图6所示,可以从不同优化器对应的执行时间文件中提取性能数据,即执行时间文件中第二函数的执行时间;并基于提取出的第二函数的函数名和执行时间建立与优化器对应的第一字典。
107.在上述步骤1至步骤4中,为了正确地从执行时间文件中提取出所有函数的性能数据进行处理,并生成存储不同优化器优化后的所有函数名及其执行时间的字典,探索器中的数据提取器使用了python中的读取函数(readlines函数)对文件进行逐行提取。
readlines()函数是python的内置文件对象方法,其主要功能是按行读取文本文件中的内容。该方法将文件中的每一行作为一个字符串元素,将所有这些元素组合成一个列表并返回。换句话说,readlines()会将文本文件转换为一个包含多个字符串元素的列表,每个元素代表文件中的一行。在使用readlines()函数时,用户需要首先利用open()函数打开文件,然后通过调用readlines()方法来按行读取文件内容。在得到readlines函数返回的列表之后,依次对列表中的每个元素进行分割得到函数名以及函数对应的执行时间,并以函数名为key、函数对应的时间为value存储至字典中。最终为每个优化器生成一个记录函数时间的字典。
108.在一些可选的实施方式中,步骤s104还包括:
109.步骤s1041,从所述多个第一字典中筛选出与目标函数文件的第一函数具有相同函数名的多个第二函数,所述目标函数文件表示多个函数文件中的任意一个。
110.具体地,每个第一字典中均存在一个与目标函数文件的第一函数具有相同函数名的第二函数。
111.步骤s1042,将所述多个第二函数的执行时间进行比较。
112.步骤s1043,将具有最少执行时间的第二函数对应的优化器作为目标优化器,所述目标优化器用于对所述目标函数文件进行优化处理。
113.具体地,如图6所示:在生成了存储不同优化器优化后的所有函数名及其执行时间的多个第一字典后,通过最佳优化器选择算法对每个函数文件选择具有最少执行时间的优化器作为后续合成阶段的目标优化器。最佳选择器选择算法流程为:假设共有n个优化器,则共有n个优化器对应的第一字典,其key值为函数名,value值为执行时间。假设有m个函数需要选择,算法核心为两层循环:外层循环遍历字典中所有的函数名,一共遍历m次;内层循环针对选取的一个函数,首先将该函数对应最少执行时间指定为某个优化器优化后的执行时间,然后依次读取其他剩余的优化器优化后的执行时间并进行比较,每一轮比较都将函数的最少执行时间置为比较过程中的较小值,并记录对应的优化器,一共进行n-1次比较。最终选择算法将为每一个函数选择一个执行时间最少所对应的优化器,即选择算法选择的目标优化器。
114.在一些可选的实施方式中,如图6所示:所述方法还包括:
115.根据每个函数文件以及其对应的目标优化器生成第二字典;所述第二字典中存储了每个函数文件以及对应的最少执行时间的目标优化器,第二字典的key为第一函数的函数名,字典的value为对应的目标优化器。
116.具体地,探索器中的编译脚本生成器将根据第二字典依次为每个函数文件生成对应最优的优化器的编译命令,最后脚本生成器将所有的编译优化命令打包生成一个用于合成第二可执行文件的编译脚本,用于后续合成器的使用。
117.技术效果:
118.1、本发明能够针对应用程序中的每个函数进行优化,使用不同的代码优化器来优化各个函数,并在执行完整应用程序时测量每个优化版本的性能,选择性能最佳的代码版本生成完整的应用程序二进制代码。能够为编译器用户提供为其目标应用程序找到最佳可能解决方案的方法,并为编译器编写人员提供启发式的编译器性能优化方法。该框架集成了gnu gcc、llvm clang和arm compiler的代码优化器以及基于多面体模型的循环优化器
polly。同时多编译融合优化框架可以轻松地集成可用代码优化器的更新版本和更新配置,以及添加新的代码优化器。该方法利用了多个编译器的优点,同时绕过单个编译器的缺点,从而使生成的目标代码的性能更好。
119.2.本发明通过多种代码优化器分别优化每个提取出的函数,并将其性能作为整个应用程序的一部分来进行评估。框架对函数段代码进行了全面的搜索,以找到所有可能的优化选项,通过比较后选择性能最佳的代码进行链接和最终的可执行文件生成,从而达到能够有效地提高生成的代码的性能的目的。
120.在本实施例中还提供了一种提高代码性能装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
121.本实施例提供一种提高代码性能装置,如图7所示,包括:
122.函数提取模块,用于对程序源代码进行函数提取得到主体文件和多个函数文件;所述主体文件包含所述程序源代码的主体代码,每个所述函数文件包含一个第一函数;
123.优化处理模块,用于利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹;每个所述文件夹包含多个第一可执行文件,每个所述第一可执行文件包含一个第二函数,所述第二函数是由第一函数优化处理得到的,所述多个文件夹与所述多个优化器一一对应,所述多个第一可执行文件与所述多个函数文件一一对应;
124.执行时间确定模块,用于执行每个第一可执行文件,以确定每个第一可执行文件中第二函数的执行时间;
125.目标优化器选择模块,用于基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器。
126.在一些可选的实施方式中,所述提高代码性能装置还包括:
127.第一编译模块,用于对所述多个函数文件分别使用对应的目标优化器进行编译处理,生成多个第一可重定向文件;所述多个第一可重定向文件与所述多个函数文件一一对应;
128.第二编译模块,用于对所述主体文件使用初始优化器进行编译处理,生成第二可重定向文件;
129.合成模块,用于对所述第二可重定向文件和所述多个第一可重定向文件进行合成处理,得到第二可执行文件。
130.在一些可选的实施方式中,所述优化处理模块,包括:
131.第一编译单元,用于使用目标优化器对所述主体文件进行编译处理,得到第三可重定向文件;
132.第二编译单元,用于使用所述目标优化器分别对所述多个函数文件进行编译处理,得到多个第四可重定向文件;所述多个函数文件与所述多个第四可重定向文件一一对应;
133.合成单元,用于将所述第三可重定向文件分别与所述多个第四可重定向文件进行合成处理,得到多个第一可执行文件;所述多个第一可执行文件与所述多个第四可重定向
文件一一对应;
134.文件夹生成单元,用于基于所述多个第一可执行文件生成与所述目标优化器对应的所述文件夹;
135.重复执行单元,用于将所述多个优化器中的每个优化器分别作为目标优化器,重复执行上述第一编译单元、第二编译单元、合成单元和文件夹生成单元,得到多个文件夹;所述多个文件夹与所述多个优化器一一对应。
136.在一些可选的实施方式中,函数提取模块,包括:
137.函数识别单元,用于对程序源代码进行函数识别得到多个第三函数;
138.设置计时单元,用于对所述多个第三函数分别设置计时函数,得到多个第一函数;
139.函数提取单元,用于将所述多个第一函数分别进行提取,得到多个函数文件。
140.在一些可选的实施方式中,所述提高代码性能装置还包括:
141.执行时间文件构建模块,用于根据与同一个优化器对应的多个第一可执行文件中第二函数的函数名和执行时间,构建多个执行时间文件;所述执行时间文件包含被同一优化器优化处理得到的多个第二函数的函数名和执行时间,所述多个执行时间文件与所述多个优化器一一对应。
142.在一些可选的实施方式中,所述提高代码性能装置还包括:
143.元素提取单元,用于利用读取函数对目标执行时间文件进行元素提取得到元素列表;
144.元素分割单元,用于对所述元素列表中的每个元素进行分割处理得到被同一优化器优化处理得到的多个第二函数的函数名和执行时间;
145.第一字典生成单元,用于将多个第二函数的函数名作为键,多个第二函数对应的执行时间作为值,生成用于记录多个第二函数执行时间的第一字典;
146.第二重复执行单元,用于将所述多个执行时间文件中的每个执行时间文件分别作为目标执行时间文件,重复上述元素提取单元、元素分割单元和第一字典生成单元,得到多个第一字典;所述多个第一字典与所述多个优化器一一对应。
147.在一些可选的实施方式中,所述目标优化器选择模块,包括:
148.第二函数筛选单元,用于从所述多个第一字典中筛选出与目标函数文件的第一函数具有相同函数名的多个第二函数,所述目标函数文件表示多个函数文件中的任意一个;
149.执行时间比较单元,用于将所述多个第二函数的执行时间进行比较;
150.目标优化器选择单元,用于将具有最少执行时间的第二函数对应的优化器作为目标优化器,所述目标优化器用于对所述目标函数文件进行优化处理。
151.上述各个模块和单元的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
152.本发明实施例还提供一种计算机设备,具有上述图7所示的提高代码性能装置。
153.请参阅图8,图8是本发明可选实施例提供的一种计算机设备的结构示意图,如图8所示,该计算机设备包括:一个或多个处理器10、存储器20,以及用于连接各部件的接口,包括高速接口和低速接口。各个部件利用不同的总线互相通信连接,并且可以被安装在公共主板上或者根据需要以其它方式安装。处理器可以对在计算机设备内执行的指令进行处理,包括存储在存储器中或者存储器上以在外部输入/输出装置(诸如,耦合至接口的显示
设备)上显示gui的图形信息的指令。在一些可选的实施方式中,若需要,可以将多个处理器和/或多条总线与多个存储器和多个存储器一起使用。同样,可以连接多个计算机设备,各个设备提供部分必要的操作(例如,作为服务器阵列、一组刀片式服务器、或者多处理器系统)。图8中以一个处理器10为例。
154.处理器10可以是中央处理器,网络处理器或其组合。其中,处理器10还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路,可编程逻辑器件或其组合。上述可编程逻辑器件可以是复杂可编程逻辑器件,现场可编程逻辑门阵列,通用阵列逻辑或其任意组合。
155.其中,所述存储器20存储有可由至少一个处理器10执行的指令,以使所述至少一个处理器10执行实现上述实施例示出的方法。
156.存储器20可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器20可以包括高速随机存取存储器,还可以包括非瞬时存储器,例如至少一个磁盘存储器件、闪存器件、或其他非瞬时固态存储器件。在一些可选的实施方式中,存储器20可选包括相对于处理器10远程设置的存储器,这些远程存储器可以通过网络连接至该计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
157.存储器20可以包括易失性存储器,例如,随机存取存储器;存储器也可以包括非易失性存储器,例如,快闪存储器,硬盘或固态硬盘;存储器20还可以包括上述种类的存储器的组合。
158.该计算机设备还包括通信接口30,用于该计算机设备与其他设备或通信网络通信。
159.本发明实施例还提供了一种计算机可读存储介质,上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可记录在存储介质,或者被实现通过网络下载的原始存储在远程存储介质或非暂时机器可读存储介质中并将被存储在本地存储介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件的存储介质上的这样的软件处理。其中,存储介质可为磁碟、光盘、只读存储记忆体、随机存储记忆体、快闪存储器、硬盘或固态硬盘等;进一步地,存储介质还可以包括上述种类的存储器的组合。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件,当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现上述实施例示出的方法。
160.虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
技术特征:
1.一种提高代码性能方法,其特征在于,所述方法包括:对程序源代码进行函数提取得到主体文件和多个函数文件;所述主体文件包含所述程序源代码的主体代码,每个所述函数文件包含一个第一函数;利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹;每个所述文件夹包含多个第一可执行文件,每个所述第一可执行文件包含一个第二函数,所述第二函数是由第一函数优化处理得到的,所述多个文件夹与所述多个优化器一一对应;执行每个第一可执行文件,以确定每个第一可执行文件中第二函数的执行时间;基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器。2.根据权利要求1所述的提高代码性能方法,其特征在于,所述方法还包括:对所述多个函数文件分别使用对应的目标优化器进行编译处理,生成多个第一可重定向文件;所述多个第一可重定向文件与所述多个函数文件一一对应;对所述主体文件使用初始优化器进行编译处理,生成第二可重定向文件;对所述第二可重定向文件和所述多个第一可重定向文件进行合成处理,得到第二可执行文件。3.根据权利要求1或2所述的提高代码性能方法,其特征在于,所述利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹,包括:步骤1:使用目标优化器对所述主体文件进行编译处理,得到第三可重定向文件;步骤2:使用所述目标优化器分别对所述多个函数文件进行编译处理,得到多个第四可重定向文件;所述多个函数文件与所述多个第四可重定向文件一一对应;步骤3:将所述第三可重定向文件分别与所述多个第四可重定向文件进行合成处理,得到多个第一可执行文件;所述多个第一可执行文件与所述多个第四可重定向文件一一对应;步骤4:基于所述多个第一可执行文件生成与所述目标优化器对应的所述文件夹;步骤5:将所述多个优化器中的每个优化器分别作为目标优化器,重复上述步骤1至步骤4,得到多个文件夹;所述多个文件夹与所述多个优化器一一对应。4.根据权利要求1或2所述的提高代码性能方法,其特征在于,对程序源代码进行函数提取得到多个函数文件,包括:对程序源代码进行函数识别得到多个第三函数;对所述多个第三函数分别设置计时函数,得到多个第一函数;将所述多个第一函数分别进行提取,得到多个函数文件。5.根据权利要求1或2所述的提高代码性能方法,其特征在于,所述方法还包括:根据与同一个优化器对应的多个第一可执行文件中第二函数的函数名和执行时间,构建多个执行时间文件;所述执行时间文件包含被同一优化器优化处理得到的多个第二函数的函数名和执行时间,所述多个执行时间文件与所述多个优化器一一对应。6.根据权利要求5所述的提高代码性能方法,其特征在于,所述方法还包括:步骤1:利用读取函数对目标执行时间文件进行元素提取得到元素列表;
步骤2:对所述元素列表中的每个元素进行分割处理得到被同一优化器优化处理得到的多个第二函数的函数名和执行时间;步骤3:将多个第二函数的函数名作为键,多个第二函数对应的执行时间作为值,生成用于记录多个第二函数执行时间的第一字典;步骤4:将所述多个执行时间文件中的每个执行时间文件分别作为目标执行时间文件,重复上述步骤1至步骤3,得到多个第一字典;所述多个第一字典与所述多个优化器一一对应。7.根据权利要求6所述的提高代码性能方法,其特征在于,所述基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器,包括:从所述多个第一字典中筛选出与目标函数文件的第一函数具有相同函数名的多个第二函数,所述目标函数文件表示多个函数文件中的任意一个将所述多个第二函数的执行时间进行比较;将具有最少执行时间的第二函数对应的优化器作为目标优化器,所述目标优化器用于对所述目标函数文件进行优化处理。8.一种提高代码性能装置,其特征在于,所述装置包括:函数提取模块,用于对程序源代码进行函数提取得到主体文件和多个函数文件;所述主体文件包含所述程序源代码的主体代码,每个所述函数文件包含一个第一函数;优化处理模块,用于利用多个优化器中的每个优化器分别对所述主体文件和所述多个函数文件进行优化处理,得到多个文件夹;每个所述文件夹包含多个第一可执行文件,每个所述第一可执行文件包含一个第二函数,所述第二函数是由第一函数优化处理得到的,所述多个文件夹与所述多个优化器一一对应;执行时间确定模块,用于执行每个第一可执行文件,以确定每个第一可执行文件中第二函数的执行时间;目标优化器选择模块,用于基于每个第一可执行文件中第二函数的执行时间,从所述多个优化器中为每个所述函数文件选择目标优化器。9.一种计算机设备,其特征在于,包括:存储器和处理器,所述存储器和所述处理器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而执行权利要求1至7中任一项所述的提高代码性能方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机指令,所述计算机指令用于使计算机执行权利要求1至7中任一项所述的提高代码性能方法。
技术总结
本发明涉及计算机技术领域,公开了提高代码性能方法、装置、计算机设备及存储介质。方法包括:对程序源代码进行函数提取得到主体文件和多个函数文件;利用多个优化器中的每个优化器分别对主体文件和多个函数文件进行优化处理,得到多个文件夹;每个文件夹包含多个第一可执行文件,每个第一可执行文件包含一个第二函数,第二函数是由第一函数优化处理得到的,多个文件夹与多个优化器一一对应;执行每个第一可执行文件,以确定每个第一可执行文件中第二函数的执行时间;基于每个第一可执行文件中第二函数的执行时间,从多个优化器中为每个函数文件选择目标优化器。本发明能够有效提高生成代码的性能。成代码的性能。成代码的性能。
技术研发人员:周诚 张涛 马媛媛 管小娟 李伟伟 罗富财 谢静怡 郭蔡炜
受保护的技术使用者:国网福建省电力有限公司 国家电网有限公司
技术研发日:2023.06.13
技术公布日:2023/9/9
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/