1.本技术实施例涉及软件工程技术领域,特别涉及确定编译优化选项的方法、电子设备、计算机可读存储介质。
背景技术:
2.现代编译器的优化能力越来越强,编译过程中可以对被编译的代码进行更多的深度优化,从而使得编译出来的制品具有更好的运行时性能,比如运行时消耗的内存资源更少,或者运行速度更快等。但是,编译器的复杂程度也越来越高,比如广泛使用的gnu编译器套件(gcc,gnu compiler collection)编译器就具有200~400个编译优化选项,同一个编译优化选项对于不同的代码具有不同的优化效果,而不同的优化选项对于相同的代码的优化效果也不一样,多个不同编译优化选项叠加也具有不同的优化效果。那么对于给定的源代码,究竟应该使用哪些编译优化选项才能使得编译输出的制品具有尽可能好的运行时性能呢?回答这个问题,涉及到数百个编译优化选项的组合应用,理论上,假设每一个编译优化选项只有两种状态,即使用或者不使用,那么寻找理想编译优化选项组合的搜索空间是2
200~400
,这是天文数字,远远超出了优秀软件工程师的掌控能力。况且,很多编译优化选项还不只有两个状态,可以取多种不同的值,比如-fvect-cost-model选项可以取值为unlimited、dynamic和cheap,也就是说,实际搜索空间比2
200~400
更大,找到理想编译优化选项组合的难度也就更大,这是人力不可为的任务。
3.此外,一个大型软件工程通常只使用一套编译优化选项组合,或者至多对不同的子目录应用不同的编译优化选项组合。但是,大型软件工程往往包含成千上万个文件,同一套编译优化选项组合可能不一定适用于所有文件,从而使得软件工程整体的运行性能较低。
技术实现要素:
4.本技术实施例提供一种确定编译优化选项的方法、电子设备、计算机可读存储介质。
5.第一方面,本技术实施例提供一种确定编译优化选项的方法,包括:将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码;分别获取每一个第二源代码对应的特征信息,将每一个所述第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
6.第二方面,本技术实施例提供一种电子设备,包括:至少一个处理器;存储器,存储器上存储有至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
7.第三方面,本技术实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
8.本技术实施例提供的确定编译优化选项的方法,针对预先设置的拆分级别对第一源代码进行拆分得到至少一个第二源代码,针对每一个第二源代码单独根据预先训练好的预测模型对第二源代码对应的第一编译优化选项进行预测,而不是针对第一源代码进行统一预测,实现了更加精细化的编译优化选项的优化,从而使得软件工程对应的编译输出制品具有更好的运行时性能;并且,是基于预先训练好的预测模型进行预测,而不需要对软件工程进行多次编译,也不需要运行程序采集数据,缩短了编译优化选项的优化时间,提高了优化效率。
附图说明
9.图1为相关技术中普通编译器的组成框图;
10.图2为本技术实施例的一种智能编译器的组成框图;
11.图3为本技术实施例的另一种智能编译器的组成框图;
12.图4为本技术一个实施例提供的确定编译优化选项的方法的流程图;
13.图5为本技术另一个实施例提供的模型训练方法的流程图;
14.图6为本技术另一个实施例提供的确定编译优化选项的装置的组成框图;
15.图7为本技术另一个实施例提供的模型训练装置的组成框图。
具体实施方式
16.为使本领域的技术人员更好地理解本技术的技术方案,下面结合附图对本技术提供的确定编译优化选项的方法、电子设备、计算机可读存储介质进行详细描述。
17.在下文中将参考附图更充分地描述示例实施例,但是所述示例实施例可以以不同形式来体现且不应当被解释为限于本文阐述的实施例。反之,提供这些实施例的目的在于使本技术透彻和完整,并将使本领域技术人员充分理解本技术的范围。
18.在不冲突的情况下,本技术各实施例及实施例中的各特征可相互组合。
19.如本文所使用的,术语“和/或”包括至少一个相关列举条目的任何和所有组合。
20.本文所使用的术语仅用于描述特定实施例,且不意欲限制本技术。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由
……
制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加至少一个其它特征、整体、步骤、操作、元件、组件和/或其群组。
21.除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本技术的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
22.在介绍本技术实施例的确定编译优化选项的方法之前,首先介绍普通编译器进行程序编译的过程,如图1所示,普通编译器包括:词法分析模块101、语法分析模块102、语义分析模块103、代码优化模块104和目标码生成模块105。
23.其中,将源代码和用户输入的编译优化选项输入到普通编译器中,语法分析模块102输出的是源代码的抽象语法树(ast,abstract syntax tree),语义分析模块103输出的
是控制流图(cfg,control flow graph)和数据流图(dfg,data flow graph),用户输入的编译优化选项在词法分析模块101、语法分析模块102和语义分析模块103中透传,并输入到代码优化模块104中,代码优化模块104根据ast、cfg和dfg,以及用户输入的编译优化选项和默认设置的编译优化选项进行代码优化,目标码生成模块105根据优化结果生成目标码,目标码即为源代码编译得到的输出制品。
24.在本技术的一些示例性实施例中,对普通编译器进行改造,在普通编译器的语义分析模块103和代码优化模块104之间增加插件106从而得到本技术实施例的智能编译器,如图2所示,通过增加的插件106实现对将输入的第一源代码进行拆分得到的第二源代码对应的第一编译优化选项进行预测,即插件106实现了下文描述的预测模型的功能。除此之外,在词法分析模块101之前,需要将输入的第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码,使得后续词法分析模块101、语法分析模块102和语义分析模块103的分析对象是第二源代码而不是第一源代码。在一示例性的实施方式中,可以在词法分析模块101之前增加一个拆分模块107实现拆分的功能,如图2所示。
25.在本技术的另一些示例性实施例中,也可以不采用插件的方式实现预测模型,而是采用代码实现,即与普通编译器的代码融合在一起。
26.在本技术的另一些示例性实施例中,对普通编译器进行改造,在普通编译器的词法分析模块之前增加预测模块108得到本技术实施例的智能编译器,如图3所示,预测模块108用于实现本技术实施例的确定编译优化选项的方法。
27.图4为本技术一个实施例提供的确定编译优化选项的方法的流程图。
28.第一方面,参照图4,本技术一个实施例提供一种确定编译优化选项的方法,可以包括下述操作。
29.步骤400、将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码。
30.在本技术实施例中,第一源代码可以是包括一个或一个以上文件中的所有源代码,文件中的源代码可以是包括一个或一个以上函数以及数据结构定义和变量声明的源代码中的至少一个。
31.在本技术实施例中,拆分级别可以根据实际情况进行设置。在一些示例性实施例中,预先设置的拆分级别包括文件级,以及第二源代码包括同一个文件中的源代码;或者,预先设置的拆分级别包括函数级,以及第二源代码包括同一个函数中的源代码。
32.在一些示例性实施例中,拆分级别可以由用户预先设置,也可以默认设置。
33.步骤401、分别获取每一个第二源代码对应的特征信息,将每一个第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个第二源代码对应的第一编译优化选项。
34.在一些示例性实施例中,特征信息包括以下至少之一:ast;cfg和dfg。
35.在一些示例性实施例中,第二源代码对应的ast可以通过对第二源代码进行词法分析和语法分析得到,第二源代码对应的cfg和dfg可以通过对第二源代码进行词法分析、语法分析和语义分析得到。
36.在一些示例性实施例中,将第二源代码对应的第一编译优化选项应用到第二源代码的编译中,能够获得比编译器默认的编译优化选项(比如-02,-03等)显著更好的优化效果。
37.在一些示例性实施例中,将每一个第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个第二源代码对应的第一编译优化选项。在另一些示例性实施例中,将每一个第二源代码对应的特征信息和第二源代码对应的目标运行环境信息输入到预先训练好的预测模型中得到每一个第二源代码对应的第一编译优化选项。
38.在本技术实施例中,第二源代码对应的目标运行环境信息是指第一源代码编译得到的输出制品所在的运行环境信息。在一些示例性实施例中,目标运行环境信息包括:硬件信息和操作系统环境信息。
39.在一些示例性实施例中,硬件信息包括以下至少之一:中央处理器(cpu,center processing unit)类型和缓存(cache)容量。
40.在一些示例性实施例中,操作系统环境信息包括以下至少之一:操作系统(os,operation system)类型和os版本号。
41.在一些示例性实施例中,将第二源代码对应的特征信息输入到预先训练好的预测模型中得到第二源代码对应的第一编译优化选项后,该方法还包括:根据每一个第二源代码对应的第一编译优化选项对每一个第二源代码进行代码优化。
42.在一些示例性实施例中,根据每一个第二源代码对应的第一编译优化选项对每一个第二源代码进行编译。在另一些示例性实施例中,根据每一个第二源代码对应的第一编译优化选项和用户输入的第三编译优化选项对每一个第二源代码进行编译。其中,用户输入的第三编译优化选项可以由用户自定义。
43.在本技术实施例中,不同第二源代码对应的第一编译优化选项可以相同,也可以不同。在不同第二源代码对应的第一编译优化选项不同的情况下,需要对不同的第二源代码采用不同的第一编译优化选项进行编译。
44.在一些示例性实施例中,将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码之前,该方法还包括:构造数据集;其中,数据集包括至少一个数据条目,每一个数据条目包括:第三源代码和对应的第二编译优化选项;分别获取每一个数据条目中的第三源代码对应的特征信息;根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型;其中,模型训练过程中将第三源代码对应的特征信息作为预测模型的输入,将第二编译优化选项作为预测模型的输出。
45.在一些示例性实施例中,将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码之前,该方法还包括:构造数据集;其中,数据集包括至少一个数据条目,每一个数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项;根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型;其中,模型训练过程中将第三源代码对应的特征信息作为预测模型的输入,将第二编译优化选项作为预测模型的输出。
46.在一些示例性实施例中,将第三源代码对应的第二编译优化选项应用到第三源代码的编译中,能够获得比编译器默认的编译优化选项(比如-02,-03等)显著更好的优化效果。例如,下文表1中,使用第二编译优化选项-falign-functions、-falign-labels、-fwrapv-fwrapv-pointer
……
编译第三源代码prog1得到的输出制品在目标运行环境(x86cpu、32mb缓存、os是linux-4.9.299)上运行时,可以得到比-03等常规的编译优化选项更好的运行时性能。
47.在一些示例性实施例中,数据条目还包括:第三源代码对应的目标运行环境信息;根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型包括:根据第三源代码对应的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型;模型训练过程中将第三源代码对应的特征信息作为预测模型的输入包括:模型训练过程中将第三源代码对应的特征信息和第三源代码对应的目标运行环境信息作为预测模型的输入。
48.例如,如表1所示的数据集一共有n个数据条目,每一个数据条目包括:第三源代码、目标运行环境信息和第二编译优化选项。
49.表1
[0050][0051]
在本技术实施例中,可以采用本领域技术人员熟知的模型训练方法实现对预测模型的训练。在一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。在另一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。
[0052]
在一些示例性实施例中,第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
[0053]
在本技术实施例中,用于模型训练的数据集中的所有数据条目中的第三源代码均
为同一个文件中的源代码;或者,用于模型训练的数据集中的所有数据条目中的第三源代码均为同一个函数中的源代码;或者,用于模型训练的数据集中的部分数据条目中的第三源代码为同一个文件中的源代码,部分数据条目中的第三源代码为同一个函数中的源代码。本技术实施例对此不作限定。
[0054]
在本技术实施例中,第三源代码对应的目标运行环境信息是指第三源代码编译得到的输出制品所在的运行环境信息。在一些示例性实施例中,目标运行环境信息包括:硬件信息和操作系统环境信息。
[0055]
在一些示例性实施例中,硬件信息包括以下至少之一:中央处理器(cpu,center processing unit)类型和缓存(cache)容量。
[0056]
在一些示例性实施例中,操作系统环境信息包括以下至少之一:操作系统(os,operation system)类型和os版本号。
[0057]
在一些示例性实施例中,预测模型可以是本领域技术人员熟知的任何一种机器学习模型。例如循环神经网络、全连接神经网络、图神经网络、混合神经网络等。
[0058]
在一些示例性实施例中,预测模型的输出是一个向量,向量的元素个数与编译器中的编译优化选项的数量相同,向量的元素的取值表示对应的编译优化选项的状态值。例如,如表2所示,编译器gcc-9.2.0支持的编译优化选项有243个,那么,预测模型的输出是一个包含243个元素的向量,每一个元素的取值表示这个元素对应的编译优化选项的状态值。
[0059]
在本技术实施例中,可以对编译器的每一个编译优化选项进行编号,编译优化选项的编号与该编译优化选项所在的元素的下标相同。鉴于下标从0开始,编译优化选项的编号也可以从0开始,如表2所示。那么,如表1所示的第一行的向量可以表示为(0,1,0,1,0...0,1),也就是编号为1、3、
……
、242的元素为1,其余元素为0,这里假设每一个编译优化选项仅有打开和关闭两种状态,那么可以用1表示打开,0表示关闭。
[0060]
表2
[0061]
序号编译优化选项0-faggressive-loop-optimizations1-falign-functions2-falign-jumps3-falign-labels4-falign-loops5-fassociative-math
………
242-fwrapv-fwrapv-pointer
[0062]
在一些示例性实施例中,编译优化选项的状态值可以包括打开和关闭两种状态值,也可以包括其他可能的状态值。比如-fvect-cost-model选项可以取值为unlimited、dynamic和cheap三种状态值。
[0063]
本技术实施例提供的确定编译优化选项的方法,针对预先设置的拆分级别对第一源代码进行拆分得到至少一个第二源代码,针对每一个第二源代码单独根据预先训练好的预测模型对第二源代码对应的第一编译优化选项进行预测,而不是针对第一源代码进行统一预测,实现了更加精细化的编译优化选项的优化,从而使得软件工程对应的编译输出制
品具有更好的运行时性能;并且,是基于预先训练好的预测模型进行预测,而不需要对软件工程进行多次编译,也不需要运行程序采集数据,缩短了编译优化选项的优化时间,提高了优化效率。
[0064]
图5为本技术另一个实施例提供的模型训练方法的流程图。
[0065]
第二方面,参照图5,本技术另一个实施例提供一种模型训练方法,包括:
[0066]
步骤500、构造数据集;其中,数据集包括至少一个数据条目,每一个数据条目包括:第三源代码和对应的第二编译优化选项;或者,每一个数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项。
[0067]
在一些示例性实施例中,将第三源代码对应的第二编译优化选项应用到第三源代码的编译中,能够获得比编译器默认的编译优化选项(比如-02,-03等)显著更好的优化效果。例如,下文表1中,使用第二编译优化选项-falign-functions、-falign-1abels、-fwrapv-fwrapv-pointer
……
编译第三源代码prog1得到的输出制品在目标运行环境(x86cpu、32mb缓存、os是linux-4.9.299)上运行时,可以得到比-03等常规的编译优化选项更好的运行时性能。
[0068]
在一些示例性实施例中,数据条目还包括:第三源代码对应的目标运行环境信息。例如,如表1所示的数据集一共有n个数据条目,每一个数据条目包括:第三源代码、目标运行环境信息和第二编译优化选项;或者,每一个数据条目包括:第三源代码对应的特征信息、目标运行环境信息和第二编译优化选项。
[0069]
在本技术实施例中,第三源代码对应的目标运行环境信息是指第三源代码编译得到的输出制品所在的运行环境信息。在一些示例性实施例中,目标运行环境信息包括:硬件信息和操作系统环境信息。
[0070]
在一些示例性实施例中,硬件信息包括以下至少之一:cpu类型和缓存容量。
[0071]
在一些示例性实施例中,操作系统环境信息包括以下至少之一:os类型和os版本号。
[0072]
在一些示例性实施例中,第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
[0073]
在本技术实施例中,用于模型训练的数据集中的所有数据条目中的第三源代码均为同一个文件中的源代码;或者,用于模型训练的数据集中的所有数据条目中的第三源代码均为同一个函数中的源代码;或者,用于模型训练的数据集中的部分数据条目中的第三源代码为同一个文件中的源代码,部分数据条目中的第三源代码为同一个函数中的源代码。本技术实施例对此不作限定。
[0074]
在一些示例性实施例中,在每一个数据条目包括:第三源代码、目标运行环境信息和第二编译优化选项的情况下,分别获取每一个数据条目中的第三源代码对应的特征信息。
[0075]
在一些示例性实施例中,特征信息包括以下至少之一:ast;cfg和dfg。
[0076]
步骤501,根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型;其中,模型训练过程中将第三源代码对应的特征信息作为预测模型的输入,将第二编译优化选项作为预测模型的输出。
[0077]
在一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化
选项进行模型训练得到预测模型包括:根据第三源代码对应的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型;
[0078]
模型训练过程中将第三源代码对应的特征信息作为预测模型的输入包括:模型训练过程中将第三源代码对应的特征信息和第三源代码对应的目标运行环境信息作为预测模型的输入。
[0079]
在本技术实施例中,可以采用本领域技术人员熟知的模型训练方法实现对预测模型的训练。在一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。在另一些示例性实施例中,根据第三源代码的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。
[0080]
在一些示例性实施例中,预测模型可以是本领域技术人员熟知的任何一种机器学习模型。例如循环神经网络、全连接神经网络、图神经网络、混合神经网络等。
[0081]
在一些示例性实施例中,预测模型的输出是一个向量,向量的元素个数与编译器中的编译优化选项的数量相同,向量的元素的取值表示对应的编译优化选项的状态值。例如,如表2所示,编译器gcc-9.2.0支持的编译优化选项有243个,那么,预测模型的输出是一个包含243个元素的向量,每一个元素的取值表示这个元素对应的编译优化选项的状态值。
[0082]
在本技术实施例中,可以对编译器的每一个编译优化选项进行编号,编译优化选项的编号与该编译优化选项所在的元素的下标相同。鉴于下标从0开始,编译优化选项的编号也可以从0开始,如表2所示。那么,如表1所示的第一行的向量可以表示为(0,1,0,1,0...0,1),也就是编号为1、3、
……
、242的元素为1,其余元素为0,这里假设每一个编译优化选项仅有打开和关闭两种状态,那么可以用1表示打开,0表示关闭。
[0083]
在一些示例性实施例中,编译优化选项的状态值可以包括打开和关闭两种状态值,也可以包括其他可能的状态值。比如-fvect-cost-model选项可以取值为unlimited、dynamic和cheap三种状态值。
[0084]
第三方面,本技术另一个实施例提供一种电子设备,包括:至少一个处理器;存储器,存储器上存储有至少一个程序,当至少一个程序被至少一个处理器执行时,实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
[0085]
其中,处理器为具有数据处理能力的器件,其包括但不限于中央处理器(cpu)等;
存储器为具有数据存储能力的器件,其包括但不限于随机存取存储器(ram,更具体如sdram、ddr等)、只读存储器(rom)、带电可擦可编程只读存储器(eeprom)、闪存(flash)。
[0086]
在一些实施例中,处理器、存储器通过总线相互连接,进而与计算设备的其它组件连接。
[0087]
第四方面,本技术另一个实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
[0088]
图6为本技术另一个实施例提供的确定编译优化选项的装置的组成框图。
[0089]
第五方面,参照图6,本技术另一个实施例提供一种确定编译优化选项的装置,包括:拆分模块601,用于将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码;预测模块602,用于分别获取每一个第二源代码对应的特征信息,将每一个第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
[0090]
在一些示例性实施例中,还包括:编译模块603,用于根据每一个第二源代码对应的第一编译优化选项对每一个所述第二源代码进行代码优化。
[0091]
在一些示例性实施例中,还包括:第一模型训练模块604,用于构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码和对应的第二编译优化选项;分别获取每一个数据条目中的第三源代码对应的特征信息;根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
[0092]
在一些示例性实施例中,还包括:第一模型训练模块604,用于构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项;根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
[0093]
在一些示例性实施例中,所述数据条目还包括:所述第三源代码对应的目标运行环境信息;第一模型训练模块604具体用于采用以下方式实现所述根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型:根据所述第三源代码对应的特征信息和对应的第二编译优化选项,以及所述第三源代码对应的目标运行环境信息进行模型训练得到所述预测模型;
[0094]
第一模型训练模块604具体用于采用以下方式实现所述模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入:模型训练过程中将所述第三源代码对应的特征信息和所述第三源代码对应的目标运行环境信息作为所述预测模型的输入。
[0095]
在一些示例性实施例中,所述第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
[0096]
在一些示例性实施例中,所述拆分级别包括文件级,所述第二源代码包括同一个文件中的源代码;或者,所述拆分级别包括函数级,所述第二源代码包括同一个函数中的源代码。
[0097]
在一些示例性实施例中,所述特征信息包括以下至少之一:ast;cfg和dfg。
[0098]
在一些示例性实施例中,预测模块602具体用于采用以下方式实现所述将每一个所述第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项:将每一个所述第二源代码对应的特征信息和所述第二源代码对应的目标运行环境信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
[0099]
在一些示例性实施例中,所述目标运行环境信息包括:硬件信息和操作系统环境信息。
[0100]
上述确定编译优化选项的装置的具体实现过程与前述实施例中确定编译优化选项的方法的具体实现过程相同,这里不再赘述。
[0101]
图7为本技术另一个实施例提供的模型训练装置的组成框图。
[0102]
第六方面,参照图7,本技术另一个实施例提供一种模型训练装置,包括:构造模块701,用于构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码和对应的第二编译优化选项;或者,每一个所述数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项;第二模块训练模块702,用于根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
[0103]
在一些示例性实施例中,所述数据条目还包括:所述第三源代码对应的目标运行环境信息;第二模型训练模块702具体用于采用以下方式实现所述根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型:根据所述第三源代码对应的特征信息和对应的第二编译优化选项,以及所述第三源代码对应的目标运行环境信息进行模型训练得到所述预测模型;
[0104]
所述模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入包括:模型训练过程中将所述第三源代码对应的特征信息和所述第三源代码对应的目标运行环境信息作为所述预测模型的输入。
[0105]
在一些示例性实施例中,所述目标运行环境信息包括:硬件信息和操作系统环境信息。
[0106]
在一些示例性实施例中,所述第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
[0107]
在一些示例性实施例中,还包括:特征信息获取模块703,用于分别获取每一个所述数据条目中的所述第三源代码对应的特征信息。
[0108]
在一些示例性实施例中,所述特征信息包括以下至少之一:ast;cfg和dfg。
[0109]
上述模型训练装置的具体实现过程与前述实施例中模型训练方法的具体实现过程相同,这里不再赘述。
[0110]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物
理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其它数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其它存储器技术、cd-rom、数字多功能盘(dvd)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储器、或者可以用于存储期望的信息并且可以被计算机访问的任何其它的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其它传输机制之类的调制数据信号中的其它数据,并且可包括任何信息递送介质。
[0111]
本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其它实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本技术的范围的情况下,可进行各种形式和细节上的改变。