CN116880811A - 确定编译优化选项的方法、电子设备、可读存储介质 - Google Patents
确定编译优化选项的方法、电子设备、可读存储介质 Download PDFInfo
- Publication number
- CN116880811A CN116880811A CN202210315215.7A CN202210315215A CN116880811A CN 116880811 A CN116880811 A CN 116880811A CN 202210315215 A CN202210315215 A CN 202210315215A CN 116880811 A CN116880811 A CN 116880811A
- Authority
- CN
- China
- Prior art keywords
- source code
- information corresponding
- optimization
- prediction model
- compiling
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000005457 optimization Methods 0.000 title claims abstract description 192
- 238000000034 method Methods 0.000 title claims abstract description 72
- 238000012549 training Methods 0.000 claims description 68
- 238000013479 data entry Methods 0.000 claims description 37
- 230000006870 function Effects 0.000 claims description 28
- 238000004590 computer program Methods 0.000 claims description 5
- 238000013528 artificial neural network Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 7
- 238000012545 processing Methods 0.000 description 7
- 230000000694 effects Effects 0.000 description 6
- 210000002569 neuron Anatomy 0.000 description 4
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 230000000306 recurrent effect Effects 0.000 description 2
- 238000010276 construction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000007723 transport mechanism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/425—Lexical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Health & Medical Sciences (AREA)
- General Health & Medical Sciences (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Molecular Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请提供了一种确定编译优化选项的方法、电子设备、计算机可读存储介质,该方法包括:将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码;分别获取每一个第二源代码对应的特征信息,将每一个所述第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
Description
技术领域
本申请实施例涉及软件工程技术领域,特别涉及确定编译优化选项的方法、电子设备、计算机可读存储介质。
背景技术
现代编译器的优化能力越来越强,编译过程中可以对被编译的代码进行更多的深度优化,从而使得编译出来的制品具有更好的运行时性能,比如运行时消耗的内存资源更少,或者运行速度更快等。但是,编译器的复杂程度也越来越高,比如广泛使用的GNU编译器套件(GCC,GNU Compiler Collection)编译器就具有200~400个编译优化选项,同一个编译优化选项对于不同的代码具有不同的优化效果,而不同的优化选项对于相同的代码的优化效果也不一样,多个不同编译优化选项叠加也具有不同的优化效果。那么对于给定的源代码,究竟应该使用哪些编译优化选项才能使得编译输出的制品具有尽可能好的运行时性能呢?回答这个问题,涉及到数百个编译优化选项的组合应用,理论上,假设每一个编译优化选项只有两种状态,即使用或者不使用,那么寻找理想编译优化选项组合的搜索空间是2200~400,这是天文数字,远远超出了优秀软件工程师的掌控能力。况且,很多编译优化选项还不只有两个状态,可以取多种不同的值,比如-fvect-cost-model选项可以取值为unlimited、dynamic和cheap,也就是说,实际搜索空间比2200~400更大,找到理想编译优化选项组合的难度也就更大,这是人力不可为的任务。
此外,一个大型软件工程通常只使用一套编译优化选项组合,或者至多对不同的子目录应用不同的编译优化选项组合。但是,大型软件工程往往包含成千上万个文件,同一套编译优化选项组合可能不一定适用于所有文件,从而使得软件工程整体的运行性能较低。
发明内容
本申请实施例提供一种确定编译优化选项的方法、电子设备、计算机可读存储介质。
第一方面,本申请实施例提供一种确定编译优化选项的方法,包括:将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码;分别获取每一个第二源代码对应的特征信息,将每一个所述第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
第二方面,本申请实施例提供一种电子设备,包括:至少一个处理器;存储器,存储器上存储有至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
第三方面,本申请实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
本申请实施例提供的确定编译优化选项的方法,针对预先设置的拆分级别对第一源代码进行拆分得到至少一个第二源代码,针对每一个第二源代码单独根据预先训练好的预测模型对第二源代码对应的第一编译优化选项进行预测,而不是针对第一源代码进行统一预测,实现了更加精细化的编译优化选项的优化,从而使得软件工程对应的编译输出制品具有更好的运行时性能;并且,是基于预先训练好的预测模型进行预测,而不需要对软件工程进行多次编译,也不需要运行程序采集数据,缩短了编译优化选项的优化时间,提高了优化效率。
附图说明
图1为相关技术中普通编译器的组成框图;
图2为本申请实施例的一种智能编译器的组成框图;
图3为本申请实施例的另一种智能编译器的组成框图;
图4为本申请一个实施例提供的确定编译优化选项的方法的流程图;
图5为本申请另一个实施例提供的模型训练方法的流程图;
图6为本申请另一个实施例提供的确定编译优化选项的装置的组成框图;
图7为本申请另一个实施例提供的模型训练装置的组成框图。
具体实施方式
为使本领域的技术人员更好地理解本申请的技术方案,下面结合附图对本申请提供的确定编译优化选项的方法、电子设备、计算机可读存储介质进行详细描述。
在下文中将参考附图更充分地描述示例实施例,但是所述示例实施例可以以不同形式来体现且不应当被解释为限于本文阐述的实施例。反之,提供这些实施例的目的在于使本申请透彻和完整,并将使本领域技术人员充分理解本申请的范围。
在不冲突的情况下,本申请各实施例及实施例中的各特征可相互组合。
如本文所使用的,术语“和/或”包括至少一个相关列举条目的任何和所有组合。
本文所使用的术语仅用于描述特定实施例,且不意欲限制本申请。如本文所使用的,单数形式“一个”和“该”也意欲包括复数形式,除非上下文另外清楚指出。还将理解的是,当本说明书中使用术语“包括”和/或“由……制成”时,指定存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或添加至少一个其它特征、整体、步骤、操作、元件、组件和/或其群组。
除非另外限定,否则本文所用的所有术语(包括技术和科学术语)的含义与本领域普通技术人员通常理解的含义相同。还将理解,诸如那些在常用字典中限定的那些术语应当被解释为具有与其在相关技术以及本申请的背景下的含义一致的含义,且将不解释为具有理想化或过度形式上的含义,除非本文明确如此限定。
在介绍本申请实施例的确定编译优化选项的方法之前,首先介绍普通编译器进行程序编译的过程,如图1所示,普通编译器包括:词法分析模块101、语法分析模块102、语义分析模块103、代码优化模块104和目标码生成模块105。
其中,将源代码和用户输入的编译优化选项输入到普通编译器中,语法分析模块102输出的是源代码的抽象语法树(AST,Abstract Syntax Tree),语义分析模块103输出的是控制流图(CFG,Control Flow Graph)和数据流图(DFG,Data Flow Graph),用户输入的编译优化选项在词法分析模块101、语法分析模块102和语义分析模块103中透传,并输入到代码优化模块104中,代码优化模块104根据AST、CFG和DFG,以及用户输入的编译优化选项和默认设置的编译优化选项进行代码优化,目标码生成模块105根据优化结果生成目标码,目标码即为源代码编译得到的输出制品。
在本申请的一些示例性实施例中,对普通编译器进行改造,在普通编译器的语义分析模块103和代码优化模块104之间增加插件106从而得到本申请实施例的智能编译器,如图2所示,通过增加的插件106实现对将输入的第一源代码进行拆分得到的第二源代码对应的第一编译优化选项进行预测,即插件106实现了下文描述的预测模型的功能。除此之外,在词法分析模块101之前,需要将输入的第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码,使得后续词法分析模块101、语法分析模块102和语义分析模块103的分析对象是第二源代码而不是第一源代码。在一示例性的实施方式中,可以在词法分析模块101之前增加一个拆分模块107实现拆分的功能,如图2所示。
在本申请的另一些示例性实施例中,也可以不采用插件的方式实现预测模型,而是采用代码实现,即与普通编译器的代码融合在一起。
在本申请的另一些示例性实施例中,对普通编译器进行改造,在普通编译器的词法分析模块之前增加预测模块108得到本申请实施例的智能编译器,如图3所示,预测模块108用于实现本申请实施例的确定编译优化选项的方法。
图4为本申请一个实施例提供的确定编译优化选项的方法的流程图。
第一方面,参照图4,本申请一个实施例提供一种确定编译优化选项的方法,可以包括下述操作。
步骤400、将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码。
在本申请实施例中,第一源代码可以是包括一个或一个以上文件中的所有源代码,文件中的源代码可以是包括一个或一个以上函数以及数据结构定义和变量声明的源代码中的至少一个。
在本申请实施例中,拆分级别可以根据实际情况进行设置。在一些示例性实施例中,预先设置的拆分级别包括文件级,以及第二源代码包括同一个文件中的源代码;或者,预先设置的拆分级别包括函数级,以及第二源代码包括同一个函数中的源代码。
在一些示例性实施例中,拆分级别可以由用户预先设置,也可以默认设置。
步骤401、分别获取每一个第二源代码对应的特征信息,将每一个第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个第二源代码对应的第一编译优化选项。
在一些示例性实施例中,特征信息包括以下至少之一:AST;CFG和DFG。
在一些示例性实施例中,第二源代码对应的AST可以通过对第二源代码进行词法分析和语法分析得到,第二源代码对应的CFG和DFG可以通过对第二源代码进行词法分析、语法分析和语义分析得到。
在一些示例性实施例中,将第二源代码对应的第一编译优化选项应用到第二源代码的编译中,能够获得比编译器默认的编译优化选项(比如-02,-03等)显著更好的优化效果。
在一些示例性实施例中,将每一个第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个第二源代码对应的第一编译优化选项。在另一些示例性实施例中,将每一个第二源代码对应的特征信息和第二源代码对应的目标运行环境信息输入到预先训练好的预测模型中得到每一个第二源代码对应的第一编译优化选项。
在本申请实施例中,第二源代码对应的目标运行环境信息是指第一源代码编译得到的输出制品所在的运行环境信息。在一些示例性实施例中,目标运行环境信息包括:硬件信息和操作系统环境信息。
在一些示例性实施例中,硬件信息包括以下至少之一:中央处理器(CPU,CenterProcessing Unit)类型和缓存(cache)容量。
在一些示例性实施例中,操作系统环境信息包括以下至少之一:操作系统(OS,Operation System)类型和OS版本号。
在一些示例性实施例中,将第二源代码对应的特征信息输入到预先训练好的预测模型中得到第二源代码对应的第一编译优化选项后,该方法还包括:根据每一个第二源代码对应的第一编译优化选项对每一个第二源代码进行代码优化。
在一些示例性实施例中,根据每一个第二源代码对应的第一编译优化选项对每一个第二源代码进行编译。在另一些示例性实施例中,根据每一个第二源代码对应的第一编译优化选项和用户输入的第三编译优化选项对每一个第二源代码进行编译。其中,用户输入的第三编译优化选项可以由用户自定义。
在本申请实施例中,不同第二源代码对应的第一编译优化选项可以相同,也可以不同。在不同第二源代码对应的第一编译优化选项不同的情况下,需要对不同的第二源代码采用不同的第一编译优化选项进行编译。
在一些示例性实施例中,将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码之前,该方法还包括:构造数据集;其中,数据集包括至少一个数据条目,每一个数据条目包括:第三源代码和对应的第二编译优化选项;分别获取每一个数据条目中的第三源代码对应的特征信息;根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型;其中,模型训练过程中将第三源代码对应的特征信息作为预测模型的输入,将第二编译优化选项作为预测模型的输出。
在一些示例性实施例中,将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码之前,该方法还包括:构造数据集;其中,数据集包括至少一个数据条目,每一个数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项;根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型;其中,模型训练过程中将第三源代码对应的特征信息作为预测模型的输入,将第二编译优化选项作为预测模型的输出。
在一些示例性实施例中,将第三源代码对应的第二编译优化选项应用到第三源代码的编译中,能够获得比编译器默认的编译优化选项(比如-02,-03等)显著更好的优化效果。例如,下文表1中,使用第二编译优化选项-falign-functions、-falign-labels、-fwrapv-fwrapv-pointer……编译第三源代码prog1得到的输出制品在目标运行环境(x86CPU、32MB缓存、OS是linux-4.9.299)上运行时,可以得到比-03等常规的编译优化选项更好的运行时性能。
在一些示例性实施例中,数据条目还包括:第三源代码对应的目标运行环境信息;根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型包括:根据第三源代码对应的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型;模型训练过程中将第三源代码对应的特征信息作为预测模型的输入包括:模型训练过程中将第三源代码对应的特征信息和第三源代码对应的目标运行环境信息作为预测模型的输入。
例如,如表1所示的数据集一共有n个数据条目,每一个数据条目包括:第三源代码、目标运行环境信息和第二编译优化选项。
表1
在本申请实施例中,可以采用本领域技术人员熟知的模型训练方法实现对预测模型的训练。在一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。在另一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。
在一些示例性实施例中,第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
在本申请实施例中,用于模型训练的数据集中的所有数据条目中的第三源代码均为同一个文件中的源代码;或者,用于模型训练的数据集中的所有数据条目中的第三源代码均为同一个函数中的源代码;或者,用于模型训练的数据集中的部分数据条目中的第三源代码为同一个文件中的源代码,部分数据条目中的第三源代码为同一个函数中的源代码。本申请实施例对此不作限定。
在本申请实施例中,第三源代码对应的目标运行环境信息是指第三源代码编译得到的输出制品所在的运行环境信息。在一些示例性实施例中,目标运行环境信息包括:硬件信息和操作系统环境信息。
在一些示例性实施例中,硬件信息包括以下至少之一:中央处理器(CPU,CenterProcessing Unit)类型和缓存(cache)容量。
在一些示例性实施例中,操作系统环境信息包括以下至少之一:操作系统(OS,Operation System)类型和OS版本号。
在一些示例性实施例中,预测模型可以是本领域技术人员熟知的任何一种机器学习模型。例如循环神经网络、全连接神经网络、图神经网络、混合神经网络等。
在一些示例性实施例中,预测模型的输出是一个向量,向量的元素个数与编译器中的编译优化选项的数量相同,向量的元素的取值表示对应的编译优化选项的状态值。例如,如表2所示,编译器GCC-9.2.0支持的编译优化选项有243个,那么,预测模型的输出是一个包含243个元素的向量,每一个元素的取值表示这个元素对应的编译优化选项的状态值。
在本申请实施例中,可以对编译器的每一个编译优化选项进行编号,编译优化选项的编号与该编译优化选项所在的元素的下标相同。鉴于下标从0开始,编译优化选项的编号也可以从0开始,如表2所示。那么,如表1所示的第一行的向量可以表示为(0,1,0,1,0...0,1),也就是编号为1、3、……、242的元素为1,其余元素为0,这里假设每一个编译优化选项仅有打开和关闭两种状态,那么可以用1表示打开,0表示关闭。
表2
序号 | 编译优化选项 |
0 | -faggressive-loop-optimizations |
1 | -falign-functions |
2 | -falign-jumps |
3 | -falign-labels |
4 | -falign-loops |
5 | -fassociative-math |
… | …… |
242 | -fwrapv-fwrapv-pointer |
在一些示例性实施例中,编译优化选项的状态值可以包括打开和关闭两种状态值,也可以包括其他可能的状态值。比如-fvect-cost-model选项可以取值为unlimited、dynamic和cheap三种状态值。
本申请实施例提供的确定编译优化选项的方法,针对预先设置的拆分级别对第一源代码进行拆分得到至少一个第二源代码,针对每一个第二源代码单独根据预先训练好的预测模型对第二源代码对应的第一编译优化选项进行预测,而不是针对第一源代码进行统一预测,实现了更加精细化的编译优化选项的优化,从而使得软件工程对应的编译输出制品具有更好的运行时性能;并且,是基于预先训练好的预测模型进行预测,而不需要对软件工程进行多次编译,也不需要运行程序采集数据,缩短了编译优化选项的优化时间,提高了优化效率。
图5为本申请另一个实施例提供的模型训练方法的流程图。
第二方面,参照图5,本申请另一个实施例提供一种模型训练方法,包括:
步骤500、构造数据集;其中,数据集包括至少一个数据条目,每一个数据条目包括:第三源代码和对应的第二编译优化选项;或者,每一个数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项。
在一些示例性实施例中,将第三源代码对应的第二编译优化选项应用到第三源代码的编译中,能够获得比编译器默认的编译优化选项(比如-02,-03等)显著更好的优化效果。例如,下文表1中,使用第二编译优化选项-falign-functions、-falign-1abels、-fwrapv-fwrapv-pointer……编译第三源代码prog1得到的输出制品在目标运行环境(x86CPU、32MB缓存、OS是linux-4.9.299)上运行时,可以得到比-03等常规的编译优化选项更好的运行时性能。
在一些示例性实施例中,数据条目还包括:第三源代码对应的目标运行环境信息。例如,如表1所示的数据集一共有n个数据条目,每一个数据条目包括:第三源代码、目标运行环境信息和第二编译优化选项;或者,每一个数据条目包括:第三源代码对应的特征信息、目标运行环境信息和第二编译优化选项。
在本申请实施例中,第三源代码对应的目标运行环境信息是指第三源代码编译得到的输出制品所在的运行环境信息。在一些示例性实施例中,目标运行环境信息包括:硬件信息和操作系统环境信息。
在一些示例性实施例中,硬件信息包括以下至少之一:CPU类型和缓存容量。
在一些示例性实施例中,操作系统环境信息包括以下至少之一:OS类型和OS版本号。
在一些示例性实施例中,第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
在本申请实施例中,用于模型训练的数据集中的所有数据条目中的第三源代码均为同一个文件中的源代码;或者,用于模型训练的数据集中的所有数据条目中的第三源代码均为同一个函数中的源代码;或者,用于模型训练的数据集中的部分数据条目中的第三源代码为同一个文件中的源代码,部分数据条目中的第三源代码为同一个函数中的源代码。本申请实施例对此不作限定。
在一些示例性实施例中,在每一个数据条目包括:第三源代码、目标运行环境信息和第二编译优化选项的情况下,分别获取每一个数据条目中的第三源代码对应的特征信息。
在一些示例性实施例中,特征信息包括以下至少之一:AST;CFG和DFG。
步骤501,根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型;其中,模型训练过程中将第三源代码对应的特征信息作为预测模型的输入,将第二编译优化选项作为预测模型的输出。
在一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型包括:根据第三源代码对应的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型;
模型训练过程中将第三源代码对应的特征信息作为预测模型的输入包括:模型训练过程中将第三源代码对应的特征信息和第三源代码对应的目标运行环境信息作为预测模型的输入。
在本申请实施例中,可以采用本领域技术人员熟知的模型训练方法实现对预测模型的训练。在一些示例性实施例中,根据第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。在另一些示例性实施例中,根据第三源代码的特征信息和对应的第二编译优化选项,以及第三源代码对应的目标运行环境信息进行模型训练得到预测模型包括:分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到预测模型中得到对应的编译优化选项的预测值;根据第三源代码对应的编译优化选项的预测值和第三源代码对应的第二编译优化选项计算出损失函数值;采用随机梯度下降等反向传播算法调整预测模型中各个神经元之间的连接权重;继续执行分别将每一个数据条目中的第三源代码对应的特征信息和第三源代码对应的目标运行环境信息输入到调整后的预测模型中得到对应的编译优化选项的预测值的步骤,直到损失函数的值满足预设条件。
在一些示例性实施例中,预测模型可以是本领域技术人员熟知的任何一种机器学习模型。例如循环神经网络、全连接神经网络、图神经网络、混合神经网络等。
在一些示例性实施例中,预测模型的输出是一个向量,向量的元素个数与编译器中的编译优化选项的数量相同,向量的元素的取值表示对应的编译优化选项的状态值。例如,如表2所示,编译器GCC-9.2.0支持的编译优化选项有243个,那么,预测模型的输出是一个包含243个元素的向量,每一个元素的取值表示这个元素对应的编译优化选项的状态值。
在本申请实施例中,可以对编译器的每一个编译优化选项进行编号,编译优化选项的编号与该编译优化选项所在的元素的下标相同。鉴于下标从0开始,编译优化选项的编号也可以从0开始,如表2所示。那么,如表1所示的第一行的向量可以表示为(0,1,0,1,0...0,1),也就是编号为1、3、……、242的元素为1,其余元素为0,这里假设每一个编译优化选项仅有打开和关闭两种状态,那么可以用1表示打开,0表示关闭。
在一些示例性实施例中,编译优化选项的状态值可以包括打开和关闭两种状态值,也可以包括其他可能的状态值。比如-fvect-cost-model选项可以取值为unlimited、dynamic和cheap三种状态值。
第三方面,本申请另一个实施例提供一种电子设备,包括:至少一个处理器;存储器,存储器上存储有至少一个程序,当至少一个程序被至少一个处理器执行时,实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
其中,处理器为具有数据处理能力的器件,其包括但不限于中央处理器(CPU)等;存储器为具有数据存储能力的器件,其包括但不限于随机存取存储器(RAM,更具体如SDRAM、DDR等)、只读存储器(ROM)、带电可擦可编程只读存储器(EEPROM)、闪存(FLASH)。
在一些实施例中,处理器、存储器通过总线相互连接,进而与计算设备的其它组件连接。
第四方面,本申请另一个实施例提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述任意一种确定编译优化选项的方法,或上述任意一种模型训练方法。
图6为本申请另一个实施例提供的确定编译优化选项的装置的组成框图。
第五方面,参照图6,本申请另一个实施例提供一种确定编译优化选项的装置,包括:拆分模块601,用于将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码;预测模块602,用于分别获取每一个第二源代码对应的特征信息,将每一个第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
在一些示例性实施例中,还包括:编译模块603,用于根据每一个第二源代码对应的第一编译优化选项对每一个所述第二源代码进行代码优化。
在一些示例性实施例中,还包括:第一模型训练模块604,用于构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码和对应的第二编译优化选项;分别获取每一个数据条目中的第三源代码对应的特征信息;根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
在一些示例性实施例中,还包括:第一模型训练模块604,用于构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项;根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
在一些示例性实施例中,所述数据条目还包括:所述第三源代码对应的目标运行环境信息;第一模型训练模块604具体用于采用以下方式实现所述根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型:根据所述第三源代码对应的特征信息和对应的第二编译优化选项,以及所述第三源代码对应的目标运行环境信息进行模型训练得到所述预测模型;
第一模型训练模块604具体用于采用以下方式实现所述模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入:模型训练过程中将所述第三源代码对应的特征信息和所述第三源代码对应的目标运行环境信息作为所述预测模型的输入。
在一些示例性实施例中,所述第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
在一些示例性实施例中,所述拆分级别包括文件级,所述第二源代码包括同一个文件中的源代码;或者,所述拆分级别包括函数级,所述第二源代码包括同一个函数中的源代码。
在一些示例性实施例中,所述特征信息包括以下至少之一:AST;CFG和DFG。
在一些示例性实施例中,预测模块602具体用于采用以下方式实现所述将每一个所述第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项:将每一个所述第二源代码对应的特征信息和所述第二源代码对应的目标运行环境信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
在一些示例性实施例中,所述目标运行环境信息包括:硬件信息和操作系统环境信息。
上述确定编译优化选项的装置的具体实现过程与前述实施例中确定编译优化选项的方法的具体实现过程相同,这里不再赘述。
图7为本申请另一个实施例提供的模型训练装置的组成框图。
第六方面,参照图7,本申请另一个实施例提供一种模型训练装置,包括:构造模块701,用于构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码和对应的第二编译优化选项;或者,每一个所述数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项;第二模块训练模块702,用于根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
在一些示例性实施例中,所述数据条目还包括:所述第三源代码对应的目标运行环境信息;第二模型训练模块702具体用于采用以下方式实现所述根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型:根据所述第三源代码对应的特征信息和对应的第二编译优化选项,以及所述第三源代码对应的目标运行环境信息进行模型训练得到所述预测模型;
所述模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入包括:模型训练过程中将所述第三源代码对应的特征信息和所述第三源代码对应的目标运行环境信息作为所述预测模型的输入。
在一些示例性实施例中,所述目标运行环境信息包括:硬件信息和操作系统环境信息。
在一些示例性实施例中,所述第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
在一些示例性实施例中,还包括:特征信息获取模块703,用于分别获取每一个所述数据条目中的所述第三源代码对应的特征信息。
在一些示例性实施例中,所述特征信息包括以下至少之一:AST;CFG和DFG。
上述模型训练装置的具体实现过程与前述实施例中模型训练方法的具体实现过程相同,这里不再赘述。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、装置中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其它数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光盘存储、磁盒、磁带、磁盘存储或其它磁存储器、或者可以用于存储期望的信息并且可以被计算机访问的任何其它的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其它传输机制之类的调制数据信号中的其它数据,并且可包括任何信息递送介质。
本文已经公开了示例实施例,并且虽然采用了具体术语,但它们仅用于并仅应当被解释为一般说明性含义,并且不用于限制的目的。在一些实例中,对本领域技术人员显而易见的是,除非另外明确指出,否则可单独使用与特定实施例相结合描述的特征、特性和/或元素,或可与其它实施例相结合描述的特征、特性和/或元件组合使用。因此,本领域技术人员将理解,在不脱离由所附的权利要求阐明的本申请的范围的情况下,可进行各种形式和细节上的改变。
Claims (11)
1.一种确定编译优化选项的方法,包括:
将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码;
分别获取每一个第二源代码对应的特征信息;
将每一个所述第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
2.根据权利要求1所述的确定编译优化选项的方法,该方法还包括:
根据每一个所述第二源代码对应的第一编译优化选项对每一个所述第二源代码进行代码优化。
3.根据权利要求1所述的确定编译优化选项的方法,所述将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码之前,该方法还包括:
构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码和对应的第二编译优化选项;
分别获取每一个所述数据条目中的所述第三源代码对应的特征信息;
根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
4.根据权利要求1所述的确定编译优化选项的方法,所述将第一源代码按照预先设置的拆分级别拆分成至少一个第二源代码之前,该方法还包括:
构造数据集;其中,所述数据集包括至少一个数据条目,每一个所述数据条目包括:第三源代码对应的特征信息和对应的第二编译优化选项;
根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型;其中,模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入,将所述第二编译优化选项作为所述预测模型的输出。
5.根据权利要求3或4所述的确定编译优化选项的方法,其中,所述数据条目还包括:所述第三源代码对应的目标运行环境信息;
所述根据所述第三源代码对应的特征信息和对应的第二编译优化选项进行模型训练得到所述预测模型包括:根据所述第三源代码对应的特征信息和对应的第二编译优化选项,以及所述第三源代码对应的目标运行环境信息进行模型训练得到所述预测模型;
所述模型训练过程中将所述第三源代码对应的特征信息作为所述预测模型的输入包括:模型训练过程中将所述第三源代码对应的特征信息和所述第三源代码对应的目标运行环境信息作为所述预测模型的输入。
6.根据权利要求3或4所述的确定编译优化选项的方法,其中,所述第三源代码包括:同一个文件中的源代码;或者,同一个函数中的源代码。
7.根据权利要求1-4任意一项所述的确定编译优化选项的方法,其中,所述预先设置的拆分级别包括文件级,以及所述第二源代码包括同一个文件中的源代码;
或者,所述预先设置的拆分级别包括函数级,以及所述第二源代码包括同一个函数中的源代码。
8.根据权利要求1-4任意一项所述的确定编译优化选项的方法,其中,所述将每一个所述第二源代码对应的特征信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项包括:
将每一个所述第二源代码对应的特征信息和所述第二源代码对应的目标运行环境信息输入到预先训练好的预测模型中得到每一个所述第二源代码对应的第一编译优化选项。
9.根据权利要求8所述的确定编译优化选项的方法,其中,所述目标运行环境信息包括:硬件信息和操作系统环境信息。
10.一种电子设备,包括:
至少一个处理器;
存储器,所述存储器上存储有至少一个程序,当所述至少一个程序被所述至少一个处理器执行时,实现权利要求1-9任意一项所述的确定编译优化选项的方法。
11.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-9任意一项所述的确定编译优化选项的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210315215.7A CN116880811A (zh) | 2022-03-28 | 2022-03-28 | 确定编译优化选项的方法、电子设备、可读存储介质 |
PCT/CN2023/084388 WO2023185842A1 (zh) | 2022-03-28 | 2023-03-28 | 确定编译优化选项的方法、电子设备、可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210315215.7A CN116880811A (zh) | 2022-03-28 | 2022-03-28 | 确定编译优化选项的方法、电子设备、可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116880811A true CN116880811A (zh) | 2023-10-13 |
Family
ID=88199215
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210315215.7A Pending CN116880811A (zh) | 2022-03-28 | 2022-03-28 | 确定编译优化选项的方法、电子设备、可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116880811A (zh) |
WO (1) | WO2023185842A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117170686B (zh) * | 2023-11-03 | 2024-03-12 | 深圳鲲云信息科技有限公司 | 用于神经网络编译优化的方法及计算设备 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9727317B2 (en) * | 2015-11-04 | 2017-08-08 | International Business Machines Corporation | Optimized compilation using an auto-tuned compiler as a service |
CN109542443A (zh) * | 2017-07-27 | 2019-03-29 | 阿里巴巴集团控股有限公司 | 应用程序的编译方法及装置、计算机终端、数据处理方法 |
CN111444513B (zh) * | 2019-11-14 | 2024-03-12 | 中国电力科学研究院有限公司 | 一种电网嵌入式终端的固件编译优化选项识别方法及装置 |
CN112748914B (zh) * | 2020-03-18 | 2023-09-19 | 腾讯科技(深圳)有限公司 | 一种应用程序开发方法、装置、电子设备和存储介质 |
-
2022
- 2022-03-28 CN CN202210315215.7A patent/CN116880811A/zh active Pending
-
2023
- 2023-03-28 WO PCT/CN2023/084388 patent/WO2023185842A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2023185842A1 (zh) | 2023-10-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kauers et al. | Ore polynomials in Sage | |
Banjac et al. | Embedded code generation using the OSQP solver | |
Castelli et al. | A C++ framework for geometric semantic genetic programming | |
US9864590B2 (en) | Method and system for automated improvement of parallelism in program compilation | |
US8799878B2 (en) | Multi level virtual function tables | |
CN113283613B (zh) | 深度学习模型的生成方法、优化方法、装置、设备及介质 | |
US9823911B2 (en) | Method and apparatus for compiling code based on a dependency tree | |
US20160110171A1 (en) | Compiler optimization for complex exponential calculations | |
CN109976743B (zh) | 一种代码提示的方法及装置 | |
US20130346354A1 (en) | Forward inferencing of facts in parallel | |
CN116880811A (zh) | 确定编译优化选项的方法、电子设备、可读存储介质 | |
CN106294530B (zh) | 规则匹配的方法和系统 | |
Helmbold et al. | Two processor scheduling is in NC | |
Zhang et al. | Distance-aware selective online query processing over large distributed graphs | |
CN115485663A (zh) | 为执行计算规则的计算装置产生指令的设备和方法 | |
CN116628136A (zh) | 基于声明式推理的协同查询处理方法、系统、电子设备 | |
JP2017111749A (ja) | 計算コード生成装置、方法及びプログラム | |
US20110238667A1 (en) | B-Tree Ordinal Approximation | |
Breyer et al. | Performance-portable distributed k-nearest neighbors using locality-sensitive hashing and sycl | |
CN111552477B (zh) | 数据处理方法和装置 | |
Liu et al. | Matrox: modular approach for improving data locality in hierarchical (mat) rix app (rox) imation | |
Seiferth et al. | Offsite autotuning approach: performance model driven autotuning applied to parallel explicit ODE methods | |
Zhukov | Ways of synthesizing binary programs admitting recursive call of procedures | |
RU2691860C1 (ru) | Способ распараллеливания программ в среде логического программирования в вычислительной системе | |
CN103106283B (zh) | 去重处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |