程序编译方法和装置制造方法及图纸

技术编号:30891719 阅读:14 留言:0更新日期:2021-11-22 23:32
本申请公开了一种程序编译方法和装置,方法包括:获取第一程序;其中,第一程序包括多层循环语句,多层循环语句中每层循环语句的循环条件包括变量和变量的取值区间,多层循环语句的循环体中包括至少一个条件语句;对多层循环语句包括的第一循环语句中第一变量的取值区间进行处理,得到第二循环语句,第二循环语句中第一变量的取值区间为第一区间,第一区间为第一循环语句中第一变量的取值区间的子集,第一区间使得至少一个条件语句中的第一条件语句恒成立;基于至少一个循环语句对第一程序进行编译,以得到第一程序的编译结果,采用本申请实施例,可以在提升指令发射效率获取更高程序编译结果运行性能的同时,降低程序的编译结果中的代码长度。果中的代码长度。果中的代码长度。

【技术实现步骤摘要】
程序编译方法和装置


[0001]本申请涉及信息
,尤其涉及一种程序编译方法和装置。

技术介绍

[0002]随着人工智能技术的高速发展,传统的图形处理器(Graphics Processing Unit,GPU)和中央处理器(Central Processing Unit,CPU)已经不能满足日益增长的性能需求。因而业界的研究人员开始聚焦于人工智能(Artificial Intelligence,AI)芯片的研究以满足AI领域的性能需求。在AI系统栈上,由于硬件限制,多维数据的分块计算是必经之路,分块策略直接导致AI芯片的性能问题。AI芯片上往往要处理多维数据,而处理的多维数据在程序中是通过多层嵌套循环来表示的。在处理过程中,多维数据会被映射成一条指令,该映射过程称为张量化tensorize。
[0003]但在实际的场景中,由于多层循环嵌套中间夹杂着分支跳转指令,阻碍了tensorize过程,因而映射成指令的数目会受到一定程度限制。具体地,如图1所示,在多维数据的程序表示中,指令映射标签vmuls原始打在H_o轴下面,指令映射标签下所有程序代码会生成一条包含确定执行过程的指令,但由于if条件(即程序执行不确定)限制,在多维数据映射过程中,指令映射标签需要下移到if条件分支下,从而使生成的指令数量远远大于理论上的9条。
[0004]因此,当多维数据的切分不规则时,在多维数据映射过程中,尾块数据无法进行有效的tensorize,严重影响单指令多数据(Single Instruction,Multiple Data,SIMD)这一高效的指令发射模式的执行。
[0005]现有技术在编译过程中,将表征多维数据程序中的多层嵌套循环进行全展开(以1为单位进行展开),以消除分支跳转,从而提升指令发射效率。但是,此种全展开方式会大幅增加程序编译结果的代码长度,从而增加程序编译结果的映射时长。

技术实现思路

[0006]本申请实施例提供了一种程序编译方法和装置,可以在提升指令发射效率获取更高程序编译结果运行性能的同时,降低程序的编译结果中的代码长度,得到较低的程序编译结果映射时长。
[0007]第一方面,本申请提供了一种程序编译方法,该方法包括:获取第一程序;其中,所述第一程序包括多层循环语句,所述多层循环语句中每层循环语句的循环条件包括变量和所述变量的取值区间,所述多层循环语句的循环体中包括至少一个条件语句;所述多层循环语句包括第一循环语句;其中,所述第一循环语句为所述多层循环语句中的一层循环语句,所述第一循环语句的循环条件中包括的变量为第一变量,且所述第一变量为所述至少一个条件语句中的第一条件语句所包含变量中的一个;对所述第一循环语句中第一变量的取值区间进行处理,以得到与所述第一循环语句对应的至少一个循环语句;其中,所述至少一个循环语句中包括第二循环语句,所述第一循环语句和所述第二循环语句都包括所述第
一变量,所述第二循环语句中第一变量的取值区间为第一区间,所述第一区间为所述第一循环语句中第一变量的取值区间的子集,所述第一区间使得所述第一条件语句恒成立;基于所述至少一个循环语句对所述第一程序进行编译,以得到所述第一程序的编译结果,所述第一程序的编译结果与所述至少一个循环语句有关。
[0008]其中,上述包含多层循环语句的第一程序可以用于表征多维数据,第一程序的编译结果可以对应为多维数据切分后的程序表示。
[0009]其中,上述第一程序的编译结果为一种高级语言(例如,C、C++或python等)程序表示,第一程序的编译结果后续经过指令映射等处理后才能转化为硬件(例如,CPU或GPU)上的可执行指令。
[0010]应当理解,上述对第一循环语句中第一变量的取值区间进行处理,也即是对第一变量的取值区间进行展开。当上述第一程序还包括其它需要进行处理的循环语句时,可以参照第一循环语句中第一变量取值区间的展开方式,依次将其它循环语句中循环条件包含变量的取值区间进行展开,在将最后一个需要进行处理的循环语句进行展开后,即得到上述第一程序编译结果,即上述第一程序的编译结果与上述至少一个循环语句有关。
[0011]此外,本申请实施例可以采用从最外层循环语句到最内层循环语句或从最内层循环语句到最外层循环语句的顺序依次展开需要进行处理的循环语句。其中,所述最外层循环语句为第一程序最上方的一层循环语句,最内层循环语句为第一程序最下方的一层循环语句。
[0012]从技术效果上看,由于第一变量取第一区间中的数值时,可以使第一条件语句恒成立,且第一变量在第二循环语句中的取值区间为第一区间,因而可以消除第二循环语句中的第一条件语句,进而可以在第一程序的编译结果(切分后的多维数据)的映射过程中,减少映射得到的指令数量,提高映射过程中的指令发射效率,获取更高的第一程序编译结果的运行性能。同时,相对于现有技术中对第一变量的取值区间进行全开展(即将第一变量的取值区间以1为单位进行展开),来消除第一条件语句的过程;在本申请中,由于第一变量取第一区间中的数值时,第一条件语句恒成立,因而可以将第一循环语句中第一变量的取值区间以区间形式进行展开,从而可以有效降低展开后得到的第二循环语句的代码长度,即降低第一程序编译结果的代码长度,进而降低后续第一程序编译结果的映射时长。
[0013]在一种可行的实施方式中,所述第一程序包括指令映射标签;当预估的所述第一程序的编译结果的映射时间大于预设时间时,所述第一变量为所述指令映射标签下方循环语句的循环条件和所述至少一个条件语句共同包含变量中的一个;所述预估映射时间为将所述第一程序的编译结果映射为在硬件上可执行指令的过程所需要的时间;当预估的所述第一程序的编译结果的映射时间小于或等于所述预设时间时,所述第一变量为所述多层循环语句中每层循环语句的循环条件和所述至少一个条件语句共同包含变量中的一个。
[0014]从技术效果上看,当预估的第一程序的编译结果的映射时间大于预设时间时,为控制编译结果的映射时长,此时只对指令映射标签下方循环语句的循环条件和至少一个条件语句共同包含的变量的取值区间依次进行处理,从而减少处理的循环语句的数量,以降低编译结果中的代码长度,进而降低程序编译结果的映射时长;同时,当预估的第一程序的编译结果的映射时间小于或等于预设时间时,可以对多层循环语句中每层循环语句的循环条件和至少一个条件语句共同包含的所有变量的取值区间都依次进行处理,在此种情况
下,可以最大程度消除第一程序中的条件语句,从而减少第一程序编译结果映射得到的指令数量,即得到高性能指令。
[0015]在一种可行的实施方式中,所述预估的所述第一程序的编译结果的映射时间是基于所述至少一个条件语句包含变量的数量、所述多层循环语句的层数、所述至少一个条件语句包含变量的模糊区间或所述条件语句的数量中的一个或多个决定的;其中,当所述变量的取值为所述变量的模糊区间中的数值时,包含所述变量的条件语句是否成立还与其它因素有关。
[0016]其中,上述其它因素指条件语句中的其它变量,即本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种程序编译方法,其特征在于,所述方法包括:获取第一程序;其中,所述第一程序包括多层循环语句,所述多层循环语句中每层循环语句的循环条件包括变量和所述变量的取值区间,所述多层循环语句的循环体中包括至少一个条件语句;所述多层循环语句包括第一循环语句;其中,所述第一循环语句为所述多层循环语句中的一层循环语句,所述第一循环语句的循环条件中包括的变量为第一变量,且所述第一变量为所述至少一个条件语句中的第一条件语句所包含变量中的一个;对所述第一循环语句中第一变量的取值区间进行处理,以得到与所述第一循环语句对应的至少一个循环语句;其中,所述至少一个循环语句中包括第二循环语句,所述第一循环语句和所述第二循环语句都包括所述第一变量,所述第二循环语句中第一变量的取值区间为第一区间,所述第一区间为所述第一循环语句中第一变量的取值区间的子集,所述第一区间使得所述第一条件语句恒成立;基于所述至少一个循环语句对所述第一程序进行编译,以得到所述第一程序的编译结果,所述第一程序的编译结果与所述至少一个循环语句有关。2.根据权利要求1所述的方法,其特征在于,所述第一程序包括指令映射标签;当预估的所述第一程序的编译结果的映射时间大于预设时间时,所述第一变量为所述指令映射标签下方循环语句的循环条件和所述至少一个条件语句共同包含变量中的一个;所述预估映射时间为将所述第一程序的编译结果映射为在硬件上可执行指令的过程所需要的时间;当所述预估的所述第一程序的编译结果的映射时间小于或等于所述预设时间时,所述第一变量为所述多层循环语句中每层循环语句的循环条件和所述至少一个条件语句共同包含变量中的一个。3.根据权利要求2所述的方法,其特征在于,所述预估的所述第一程序的编译结果的映射时间是基于所述至少一个条件语句包含变量的数量、所述多层循环语句的层数、所述至少一个条件语句包含变量的模糊区间或所述条件语句的数量中的一个或多个决定的;其中,当所述变量的取值为所述变量的模糊区间中的数值时,包含所述变量的条件语句是否成立还与其它因素有关。4.根据权利要求2或3中所述的方法,其特征在于,所述与所述第一循环语句对应的至少一个循环语句中还包括第三循环语句;其中,所述第一变量在所述第三循环语句中的取值区间为第二区间,且当所述第一变量的取值为所述第二区间中的数值时,所述第一条件语句是否成立还与其它因素有关。5.根据权利要求4所述的方法,其特征在于,所述第一条件语句还包括第二变量,所述方法还包括:当所述预估的所述第一程序的编译结果的映射时间大于所述预设时间,且所述第二变量为所述指令映射标签下方循环语句的循环条件和所述至少一个条件语句共同包含变量中的一个;或者,当所述预估的所述第一程序的编译结果的映射时间小于或等于所述预设时间,且所述第二变量为所述多层循环语句中每层循环语句的循环条件和所述至少一个条件语句共同包含变量中的一个时,对所述第三循环语句中第一变量的第二区间进行处理,得到一个或多个第四循环语句;
其中,每个所述第四循环语句中的第一变量的取值区间为所述第二区间的子集。6.根据权利要求4所述的方法,其特征在于,所述第一条件语句还包括第二变量,所述第二变量在所述第三循环语句中的取值区间为第三区间;所述方法还包括:当所述预估的所述第一程序的编译结果的映射时间大于所述预设时间,且所述第二变量为所述指令映射标签上方的循环语句的循环条件中包含的变量时,对所述第三循环语句中的第三区间进行处理,得到一个或多个第五循环语句;其中,每个所述第五循环语句中第二变量的取值区间为所述第三区间的子集。7.根据权利要求1

6中任一项所述的方法,其特征在于,所述每层循环语句的循环条件包括的变量的取值区间的两个端点为常数,且所述至少一个条件语句包含的变量都为所述多层循环语句的循环条件中包含的变量。8.一种程序编译方法,其特征在于,所述方法包括:获取第二程序;其中,所述第二程序包括多层循环语句,每层循环语句的循环条件包括变量和所述变量的取值区间,所述多层循环语句的循环体中包括至少一个条件语句;所述多层循环语句包括第五循环语句;其中,所述第五循环语句为所述多层循环语句中的一层循环语句,所述第五循环语句的循环条件中包括的变量为第三变量,且所述第三变量为所述至少一个条件语句中的第二条件语句所包含变量中的一个;对所述第五循环语句中第三变量的第一取值区间进行更新,以得到第六循环语句;其中,更新后的所述第一取值区间使所述第二条件语句恒成立;基于所述第六循环语句对所述第二程序进行编译,以得到所述第二程序的编译结果;所述第二程序的编译结果与所述第六循环语句有关。9.根据权利要求8所述的方法,其特征在于,所述第二程序包括指令映射标签;所述第三变量为所述指令映射标签下方循环语句的循环条件和所述至少一个条件语句共同包含变量中的一个。10.根据权利要求8或9所述的方法,其特征在于,所述对所述第五循环语句中第三变量的第一取值区间进行更新,包括:基于所述第二条件语句得到所述第三变量的第二取值区间;利用所述第一取值区间和所述第二取值区间的交集更新所述第一取值区间。11.根据权利要求8

10中任一项所述的方法,其特征在于,所述每层循环语句的循环条件包括的变量的取值区间的两个端点中至少一个为非常数和/或所述至少一个条件语句中每个条件语句还包括第四变量,其中,所述第四变量为未被包含于所述每层循环语句的循环条件中的变量。12.一种程序编译装置,其特征在于,所述装置包括:获取单元,用于获取第一程序;其中,所述第一程序包括多层循环语句,所述多层循环语句中每层循环语句的循环条件包括变量和所述变量的取值区间,所述多层循环语句的循环体中包括至少一个条件语句;所述多层循环语句包括第一循环语句;其中,所述第一循环语句为所述多层循环语句中的一层循环语句,所述第一循环语句的循环条件中包括的变量为第一变量,且所述第一变量为所述至少一个条件语句中的第一条件语句所包含变量中的一个;处理单元...

【专利技术属性】
技术研发人员:刘志康吴凌飞陆敬磊徐子明程琛
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1