基于国产异构平台的自适应可变参数优化方法技术

技术编号:27740543 阅读:18 留言:0更新日期:2021-03-19 13:33
本发明专利技术公开一种基于国产异构平台的自适应可变参数优化方法,包括以下步骤:S1、根据架构信息选择相应架构的ABI接口,编译器前端根据相应的ABI接口中的ABI约定对源程序进行处理,生成中间表示;S2、编译器后端扫描分析函数中的可变参函数,收集可变参函数的参数使用情况;S3、根据S2中扫描分析得到的信息,依据可变参数的数据类型和可变参数所存入的寄存器的不同,对可变参数进行后端对函数降级前的处理,为编译器后端的函数降级过程做准备;S4、编译器后端对可变参数的内建函数进行降级处理,获得降级后的中间表示;S5、生成汇编文件,即根据降级后的中间表示生成汇编指令。本发明专利技术实现了优化可变参函数的内存和减少访存指令的算法,提高了程序的性能。

【技术实现步骤摘要】
基于国产异构平台的自适应可变参数优化方法
本专利技术涉及一种基于国产异构平台的自适应可变参数优化方法,属于编译器优化

技术介绍
ABI约定描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的接口。ABI约定与架构信息紧密相关,目前主流的架构,如MIPS、ARM、X86等均有适应自身架构的ABI约定。一个完整的ABI,允许支持它的操作系统上的程序不经修改就能在其他支持此ABI的操作系统上运行。ABI对可变参的约定主要是通过一些宏和内建接口来实现,这些宏和内建接口有valist、vastart、vaarg和vaend。其中,valist是一个结构体,该结构体包含一个基地址指针变量和一个偏移值变量,基地址指针变量用来指示第一个参数的地址,而偏移值变量用来指示参数偏移位置,所以使用基地址加上偏移值就可以到的下一参数的位置;vastart是一个内建函数,用来初始化基地址和偏移值;vaarg是一个用来获取参数值的内建函数;vaend函数用来将valist置空,表示当前参数已经全部取完。可变参函数不同于普通函数,可变参函数不仅参数类型可以变化,而且个数也可以变化,这对于增加函数的灵活性具有重要意义。由于可变参数的类型和个数不固定,所以通过寄存器传递参数时无法保证寄存器的使用顺序。可变参数的传递需要遵循ABI约定。当函数被正确调用时,函数的调用方和被调用方需要对函数参数如何传递,以及数据类型的大小、布局和对齐方式有着相同的约定,才能保证程序的兼容性。由于不同的调用约定,对参数传递规则、数据对齐方式和数据扩展方式的规定各不相同,所以需要函数的调用方和被调用方遵循同样的调用约定和数据处理约定。参数的调用约定是与架构信息相关的。目前,在国产异构平台上,尚未有一个适应异构平台本身特点的ABI调用约定来约束函数参数传递规则和返回值处理规则,这导致了国产异构平台上的编译器无法对参数返回值进行正确的处理,在参数的传递、返回值的处理、数据对接的处理以及参数扩展时出现错误。
技术实现思路
本专利技术的目的是提供一种基于国产异构平台的自适应可变参数优化方法,该基于国产异构平台的自适应可变参数优化方法实现了优化可变参函数的内存和减少访存指令的算法,提高了程序的性能。为达到上述目的,本专利技术采用的技术方案是:一种基于国产异构平台的自适应可变参数优化方法,包括以下步骤:S1、编译器根据编译命令,判断架构信息是主核还是从核,根据架构信息选择相应架构的ABI接口,编译器前端根据相应的ABI接口中的ABI约定对源程序进行处理,通过词法分析、语法分析、语义分析,生成中间表示,具体如下:S11、编译器根据编译命令,判断架构信息是主核还是从核,根据相应架构的ABI接口,约定源程序中函数的参数传递方式、返回值处理方式、数据对齐处理方式及参数扩展方式;S12、编译器前端通过词法分析、语法分析、语义分析,将源程序转化为抽象语法树;S13、根据ABI约定,对函数进行参数类型合法化、参数传递方式约定、返回值处理方式约定、数据对齐方式约定及参数扩展方式约定,将S12中获得的抽象语法树转化为中间表示;S2、编译器后端扫描分析函数中的可变参函数,收集可变参函数的参数使用情况,具体如下:S21、编译器后端扫描S13中获得的中间表示中可变参函数的所有基本块,找到基本块内的VAARG节点,并记录VAARG节点的参数值类型;S22、编译器后端扫描S13中获得的中间表示中可变参函数的函数定义,根据可变参函数中参数的数据类型,计算偏移值,并通过偏移值计算可变参函数的参数列表中第一个可变参数的位置;S3、根据S2中扫描分析得到的信息,依据可变参数的数据类型和可变参数所存入的寄存器的不同,对可变参数进行后端对函数降级前的处理,为编译器后端的函数降级过程做准备,具体如下:S31、根据S1中架构对寄存器的使用定义,确定可变参数是否使用了参数寄存器,如果可变参数使用了参数寄存器,则执行S32,否则,执行S4;S32、判断S21中获得的VAARG节点的参数值类型是否全都是浮点类型,如果是,则为浮点类型可变参数使用的参数寄存器申请栈空间,并使用访存节点将参数寄存器的值存入栈,否则执行S33;S33、判断S21中获得的VAARG节点的参数值类型是否全都是定点类型,如果是,则为定点类型可变参数使用的参数寄存器申请栈空间,并使用访存节点将参数寄存器的值存入栈,否则,为浮点类型和定点类型的可变参数使用的参数寄存器申请栈空间,并使用访存节点将参数寄存器的值存入栈,转到S4;S4、编译器后端对可变参数的内建函数进行降级处理,获得降级后的中间表示,具体如下:S41、VASTART节点初始化VALIST结构体变量中的可变参数的基地址指针和偏移值;S42、VACOPY节点将S41初始化后的源VALIST结构体变量复制到目的VALIST结构体变量中;S43、VAARG节点根据VALIST结构体变量中的可变参数基地址指针和偏移值取出参数值,并将下一参数的地址写回VALIST结构体变量中;S44、VAEND节点将VALIST结构体变量置空,表明参数已经全部取完,完成对可变参数的内建函数进行降级处理;S5、生成汇编文件,即根据降级后的中间表示生成汇编指令。由于上述技术方案的运用,本专利技术与现有技术相比具有下列优点:本专利技术基于国产异构平台的自适应可变参数优化方法,其针对异构平台架构特点,自适应生出与异构平台架构紧密相关的主从核的可变参数ABI接口,并分别进行针对主从核的传参优化,实现了优化可变参函数的内存和减少访存指令的算法,提高了程序的性能。附图说明附图1为本专利技术基于国产异构平台的自适应可变参数优化方法流程示意图。具体实施方式实施例:一种基于国产异构平台的自适应可变参数优化方法,包括以下步骤:S1、编译器根据编译命令,判断架构信息是主核还是从核,根据架构信息选择相应架构的ABI接口,编译器前端根据相应的ABI接口中的ABI约定对源程序进行处理,通过词法分析、语法分析、语义分析,生成中间表示,具体如下:S11、编译器根据编译命令,判断架构信息是主核还是从核,根据相应架构的ABI接口,约定源程序中函数的参数传递方式、返回值处理方式、数据对齐处理方式及参数扩展方式;S12、编译器前端通过词法分析、语法分析、语义分析,将源程序转化为抽象语法树;S13、根据ABI约定,对函数进行参数类型合法化、参数传递方式约定、返回值处理方式约定、数据对齐方式约定及参数扩展方式约定,将S12中获得的抽象语法树转化为中间表示;S2、编译器后端扫描分析函数中的可变参函数,收集可变参函数的参数使用情况,具体如下:S21、编译器后端扫描S13中获得的中间表示中可变参函数的所有基本块,找到基本块内的VAARG节点,并记录VAARG节点的参数值类型;S22、编译器后端扫描S13中获本文档来自技高网
...

【技术保护点】
1.一种基于国产异构平台的自适应可变参数优化方法,其特征在于:包括以下步骤:/nS1、编译器根据编译命令,判断架构信息是主核还是从核,根据架构信息选择相应架构的ABI接口,编译器前端根据相应的ABI接口中的ABI约定对源程序进行处理,通过词法分析、语法分析、语义分析,生成中间表示,具体如下:/nS11、编译器根据编译命令,判断架构信息是主核还是从核,根据相应架构的ABI接口,约定源程序中函数的参数传递方式、返回值处理方式、数据对齐处理方式及参数扩展方式;/nS12、编译器前端通过词法分析、语法分析、语义分析,将源程序转化为抽象语法树;/nS13、根据ABI约定,对函数进行参数类型合法化、参数传递方式约定、返回值处理方式约定、数据对齐方式约定及参数扩展方式约定,将S12中获得的抽象语法树转化为中间表示;/nS2、编译器后端扫描分析函数中的可变参函数,收集可变参函数的参数使用情况,具体如下:/nS21、编译器后端扫描S13中获得的中间表示中可变参函数的所有基本块,找到基本块内的VAARG节点,并记录VAARG节点的参数值类型;/nS22、编译器后端扫描S13中获得的中间表示中可变参函数的函数定义,根据可变参函数中参数的数据类型,计算偏移值,并通过偏移值计算可变参函数的参数列表中第一个可变参数的位置;/nS3、根据S2中扫描分析得到的信息,依据可变参数的数据类型和可变参数所存入的寄存器的不同,对可变参数进行后端对函数降级前的处理,为编译器后端的函数降级过程做准备,具体如下:/nS31、根据S1中架构对寄存器的使用定义,确定可变参数是否使用了参数寄存器,如果可变参数使用了参数寄存器,则执行S32,否则,执行S4;/nS32、判断S21中获得的VAARG节点的参数值类型是否全都是浮点类型,如果是,则为浮点类型可变参数使用的参数寄存器申请栈空间,并使用访存节点将参数寄存器的值存入栈,否则执行S33;/nS33、判断S21中获得的VAARG节点的参数值类型是否全都是定点类型,如果是,则为定点类型可变参数使用的参数寄存器申请栈空间,并使用访存节点将参数寄存器的值存入栈,否则,为浮点类型和定点类型的可变参数使用的参数寄存器申请栈空间,并使用访存节点将参数寄存器的值存入栈,转到S4;/nS4、编译器后端对可变参数的内建函数进行降级处理,获得降级后的中间表示,具体如下:/nS41、VASTART节点初始化VALIST结构体变量中的可变参数的基地址指针和偏移值;/nS42、VACOPY节点将S41初始化后的源VALIST结构体变量复制到目的VALIST结构体变量中;/nS43、VAARG节点根据VALIST结构体变量中的可变参数基地址指针和偏移值取出参数值,并将下一参数的地址写回VALIST结构体变量中;/nS44、VAEND节点将VALIST结构体变量置空,表明参数已经全部取完,完成对可变参数的内建函数进行降级处理;/nS5、生成汇编文件,即根据降级后的中间表示生成汇编指令。/n...

【技术特征摘要】
1.一种基于国产异构平台的自适应可变参数优化方法,其特征在于:包括以下步骤:
S1、编译器根据编译命令,判断架构信息是主核还是从核,根据架构信息选择相应架构的ABI接口,编译器前端根据相应的ABI接口中的ABI约定对源程序进行处理,通过词法分析、语法分析、语义分析,生成中间表示,具体如下:
S11、编译器根据编译命令,判断架构信息是主核还是从核,根据相应架构的ABI接口,约定源程序中函数的参数传递方式、返回值处理方式、数据对齐处理方式及参数扩展方式;
S12、编译器前端通过词法分析、语法分析、语义分析,将源程序转化为抽象语法树;
S13、根据ABI约定,对函数进行参数类型合法化、参数传递方式约定、返回值处理方式约定、数据对齐方式约定及参数扩展方式约定,将S12中获得的抽象语法树转化为中间表示;
S2、编译器后端扫描分析函数中的可变参函数,收集可变参函数的参数使用情况,具体如下:
S21、编译器后端扫描S13中获得的中间表示中可变参函数的所有基本块,找到基本块内的VAARG节点,并记录VAARG节点的参数值类型;
S22、编译器后端扫描S13中获得的中间表示中可变参函数的函数定义,根据可变参函数中参数的数据类型,计算偏移值,并通过偏移值计算可变参函数的参数列表中第一个可变参数的位置;
S3、根据S2中扫描分析得到的信息,依据可变参数的数据类型和可变参数所存入的寄存器的不同,对可变参数进行后端对函数降级前的处理,为编译...

【专利技术属性】
技术研发人员:吴伟沈莉王飞巩令钦朱琪
申请(专利权)人:无锡江南计算技术研究所
类型:发明
国别省市:江苏;32

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

1