一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种编译器后端代码自动构建方法及系统与流程

2022-03-26 16:32:38 来源:中国专利 TAG:
1.本发明涉及编译器
技术领域
:,具体来说,涉及编译器后端代码构建技术,更具体地说,涉及编译器后端代码的标准化构建和自动生成技术,再具体涉及到一种编译器后端代码自动构建方法及系统。
背景技术
::2.编译器技术是联系新型处理器以及领域应用的纽带,通常与新型处理器设计同期布局。编译技术的优劣在极大程度上决定了处理器的个性化设计、体系结构优势是否能够充分发挥出来。然而,编译器研发周期相对来说比较漫长,研发过程具有较高难度,这就是编译器研发效率上所谓的“慢、难”问题。3.编译研发效率的问题实际上是由编译器自身角色引发的,编译器本身的功能特性要求编译器的研发人员需要储备大量的跨领域知识,编译器研发过程不仅要求研发人员对编译器基础架构、成熟的算法有深入了解,还需要对目标体系结构有一定了解,这就给研发人员带来很大难度:其一,在芯片研发处理器最急需的面向硬件平台的移植需要漫长的摸索期,人工成本和时间成本都很高;其二,编译器复杂难学习,编译器最核心的功能——性能分析与优化则是公认的最具难度的两个阶段,需要长时间的经验积累。4.尤其是敏捷的芯片设计方法的出现,极大的加速了新架构的发展,这就意味着大量的新芯片将在短时间内问世,无法等待长时间的摸索来进行芯片对应的编译器开发,使得编译器后端开发速度远落后于芯片设计速度,因此如何高效的开发编译器以应对短时间内出现的大量新芯片成为关键的挑战,人们称之为“敏捷编译器的开发挑战”。5.现有的编译器,例如gcc和llvm。gcc(gnucompilercollection,gnu编译器套件)是由gnu(一个开源软件组织)开发的编译器,gcc最初是为gnu操作系统专门编写的一款编译器,现已被大多数类unix操作系统(如linux、bsd、macosx等)采纳为标准的编译器,甚至在微软的windows上也可以使用gcc。gcc支持多种计算机体系结构芯片,如x86、arm、mips等,并已被移植到其他多种硬件平台。llvm是构架编译器(compiler)的框架系统,以c 编写而成,llvm提供了与编译器相关的支持,可以作为多种语言编译器的后台来使用,可以将它看作是一个模块化和可重复使用的编译器和工具技术的集合。6.编译器的工作过程是首先将程序员写的代码转换成其内部表示形式,再将内部表示形式转换成可以在计算机上运行的代码(机器代码),而不同计算机体系结构(也可以理解为不同的计算机种类)的机器代码不同。现有技术下已经利用了目标无关代码生成机制来支持不同的微处理器,目标无关的代码生成机制指的是:编译器提供一套可重用的组件,用于将编译器的内部表示转换为指定种类的机器代码,它不会受限于某一种体系结构,因此被称为目标无关,目标(target)指的就是体系结构种类。特别地,编译器开发人员通过指定目标体系结构(主要是指令系统体系结构isa)的属性来编写一组目标描述(.td)文件(用于llvm)或机器描述(.md)文件(用于gcc)。然后,目标无关的代码生成器将自动生成相应的后端代码,从而对新的微处理器进行支持。与为每种体系结构重新开发编译器后端相比,目标无关的代码生成机制大大减少了开发工作。但是,在面对新的编译器开发挑战时,人工编写目标描述文件仍然容易出错,并且给开发人员带来沉重负担,编译器的后端移植和开发仍然是一项易错且需要花费大量精力的工作。以llvm为例来说,llvm提供了一种声明式tablegen语言,供开发人员为目标isa编写一组.td文件。在这些.td文件中,开发人员可以指定目标信息,包括指令生成、寄存器定义、调用约定、目标机器描述、支持的指令和特定于目标的扩展,这些文件用于代码生成和优化。然而仅llvm9.0版本中就包含了18种不同体系结构的后端代码。如果在llvm9.0中采用mips体系结构的话需要32个目标描述文件,其中包含了将近30,000行代码。mips架构是一种采取精简指令集(risc)的处理器架构,1981年出现,由mips科技公司开发并授权,广泛被使用在许多电子产品、网络设备、个人娱乐装置与商业装置上。如果在llvm9.0中采用x86体系结构的话需要开发者编写提供40个文件,包括近54,000行代码。更糟糕的是,由于tablegen语言的灵活性,.td文件在不同的目标平台之间展现出极为多样的个性化样式。不同平台的tablegen代码存在如下的差异:①目标描述代码分布在多个不同的*.td文件中,开发者会按自己的方式组织这些文件;②编译器后端在支持不同目标平台的过程中,必然会涉及到部分体现目标平台特性的信息;③不同的开发者,在开发不同目标平台对应的后端时,代码风格不一致。这些差异为编译器后端的开发和移植带来了困难和阻碍,无法很好的应对敏捷编译器的开发挑战。技术实现要素:7.因此,本发明的目的在于克服上述现有技术的缺陷,提供一种新的能够应对编译器开发挑战的编译器后端代码自动构建方法及系统。8.根据本发明的第一方面,提供一种编译器后端代码自动构建方法,用于在指定框架系统下自动生成目标平台的编译器后端代码,所述方法包括:s1、获取与目标平台同一框架下的已有样本平台的后端描述文件,构建样本平台的后端描述文件中每条指令基于定义-引用关系的标识符引用关系图,在标识符引用关系图中,每个标识符对应一个节点;s2、基于步骤s1中的标识符引用关系图,对标识符分类,其中,标识符被分为语言特定类型、平台特性信息类型、开发者定义类型;s3、将每条指令中不同类型的标识符转换为对应的敏捷标识符,并基于标识符引用关系图生成每条指令对应的以敏捷标识符表示的代码布局模板,所述代码布局模板中包含有平台特性信息的标识符定位;s4、获取目标平台编码指令,将目标平台编码指令与样本平台的指令进行匹配以获得与样本平台指令对应的代码布局模板,基于代码布局模板填入敏捷标识符对应的样本平台中的语言特定类型和开发者定义类型的属性值以生成目标平台的指令模块,将用户输入的目标平台编码指令中的平台特性信息属性值按照其对应定位填入指令模板中以生成当前目标平台编码指令对应的编译器后端代码。9.其中,所述语言特定类型的标识符是指编程语言中普遍存在的标识符,在标识符引用关系图中语言特定类型的标识符对应的节点没有输入也没有输出;所述平台特性信息类型的标识符是指有取决于指令集架构的标识符,在标识符引用关系图中平台特性信息类型的标识符对应的节点只有输出没有输入;所述开发者定义类型的标识符是指由开发者自己定义名称的标识符,在标识符引用关系图中开发者定义类型的标识符对应的节点既有输入也有输出。10.优选的,所述平台特性信息类型的标识符定位指示的是平台特性信息类型的属性值在代码布局模板中的位置。11.在本发明的一些实施例中,所述步骤s4包括针对每条目标平台编码指令执行如下步骤:s41、获取用户输入的当前目标平台编码指令中的平台特性信息属性值,其中不同的平台特性信息属性值对应于不同的敏捷标识符属性索引,所述敏捷标识符索引是预先设置的为每类敏捷标识符属性赋予的唯一索引;s42、基于步骤s41获得的平台特性信息属性值计算当前目标平台编码指令的特征向量;s43、基于步骤s42计算出的特征向量与样本平台每条指令的特征向量计算目标平台编码指令与样本平台的每条指令的欧式距离,获得与目标平台编码指令欧氏距离小于或等于预设阈值匹配成功的样本平台指令;s44、基于获得的样本平台指令对应的代码布局模块,基于代码布局模板填入敏捷标识符对应的样本平台中的语言特定类型和开发者定义类型的属性值以生成目标平台的指令模块,所述指令模板中的平台特性信息类型的标识符的属性为空并按照平台特性信息类型的标识符定位由带有属性索引信息的敏捷标识符表示;s45、将用户输入的目标平台编码指令中的平台特性信息属性值按照其对应的敏捷标识符属性索引填入指令模板中以生成当前目标平台编码指令对应的编译器后端代码。优选的,所述预设阈值为0.2。12.优选的,本发明采用word2vec通过如下方式生成指令的特征向量:[0013][0014]其中,fvi是第i条指令的特征向量,l是指令i的平台特性信息类型的敏捷标识符的长度,是第i条指令对应的平台特性信息类型的敏捷标识符列表中的第t个属性,pwt是平台特性信息类型的敏捷标识符列表中的第t个属性对应的权重。其中,每条指令的特征向量是一个10维的向量。[0015]优选的,本发明通过如下方式计算两条指令间的欧式距离:[0016][0017]其中,sd(i,j)表示第i条指令和第j条指令的欧氏距离,fvik是第i条指令的特征向量中的第k维值。[0018]在本发明的一些实施例中,所述平台特性信息类型的敏捷标识符列表中每个属性对应的权重通过如下方式预先获得:p1、获取多个样本平台的后端描述文件,并将每个样本平台的后端描述文件中的每条指令进行标识符拆分及标识符分类,将所有类别的标识符转换为对应的敏捷标识符,统计平台特性信息类型的标注符对应的所有属性的敏捷标识符以获得平台特性信息类型的敏捷标识符列表;p2、为平台特性信息类型的敏捷标识符列表中的每个属性赋予取值空间为[0,1]的权重得到一个权重组合,使得权重组合中的所有权重的累加和为1,基于当前的权重计算不同样本平台之间的指令的欧式距离以进行指令匹配,指令间的欧式距离小于或等于预设阈值的两条指令匹配成功,统计不同样本平台之间的指令匹配成功的条目数;p3、重复执行步骤p2,直至选出不同样本平台之间的指令匹配成功的条目数最大对应的权重组合。[0019]根据本发明的第二方面,提供一种用于实现如本发明第一方面所述方法的系统,所述系统包括:样本平台代码处理模块,用于获取与目标平台同一框架下的已有样本平台的后端描述文件,构建样本平台的后端描述文件中每条指令基于定义-引用关系的标识符引用关系图,在标识符引用关系图中,每个标识符对应一个节点;代码布局模板生成模块,用于将样本平台每条指令中不同类型的标识符转换为对应的敏捷标识符,并基于标识符引用关系图生成每条指令对应的以敏捷标识符表示的代码布局模板,所述代码布局模板中包含有平台特性信息的标识符定位;指令模板生成模块,用于将目标平台编码指令与样本平台的指令进行匹配以获得样本平台指令对应的代码布局模板,基于代码布局模板填入敏捷标识符对应的样本平台中的语言特定类型和开发者定义类型的属性值以生成目标平台的指令模块;代码生成器,用于根据用户输入的目标平台编码指令中的平台特性信息属性值按照其对应定位填入指令模板中以生成该目标平台编码指令对应的编译器后端代码。[0020]与现有技术相比,本发明的优点在于:本发明既解决了编译器后端开发慢和难的题,也降低了芯片开发的门槛,节约了时间与人工成本,大大提高了芯片开发工作的效率。实现本发明方法的敏捷目标平台代码生成器对芯片开发人员来说是一个黑盒,它使芯片开发人员无需深入了解编译器,即可快速地实现对新的芯片的编译器支持。大大降低了编译器后端开发的人工及时间成本,提高了研发效率。且本方法可以适应不同的目标平台,具有很好的通用性和扩展性。附图说明[0021]以下参照附图对本发明实施例作进一步说明,其中:[0022]图1为根据本发明实施例的一种编码器后端代码自动构建方法流程示意图;[0023]图2为根据本发明实施例的样本平台的部分后端描述文件代码示例示意图;[0024]图3为根据本发明实施例的对图2所示的样本平台的部分后端描述文件代码构建的标识符引用关系图;[0025]图4为根据本发明实施例的对图2所示的样本平台的部分后端描述文件代码构建的标识符引用关系图;[0026]图5为根据本发明实施例的基于图2中的样本平台代码布局模板生成的指令模板示意图;[0027]图6为根据本发明实施例的基于图2中的样本平台代码布局模板生成的指令模板示意图;[0028]图7为根据本发明实施例的基于图5中的指令模板生成的后端代码示意图;[0029]图8为根据本发明实施例的编译器后端代码生成系统结构示意图。具体实施方式[0030]为了使本发明的目的,技术方案及优点更加清楚明白,以下通过具体实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。[0031]如
背景技术
:所描述的,现有技术下的编译器开发存在难度大,编译器复杂难学习,编译器后端开发速度落后于芯片设计速度,人工成本及时间成本高等问题,急需一种能够应对敏捷编译器的开发挑战的后端代码生成方法。[0032]发明人通过研究发现现有技术下编译器自动代码生成的一个困难在于不同目标平台存在的后端代码的差异性、包括文件的组织方式以及开发者的代码风格,无法应对敏捷编译器的开发挑战的最重要的问题在于没有一种可以通用的目标描述文件来实现为不同的目标平台的自动生成后端代码,因此,发明人从寻求一种新的目标描述文件生成方法的角度出发,以通过分析某些目标样本、自动生成新目标平台的目标描述文件、最终实现编译器后端的自动开发为目的,提出一种标准化的中间表示方式,在该表示形式中对编译器后端描述文件进行标准化处理,最终用标准化的形式表示样本中的指令体系结构(isa),结合新的指令体系结构(isa)的特性信息,将中间表示形式自动转换成新的编译器后端描述文件。[0033]此外,需要说明的是,自动代码生成的另一困难是不同指令体系结构(isa)对应的特性信息存在差异,并且很难有效地从后端代码中精确提取出这些特性信息。为此,本发明利用人工设计经验,对这一部分的自动代码生成进行指导,提出了标识符引用图(trg),其类似于编译器中的定义-使用关系。借助人工设计经验以及标识符引用图,本发明对编译器后端描述文件中的标识符进行分类,并筛选出特性信息,将这些信息由标准化中间表示方式来表示。通过这种方式,编译器后端描述文件被标准化为中间表示形式。对于新的指令体系结构(isa),一旦用户提供了足够的特性信息,自动代码生成方法可以从标准化中间表示形式中自动生成其对应的编译器后端描述文件,最终完成对新指令体系结构(isa)的支持。本发明实施例中将以llvm编译器架构为例来进行展开说明。[0034]根据本发明的一个实施例,提供一种编译器后端代码自动构建方法,如图1所示,包括步骤s1、s2、s3、s4,下面详细说明每个步骤。[0035]在步骤s1中,获取与目标平台同一框架下的已有样本平台的后端描述文件,并将样本平台的后端描述文件中的每条指令进行标识符拆分,构建样本平台的后端描述文件中每条指令基于定义-引用关系的标识符引用关系图,在标识符引用关系图中,每个标识符对应一个节点。[0036]要实现编译器自动代码构建的一大难点是:不同开发者所编写的成熟目标平台的编译器代码,具有不同的代码风格和组织方式,难以直接用一种统一的标准化形式来表示。因此本发明基于编译器中的定义-引用关系这一概念,提出了标识符引用图(简称为trg),它将源文件中所有可能出现的定义-引用关系,分为不同的类,之后对每个标识符进行定位,并根据经验,确定每个标识符的分类,为构建标准化的中间表示形式做铺垫。通过标识符引用图(trg)能对源文件中所有的标识符(token)进行定位。[0037]根据本发明的一个示例,以图2所示的后端描述文件为例,基于定义-引用关系构建每条指令的标识符引用关系图,其中,jr16指令的后端描述文件代码有20个标识符(token),lw64指令有21个标识符,在标识符引用关系图中将每个标识符以t加一个上标的方式表示,图3示出了对图2(a)所示的jr16指令构建的标识符引用关系图,图4示出了对图2(b)所示的lw64指令构建的标识符引用关系图。从图3和图4中可以看出,存在三类标识符,即语言特定类型的标识符、平台特性信息类型的标识符和开发者定义类型的标识符。所述语言特定类型的标识符是指编程语言中普遍存在的标识符,在标识符引用关系图中语言特定类型的标识符对应的节点没有输入也没有输出,例如图2(a)中的r2(record2)中的let,对应图2(a)的第5行代码,在图3所示的trg图中,let对应的节点既没有边指向let,同时它也不指向别的节点。所述平台特性信息类型的标识符是指有取决于指令集架构的标识符,在标识符引用关系图中平台特性信息类型的标识符对应的节点只有输出没有输入,例如图2(a)中r1中的0x0c,在图3所示的trg图中,没有边指向0x0c对应的节点,但是它对应的节点指向了r2中的op。所述开发者定义类型的标识符是指由开发者自己定义名称的标识符,在标识符引用关系图中开发者定义类型的标识符对应的节点既有输入也有输出,例如图2(a)r2中的op,r1中的0x0c指向r2中的op,r2中的op又指向r2中的inst,它描述了图2(a)第1行代码中的0x0c到第5行代码等号右侧的op,最后到等号左侧的inst这一定义引用关系,在图3所示的trg图中,op这个节点既有输入也有输出;又例如,图2(b)的r3中的0x23指向r4中的op,r4中的op又指向r4中的inst,它描述了图2(b)第1行代码中的0x23到第4行代码等号右侧的op,最后到等号左侧的inst这一定义引用关系,在图4所示的trg图中,op这个节点既有输入也有输出。由此可见,通过trg图可以实现对不同标识符的定位。[0038]在步骤s2中,根据步骤s1中的trg图,对标识符进行分类,如上所述,标识符被分为语言特定类型、平台特性信息类型、开发者定义类型。[0039]根据本发明的一个示例,本发明以图2中所示的样本平台的部分编码为例进行说明,其中图2(a)是mips平台中的jr16指令对应的后端描述文件代码,图2(b)是mips平台中的lw64指令对应的后端描述文件代码。在图2(a)所示的jr16指令中,标识符“let”、“bits”、“def”、“class”、“;”、“}”等是语言特定类型的标识符,标识符“0x0c”、“5”、“16”、“9”是平台特性信息类型的标识符,标识符“op”、“inst”、“jalr_fm_16”、“jr_16mm”是开发者定义类型的标识符。在图2(b)所示的lw64指令中,标识符“let”、“bits”、“class”、“}”等是语言特定类型的标识符,标识符“0x23”、“26”、“31”、“32”、“1”是平台特性信息类型的标识符,标识符“op”、“inst”、“lw_fm”、“lw_64”、“canfoldasload”是开发者定义类型的标识符。[0040]在步骤s3中,将每条指令中不同类型的标识符转换为对应的敏捷标识符后基于标识符引用关系图生成每条指令对应的以敏捷标识符表示的代码布局模板,所述代码布局模板中包含有平台特性信息的标识符定位。[0041]要实现编译器自动代码构建的另一个难点在于,对编译器后端开发语言的语法规则的理解以及对目标平台特性信息的处理。不同的开发者对开发语言的理解不一样,不同的目标平台特性信息也不一样,如何能够实现自动化的构建就在于如何解决这些不一致的问题。针对此问题,本发明提出一种标准化的中间表示方法——敏捷标识符(agileidentifier)。敏捷标识符基于对标识符的传统人工分类方法,自动构建而成。以llvm中的tablegen语言为例,将其代码分为三大类:语言特定类型、开发者定义类型和平台特性信息类型。敏捷标识符是整个敏捷代码生成技术的核心中间表示形式,在处理过程中,编译器后端描述文件中的标识符被标准化为敏捷标识符。在构造敏捷标识符的过程中,无需人工进行干预,系统会全自动地处理每个标识符并将其转换为相应的敏捷标识符。本发明最终将敏捷标识符转换为编译器后端描述文件中的标识符,完成对新的目标平台的后端支持。[0042]根据本发明的一个实施例,如果一个trg图中标识符对应的节点既没有输入也没有输出,则是语言特定类型标识符,用敏捷标识符ls表示,如图3中的“let”、“def”等节点;如果一个trg图中标识符对应的节点只有输出没有输入,则是平台特性信息类型,用敏捷标识符ts表示,如图3中的“0x0c”、“5”、“16”、“9”节点以及图4中的0x23”、“26”、“31”、“32”、“1”节点;如果一个trg图中标识符对应的节点既有输入又有输出,开发者定义类型(pd),如图3中的“op”、“inst”等节点以及图4中的lw_fm”、“lw_64”、“canfoldasload”等节点。然后基于trg图可以生成以敏捷标识符表示的代码布局模板,该代码布局模板的形式与样本平台原编译器后端描述文件代码形式一致,只不过所有的标识符均以敏捷标识符表示,此处不再对代码布局模板进行过多赘述。[0043]在步骤s4中,获取目标平台编码指令,将目标平台编码指令与样本平台的指令进行匹配以获得样本平台指令对应的代码布局模板,基于代码布局模板填入敏捷标识符对应的样本平台中的语言特定类型和开发者定义类型的属性值以生成目标平台的指令模块,将用户输入的目标平台编码指令中的平台特性信息属性值按照其对应定位填入指令模板中以生成当前目标平台编码指令对应的编译器后端代码。[0044]如前文所述,本发明提出了敏捷标识符作为一种标准化的中间表示形式,在面对目标平台时,本发明通过自动将样本平台的*.td文件中的标识符标准化为敏捷标识符,再结合芯片开发人员的输入,将敏捷标识符转换为新目标平台的*.td文件中的标识符。如前面所述,本发明提出的敏捷标识符共分为三类:语言特定类型(ls):编程语言中普遍存在的标识符,例如关键字,运算符和标点符号等;开发者定义类型(pd):由开发者自己定义名称的标识符,这些标识符的命名方式不会影响到编译器的正确性;平台特性信息类型(ts):取决于指令集架构(isa)的标识符,这些标识符对目标平台在后端中的正确支持必不可少,并且高度依赖于目标平台。基于此,代码布局模板中样本平台的语言特定类型和开发者定义类型的标识符可以直接复用,平台特性信息属性标识符则需要提取当前目标平台编码指令中的平台特性信息属性值,按照代码布局模板中该类型标识符的定位将目标平台编码指令中的平台特性信息属性值填入指令模板中,因此,本发明采用代码布局模板对应的与样本平台同样的语言特定类型的标识符和开发者定义类型的标识符生成目标平台的指令模板。以与图2(a)中的jr16指令匹配成功为例生成的指令模板如图5所示,其中,指令模板中的语言特定类型的标识符和开发者定义类型的标识符的属性值与图2(a)中样本平台的jr16指令中的对应标识符的属性值一致,只需要填入目标平台对应的平台特性信息的标识符属性值即可生成目标平台的后端描述文件代码。同理,以与图2(b)中的lw64指令匹配成功为例生成的指令模板如图6所示。[0045]下面结合附图详细说明生成指令模板的过程。[0046]其中,在图5中可以看到,在指令模板中,不同的平台特性信息类型的敏捷标识符通过其对应的敏捷标识符加上不同属性索引来表示,如原样本平台中的“0x0c”、“5”、“16”、“9”处对应的敏捷标识符加属性索引分别为ts14、ts15、ts7、ts16,敏捷标识符的上标代表的是该属性值的索引,不同的平台对应的敏捷标识符属性索引可能一致但属性值不一样,ts索引是通过统计样本平台后端描述文件中的所有ts标识符获得ts列表并给每个属性赋予的索引。以mips样本平台为例,假设其编译器后端描述文件中的标识符经过标准化之后总共包含n个平台特性信息的ts标识符,给每一个ts标识符赋予一个在[1,n]的索引,索引表格中的与图2(a)中指令相关的部分内容如表1所示。[0047]表1[0048][0049]索引表格中的与图2(b)中指令相关的部分内容如表2所示。,可以看出,不同的指令对于同样索引的属性值是不一样的。[0050]表2[0051][0052]根据本发明的一个实施例,本发明通过计算目标平台编码指令的特征向量与样本指令的特征向量之间的欧式距离来进行匹配以选取对应的代码布局模板。欧氏距离小于或等于预设阈值的则为匹配成功,根据本发明的一个实施例,预设阈值为0.2。根据本发明的一个实施例,本发明采用词向量模型word2vec来计算指令的特征向量。word2vec是一群用来产生词向量的相关模型,并通过如下方式生成指令的包含10维特征的特征向量:[0053][0054]其中,fvi是第i条指令的特征向量,l是指令i的平台特性信息类型的敏捷标识符的长度,是第i条指令对应的平台特性信息类型的敏捷标识符列表中的第t个属性,pwt是平台特性信息类型的敏捷标识符列表中的第t个属性对应的权重。[0055]根据本发明的一个实施例,所述平台特性信息类型的敏捷标识符列表中每个属性对应的权重通过如下方式预先获得:p1、获取多个样本平台的后端描述文件,并将每个样本平台的后端描述文件中的每条指令进行标识符拆分及标识符分类,将所有类别的标识符转换为对应的敏捷标识符,统计平台特性信息类型的标识符对应的所有属性的敏捷标识符以获得平台特性信息类型的敏捷标识符列表;p2、为平台特性信息类型的敏捷标识符列表中的每个属性赋予取值空间为[0,1]的权重得到一个权重组合,使得权重组合中的所有权重的累加和为1,基于当前的权重计算不同样本平台之间的指令的欧式距离以进行指令匹配,指令间的欧式距离小于或等于预设阈值的两条指令匹配成功,统计不同样本平台之间的指令匹配成功的条目数;p3、重复执行步骤p2,直至选出不同样本平台之间的指令匹配成功的条目数最大对应的权重组合。[0056]需要说明的是,每一个ts属性值经过word2vec模型均可获得一个包含10维小数的向量,将每条指令中的所有ts属性值对应的向量按照维度一一对应,将所有ts属性值对应的向量同维度的值进行累加,最后得到指令对应的10维特征向量。[0057]为了更好的理解该实现过程,仍然以图2中的指令编码为例,分别说明如何生成对应的特征向量。[0058]首先统计每个指令对应的ts列表,其中,图2(a)中的jr16指令对应的ts列表如表3所示:[0059]表3[0060][0061]图2(b)中的lw64指令对应的ts列表如表4所示:[0062]表4[0063][0064]通过采用word2vec模型分别以两条指令对应的ts列表对应的属性值为输入,可以分别获得两条指令对应的特征向量,如表5所示:[0065]表5[0066][0067]以目标平台risc-v为例,假设用户输入的risc-v中c.jr指令编码对应的ts属性值如表6所示,寻找该指令对应的模板:[0068]表6[0069][0070]优选的,通过word2vec模型获得其特征向量后将其与样本平台中的每一条指令的特征向量按照如下方式计算欧式距离:[0071][0072]其中,sd(i,j)表示第i条指令和第j条指令的欧氏距离,fvik是第i条指令的特征向量中的第k维值,经过计算后得到其与样本平台jr16指令匹配成功的结果,基于jr16指令的代码布局模板生成如图5所示的指令模板,然后将risc-v中c.jr指令编码对应的ts属性值填入指令模板获得如图7所示的后端描述文件代码。[0073]通过上述实施例的描述可知,通过本发明可以自动分析成熟目标平台的其他平台的后端代码,根据标识符引用图(trg)将其划分为标准化的中间表示形式,最终结合用户输入的新目标平台的特性信息,自动为新的目标平台生成后端代码,完成对新的目标平台的快速支持。[0074]本发明还提供一种用于实现本发明所述的编译器后端代码自动构建的系统,如图8所示,所述系统包括:样本平台代码处理模块,用于获取与目标平台同一框架下的已有样本平台的后端描述文件,构建样本平台的后端描述文件中每条指令基于定义-引用关系的标识符引用关系图,在标识符引用关系图中,每个标识符对应一个节点;代码布局模板生成模块,用于将样本平台每条指令中不同类型的标识符转换为对应的敏捷标识符,并基于标识符引用关系图生成每条指令对应的以敏捷标识符表示的代码布局模板,所述代码布局模板中包含有平台特性信息的标识符定位;指令模板生成模块,用于将目标平台编码指令与样本平台的指令进行匹配以获得样本平台指令对应的代码布局模板,基于代码布局模板填入敏捷标识符对应的样本平台中的语言特定类型和开发者定义类型的属性值以生成目标平台的指令模块;代码生成器,用于将用户输入的目标平台编码指令中的平台特性信息属性值按照其对应定位填入指令模板中以生成该目标平台编码指令对应的编译器后端代码。[0075]本发明既解决了编译器后端开发慢和难的题,也降低了芯片开发的门槛,节约了时间与人工成本,大大提高了芯片开发工作的效率。实现本发明方法的敏捷目标平台代码生成器(简称为atg)对芯片开发人员来说是一个黑盒,它使芯片开发人员无需深入了解编译器,即可快速地实现对新的芯片的编译器支持。大大降低了编译器后端开发的人工及时间成本,提高了研发效率。且本方法可以适应不同的目标平台,具有很好的通用性和扩展性。[0076]需要说明的是,虽然上文按照特定顺序描述了各个步骤,但是并不意味着必须按照上述特定顺序来执行各个步骤,实际上,这些步骤中的一些可以并发执行,甚至改变顺序,只要能够实现所需要的功能即可。[0077]本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。[0078]计算机可读存储介质可以是保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以包括但不限于电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。[0079]以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本
技术领域
:的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本
技术领域
:的其它普通技术人员能理解本文披露的各实施例。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献