CN115167868B - 代码编译方法、装置、设备及计算机存储介质 - Google Patents
代码编译方法、装置、设备及计算机存储介质 Download PDFInfo
- Publication number
- CN115167868B CN115167868B CN202210902765.9A CN202210902765A CN115167868B CN 115167868 B CN115167868 B CN 115167868B CN 202210902765 A CN202210902765 A CN 202210902765A CN 115167868 B CN115167868 B CN 115167868B
- Authority
- CN
- China
- Prior art keywords
- code
- sub
- code segment
- updated
- segment
- 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
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/48—Incremental compilation
-
- 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
- G06F8/4441—Reducing the execution time required by the program code
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
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种代码编译方法、装置、设备及计算机存储介质。
背景技术
在VLSI(Very Large Scale Integration,超大规模集成电路)设计流程中,RTL(Register Transfer Level,寄存器转换级)编码以及RTL代码验证是非常重要的环节,具体地:首先进行RTL(Register Transfer Level,寄存器转换级电路)编码,进而对编写好的RTL代码进行验证,若验证失败,再返回对编写好的RTL代码进行修改(通常仅为修改量很小的局部修改),直至验证成功。
传统设计中,通常是直接采用常规硬件描述语言(如Verilog语言)进行RTL编码。但是,随着新型硬件描述语言(如Chisel语言)的出现,因其具有的编码优势(如:具有较为高级的描述特征,编码效率较高等),因此,相关技术中出现了另外一种RTL编码方案:采用新型硬件描述语言进行编码,之后,再将采用新型硬件描述语言编写的代码编译为常规硬件描述语言的代码,从而完成RTL编码任务。
以新型硬件编码语言为Verilog语言,常规硬件编码语言为Chisel语言为例:编码阶段,具体包括两个阶段:第一阶段,将采用Chisel编写的第一代码编译为采用硬件中间表示语言(此处以FIRRTL语言为例)描述的中间代码,中间代码通常由多个用于实现不同硬件功能的中间子代码段组成;第二阶段,分别计算每个中间子代码段的属性信息(如延时、功耗等),然后针对每个中间子代码段,均需要基于所有中间子代码段的预设属性信息,对该中间子代码段进行优化(也就是对该中间子代码段进行全局优化),从而得到该中间子代码段对应的Verilog子代码段(第二子代码段),最终各Verilog子代码段组合形成编译完成的Verilog代码(第二子代码)。上述代码编译过程存在耗时长、效率低的问题。
发明内容
有鉴于此,本申请实施例提供一种代码编译方法、装置、设备及计算机存储介质,以至少部分解决上述问题。
根据本申请实施例的第一方面,提供了一种代码编译方法,包括:
获取采用第一硬件描述语言编写的第一代码;
使用中间表示语言编译所述第一代码,得到至少一个中间子代码段,并确定各中间子代码段的更新状态标识信息,其中,所述更新状态标识信息用于标识已更新的中间子代码段或未更新的中间子代码段;
基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;
分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段;
各第二子代码段组合形成第二代码。
根据本申请实施例的第二方面,提供了一种代码编译装置,包括:
第一代码获取模块,用于获取采用硬件描述语言编写的第一代码;
中间代码得到模块,用于使用中间表示语言编译所述第一代码,得到至少一个中间子代码段,并确定各中间子代码段的更新状态标识信息,其中,所述更新状态标识信息用于标识已更新的中间子代码段或未更新的中间子代码段;
第一优化处理模块,用于基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;
第二优化处理模块,用于分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段;
第二代码形成模块,用于各第二子代码段组合形成第二代码。
根据本申请实施例的第三方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如第一方面所述的代码编译方法对应的操作。
根据本申请实施例的第四方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的代码编译方法。
本申请实施例提供的代码编译方法、装置、设备及计算机存储介质,在第一阶段,对第一代码编译得到中间子代码段的同时,还确定出了各中间子代码段的更新状态标识信息,即标识出了:与具有相同功能、且在前次代码编译过程得到的中间子代码段相比,本次代码编译过程中得到的中间子代码段是否已被更新(修改)。这样,对于每个未更新的中间子代码段而言,由于其余未更新的中间子代码段的属性信息也并未改变,因此,在第二阶段,对该未更新的中间子代码段进行优化时,则无需考虑其余未更新的中间子代码段的属性信息的影响,也就是说,与相关技术中,对于每个中间子代码段进行优化时均需考虑所有中间子代码段的属性信息的全局优化方式相比,本申请实施例中对于未更新的中间子代码段,在进行优化时,需要考虑的因素有所减少:仅需考虑已更新的中间子代码段的属性信息即可。因此,本申请实施例的优化效率更高、耗时更短,进而可以降低整个代码编译的总耗时,提升编译效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为超大规模集成电路设计流程示意图;
图2为首次代码编译时的耗时比例分布图;
图3为对代码进行局部更新后代码编译的耗时比例分布图;
图4为根据本申请实施例一的一种代码编译方法的步骤流程图;
图5为图4所示实施例对应的场景示意图;
图6为根据本申请实施例二的一种代码编译方法的步骤流程图;
图7为根据本申请实施例三的一种代码编译装置的结构框图;
图8为根据本申请实施例四的一种电子设备的结构示意图。
具体实施方式
为了使本领域的人员更好地理解本申请实施例中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请实施例一部分实施例,而不是全部的实施例。基于本申请实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本申请实施例保护的范围。
下面结合本申请实施例附图进一步说明本申请实施例具体实现。
背景概述:
参见图1,图1为超大规模集成电路设计流程示意图,结合图1,超大规模集成电路的设计流程为:采用新型硬件描述语言,如Chisel语言进行RTL编码,得到Chisel码;再将Chisel码编译为常规硬件描述语言,如Verilog语言,即编译得到Verilog码;对得到的Verilog码进行前端验证,若验证存在问题,则返回对Chisel码进行修改以及对修改后的Chisel码重新编译的操作;若验证通过,则基于验证通过的Verilog码进行电路网表转换;进而进行版图制作以及最终的硬件电路制造,需要说明的是,在执行网表转换和版图制作时,也需要进行相应的验证工作,若验证存在问题,则需要返回对Chisel码进行修改以及基于修改后的Chisel码执行后续操作。
从上述设计流程可以看出,RTL编码以及RTL代码的前端验证,也即:采用新型硬件描述语言进行编码,之后,再将采用新型硬件描述语言编写的代码编译为采用常规硬件描述语言编写的代码;对采用常规硬件描述语言编写的代码进行验证,并基于验证结果返回进行代码修改,是整个电路设计流程中非常重要的环节。
通常情况下,上述RTL编码以及RTL代码的前端验证过程,具体可以分为3个步骤:第一个步骤:将采用新型硬件描述语言编写的第一代码编译为采用硬件中间表示语言描述的中间代码;通过全局优化的方式,将采用硬件中间表示语言描述的中间代码转换为采用常规硬件描述语言编写的第二代码;第三个步骤:对第二代码进行前端验证,得到验证结果。
参见图2,当第一代码为首次编写的代码时,上述第一个步骤和第二个步骤耗时基本相当,其中,第一个步骤耗时占整个过程耗时的14%,第二个步骤耗时占整个过程耗时的17%;第三个步骤耗时占整个过程耗时的69%;但是,当第一代码并非首次编写,而是基于验证结果对前次的代码进行局部修改(更新)后的代码时,上述三个步骤的耗时占比则发生明显变化:参见图3,第一个步骤耗时仅占整个过程耗时的2%,第二个步骤耗时基本不变,占整个过程耗时的19%;第三个步骤耗时基本不变,占整个过程耗时的79%。
对比图2和图3可知,当第一代码是基于验证结果对前次的代码进行局部修改后的代码时,上述第一个步骤(将采用新型硬件描述语言编写的第一代码编译为采用硬件中间表示语言描述的过渡代码)耗时明显降低,而第二个步骤(将采用硬件中间表示语言描述的过渡代码转换为采用常规硬件描述语言编写的第二代码)耗时基本不变,占比较高。其原因在于:相关技术中,用于执行第一个步骤的编译器,具有增量编译的特性,即:当与前次编译的第一代码相比,本次的第一代码仅进行了局部修改时,编译器无需对所有代码进行完整编译,而是仅针对修改部分(更新部分)以及与修改部分相关联的代码进行重新编译,而其余部分可直接继承(使用)前次的编译结果。而对于第二个步骤,无论中间代码是否为局部修改,都需要基于全部中间子代码段的延时或功耗等属性信息,分别对每个中间子代码段进行全局优化,因此,最终导致第二个步骤的耗时较长,进而导致整个代码编译过程耗时较长。
综上,相关技术中,在进行RTL代码编译时,存在编译耗时长,编译效率低的问题。
本申请总体概述:
本申请实施例提供的代码编译方法,在将采用新型硬件描述语言编写的第一代码编译为采用硬件中间表示语言描述的中间代码的过程中,对第一代码编译得到中间子代码段的同时,还确定出了各中间子代码段的更新状态标识信息,即标识出了:与具有相同功能、且在前次代码编译过程得到的中间子代码段相比,本次代码编译过程中得到的中间子代码段是否已被更新(修改)。这样,对于每个未更新的中间子代码段而言,由于其余未更新的中间子代码段的属性信息也并未改变,因此,在将采用硬件中间表示语言描述的中间代码转换为采用常规硬件描述语言描述的第二代码的过程中,对该未更新的中间子代码段进行优化时,则无需考虑其余未更新的中间子代码段的属性信息的影响,也就是说,与相关技术中,对于每个中间子代码段进行优化时均需考虑所有中间子代码段的属性信息的全局优化方式相比,本申请实施例中利用了增量编译的思想,对中间子代码段是否更新进行了区分,进而对于未更新的中间子代码段,在进行优化时,需要考虑的因素有所减少:仅需考虑已更新的中间子代码段的属性信息即可。因此,本申请实施例的优化效率更高、耗时更短,进而可以降低整个代码编译的总耗时,提升编译效率。
本申请实施例的详细实现过程
下面结合本申请实施例附图进一步说明本申请实施例具体实现。
实施例一
参照图4,图4为根据本申请实施例一的一种代码编译方法的步骤流程图。具体地,该方法包括以下步骤:
步骤402,获取采用硬件描述语言编写的第一代码。
本申请实施例中的硬件描述语言可以为不同于本领域常规硬件描述语言的新型硬件描述语言。具体地,例如:常规硬件描述语言通常为Verilog语言,则本步骤中的硬件描述语言则可以为新型的Chisel语言,等等。
步骤404,使用中间表示语言编译第一代码,得到至少一个中间子代码段,并确定各中间子代码段的更新状态标识信息,其中,更新状态标识信息用于标识已更新的中间子代码段或未更新的中间子代码段。
其中,不同的中间子代码段对应不同的硬件功能。
具体地,当步骤402中的硬件描述语言为Chisel语言时,硬件中间表示语言可以为FIRRTL(Flexible Internal Representation for RTL,RTL的灵活中间表示)。
对于某个具体的中间子代码段而言,当确定出其更新状态标识信息为已更新的中间子代码段时,则表明本次编译过程中得到的该中间子代码段,与前一次编译过程中得到的多个前次中间子代码段中,具有相同功能的前次中间子代码段相比,存在修改;当确定出其更新状态标识信息为未更新的中间子代码段时,则表明本次编译过程中得到的该中间子代码段,与前一次编译过程中得到的多个前次中间子代码段中,具有相同功能的前次中间子代码段相比,并未被修改。
例如:针对本次编译过程中得到、用于计算两个变量之和的中间子代码段,若该中间子代码段的更新状态标识信息为已更新的中间子代码段,则表明:与前一次编译过程中得到的同样用于计算两个变量之和的前次中间子代码段相比,该中间子代码段存在修改;反之,若该中间子代码段的标识信息为未更新的中间子代码段,则表明:与前一次编译过程中得到的同样用于计算两个变量之和的前次中间子代码段相比,该中间子代码段未被修改。
步骤406,基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段。
具体地,中间子代码段的属性信息可以为中间子代码段的功耗信息、延时信息,等等,在优化过程中,可以根据实际情况确定,此处,对于中间子代码段的属性信息所指代的具体内容不做限定。
其中,第二子代码段可以为采用本领域的常规硬件描述语言呈现的代码段,如:采用Verilog呈现的代码段,等。
步骤408,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
进一步地,对于每个已更新的中间子代码段,进行优化处理是指考虑所有中间子代码段(既包括未更新的中间子代码段,还包括已更新的中间子代码段)的属性信息对该已更新的中间子代码段的影响,进行对应的优化处理。对应地,上述步骤408中,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段,可以包括:基于所有中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
另外,步骤404最终得到的中间子代码段通常为高层级的中间子代码段,在执行步骤406和步骤408中的优化处理之前,可以先将各高层级的中间子代码转换为低层级的中间子代码,之后,再在步骤406中,基于低层级的已更新的中间子代码段的属性信息,分别对各低层级的未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;分别对各低层级的已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
步骤410,各第二子代码段组合形成第二代码。
参见图5,图5为图4所示实施例的编译框架示意图,以下,将参考图5所示的示意图,以一个具体场景示例,对本申请实施例进行说明:
先获取采用新型硬件描述语言描述的第一代码;之后,将第一代码输入增量编译接口,增量编译接口对获取到的第一代码进行编译处理,得到多个中间子代码段,并确定出各中间子代码段的更新状态标识信息,参见图5,中间代码段的数量为n(n为大于0的自然数),其中,中间子代码段1和中间子代码段2为已更新的中间子代码段,剩余的中间子代码段3、……、中间子代码段n均为未更新的中间子代码段;再对各已更新的中间子代码段进行层级转换,得到低层级的已更新中间子代码段1和低层级的已更新中间子代码段1;由于中间子代码段3、……、中间子代码段n均为未与前次编译过程相比,未更新的代码段,因此,可以直接获取对前次中间子代码段3、……、前次中间子代码段n分别进行低层级转换后得到的低层级的前次中间子代码段3、……、低层级的前次中间子代码段n,作为低层级的未更新中间子代码段3、……、低层级的未更新中间子代码段n;之后,再对各低层级的中间子代码段进行全局优化,具体地:低层级的中间子代码段3、……、低层级的中间子代码段n中的每个子代码段,可以基于低层级的中间子代码段1和低层级的中间子代码段2的属性信息进行优化处理,得到对应的第二子代码段;针对低层级的中间子代码段1或者低层级的中间子代码段2,则:基于所有低层级的中间子代码段(低层级的中间子代码段1、……、低层级的中间子代码段n)的属性信息,对已更新低层级的中间子代码段1或者已更新低层级的中间子代码段2进行优化处理,得到对应的第二子代码段;最终将所有的第二子代码段组合起来,即形成第二代码。
本申请实施例中,在第一阶段,对第一代码编译得到中间子代码段的同时,还确定出了各中间子代码段的更新状态标识信息,即标识出了:与具有相同功能、且在前次代码编译过程得到的中间子代码段相比,本次代码编译过程中得到的中间子代码段是否已被修改。这样,对于每个未更新的中间子代码段而言,由于其余未更新的中间子代码段的属性信息也并未改变,因此,在第二阶段,对该未更新的中间子代码段进行优化时,则无需考虑其余未更新中间子代码段的属性信息的影响,也就是说,与相关技术中,对于每个中间子代码段进行优化时均需考虑所有中间子代码段的属性信息的全局优化方式相比,本申请实施例中对于未更新中间子代码段,在进行优化时,需要考虑的因素有所减少:仅需考虑已更新中间子代码段的属性信息即可。因此,本申请实施例的优化效率更高、耗时更短,进而可以降低整个代码编译的总耗时,提升编译效率。
另外,当第一代码不是首次编写的原始代码,而是基于验证结果对原始代码进行修改后的代码时,由于修改过程通常是较小的局部修改,例如,仅对某一行代码进行修改等,因此,采用本申请实施例的方案,第一阶段得到的中间子代码段中,大部分都将是未更新中间子代码段,而只有极少部分为已更新中间子代码段,这样,在第二阶段,对于未更新中间子代码段进行优化时,需要考虑的因素将大幅度减少,因此,可以明显降低编译总耗时,显著提升编译效率。
实施例二
参照图6,图6为根据本申请实施例二的一种代码编译方法的步骤流程图。具体地,该方法包括以下步骤:
步骤602,获取采用硬件描述语言编写的第一代码。
步骤604,将第一代码输入与硬件描述语言对应的代码编译器,通过代码编译器得到至少一个初始中间子代码段的初始中间代码。若初始中间子代码段的总数量小于前次代码编译过程中得到的前序中间子代码段的总数量,则执行步骤606;若初始中间子代码段的总数量大于前次代码编译过程中得到的前序中间子代码段的总数量,则执行步骤610;若初始中间子代码段的总数量等于前次代码编译过程中得到的前序中间子代码段的总数量,则将各初始中间子代码段确定为过渡子代码段,并执行步骤614。
步骤606,对比各初始中间子代码段对应的硬件功能与各前序中间子代码段对应的硬件功能,从初始中间子代码段中确定已合并子代码段。
步骤608,对已合并子代码段进行拆分处理,得到拆分后子代码段,将拆分后子代码段和除已合并子代码段外的其余初始中间子代码段确定为中间子代码段。之后,执行步骤614。当本次代码编译过程中通过代码编译器得到的初始中间子代码段的总数量,比前一次代码编译过程中通过代码编译器得到的中间子代码段的总数量小时,则表明与前一次的代码编译器编译过程相比,本次代码编译器编译过程中,对于子代码段进行了合并处理,例如:将具有相同或者类似功能的两个子代码段进行了合并处理。为了便于对前后两次编译得到的子代码段进行对比,以确定本次代码编译过程得到的各子代码段是否被更新,本申请实施例中,对已经合并了的子代码段重新进行了拆分处理,以使得前后两次编译得到的子代码段在数量以及功能上对应。
步骤610,对比各初始中间子代码段对应的硬件功能与各前序中间子代码段对应的硬件功能,从初始中间子代码段中确定已拆分子代码段。
步骤612,对已拆分子代码段进行合并处理,得到合并后子代码段,将合并后子代码段和除已拆分子代码段外的其余初始中间子代码段确定为过渡子代码段。之后,执行步骤614。与步骤606以及步骤608同理,当本次代码编译过程中通过代码编译器得到的初始中间子代码段的总数量,比前一次代码编译过程中通过代码编译器得到的中间子代码段的总数量大时,则表明与前一次的代码编译器编译过程相比,本次代码编译器编译过程中,对于子代码段进行了拆分处理。为了便于对前后两次编译得到的子代码段进行对比,以确定本次代码编译过程得到的各子代码段是否被更新,本申请实施例中,对已经拆分了的子代码段重新进行了合并处理,以使得前后两次编译得到的子代码段在数量以及功能上对应。
步骤614,基于各中间子代码段对应的硬件功能和各前序中间子代码段对应的硬件功能,确定各中间子代码段与各前序中间子代码段的对应关系。
具体地,将具有相同硬件功能的中间子代码段和前序中间子代码段确定为具有对应关系的子代码段。
步骤616,对比具有对应关系的中间子代码段与前序中间子代码段,确定各中间子代码段的更新状态标识信息。
其中,标识信息包括已更新的中间子代码段或未更新的中间子代码段。
具体地,可以先对比中间子代码段与前序中间子代码段中包含的代码在形式上是否完全一致,若是,则中间子代码段与前序中间子代码段之间必然具有对应关系;若两者在形式上存在差异,则可以通过具体的算法分析,判断两者采用的算法是否实质相同,若实质相同,则两者之间还是存在对应关系,如:两者在代码形式上存在差异,但是差异仅在于变量名称的改变,算法本质相同:均为求和算法,则可以确定两者之间存在对应关系。
步骤618,基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段。
步骤620,计算各已更新的中间子代码段的属性信息;获取在前次代码编译过程中计算得到的各未更新的中间子代码段的属性信息;基于各已更新的中间子代码段的属性信息和各未更新的中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
另外,在步骤618之前得到的中间子代码段通常为高层级的中间子代码,在执行步骤618以及步骤620中的优化处理之前,可以先将各高层级的中间子代码转换为低层级的中间子代码,之后,再在步骤618中,基于低层级的已更新的中间子代码段的属性信息,分别对各低层级的未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;在步骤620中,基于低层级的各中间子代码段的属性信息,分别对各低层级的已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。其中,对于高层级的未更新的中间子代码段,无需执行从高层级到低层级的转换过程,而是可以直接获取前次代码编译过程中已经转换得到的低层级的未更新的中间子代码段即可。
本申请实施例中,在第一阶段,对第一代码编译得到中间子代码段的同时,还确定出了各中间子代码段的更新状态标识信息,即标识出了:与具有相同功能、且在前次代码编译过程得到的中间子代码段相比,本次代码编译过程中得到的中间子代码段是否已被更新(修改)。这样,对于每个未更新的中间子代码段而言,由于其余未更新的中间子代码段的属性信息也并未改变,因此,在第二阶段,对该未更新的中间子代码段进行优化时,则无需考虑其余未更新的中间子代码段的属性信息的影响,也就是说,与相关技术中,对于每个中间子代码段进行优化时均需考虑所有中间子代码段的属性信息的全局优化方式相比,本申请实施例中对于未更新的中间子代码段,在进行优化时,需要考虑的因素有所减少:仅需考虑已更新的中间子代码段的属性信息即可。因此,本申请实施例的优化效率更高、耗时更短,进而可以降低整个代码编译的总耗时,提升编译效率。
另外,当第一代码不是首次编写的原始代码,而是基于验证结果对原始代码进行修改后的代码时,由于修改过程通常是较小的局部修改,例如,仅对某一行代码进行修改等,因此,采用本申请实施例的方案,第一阶段得到的中间子代码段中,大部分都将是未更新的中间子代码段,而只有极少部分为已更新的中间子代码段,这样,在第二阶段,对于未更新的中间子代码段进行优化时,需要考虑的因素将大幅度减少,因此,可以明显降低编译总耗时,显著提升编译效率。
同时,由于将中间子代码段进行了区分,分为:已更新的中间子代码段和未更新的中间子代码段,因此,在后续对已更新的中间子代码段进行优化处理时,仅需计算已更新的中间子代码段的属性信息,而对于未更新的中间子代码段的属性信息,由于在前次代码编译过程中已经进行了计算并且在当前编译过程中并不会改变,因此,当前代码编译过程仅需获取即可,无需重复计算,这样可以进一步降低编译总耗时,提升编译总效率。
实施例三
参见图7,图7为根据本申请实施例三的一种代码编译装置的结构框图。本申请实施例提供的代码编译装置包括:
第一代码获取模块702,用于获取采用第一硬件描述语言编写的第一代码;
中间代码得到模块704,用于使用中间表示语言编译第一代码,得到至少一个中间子代码段,并确定各中间子代码段的更新状态标识信息,其中,更新状态标识信息用于标识已更新的中间子代码段或未更新的中间子代码段;
第一优化处理706,用于基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;
第二优化处理模块708,用于分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段;
第二代码形成模块710,用于各第二子代码段组合形成第二代码。
可选地,在其中一些实施例中,第二优化处理模块708在执行分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段的步骤时,具体用于:基于所有中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
可选地,在其中一些实施例中,第二优化处理模块708在执行基于所有中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段的步骤时,具体用于:
计算各已更新的中间子代码段的属性信息;
获取在前次代码编译过程中计算得到的各未修改过渡子代码段的属性信息;
获取在前次代码编译过程中计算得到的各未更新的中间子代码段的属性信息;
基于各已更新的中间子代码段的属性信息和各未更新的中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。可选地,在其中一些实施例中,中间代码得到模块704在执行使用中间表示语言编译第一代码,得到至少一个中间子代码段的步骤时,具体用于:
将第一代码输入与硬件描述语言对应的代码编译器,通过代码编译器得到至少一个初始中间子代码段;
若初始中间子代码段的总数量等于前次代码编译过程中得到的前序中间子代码段的总数量,则将各初始中间子代码段确定为中间子代码段。
可选地,在其中一些实施例中,中间代码得到模块704还用于:
若初始中间子代码段的总数量小于前次代码编译过程中得到的前序中间子代码段的总数量,则对比各初始中间子代码段对应的硬件功能与各前序中间子代码段对应的硬件功能,从初始中间子代码段中确定已合并子代码段;
对已合并子代码段进行拆分处理,得到拆分后子代码段,将拆分后子代码段和除已合并子代码段外的其余初始中间子代码段确定为中间子代码段。
可选地,在其中一些实施例中,中间代码得到模块704还用于:
若初始中间子代码段的总数量大于前次代码编译过程中得到的前序中间子代码段的总数量,则对比各初始中间子代码段对应的硬件功能与各前序中间子代码段对应的硬件功能,从初始中间子代码段中确定已拆分子代码段;
对已拆分子代码段进行合并处理,得到合并后子代码段,将合并后子代码段和除已拆分子代码段外的其余初始中间子代码段确定为中间子代码段。
可选地,在其中一些实施例中,中间代码得到模块704在执行确定各中间子代码段的更新状态标识信息的步骤时,具体用于:
基于各中间子代码段对应的硬件功能和各前序中间子代码段对应的硬件功能,确定确定各中间子代码段与各前序中间子代码段的对应关系;
对比具有对应关系的中间子代码段与前序中间子代码段,确定各中间子代码段的更新状态标识信息。
本申请实施例的代码编译装置用于实现前述方法实施例一或实施例二中相应的代码编译方法,并具有相应的方法实施例的有益效果,在此不再赘述。此外,本申请实施例的代码编译装置中的各个模块的功能实现均可参照前述方法实施例一或实施例二中的相应部分的描述,在此亦不再赘述。
实施例四
参照图8,示出了根据本申请实施例四的一种电子设备的结构示意图,本申请具体实施例并不对电子设备的具体实现做限定。
如图8所示,该电子设备可以包括:处理器(processor)802、通信接口(Communications Interface)804、存储器(memory)806、以及通信总线808。
其中:
处理器802、通信接口804、以及存储器806通过通信总线808完成相互间的通信。
通信接口804,用于与其它电子设备或服务器进行通信。
处理器802,用于执行程序810,具体可以执行上述代码编译方法实施例中的相关步骤。具体地,程序810可以包括程序代码,该程序代码包括计算机操作指令。
处理器802可能是CPU,或者是特定集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。智能设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器806,用于存放程序810。存储器806可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序810具体可以用于使得处理器802执行以下操作:获取采用硬件描述语言编写的第一代码;使用中间表示语言编译第一代码,得到至少一个中间子代码段,并确定各中间子代码段的更新状态标识信息,其中,更新状态标识信息用于标识已更新的中间子代码段或未更新的中间子代码段;基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段;各第二子代码段组合形成第二代码。。
程序810中各步骤的具体实现可以参见上述代码编译方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
通过本实施例的电子设备,在第一阶段,对第一代码编译得到中间子代码段的同时,还确定出了各中间子代码段的更新状态标识信息,即标识出了:与具有相同功能、且在前次代码编译过程得到的中间子代码段相比,本次代码编译过程中得到的中间子代码段是否已被更新(修改)。这样,对于每个未更新的中间子代码段而言,由于其余未更新的中间子代码段的属性信息也并未改变,因此,在第二阶段,对该未更新的中间子代码段进行优化时,则无需考虑其余未更新的中间子代码段的属性信息的影响,也就是说,与相关技术中,对于每个中间子代码段进行优化时均需考虑所有中间子代码段的属性信息的全局优化方式相比,本申请实施例中对于未更新的中间子代码段,在进行优化时,需要考虑的因素有所减少:仅需考虑已更新的中间子代码段的属性信息即可。因此,本申请实施例的优化效率更高、耗时更短,进而可以降低整个代码编译的总耗时,提升编译效率。
本申请实施例还提供了一种计算机程序产品,包括计算机指令,该计算机指令指示计算设备执行上述多个方法实施例中的任一代码编译方法对应的操作。
需要指出,根据实施的需要,可将本申请实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本申请实施例的目的。
上述根据本申请实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的代码编译方法。此外,当通用计算机访问用于实现在此示出的代码编译方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的代码编译方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
以上实施方式仅用于说明本申请实施例,而并非对本申请实施例的限制,有关技术领域的普通技术人员,在不脱离本申请实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本申请实施例的范畴,本申请实施例的专利保护范围应由权利要求限定。
Claims (10)
1.一种代码编译方法,包括:
获取采用硬件描述语言编写的第一代码;
使用中间表示语言编译所述第一代码,得到至少一个中间子代码段,并确定各中间子代码段的更新状态标识信息,其中,所述更新状态标识信息用于标识已更新的中间子代码段或未更新的中间子代码段;所述已更新的中间子代码段为与具有相同功能、且在前次代码编译过程中得到的中间子代码段相比,已被更新的中间子代码段;所述未更新的中间子代码段为与具有相同功能、且在前次代码编译过程中得到的中间子代码段相比,未被更新的中间子代码段;基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;
分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段;
各第二子代码段组合形成第二代码;
其中,所述分别对各已更新的中间子代码段进行优化处理,得到各更新的中间子代码段对应的第二子代码段,包括:
基于所有中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
2.根据权利要求1所述的方法,其中,所述基于所有中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段,包括:
计算各已更新的中间子代码段的属性信息;
获取在前次代码编译过程中计算得到的各未更新的中间子代码段的属性信息;
基于各已更新的中间子代码段的属性信息和各未更新的中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
3.根据权利要求1所述的方法,其中,所述使用中间表示语言编译所述第一代码,得到至少一个中间子代码段,包括:
将所述第一代码输入与所述硬件描述语言对应的代码编译器,通过所述代码编译器得到至少一个初始中间子代码段;
若所述初始中间子代码段的总数量等于前次代码编译过程中得到的前序中间子代码段的总数量,则将各初始中间子代码段确定为中间子代码段。
4.根据权利要求3所述的方法,其中,所述方法还包括:
若所述初始中间子代码段的总数量小于前次代码编译过程中得到的前序中间子代码段的总数量,则对比各初始中间子代码段对应的硬件功能与各前序中间子代码段对应的硬件功能,从所述初始中间子代码段中确定已合并子代码段;
对所述已合并子代码段进行拆分处理,得到拆分后子代码段,将所述拆分后子代码段和除所述已合并子代码段外的其余初始中间子代码段确定为中间子代码段。
5.根据权利要求3所述的方法,其中,所述方法还包括:
若所述初始中间子代码段的总数量大于前次代码编译过程中得到的前序中间子代码段的总数量,则对比各初始中间子代码段对应的硬件功能与各前序中间子代码段对应的硬件功能,从所述初始中间子代码段中确定已拆分子代码段;
对所述已拆分子代码段进行合并处理,得到合并后子代码段,将所述合并后子代码段和除所述已拆分子代码段外的其余初始中间子代码段确定为中间子代码段。
6.根据权利要求3-5任一项所述的方法,其中,所述确定各中间子代码段的更新状态标识信息,包括:
基于各中间子代码段对应的硬件功能和各前序中间子代码段对应的硬件功能,确定各中间子代码段与各前序中间子代码段的对应关系;
对比具有对应关系的中间子代码段与前序中间子代码段,确定各中间子代码段的更新状态标识信息。
7.一种代码编译装置,包括:
第一代码获取模块,用于获取采用硬件描述语言编写的第一代码;
中间代码得到模块,用于使用中间表示语言编译所述第一代码,得到至少一个中间子代码段,并确定各中间子代码段的更新状态标识信息,其中,所述更新状态标识信息用于标识已更新的中间子代码段或未更新的中间子代码段;所述已更新的中间子代码段为与具有相同功能、且在前次代码编译过程中得到的中间子代码段相比,已被更新的中间子代码段;所述未更新的中间子代码段为与具有相同功能、且在前次代码编译过程中得到的中间子代码段相比,未被更新的中间子代码段;
第一优化处理模块,用于基于已更新的中间子代码段的属性信息,分别对各未更新的中间子代码段进行优化处理,得到各未更新的中间子代码段对应的第二子代码段;
第二优化处理模块,用于分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段;
第二代码形成模块,用于各第二子代码段组合形成第二代码;
其中,所述第二优化处理模块在执行所述分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段的步骤时,具体用于:基于所有中间子代码段的属性信息,分别对各已更新的中间子代码段进行优化处理,得到各已更新的中间子代码段对应的第二子代码段。
8.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7中任一项所述的代码编译方法对应的操作。
9.一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1-6中任一所述的代码编译方法。
10.一种计算机程序产品,包括计算机指令,所述计算机指令指示计算设备执行如权利要求1-6中任一所述的代码编译方法对应的操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210902765.9A CN115167868B (zh) | 2022-07-29 | 2022-07-29 | 代码编译方法、装置、设备及计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210902765.9A CN115167868B (zh) | 2022-07-29 | 2022-07-29 | 代码编译方法、装置、设备及计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115167868A CN115167868A (zh) | 2022-10-11 |
CN115167868B true CN115167868B (zh) | 2022-12-09 |
Family
ID=83477488
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210902765.9A Active CN115167868B (zh) | 2022-07-29 | 2022-07-29 | 代码编译方法、装置、设备及计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115167868B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116627426B (zh) * | 2023-05-29 | 2023-11-24 | 合芯科技有限公司 | 一种硬件描述语言增量编译方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019184687A1 (zh) * | 2018-03-29 | 2019-10-03 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
CN112306540A (zh) * | 2020-11-05 | 2021-02-02 | 重庆科技学院 | 一种多工程独立编译方法、系统、终端及介质 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050198627A1 (en) * | 2004-03-08 | 2005-09-08 | Intel Corporation | Loop transformation for speculative parallel threads |
US8370776B1 (en) * | 2008-06-13 | 2013-02-05 | Altera Corporation | Method and apparatus for compiling intellectual property systems design cores using an incremental compile design flow |
US9098299B2 (en) * | 2011-09-16 | 2015-08-04 | Facebook, Inc. | Run time incremental compilation of script code |
CN104750533B (zh) * | 2013-12-31 | 2018-10-19 | 上海东软载波微电子有限公司 | C程序编译方法及编译器 |
US9442707B2 (en) * | 2014-06-25 | 2016-09-13 | Microsoft Technology Licensing, Llc | Incremental whole program compilation of code |
US10261889B2 (en) * | 2014-06-25 | 2019-04-16 | Microsoft Technology Licensing, Llc | Techniques for edit-and-continue and enhanced optimized debugging on optimized code |
CN105988854B (zh) * | 2015-02-12 | 2019-05-07 | 龙芯中科技术有限公司 | 动态编译方法及装置 |
US9996652B2 (en) * | 2015-09-04 | 2018-06-12 | Altera Corporation | Incremental register retiming of an integrated circuit design |
US10242145B1 (en) * | 2017-05-03 | 2019-03-26 | Cadence Design Systems, Inc. | Optimizing a power grid for an integrated circuit |
US11403090B2 (en) * | 2020-12-08 | 2022-08-02 | Alibaba Group Holding Limited | Method and system for compiler optimization based on artificial intelligence |
CN112486465A (zh) * | 2020-12-11 | 2021-03-12 | 北京字节跳动网络技术有限公司 | 一种代码更新方法及装置 |
CN114756219A (zh) * | 2022-04-11 | 2022-07-15 | 浙江大学 | 一种基于c++的fpga硬件构造语言实现系统 |
-
2022
- 2022-07-29 CN CN202210902765.9A patent/CN115167868B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019184687A1 (zh) * | 2018-03-29 | 2019-10-03 | 网易(杭州)网络有限公司 | 代码热更新方法和装置、存储介质、处理器及终端 |
CN112306540A (zh) * | 2020-11-05 | 2021-02-02 | 重庆科技学院 | 一种多工程独立编译方法、系统、终端及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115167868A (zh) | 2022-10-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7571427B2 (en) | Methods for comparing versions of a program | |
CN110399133B (zh) | 一种基于前端字节码技术的JavaScript代码优化方法 | |
US20170242671A1 (en) | Semantically sensitive code region hash calculation for programming languages | |
JP2005216177A (ja) | コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法 | |
US20080098336A1 (en) | Compiler and logic circuit design method | |
CN103329132A (zh) | 架构优化器 | |
CN110780879B (zh) | 一种基于智能编译技术的决策执行方法、装置、设备及介质 | |
CN115167868B (zh) | 代码编译方法、装置、设备及计算机存储介质 | |
CN108228187B (zh) | 一种数值程序的全局优化方法 | |
US5949993A (en) | Method for the generation of ISA simulators and assemblers from a machine description | |
US7447617B2 (en) | Data processing device designing method, data processing device designing apparatus, program and computer readable information recording medium | |
KR20190089615A (ko) | 버그 정정 시스템 및 버그 정정 방법 | |
CN114741085A (zh) | 数据处理方法、装置、设备及存储介质 | |
TW201218008A (en) | Intelligent architecture creator | |
CN111475165A (zh) | 一种应用程序智能编译方法、系统、终端及存储介质 | |
US8117572B2 (en) | Data processing device, behavioral synthesis device, data processing method, and recording medium | |
CN115576840A (zh) | 基于机器学习的静态程序插桩检测方法及装置 | |
US6167557A (en) | Method and apparatus for logic synthesis employing size independent timing optimization | |
CN114781330A (zh) | 一种基于需求建模的类型检查方法 | |
CN114791865A (zh) | 一种基于关系图的配置项自洽性检测方法、系统和介质 | |
CN114691151A (zh) | 一种基于深度学习的优化代码反编译方法和系统 | |
CN111880803A (zh) | 一种应用于多平台的软件构建方法及装置 | |
JP2002091762A (ja) | プログラム生成装置 | |
CN115951936B (zh) | 向量化编译程序的芯片适配方法、装置、设备及介质 | |
CN117291128B (zh) | 用于芯片设计工程自动化的方法、计算机设备及介质 |
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 |