CN113031961B - 编译方法、编译装置、电子设备、存储介质和程序产品 - Google Patents

编译方法、编译装置、电子设备、存储介质和程序产品 Download PDF

Info

Publication number
CN113031961B
CN113031961B CN202110309279.1A CN202110309279A CN113031961B CN 113031961 B CN113031961 B CN 113031961B CN 202110309279 A CN202110309279 A CN 202110309279A CN 113031961 B CN113031961 B CN 113031961B
Authority
CN
China
Prior art keywords
source files
subset
source
files
rule
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
Application number
CN202110309279.1A
Other languages
English (en)
Other versions
CN113031961A (zh
Inventor
武桓州
王欢
周威
骆涛
蓝翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Baidu Netcom Science and Technology Co Ltd
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN202110309279.1A priority Critical patent/CN113031961B/zh
Publication of CN113031961A publication Critical patent/CN113031961A/zh
Priority to EP21198242.6A priority patent/EP4064037A1/en
Priority to KR1020210126009A priority patent/KR20210124110A/ko
Priority to JP2021155593A priority patent/JP7393404B2/ja
Priority to US17/552,151 priority patent/US20220107791A1/en
Application granted granted Critical
Publication of CN113031961B publication Critical patent/CN113031961B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • G06F8/4435Detection or removal of dead or redundant code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/49Partial evaluation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding

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

编译方法、编译装置、电子设备、存储介质和程序产品
技术领域
本公开涉及计算机技术,并且更具体地,涉及编译方法、编译装置、电子设备、计算机可读存储介质和计算机程序产品,可以用于源文件编译领域和深度学习领域等领域中。
背景技术
C++语言是一种静态类型语言,C++语言的例如格式为.CC的源文件需要通过编译生成二进制文件才能运行或者被使用。当对C++语言的源文件进行编译时,每个源文件被视为一个编译单元而由编译器进行编译,针对每个编译单元生成一个目标文件,最后由链接器链接为二进制产物。在编译过程中,主要耗时在于由编译器对编译单元进行编译来得到目标文件的过程。一般来说,编译单元的数量与项目中源文件的数量一致。在大型项目中,编译单元往往可以达到上千个甚至更多。针对每个编译单元都需要启动编译器、读取磁盘上的源文件及依赖文件并且将通过编译得到的目标文件写入磁盘。在最终链接目标文件的时候,链接器也需要再从磁盘读取针对每个编译单元生成的目标文件。因此,编译单元过多往往使得启动编译器以及读写磁盘的耗时累加增多,从而导致编译中的冗余耗时。类似地,针对CUDA的源文件的编译也存在前述问题。
然而,传统的用于源文件编译的技术要么需要针对每个源文件分别进行编译,要么仅能非常粗糙地将部分源文件合并而后进行编译,从而导致针对项目所需的编译次数较大,不仅无法适用于源文件较多的大型项目,而且当源文件增加或减少时也会出现异常,因此难以满足用户的需求。
发明内容
根据本公开的实施例,提供了一种编译方法、编译装置、电子设备、计算机可读存储介质和计算机程序产品。
在本公开的第一方面中,提供了一种编译方法,包括:获取源文件集合,源文件集合包括相同类型的源文件;基于与源文件集合相关联的预定组合规则,将源文件集合中的多个源文件组合成至少一个源文件子集;以及对每个源文件子集作为整体进行编译。
在本公开的第二方面中,提供了一种编译装置,包括:获取模块,被配置为获取源文件集合,源文件集合包括相同类型的源文件;第一组合模块,被配置为基于与源文件集合相关联的预定组合规则,将源文件集合中的多个源文件组合成至少一个源文件子集;以及第一编译模块,被配置为对每个源文件子集作为整体进行编译。
在本公开的第三方面中,提供了一种电子设备,包括至少一个处理器;以及与至少一个处理器通信连接的存储器;其中存储器存储有可被至少一个处理器执行的指令,该指令被至少一个处理器执行,以使至少一个处理器能够实现根据本公开的第一方面的方法。
在本公开的第四方面中,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,计算机指令用于使计算机实现根据本公开的第一方面的方法。
在本公开的第五方面中,提供了一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时,执行根据本公开的第一方面的方法。
利用根据本申请的技术,提供了一种编译方法,利用该方法的技术方案,可以按照预定组合规则对包括多个源文件的项目中的源文件进行组合,而后进行编译,从而可以通过减少编译次数来有效提高编译效率,降低编译耗时。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中在本公开示例性实施例中,相同的参考标号通常代表相同部件。应当理解,附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1示出了可以在其中实现本公开的某些实施例中的编译方法的编译环境100的示意性框图;
图2示出了根据本公开实施例的编译方法200的流程图;
图3示出了根据本公开实施例的编译方法300的流程图;
图4示出了根据本公开的实施例的编译装置400的示意性框图;以及
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如以上在背景技术中所描述的,传统的用于源文件编译的技术要么需要针对每个源文件分别进行编译,要么仅能非常粗糙地将部分源文件合并而后进行编译,从而导致针对项目所需的编译次数较大,不仅无法适用于源文件较多的大型项目,而且当源文件增加或减少时也会出现异常,因此难以满足用户的需求。
例如,在传统技术中,能够支持将源文件组合的工具仅有CMAKE。在使用CMAKE时,通过在目标(target)中将UNITY_BUILD属性设置为ON来实现。然而,采取CMAKE的方式在针对大型项目时并不能取得较好的效果,其主要会受限于源文件之间存在较多符号重复定义问题,无法处理将源文件组合时可能引发的冲突,并且当源文件被增加或者删除时会出现异常情况,因此也并未广泛得到使用。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个问题,本公开的实施例提出了一种编译方法,利用根据本公开的实施方式的技术方案,可以按照预定组合规则对包括多个源文件的项目中的源文件进行组合,而后进行编译,从而可以通过减少编译次数来有效提高编译效率,降低编译耗时,因而能够提升用户体验。
图1示出了可以在其中实现本公开的某些实施例中的编译方法的编译环境100的示意性框图。根据本公开的一个或多个实施例,编译环境100可以是云环境。如图1中所示,编译环境100包括计算设备110。在编译环境100中,例如可以包括由希望被编译的源文件组成的源文件集合、编译源文件集合中的源文件所需要的依赖文件、以及与源文件集合相关联的预定组合规则的输入数据120作为计算设备110的输入被提供给计算设备110。计算设备110可以基于预定组合规则来将源文件集合中所包括的源文件组合成一个或多个源文件子集,并且而后利用其所包括的编译器(未示出),使用依赖文件来对组合后的源文件进行编译。在编译过程中,针对每个源文件子集,计算设备110将其作为整体进行编译。换言之,针对每个源文件子集,无论其包括多少源文件,计算设备110只需要启动编译器一次。
应当理解,编译环境100仅仅是示例性而不是限制性的,并且其是可扩展的,其中可以包括更多的计算设备110,并且可以向计算设备110提供更多的输入数据120,从而使得可以满足更多用户同时利用更多的计算设备110,甚至利用更多的输入数据120来同时或者非同时地对源文件集合中的源文件进行编译的需求。
在图1所示的编译环境100中,输入数据120向计算设备110的输入可以通过网络来进行。
图2示出了根据本公开的实施例的编译方法200的流程图。具体而言,编译方法200可以由图1中所示的编译环境100中的计算设备110来执行。应当理解的是,编译方法200还可以包括未示出的附加操作和/或可以省略所示出的操作,本公开的范围在此方面不受限制。
在框202,计算设备110获取源文件集合。根据本公开的一个或多个实施例,计算设备110通过接收输入数据120来获取源文件集合,并且源文件集合包括相同类型的源文件。
例如,源文件的类型可以包括用于C++语言的源文件和针对CUDA的源文件。在一个项目中,可以同时包括用于C++语言的源文件和针对CUDA的源文件,但由于不同类型的源文件需要使用不同的编译器,因而无法将不同类型的源文件组合而仅使用一种编译器进行翻译。因此,源文件集合需要包括相同类型的源文件。当源文件集合包括不同类型的源文件时,可以按照源文件的类型来将源文件集合分为多个子集,每个子集中均包括相同类型的源文件。
在框204,计算设备110基于与源文件集合相关联的预定组合规则,将源文件集合中的多个源文件组合成至少一个源文件子集。根据本公开的一个或多个实施例,预定组合规则可以被认为是一种编译配置,在编译之前,计算设备110根据编译配置来使用源文件集合中的源文件生成可以包括多个源文件的编译单元,并且以编译单元为单位、使用编译器来对每个编译单元进行编译。
根据本公开的一个或多个实施例,计算设备110也可以执行构建编译系统配置的操作。例如,C++项目可以在例如Linux、Windows和MacOS的不同平台上使用例如MAKE、MSVC和NINJA的不同的构建系统来进行编译。为了快速的在跨平台上正常编译,通常可以选择使用跨平台的编译工具,例如CMAKE),这样就可以用简单的语句来描述所有平台的编译过程。然而,可以直接用来作为编译配置的是各构建系统各自使用的配置,而CMAKE使用的CMakeLists.txt并不能直接用来编译。此时,计算设备110可以执行从CMAKE的配置CMakeLists.txt到各平台对应构建系统的配置的这一设计构建编译系统配置的操作。
根据本公开的一些实施例,计算设备110可以使用语法层面通用的include机制来将源文件集合中的源文件组合成源文件子集。
根据本公开的一些实施例,源文件集合中的所有源文件都可以被组合到不同的源文件子集中。在这种情况下,在基于预定组合规则将源文件集合中的源文件组合之后,源文件将不会单独存在,而是都被组合到源文件子集中。
根据本公开的另一些实施例,源文件集合中的例如80%-95%的源文件可以被组合到不同的源文件子集中。在这种情况下,在基于预定组合规则将源文件集合中的源文件组合之后,会存在一些源文件没有被组合到源文件子集中。
根据本公开的一个或多个实施例,预定组合规则可以基于源文件集合中的源文件的属性中的一项或多项而被生成,这些属性例如可以包括:源文件的编译时间;源文件的大小;源文件经过编译之后的大小;以及源文件在组合编译时的冲突情况。
例如,如果对某些源文件进行编译所需的时间较少,例如仅需要3-5秒,则可以将例如30-50个的大量此类源文件组合到源文件子集中。反之,如果对某个源文件进行编译所需的时间较长,例如需要1-2分钟,则可以不将这个源文件与其他文件组合到源文件子集中。
又例如,如果某些源文件的大小较大或者经过编译之后得到的目标文件的大小较大,则可以不将这些源文件与其他文件组合到源文件子集中,或者仅将这些源文件中的少量源文件组合到源文件子集中。
此外,如果任何两个或者更多个源文件在被组合到源文件子集中之后,在对该源文件子集进行编译时会由于冲突而导致无法正常编译,则应当避免将这些源文件组合到一个源文件子集中。根据本公开的一个或多个实施例,可以在基于预定组合规则将源文件组合成源文件子集后,对源文件子集进行实际或者模拟的编译,如果由于冲突而导致无法正常编译,则可以对预定组合规则进行修改,以避免产生冲突。
根据本公开的一个或多个实施例,将源文件集合中的多个源文件组合成至少一个源文件子集可以包括基于由预定组合规则指示的至少一个规则指定源文件子集将多个源文件组合成至少一个源文件子集,其中每个源文件子集是对应的规则指定源文件子集的子集。例如,预定组合规则可以指示将包括源文件A-Z共26个源文件中的源文件A-G共7个源文件组合成一个源文件子集。此时,如果由于对源文件集合进行了调整而导致源文件C被删除,则仍然可以将源文件A、B和D-G组合成一个源文件子集,因为将所允许组合的多个源文件中的部分源文件去除、而后再进行组合通常不会产生冲突。
在大型项目当中,源文件的增删迭代频率较快,而且每个开发人员各自负责不同的源文件,但源文件的组合规则往往仅有一处,很容易造成预定组合规则中的源文件已经重命名或者删除,从而使得预定组合规则失去效果。因此,根据本公开的一个或多个实施例,可以使用两个字典集合来分别存储源文件集合,这两个集合分别为:规则指定源文件集合,其由指定的文件组合规则生成;以及规则命中源文件集合,其根据实际情况命中规则的源文件,属于规则指定源文件集合的子集。通过两个源文件集合,源文件组合时可以有效处理源文件增删的情况,从而避免经常性的规则改动。
根据本公开的一个或多个实施例,预定组合规则中例如可以包括数十个规则,因此基于这一预定组合规则,源文件集合中的源文件可以被组合成数十个源文件子集。此外,每个源文件子集中例如可以包括几个或者几十个源文件。应当理解,预定组合规则中所包括的规则的数目以及根据预定组合规则所确定的源文件子集中的源文件的数目仅用于举例,而不会对本公开的保护范围进行限制。
在框206,计算设备110对每个源文件子集作为整体进行编译。根据本公开的一个或多个实施例,如前所述,在计算设备110将源文件集合中的多个源文件组合成至少一个源文件子集之后,每个源文件子集作为一个编译单元而被编译。换言之,针对每个源文件子集,仅需要启动编译器一次。因此,与针对源文件集合中的每个源文件均启动编译器一次相比,利用根据本公开的实施例的技术方案,可以显著减少启动编译器的次数,并且因而可以减少进行编译的次数。
图3示出了根据本公开的实施例的编译方法300的流程图。具体而言,编译方法300也可以由图1中所示的编译环境100中的计算设备110来执行。应当理解的是,编译方法300还可以包括未示出的附加操作和/或可以省略所示出的操作,本公开的范围在此方面不受限制。
在框302,计算设备110获取源文件集合。如前所述,根据本公开的一个或多个实施例,计算设备110通过接收输入数据120来获取源文件集合,并且源文件集合包括相同类型的源文件。框302所涉及的步骤的具体内容与框202中所涉及的步骤的具体内容相同,在此不再赘述。
在框304,计算设备110基于源文件集合的类型,确定与源文件集合相关联的预定组合规则。根据本公开的一个或多个实施例,在一个项目中,例如可以同时包括用于C++语言的源文件和针对CUDA的源文件,并且针对不同类型的源文件,由于使用的编译器不同,因此组合规则也不同。此时,计算设备110可以基于源文件集合中所包括的源文件的类型来确定是使用针对用于C++语言的源文件的预定组合规则,还是使用用于针对CUDA的源文件的预定组合规则。应当理解,框304所述涉及的步骤为可选步骤,当在项目中仅包括一个类型的源文件时,无需基于源文件集合的类型来确定与源文件集合相关联的预定组合规则,此时在方法300中可以不包括框304。
在框306,计算设备110基于预定组合规则来生成包括空文件的至少一个规则指定源文件子集,作为包括空文件的至少一个源文件子集。根据本公开的一个或多个实施例,在计算设备110实际地基于与源文件集合相关联的预定组合规则将源文件集合中的多个源文件组合成至少一个源文件子集之前,计算设备110可以预先基于预定组合规则来生成包括空文件的至少一个规则指定源文件子集。由于生成的这个源文件子集是不针对实际源文件、而仅基于预定组合规则所指定的内容而生成的,所以在本申请中被称为规则指定源文件子集。
根据本公开的一个或多个实施例,预先生成规则指定源文件子集的目的在于可以在源文件子集中的源文件和所组合成的至少一个源文件子集会发生变化时简化处理。由于已经预先生成了规则指定源文件子集,因此在后续将源文件子集中的源文件组合成源文件子集之后,可以直接比较这两个子集的内容是否相同,并且后续每次都可以同样地将组合成的源文件子集与之前的源文件子集进行比较,来确定子集中的内容是否发生了变化。应当理解,框306所述涉及的步骤为可选步骤,其主要用于简化处理,因此在方法300中也可以不包括框306。
在框308,计算设备110基于与源文件集合相关联的预定组合规则,将源文件集合中的多个源文件组合成至少一个源文件子集。框308所涉及的步骤的具体内容与框204中所涉及的步骤的具体内容相同,在此不再赘述。
在框310,计算设备110确定源文件子集所包括的内容是否不同于已被组合成的现有源文件子集。当计算设备110确定源文件子集所包括的内容不同于已被组合成的现有源文件子集,方法300前进到框312;当计算设备110确定源文件子集所包括的内容与已被组合成的某个现有源文件子集时,可以无需进行操作。
根据本公开的一个或多个实施例,当计算设备110将源文件组合成源文件子集时,可以按照预定规则为组合成的源文件子集确定名称。计算设备110可以按照源文件的路径来确定源文件子集的名称。例如,如果被组合成源文件子集的多个源文件的路径都是A-B-C,则可以通过路径加上例如数字的后缀的形式来为这一源文件子集确定名称,例如,A-B-C-1或者A-B-C-2。由于将被用于组合的源文件是由预定组合规则指示的,因此可以认为源文件子集的名称是基于预定组合规则而被生成。
根据本公开的一个或多个实施例,计算设备110可以通过确定源文件子集的名称不同于已被组合成的现有源文件子集的名称来确定源文件子集所包括的内容不同于已被组合成的现有源文件子集,因为当源文件子集的名称与已被组合成的所有现有源文件子集的名称均不相同时,该源文件子集的内容与所有现有源文件子集的内容均不会相同。如果计算设备110确定源文件子集的名称与已被组合成的某个现有源文件子集的名称相同,则计算设备110可以进一步确定这两个子集的内容是否相同。例如,当项目中涉及由于涉及增量构建而涉及多次编译时,每次生成的源文件子集即使名称相同,时间戳也会改变,因此可以确定时间戳不同但名称相同的源文件子集的内容是否相同。如果内容相同,则不必进行操作;如果内容不同,则需要对时间戳较新的源文件子集进行编译。
具体而言,在大多数构建系统中,为了开发便利,往往提供了增量编译的策略,即在上一次编译基础上,仅编译后续出现改动的源文件。判断是否触发增量编译的通用方法是判断文件的时间戳,当时间戳晚于上次编译时触发。单纯的按照既定规则组合文件,每次会发生时间戳的变化,从而造成不必要的增量编译耗时。因此,根据本公开的一个或多个实施例,在初始化指定规则期间,可以先对组合后的源文件子集进行存在性探查,如果该源文件子集不存在则创建一份空文件作为该源文件子集,否则不做任何处理。在所有源文件子集都被生成之后,可以比较组合后的源文件子集与实际源文件子集中的内容,如果内容不一致则覆盖写入,否则不做任何处理。从而避免造成冗余增量编译的问题。
在框312,计算设备110删除与源文件子集具有相同名称的已被组合成的现有源文件子集。根据本公开的一个或多个实施例,当计算设备110确定源文件子集所包括的内容不同于已被组合成的现有源文件子集时,后续的编译应当针对新组合成的源文件子集来进行。此时,为了避免导致冲突,当源文件子集与某个已被组合成的现有源文件子集具有相同名称时,计算设备110可以删除与源文件子集具有相同名称的已被组合成的现有源文件子集。应当理解,框312所述涉及的步骤为可选步骤,当源文件子集与任何已被组合成的现有源文件子集都不具有相同名称时,无需删除任何已被组合成的现有源文件子集,此时在方法300中可以不包括框312。
在框314,计算设备110对每个源文件子集作为整体进行编译。根据本公开的一个或多个实施例,框314是指计算设备110在将源文件集合中的源文件组合成源文件子集,并且可选地删除了每个与组合成的源文件子集具有相同名称的已被组合成的现有源文件子集后,对保留的每个源文件子集作为整体进行编译。框314所涉及的步骤的具体内容与框206中所涉及的步骤的具体内容相同,在此不再赘述。
在框316,计算设备110对源文件集合中的、未被包括在至少一个源文件子集中的源文件进行编译。根据本公开的一个或多个实施例,在基于预定组合规则将源文件集合中的源文件组合之后,可能存在一些源文件没有被组合到源文件子集中。此时,同样需要对这些源文件进行编译。
根据本公开的一个或多个实施例,对组合后的多个源文件子集以及未被包括在至少一个源文件子集中的源文件进行编译可以按照任何顺序或者同步地进行。
以上参考图1至图3描述了与可以在其中实现本公开的某些实施例中的编译方法的编译环境100、根据本公开实施例的编译方法200以及根据本公开实施例的编译方法300的相关内容。应当理解,上述描述是为了更好地展示本公开中所记载的内容,而不是以任何方式进行限制。
应当理解,本公开的上述各个附图中所采用的各种元件的数目和物理量的大小仅为举例,而并不是对本公开的保护范围的限制。上述数目和大小可以根据需要而被任意设置,而不会对本公开的实施方式的正常实施产生影响。
上文已经参见图1至图3描述了根据本公开的实施方式的编译方法200和编译方法300的细节。在下文中,将参见图4描述编译装置中的各个模块。
图4是根据本公开实施例的编译装置400的示意性框图。如图4所示,编译装置400包括:获取模块410,被配置为获取源文件集合,源文件集合包括相同类型的源文件;第一组合模块420,被配置为基于与源文件集合相关联的预定组合规则,将源文件集合中的多个源文件组合成至少一个源文件子集;以及第一编译模块430,被配置为对每个源文件子集作为整体进行编译。
在一个或多个实施例中,编译装置400还包括:第一确定模块(未示出),被配置为基于源文件集合的类型,确定与源文件集合相关联的预定组合规则。
在一个或多个实施例中,其中预定组合规则基于以下至少一项而被生成:源文件的编译时间;源文件的大小;源文件经过编译之后的大小;以及源文件在组合编译时的冲突情况。
在一个或多个实施例中,其中第一组合模块420包括:第二组合模块(未示出),被配置为基于由预定组合规则指示的至少一个规则指定源文件子集将多个源文件组合成至少一个源文件子集,其中每个源文件子集是对应的规则指定源文件子集的子集。
在一个或多个实施例中,编译装置400还包括:生成模块(未示出),被配置为基于预定组合规则来生成包括空文件的至少一个规则指定源文件子集,作为包括空文件的至少一个源文件子集。
在一个或多个实施例中,其中第一编译模块430包括:第二编译模块(未示出),被配置为基于确定源文件子集所包括的内容不同于已被组合成的现有源文件子集,对源文件子集作为整体进行编译。
在一个或多个实施例中,其中第二编译模块包括:第二确定模块(未示出),被配置为确定源文件子集的名称不同于已被组合成的现有源文件子集的名称。
在一个或多个实施例中,其中源文件子集的名称基于预定组合规则而被生成。
在一个或多个实施例中,编译装置400还包括:删除模块(未示出),被配置为删除与源文件子集具有相同名称的已被组合成的现有源文件子集。
在一个或多个实施例中,编译装置400还包括:第三编译模块(未示出),被配置为对源文件集合中的、未被包括在至少一个源文件子集中的源文件进行编译。
通过以上参考图1至图4的描述,根据本公开的实施方式的技术方案相对于传统方案具有诸多优点。例如,利用根据本公开的实施例的技术方案,可以按照预定组合规则对包括多个源文件的项目中的源文件进行组合,而后进行编译,从而可以通过减少编译次数来有效提高编译效率,降低编译耗时,因而能够提升用户体验。经过试验,当根据本公开的实施方式的技术方案被应用于深度学习框架时,可以使针对源文件的编译时间降低30%以上,因此能够明显提高编译效率。此外,根据本公开的实施方式的技术方案可以适用于例如Linux、Windows和MacOS的多种平台,并且对例如MAKE、Ninja和MSVC的多种构建系统均可适用,从而具有高通用性。
根据本公开的实施例,本公开还提供了一种电子设备、一种计算机可读存储介质和一种计算机程序产品。
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。例如,如图1所示的计算设备110和如图4所示的编译装置400可以由电子设备500来实施。电子设备500旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图5所示,设备500包括计算单元501,其可以根据存储在只读存储器(ROM)502中的计算机程序或者从存储单元508加载到随机访问存储器(RAM)503中的计算机程序,来执行各种适当的动作和处理。在RAM 503中,还可存储设备500操作所需的各种程序和数据。计算单元501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
设备500中的多个部件连接至I/O接口505,包括:输入单元506,例如键盘、鼠标等;输出单元507,例如各种类型的显示器、扬声器等;存储单元508,例如磁盘、光盘等;以及通信单元509,例如网卡、调制解调器、无线通信收发机等。通信单元509允许设备500通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元501可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元501的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元501执行上文所描述的各个方法和处理,例如方法200和300。例如,在一些实施例中,方法200和300可以被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元508。在一些实施例中,计算机程序的部分或者全部可以经由ROM502和/或通信单元509而被载入和/或安装到设备500上。当计算机程序加载到RAM 503并由计算单元501执行时,可以执行上文描述的方法200和300的一个或多个步骤。备选地,在其他实施例中,计算单元501可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行方法200和300。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。

Claims (18)

1.一种编译方法,包括:
获取源文件集合,所述源文件集合包括相同类型的源文件;
基于所述源文件集合的所述类型,确定多个预定组合规则中的、与所述源文件集合相关联的预定组合规则,所述预定组合规则指示如何对源文件进行组合;
基于所述预定组合规则,将所述源文件集合中的多个源文件组合成至少一个源文件子集,包括:
基于不针对实际源文件、由所述预定组合规则指示的至少一个规则指定源文件子集将所述多个源文件组合成所述至少一个源文件子集,其中每个源文件子集是对应的规则指定源文件子集的子集,并且其中如果所述至少一个规则指定源文件子集中的一个规则指定源文件子集指示了所述源文件集合中不包括的源文件,则允许将所述一个规则指定源文件子集指示的、被包括在所述源文件集合中的源文件组合成与所述一个规则指定源文件子集对应的源文件子集;
使用规则命中源文件字典集合存储所述至少一个源文件子集;
对每个源文件子集作为整体进行编译;以及
如果由于冲突而导致无法正常进行编译,则对所述预定组合规则进行修改。
2.根据权利要求1所述的方法,其中所述预定组合规则基于以下至少一项而被生成:
所述源文件的编译时间;
所述源文件的大小;
所述源文件经过编译之后的大小;以及
所述源文件在组合编译时的冲突情况。
3.根据权利要求1所述的方法,还包括:
基于所述预定组合规则来生成包括空文件的至少一个规则指定源文件子集,作为包括空文件的所述至少一个源文件子集。
4.根据权利要求1所述的方法,其中对每个源文件子集作为整体进行编译包括:
基于确定源文件子集所包括的内容不同于已被组合成的现有源文件子集,对所述源文件子集作为整体进行编译。
5.根据权利要求4所述的方法,其中确定源文件子集所包括的内容不同于已被组合成的现有源文件子集包括:
确定所述源文件子集的名称不同于已被组合成的现有源文件子集的名称。
6.根据权利要求5所述的方法,其中所述源文件子集的所述名称基于所述预定组合规则而被生成。
7.根据权利要求4所述的方法,还包括:
删除与所述源文件子集具有相同名称的已被组合成的现有源文件子集。
8.根据权利要求1所述的方法,还包括:
对所述源文件集合中的、未被包括在所述至少一个源文件子集中的源文件进行编译。
9.一种编译装置,包括:
获取模块,被配置为获取源文件集合,所述源文件集合包括相同类型的源文件;
第一确定模块,被配置为基于所述源文件集合的所述类型,确定多个预定组合规则中的、与所述源文件集合相关联的预定组合规则,所述预定组合规则指示如何对源文件进行组合;
第一组合模块,被配置为基于所述预定组合规则,将所述源文件集合中的多个源文件组合成至少一个源文件子集;包括
第二组合模块,被配置为基于不针对实际源文件、由所述预定组合规则指示的至少一个规则指定源文件子集将所述多个源文件组合成所述至少一个源文件子集,其中每个源文件子集是对应的规则指定源文件子集的子集,并且其中如果所述至少一个规则指定源文件子集中的一个规则指定源文件子集指示了所述源文件集合中不包括的源文件,则允许将所述一个规则指定源文件子集指示的、被包括在所述源文件集合中的源文件组合成与所述一个规则指定源文件子集对应的源文件子集;
存储模块,被配置为使用规则命中源文件字典集合存储所述至少一个源文件子集;
第一编译模块,被配置为对每个源文件子集作为整体进行编译;以及
规则修改模块,被配置为如果由于冲突而导致无法正常进行编译,则对所述预定组合规则进行修改。
10.根据权利要求9所述的装置,其中所述预定组合规则基于以下至少一项而被生成:
所述源文件的编译时间;
所述源文件的大小;
所述源文件经过编译之后的大小;以及
所述源文件在组合编译时的冲突情况。
11.根据权利要求9所述的装置,还包括:
生成模块,被配置为基于所述预定组合规则来生成包括空文件的至少一个规则指定源文件子集,作为包括空文件的所述至少一个源文件子集。
12.根据权利要求9所述的装置,其中所述第一编译模块包括:
第二编译模块,被配置为基于确定源文件子集所包括的内容不同于已被组合成的现有源文件子集,对所述源文件子集作为整体进行编译。
13.根据权利要求12所述的装置,其中所述第二编译模块包括:
第二确定模块,被配置为确定所述源文件子集的名称不同于已被组合成的现有源文件子集的名称。
14.根据权利要求13所述的装置,其中所述源文件子集的所述名称基于所述预定组合规则而被生成。
15.根据权利要求12所述的装置,还包括:
删除模块,被配置为删除与所述源文件子集具有相同名称的已被组合成的现有源文件子集。
16.根据权利要求9所述的装置,还包括:
第三编译模块,被配置为对所述源文件集合中的、未被包括在所述至少一个源文件子集中的源文件进行编译。
17.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
18.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-8中任一项所述的方法。
CN202110309279.1A 2021-03-23 2021-03-23 编译方法、编译装置、电子设备、存储介质和程序产品 Active CN113031961B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN202110309279.1A CN113031961B (zh) 2021-03-23 2021-03-23 编译方法、编译装置、电子设备、存储介质和程序产品
EP21198242.6A EP4064037A1 (en) 2021-03-23 2021-09-22 Method for compilation, apparatus for compilation, electronic device, storage medium, and program product
KR1020210126009A KR20210124110A (ko) 2021-03-23 2021-09-23 컴파일링 방법, 컴파일링 장치, 전자 기기, 저장 매체 및 프로그램 제품
JP2021155593A JP7393404B2 (ja) 2021-03-23 2021-09-24 コンパイル方法、コンパイル装置、電子デバイス、記憶媒体及びプログラム
US17/552,151 US20220107791A1 (en) 2021-03-23 2021-12-15 Method for compilation, apparatus for compilation, electronic device, storage medium, and program product

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110309279.1A CN113031961B (zh) 2021-03-23 2021-03-23 编译方法、编译装置、电子设备、存储介质和程序产品

Publications (2)

Publication Number Publication Date
CN113031961A CN113031961A (zh) 2021-06-25
CN113031961B true CN113031961B (zh) 2023-04-07

Family

ID=76472910

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110309279.1A Active CN113031961B (zh) 2021-03-23 2021-03-23 编译方法、编译装置、电子设备、存储介质和程序产品

Country Status (5)

Country Link
US (1) US20220107791A1 (zh)
EP (1) EP4064037A1 (zh)
JP (1) JP7393404B2 (zh)
KR (1) KR20210124110A (zh)
CN (1) CN113031961B (zh)

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106484428A (zh) * 2016-10-20 2017-03-08 百度在线网络技术(北京)有限公司 应用构建方法和装置
CN107908407A (zh) * 2017-12-11 2018-04-13 北京奇虎科技有限公司 编译方法、装置及终端设备

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05120025A (ja) * 1991-10-29 1993-05-18 Nec Software Ltd ソースプログラムのインライン展開方法
JP5856393B2 (ja) * 2011-06-07 2016-02-09 キヤノン株式会社 画像処理装置及びその制御方法
US8516457B2 (en) * 2011-06-28 2013-08-20 International Business Machines Corporation Method, system and program storage device that provide for automatic programming language grammar partitioning
US9588741B2 (en) * 2013-03-15 2017-03-07 United Parcel Service Of America, Inc. Methods, apparatuses and computer program products for improving productivity for building applications
GB2521367A (en) * 2013-12-17 2015-06-24 Ibm Adaptable and extensible runtime and system for heterogeneous computer systems
JP6500626B2 (ja) * 2015-06-16 2019-04-17 富士通株式会社 計算機、コンパイラプログラム、リンクプログラムおよびコンパイル方法
US9727317B2 (en) * 2015-11-04 2017-08-08 International Business Machines Corporation Optimized compilation using an auto-tuned compiler as a service
CN107291522B (zh) * 2016-04-11 2020-09-29 中国科学院信息工程研究所 一种面向自定义规则文件的编译优化方法及系统
CN109614106B (zh) * 2018-12-21 2022-04-19 北京龙创悦动网络科技有限公司 一种c++程序编译方法和装置
US10846081B2 (en) * 2019-04-11 2020-11-24 Mastercard International Incorporated System and method for code synchronization between mainframe environment and distributed environment

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106484428A (zh) * 2016-10-20 2017-03-08 百度在线网络技术(北京)有限公司 应用构建方法和装置
CN107908407A (zh) * 2017-12-11 2018-04-13 北京奇虎科技有限公司 编译方法、装置及终端设备

Also Published As

Publication number Publication date
KR20210124110A (ko) 2021-10-14
EP4064037A1 (en) 2022-09-28
CN113031961A (zh) 2021-06-25
US20220107791A1 (en) 2022-04-07
JP2021192318A (ja) 2021-12-16
JP7393404B2 (ja) 2023-12-06

Similar Documents

Publication Publication Date Title
US9009183B2 (en) Transformation of a system change set from machine-consumable form to a form that is readily consumable by a human
CN108027722B (zh) 在编译和部署中动态更新应用
US9146759B2 (en) Assumption-based compilation
CN108139891B (zh) 用于生成建议以纠正未定义标记错误的方法和系统
US9229697B2 (en) Speculative object shapes
CN113342345A (zh) 深度学习框架的算子融合方法、装置
CN112527281B (zh) 基于人工智能的算子升级方法、装置、电子设备及介质
US20160117154A1 (en) Automated software include graph and build environment analysis and optimization in compiled language
CN108351790B (zh) 用于期望状态配置的非单调最终收敛的设备、方法和介质
CN115237436A (zh) 应用部署方法、装置、电子设备及可读存储介质
US20130111440A1 (en) Methods, Apparatuses, and Computer-Readable Media for Computing Checksums for Effective Caching in Continuous Distributed Builds
CN114443076A (zh) 镜像构建方法、装置、设备及存储介质
CN110457065A (zh) 用于获得可兼容多版本系统的应用的方法及装置
CN113031961B (zh) 编译方法、编译装置、电子设备、存储介质和程序产品
US11194885B1 (en) Incremental document object model updating
CN114168151A (zh) 基于容器的程序编译方法、装置、电子设备及存储介质
CN113031962B (zh) 编译方法、编译装置、电子设备、存储介质和程序产品
CN113760765B (zh) 代码测试方法、装置、电子设备和存储介质
CN113961215A (zh) 应用更新方法、装置、设备和存储介质
CN114168150A (zh) 应用程序编译方法、装置、电子设备及存储介质
CN114265610A (zh) 一种小程序的热修复方法、装置以及电子设备
CN113377402A (zh) 多版本并发存储方法和装置
CN114936338A (zh) 页面加载方法、装置、电子设备及可读存储介质
CN114328236A (zh) 一种组件处理方法、装置及电子设备
CN114489774A (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