System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及一种针对申威平台.net运行时的结构体提升优化编译方法、装置、存储介质及设备,属于编译优化。
技术介绍
1、主流平台如x86、arm的.net运行时即时编译器在处理结构体类型的局部变量时,均采用一种称为结构体提升(或聚合量标量替换)的优化编译方法。该方法先将结构体类型变量内部所有字段提升为局部变量并参与优化编译,再为提升后的结构体字段分配寄存器以便于访问。该方法既可减少对结构体字段的栈上访问次数,又可提升对结构体字段的访问速度。申威平台的.net运行时目前采用结构体默认编译方式。
2、x86、arm平台的.net运行时在启用结构体提升优化编译之前会经历结构体提升决策阶段,此阶段对结构体类型变量的特征进行检查,只有当结构体类型的特征完全满足结构体提升优化编译的前提条件,即时编译器才会执行结构体提升优化编译。
3、x86、arm平台的.net运行时中虽支持结构体提升优化编译,但此项优化编译开启的前提条件是通过结构体提升决策阶段的所有检查。结构体提升决策阶段基于结构体类型变量的特征,对结构体提升优化编译的开启做了诸多限制,包括:结构体内部所有字段必须为基元类型、结构体内部字段数量不超过设定值、结构体所占用字节数不超过设定值等。当结构体变量的特征不满足其中任一条件,.net运行时则关闭结构体提升优化编译。
4、结构体提升决策阶段未充分考虑平台差异,限制了结构体提升优化编译的适用范围。对于未通过决策阶段所有检查的结构体,即时编译器关闭结构体提升编译优化并采用结构体默认编译方式。结构体默认编
技术实现思路
1、本专利技术的目的在于提供一种针对申威平台.net运行时的结构体提升优化编译方法、装置、存储介质及设备,解决现有技术中存在的适用范围小的问题。
2、为实现以上目的,本专利技术是采用下述技术方案实现的:
3、第一方面,本专利技术提供了一种针对申威平台.net运行时的结构体提升优化编译方法,包括:
4、获取语法树中的结构体变量;
5、若所述结构体变量满足预设的进入结构体提升优化编译条件,则对所述结构体变量进行结构体提升优化编译;
6、所述预设的进入结构体提升优化编译条件,包括:
7、获取当前平台cpu寄存器使用规范中定义的临时寄存器数量并将其设为m,然后按照以下顺序对结构体变量依次检查:结构体变量中字段个数不超过m、结构体变量的大小不超过m*8个字节、结构体变量中字段均为基元类型、结构体变量中不包含特殊对齐的字段和结构体变量中字段未参与smid指令,若结构体变量满足以上所有条件,则满足进入结构体提升优化编译条件。
8、结合第一方面,进一步的,所述结构体变量通过以下方法得到:
9、获取il代码,逐条解析出il代码中的il指令并将其转换为语法树的节点,从而生成初始语法树,,遍历初始语法树中所有的局部变量,筛选出其中的结构体变量。
10、结合第一方面,进一步的,所述结构体提升优化编译包括:
11、将结构体变量中的所有字段根据预设的偏移量进行升序排序;
12、对排序后的每个字段进行提升得到各自对应的临时局部变量,并为所述临时局部变量分配空闲的临时寄存器;
13、将语法树中访问字段的节点替换成访问临时局部变量的节点;
14、替换节点后的语法树对所述结构体变量进行优化生成优化语法树;
15、为优化语法树中所述访问临时局部变量的节点生成指令描述对象,将指令描述对象存入指令组对象;
16、将指令组对象中的指令描述对象按照申威平台指令格式编码成指令机器码,完成结构体提升优化编译。
17、结合第一方面,进一步的,在所述对排序后的每个字段进行提升后,原来的结构体变量仍保留。
18、结合第一方面,进一步的,还包括:若所述结构体变量不满足预设的进入结构体提升优化编译条件,对所述结构体变量采用结构体默认编译方式。
19、结合第一方面,进一步的,所述为优化语法树中所述访问临时局部变量的节点生成指令描述对象,包括:将对节点对应的临时局部变量的存取指令操作和为该临时局部变量分配的临时寄存器的编号保存到生成的指令描述对象中。
20、结合第一方面,进一步的,所述将指令组对象中的指令描述对象按照申威平台指令格式编码成指令机器码,包括:将指令描述对象中的存取指令操作和临时寄存器的编号按照申威平台指令格式编码成指令机器码。
21、第二方面,本专利技术还提供了一种针对申威平台.net运行时的结构体提升优化编译装置,包括:
22、变量获取模块,被配置为:获取语法树中的结构体变量;
23、结构体提升优化编译模块,被配置为:若所述结构体变量满足预设的进入结构体提升优化编译条件,则对所述结构体变量进行结构体提升优化编译;
24、所述预设的进入结构体提升优化编译条件,包括:
25、获取当前平台cpu寄存器使用规范中定义的临时寄存器数量并将其设为m,然后按照以下顺序对结构体变量依次检查:结构体变量中字段个数不超过m、结构体变量的大小不超过m*8个字节、结构体变量中字段均为基元类型、结构体变量中不包含特殊对齐的字段和结构体变量中字段未参与smid指令,若结构体变量满足以上所有条件,则满足进入结构体提升优化编译条件。
26、第三方面,本专利技术还提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时,实现如第一方面任一项所述的针对申威平台.net运行时的结构体提升优化编译方法。
27、第四方面,本专利技术还提供了一种设备,包括:
28、存储器,用于存储指令;
29、处理器,用于执行所述指令,使得所述设备执行实现如第一方面任一项所述的针对申威平台.net运行时的结构体提升优化编译方法的操作。
30、与现有技术相比,本专利技术所达到的有益效果是:
31、本专利技术提供的一种针对申威平台.net运行时的结构体提升优化编译方法、装置、存储介质及设备,在结构体提升决策阶段,根据当前平台cpu寄存器使用规范中定义的临时寄存器数量,再结合结构体字段数量和类型、结构体大小决定是否启用结构体提升编译优化,针对平台特点优化结构体提升编译优化的适用范围;
32、在语法树变形阶段,将结构体变量中的字段提升为临时局部变量,使其参与即时编译器后续阶段的优化编译步骤;在寄存器分配阶段,提升后的结构体字段被保存于寄存器中,减少了对结构体字段的栈上访问次数,同时提高了对结构体字段的访问速度。
本文档来自技高网...【技术保护点】
1.一种针对申威平台.NET运行时的结构体提升优化编译方法,其特征在于,包括:
2.根据权利要求1所述的针对申威平台.NET运行时的结构体提升优化编译方法,其特征在于,所述结构体变量通过以下方法得到:
3.根据权利要求1所述的针对申威平台.NET运行时的结构体提升优化编译方法,其特征在于,所述结构体提升优化编译包括:
4.根据权利要求3所述的针对申威平台.NET运行时的结构体提升优化编译方法,其特征在于,在所述对排序后的每个字段进行提升后,原来的结构体变量仍保留。
5.根据权利要求1所述的针对申威平台.NET运行时的结构体提升优化编译方法,其特征在于,还包括:若所述结构体变量不满足预设的进入结构体提升优化编译条件,对所述结构体变量采用结构体默认编译方式。
6.根据权利要求3所述的针对申威平台.NET运行时的结构体提升优化编译方法,其特征在于,所述为优化语法树中所述访问临时局部变量的节点生成指令描述对象,包括:将对节点对应的临时局部变量的存取指令操作和为该临时局部变量分配的临时寄存器的编号保存到生成的指令描述对象中。
>7.根据权利要求3所述的针对申威平台.NET运行时的结构体提升优化编译方法,其特征在于,所述将指令组对象中的指令描述对象按照申威平台指令格式编码成指令机器码,包括:将指令描述对象中的存取指令操作和临时寄存器的编号按照申威平台指令格式编码成指令机器码。
8.一种针对申威平台.NET运行时的结构体提升优化编译装置,其特征在于,包括:
9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时,实现如权利要求1-7任一项所述的针对申威平台.NET运行时的结构体提升优化编译方法。
10.一种设备,其特征在于,包括:
...【技术特征摘要】
1.一种针对申威平台.net运行时的结构体提升优化编译方法,其特征在于,包括:
2.根据权利要求1所述的针对申威平台.net运行时的结构体提升优化编译方法,其特征在于,所述结构体变量通过以下方法得到:
3.根据权利要求1所述的针对申威平台.net运行时的结构体提升优化编译方法,其特征在于,所述结构体提升优化编译包括:
4.根据权利要求3所述的针对申威平台.net运行时的结构体提升优化编译方法,其特征在于,在所述对排序后的每个字段进行提升后,原来的结构体变量仍保留。
5.根据权利要求1所述的针对申威平台.net运行时的结构体提升优化编译方法,其特征在于,还包括:若所述结构体变量不满足预设的进入结构体提升优化编译条件,对所述结构体变量采用结构体默认编译方式。
6.根据权利要求3所述的针对申威平台.net运行时的结构体提升优化...
【专利技术属性】
技术研发人员:华浩锋,张海军,沈重午,张旻烜,胡远琪,戴亮,
申请(专利权)人:无锡先进技术研究院,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。