CN116991428B - 一种编译方法、装置、编译器、计算设备及存储介质 - Google Patents
一种编译方法、装置、编译器、计算设备及存储介质 Download PDFInfo
- Publication number
- CN116991428B CN116991428B CN202311264222.XA CN202311264222A CN116991428B CN 116991428 B CN116991428 B CN 116991428B CN 202311264222 A CN202311264222 A CN 202311264222A CN 116991428 B CN116991428 B CN 116991428B
- Authority
- CN
- China
- Prior art keywords
- optimization
- structural
- sequence
- structural body
- model
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 106
- 238000003860 storage Methods 0.000 title claims description 24
- 238000005457 optimization Methods 0.000 claims abstract description 169
- 238000013136 deep learning model Methods 0.000 claims description 67
- 238000004590 computer program Methods 0.000 claims description 21
- 230000007246 mechanism Effects 0.000 claims description 19
- 238000012549 training Methods 0.000 claims description 19
- 230000008707 rearrangement Effects 0.000 claims description 14
- 238000013473 artificial intelligence Methods 0.000 claims description 12
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 abstract description 33
- 230000000694 effects Effects 0.000 abstract description 13
- 238000013461 design Methods 0.000 abstract description 6
- 238000013178 mathematical model Methods 0.000 abstract description 3
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 11
- 238000009826 distribution Methods 0.000 description 5
- 238000012545 processing Methods 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000004138 cluster model Methods 0.000 description 3
- 239000004744 fabric Substances 0.000 description 3
- 238000005065 mining Methods 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000037396 body weight Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 238000013433 optimization analysis Methods 0.000 description 2
- 238000000547 structure data Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000004913 activation Effects 0.000 description 1
- 238000004883 computer application Methods 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 230000032798 delamination Effects 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 230000005484 gravity Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000306 recurrent effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/23—Clustering techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/048—Activation functions
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Life Sciences & Earth Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Evolutionary Biology (AREA)
- Computational Linguistics (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Machine Translation (AREA)
Abstract
本说明书公开了一种编译方法、装置、编译器、计算设备及存储介质,其中,所述编译方法以结构体特征为输入,获取人工智能模型输出的结构体优化信息,实现对中间代码的结构体布局优化,在该过程中,通过人工智能模型对中间代码进行结构体布局优化,突破了人工设计结构体布局优化方法时局限于特定特征的限制,可以在结构体布局优化过程中对结构体特征进行全面考量,有利于优化结构体布局优化效果。具体地,输入给人工智能模型的结构体特征无需局限于数学模型设计时考虑的结构体显示特征,其还可以包括结构体隐式特征,使得人工智能模型可以捕捉各类结构体特征,实现综合考量结构体特征进行结构体布局优化,以优化结构体布局优化效果的目的。
Description
技术领域
本说明书涉及计算机应用技术领域,具体地说,涉及计算机应用技术领域下的编译技术,更具体地说,涉及一种编译方法、装置、编译器、计算设备及存储介质。
背景技术
编译(Compilation)是指将高级语言编写的源代码转化为计算机能够理解的机器语言,从而提高程序的执行效率的过程。在编译过程中,可以对源代码进行语法和语义的检查,也可以对源代码转换而来的中间代码进行各种优化转换,以改进程序性能。
例如,结构体布局优化(Structure Data Layout Optimization)是一种经典的编译优化方法,结构体布局优化被广泛用于提高项目的空间局部性,即对项目结构体(Struct)类型的布局进行改造,使其更符合访问模式,减少程序运行时缓存未命中(CacheMiss),另外,结构体布局优化还可减小数据在内存中的占用空间。总之,结构体布局优化是一种针对结构体使用的优化技术,旨在减小结构体的内存占用和提高内存访问效率。
但目前的结构体布局优化方法存在优化效果不佳的问题。
发明内容
为解决上述技术问题,本申请提供了一种编译方法、装置、编译器、计算设备及存储介质,通过人工智能模型对中间代码进行结构体布局优化,突破了人工设计结构体布局优化方法时局限于特定特征的限制,可以在结构体布局优化过程中对结构体特征进行全面考量,有利于优化结构体布局优化效果。
为实现上述技术目的,本申请实施例提供了如下技术方案:
第一方面,本说明书的一个实施方式提供一种编译方法,包括:
以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码。
在一些实施方式中,所述目标模型包括聚类模型;
所述聚类模型,用于根据所述结构体特征,对所述结构体中的结构体成员进行聚类,以获得至少一个簇,所述簇中包括至少一个所述结构体成员,每个所述簇对应一个经过结构体剥离优化后的结构体;所述结构体成员为所述结构体中的一个变量。
在一些实施方式中,所述聚类模型具体用于:
根据所述结构体特征,确定所述结构体成员在空间中的分布;
若起始成员的领域范围内的结构体成员数量小于预设数量,则将所述起始成员标记为边界点或噪声点;所述起始成员为未标记的所述结构体成员;
若所述起始成员的所述领域范围内的结构体成员数量大于或等于所述预设数量,则将所述起始成员标记为核心点,为所述核心点分配簇标签;访问所述核心点的候选成员,以对所述候选成员进行标记;所述候选成员为在所述核心点的所述领域范围内的所述结构体成员;
所述访问所述核心点的候选成员包括:
当所述核心点的候选成员未被分配所述簇标签时,为所述候选成员分配与所述核心点相同的所述簇标签;若所述候选成员的所述领域范围内的结构体成员数量大于或等于所述预设数量,则将所述候选成员标记为核心点,并对所述核心点进行访问。
在一些实施方式中,所述目标模型包括预先训练的深度学习模型;
所述深度学习模型,用于根据所述结构体特征,输出经过结构体重排、结构体剥离或结构体拆分优化后的结构体序列;所述结构体序列用于描述所述结构体在内存中的存储信息。
在一些实施方式中,所述深度学习模型包括第一深度学习模型;
所述第一深度学习模型,用于根据所述结构体特征,输出经过结构体重排或结构体剥离优化后的第一结构体序列。
在一些实施方式中,所述第一深度学习模型具体用于:
根据所述结构体特征,获取成员序列,所述成员序列中的元素用于描述所述结构体中的结构体成员;
利用门控循环单元获取所述成员序列的位置信息,以获得携带有所述位置信息的成员序列;所述位置信息包括所述成员序列中各元素在前向和后向上的位置信息;
以携带有所述位置信息的成员序列为输入,利用多头注意力机制捕捉各所述结构体成员之间的联系,以输出所述第一结构体序列。
在一些实施方式中,所述以携带有所述位置信息的成员序列为输入,利用多头注意力机制捕捉各所述结构体成员之间的联系,以输出所述第一结构体序列包括:
将所述多头注意力机制的查询Q、键K和与键关联的值V均设置为携带有所述位置信息的成员序列,以获得所述多头注意力机制输出的所述第一结构体序列。
在一些实施方式中,所述目标模型包括第二深度学习模型;
所述第二深度学习模型,用于根据所述结构体特征,输出经过结构体拆分优化后的第二结构体序列;所述第二结构体序列包括结构体指针,所述结构体指针指向分拆出的结构体。
在一些实施方式中,所述第二深度学习模型,具体用于:
利用基于自注意力机制的时序模型,对所述结构体特征进行解码和编码处理,以获得所述第二结构体序列。
在一些实施方式中,所述深度学习模型的训练样本包括目标结构体特征和与所述目标结构体特征对应的标签;所述目标结构体特征包括从目标中间代码中提取的结构体特征;所述标签包括基于启发式方法和结构体访问文件对所述目标中间代码进行结构体布局优化后的结构体序列;所述结构体访问文件包括所述目标结构体特征中的结构体成员的访问信息。
第二方面,本说明书实施方式提供了一种编译装置,包括:
优化模块,用于以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
转换模块,用于根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码。
第三方面,本说明书实施方式提供了一种编译器,包括:前端、目标模型和后端;其中,
所述前端,用于获取中间代码;
所述目标模型,用于以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
所述后端,用于根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码。
第四方面,本说明书实施方式提供了一种计算设备,包括:处理器和存储器;
其中,所述存储器与所述处理器连接,所述存储器用于存储计算机程序;
所述处理器,用于通过运行所述存储器中存储的计算机程序,实现如上述任一项所述的编译方法。
第五方面,本说明书实施例提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时,实现如上述的编译方法。
第六方面,本说明书实施例提供了一种计算机程序产品或计算机程序,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;所述计算机设备的处理器从所述计算机可读存储介质读取所述计算机程序,所述处理器执行所述计算机程序时实现上述的编译方法的步骤。
从上述技术方案可以看出,本申请实施例提供了一种编译方法、装置、编译器、计算设备及存储介质,其中,所述编译方法以结构体特征为输入,获取人工智能模型输出的结构体优化信息,实现对中间代码的结构体布局优化,在该过程中,通过人工智能模型对中间代码进行结构体布局优化,突破了人工设计结构体布局优化方法时局限于特定特征的限制,可以在结构体布局优化过程中对结构体特征进行全面考量,有利于优化结构体布局优化效果。具体地,输入给人工智能模型的结构体特征无需局限于数学模型设计时考虑的结构体显示特征,其还可以包括结构体隐式特征,使得人工智能模型可以捕捉各类结构体特征,实现综合考量结构体特征进行结构体布局优化,以优化结构体布局优化效果的目的。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本说明书的一个实施方式提供的一种编译方法的实施环境示意图。
图2为本说明书的一个实施方式提供的一种编译方法的流程示意图。
图3为本说明书的一个实施方式提供的一种结构体特征的构成示意图。
图4为本说明书的一个实施方式提供的一种聚类前后的结构体变化示意图。
图5为本说明书的一个实施方式提供的一种深度学习模型的训练样本的可行生成过程示意图。
图6为本说明书的一个实施方式提供的一种第一深度学习模型生成第一结构体序列的过程示意图。
图7为本说明书的一个实施方式提供的一种结构体成员与其他结构体成员的注意力权重示意图。
图8为本说明书的一个实施方式提供的一种基于第一深度学习模型实现多种结构体布局优化的示意图。
图9为本说明书的一个实施方式提供的一种基于结构体特征确定的成员序列经过第二深度学习模型的结构体拆分优化后得到的第二结构体序列的示意图。
图10为本说明书的一个实施方式提供的一种基于所述编译方法进行结构体编译优化的具体可行过程的示意图。
图11为本说明书的一个实施方式提供的一种编译装置的结构示意图。
图12为本说明书的一个实施方式提供的一种编译器的结构示意图。
图13为本说明书的一个实施方式提供的一种计算设备的结构示意图。
具体实施方式
除非另外定义,本说明书实施例使用的技术术语或者科学术语应当为本说明书所属领域内具有一般技能的人士所理解的通常意义。本说明书实施例使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来避免构成要素的混同而设置的。
除非上下文另有要求,否则,在整个说明书中,“多个”表示“至少两个”,“包括”被解释为开放、包含的意思,即为“包含,但不限于”。在说明书的描述中,术语“一个实施例”、“一些实施例”、“示例性实施例”、“示例”、“特定示例”或“一些示例”等旨在表明与该实施例或示例相关的特定特征、结构、材料或特性包括在本说明书的至少一个实施例或示例中。上述术语的示意性表示不一定是指同一实施例或示例。
下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。
在现代计算机体系结构中,处理器(Central Processing Unit,CPU)和主存(例如内存)之间的缓存被广泛使用。高速缓存(Cache)与主存之间的数据传输单元是高速缓存线。这个特性导致了对具有高空间局部性(Spatial Locality)的程序的偏好。如果一个程序的数据布局很好地符合它的访问模式,或者它经常访问,那么它就被称为具有高空间局部性,因为要访问的数据通常由于之前的附近访问而已经加载到缓存中。因此,大部分内存访问被更快的缓存访问所取代,从而降低了平均访问延迟。然而,空间局部性常常未被充分利用,特别是对于以大跨步,许多间接和不规则模式访问大量复杂数据结构的现代应用程序。
在相关技术中,结构体布局优化(Structure Data Layout Optimization)是一种经典的编译优化方法,结构体布局优化被广泛用于提高项目的空间局部性,即对项目结构体(Struct)类型的布局进行改造,使其更符合访问模式,减少程序运行时缓存未命中(Cache Miss),另外,结构体布局优化还可减小数据在内存中的占用空间。总之,结构体布局优化是一种针对结构体使用的优化技术,旨在减小结构体的内存占用和提高内存访问效率。
目前,主流的结构体布局优化的方法大多采用静态分析算法,即将程序中的结构体进行简单的冷热划分,或者采用Field-affinity-based方法(启发式方法,或称基于字段亲和性方法)进行。该Field-affinity-based方法的基本思想是通过分析结构体中不同字段之间的关联性,来决定字段的布局顺序,从而优化内存访问的效率。在这个方法中,首先需要定义一个字段的亲和度值,用来表示该字段与其他字段之间的关联性。亲和度值可以通过多种方式计算,例如字段的类型相似性、字段的使用频率或者统计数据等。然后,根据字段的亲和度值来排序字段的布局顺序。通常情况下,具有较高亲和度值的字段将被放置在相邻位置,以便在内存访问时可以更好地利用局部性原理。这样布局的结构体可以减少内存访问的随机性,提高数据的连续访问性能。
但是现有的模型往往有着一个最严重的弊端:根据给定信息来制定优化方案实际上是一个方程拟合过程,需要依赖开发者的经验决定在方程拟合过程中考虑的结构体特征,受限于开发者的方程拟合能力,在方程拟合过程中通常只能关注到与结构体直接相关的显式特征,对于需要复杂推理才能用到的隐式特征则无能为力。这部分特征的丢失会影响最终的决策结果。
为了解决这一问题,发明人通过研究发现,可以在编译过程中,引入人工智能模型,以结构体特征作为人工智能模型的输入,无需依赖人工经验选择特定的特征进行人工拟合,实现在结构体布局优化过程中对结构体特征的综合考量,从而优化结构体布局优化效果。
基于上述构思,本说明书实施方式提供了一种编译方法,下面将结合附图,对本说明书实施方式提供的编译方法进行示例性描述。
参考图1,图1示出了本说明书提供的编译方法的一种可行实施环境,程序开发人员使用高级程序语言(例如C语言、C++语言、Java语言)编写程序的源代码,通过将源代码输入编译器进行编译,以输出计算设备可以理解、运行的可执行文件,该可执行文件被计算设备加载执行后实现开发人员期望的功能。
在编译器编译源代码的过程中,可以在编译过程中对结构体布局进行优化,以提高程序的空间局部性,从而减小结构体的内存占用和提高内存访问效率。编译器对源代码的编译过程和可执行文件的加载执行过程可以在同一台计算设备中执行,也可以在不同的计算设备中执行,本说明书对此并不做限定。
本说明书实施方式提供了一种编译方法,如图2所示,包括:
S201:以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体。
S202:根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码。
中间代码(Intermediate Code)是编译器在对源代码进行编译时产生的源代码和目标代码之间的中间表示形式。中间代码可以是编译器对源代码进行词法分析和语法分析等步骤转换而来的一种抽象的、与具体机器无关的代码形式。中间代码可以用于方便后续的优化和转换操作。中间代码通常以一种高级的形式表示程序的逻辑结构和计算过程,它比源代码更接近于目标代码,但仍然保留了更高层次的语义信息。
中间代码具有简化后续优化和转换、与具体机器无关和可维护性高的优点,因此,基于中间代码进行结构体布局优化可以实现针对全平台的通用优化,无需考虑具体目标架构,具有通用性更好的特点。除此之外,中间代码由于具有更高的优化自由度,能自由地保留更多的优化信息。编译器可以自己选择数据的形式和语句的变换,不需要按照目标代码遵循不同架构的严格规定。
目标代码是针对特定体系架构(或称硬件平台)的二进制指令序列,例如x86、ARM或MIPS等。它可以直接在硬件上执行,而可以不需要解析或翻译。在获得了目标代码后,可以通过将目标代码与库代码、启动代码等链接,获得能够在特定硬件平台上直接运行的可执行文件。目标代码的表现形式可以是机器码或字节码,本说明书对此并不做限定。
结构体(struct)可以是指用于组织和存储相关数据的数据类型,可以是一种自定义的数据类型,它可以将不同类型的数据组合在一起形成一个逻辑单元。一个结构体可以由多个不同的结构体成员(member)组成,每个结构体成员可以是不同的数据类型,例如整形、浮点型、字符型和指针等。结构体的组成可以包括成员变量(member variables)和成员函数(member functions)中的至少一者,其中,成员变量可以包括结构体中的数据字段。成员函数可以是指定义在结构体内部的函数。
结构体特征可以用于描述中间代码中的这些结构体,在一些实施方式中,参考图3,结构体特征可以包括结构体整体特征和结构体成员特征,其中,所述结构体整体特征用于描述整个结构体的特征,例如结构体的使用情况(该使用情况例如可以包括:在循环中使用、在参数中使用、在返回值中使用和在全局变量中使用等)和编号等信息,即结构体整体特征描述了整个结构体的整体在中间代码中的静态和动态特征。结构体成员特征则用于描述结构体中各个成员相关的特征,例如,结构体成员特征可以包括成员自身特征和调用该成员的基本块特征。
在一个具体的实施方式中,以表格的方式列出了结构体特征可能包括的特征信息,具体参考表1:
表1 结构体特征
所述结构体特征可以包括表1中示出的特征的全部或者部分,在本实施方式中,所述人工智能模型可以是经过包括结构体特征和标签数据的训练样本预先训练的人工智能模型,这些结构体特征无需局限于依靠人工经验总结的与结构体关联密切的显式特征,还可以包括与结构体关联较为不明显的隐式特征,即输入到所述人工智能模型那个的结构体特征无需依赖人工挖掘各特征与结构体之间的联系,该结构体特征可以包括各类与结构体相关的特征,有利于充分挖掘各类结构体特征对结构体布局优化的贡献,改善结构体布局优化效果。在一个可选的实施方式中,训练样本中的标签数据可以是与结构体特征对应的结构体布局优化方案。
结构体布局优化的类型可以包括结构体剥离(struct-peeling)、结构体分裂(struct-splitting)和结构体重排序(struct-reordering)等等。
在一个实施方式中,提供了一种针对结构体剥离的可行优化方式,具体地,所述目标模型包括聚类模型;
所述聚类模型,用于根据所述结构体特征,对所述结构体中的结构体成员进行聚类,以获得至少一个簇,所述簇中包括至少一个所述结构体成员,每个所述簇对应一个经过结构体剥离优化后的结构体;所述结构体成员为所述结构体中的一个变量。
聚类模型可以帮助发现结构体中的隐藏模式和潜在结构,通过将相似的结构体成员分组成簇,从而揭示结构体成员中的内在关系,帮助了解结构体成员的分布和特点。如此,在对结构体进行结构体剥离优化时,无需人工筛选特定结构体特征进行建模,可以依靠聚类模型的上述特点,发掘结构体成员的隐藏模式和潜在结构,可实现综合考量各类结构体特征进行结构体剥离优化的目的,有利于改善结构构体布局优化,特别是结构体剥离优化的效果。
此外,聚类是一种无监督学习方法,不需要预先标记的训练数据,这有利于降低聚类模型的构建难度。
在一个可选的实施方式中,所述聚类模型具体用于:
根据所述结构体特征,确定所述结构体成员在空间中的分布;
若起始成员的领域范围内的结构体成员数量小于预设数量,则将所述起始成员标记为边界点或噪声点;所述起始成员为未标记的所述结构体成员;
若所述起始成员的所述领域范围内的结构体成员数量大于或等于所述预设数量,则将所述起始成员标记为核心点,为所述核心点分配簇标签;访问所述核心点的候选成员,以对所述候选成员进行标记;所述候选成员为在所述核心点的所述领域范围内的所述结构体成员;
所述访问所述核心点的候选成员包括:
当所述核心点的候选成员未被分配所述簇标签时,为所述候选成员分配与所述核心点相同的所述簇标签;若所述候选成员的所述领域范围内的结构体成员数量大于或等于所述预设数量,则将所述候选成员标记为核心点,并对所述核心点进行访问。
上述聚类过程的伪代码可以描述如下:
输入:结构体D,设定MinPts(给定点在邻域内成为核心对象的最小邻域点数)和Eps(邻域半径)。
输出:簇集合,具体过程包括:
(1) 首先将结构体D中的所有结构体成员标记为未处理状态;
(2) for(数据集D中每个结构体成员p)do
(3)if (p已经归入某个簇或标记为噪声)then
(4)continue;
(5)else
(6)检查结构体成员p的Eps邻域NEps(p) ;
(7)if (NEps(p)包含的结构体成员数量小于MinPts) then
(8)标记结构体成员p为边界点或噪声点;
(9)else
(10)标记结构体成员p为核心点,并建立新簇C, 并将结构体成员p邻域内所有点加入C
(11)for (NEps(p)中所有尚未被处理的成员q)do
(12)检查其Eps邻域NEps(q),若NEps(q)包含至少MinPts个成员,则将NEps(q)中未归入任何一个簇的成员加入C;
(13)end for
(14)end if
(15)end if
(16) end for
通过上面的聚类过程可以发现,该聚类模型依据结构体特征,确定结构体成员在空间中的分布,并将结构体成员表示为空间中的点,之后依据结构体成员在空间中分布的远近关系进行分类,从而实现将关系相对紧密的结构体成员分在一个簇中,依据该过程中,可以有效地找到结构体中的隐藏模式,发掘各种类型的结构体特征对结构体剥离优化的贡献,有利于优化结构体剥离的效果。
参考图4,图4示出了聚类前后的结构体变化。在聚类过程中所有的结构体成员根据其在空间中分布被划分为两个簇(簇1和簇2),分别对应优化之后的两个结构体,簇中的点对应新结构体中的结构体成员。根据聚类结果,结构体Node被玻璃为两个新的结构体Node1和Node2,这两个结构体Node1和Node2分别包括5个(int c、int a、int b、int *v;double s)和3个成员(char ch、double d、long l),其中,int、char、double和long分别表示整数、字符、双精度浮点数和长整数类型。
通过聚类模型可以实现结构体剥离优化,但无法通过聚类模型实现结构体重排和结构体拆分优化,为了满足更多的结构体布局优化场景,在本说明书的一个实施方式中,所述目标模型包括预先训练的深度学习模型;
所述深度学习模型,用于根据所述结构体特征,输出经过结构体重排、结构体剥离或结构体拆分优化后的结构体序列;所述结构体序列用于描述所述结构体在内存中的存储信息。
所述深度学习模型可以是有监督的深度学习模型,通过深度学习模型可以实现除结构体剥离优化之外的结构体重排和结构体拆分优化,有利于扩展编译方法的适用场景。
在一个实施方式中,所述深度学习模型的训练样本包括目标结构体特征和与所述目标结构体特征对应的标签;所述目标结构体特征包括从目标中间代码中提取的结构体特征;所述标签包括基于启发式方法和结构体访问文件对所述目标中间代码进行结构体布局优化后的结构体序列;所述结构体访问文件包括所述目标结构体特征中的结构体成员的访问信息。
在本实施方式中,所述训练样本包括目标结构体特征和与其对应的标签,并且将基于启发式方法和结构体访问文件对目标中间代码进行结构体布局优化后的结构体序列作为训练样本的标签,如此可以获得相较于启发式方法获得的结构体序列更为优化的结构体布局优化方案,从而优化深度学习模型的训练效果。
所述基于启发式方法和结构体访问文件对所述目标中间代码进行结构体布局优化的过程可以包括:基于启发式方法获得初步的结构体布局优化方案,然后利用结构体访问文件对初步的结构体布局优化方案进行进一步的优化分析,从而得到更为优化的结构体布局优化方案(即所述结构体序列)作为训练样本的标签使用。可选地,所述启发式方法可以包括Field-affinity-based方法。
参考图5,图5示出了所述深度学习模型的训练样本的可行生成过程,所述目标中间代码可以是指用于生成训练样本的中间代码。图5中的File1.c、File2.c……File5.c可以是指用于生成训练样本的多个源代码文件。可以在编译器对源代码文件进行编译的过程中,通过插桩的方式获得Profile文件(即所述结构体访问文件),该结构体访问文件中记载的结构体成员的访问信息可以包括访存指令的执行次数、CacheMiss(缓存未命中)次数、基本块的执行次数和函数执行次数等信息。
在获得了结构体访问文件之后,该结构体访问文件中的结构体成员的访问信息可以指导基于传统的结构体布局优化方法获得的初步的结构体布局优化方案的进一步优化信息。
除了需要获得结构体访问文件之外,还需要从源代码文件经过编译器前端处理后的中间文件中提取特征数据(即所述结构体特征),提取的结构体特征可以包括表1中的部分或者全部,可以理解的是,结构体特征的数量越多,深度学习模型就可以学习更多的结构体特征与标签之间的关系,从而实现捕捉各类结构体特征对于标签的贡献的目的,实现充分挖掘各类结构体特征对结构体布局优化的贡献,改善结构体布局优化效果的目的。
提取的结构体特征即为深度学习模型的训练样本的一部分,此外可以依靠传统结构体布局优化方法(例如Field-affinity-based方法)获得初步的结构体布局优化方案,利用上面得到的结构体访问文件对初步的结构体布局优化方案进行进一步的优化分析,即可得到一个相对更优的结构体布局优化方案,将该结构体布局优化方案作为标签(即图5中的标签数据)与结构体特征作为训练样本对深度学习模型进行训练。
针对结构体重排优化、结构体剥离优化和结构体拆分优化的特点,本说明书实施方式对所述深度学习模型进行了进一步的细化,提出了适于进行结构体重排和结构体剥离优化的第一深度学习模型和适于进行结构体分分拆优化的第二深度学习模型,其中的第一深度学习模型可以称为抽取式模型,第二深度学习模型可以称为生成式模型。下面对这两个模型分别进行介绍。
在一个可选的实施方式中,所述深度学习模型包括第一深度学习模型;
所述第一深度学习模型,用于根据所述结构体特征,输出经过结构体重排或结构体剥离优化后的第一结构体序列。
参考图6,所述第一深度学习模型具体用于:
根据所述结构体特征,获取成员序列,所述成员序列中的元素用于描述所述结构体中的结构体成员;
利用门控循环单元获取所述成员序列的位置信息,以获得携带有所述位置信息的成员序列;所述位置信息包括所述成员序列中各元素在前向和后向上的位置信息;
以携带有所述位置信息的成员序列为输入,利用多头注意力机制捕捉各所述结构体成员之间的联系,以输出所述第一结构体序列。
结合参考图6,定义mem={m1,m2,… ,mn}是第一深度学习模型的输入序列(即所述成员序列),对应结构体中的所有结构体成员,即m1,m2,… ,mn分别对应n个结构体成员。结构体重排优化等结构体布局优化对结构体成员顺序比较敏感,结构体成员之间的相对位置对整个结构体布局优化是至关重要的。因此,在本实施方式中,通过门控循环单元10(GatedRecurrent Unit ,GRU)来捕捉结构体成员之间的位置关系。
门控循环单元的具体实现可以包括如下:
其中,是上一位置输出的隐状态;/>是此位置的输入数据;/>是此位置生成的隐状态;/>是临时的隐藏态候选项;/>是sigmoid函数,sigmoid函数是一种激活函数,该函数起到门限的作用,过滤掉一些不需要的信息;/>是更新门的输出值,用来控制当前位置的输入信息对细胞状态的更新程序;/>是重置门的输出值,用来控制上一个位置的隐藏态如何被融合到当前位置的输入信息中;/>、/>和/>分别为权重矩阵,用来乘以应的输入和隐藏态,实现特征的线性切割。
在结构体重排优化等对结构体成员顺序比较敏感的优化中,结构体成员的前向和后向的位置信息对于最终的优化结果都至关重要,因此,在本实施方式中,门控循环单元可以包括捕捉各结构体成员在前向上的位置信息的第一门控循环单元F和捕捉各结构体成员在后向上的位置信息的第二门控循环单元B,两层的位置信息会拼接在一起作为最终的输出,这样第一深度学习模型捕捉到的位置信息会更加全面。上述过程的具体实现可以表达为:
其中,是第一门控循环单元F对结构体成员mem的处理,是第二门控循环单元B对结构体成员mem的处理,/>是第一门控循环单元F的输出,/>是第二门控循环单元B的输出,/>是最终的输出;Concat表示两个输出结果按照通道维度进行拼接。
通过上述方式,除了可以捕捉所述成员序列中各元素(即结构体中各结构体成员)在前向和后向上的位置信息之外,还可以推断所述成员序列中各元素之间的前后依赖关系,但是无法通过门控循环单元捕捉元素之间联系的密切程度。在结构体剥离优化等需要将一个结构体拆分为多个结构体的优化方法中,联系紧密的结构体成员会被分在一个结构体中,因此,结构体成员之间的联系对于结构体布局优化结果也有重要意义。如图7所示,在本说明书实施方式中,引入了多头注意力机制20,基于多头自注意力(Multi-headed Self-attention)计算携带有所述位置信息的成员序列中,每个元素与其他元素的注意力权重(以图7为例,α1、α2……α11分别表示元素m4与其他元素(m1、m2、m3……m11)的注意力权重),然后根据这些权重来更新自身的表达。多个头可以从多个维度来捕捉元素之间的联系,多头的输入会拼接在一起形成最终的表达。
多头自注意力的公式实现如下:
;
;
;
其中,,/>,/>,/>是可训练的参数,/>是第/>个头的输出。
上述过程可以通过下面的公式表示:
最后,我们将所得到的序列输入到一个线性层30来生成最终的预测标签:
其中,和/>是可训练的参数,/>是最终的输出序列(即所述第一结构体序列)。
基于第一深度学习模型,可以实现多种结构体布局优化方法,例如可以基于所述第一深度学习模型实现结构体剥离优化和结构体重排序优化,即通过一套训练样本训练第一深度学习模型即可实现结构体剥离优化和结构体重排序优化等多种结构体布局优化,有利于降低训练成本。
具体参考图8,在图8中,将第一结构体序列表示为的形式,其中,/>代表结构体所对应的下标,/>代表结构体中的第/>个结构体成员(例如S1_2表示第一个结构体中的第2个结构体成员)。如图8所示,/>是第一深度学习模型的输入序列,上下箭头所指的是第一深度学习模型的两种不同输出序列,此处用/>、/>来表示,根据第一结构体序列便可以解析出优化之后的结构体表达。/>的输出中共有两个结构体(Node1和Node2),每个结构体中的结构体成员及其位置也已经确定,表明模型执行了结构体剥离的优化方法。/>的输出中只有一个结构体(Node_r),但是其中的成员顺序被完全打乱,表明第一深度学习模型执行了结构体重排序的优化方法。由此可见,利用第一深度学习模型可以实现两种不同的结构体布局优化。
在图8中,struct Node表示结构体Node,类似的,struct Node1、struct Node2和struct Node_r表示经过第一深度学习模型处理后输出的第一结构体序列表征的结构体Node1、结构体Node2和结构体r。{}中的m1-m11表示11个结构体成员,int、double、long和float分别表示各结构体成员的数据类型,具体地,int、double、long和float分别表示结构体成员的类型为整形、双精度浮点型、长整型和单精度浮点型;例如,int m1表示数据类型为整形的结构体成员m1。
在本说明书的一个实施方式中,为了使多头注意力机制能够更好地捕捉各结构体成员之间的联系,所述以携带有所述位置信息的成员序列为输入,利用多头注意力机制捕捉各所述结构体成员之间的联系,以输出所述第一结构体序列包括:
将所述多头注意力机制的查询Q、键K和与键关联的值V均设置为携带有所述位置信息的成员序列,以获得所述多头注意力机制输出的所述第一结构体序列。
在本实施方式中,当Q、K和V相同时,意味着Q、K和V来自同一个成员序列中的不同位置,即Q、K和V的上下文信息是相同的。如此,可以同时关注整个输入序列而不会有信息丢失。因为每个位置都被同时作为查询、键和值,可以计算每个位置与其他位置的相似度,并且融合整个输入序列的信息。从而使得多头注意力机制可以更好地捕捉输入的成员序列中各元素之间的联系。
针对结构体拆分优化等有新元素生成的场景,可以利用第二深度学习模型进行结构体布局优化,具体地,在本说明书的一个实施方式中,所述目标模型包括第二深度学习模型;
所述第二深度学习模型,用于根据所述结构体特征,输出经过结构体拆分优化后的第二结构体序列;所述第二结构体序列包括结构体指针,所述结构体指针指向分拆出的结构体。
可选地,所述第二深度学习模型,具体用于:
利用基于自注意力机制的时序模型,对所述结构体特征进行解码和编码处理,以获得所述第二结构体序列。
所述第二深度学习模型采用经典的编码器-解码器架构,其中的编码器部分通过Transformer Encoder实现,解码器部分可以通过Transformer Decoder实现。
基于自注意力机制的时序模型可以称为生成式模型,基于该模型获得第二结构体序列的过程可以描述如下:
通过结构体特征获得成员序列:,将该成员序列作为第二深度学习模型的输入序列;
/>
其中,为编码器输出的中间结果,/>为上一步的输出结果,/>为这一步的输出结果。/>为最终的输出序列(即所述第二结构体序列)。和/>分别表示第二深度学习模型中的编码器和解码器。
得到第二深度学习模型的输出之后需要将其解码为新的结构体,模型的输出与优化之后的结构体相对应。
参考图9,图9示出了基于结构体特征确定的成员序列(m1,m2……m8)经过第二深度学习模型的结构体拆分优化后得到的第二结构体序列(m3,m1,m4,m6,m7,P2*,m8,m2,m5)。在第二结构体序列中,结构体之间通过Pn*指针分割为若干部分,每一部分属于一个新的结构体,Pn*是其左边结构体中的元素。所有生成的结构体会进行编号,Pn*中的n代表指针要指向第n个结构体。如图9所示,优化之后会生成两个结构体,P2*属于第一个结构体并且指向第二个结构体。
在本说明书的一个具体实施方式中,提出了一种基于所述编译方法进行结构体编译优化的具体可行过程,参考图10,该过程可以包括:
S1:将携带有源代码的源代码文件(File1.c、File2.c……File5.c)输入到编译器Compiler中;
S2:编译器前端对源代码文件进行处理,获得中间代码;
S3:在编译器前端获得中间代码的过程中,收集模型特征(即结构体特征);
S4:将结构体特征输入训练好的AI模型(即所述目标模型),得到目标模型生成的预测结果(即表现为第一结构体序列和/或第二结构体序列的结构体优化信息);
S5:利用结构体优化信息和中间代码,获得优化后的中间代码并输入到编译器后端,以得到目标代码。
在该过程中,通过人工智能模型对中间代码进行结构体布局优化,突破了人工设计结构体布局优化方法时局限于特定特征的限制,可以在结构体布局优化过程中对结构体特征进行全面考量,有利于优化结构体布局优化效果。具体地,输入给人工智能模型的结构体特征无需局限于数学模型设计时考虑的结构体显示特征,其还可以包括结构体隐式特征,使得人工智能模型可以捕捉各类结构体特征,实现综合考量结构体特征进行结构体布局优化,以优化结构体布局优化效果的目的。
在本说明书的一个示例性实施例中,还提供了一种编译装置,如图11所示,包括:
优化模块1101,用于以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
转换模块1102,用于根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码。
关于编译装置的具体限定可以参见上文中关于编译方法的限定,在此不再赘述。上述编译装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在本说明书的一个示例性实施例中,还提供了一种编译器,如图12所示,包括:前端1210、目标模型1220和后端1230;其中,
所述前端1210,用于获取中间代码;
所述目标模型1220,用于以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
所述后端1230,用于根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码。
前端1210也可以称为编译器前端,其主要作用是处理源代码,并将其转换为中间代码。前端1210负责词法分析、语法分析和语义分析等任务。它将源代码分解为语法结构,并进行语义检查和类型推断,以生成适合后端处理的中间表示形式。前端还负责处理预处理指令(如宏展开、条件编译),在此阶段还可能进行语言特定的优化。
后端1230也可以称为编译器后端,其主要作用是将中间代码转换为目标代码。后端负责对中间代码进行各种优化操作,如常量传播、寄存器分配、指令调度、代码生成等。后端根据目标平台的特性和要求,将优化后的中间代码转换为目标机器代码或其他目标形式(如虚拟机字节码)
目标模型1220也可以成为优化器,其作用是对中间代码进行结构体布局优化。
关于目标模型1220的相关限定可以参考上文中的相关描述。
在一些实施方式中,所述前端1210可以包括词法分析器1211、语法分析器1212、语义分析器1213和中间代码生成器1214,这些结构分别用于进行词法分析、语法分析、语义分析和中间代码生成等任务。
本申请另一实施例还提出一种计算设备,参见图13所示,本说明书的一个示例性实施例还提供了一种计算设备,包括:存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时执行本说明书上述实施例中描述的根据本说明书各种实施例的编译方法中的步骤。
该计算设备的内部结构可以如图13所示,该计算设备包括通过系统总线连接的处理器、存储器、网络接口和输入装置。其中,该计算设备的处理器用于提供计算和控制能力。该计算设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以本说明书上述实施例中描述的根据本说明书各种实施例的编译方法中的步骤。
处理器可包括主处理器,还可包括基带芯片、调制解调器等。
存储器中保存有执行本发明技术方案的程序,还可以保存有操作系统和其他关键业务。具体地,程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器可以包括只读存储器(read-only memory,ROM)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(random access memory,RAM)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。
处理器可以是通用处理器,例如通用中央处理器(CPU)、微处理器等,也可以是特定应用集成电路(application-specific integrated circuit,ASIC),或一个或多个用于控制本发明方案程序执行的集成电路。还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
输入设备可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。
输出设备可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。
通信接口可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线局域网(WLAN)等。
处理器执行存储器中所存放的程序,以及调用其他设备,可用于实现本申请上述实施例所提供的任意一种编译方法的各个步骤。
该计算设备还可以包括显示组件和语音组件,该显示组件可以是液晶显示屏或者电子墨水显示屏,该计算设备的输入装置可以是显示组件上覆盖的触摸层,也可以是计算设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图13中示出的结构,仅仅是与本说明书方案相关的部分结构的框图,并不构成对本说明书方案所应用于其上的计算设备的限定,具体的计算设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
除了上述方法和设备以外,本说明书实施例提供的编译方法还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本说明书各种实施例的编译方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本说明书实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行本说明书上述“示例性方法”部分中描述的根据本说明书各种实施例的编译方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本说明书所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本说明书的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本说明书实施例提供的方案范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本说明书构思的前提下,还可以做出若干变形和改进,这些都属于本说明书的保护范围。因此,本说明书专利的保护范围应以所附权利要求为准。
Claims (11)
1.一种编译方法,其特征在于,包括:
以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码;
所述目标模型具体包括预先训练的深度学习模型;
所述深度学习模型,用于根据所述结构体特征,输出经过结构体重排、结构体剥离或结构体拆分优化后的结构体序列;所述结构体序列用于描述所述结构体在内存中的存储信息。
2.根据权利要求1所述的方法,其特征在于,所述深度学习模型包括第一深度学习模型;
所述第一深度学习模型,用于根据所述结构体特征,输出经过结构体重排或结构体剥离优化后的第一结构体序列。
3.根据权利要求2所述的方法,其特征在于,所述第一深度学习模型具体用于:
根据所述结构体特征,获取成员序列,所述成员序列中的元素用于描述所述结构体中的结构体成员;
利用门控循环单元获取所述成员序列的位置信息,以获得携带有所述位置信息的成员序列;所述位置信息包括所述成员序列中各元素在前向和后向上的位置信息;
以携带有所述位置信息的成员序列为输入,利用多头注意力机制捕捉各所述结构体成员之间的联系,以输出所述第一结构体序列。
4.根据权利要求3所述的方法,其特征在于,所述以携带有所述位置信息的成员序列为输入,利用多头注意力机制捕捉各所述结构体成员之间的联系,以输出所述第一结构体序列包括:
将所述多头注意力机制的查询Q、键K和与键关联的值V均设置为携带有所述位置信息的成员序列,以获得所述多头注意力机制输出的所述第一结构体序列。
5.根据权利要求2所述的方法,其特征在于,所述目标模型还包括第二深度学习模型;
所述第二深度学习模型,用于根据所述结构体特征,输出经过结构体拆分优化后的第二结构体序列;所述第二结构体序列包括结构体指针,所述结构体指针指向分拆出的结构体。
6.根据权利要求5所述的方法,其特征在于,所述第二深度学习模型,具体用于:
利用基于自注意力机制的时序模型,对所述结构体特征进行解码和编码处理,以获得所述第二结构体序列。
7.根据权利要求1所述的方法,其特征在于,所述深度学习模型的训练样本包括目标结构体特征和与所述目标结构体特征对应的标签;所述目标结构体特征包括从目标中间代码中提取的结构体特征;所述标签包括基于启发式方法和结构体访问文件对所述目标中间代码进行结构体布局优化后的结构体序列;所述结构体访问文件包括所述目标结构体特征中的结构体成员的访问信息。
8.一种编译装置,其特征在于,包括:
优化模块,用于以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
转换模块,用于根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码;
所述目标模型具体包括预先训练的深度学习模型;
所述深度学习模型,用于根据所述结构体特征,输出经过结构体重排、结构体剥离或结构体拆分优化后的结构体序列;所述结构体序列用于描述所述结构体在内存中的存储信息。
9.一种编译器,其特征在于,包括:前端、目标模型和后端;其中,
所述前端,用于获取中间代码;
所述目标模型,用于以结构体特征为输入,获取目标模型输出的结构体优化信息;所述结构体特征用于描述中间代码中的结构体;所述目标模型包括人工智能模型;所述结构体优化信息用于描述经过结构体布局优化后的所述结构体;
所述目标模型具体包括预先训练的深度学习模型;
所述深度学习模型,用于根据所述结构体特征,输出经过结构体重排、结构体剥离或结构体拆分优化后的结构体序列;所述结构体序列用于描述所述结构体在内存中的存储信息;
所述后端,用于根据所述结构体优化信息和所述中间代码,获得优化后的中间代码,并基于优化后的所述中间代码,获得目标代码。
10.一种计算设备,其特征在于,包括:处理器和存储器;其中,所述存储器与所述处理器连接,所述存储器用于存储计算机程序;所述处理器,用于通过运行所述存储器中存储的计算机程序,实现如权利要求1-7任一项所述的编译方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时,实现如权利要求1-7任一项所述的编译方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311264222.XA CN116991428B (zh) | 2023-09-28 | 2023-09-28 | 一种编译方法、装置、编译器、计算设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311264222.XA CN116991428B (zh) | 2023-09-28 | 2023-09-28 | 一种编译方法、装置、编译器、计算设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116991428A CN116991428A (zh) | 2023-11-03 |
CN116991428B true CN116991428B (zh) | 2023-12-15 |
Family
ID=88530657
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311264222.XA Active CN116991428B (zh) | 2023-09-28 | 2023-09-28 | 一种编译方法、装置、编译器、计算设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116991428B (zh) |
Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030036971A (ko) * | 2001-11-01 | 2003-05-12 | 엘지엔시스(주) | C/c++의 구조체 크기 최적화 방법 |
CN108509453A (zh) * | 2017-02-27 | 2018-09-07 | 华为技术有限公司 | 一种信息处理方法及装置 |
US10678524B2 (en) * | 2018-03-15 | 2020-06-09 | Intel Corporation | Runtime struct fields size reduction |
CN111488154A (zh) * | 2020-04-23 | 2020-08-04 | 北京东土科技股份有限公司 | St语言源代码编译方法、装置、计算机设备及介质 |
CN111667061A (zh) * | 2020-04-17 | 2020-09-15 | 中国海洋大学 | 一种基于目标众核的深度学习框架移植与优化方法及系统 |
CN111880807A (zh) * | 2020-07-31 | 2020-11-03 | Oppo广东移动通信有限公司 | 深度学习编译方法、装置、设备及存储介质 |
CN113240075A (zh) * | 2021-04-23 | 2021-08-10 | 西安电子科技大学 | 一种基于msvl的bp神经网络的构建和训练方法及系统 |
CN113515412A (zh) * | 2021-06-25 | 2021-10-19 | 清华大学 | 非易失性内存检查点生成方法、装置和电子设备 |
CN114490327A (zh) * | 2021-12-24 | 2022-05-13 | 中国电信股份有限公司 | 一种错误检测方法及装置 |
CN114625351A (zh) * | 2020-12-08 | 2022-06-14 | 阿里巴巴集团控股有限公司 | 编译器优化方法、系统和存储介质 |
CN115185533A (zh) * | 2022-07-14 | 2022-10-14 | 龙芯中科技术股份有限公司 | 编译处理方法、装置及设备 |
CN115509534A (zh) * | 2022-08-23 | 2022-12-23 | 珠海格力电器股份有限公司 | 适配ai模型的编译方法、装置、存储介质及电子设备 |
CN115543350A (zh) * | 2021-06-30 | 2022-12-30 | 华为技术有限公司 | 一种编译优化方法和装置 |
CN115576561A (zh) * | 2022-09-23 | 2023-01-06 | 北京航空航天大学 | 一种基于申威处理器的深度神经网络模型编译优化方法 |
CN115686522A (zh) * | 2021-07-31 | 2023-02-03 | 华为技术有限公司 | 一种程序源码的编译优化方法及相关产品 |
CN116126341A (zh) * | 2022-12-30 | 2023-05-16 | 深圳思谋信息科技有限公司 | 模型编译方法、装置、计算机设备及计算机可读存储介质 |
CN116301904A (zh) * | 2023-05-18 | 2023-06-23 | 之江实验室 | 一种用于深度学习编译器的算子优化加速方法及装置 |
CN116737130A (zh) * | 2023-08-15 | 2023-09-12 | 之江实验室 | 面向模态中间表示的编译方法、系统、设备和存储介质 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8365156B2 (en) * | 2010-04-17 | 2013-01-29 | Microsoft Corporation | Intermediate language support for change resilience |
CN109656566B (zh) * | 2018-12-14 | 2020-01-10 | 中科寒武纪科技股份有限公司 | 异构计算系统可执行文件获取方法、运行方法及相关产品 |
-
2023
- 2023-09-28 CN CN202311264222.XA patent/CN116991428B/zh active Active
Patent Citations (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20030036971A (ko) * | 2001-11-01 | 2003-05-12 | 엘지엔시스(주) | C/c++의 구조체 크기 최적화 방법 |
CN108509453A (zh) * | 2017-02-27 | 2018-09-07 | 华为技术有限公司 | 一种信息处理方法及装置 |
US10678524B2 (en) * | 2018-03-15 | 2020-06-09 | Intel Corporation | Runtime struct fields size reduction |
CN111667061A (zh) * | 2020-04-17 | 2020-09-15 | 中国海洋大学 | 一种基于目标众核的深度学习框架移植与优化方法及系统 |
CN111488154A (zh) * | 2020-04-23 | 2020-08-04 | 北京东土科技股份有限公司 | St语言源代码编译方法、装置、计算机设备及介质 |
CN111880807A (zh) * | 2020-07-31 | 2020-11-03 | Oppo广东移动通信有限公司 | 深度学习编译方法、装置、设备及存储介质 |
CN114625351A (zh) * | 2020-12-08 | 2022-06-14 | 阿里巴巴集团控股有限公司 | 编译器优化方法、系统和存储介质 |
CN113240075A (zh) * | 2021-04-23 | 2021-08-10 | 西安电子科技大学 | 一种基于msvl的bp神经网络的构建和训练方法及系统 |
CN113515412A (zh) * | 2021-06-25 | 2021-10-19 | 清华大学 | 非易失性内存检查点生成方法、装置和电子设备 |
CN115543350A (zh) * | 2021-06-30 | 2022-12-30 | 华为技术有限公司 | 一种编译优化方法和装置 |
CN115686522A (zh) * | 2021-07-31 | 2023-02-03 | 华为技术有限公司 | 一种程序源码的编译优化方法及相关产品 |
CN114490327A (zh) * | 2021-12-24 | 2022-05-13 | 中国电信股份有限公司 | 一种错误检测方法及装置 |
CN115185533A (zh) * | 2022-07-14 | 2022-10-14 | 龙芯中科技术股份有限公司 | 编译处理方法、装置及设备 |
CN115509534A (zh) * | 2022-08-23 | 2022-12-23 | 珠海格力电器股份有限公司 | 适配ai模型的编译方法、装置、存储介质及电子设备 |
CN115576561A (zh) * | 2022-09-23 | 2023-01-06 | 北京航空航天大学 | 一种基于申威处理器的深度神经网络模型编译优化方法 |
CN116126341A (zh) * | 2022-12-30 | 2023-05-16 | 深圳思谋信息科技有限公司 | 模型编译方法、装置、计算机设备及计算机可读存储介质 |
CN116301904A (zh) * | 2023-05-18 | 2023-06-23 | 之江实验室 | 一种用于深度学习编译器的算子优化加速方法及装置 |
CN116737130A (zh) * | 2023-08-15 | 2023-09-12 | 之江实验室 | 面向模态中间表示的编译方法、系统、设备和存储介质 |
Non-Patent Citations (6)
Title |
---|
"基于数据排布优化的缓存性能提升方法";王永良;中国优秀硕士学位论文全文数据库 信息科技辑(第07期);2.3-2.4节、5.1-5.2节、5.4-5.5节 * |
"结构体数据排布优化问题研究";宁卓睿;中国优秀硕士学位论文全文数据库 信息科技辑(第02期);1.4节、2.2节、2.4节 * |
Array Regrouping and Structure Splitting Using Whole-Program Reference Affinity;Yutao Zhou et al.;Proceedings of the ACM SIGPLAN 2004 conference on Programming language design and implementation;论文全文 * |
王永良."基于数据排布优化的缓存性能提升方法".中国优秀硕士学位论文全文数据库 信息科技辑.2023,(第07期),2.3-2.4节、5.1-5.2节、5.4-5.5节. * |
结构体向量化中的存储优化;范超;赵荣彩;单征;李朋远;;小型微型计算机系统(第09期);1889-1897页 * |
面向自动向量化的结构体优化;于海宁;韩林;李鹏远;;计算机科学(第02期);210-215页 * |
Also Published As
Publication number | Publication date |
---|---|
CN116991428A (zh) | 2023-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Ben-Nun et al. | A modular benchmarking infrastructure for high-performance and reproducible deep learning | |
Mansinghka et al. | Venture: a higher-order probabilistic programming platform with programmable inference | |
Liberis et al. | Neural networks on microcontrollers: saving memory at inference via operator reordering | |
CN113849675A (zh) | 使用引导强化学习的相似性搜索 | |
CN113342318B (zh) | 基于多视图代码特征的细粒度代码自动生成方法及系统 | |
Falch et al. | Machine learning‐based auto‐tuning for enhanced performance portability of OpenCL applications | |
Sharif et al. | ApproxHPVM: a portable compiler IR for accuracy-aware optimizations | |
Ahmad et al. | Leveraging parallel data processing frameworks with verified lifting | |
Zheng et al. | Chimera: An analytical optimizing framework for effective compute-intensive operators fusion | |
Bai et al. | AutoGTCO: Graph and tensor co-Optimize for image recognition with transformers on GPU | |
CN116991428B (zh) | 一种编译方法、装置、编译器、计算设备及存储介质 | |
CN107729118A (zh) | 面向众核处理器的修改Java虚拟机的方法 | |
Tabanelli et al. | Optimizing Random Forest-Based Inference on RISC-V MCUs at the Extreme Edge | |
Corpas et al. | Acceleration and energy consumption optimization in cascading classifiers for face detection on low‐cost ARM big. LITTLE asymmetric architectures | |
Liu et al. | ALIC: A low overhead compiler optimization prediction model | |
Díaz Álvarez et al. | Optimizing L1 cache for embedded systems through grammatical evolution | |
Ştirb et al. | Improving performance and energy consumption with loop fusion optimization and parallelization | |
CN110333857B (zh) | 一种基于约束规划的自定义指令自动识别方法 | |
Chen et al. | TANGO: re-thinking quantization for graph neural network training on GPUs | |
Xu et al. | XFC: Enabling automatic and fast operator synthesis for mobile deep learning compilation | |
Bai et al. | Gtco: Graph and tensor co-design for transformer-based image recognition on tensor cores | |
Zhao et al. | AutoGraph: optimizing DNN computation graph for parallel GPU kernel execution | |
Patabandi et al. | SWIRL++: Evaluating performance models to guide code transformation in convolutional neural networks | |
Jumah et al. | Optimizing memory bandwidth efficiency with user-preferred kernel merge | |
Busia et al. | Dynamic Pruning for Parsimonious CNN Inference on Embedded Systems |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |