CN118103815A - 编译方法以及用于编译的装置 - Google Patents
编译方法以及用于编译的装置 Download PDFInfo
- Publication number
- CN118103815A CN118103815A CN202180103481.7A CN202180103481A CN118103815A CN 118103815 A CN118103815 A CN 118103815A CN 202180103481 A CN202180103481 A CN 202180103481A CN 118103815 A CN118103815 A CN 118103815A
- Authority
- CN
- China
- Prior art keywords
- module
- information
- list
- compiling
- compiled
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000013461 design Methods 0.000 claims abstract description 13
- 230000008569 process Effects 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 17
- 230000004048 modification Effects 0.000 claims description 13
- 238000012986 modification Methods 0.000 claims description 13
- 238000003860 storage Methods 0.000 claims description 11
- 238000012545 processing Methods 0.000 description 13
- 238000010586 diagram Methods 0.000 description 12
- 238000004458 analytical method Methods 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 238000004891 communication Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000011161 development Methods 0.000 description 3
- 230000014509 gene expression Effects 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- ZLIBICFPKPWGIZ-UHFFFAOYSA-N pyrimethanil Chemical compound CC1=CC(C)=NC(NC=2C=CC=CC=2)=N1 ZLIBICFPKPWGIZ-UHFFFAOYSA-N 0.000 description 2
- 238000004904 shortening Methods 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 239000000969 carrier Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 235000019800 disodium phosphate Nutrition 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 238000012795 verification 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
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开的实施例提供了一种编译方法以及用于编译的装置。该方法包括:基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及基于第一模块列表和第二模块列表,对待编译模块进行增量编译。以此方式,本公开的实施例中可以通过预编译构建待编译模块的第一模块列表以及已编译模块的第二模块列表,从而能够针对第一模块列表进行增量编译,避免对所有的模块进行全量编译,这样能够缩短编译的时间,提升编译效率。
Description
本公开的实施例主要涉及芯片设计领域,更具体地,涉及一种编译方法以及用于编译的装置。
在芯片制造过程中,一般都先使用硬件描述语言(Hardware Description Language,HDL)在高层次(诸如寄存器级)上写逻辑,随后再使用电子设计自动化(Electronic Design Automation,EDA)软件将硬件描述语言翻译成底层(诸如门级)的网表。网表在经过仿真确认没有问题之后,才会被经过各种加工工艺制造芯片。可见,硬件描述语言是芯片制造的基础之一,因此硬件描述语言的成功编译和运行是芯片制造的前提。
目前只能通过全量编译的方式来对硬件描述语言进行编译,这样导致了编译过程所花费的时间过长,编译效率低。
发明内容
本公开的实施例提供了一种增量编译的方案,避免对所有的模块进行全量编译,能够缩短编译的时间,提升编译效率。
在本公开的第一方面,提供了一种编译方法。该方法包括:基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
如此,本公开的实施例中可以通过预编译构建待编译模块的第一模块列表以及已编译模块的第二模块列表,从而能够针对第一模块列表进行增量编译,避免对所有的模块进行全量编译,这样能够缩短编译的时间,提升编译效率。
在第一方面的一些实施例中,模块信息包括第一模块信息和第二模块信息,并且确定模块信息包括:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
在第一方面的一些实施例中,预编译包括基于硬件描述语言的宿主语言的编译。
如此,本公开的实施例可以基于上一次的全量编译得到第一模块信息,并且可以基于宿主语言的预编译得到第二模块信息,从而能够便于构建第一模块列表和第二模块列表。
在第一方面的一些实施例中,基于模块信息确定第一模块列表和第二模块列表包括:通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
如此,通过第一模块信息和第二模块信息之间的比较,从而能够确定哪些模块被修改并确定被修改的模块的哪些子模块未被修改,从而能够基于此确定第一模块列表和第二模块列表。
在第一方面的一些实施例中,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。通过第一模块信息与第二模块信息之间的比较以确定第一模块列表和第二模块列表包括:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
如此,本公开的实施例中通过模块哈希值的比较来确定模块是否被修改,并且还可以考虑父模块、子模块等模块之间的关系来进一步完善第一模块列表和第二模块列表。
在第一方面的一些实施例中,第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在第一方面的一些实施例中,对待编译模块进行增量编译包括:获取已编译模块的端口信息;至少基于端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。
在第一方面的一些实施例中,至少基于端口信息构建待编译模块的增量编译环境包括:构建待编译模块的初始编译环境;通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。
在第一方面的一些实施例中,在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
如此,通过已编译模块的端口信息来读取已编译模块的的上一次全量编译的目标代码文件,避免对已编译模块进行增量编译,从而能够达到缩短编译时间的目的。
在本公开的第二方面,提供了一种用于编译的装置。该装置包括:第一确定单元,被配置为基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;第二确定单元,被配置为基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及编译单元,被配置为基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
在第二方面的一些实施例中,模块信息包括第一模块信息和第二模块信息,并且其中第一确定单元被配置为:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经 修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
在第二方面的一些实施例中,预编译包括基于硬件描述语言的宿主语言的编译。
在第二方面的一些实施例中,第二确定单元被配置为:通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
在第二方面的一些实施例中,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值,并且第二确定单元被配置为:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
在第二方面的一些实施例中,第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在第二方面的一些实施例中,编译单元被配置为:获取已编译模块的端口信息;至少基于端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。
在第二方面的一些实施例中,编译单元被配置为:构建待编译模块的初始编译环境;以及通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。
在第二方面的一些实施例中,编译单元被配置为:在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
在本公开的第三方面,提供了一种计算设备。该计算设备包括处理器以及存储器,存储器上存储有由处理器执行的指令,当指令被处理器执行时使得该计算设备实现:基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块;以及基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
在第三方面的一些实施例中,模块信息包括第一模块信息和第二模块信息,当指令被处理器执行时使得该计算设备实现:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
在第三方面的一些实施例中,预编译包括基于硬件描述语言的宿主语言的编译。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
在第三方面的一些实施例中,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。当指令被处理器执行时使得该计算设备实现:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
在第三方面的一些实施例中,第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:获取已编译模块的端口信息;至少基于端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:构建待编译模块的初始编译环境;通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。
在第三方面的一些实施例中,当指令被处理器执行时使得该计算设备实现:在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
在本公开的第四方面,提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机可执行指令,该计算机可执行指令被处理器执行时实现根据上述第一方面或其任一实施例中的方法的操作。
在本公开的第五方面,提供了一种计算机程序或计算机程序产品。该计算机程序或计算机程序产品被有形地存储在计算机可读介质上并且包括计算机可执行指令,计算机可执行指令在被执行时实现根据上述第一方面或其任一实施例中的方法的操作。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
结合附图并参考以下详细说明,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。在附图中,相同或相似的附图标记表示相同或相似的元素,其中:
图1示出了根据本公开的一些实施例的编译的过程的示意流程图;
图2示出了根据本公开的一些实施例的确定模块信息的过程的示意流程图;
图3示出了根据本公开的一些实施例的增量编译的过程的示意流程图;
图4示出了根据本公开的实施例的用于编译的装置的示意框图;以及
图5示出了可以用来实施本公开的实施例的示例设备的示意性框图。
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
在本公开的实施例的描述中,术语“包括”及其类似用语应当理解为开放性包含,即“包括但不限于”。术语“基于”应当理解为“至少部分地基于”。术语“一个实施例”或“该实施例”应当理解为“至少一个实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。术语“和/或”表示由其关联的两项的至少一项。例如“A和/或B”表示A、B、或者A和B。下文还可能包括其他明确的和隐含的定义。
硬件描述语言(Hardware Description Language,HDL)是用于描述数字电路功能及行为的语言,常用的硬件描述语言包括verilog和超高速集成电路硬件描述语言(Very High Speed Integrated Circuit HDL,VHDL)。相对于HDL而言,高层次硬件描述语言是指以高级语言(如Scala或Python语言等)为宿主,且高层次描述语言是用于描述数组电路的领域专用语言(Domain Specific Language)。高层次硬件描述语言继承了其宿主语言的高级语言特性,同时与硬件描述语言有相同的描述层级,因此高层次硬件描述语言可用于精确描述硬件电路。
增量编译是编译器中常见的一种编译方式。其是指当源程序代码中的部分代码发生改变后,重新编译的动作只限于修改的代码及与之相关的代码,而无需对所有源代码进行编译。在软件开发和调试期间,通过增量编译可极大缩短编译时间,提高软件开发和调试的效率。增量编译常用的实现方法是基于最小编译单元的实现方法。例如硬件仿真器使用的是基于文件的增量编译,其将文件作为最小编译单元,根据源代码文件的改动状态来确定增量编译范围。在增量编译的过程中,编译器根据源代码文件的修改信息和模块依赖关系,确定增量编译范围,实施增量编译。
在高层次硬件描述语言的源代码文件进行编译时,源代码文件需要先经过其宿主语言的编译器的编译,然后才能执行高层次硬件描述语言本身的编译。这样导致基于文件的增量编译方法不能被应用于高层次硬件描述语言。目前对于高层次硬件描述语言的编译方式只能采用全量编译的方式,也就是说,每一次对源代码文件的修改,都需要对所有的源代码文件全部执行编译,这样导致了编译过程所花费的时间过长,影响编译效率。
有鉴于此,本公开的实施例提供了一种编译方法,能够基于代码模块的修改信息,实现对基于模块的增量编译,从而解决了因全量编译造成的编译时间过长的问题。
图1示出了根据本公开的一些实施例的编译的过程100的示意流程图。
在框110,基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息。
在框120,基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块。
在框130,基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
在本公开的实施例中,源代码文件可以是基于高层次硬件描述语言而生成的,其中高层 次硬件描述语言以高级语言(诸如Scala或Python语言等)为宿主。模块信息也可以被称为代码模块信息或者类信息或者其他的名称等,本公开实施例中的“模块”(module)是用户定义的软件模块,其基于用户输入的代码,例如可以将与“类”相关的一段代码称为“模块”。
图2示出了根据本公开的一些实施例的确定模块信息的过程200的示意流程图。
在框210,通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息。
在框220,获取用于针对源代码文件的修改操作,以得到经修改的源代码文件。
在框230,通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
具体而言,用户编写高层次硬件描述语言的源代码文件的过程中,会通过编译来对源代码文件进行调试,确定编写的代码是否存在错误。进一步地,用户还可以对代码进行部分修改。
在一些实施例中,高层次硬件描述语言的编译器可以在全量编译的过程中构建并得到第一模块信息。可选地,第一模块信息也可以被实现为第一模块信息列表。第一模块信息列表中可以包括与源代码文件对应的芯片设计工程中的模块的模块信息。第一模块信息列表中的模块信息可以包括关于模块的以下信息中至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息。举例而言,第一模块信息列表中的模块信息可以包括关于模块的模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、以及模块端口信息。可选地,第一模块信息列表中的模块信息可以不包括模块的目标代码文件路径信息,这样能够简化列表中的信息,提升处理速度。
示例性地,模块标识可以为模块名称或模块标识符,可理解,即使用户对模块中的代码进行修改,该模块的模块标识也不改变。示例性地,模块哈希值可以是将模块进行序列化之后所得到的字符串形式的哈希值,例如可以为二进制的形式。在对模块进行序列化的过程中,将模块中所包括的语句和表达式等依次地进行序列化,随后将各个语句和表达式的序列化后的字符串进行合成,从而得到模块哈希值。示例性地,子模块标识可以包括该模块所调用的其他模块的模块标识,例如所调用的子模块的模块名称或模块标识符等。示例性地,父模块标识可以包括调用该模块的其他模块的模块标识,例如调用该模块的父模块的模块名称或模块标识符等。示例性地,模块层级可以表示模块被嵌套的层数,例如可以将顶层模块的模块层级表示为0,将顶层模块的子模块的模块层级表示为1,以此类推,等等。示例性地,模块端口信息可以表示该模块对应的端口信息,例如可以为芯片的硬件端口信息,该端口信息可以包括端口标识、端口类型、端口位宽中的一个或多个,其中端口标识可以包括端口名称或标识符等,端口类型可以为输入或输出等,端口位宽可以是以字节或比特为量纲的数值。示例性地,目标代码文件路径信息可以指示该模块经全量编译所对应的目标代码文件。
在一些实施例中,框230中的预编译是指基于宿主语言的编译。在一些示例中,针对经修改的源代码文件,可以调用宿主语言的编译器对经修改的源代码文件进行编译;随后调用高层次硬件模块语言的前端解析器,进行词法、语法和语义分析,以得到抽象语法树(Abstract Syntax Code,AST);并且可以基于得到的AST,得到第二模块信息。可选地,通过预编译得到的数据结构可以被存储在内存中,随后前端解析器可以基于内存中的数据结构构建AST。
词法分析(Lexical Analysis)是通过对字符串进行扫描以生成一系列的词法单元(tokens),词法单元可以包括数字、标点符号、运算符等,并且词法单元之间都是独立的。语法分析(Syntax Analysis)用于确定语法结构是否无误,并按照语法规则将扁平的token列表,组合成一个个声明语句节点、表达式节点,最终形成嵌套结构的语法树。语义分析是进行上下文前后相关性的检查,以确定前后的语义是否一致。AST是由不同类型的节点通过相互嵌套而构成的树形结构。可理解,关于词法分析、语法分析、语义分析和AST等可以参照已有技术中的相关描述,本公开中不再赘述。
可选地,第二模块信息也可以被实现为第二模块信息列表。第二模块信息列表中可以包括与经修改后的源代码文件中的模块的模块信息。模块信息可以包括关于模块的以下信息中至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块的端口信息。
在本公开的一些实施例中,可以通过第一模块信息和第二模块信息之间的比较,来确定第一模块列表和第二模块列表。具体而言,通过比较可以确定哪些模块被进行了修改,从而将已修改的模块添加到第一模块列表。进一步地,如果被修改的模块的子模块未被修改,则添加到第二模块列表。
举例而言,假设第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值。假设第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。那么,如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表。如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表。如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。
可选地,在一些实施例中,可以利用第一迭代指针将第一模块信息和第二模块信息进行比较,并且可以根据比较的结果来构建初始第一模块列表。假设第一模块信息被实现为第一模块信息列表,该第一模块信息列表包括多个第一数据项。假设第二模块信息被实现为第二模块信息列表,该第二模块信息列表包括多个第二数据项。那么构建初始第一模块列表可以包括:
(1-1),将第一迭代指针指向第二模块信息列表中的第一个第二数据项,再执行(1-2)。
(1-2),针对第一迭代指针所指向的第二数据项,基于该第二数据项的模块标识,确定在第一模块信息列表中是否存在相同模块标识的第一数据项。如果有,则执行(1-3)。如果没有,则执行(1-4)。
(1-3),针对该第二数据项的模块标识,确定在第二模块信息列表中对应的第二模块哈希值与在第一模块信息列表中对应的第一模块哈希值是否相同。如果不相同,则执行(1-4)。如果相同,则执行(1-5)。
(1-4),将第一迭代指针所指向的第二数据项的模块标识添加到初始第一模块列表中,再执行(1-5)。
(1-5),确定第一迭代指针是否指向第二模块信息列表中的最后一个第二数据项。如果是,该过程结束。如果否,则将第一迭代指针加1,再执行(1-2)。
可选地,在一些实施例中,可以利用第二迭代指针,在初始第一模块列表的基础上,得到更新的第一模块列表,并得到第二模块列表。假设初始第一模块列表中包括多个第三数据项。那么得到第一模块列表和第二模块列表可以包括:
(2-1),将第二迭代指针指向初始第一模块列表中的第一个第三数据项,再执行(2-2)。
(2-2),针对第二迭代指针所指向的第三数据项,从第二模块信息列表中获取对应的子模块标识,执行(2-3)。
(2-3),遍历对应的子模块标识,对于每个子模块标识,确定是否存在于初始第一模块列表中。如果有,则继续下一个子模块标识。如果没有,将子模块标识添加到第二模块列表中,执行(2-4)。
(2-4),针对第二迭代指针所指向的第三数据项,从第二模块信息列表中获取对应的父模块标识,执行(2-6)。
(2-6),遍历对应的父模块标识,对于每个父模块标识,确定是否存在于初始第一模块列表中。如果有,则继续下一个父模块标识。如果没有,将父模块标识添加到初始第一模块列表中,以更新初始第一模块列表,执行(2-7)。
(2-7),确定第二迭代指针是否指向第二模块信息列表中的最后一个第三数据项。如果是,该过程结束。如果否,则将第二迭代指针加1,再执行(2-2)。
可选地,在一些实施例中,在该比较过程中,还可以对前一次全量编译所得到的目标代码文件进行更新。例如,如果某个模块存在于第一模块信息列表中但是不存在于第二模块信息列表中,则可以基于第一模块信息列表中该模块的目标代码文件路径信息,将与该模块关联的目标代码文件部分删除。举例而言,用户在对源代码文件进行修改时,可能会将其中的部分模块删除,例如第一模块信息列表中包括模块标识为C的第一数据项,但是第二模块信息列表中任一第二数据项的模块标识都不为C,则可以将模块C对应的那一部分目标代码文件删除,从而实现了对于目标代码文件的更新。
如此,本公开的实施例通过第一模块信息和第二模块信息之间的比较来确定第一模块列表和第二模块列表,通过第一模块列表来指示被修改的模块,通过第二模块列表指示未被修改的、第一模块列表中的模块的子模块。如此,能够使得基于此实现对于第一模块列表中的模块的增量编译。
在本公开的一些实施例中,可以基于第一模块信息列表、第一模块列表和第二模块列表构建增量编译环境,并进一步地对第一模块列表中的模块进行增量编译。图3示出了根据本公开的一些实施例的增量编译的过程300的示意流程图。
在框310,获取已编译模块的端口信息。
在框320,至少基于端口信息,构建待编译模块的增量编译环境。
在框330,针对增量编译环境,进行增量编译。
具体而言,在框310,针对第二模块列表中的已编译模块,可以从第一模块信息列表中或者从第二模块信息列表中获取已编译模块的端口信息。
示例性地,在框320,可以基于第一模块列表构建待编译模块的初始编译环境;并且通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。具体而言,可以从第一或第二模块信息列表中获取第二模块列表中的已编译模块的端口信息,并进一步确定已编译模块的模块代码。通过将第一模块列表中的待编译模块和已确定的已编译模块的模块代码进行整合,生成相应的增量编译的工作目录以及顶层调用模块,从而建立增量编译环境。
在一些示例中,编译器可以遍历第二模块列表中的已编译模块,读取该已编译模块的端口信息,按照该高层次硬件描述语言的代码的格式将生成的模块代码打印到指定文件中。举例而言,针对某已编译模块,假设在第一模块信息列表中该已编译模块的模块信息为:
可选地,本公开实施例中的第二模块列表可以被称为黑盒编译列表或黑盒编译清单,相应地,第二模块列表中的已编译模块可以被称为黑盒模块。高层次硬件描述语言中提供了与传统硬件描述语言相互交互的接口,高层次硬件描述语言能够通过这样的接口来调用传统硬件描述语言,可选地,这样的接口可以被称为黑盒接口,相应地,传统硬件描述语言的模块可以被称为黑盒模块。如此,在本公开的实施例中,可以在全量编译的文件路径下索引到传统硬件描述语言的黑盒模块对应的硬件描述语言文件。从而能够屏蔽这些已编译模块,裁剪编译链,达到缩短编译时间的目的。
针对第一模块列表中的待编译模块,可以创建增量编译的构建脚本,在其中引入第二模块列表中的已编译模块对应的代码文件。通过创建顶层模块,使得在顶层模块中依次调用所有第一模块列表中的待编译模块。如此,通过对增量编译环境中的顶层模块进行编译,能够实现对于待编译模块的增量编译。可理解,在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。并且可理解,通过该增量编译所得到的新的目标代码文件可以替换上一次全量编译所得到的对应的目标代码文件。
如此,本公开的实施例中可以通过预编译构建待编译模块的第一模块列表以及已编译模块的第二模块列表,从而能够针对第一模块列表进行增量编译,避免对所有的模块进行全量编译,这样能够缩短编译的时间,提升编译效率,进一步地也能够提升高层次硬件描述语言进行硬件开发和验证的效率。
应理解,在本公开的实施例中,“第一”,“第二”,“第三”等只是为了表示多个对象可能是不同的,但是同时不排除两个对象之间是相同的。“第一”,“第二”,“第三”等不应当解释为对本公开实施例的任何限制。
还应理解,本公开的实施例中的方式、情况、类别以及实施例的划分仅是为了描述的方便,不应构成特别的限定,各种方式、类别、情况以及实施例中的特征在符合逻辑的情况下,可以相互结合。
还应理解,上述内容只是为了帮助本领域技术人员更好地理解本公开的实施例,而不是要限制本公开的实施例的范围。本领域技术人员根据上述内容,可以进行各种修改或变化或组合等。这样的修改、变化或组合后的方案也在本公开的实施例的范围内。
还应理解,上述内容的描述着重于强调各个实施例之前的不同之处,相同或相似之处可以互相参考或借鉴,为了简洁,这里不再赘述。
图4示出了根据本公开的实施例的用于编译的装置400的示意框图。装置400可以通过软件、硬件或者两者结合的方式实现。在一些实施例中,装置400可以为实现为计算设备、电子设备等。
如图4所示,装置400包括第一确定单元410、第二确定单元420以及编译单元430。第一确定单元410被配置为基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;第二确定单元420被配置为基于模块信息,确定第一模块列表和第二模块列表,第一模块列表至少包括待编译模块的模块标识,第二模块列表至少包括已编译模块的模块标识,已编译模块是待编译模块的子模块。编译单元430被配置为基于第一模块列表和第二模块列表,对待编译模块进行增量编译。
模块信息包括第一模块信息和第二模块信息。第一确定单元410可以被配置为:通过对源代码文件进行全量编译,以确定第一模块信息,第一模块信息包括关于源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对源代码文件的修改操作,以得到经修改的源代码文件;以及通过对经修改的源代码文件进行预编译,以确定第二模块信息,第一模块信息包括关于经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。可选地,预编译包括基于硬件描述语言的宿主语言的编译。
在一些实施例中,第二确定单元420可以被配置为通过第一模块信息与第二模块信息之间的比较,以确定第一模块列表和第二模块列表。
举例而言,第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值。第二确定单元420可以被配置为:如果第一模块标识与第四模块标识相同,且第一模块哈希值与第四模块哈希值不相同,则将第四模块标识添加到第一模块列表;如果第二模块标识与第五模块标识相同,第二模块哈希值与第五模块哈希值相同,且第五模块标识对应的模块是第三模块标识对应的模块的父模块,则将第五模块标识添加到第一模块列表;以及如果第三模块标识与第六模块标识相同,第三模块哈希值与第六模块哈希值相同,且第六模块标识对应的模块是第三模块标识对应的模块的子模块,则将第六模块标识添加第二模块列表。第三模块标识对应的模块被父模块所调用,子模块被第三模块标识对应的模块所调用。
在一些实施例中,编译单元430可以被配置为:获取已编译模块的端口信息;至少基于 端口信息,构建待编译模块的增量编译环境;以及针对增量编译环境,进行增量编译。编译单元430可以被配置为:构建待编译模块的初始编译环境;以及通过将初始编译环境中的已编译模块替换为端口信息,以构建增量编译环境。示例性地,编译单元430可以被配置为在增量编译的过程中,通过端口信息读取已编译模块的目标代码文件,以避免对已编译模块进行增量编译。
本公开的实施例中对模块或单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时也可以有另外的划分方式,另外,在公开的实施例中的各功能单元可以集成在一个单元中,也可以是单独物理存在,也可以两个或两个以上单元集成为一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
图4中的装置400能够用于实现上述结合图1至图3中所述的各个过程,为了简洁,这里不再赘述。
图5示出了可以用来实施本公开的实施例的示例设备500的示意性框图。设备500可以被实现为计算设备,或者可以包括如图4所示的装置400。
如图所示,设备500包括中央处理单元(Central Processing Unit,CPU)501、只读存储器(Read-Only Memory,ROM)502以及随机存取存储器(Random Access Memory,RAM)503。CPU 501可以根据存储在RAM 502和/或RAM 503中的计算机程序指令或者从存储单元508加载到ROM 502和/或RAM 503中的计算机程序指令,来执行各种适当的动作和处理。在ROM 502和/或RAM 503中,还可存储设备500操作所需的各种程序和数据。CPU 501和ROM 502和/或RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
CPU 501可以是各种具有处理和计算能力的通用和/或专用处理组件。可以被实现为的一些示例包括但不限于图形处理单元(Graphics Processing Unit,GPU)、各种专用的人工智能(Artificial Intelligence,AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(Digital Signal Processor,DSP)、以及任何适当的处理器、控制器、微控制器等,相应地可以被称为计算单元。CPU 501执行上文所描述的各个方法和处理,例如过程100至300。例如,在一些实施例中,上文所描述的各个过程可被实现为计算机软件程序,其被有形地包含于计算机可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM 502和/或RAM 503和/或通信单元509而被载入和/或安装到设备500上。当计算机程序加载到ROM 502和/或RAM 503并由CPU 501执行时,可以执行上文描述的过程的一个或多个步骤。备选地,在其他实施例中,CPU 501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上文所描述的各个过程。
示例性地,图5中的装置500可以被实现为计算设备,或者可以被实现为计算设备中的芯片或芯片系统,本公开的实施例对此不限定。
本公开的实施例还提供了一种计算设备,包括存储器和处理器,存储器中存储有计算机指令或计算机程序。在存储器中的计算机指令或计算机程序被处理器执行时,能够使得计算 设备实现上文所描述的各个过程。
本公开的实施例还提供了一种芯片,该芯片可以包括输入接口、输出接口和处理电路。在本公开的实施例中,可以由输入接口和输出接口完成信令或数据的交互,由处理电路完成信令或数据信息的生成以及处理。
本公开的实施例还提供了一种芯片系统,包括处理器,用于支持计算设备以实现上述任一实施例中所涉及的功能。在一种可能的设计中,芯片系统还可以包括存储器,用于存储必要的程序指令和数据,当处理器运行该程序指令时,使得安装该芯片系统的设备实现上述任一实施例中所涉及的方法。示例性地,该芯片系统可以由一个或多个芯片构成,也可以包含芯片和其他分立器件。
本公开的实施例还提供了一种处理器,用于与存储器耦合,存储器存储有指令,当处理器运行所述指令时,使得处理器执行上述任一实施例中涉及的方法和功能。
本公开的实施例还提供了一种包含指令的计算机程序产品,其在计算机上运行时,使得计算机执行上述各实施例中任一实施例中涉及的方法和功能。
本公开的实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,当处理器运行所述指令时,使得处理器执行上述任一实施例中涉及的方法和功能。
通常,本公开的各种实施例可以以硬件或专用电路、软件、逻辑或其任何组合来实现。一些方面可以用硬件实现,而其他方面可以用固件或软件实现,其可以由控制器,微处理器或其他计算设备执行。虽然本公开的实施例的各个方面被示出并描述为框图,流程图或使用一些其他图示表示,但是应当理解,本文描述的框,装置、系统、技术或方法可以实现为,如非限制性示例,硬件、软件、固件、专用电路或逻辑、通用硬件或控制器或其他计算设备,或其某种组合。
本公开还提供有形地存储在非暂时性计算机可读存储介质上的至少一个计算机程序产品。该计算机程序产品包括计算机可执行指令,例如包括在程序模块中的指令,其在目标的真实或虚拟处理器上的设备中执行,以执行如上参考附图的过程/方法。通常,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、库、对象、类、组件、数据结构等。在各种实施例中,可以根据需要在程序模块之间组合或分割程序模块的功能。用于程序模块的机器可执行指令可以在本地或分布式设备内执行。在分布式设备中,程序模块可以位于本地和远程存储介质中。
用于实现本公开的方法的计算机程序代码可以用一种或多种编程语言编写。这些计算机程序代码可以提供给通用计算机、专用计算机或其他可编程的数据处理装置的处理器,使得程序代码在被计算机或其他可编程的数据处理装置执行的时候,引起在流程图和/或框图中规定的功能/操作被实施。程序代码可以完全在计算机上、部分在计算机上、作为独立的软件包、部分在计算机上且部分在远程计算机上或完全在远程计算机或服务器上执行。
在本公开的上下文中,计算机程序代码或者相关数据可以由任意适当载体承载,以使得设备、装置或者处理器能够执行上文描述的各种处理和操作。载体的示例包括信号、计算机可读介质、等等。信号的示例可以包括电、光、无线电、声音或其它形式的传播信号,诸如载波、红外信号等。
计算机可读介质可以是包含或存储用于或有关于指令执行系统、装置或设备的程序的任何有形介质。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可 读介质可以包括但不限于电子的、磁的、光学的、电磁的、红外的或半导体系统、装置或设备,或其任意合适的组合。计算机可读存储介质的更详细示例包括带有一根或多根导线的电气连接、便携式计算机磁盘、硬盘、随机存储存取器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或闪存)、光存储设备、磁存储设备,或其任意合适的组合。
此外,尽管在附图中以特定顺序描述了本公开的方法的操作,但是这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤组合为一个步骤执行,和/或将一个步骤分解为多个步骤执行。还应当注意,根据本公开的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。
以上已经描述了本公开的各实现,上述说明是示例性的,并非穷尽的,并且也不限于所公开的各实现。在不偏离所说明的各实现的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在很好地解释各实现的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其他普通技术人员能理解本文公开的各个实现方式。
Claims (20)
- 一种编译方法,包括:基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;基于所述模块信息,确定第一模块列表和第二模块列表,所述第一模块列表至少包括待编译模块的模块标识,所述第二模块列表至少包括已编译模块的模块标识,所述已编译模块是所述待编译模块的子模块;以及基于所述第一模块列表和所述第二模块列表,对所述待编译模块进行增量编译。
- 根据权利要求1所述的方法,其中所述模块信息包括第一模块信息和第二模块信息,并且其中确定所述模块信息包括:通过对所述源代码文件进行全量编译,以确定所述第一模块信息,所述第一模块信息包括关于所述源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对所述源代码文件的修改操作,以得到经修改的源代码文件;以及通过对所述经修改的源代码文件进行预编译,以确定所述第二模块信息,所述第一模块信息包括关于所述经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
- 根据权利要求2所述的方法,其中所述预编译包括基于所述硬件描述语言的宿主语言的编译。
- 根据权利要求2或3所述的方法,其中基于所述模块信息确定第一模块列表和第二模块列表包括:通过所述第一模块信息与所述第二模块信息之间的比较,以确定所述第一模块列表和所述第二模块列表。
- 根据权利要求4所述的方法,其中所述第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,所述第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值,并且其中通过所述第一模块信息与所述第二模块信息之间的比较以确定所述第一模块列表和所述第二模块列表包括:如果所述第一模块标识与所述第四模块标识相同,且所述第一模块哈希值与所述第四模块哈希值不相同,则将所述第四模块标识添加到所述第一模块列表;如果所述第二模块标识与所述第五模块标识相同,所述第二模块哈希值与所述第五模块哈希值相同,且所述第五模块标识对应的模块是所述第三模块标识对应的模块的父模块,则将所述第五模块标识添加到所述第一模块列表;以及如果所述第三模块标识与所述第六模块标识相同,所述第三模块哈希值与所述第六模块哈希值相同,且所述第六模块标识对应的模块是所述第三模块标识对应的模块的子模块,则将所述第六模块标识添加所述第二模块列表。
- 根据权利要求5所述的方法,其中所述第三模块标识对应的模块被所述父模块所调用,所述子模块被所述第三模块标识对应的模块所调用。
- 根据权利要求1至6中任一项所述的方法,其中对所述待编译模块进行增量编译包括:获取所述已编译模块的端口信息;至少基于所述端口信息,构建所述待编译模块的增量编译环境;以及针对所述增量编译环境,进行增量编译。
- 根据权利要求7所述的方法,其中至少基于所述端口信息构建所述待编译模块的增量编译环境包括:构建所述待编译模块的初始编译环境;以及通过将所述初始编译环境中的所述已编译模块替换为所述端口信息,以构建所述增量编译环境。
- 根据权利要求7或8所述的方法,其中在所述增量编译的过程中,通过所述端口信息读取所述已编译模块的目标代码文件,以避免对所述已编译模块进行增量编译。
- 一种用于编译的装置,包括:第一确定单元,被配置为基于用于芯片设计的硬件描述语言的源代码文件,确定模块信息;第二确定单元,被配置为基于所述模块信息,确定第一模块列表和第二模块列表,所述第一模块列表至少包括待编译模块的模块标识,所述第二模块列表至少包括已编译模块的模块标识,所述已编译模块是所述待编译模块的子模块;以及编译单元,被配置为基于所述第一模块列表和所述第二模块列表,对所述待编译模块进行增量编译。
- 根据权利要求10所述的装置,其中所述模块信息包括第一模块信息和第二模块信息,并且其中所述第一确定单元被配置为:通过对所述源代码文件进行全量编译,以确定所述第一模块信息,所述第一模块信息包括关于所述源代码文件中的至少一个第一模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、模块端口信息、或模块的目标代码文件路径信息;获取用于针对所述源代码文件的修改操作,以得到经修改的源代码文件;以及通过对所述经修改的源代码文件进行预编译,以确定所述第二模块信息,所述第一模块信息包括关于所述经修改的源代码文件中的至少一个第二模块的以下至少一项:模块标识、模块哈希值、模块的子模块标识、模块的父模块标识、模块层级、或模块端口信息。
- 根据权利要求11所述的装置,其中所述预编译包括基于所述硬件描述语言的宿主语言的编译。
- 根据权利要求11或12所述的装置,其中所述第二确定单元被配置为:通过所述第一模块信息与所述第二模块信息之间的比较,以确定所述第一模块列表和所述第二模块列表。
- 根据权利要求13所述的装置,其中所述第一模块信息包括第一模块标识和对应的第一模块哈希值、第二模块标识和对应的第二模块哈希值、以及第三模块标识和对应的第三模块哈希值,所述第二模块信息包括第四模块标识和对应的第四模块哈希值、第五模块标识和对应的第五模块哈希值、以及第六模块标识和对应的第六模块哈希值,并且其中所述第二确定单元被配置为:如果所述第一模块标识与所述第四模块标识相同,且所述第一模块哈希值与所述第四模 块哈希值不相同,则将所述第四模块标识添加到所述第一模块列表;如果所述第二模块标识与所述第五模块标识相同,所述第二模块哈希值与所述第五模块哈希值相同,且所述第五模块标识对应的模块是所述第三模块标识对应的模块的父模块,则将所述第五模块标识添加到所述第一模块列表;以及如果所述第三模块标识与所述第六模块标识相同,所述第三模块哈希值与所述第六模块哈希值相同,且所述第六模块标识对应的模块是所述第三模块标识对应的模块的子模块,则将所述第六模块标识添加所述第二模块列表。
- 根据权利要求14所述的装置,其中所述第三模块标识对应的模块被所述父模块所调用,所述子模块被所述第三模块标识对应的模块所调用。
- 根据权利要求10至15中任一项所述的装置,其中所述编译单元被配置为:获取所述已编译模块的端口信息;至少基于所述端口信息,构建所述待编译模块的增量编译环境;以及针对所述增量编译环境,进行增量编译。
- 根据权利要求16所述的装置,其中所述编译单元被配置为:构建所述待编译模块的初始编译环境;以及通过将所述初始编译环境中的所述已编译模块替换为所述端口信息,以构建所述增量编译环境。
- 根据权利要求16或17所述的装置,其中所述编译单元被配置为:在增量编译的过程中,通过所述端口信息读取所述已编译模块的目标代码文件,以避免对所述已编译模块进行增量编译。
- 一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令被处理器执行时实现根据权利要求1至9中任一项所述的方法。
- 一种计算机程序产品,其特征在于,所述计算机程序产品上包含计算机可执行指令,所述计算机可执行指令在被执行时实现根据权利要求1至9中任一项所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/142658 WO2023123111A1 (zh) | 2021-12-29 | 2021-12-29 | 编译方法以及用于编译的装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118103815A true CN118103815A (zh) | 2024-05-28 |
Family
ID=86996921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180103481.7A Pending CN118103815A (zh) | 2021-12-29 | 2021-12-29 | 编译方法以及用于编译的装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN118103815A (zh) |
WO (1) | WO2023123111A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117313651B (zh) * | 2023-11-30 | 2024-02-09 | 沐曦集成电路(上海)有限公司 | 芯片功能特征设置方法、电子设备和介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5273057B2 (ja) * | 2010-01-06 | 2013-08-28 | 富士通株式会社 | モジュール更新検出プログラム、モジュール更新検出方法及びモジュール更新検出装置 |
US9442707B2 (en) * | 2014-06-25 | 2016-09-13 | Microsoft Technology Licensing, Llc | Incremental whole program compilation of code |
US10915305B2 (en) * | 2019-03-28 | 2021-02-09 | International Business Machines Corporation | Reducing compilation time for computer software |
CN112131806A (zh) * | 2020-11-25 | 2020-12-25 | 芯华章科技股份有限公司 | 验证设计的编译方法、电子设备及存储介质 |
CN112783508B (zh) * | 2021-02-01 | 2022-05-24 | 北京百度网讯科技有限公司 | 文件的编译方法、装置、设备以及存储介质 |
CN113536717B (zh) * | 2021-07-14 | 2022-05-24 | 北京华大九天科技股份有限公司 | 一种基于增量编译的电路仿真方法 |
-
2021
- 2021-12-29 WO PCT/CN2021/142658 patent/WO2023123111A1/zh active Application Filing
- 2021-12-29 CN CN202180103481.7A patent/CN118103815A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2023123111A1 (zh) | 2023-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20240168735A1 (en) | System and method for compiling high-level language code into a script executable on a blockchain platform | |
CN110908640B (zh) | 实现业务功能的方法和脚本引擎 | |
US8954939B2 (en) | Extending a development environment | |
Ahmad et al. | Automatically leveraging mapreduce frameworks for data-intensive applications | |
US7703075B2 (en) | Programmable annotation inference | |
US11068247B2 (en) | Vectorizing conditional min-max sequence reduction loops | |
US8364696B2 (en) | Efficient incremental parsing of context sensitive programming languages | |
Gurfinkel et al. | A context-sensitive memory model for verification of C/C++ programs | |
US9311077B2 (en) | Identification of code changes using language syntax and changeset data | |
US10705814B2 (en) | Systems and/or methods for generating reassemblable disassemblies of binaries using declarative logic | |
Ahmad et al. | Leveraging parallel data processing frameworks with verified lifting | |
Tekchandani et al. | Semantic code clone detection for Internet of Things applications using reaching definition and liveness analysis | |
CN115951890A (zh) | 一种不同前端框架间的代码转换方法及系统及装置 | |
Kuramitsu | Nez: practical open grammar language | |
Chen et al. | Hopper: Interpretative fuzzing for libraries | |
CN108563561B (zh) | 一种程序隐性约束提取方法及系统 | |
CN118103815A (zh) | 编译方法以及用于编译的装置 | |
Bak et al. | A reference interpreter for the graph programming language GP 2 | |
CN116228515B (zh) | 硬件加速系统、方法及相关装置 | |
Sui et al. | Loop-oriented pointer analysis for automatic simd vectorization | |
CN111796832B (zh) | 热补丁文件生成方法、装置、设备及存储介质 | |
Chirila et al. | Introduction to modern Fortran for the Earth system sciences | |
CN107451050A (zh) | 函数获取方法和装置、服务器 | |
Holt et al. | The Turing language report | |
US8621447B1 (en) | Systems and methods for dynamic struct variable creation including inline declaration with dynamic keys |
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 |