CN102455897B - 基于实例的迭代编译方法及编译装置 - Google Patents
基于实例的迭代编译方法及编译装置 Download PDFInfo
- Publication number
- CN102455897B CN102455897B CN2010105232971A CN201010523297A CN102455897B CN 102455897 B CN102455897 B CN 102455897B CN 2010105232971 A CN2010105232971 A CN 2010105232971A CN 201010523297 A CN201010523297 A CN 201010523297A CN 102455897 B CN102455897 B CN 102455897B
- Authority
- CN
- China
- Prior art keywords
- eigenwert
- unit
- classification
- case library
- individual
- 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.)
- Active
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
一种基于实例的迭代编译方法及装置。所述编译方法包括:根据编译操作参数对待编译目标程序进行更新操作或应用操作;所述更新操作通过在迭代编译目标程序后形成新实例,并以实例库中的实例对新实例预测的结果确定是否将新实例添加至实例库中;所述应用操作在编译目标程序时,从实例库中获取与目标程序中特征值最相似的多个实例,以所获得的多个实例确定所述特征值的分类,并以此对目标程序进行编译。所述编译方法结合了迭代编译技术和机器学习方法,使得编译器既可以在优化空间中搜索最优参数,进行自动调优,提高编译器的性能;又可以充分利用历史积累数据,从实例库中学习,预测最优或者较优的参数,在提高性能同时尽可能降低编译所需的时间。
Description
技术领域
本发明涉及编译方法,特别涉及一种对迭代编译进行优化的编译方法及编译装置。
背景技术
在使用编译器时,通常有大量可选的编译优化选项和参数。随着硬件平台的体系结构的不断复杂,应用程序的持续性能与硬件平台峰值性能差距的不断扩大,如何选择最好的优化,提高程序在给定硬件平台上的性能是一个困难的问题。传统的编译器利用对体系结构和程序特征的静态建模来决定如何对程序进行优化,这难以适应日趋复杂的硬件平台和应用程序。
为应对日趋复杂的硬件平台和应用程序,迭代编译是一种有效的方法。具有迭代编译功能的编译器采用某种搜索策略,自动地对程序进行多次编译和执行,在优化空间寻找最优或者较优的点。
目前,这种迭代编译技术在很多编译器中已经出现。例如,PathScale编译器中的工具PathOpt2,可以通过多次的编译执行,在一定的优化空间中选择最好的优化。并且,在迭代的过程中,前期编译执行的结果可被用来指导后继的编译执行,指示搜索方向,尽可能的压缩搜索范围,提高搜索效率。
PathScale编译器的这种迭代编译的方法也被Grigori Fursin等人引入了Open64、GCC等编译器中。这些编译器内增加了一系列支持迭代编译的接口,通过调用这些接口,可以实现各种搜索策略,包括随机式搜索、穷尽式搜索、爬山式搜索和启发式搜索等。
然而,上述举例的编译器主要着力于在优化空间中采用何种搜索策略。在实际应用中,每次搜索都需要对程序重新进行编译和执行,因而迭代编译常常需要消耗大量的时间。如何充分利用搜索的结果,在编译新程序时尽可能避免迭代,是一个亟待解决的问题。
发明内容
本发明要解决的问题是提供一种结合机器学习和迭代编译的编译方法和编译装置,以减少迭代编译,并且在编译器的性能和效率之间获得较佳平衡。
为解决上述问题,本发明提供一种基于实例的迭代编译方法,包括:
在获得待编译的目标程序后,根据编译操作参数确定对目标程序执行更新操作或应用操作;
当确定对目标程序执行更新操作时,对所述目标程序进行迭代编译,获得经编译优化的目标程序,将经编译优化的目标程序中的特征值及其对应的特征值分类作为新实例;
对于每个新实例,若编译器实例库中没有至少k1个实例,则将所述新实例直接添加至编译器实例库中;
对于每个新实例,若编译器实例库中有至少k1个实例,从编译器实例库中查找k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似;以所述k1个实例对所述新实例进行预测,在预测结果为错误时,将所述新实例添加至所述编译器实例库中;
当确定对目标程序执行应用操作时,获取目标程序中的特征值;
对目标程序中的每个特征值,从所述编译器实例库中查找k2个实例,所述k2个实例中的特征值与所述特征值的当前值最相似,并以所述k2个实例中出现频率最高的特征值分类作为所述特征值的当前值对应的分类;
依据各特征值对应的分类对目标程序进行编译优化。
本发明还提供一种基于实例的迭代编译装置,包括:
编译参数设置单元、解析单元、实例库、优化单元、实例搜索单元、实例添加单元、实例分析单元及代码生成单元,其中,
编译参数设置单元,根据命令行参数或实例库实例数设置编译参数,并将经设置的编译参数发送至解析单元及优化单元;所述实例库实例数为根据解析单元发送的特征值所获得的对应实例库实例数;
解析单元,对所获得的目标程序进行解析获得目标程序中的各特征值;在所获得的编译参数指示应用操作时,将所获得的特征值发送至实例搜索单元;
优化单元,在所获得的编译参数指示更新操作时,对经解析单元解析的目标程序中的各特征值进行优化以获得对应的特征值分类,将特征值及对应的特征值分类发送至实例搜索单元;在所获得的编译参数指示应用操作时,依据所获得的实例分析单元发送的特征值分类后对所获得的经解析单元解析的目标程序中的各相应特征值进行优化;
实例搜索单元,在仅获得特征值时,从特征值对应实例库中搜索k2个实例,所述k2个实例中的特征值与所获得的特征值最相似,并将所获得的k2个实例发送至实例分析单元;在同时获得特征值及对应的特征值分类时,将所获得的特征值及对应的特征值分类作为一个新实例,从特征值对应实例库中搜索k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似,并将所获得的k1个实例和所述新实例发送至实例添加单元;
实例添加单元,以所获得的k1个实例对所述新实例进行预测,在预测结果为错误时,将所述新实例添加至实例库中;
实例分析单元,对所获得的k2个实例中的特征值分类进行分析,获得现频率最高的特征值分类,并将所述出现频率最高的特征值分类发送至优化单元;
代码生成单元,依据优化单元产生的优化结果将目标程序转换为目标代码。
与现有技术相比,上述编译方法具有以下优点:通过将迭代编译的搜索结果以实例的形式存入编译器实例库,并以编译器实例库中的实例对待编译的目标程序中的特征值进行分类,从而结合了迭代编译技术和机器学习方法,一方面通过迭代编译使得编译器可以在优化空间中搜索最优参数,进行自动调优,提高编译器的性能;另一方面又可以充分利用历史积累的迭代编译数据,通过从所述实例库中学习,预测最优或者较优的参数,在提高性能的同时尽可能降低编译所需的时间。
附图说明
图1是本发明基于实例的迭代编译方法的一种实施方式流程图;
图2是本发明基于实例的迭代编译方法的另一种实施方式的部分流程图;
图3是本发明基于实例的迭代编译装置的一种实施方式示意图;
图4是图3所示编译装置中的实例搜索单元的一种结构示意图;
图5是本发明基于实例的迭代编译装置的另一种实施方式示意图;
图6是图5所示编译装置中的实例库编辑单元的一种结构示意图。
具体实施方式
通过发明人对现有技术的编译器分析后发现,编译器在做优化时通常会采用静态建模的方式,也就是根据一组特征值的取值来决定是否采用某种优化或者选择怎样的优化参数。这些优化方式或优化参数可以被视为特征值的分类。例如,在决定循环展开因子的时候,特征值包括循环体的大小、循环迭代次数的估值等,不同的展开因子被视为特征值的不同分类。因此,发明人认为,不同的体系结构下,每种优化的特征值与其分类之间存在一种函数关系。若能确定函数的形式,则对编译器的优化有着重大的意义。而前面所述的编译器并未考虑如何利用迭代编译的搜索结果来确定函数的形式或者至少在某种程度上模拟函数的结果。
发明人还进一步发现,为了能够充分利用迭代的结果来实现上述确定函数形式或在某种程度上模拟函数结果的目的,可以在编译程序时采用基于实例的机器学习方法。具体地说,基于实例的机器学习方法将迭代编译的搜索结果视为一个训练实例,首先存储已知的训练实例(即迭代编译的历史搜索结果)到实例库中,当编译程序时遇到新的实例时,从库中取出一系列相似的实例,据此对新的实例进行分类。并且,依据对新的实例的分类进行程序的编译处理。
在此基础上,对于目前对越来越复杂的程序,以及可能越来越庞大的实例库,为了提高针对实例库的学习效率,发明人还设计了在编译程序时对实例库进行更新的方法。
基于上述构思,本发明基于实例的迭代编译方法的一种实施方式,参照图1所示,包括:
步骤s1,在获得待编译的目标程序后,根据编译操作参数确定对目标程序执行更新操作或应用操作;
步骤s2,当确定对目标程序执行更新操作时,对所述目标程序进行迭代编译,获得经编译优化的目标程序;
步骤s3,将经编译优化的目标程序中特征值及其对应的特征值分类作为新实例;
步骤s4,判断编译器实例库中是否有至少k1个实例,若没有,则执行步骤s5;若有,则执行步骤s6;
步骤s5,将所述新实例直接添加至编译器实例库中;
步骤s6,对于每个新实例,从编译器实例库中查找k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似;
步骤s7,以所述k1个实例对所述新实例进行预测;若预测结果正确,则执行步骤s8;若错误,则执行步骤s9;
步骤s8,不将所述新实例添加至所述编译器实例库中;
步骤s9,将所述新实例添加至所述编译器实例库中;
步骤s10,当确定对目标程序执行应用操作时,获取目标程序中的特征值;
步骤s11,对目标程序中的每个特征值,从所述编译器实例库中查找k2个实例,所述k2个实例中的特征值与所述特征值的当前值最相似;
步骤s12,以所述k2个实例中出现频率最高的特征值分类作为所述特征值的当前值对应的分类;
步骤s13,依据各特征值对应的分类对目标程序进行编译优化。
上述实施方式中,编译操作参数可以通过编译器的命令行参数指定,也可以由编译器根据现有实例库的情况做出判断,以决定是进行更新操作还是应用操作。具体地说,可以预设一实例库的最少实例数,在当前实例库中实例数少于所述预设的最少实例数时,可以认为通过当前实例库不足以进行准确的特征值分类判断,因而需要进行更新操作;而在当前实例库中实例数大于或等于所述预设的最少实例数时,可以认为通过当前实例库基本能够进行准确的特征值分配判断,因而可以进行应用操作。对于所述预设的最少实例数的值,本领域技术人员可以预先设置初值,之后根据多次的编译试验修改所述初值来获取相对合理的值。并且所述预设的最少实例数的值并非是固定不变的,完全可以根据编译的性能和效率的要求进行更新。
上述实施方式中,对于更新操作,从经编译优化的目标程序中获得的新实例无论是否会添加至编译器实例库,所述经编译优化的目标程序都将由编译器转换成可供机器运行的目标代码;而对于应用操作,在依据各特征值对应的分类对目标程序进行编译优化后,编译器也会将经编译优化的目标程序转换成可供机器运行的目标代码。
从上述实施方式的具体步骤中可以看到,所述编译方法对于待编译的目标程序采取了灵活的编译操作方式,一方面通过迭代编译获得目标程序中特征值及其对应的分类,并以此作为实例去构建或更新编译器的实例库;另一方面,利用已有的实例库,可以通过上述特定的方式较快地确定待编译的目标程序中各特征值对应的分类,也就是说较快地选定了对各特征值的优化方式或优化参数,从而无需再通过迭代编译在优化空间中搜索最优参数,因而避免了迭代编译,减少了编译时间。
以下通过编译目标程序过程中对循环展开的编译优化举例,以对于上述实施方式的各执行步骤进一步说明。需要说明的是,为使说明更清楚,将所述更新操作、所述应用操作的过程分别独立说明。
对待编译的目标程序进行更新操作的情况,在执行步骤s2后获得了循环展开中特征值及特征值对应的最佳循环展开因子,即特征值的分类。特征值可以包括循环体的大小、循环迭代次数的估值,此处为简化起见,故不一一列举。
接着,执行步骤s3,将循环展开的特征值及其对应的循环展开因子作为循环展开的一个新实例。
随后,执行步骤s4,判断此时编译器对应循环展开的实例库中是否有至少k1个循环展开优化的实例。
若此时编译器实例库中没有至少k1个循环展开优化实例(包括没有任何优化实例或优化实例个数不足k1个),则执行步骤s5,直接将已获得的这个新实例添加至对应的实例库中。
若此时编译器实例库中至少有k1个循环展开优化实例,则执行步骤s6,对于所述新实例,从编译器实例库中查找k1个循环展开优化实例,所述k1个循环展开优化实例中的特征值与所述新实例中特征值最相似。
例如,可以采用k近邻法来获取所述最相似的k个实例(k取值为k1)。具体地说,循环展开的特征值可以被视为由循环体大小、循环迭代次数等变量组成的一个向量,所述向量可被表示为多维的欧几里德空间的一个点,其中,循环体大小、循环迭代次数等都是所述空间中的一维。当对于所述每个变量赋上一个值,就能得到所述多维的欧几里德空间的一个点。而特征值的分类就是这个点所对应的最佳循环展开因子。
由于所述新的循环展开优化实例和所述实例库中循环展开优化实例中特征值已知,因此可根据上述方法将各实例特征值表示为所述多维的欧几里德空间中的对应点。然后,计算实例库中各循环展开优化实例对应点相对于新实例对应点的距离,找到k1个与新实例对应点的距离最近的优化实例对应点,这些点对应的循环展开优化实例的特征值就可以认为是与所述新实例中特征值最相似。
需要说明的是,k的取值k1应考虑在使用k近邻法时查找和比较的效率。例如,k1的值越大,后续预测对新实例是否添加至实例库的评估也会更精确,但相应使用k近邻法的耗时也大;而k1的值越小,后续预测对新实例是否添加至实例库的评估相对不会很精确,但相应使用k近邻法的耗时可以较小。
接下来,执行步骤s7,以所获得的k1个循环展开优化实例对所述新实例进行预测,并判断预测结果是否正确。若正确,则执行步骤s8,不将所述新实例添加至所述编译器对应循环展开的实例库中;若错误,则执行步骤s9,将所述新实例添加至所述编译器对应循环展开的实例库中。
对于循环展开而言,根据之前的说明可知,无论是循环展开的新实例还是实例库中的循环展开优化实例均包含了特征值的分类这一信息。而特征值的分类这一信息,显示了对于特征值的优化方式或优化参数。自然,若获得特征值的分类,就可进据此对待编译的程序进行优化。因此,预测的目的是为了检验根据已获得的k1个循环展开优化实例的特征值的分类能否推得循环展开的新实例的特征值的分类。
一般来说,对应循环展开的实例库中的优化实例数量越大,在使用k近邻法的时候,更容易获取与所述新实例特征值相似的优化实例,基于优化实例的学习的结果也更精确。但是大容量数据库的查找与比较操作又往往是比较耗时的,从而导致学习效率低下。为了在学习的精确性和效率之间取得较好的平衡,通过将预测的结果作为向实例库中增加实例时的评估标准,就可避免把不必要的实例加入到实例库中。
具体地说,若预测正确,则代表能够从已获得的k1个循环展开优化实例的特征值的分类推得循环展开的新实例的特征值的分类,此时所述新实例就可认为是相对于现有实例库的冗余实例,无需添加至实例库中;
而若预测错误,则代表不能够从已获得的k1个循环展开优化实例的特征值的分类推得循环展开的新实例的特征值的分类,此时所述新实例就不是相对于现有实例库的冗余实例,通过将所述新实例添加至对应循环展开的实例库中可有助于以后编译目标程序时的精确性。
可选的,对于预测的方式可采用较为直观的投票机制。例如,对于所获得的k1个循环展开优化实例,以各自特征值的分类进行投票,将其中票数最高的特征值的分类作为预测的新实例的特征值的分类。并且,将该预测的特征值的分类与实际的新实例的特征值的分类进行比较,若预测的分类和实际的分类相同,则认为预测正确,即根据所述k1个循环展开优化实例的特征值分类能推得循环展开的新实例的特征值的分类。若预测的分类和实际的分类不同,则认为预测错误,即根据所述k1个循环展开优化实例的特征值分类不能推得循环展开的新实例的特征值的分类。基于所述预测结果,即可决定是否将所述新实例添加至实例库中。假定本次预测结果为错误,则根据步骤s9的处理,将循环展开的新实例添加至对应实例库中。
需要指出的是,以上以投票机制进行预测的方式作了举例,此并非对预测的方式进行限制,本领域技术人员也可采用其他适合的预测方式。
另外,本例以循环展开的编译优化举例,故所述实例库为对应循环展开的实例库,在其他编译优化过程中,所述实例库为对应具体编译优化对象的实例库。例如,对于数据预取的编译优化,在上述更新操作过程中所涉及的实例库就是对应数据预取的实例库。
而对待编译的目标程序进行应用操作的情况,首先执行步骤s10,获取目标程序中的特征值,所述获取特征值的过程可在编译器解析目标程序的阶段实现,此为现有技术,故在此不再赘述。此处仍以循环展开为例进行说明。
然后,在获得特征值后,执行步骤s11,分别对目标程序中的每个特征值,从所述编译器实例库中查找k个实例,所述k个实例中的特征值与所述特征值的当前值最相似。所述查找k个实例的方法仍然采用k近邻法(此时k取值k2,k2可以与k1相同或不相同),其查找过程与之前查找k1个实例的过程相同,可相对参考,此处就不再赘述了。
对于循环展开而言,在从对应循环展开的实例库中获得了k2个循环展开优化实例后,执行步骤s12,以所述k2个实例中出现频率最高的特征值分类作为所述特征值的当前值对应的分类。具体地说,可以采用与前述的预测类似的方式,以投票机制的方式决定特征值的当前值对应的分类,即决定特征值的当前值对应的循环展开因子。具体地说,对k2个循环展开优化实例的特征值的分类进行投票,将其中票数最高的特征值的分类作为特征值的当前值对应的分类。例如,所述k2个循环展开优化实例的特征值分类有A、B和C三种:为A的有5项,为B的有10项,为C的有5项,则所述特征值分类B的出现频率最高,将其作为特征值的当前值对应的分类。前述的预测的目的是为了对新实例是否添加至实例库中进行评估,而此处的类似预测的方式是为了尽快确定对某个特征值的优化方式或优化参数。
此后,有了对应各特征值的当前值的分类后,就可执行步骤s13,依据各特征值对应的分类对目标程序进行编译。由于对特征值的优化方式或优化参数已有了明确的目标,无疑整个对目标程序的编译过程将更精确、更有效率。
参照图3所示,相应地,本发明基于实例的迭代编译装置的一种实施方式可以包括:编译参数设置单元100、解析单元200、实例库300、优化单元400、实例搜索单元500、实例添加单元600、实例分析单元700及代码生成单元800,其中,
编译参数设置单元100,根据命令行参数或实例库实例数设置编译参数,并将经设置的编译参数发送至解析单元200及优化单元400;所述实例库实例数为根据解析单元200发送的特征值所获得的对应实例库实例数;
解析单元200,对所获得的目标程序进行解析获得目标程序中的各特征值;在所获得的编译参数指示应用操作时,将所获得的特征值发送至实例搜索单元500;
优化单元400,在所获得的编译参数指示更新操作时,对经解析单元200解析的目标程序中的各特征值进行优化以获得对应的特征值分类,将特征值及对应的特征值分类发送至实例搜索单元500;在所获得的编译参数指示应用操作时,依据所获得的实例分析单元700发送的特征值分类后对所获得的经解析单元200解析的目标程序中的各相应特征值进行优化;
实例搜索单元500,在仅获得特征值时,从特征值对应实例库中搜索k2个实例,所述k2个实例中的特征值与所获得的特征值最相似,并将所获得的k2个实例发送至实例分析单元700;在同时获得特征值及对应的特征值分类时,将所获得的特征值及对应的特征值分类作为一个新实例,从特征值对应实例库中搜索k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似,并将所获得的k1个实例和所述新实例发送至实例添加单元600;
实例添加单元600,以所获得的k1个实例对所述新实例进行预测,在预测结果为错误时,将所述新实例添加至实例库300中;
实例分析单元700,对所获得的k2个实例中的特征值分类进行分析,获得现频率最高的特征值分类,并将所述出现频率最高的特征值分类发送至优化单元400;
代码生成单元800,依据优化单元400产生的优化结果将目标程序转换为目标代码。
参照图4所示,在具体实施例中,所述实例搜索单元500可以包括:比较单元501、计算单元502及选定单元503,其中,
比较单元501,在仅获得特征值时,比较相应实例库实例数与第二内置参考值k2的大小,并将第二比较结果发送至计算单元502及选定单元503;在获得特征值及对应的特征值分类时,比较相应实例库实例数与第一内置参考值k1的大小,并将第一比较结果发送至计算单元502及选定单元503;
计算单元502,在第二比较结果显示实例库实例数大于或等于第二内置参考值k2时,计算实例库中各实例特征值在多维空间对应点与所获得的特征值在多维空间对应点的距离,并将第二计算结果发送至选定单元503;在第一比较结果显示实例库实例数大于或等于第一内置参考值k1时,计算实例库中各实例特征值在多维空间对应点与所获得的特征值在多维空间对应点的距离,并将第一计算结果发送至选定单元503;
选定单元503,在第二比较结果显示实例库实例数小于第二内置参考值时,选定所述实例库中所有实例,并将所有实例发送至实例分析单元700;在第二比较结果显示实例库实例数大于或等于第二内置参考值k2时,依据计算单元502的第二计算结果选定k2个实例,所述k2个实例中的特征值与所获得的特征值最相似,并将所获得的k2个实例发送至实例分析单元700;在第一比较结果显示实例库实例数小于第一内置参考值k1时,将所获得的优化单元400发送的特征值及对应的特征值分类作为一个新实例,并发送至实例添加单元600;在第一比较结果显示实例库实例数大于或等于第一内置参考值k1时,将所获得的优化单元400发送的特征值及对应的特征值分类作为一个新实例,并依据计算单元502的第一计算结果选定k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似,并将所获得的k1个实例和所述新实例发送至实例添加单元600。
在具体实施例中,所述实例添加单元可以包括:
投票单元,对所获得的k1个实例,统计所获得的k1个实例的特征值的分类,并进行投票,将投票结果发送至处理单元;
处理单元,对所获得的k1个实例和所述新实例,将k1个实例中票数最高的特征值的分类与所述新实例的特征值的分类比较,仅在比较结果不一致时,将所述新实例添加至实例库中;在仅获得所述新实例时,将所述新实例添加至实例库中。
在具体实施例中,所述实例分析单元可以包括:
投票单元,对所获得的实例,统计所获得的实例的特征值的分类,并进行投票,将投票结果发送至处理单元;
处理单元,将所获得的实例中票数最高的特征值的分类发送至优化单元。
考虑到基于实例的学习过程中,噪声的存在容易影响到实例库中实例的准确性。在这里,噪声是指那些特征值与分类之间关系比较异常的实例,属于有害的数据,它们会增加学习的难度,有必要将噪声剔除以进一步优化基于实例的学习过程。对此,本发明编译方法还提供另一种更优化的实施方式,相对于前述的实施方式,本实施方式在每次对新实例是否添加至实例库进行评估后,还会增加一系列后续步骤。根据新实例对实例库中的已有实例进行更新,以对实例库中的实例进行有效性筛选,剔除那些可能是噪声的实例。为了分析实例库中的实例是否为噪声实例,引入两种数据类型对实例库中的实例进行记录,一种是每个实例的特征值分类在实例库中的出现频率,另一种是仅以所述实例的特征值分类预测新实例的特征值分类时的准确率。参照图2所示,所述后续步骤包括:
在步骤s8后,执行步骤s21,获取k1个实例的特征值的分类各自在预测新实例的特征值的分类时的准确率;
执行步骤s22,获取k1个实例的特征值分类各自在实例库中的出现频率;
执行步骤s23,判断所述准确率与所述出现频率的比值是否小于噪声阈值,若小于噪声阈值,则执行步骤s24;若大于或等于噪声阈值,则执行步骤s25;
执行步骤s24,将所述比值对应的实例从实例库中剔除;
执行步骤s25,在实例库中保留所述比值对应的实例。
仍以循环展开为例,步骤s21的准确率通过直接比较k1个循环展开优化实例中的一个实例与循环展开的新实例的特征值的分类是否相同来实现,若相同,则认为被比较的优化实例准确;若不同,则认为被比较优化实例不准确。
例如,每次以所述k1个优化实例中的一个实例对新实例预测完后,对优化实例相应的准确率进行更新,对预测准确的优化实例,对其准确率的记录+1;对预测不准确的优化实例,其准确率的记录就保持不变。
而步骤s22的出现频率通过计算k1个优化实例中的一个优化实例的特征值的分类占整个实例库中的分类的比值来获得。例如,k1个优化实例中的一个优化实例的特征值的分类为分类A,而整个实例库中的特征值的分类有A、B、C三种,其中为A的有5项,为B的有10项,为C的有5项,则该优化实例的特征值的分类的出现频率为1/4。
在每次对优化实例的准确率更新后,就可依据所述准确率与所述出现频率的比值与噪声阈值进行比较,以分析k1个优化实例中哪一个优化实例为噪声,并相应执行步骤s24或步骤s25,将噪声实例剔除,或保留非噪声实例。其中,所述噪声阈值也应根据基于实例的学习的精确性和效率综合考虑。
参照图5所示,相应地,本发明编译装置还提供另一种更优化的实施方式,其与图4所示实施方式的结构大致相同,区别仅在于,还包括:
实例库编辑单元900,在预测结果为正确时,获取所述k1个实例各自在实例库中的出现频率以及获取所述k1个实例的特征值的分类各自在预测新实例的特征值的分类时的准确率;在所述准确率与所述出现频率的比值小于噪声阈值时,将所述比值对应的实例从实例库中剔除。
参照图6所示,在具体实施例中,所述实例库编辑单元900可以包括:统计单元901、比较记录单元902、计算单元903及处理单元904,其中,
统计单元901,统计所述k1个实例各自在实例库中的出现频率,并发送至计算单元903;
比较记录单元902,分别比较所述k1个实例的特征值分类与所述新实例的特征值的分类是否相同,并记录所述比较结果作为准确率及发送至计算单元903;
计算单元903,计算所述k1个实例对应的准确率与出现频率的比值,并发送至处理单元904;
处理单元904,在所述准确率与所述出现频率的比值小于噪声阈值时,将所述比值对应的实例从实例库中剔除。
通过上述分析可以看到,本实施方式通过对实例库中实例的更新减少了噪声对学习的影响,提高了学习的精确度。并且,通过减少实例库中的噪声实例也进一步提高了学习的效率。
以上公开了本发明的多个方面和实施方式,本领域的技术人员会明白本发明的其它方面和实施方式。本发明中公开的多个方面和实施方式只是用于举例说明,并非是对本发明的限定,本发明的真正保护范围和精神应当以权利要求书为准。
Claims (11)
1.一种基于实例的迭代编译方法,其特征在于,包括:
根据命令行参数或实例库实例数设置编译参数;
在获得待编译的目标程序后,根据编译参数确定对目标程序执行更新操作或应用操作;
当确定对目标程序执行更新操作时,对所述目标程序进行迭代编译,获得经编译优化的目标程序,将经编译优化的目标程序中的特征值及其对应的特征值分类作为新实例;
对于每个新实例,若编译器实例库中没有至少k1个实例,则将所述新实例直接添加至编译器实例库中;
对于每个新实例,若编译器实例库中有至少k1个实例,从编译器实例库中查找k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似;以所述k1个实例对所述新实例进行预测,在预测结果为错误时,将所述新实例添加至所述编译器实例库中;
当确定对目标程序执行应用操作时,获取目标程序中的特征值;
对目标程序中的每个特征值,从所述编译器实例库中查找k2个实例,所述k2个实例中的特征值与所述特征值的当前值最相似,并以所述k2个实例中出现频率最高的特征值分类作为所述特征值的当前值对应的分类;
依据各特征值对应的分类对目标程序进行编译优化。
2.如权利要求1所述的迭代编译方法,其特征在于,在预测结果为正确时,不将所述新实例添加至所述编译器实例库中,并且,执行下述步骤:
获取k1个实例的特征值的分类各自在预测新实例的特征值的分类时的准确率;
获取k1个实例的特征值分类各自在实例库中的出现频率;
判断所述准确率与所述出现频率的比值是否小于噪声阈值,若小于噪声阈值,则将所述比值对应的实例从实例库中剔除;若大于或等于噪声阈值,则在实例库中保留所述比值对应的实例。
3.如权利要求1所述的迭代编译方法,其特征在于,从编译器实例库中查找实例采用k近邻法,对于从编译器实例库中查找k1个实例,k近邻法中的k取值为k1;从所述编译器实例库中查找k2个实例,k近邻法中的k取值为k2。
4.如权利要求3所述的迭代编译方法,其特征在于,k1=k2。
5.如权利要求2所述的迭代编译方法,其特征在于,所述预测采用投票机制,包括:将k1个实例中票数最高的特征值分类预测为新实例的特征值分类。
6.如权利要求5所述的迭代编译方法,其特征在于,所述预测结果错误包括:预测的新实例的特征值分类与实际的特征值分类不同;所述预测结果正确包括:预测的新实例的特征值分类与实际的特征值分类相同。
7.一种基于实例的迭代编译装置,其特征在于,包括:编译参数设置单元、解析单元、实例库、优化单元、实例搜索单元、实例添加单元、实例分析单元及代码生成单元,其中,
编译参数设置单元,根据命令行参数或实例库实例数设置编译参数,并将经设置的编译参数发送至解析单元及优化单元;所述实例库实例数为根据解析单元发送的特征值所获得的对应实例库实例数;
解析单元,对所获得的目标程序进行解析获得目标程序中的各特征值;在所获得的编译参数指示应用操作时,将所获得的特征值发送至实例搜索单元;
优化单元,在所获得的编译参数指示更新操作时,对经解析单元解析的目标程序中的各特征值进行优化以获得对应的特征值分类,将特征值及对应的特征值分类发送至实例搜索单元;在所获得的编译参数指示应用操作时,依据所获得的实例分析单元发送的特征值分类后对所获得的经解析单元解析的目标程序中的各相应特征值进行优化;
实例搜索单元,在仅获得特征值时,从特征值对应实例库中搜索k2个实例,所述k2个实例中的特征值与所获得的特征值最相似,并将所获得的k2个实例发送至实例分析单元;在同时获得特征值及对应的特征值分类时,将所获得的特征值及对应的特征值分类作为一个新实例,从特征值对应实例库中搜索k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似,并将所获得的k1个实例和所述新实例发送至实例添加单元;
实例添加单元,以所获得的k1个实例对所述新实例进行预测,在预测结果为错误时,将所述新实例添加至实例库中;
实例分析单元,对所获得的k2个实例中的特征值分类进行分析,获得现频率最高的特征值分类,并将所述出现频率最高的特征值分类发送至优化单元;
代码生成单元,依据优化单元产生的优化结果将目标程序转换为目标代码。
8.如权利要求7所述的迭代编译装置,其特征在于,还包括:实例库编辑单元,在预测结果为正确时,获取所述k1个实例各自在实例库中的出现频率以及获取所述k1个实例的特征值的分类各自在预测新实例的特征值的分类时的准确率;在所述准确率与所述出现频率的比值小于噪声阈值时,将所述比值对应的实例从实例库中剔除。
9.如权利要求7或8所述的迭代编译装置,其特征在于,所述实例搜索单元包括:比较单元、计算单元及选定单元,其中,
比较单元,在仅获得特征值时,比较相应实例库实例数与k2的参考值即第二内置参考值的大小,并将第二比较结果发送至计算单元及选定单元;在获得特征值及对应的特征值分类时,比较相应实例库实例数与k1的参考值即第一内置参考值的大小,并将第一比较结果发送至计算单元及选定单元;
计算单元,在第二比较结果显示实例库实例数大于或等于k2的参考值即第二内置参考值时,计算实例库中各实例特征值在多维空间对应点与所获得的特征值在多维空间对应点的距离,并将第二计算结果发送至选定单元;在第一比较结果显示实例库实例数大于或等于k1的参考值即第一内置参考值时,计算实例库中各实例特征值在多维空间对应点与所获得的特征值在多维空间对应点的距离,并将第一计算结果发送至选定单元;
选定单元,在第二比较结果显示实例库实例数小于k2的参考值即第二内置参考值时,选定所述实例库中所有实例,并将所有实例发送至实例分析单元;在第二比较结果显示实例库实例数大于或等于k2的参考值即第二内置参考值时,依据计算单元的第二计算结果选定k2个实例,所述k2个实例中的特征值与所获得的特征值最相似,并将所获得的k2个实例发送至实例分析单元;在第一比较结果显示实例库实例数小于k1的参考值即第一内置参考值时,将所获得的优化单元发送的特征值及对应的特征值分类作为一个新实例,并发送至实例添加单元;在第一比较结果显示实例库实例数大于或等于k1的参考值即第一内置参考值时,将所获得的优化单元发送的特征值及对应的特征值分类作为一个新实例,并依据计算单元的第一计算结果选定k1个实例,所述k1个实例中的特征值与所述新实例中特征值最相似,并将所获得的k1个实例和所述新实例发送至实例添加单元。
10.如权利要求7或8所述的迭代编译装置,其特征在于,所述实例添加单元包括:
投票单元,对所获得的k1个实例,统计所获得的k1个实例的特征值的分类,并进行投票,将投票结果发送至处理单元;
处理单元,对所获得的k1个实例和所述新实例,将k1个实例中票数最高的特征值的分类与所述新实例的特征值的分类比较,仅在比较结果不一致时,将所述新实例添加至实例库中。
11.如权利要求7或8所述的迭代编译装置,其特征在于,所述实例分析单元包括:
投票单元,对所获得的实例,统计所获得的实例的特征值的分类,并进行投票,将投票结果发送至处理单元;
处理单元,将所获得的实例中票数最高的特征值的分类发送至优化单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105232971A CN102455897B (zh) | 2010-10-27 | 2010-10-27 | 基于实例的迭代编译方法及编译装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105232971A CN102455897B (zh) | 2010-10-27 | 2010-10-27 | 基于实例的迭代编译方法及编译装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102455897A CN102455897A (zh) | 2012-05-16 |
CN102455897B true CN102455897B (zh) | 2013-11-27 |
Family
ID=46039117
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105232971A Active CN102455897B (zh) | 2010-10-27 | 2010-10-27 | 基于实例的迭代编译方法及编译装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102455897B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107203469B (zh) * | 2017-04-28 | 2020-04-03 | 北京大学 | 基于机器学习的编译器测试加速方法 |
CN109542505B (zh) * | 2018-12-06 | 2022-03-22 | 苏州科创风云信息技术有限公司 | 共享货架中资源的更新方法及装置 |
CN110009469B (zh) * | 2019-03-19 | 2023-09-12 | 创新先进技术有限公司 | 资金流数据的异常检测方法、装置及设备 |
CN112433706B (zh) * | 2020-11-27 | 2023-03-14 | 海光信息技术股份有限公司 | 编译选项调优方法、装置、处理器芯片及服务器 |
US11403090B2 (en) * | 2020-12-08 | 2022-08-02 | Alibaba Group Holding Limited | Method and system for compiler optimization based on artificial intelligence |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452394A (zh) * | 2007-11-28 | 2009-06-10 | 无锡江南计算技术研究所 | 编译方法和编译器 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7401329B2 (en) * | 2005-04-25 | 2008-07-15 | Arm Limited | Compiling computer programs to exploit parallelism without exceeding available processing resources |
US8434076B2 (en) * | 2007-12-12 | 2013-04-30 | Oracle International Corporation | Efficient compilation and execution of imperative-query languages |
-
2010
- 2010-10-27 CN CN2010105232971A patent/CN102455897B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101452394A (zh) * | 2007-11-28 | 2009-06-10 | 无锡江南计算技术研究所 | 编译方法和编译器 |
Non-Patent Citations (6)
Title |
---|
《基于学习的迭代式优化编译中的经验适用性研究》;龙舜等;《计算机工程与科学》;20100930;第32卷(第9期);第115-118页 * |
刘章林.基于机器学习的编译优化适应性研究.《中国优秀博硕士学位论文全文数据库》.2007, |
反馈式编译优化在转移预测中的研究;白书敬等;《计算机工程与应用》;20060228;第78-80页 * |
基于机器学习的编译优化适应性研究;刘章林;《中国优秀博硕士学位论文全文数据库》;20070228;全文 * |
白书敬等.反馈式编译优化在转移预测中的研究.《计算机工程与应用》.2006,第78-80页. |
龙舜等.《基于学习的迭代式优化编译中的经验适用性研究》.《计算机工程与科学》.2010,第32卷(第9期),第115-118页. |
Also Published As
Publication number | Publication date |
---|---|
CN102455897A (zh) | 2012-05-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sarkar et al. | Cost-efficient sampling for performance prediction of configurable systems (t) | |
US8578348B2 (en) | System and method of cost oriented software profiling | |
CN109242135B (zh) | 一种模型运营方法、装置、及业务服务器 | |
CN110134588B (zh) | 一种基于代码和组合覆盖的测试用例优先级排序方法及测试系统 | |
CN102455897B (zh) | 基于实例的迭代编译方法及编译装置 | |
CN101339562A (zh) | 引入兴趣模型反馈更新机制的门户个性化推荐服务系统 | |
CN111881023B (zh) | 一种基于多模型对比的软件老化预测方法及装置 | |
Gokilavani et al. | Test case prioritization to examine software for fault detection using PCA extraction and K-means clustering with ranking | |
CN114490404A (zh) | 一种测试用例确定方法、装置、电子设备及存储介质 | |
CN103455417B (zh) | 一种基于马尔可夫模型的软件错误定位系统及错误定位方法 | |
CN112527300A (zh) | 面向多目标的细粒度编译自调优方法 | |
CN104461864A (zh) | 一种基于Eclipse插件的Java源代码缺陷检测方法及其系统 | |
CN109933515B (zh) | 一种回归测试用例集的优化方法和自动优化装置 | |
Hryszko et al. | Cost effectiveness of software defect prediction in an industrial project | |
US11741001B2 (en) | Workload generation for optimal stress testing of big data management systems | |
CN113127342B (zh) | 基于电网信息系统特征选择的缺陷预测方法及装置 | |
CN103942403A (zh) | 一种对海量变量进行筛选的方法及设备 | |
CN114841664A (zh) | 一种多任务处理顺序确定方法及装置 | |
CN113821975A (zh) | 一种燃料电池性能衰减预测方法及系统 | |
CN113610225A (zh) | 质量评估模型训练方法、装置、电子设备及存储介质 | |
Guo et al. | SQDroid: A semantic-driven testing for Android apps via Q-learning | |
Aliee et al. | Guiding Genetic Algorithms using importance measures for reliable design of embedded systems | |
Sharma et al. | Quality assurance of component based software systems | |
KR102550687B1 (ko) | 검색량 데이터와 var 분석을 이용한 탄소 배출권 가격 예측 시스템 및 그 방법 | |
Ploskas | Parameter Tuning of Linear Programming Solvers |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |