CN112052004A - 函数的参数优化方法、编译器、芯片及电子设备 - Google Patents
函数的参数优化方法、编译器、芯片及电子设备 Download PDFInfo
- Publication number
- CN112052004A CN112052004A CN201910487030.2A CN201910487030A CN112052004A CN 112052004 A CN112052004 A CN 112052004A CN 201910487030 A CN201910487030 A CN 201910487030A CN 112052004 A CN112052004 A CN 112052004A
- Authority
- CN
- China
- Prior art keywords
- parameter
- function
- register
- allowance
- called
- 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.)
- Withdrawn
Links
Images
Classifications
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本申请涉及测试技术领域,提供了一种函数的参数优化方法、编译器、芯片及电子设备。函数的参数优化方法,包括:将被调用函数的寄存器压力余量、调用函数的寄存器压力余量以及参数寄存器的余量中的最小值,作为被调用函数的寄存器余量;对于每个需要使用栈传递的聚合量参数,根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化以得到优化后的聚合物参数,其中至少部分优化后的聚合量参数为标量。本申请实施例的技术方案,尽可能的利用参数寄存器来传递被调用函数中需要使用栈来传递的聚合量参数,能够充分利用寄存器资源,优化后的聚合量参数中的标量部分可以用参数寄存器传递,速度较快,提升了编译后代码的执行效率。
Description
技术领域
本申请涉及计算机技术领域,特别涉及一种函数的参数优化方法、编译器、芯片及电子设备。
背景技术
计算机系统程序的性能取决于两个方面,一个是计算机硬件的性能,一个是运行在计算机硬件上的软件自身的性能。软件自身的性能则包括软件的执行效率以及软件的代码大小。编译器则负责对软件的执行效率以及软件的代码大小进行优化,以期望尽可能地提高编译后的软件的性能。
发明人发现现有技术至少存在以下问题:按照现有的函数调用规范,编译器在对软件代码进行优化时,如果函数的参数的长度大于两个参数寄存器长度,则直接使用栈对该参数进行传递,栈传递参数的速度较慢,影响软件代码的执行效率。
发明内容
本申请部分实施例的目的在于提供一种函数的参数优化方法、编译器、芯片及电子设备,尽可能的利用参数寄存器来传递被调用函数中需要使用栈传递的聚合量参数,能够充分利用寄存器资源;同时,相对于现有技术中用栈传递的聚合量参数,本发明可以用参数寄存器传递优化后的聚合量参数中的标量部分,速度较快,从而提升了编译后代码的执行效率。
本申请实施例提供了一种函数的参数优化方法,包括:对待编译代码中的被调用函数以及被调用函数的调用函数分别进行寄存器压力评估,得到被调用函数的寄存器压力余量以及调用函数的寄存器压力余量;获取用于传递被调用函数的聚合量参数的参数寄存器的余量;将被调用函数的寄存器压力余量、调用函数的寄存器压力余量以及参数寄存器的余量中的最小值,作为被调用函数的寄存器余量;对于每个需要使用栈传递的聚合量参数,根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化以得到优化后的聚合物参数,其中至少部分优化后的聚合量参数为标量。
本申请实施例还提供了一种编译器,用于执行上述的函数的参数优化方法。
本申请实施例还提供了一种芯片,包括上述的编译器。
本申请实施例还提供了一种电子设备,包括上述的芯片。
本申请实施例相对于现有技术而言,先对被调用函数与被调用函数的调用函数分别进行寄存器压力评估,得到被调用函数与调用函数的寄存器压力余量,再获取被调用函数中用于传递聚合量参数的参数寄存器的余量,将被调用函数与调用函数的寄存器压力余量与用于传递聚合量参数的参数寄存器的余量中的最小值作为被调用函数的寄存器余量,对于待编译代码中被调用函数的需要使用栈传递的聚合量参数,根据该聚合量参数的长度与寄存器余量,对聚合量参数进行优化,以得到优化后的聚合量参数,至少部分优化后的聚合量参数为标量,标量部分可以直接用参数寄存器进行传递,即尽可能的利用参数寄存器来传递被调用函数中需要使用栈传递的聚合量参数,能够充分利用寄存器资源;同时,相对于现有技术中用栈传递聚合量参数,本发明可以用参数寄存器传递优化后的聚合量参数中的标量部分,速度较快,从而提升了编译后代码的执行效率。
另外,对待编译代码中被调用函数以及被调用函数的调用函数分别进行寄存器压力评估,得到被调用函数以及调用函数的寄存器压力余量,包括:对于每个函数,获取保存函数中的数据需要消耗寄存器的数量,数据包括函数的变量、函数的目标参数与函数的返回值;其中函数为被调用函数或调用函数,目标参数为函数中需要使用参数寄存器传递的参数;根据保存数据需要消耗寄存器的数量,得到函数的寄存器压力余量。本实施例提供了对调用函数或被调用函数进行寄存器压力评估的一种具体实现方式。
另外,变量包括函数中的静态单赋值形式变量与函数中的局部变量。基于存放在寄存器中的变量一定是静态单赋值形式变量或局部变量,本实施例中限定变量包括静态单赋值形式变量与局部变量,便可以最大限度评估出函数的寄存器压力余量。
另外,变量包括静态单赋值形式变量中去除保存到栈的静态单赋值形式变量后剩余的部分与目标局部变量中去除保存到栈的目标局部变量后剩余的部分。本实施例中,去除了静态单赋值形式变量中保存到栈上的部分,以及局部变量中保存到栈上的部分,从而能够更准确的评估出函数的寄存器压力余量。
另外,根据保存数据需要消耗寄存器的数量,得到函数的寄存器压力余量,具体为:将保存数据需要消耗寄存器的数量代入公式K=S+A+T–N,计算函数的寄存器压力余量;其中,K表示函数的寄存器压力余量,S表示被调用函数保存的寄存器的数量,A表示参数寄存器的数量,T表示临时寄存器的数量,N表示保存数据需要消耗寄存器的数量。本实施例中提供了根据保存数据需要消耗寄存器的数量,得到函数的寄存器压力余量的一种具体实现方式。
另外,聚合量参数包括多个分量;根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化,包括:判断聚合量参数的长度除以参数寄存器长度的商值是否小于或等于寄存器余量;若聚合量参数的长度除以参数寄存器长度的商值小于或等于寄存器余量,将聚合量参数替换为多个分量对应的多个标量,并根据商值,更新寄存器余量;若聚合量参数的长度除以参数寄存器长度的商值大于寄存器余量,将聚合量参数替换为预设数量的分量对应的标量与新聚合量参数的组合;预设数量小于或等于寄存器余量,新聚合量参数由聚合量参数去除预设数量的分量后得到。本实施例提供了根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化的一种具体实现方式。
另外,被调用函数为局部函数。本实施例中,仅对待编译代码中局部函数进行参数优化,局部函数仅在待编译代码内部被调用,从而避免出现二进制不兼容的问题。
另外,在根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化之后,还包括:根据被优化聚合量参数后的被调用函数,修改待编译代码中调用函数对被调用函数的调用方式。本实施例中,利用被优化聚合量参数后的调用函数,调整待编译代码中调用函数对被调用函数的调用方式,从而调用函数可以直接加载被优化后的聚合量参数的标量部分到参数寄存器中,相对于通过栈来加载聚合量参数,加快了聚合量参数的加载速度,提升了待编译代码的执行效率。
另外,标量使用参数寄存器传递。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是根据本申请第一实施例的函数的参数优化方法的具体流程图;
图2是根据本申请第二实施例的函数的参数优化方法的具体流程图;
图3是根据本申请第三实施例的函数的参数优化方法的具体流程图;
图4是根据本申请第四实施例的函数的参数优化方法的具体流程图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请部分实施例进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请第一实施例涉及一种函数的参数优化方法,应用于芯片中的编译器,芯片为处理器芯片,编译器用于对程序的代码进行优化,前端会将用户的高级语言代码翻译成适合编译器优化的中间代码形式,称为中级中间表示,简称MIR,然后对MIR作优化处理,后端再将优化后的MIR转化成后端代码形式,成为低级中间表示,简称LIR。
本发明的函数的参数优化方法的具体流程如图1所示。
步骤101,对待编译代码中的被调用函数以及被调用函数的调用函数分别进行寄存器压力评估,得到被调用函数的寄存器压力余量以及调用函数的寄存器压力余量。
具体而言,待编译代码可以为MIR阶段的代码,在待编译代码的被调用函数中一般包括标量参数和聚合量参数,标量参数为单一变量参数,聚合量参数为拥有多个分量的变量参数,例如结构体。对于处理器芯片来说,芯片架构体系的调用规范中规定了可使用参数寄存器传递的参数长度,该参数长度例如为两倍的参数寄存器的长度;当聚合量参数的长度大于该参数长度时,该聚合量参数需要使用栈传递,即存在需要使用栈传递的聚合量参数,此时对被调用函数以及被调用函数的调用函数分别进行寄存器压力评估,得到被调用函数的寄存器压力余量以及调用函数的寄存器压力余量;其中,被调用函数的调用函数的数量可以为一个或多个;以调用函数的数量为多个为例,则本步骤中可以得到被调用函数的寄存器压力余量L1以及多个调用函数的寄存器压力余量L2至Ln,n为大于2的正整数。
步骤102,获取用于传递被调用函数的聚合量参数的参数寄存器的余量。
具体而言,对于处理器芯片而言,由于其体系架构是固定的,因此处理器芯片中的参数寄存器的数量A也是固定的,去除A个参数寄存器中用于传递被调用函数的标量参数和被调用函数的返回值所使用的As个参数寄存器,剩余的参数寄存器便为用于传递被调用函数的聚合量参数的参数寄存器的余量La=A-As。
步骤103,将被调用函数的寄存器压力余量、调用函数的寄存器压力余量以及用于传递聚合量参数的参数寄存器的余量中的最小值,作为被调用函数的寄存器余量。
具体而言,从被调用函数的寄存器压力余量L1、多个调用函数的寄存器压力余量L2至Ln以及用于传递聚合量参数的参数寄存器的余量La中,选出最小的值,从而能够得到被调用函数的寄存器余量,表征了能够用来传递被调用函数中的聚合量参数的参数寄存器的数量。
步骤104,对于每个需要使用栈传递的聚合量参数,根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化以得到优化后的聚合物参数,其中其中至少部分优化后的聚合量参数为标量。
具体而言,对于每个需要使用栈传递的聚合量参数,结合聚合量参数的长度和被调用函数的寄存器余量,来对聚合量参数进行优化,得到优化后的聚合量参数;优化的方法可以是标量替代聚合量(Scalar Reduction of Aggregates,简称SRA),至少部分优化后的聚合量参数中为标量,标量部分可以用参数寄存器来传递,从而在MIR阶段的代码转化到LIR阶段时,使用参数寄存器来传递聚合量参数的标量部分,能够最大化利用寄存器资源。
另外,被调用函数内部可以直接通过一个数据传送操作从参数寄存器中取出优化后的聚合量参数的标量部分,并且该数据传送操作也可以后续被优化消除,无需现有技术中通过内存进行加载的操作(现有技术中通过内存加载的操作不可消除)。另外,由于基于被调用函数的寄存器余量进行SRA,可以避免优化后的聚合量参数中标量的数量大于寄存器余量的情况,即避免了寄存器溢出到栈。
在一个例子中,被调用函数为局部函数,即仅对待编译代码中局部函数进行参数优化,局部函数仅在待编译代码内部被调用,对外部是不可见的,并且其调用规范和函数签名是可被更改的,同时也可以被内联化,基于局部函数的上述特性,从而避免参数优化后的局部函数和未进行参数优化的函数之间的二进制不兼容问题。需要说明的是,当处理器芯片体系架构的调用规范中也使用了本实施例的参数优化方法,则无论被调用函数是否为局部函数,均不会出现二进制不兼容的问题。
本实施方式相对于现有技术而言,先对被调用函数与被调用函数的调用函数分别进行寄存器压力评估,得到被调用函数与调用函数的寄存器压力余量,再获取被调用函数中用于传递聚合量参数的参数寄存器的余量,将被调用函数与调用函数的寄存器压力余量与用于传递聚合量参数的参数寄存器的余量中的最小值作为被调用函数的寄存器余量,对于待编译代码中被调用函数的需要使用栈传递的聚合量参数,根据该聚合量参数的长度与寄存器余量,对聚合量参数进行优化,以得到优化后的聚合量参数,至少部分优化后的聚合量参数为标量,标量部分可以直接用参数寄存器进行传递,即尽可能的利用参数寄存器来传递被调用函数中需要使用栈传递的聚合量参数,能够充分利用寄存器资源;同时,相对于现有技术中用栈传递聚合量参数,本发明可以用参数寄存器传递优化后的聚合量参数中的标量部分,速度较快,从而提升了编译后代码的执行效率。
本申请第二实施例涉及一种函数的参数优化方法,本实施方式是在第一实施方式基础上的细化,主要细化之处在于:提供了对调用函数或被调用函数进行寄存器压力评估的一种具体实现方式。
本实施方式的函数的参数优化方法的具体流程如图2所示。
其中,步骤202至步骤204与步骤102至步骤104大致相同,在此不再赘述,主要不同之处在于,步骤201包括以下子步骤:
子步骤2011,对于每个函数,获取保存函数中的数据需要消耗寄存器的数量。
具体而言,对于每个函数,函数为被调用函数或调用函数,获取保存函数中的数据需要消耗寄存器的数量,数据包括函数的变量、函数的目标参数与函数的返回值,目标参数为按照处理器芯片架构体系的调用规范需要使用参数寄存器传递的参数。
对于函数来说,保存在寄存器中的变量一定是静态单赋值形式变量或局部变量,因此,本实施例中的变量可以包括函数中的静态单赋值形式变量与函数中的局部变量,便可以最大限度评估出函数的寄存器压力余量。
在一个例子中,变量包括静态单赋值形式变量中去除保存到栈的静态单赋值形式变量后剩余的部分与目标局部变量中去除保存到栈的目标局部变量后剩余的部分,即去除了静态单赋值形式变量中保存到栈上的部分,以及局部变量中保存到栈上的部分,从而能够更准确的评估出函数的寄存器压力余量;具体如下:
对于函数中的所有的静态单赋值形式变量,评估各单赋值形式变量是否将分配到栈,具体的,静态单赋值形式变量对应于一个局部变量,且该局部变量为volatile类型、addressable类型或aggregate类型,则说明该静态单赋值形式变量需要保存到栈,此处将所有的静态单赋值形式变量中显著地应该保存到栈上的部分去除,并假设剩余的静态单赋值形式变量均保存在寄存器中,便可以得到保存函数中的静态单赋值形式变量需要消耗寄存器的数量N1。
对于函数中的所有的局部变量,评估各单局部变量是否将分配到栈,具体的,对于某个局部变量,当该局部变量为volatile类型、addressable类型或aggregate类型,则说明该局部变量需要保存到栈,此处将所有的局部变量中显著地应该保存到栈上的部分去除,并假设剩余的局部变量均保存在寄存器中,便可以得到保存函数中的局部变量需要消耗寄存器的数量N2。
由上可知,保存函数中的变量需要消耗寄存器的数量为N1+N2。
本实施例中,根据函数的目标参数的长度与函数的返回值的长度,获取传递目标参数所需要消耗的寄存器的数量与传递返回值所需要消耗的寄存器的数量,用P表示传递目标参数所需寄存器的数量与传递函数的返回值所需寄存器的数量之和,则保存函数中的数据需要消耗寄存器的数量N=P+N1+N2。
子步骤2012,根据保存数据需要消耗寄存器的数量,得到函数的寄存器压力余量。
具体而言,获取函数可用的寄存器的数量J,可用的寄存器包括:被调用函数保存的寄存器的数量S、处理器芯片中参数寄存器的数量A以及临时寄存器的数量T,即函数可用的寄存器的数量J=S+A+T,将函数可用的寄存器的数量J减去保存函数中的数据需要消耗寄存器的数量N,即可以得到函数的寄存器压力余量K=J-N=S+A+T–P–N1-N2。
本实施方式相对于第一实施方式而言,提供了对调用函数或被调用函数进行寄存器压力评估的一种具体实现方式。
本申请第三实施例涉及一种函数的参数优化方法,本实施方式是在第一实施方式基础上的细化,主要细化之处在于:提供了根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化的一种具体实现方式。
本实施方式的函数的参数优化方法的具体流程如图3所示。
其中,步骤301至步骤303与步骤101至步骤103大致相同,在此不再赘述,主要不同之处在于,步骤304包括以下子步骤:
子步骤3041,对于每个需要使用栈传递的聚合量参数,判断聚合量参数的长度除以参数寄存器长度的商值是否小于或等于寄存器余量。若是,则进入子步骤3042;若否,则进入子步骤3043。
具体而言,对于每个需要使用栈传递的聚合量参数,计算聚合量参数的长度除以参数寄存器长度的商值,即计算该聚合量参数需要消耗的参数寄存器的数量,若聚合量参数需要消耗的参数寄存器的数量小于或等于被调用函数的寄存器余量,进入子步骤3042;若聚合量参数需要消耗的参数寄存器的数量大于被调用函数的寄存器余量,进入子步骤3043。
子步骤3042,将聚合量参数替换为多个分量对应的多个标量,并根据商值,更新寄存器余量。
具体而言,聚合量参数包括多个分量,每个分量对应一个标量,由于聚合量参数需要消耗的参数寄存器的数量小于或等于被调用函数的寄存器余量,因此可以对聚合量参数的所有分量进行SRA转换,用多个分量对应的多个标量替换该聚合量参数,即优化后的聚合量参数为多个标量;再根据商值,更新寄存器余量,具体的,计算寄存器余量减去商值的差值,并将该差值作为更新后的寄存器余量,然后回到子步骤3041,对下一个需要使用栈传递的聚合量参数的进行优化。举例来说,被调用函数fun为:int fun(int a1,int a2,struct_type_t t);其中,聚合量参数struct_type_t t具有如下定义:
typedef struct{
int a;int b;int c;
}struct_type_t;
聚合量参数包括三个分量:int a,int b,int c;将聚合量参数struct_type_t t替换为三个分量对应的标量,优化后的聚合量参数为(int t_a,int t_b,int t_c)从而被调用函数fun被替换为:int fun(int a1,int a2,int t_a,int t_b,int t_c);在被调用函数fun的实现过程中,对结构体t的使用将被替换为对标量a、b、c的使用。
子步骤3043,将聚合量参数替换为预设数量的分量对应的标量与新聚合量参数的组合。
具体而言,由于聚合量参数需要消耗的参数寄存器的数量大于被调用函数的寄存器余量,因此仅可以对聚合量参数的预设数量的分量进行SRA转换,预设数量小于或等于寄存器余量,并将去除进行SRA转换的预设数量的分量聚合量参数作为新聚合量参数,从而聚合量参数被替换为预设数量的分量对应的标量与新聚合量参数的组合,该组合即为优化后的聚合量参数。举例来说,被调用函数fun为:int fun(int a1,int a2,struct_type_t t);
聚合量参数struct_type_t t具有如下定义:
typedef struct{
int a;int b;int c;int d;int e;
}struct_type_t;
聚合量参数包括五个分量:int a,int b,int c,int d,int e;以寄存器余量为2为例,则仅可对其中一个或两个分量进行SRA转换,以对两个分量int a、int b进行SRA转换为例,则优化后的聚合量参数为(int t_a,int t_b,struct_type_new_t t),其中struct_type_new_t t具有如下定义:
typedef struct{
int c;int d;int e;
}struct_type_new_t;
被调用函数fun被替换为:
int fun(inta1,int a2,int t_a,int t_b,struct_type_new_t t);对聚合量参数struct_type_t t的使用将被替换为对标量t_a、t_b和新聚合量参数struct_type_new_tt的使用。
需要说明的是,若预设数量小于寄存器余量,则此时同样需要对寄存器余量进行更新,更新后的寄存器余量为寄存器余量减去该预设数量,然后再回到子步骤3041,对下一个需要使用栈传递的聚合量参数的进行优化。
本实施方式相对于第一实施方式而言,提供了根据聚合量参数的长度和寄存器余量,对聚合量参数进行优化的一种具体实现方式。需要说明的是,本实施方式还可以作为在第二实施方式基础上的细化。
本申请第四实施例涉及一种函数的参数优化方法,本实施方式是在第一实施方式基础上的改进,主要改进之处在于:改进了调用函数对被调用函数的调用方式。
本实施方式的函数的参数优化方法的具体流程如图4所示。
其中,步骤401至步骤404与步骤101至步骤104大致相同,在此不再赘述,主要不同之处在于,增加了步骤405,具体如下:
步骤405,根据被优化聚合量参数后的被调用函数,修改待编译代码中调用函数对被调用函数的调用方式。
具体而言,被调用函数在聚合量参数被优化后,被调用函数的函数原型被改变,可以得到一个新的被调用函数的函数模型,并根据该函数模型替换掉各调用函数对该被调用函数的函数原型,替换掉被调用函数的函数原型之后,只需要2条指令来加载聚合量参数的地址到寄存器,无需计算传递聚合量参数的栈地址(现有技术中通过栈传递需要计算传递聚合量参数的栈地址),每传递聚合量参数的一个成员需要3~4条指令,并且在这3~4条指令中,有一条临时寄存器到参数寄存器的数据传送指令是可被优化消除的。
本实施方式相对于第一实施方式而言,利用被优化聚合量参数后的调用函数,调整待编译代码中调用函数对被调用函数的调用方式,从而调用函数可以直接加载被优化后的聚合量参数的标量部分到参数寄存器中,相对于通过栈来加载聚合量参数,加快了聚合量参数的加载速度,提升了待编译代码的执行效率。需要说明的是,本实施方式还可以作为在第二或第三实施方式基础上改进。
本申请第五实施方式涉及一种编译器,应用于芯片,芯片为处理器芯片,编译器用于对程序的代码进行优化,前端会将用户的高级语言代码翻译成适合编译器优化的中间代码形式,称为中级中间表示,简称MIR,然后对MIR作优化处理,后端再将优化后的MIR转化成后端代码形式,成为低级中间表示,简称LIR。
本实施方式的编译器用于第一实施例至第四实施例中的函数的参数优化方法。
本申请第六实施例涉及一种芯片,芯片为处理器芯片,芯片包括第五实施例中的编译器。
本申请第七实施例涉及一种电子设备,电子设备例如为个人电脑,电子设备包括第六实施例中的的芯片。
本领域的普通技术人员可以理解,上述各实施例是实现本申请的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本申请的精神和范围。
Claims (12)
1.一种函数的参数优化方法,其特征在于,包括:
对待编译代码中的被调用函数以及所述被调用函数的调用函数分别进行寄存器压力评估,得到所述被调用函数的寄存器压力余量以及所述调用函数的寄存器压力余量;
获取用于传递所述被调用函数的聚合量参数的参数寄存器的余量;
将所述被调用函数的寄存器压力余量、所述调用函数的寄存器压力余量以及所述参数寄存器的余量中的最小值,作为所述被调用函数的寄存器余量;
对于每个需要使用栈传递的所述聚合量参数,根据所述聚合量参数的长度和所述寄存器余量,对所述聚合量参数进行优化以得到优化后的聚合物参数,其中至少部分所述优化后的聚合量参数为标量。
2.如权利要求1所述的函数的参数优化方法,其特征在于,所述对待编译代码中被调用函数以及所述被调用函数的调用函数分别进行寄存器压力评估,得到所述被调用函数以及所述调用函数的寄存器压力余量,包括:
对于每个函数,获取保存所述函数中的数据需要消耗寄存器的数量,所述数据包括所述函数的变量、所述函数的目标参数与所述函数的返回值;其中所述函数为所述被调用函数或所述调用函数,所述目标参数为所述函数中需要使用所述参数寄存器传递的参数;
根据保存所述数据需要消耗寄存器的数量,得到所述函数的寄存器压力余量。
3.如权利要求2所述的函数的参数优化方法,其特征在于,所述变量包括所述函数中的静态单赋值形式变量与所述函数中的局部变量。
4.如权利要求3所述的函数的参数优化方法,其特征在于,所述变量包括所述静态单赋值形式变量中去除保存到栈的所述静态单赋值形式变量后剩余的部分与所述目标局部变量中去除保存到栈的所述目标局部变量后剩余的部分。
5.如权利要求2所述的函数的参数优化方法,其特征在于,所述根据保存所述数据需要消耗寄存器的数量,得到所述函数的寄存器压力余量,具体为:
将保存所述数据需要消耗寄存器的数量代入公式K=S+A+T–N,计算所述函数的寄存器压力余量;
其中,K表示所述函数的寄存器压力余量,S表示所述被调用函数保存的寄存器的数量,A表示所述参数寄存器的数量,T表示临时寄存器的数量,N表示保存所述数据需要消耗寄存器的数量。
6.如权利要求1所述的函数的参数优化方法,其特征在于,所述聚合量参数包括多个分量;所述根据所述聚合量参数的长度和所述寄存器余量,对所述聚合量参数进行优化,包括:
判断所述聚合量参数的长度除以所述参数寄存器长度的商值是否小于或等于所述寄存器余量;
若所述聚合量参数的长度除以所述参数寄存器长度的商值小于或等于所述寄存器余量,将所述聚合量参数替换为所述多个分量对应的多个标量,并根据所述商值,更新所述寄存器余量;
若所述聚合量参数的长度除以所述参数寄存器长度的商值大于所述寄存器余量,将所述聚合量参数替换为预设数量的所述分量对应的标量与新聚合量参数的组合;所述预设数量小于或等于所述寄存器余量,所述新聚合量参数由所述聚合量参数去除所述预设数量的所述分量后得到。
7.如权利要求1所述的函数的参数优化方法,其特征在于,所述被调用函数为局部函数。
8.如权利要求1所述的函数的参数优化方法,其特征在于,在所述根据所述聚合量参数的长度和所述寄存器余量,对所述聚合量参数进行优化之后,还包括:
根据被优化所述聚合量参数后的所述被调用函数,修改所述待编译代码中所述调用函数对所述被调用函数的调用方式。
9.如权利要求1所述的函数的参数优化方法,其特征在于,所述标量使用所述参数寄存器传递。
10.一种编译器,其特征在于,用于执行权利要求1至9中任一项所述的函数的参数优化方法。
11.一种芯片,其特征在于,包括权利要求10所述的编译器。
12.一种电子设备,其特征在于,包括权利要求11所述的芯片。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910487030.2A CN112052004A (zh) | 2019-06-05 | 2019-06-05 | 函数的参数优化方法、编译器、芯片及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910487030.2A CN112052004A (zh) | 2019-06-05 | 2019-06-05 | 函数的参数优化方法、编译器、芯片及电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112052004A true CN112052004A (zh) | 2020-12-08 |
Family
ID=73608871
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910487030.2A Withdrawn CN112052004A (zh) | 2019-06-05 | 2019-06-05 | 函数的参数优化方法、编译器、芯片及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112052004A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114661296A (zh) * | 2022-03-28 | 2022-06-24 | 阿里巴巴(中国)有限公司 | 程序代码编译方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233766A1 (en) * | 2006-04-04 | 2007-10-04 | Gschwind Michael K | System and method for compiling scalar code for a single instruction multiple data (simd) execution engine |
CN102831005A (zh) * | 2012-07-13 | 2012-12-19 | 天津国芯科技有限公司 | 针对C*core处理器寄存器分配的编译方法及编译器 |
CN103942083A (zh) * | 2014-04-28 | 2014-07-23 | 中国人民解放军国防科学技术大学 | 一种面向可变参函数的编译实现方法 |
US20170161093A1 (en) * | 2015-12-03 | 2017-06-08 | International Business Machines Corporation | Performance optimization engine for processor parameter adjustment |
CN109800086A (zh) * | 2018-12-27 | 2019-05-24 | 芯海科技(深圳)股份有限公司 | 一种优化编译器ram空间的方法 |
-
2019
- 2019-06-05 CN CN201910487030.2A patent/CN112052004A/zh not_active Withdrawn
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233766A1 (en) * | 2006-04-04 | 2007-10-04 | Gschwind Michael K | System and method for compiling scalar code for a single instruction multiple data (simd) execution engine |
CN102831005A (zh) * | 2012-07-13 | 2012-12-19 | 天津国芯科技有限公司 | 针对C*core处理器寄存器分配的编译方法及编译器 |
CN103942083A (zh) * | 2014-04-28 | 2014-07-23 | 中国人民解放军国防科学技术大学 | 一种面向可变参函数的编译实现方法 |
US20170161093A1 (en) * | 2015-12-03 | 2017-06-08 | International Business Machines Corporation | Performance optimization engine for processor parameter adjustment |
CN109800086A (zh) * | 2018-12-27 | 2019-05-24 | 芯海科技(深圳)股份有限公司 | 一种优化编译器ram空间的方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114661296A (zh) * | 2022-03-28 | 2022-06-24 | 阿里巴巴(中国)有限公司 | 程序代码编译方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111783971A (zh) | 一种用于深度神经网络的可高度灵活配置的数据后处理器 | |
US7146613B2 (en) | JAVA DSP acceleration by byte-code optimization | |
US9898266B2 (en) | Loop vectorization methods and apparatus | |
CN111160550A (zh) | 训练方法、信息处理设备和非暂态计算机可读存储介质 | |
CN111158756B (zh) | 用于处理信息的方法和装置 | |
CN110865814B (zh) | 一种支持异构计算核架构的编译器实现方法和系统 | |
US20090144709A1 (en) | Reducing stack space consumption via head-call optimization | |
US10547334B2 (en) | Method and terminal device for executing radio application | |
CN112052004A (zh) | 函数的参数优化方法、编译器、芯片及电子设备 | |
US11922178B2 (en) | Methods and apparatus to load data within a machine learning accelerator | |
CN115600664B (zh) | 算子处理方法、电子设备及存储介质 | |
CN108388943B (zh) | 一种适用于神经网络的池化装置及方法 | |
CN116382884A (zh) | 生成要被卸载到加速器电路的命令列表的方法和装置 | |
CN115344826A (zh) | 计算装置、操作方法和机器可读存储介质 | |
CN115130659A (zh) | 用于操作系统内核数据路径的自适应神经网络 | |
CN114897133A (zh) | 一种通用可配置的Transformer硬件加速器及其实现方法 | |
US10802854B2 (en) | Method and apparatus for interpreting bytecode instruction stream | |
CN114090466A (zh) | 一种指令处理装置、方法、计算机设备及存储介质 | |
CN114356738A (zh) | 预估执行神经网络模型所需时间的方法及相关产品 | |
US20210012192A1 (en) | Arithmetic processing apparatus, control method, and non-transitory computer-readable recording medium having stored therein control program | |
CN116382782A (zh) | 向量运算方法、向量运算器、电子设备和存储介质 | |
CN112905238A (zh) | 一种区块链智能合约执行器及方法、区块链运行系统 | |
WO2021191365A1 (en) | Method and system for optimizing data transfer from one memory to another memory | |
CN113269320A (zh) | 处理单元、计算装置、片上系统、数据中心和相关方法 | |
US20230267006A1 (en) | Method for optimizing resource allocation basedon prediction with reinforcement learning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WW01 | Invention patent application withdrawn after publication | ||
WW01 | Invention patent application withdrawn after publication |
Application publication date: 20201208 |