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

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

Info

Publication number
CN113031962B
CN113031962B CN202110309347.4A CN202110309347A CN113031962B CN 113031962 B CN113031962 B CN 113031962B CN 202110309347 A CN202110309347 A CN 202110309347A CN 113031962 B CN113031962 B CN 113031962B
Authority
CN
China
Prior art keywords
source files
subset
source
directory
compiling
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
CN202110309347.4A
Other languages
English (en)
Other versions
CN113031962A (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 CN202110309347.4A priority Critical patent/CN113031962B/zh
Publication of CN113031962A publication Critical patent/CN113031962A/zh
Application granted granted Critical
Publication of CN113031962B publication Critical patent/CN113031962B/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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

本公开提供了一种编译方法、编译装置、电子设备、存储介质和程序产品,可以用于源文件编译领域和深度学习领域等领域中。该方法包括:获取源文件集合,源文件集合包括至少一种类型的源文件;获取与源文件集合相关联的对象集合的目录集合;针对目录集合中的第一目录,基于第一目录包括与第一类型的源文件相关联的第一对象集合,将与第一对象集合相关联的源文件组合成第一源文件子集;以及对第一源文件子集作为整体进行编译。利用上述方法,可以通过减少针对源文件编译次数来有效提高编译效率和降低编译耗时,从而能够提升用户体验。

Description

编译方法、编译装置、电子设备、存储介质和程序产品
技术领域
本公开涉及计算机技术,并且更具体地,涉及编译方法、编译装置、电子设备、计算机可读存储介质和计算机程序产品,可以用于源文件编译领域和深度学习领域等领域中。
背景技术
深度学习是人工智能领域中的关键技术,研发人员通常基于深度学习框架来开展相关工作。深度学习的基础是人工神经网络,而人工神经网络的核心则是矩阵运算,因此一个深度学习框架的核心也就是矩阵运算。深度学习系统是计算密集型系统,在其内部往往涉及大量高度复杂的矩阵计算,系统的流畅运行对处理速度往往要求很高,中央处理单元甚至都无法满足矩阵计算的需求了,要求诸于其他的计算设备来实现快速的矩阵运算,通常广泛采用例如GPU设备的专用处理单元。
常见的深度学习框架均使用专用处理单元来加速计算。CUDA是一种并行计算架构,该架构使专用处理单元能够解决复杂的计算问题,开发人员可以使用C/C++语言来编写CUDA程序并且用nvcc来编译。在常见的深度学习框架中CUDA程序占比都较高。然而,由于CUDA的编译过程复杂,因此大型项目中的CUDA编译往往耗时较高,从而影响研发效率。
然而,传统的用于源文件编译的技术要么需要针对每个源文件分别进行编译,要么仅能非常粗糙地将部分源文件合并而后进行编译,并且基本上不能处理CUDA源文件。因此,针对使用CUDA源文件的项目所需的编译次数较大,无法适用于源文件较多的大型项目。
发明内容
根据本公开的实施例,提供了一种编译方法、编译装置、电子设备、计算机可读存储介质和计算机程序产品。
在本公开的第一方面中,提供了一种编译方法,包括:获取源文件集合,源文件集合包括至少一种类型的源文件;获取与源文件集合相关联的对象集合的目录集合;针对目录集合中的第一目录,基于第一目录包括与第一类型的源文件相关联的第一对象集合,将与第一对象集合相关联的源文件组合成第一源文件子集;以及对第一源文件子集作为整体进行编译。
在本公开的第二方面中,提供了一种编译装置,包括:源文件获取模块,被配置为获取源文件集合,所述源文件集合包括至少一种类型的源文件;第一目录集合获取模块,被配置为与所述源文件集合相关联的对象集合的目录集合;第一组合模块,被配置为针对所述目录集合中的第一目录,基于所述第一目录包括与第一类型的源文件相关联的第一对象集合,将与所述第一对象集合相关联的源文件组合成第一源文件子集;以及第一编译模块,被配置为对所述第一源文件子集作为整体进行编译。
在本公开的第三方面中,提供了一种电子设备,包括至少一个处理器;以及与至少一个处理器通信连接的存储器;其中存储器存储有可被至少一个处理器执行的指令,该指令被至少一个处理器执行,以使至少一个处理器能够实现根据本公开的第一方面的方法。
在本公开的第四方面中,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,计算机指令用于使计算机实现根据本公开的第一方面的方法。
在本公开的第五方面中,提供了一种计算机程序产品,包括计算机程序,计算机程序在被处理器执行时,执行根据本公开的第一方面的方法。
利用根据本申请的技术,提供了一种编译方法,利用该方法的技术方案,可以按照与将用于编译的源文件的例如目标(target)的对象相关联的目录,按照目录级别将与每个目录中的对象对应的源文件例如使用include方式组合,以生成源文件集合,而后进行编译,从而可以通过减少编译次数来有效提高编译效率,降低编译耗时。
应当理解,发明内容部分中所描述的内容并非旨在限定本公开的实施例的关键或重要特征,亦非用于限制本公开的范围。本公开的其它特征将通过以下的描述变得容易理解。
附图说明
通过结合附图对本公开示例性实施例进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中在本公开示例性实施例中,相同的参考标号通常代表相同部件。应当理解,附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1示出了可以在其中实现本公开的某些实施例中的编译方法的编译环境100的示意性框图;
图2示出了根据本公开实施例的编译方法200的流程图;
图3示出了根据本公开实施例的编译方法300的流程图;
图4示出了根据本公开的实施例的编译装置400的示意性框图;以及
图5示出了可以用来实施本公开的实施例的示例电子设备500的示意性框图。
在各个附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施例。虽然附图中显示了本公开的优选实施例,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
在本文中使用的术语“包括”及其变形表示开放性包括,即“包括但不限于”。除非特别申明,术语“或”表示“和/或”。术语“基于”表示“至少部分地基于”。术语“一个示例实施例”和“一个实施例”表示“至少一个示例实施例”。术语“另一实施例”表示“至少一个另外的实施例”。术语“第一”、“第二”等等可以指代不同的或相同的对象。下文还可能包括其他明确的和隐含的定义。
如以上在背景技术中所描述的,传统的用于源文件编译的技术要么需要针对每个源文件分别进行编译,要么仅能非常粗糙地将部分源文件合并而后进行编译,并且基本上不能处理CUDA源文件。因此,针对使用CUDA源文件的项目所需的编译次数较大,无法适用于源文件较多的大型项目,因此难以满足用户的需求。
例如,在传统技术中,能够支持将源文件组合的工具仅有CMAKE。在使用CMAKE时,通过在目标(target)中将UNITY_BUILD属性设置为ON来实现。然而,采取CMAKE的方式仅对C或者C++类型的源文件生效,但无法处理CUDA源文件。此外,采取CMAKE的方式在针对大型项目时并不能取得较好的效果,其主要会受限于源文件之间存在较多符号重复定义问题,从而无法处理将源文件组合时可能引发的冲突因此也并未广泛得到使用。
为了至少部分地解决上述问题以及其他潜在问题中的一个或者多个问题,本公开的实施例提出了一种编译方法,利用根据本公开的实施方式的技术方案,可以按照与将用于编译的源文件的例如目标(target)的对象相关联的目录,按照目录级别将与每个目录中的对象对应的源文件例如使用include方式组合,以生成源文件集合,而后进行编译,从而可以通过减少编译次数来有效提高编译效率,降低编译耗时。
图1示出了可以在其中实现本公开的某些实施例中的编译方法的编译环境100的示意性框图。根据本公开的一个或多个实施例,编译环境100可以是云环境。如图1中所示,编译环境100包括计算设备110。在编译环境100中,输入数据120作为计算设备110的输入被提供给计算设备110。输入数据120例如可以包括由希望被编译的源文件组成的源文件集合、编译源文件集合中的源文件所需要的依赖文件、以及与源文件集合相关联的对象集合的目录集合、或者可以用于从其获取目录集合的、例如CMakeList.txt的构建系统的配置文件。
计算设备110可以针对与源文件集合相关联的对象集合的目录集合中的目录,基于目录包括与例如CUDA类型的源文件相关联的例如目标集合的对象集合,来将与对象集合相关联的源文件组合成源文件子集,并且而后利用其所包括的编译器(未示出),使用依赖文件来对组合后的源文件进行编译。在编译过程中,针对源文件子集,计算设备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获取与源文件集合相关联的对象集合的目录集合。根据本公开的一个或多个实施例,与源文件集合相关联的对象集合例如包括可以通过将源文件集合进行编译而得到的目标(target)集合,并且目标例如可以包括可以在项目中作为中间依赖元素而存在的、可以由用户使用的静态库。此外,目录集合中所包括的目录之间例如可以具有嵌套关系或者具有不存在嵌套的并列关系。
根据本公开的一个或多个实施例,计算设备110可以基于例如CMakeList.txt的构建系统的配置文件来获取目标记录。除此之外,计算设备110也可以执行构建编译系统配置的操作。例如,C++项目可以在例如Linux、Windows和MacOS的不同平台上使用例如MAKE、MSVC和NINJA的不同的构建系统来进行编译。为了快速的在跨平台上正常编译,通常可以选择使用跨平台的编译工具,例如CMAKE),这样就可以用简单的语句来描述所有平台的编译过程。然而,可以直接用来作为编译配置的是各构建系统各自使用的配置,而CMAKE使用的CMakeLists.txt并不能直接用来编译。此时,计算设备110可以执行从CMAKE的配置CMakeLists.txt到各平台对应构建系统的配置的这一设计构建编译系统配置的操作。
在框206,计算设备110针对目录集合中的第一目录,基于第一目录包括与第一类型的源文件相关联的第一对象集合,将与第一对象集合相关联的源文件组合成第一源文件子集。根据本公开的一个或多个实施例,计算设备110可以从目录集合中的第一目录开始来执行针对源文件的组合以及编译。第一目录例如可以是目录集合中的最末端的目录。应当理解,在执行框206中的步骤时,首先可以取消第一对象集合中的对应目标的生成,并且获取与每个目标对应的源文件。而后,可以使用当前目录所在的路径来生成新的构建目标以及源文件,例如,第一源文件子集以及与第一源文件子集相关联的目标。
根据本公开的一个或多个实施例,计算设备110可以被仅针对例如CUDA类型的第一类型的源文件来执行后续的组合以及编译操作。因此,计算设备110可以首先确定第一目录是否包括与第一类型的源文件相关联的、可以被称为第一对象集合的对象集合,并且当确定第一目录包括第一对象集合时,将源文件集合中的、与第一对象集合相关联的源文件组合成可以被称为第一源文件子集的源文件子集。将与第一对象集合相关联的源文件组合成第一源文件子集可以采取include方式,并且include方式尤其适合于CUDA类型的源文件。
根据本公开的一些实施例,由于例如源文件的编写质量较高等原因,将源文件集合中的、与第一对象集合相关联的源文件组合成第一源文件子集并且进行编译将不会在编译过程中产生例如命名冲突之类的冲突。因此,针对此类源文件,可以直接将它们组合成源文件集合。例如,计算设备110可以首先通过例如研究项目中的可以被组合在一起的源文件来确定对第一源文件子集进行组合编译是否将产生冲突,并且当确定对第一源文件子集进行组合编译将不产生冲突时,直接将与第一对象集合相关联的源文件组合成第一源文件子集。
根据本公开的另一些实施例,将源文件集合中的、与第一对象集合相关联的源文件组合成第一源文件子集并且进行编译将会在编译过程中产生例如命名冲突之类的冲突。因此,针对此类源文件,需要采取一定方式来避免在冲突的产生。例如,计算设备110可以首先确定对第一源文件子集进行组合编译是否产生冲突。在在一些实施例中,计算设备110可以通过例如研究项目中的可以被组合在一起的源文件来确定对第一源文件子集进行组合编译是否将产生冲突。在另一些实施例中,计算设备110可以通过对组合在一起的第一源文件子集进行编译来确定对第一源文件子集进行组合编译是否将产生冲突。而后,当计算设备110确定对第一源文件子集进行组合编译产生冲突时,计算设备110可以基于这一确定来进一步确定第一源文件子集中的、产生冲突的源文件。
根据本公开的一些实施例,当计算设备110确定了产生冲突的源文件之后,计算设备110例如可以通过对这些源文件进行修改来避免冲突。根据本公开的一个或多个实施例,对源文件进行修改以避免冲突的方式可以包括向源文件添加前预处理宏或者后预处理宏。通过向源文件添加前预处理宏或者后预处理宏,由于源文件在先经过了前预处理或者在后经过了后预处理,因此可以避免产生例如命名冲突之类的冲突。
例如,CUDA源文件支持使用C/C++代码来进行编写,这意味着其遵守大部分C/C++代码语法规则,包括编译链接部分。当对CUDA源文件进行编译时,每个CUDA源文件都是一个编译单元,CUDA源文件中声明及定义仅在所属编译单元中可见,对其他编译单元不可见,而头文件中声明及定义对全部编译单元均可见。当使用include方式组织CUDA源文件时,会将之前各自对应的编译单元融合在一个编译单元中,意味着之前仅在所属编译单元中可见的符号,对其他编译单元也可见,从而造成了会出现声明/定义命名冲突问题。因此,对于会出现冲突的include源文件,可以为其指定include前预处理宏或者include后预处理宏,预处理宏中可以使用#ifdef/#undef/#endif、namespace等方式来限制各个CUDA源文件中声明/定义仅对所属文件可见,对其他文件保持不可见,从而实现了避免产生冲突。
根据本公开的一个或多个实施例,在对第一源文件子集中的未经处理的源文件或者添加了前预处理宏或者后预处理宏的源文件进行处理时,可以将它们按照include前预处理宏、include源文件和include后预处理宏的次序依次写入与新的目标对应的源文件中,并且每次写入一行。
根据本公开的另一些实施例,当计算设备110确定了产生冲突的源文件之后,计算设备110可以直接从第一源文件子集移除产生冲突的源文件,从而得到移除了产生冲突的源文件的源文件子集。
根据本公开的一个或多个实施例,源文件子集可以被称为编译单元,并且而后使用编译器来对编译单元进行编译。
根据本公开的一些实施例,第一目录所包括的对象中的所有对象都属于第一对象集合,因此与第一目录所包括的对象相关联的所有源文件都可以被组合到第一源文件子集中。在这种情况下,在基于第一目录将源文件组合成第一源文件子集之后,将不会单独存在与第一目录所包括的对象相关联的源文件。
根据本公开的另一些实施例,第一目录所包括的对象中的大部分对象都属于第一对象集合,但也有一部分对象不属于第一对象集合,因此与第一目录所包括的对象相关联的源文件中的一部分源文件并未被组合到第一源文件子集中。在这种情况下,在基于第一目录将源文件组合成第一源文件子集之后,会存在一些与第一目录所包括的对象相关联的源文件没有被组合到第一源文件子集中。
在框208,计算设备110对第一源文件子集作为整体进行编译。根据本公开的一个或多个实施例,如前所述,在计算设备110将源文件集合中的、与第一对象集合相关联的源文件组合成第一源文件子集之后,第一源文件子集作为一个编译单元而被编译。换言之,针对第一源文件子集,仅需要启动编译器一次。因此,与针对源文件集合中的每个源文件均启动编译器一次相比,利用根据本公开的实施例的技术方案,可以显著减少启动编译器的次数,并且因而可以减少进行编译的次数。
根据本公开的一个或多个实施例,如前所述,如果在框206中,当计算设备110确定了产生冲突的源文件并且直接从第一源文件子集移除了产生冲突的源文件、从而得到移除了产生冲突的源文件的源文件子集时,在步骤208中,计算设备110对移除了产生冲突的源文件的源文件子集作为整体进行编译。
图3示出了根据本公开的实施例的编译方法300的流程图。具体而言,编译方法300也可以由图1中所示的编译环境100中的计算设备110来执行。应当理解的是,编译方法300还可以包括未示出的附加操作和/或可以省略所示出的操作,本公开的范围在此方面不受限制。
在框302,计算设备110获取源文件集合。如前所述,根据本公开的一个或多个实施例,计算设备110通过接收输入数据120来获取源文件集合,并且源文件集合包括至少一种类型的源文件。框302所涉及的步骤的具体内容与框202中所涉及的步骤的具体内容相同,在此不再赘述。
在框304,计算设备110获取与源文件集合相关联的对象集合的目录集合。如前所述,根据本公开的一个或多个实施例,与源文件集合相关联的对象集合例如包括可以通过将源文件集合进行编译而得到的目标(target)集合,并且目标例如可以包括可以在项目中作为中间依赖元素而存在的、可以由用户使用的静态库。框304所涉及的步骤的具体内容与框204中所涉及的步骤的具体内容相同,在此不再赘述。
在框306,计算设备110针对目录集合中的第一目录,基于第一目录包括与第一类型的源文件相关联的第一对象集合,将与第一对象集合相关联的源文件组合成第一源文件子集。如前所述,根据本公开的一个或多个实施例,计算设备110可以从目录集合中的第一目录开始来执行针对源文件的组合以及编译。框306所涉及的步骤的具体内容与框206中所涉及的步骤的具体内容相同,在此不再赘述。
在框308,计算设备110针对目录集合中的第二目录,基于第二目录包括与第一类型的源文件相关联的第二对象集合,将与第二对象集合相关联的源文件组合成第二源文件子集。根据本公开的一些实施例,第一目录与第二目录之间可以具有嵌套关系。根据本公开的一些实施例,第一目录与第二目录之间可以具有不存在嵌套的并列关系。框308所涉及的步骤的具体内容与框206和框306中所涉及的步骤的具体内容类似,在此不再赘述。
在框310,计算设备110将第一源文件子集和第二源文件子集组合成第三源文件子集。如前所述,根据本公开的一个或多个实施例,第一源文件子集和第二源文件子集中的源文件可以均为例如CUDA类型的第一类型的源文件,并且与第一源文件子集和第二源文件子集分别对应的第一目录和第二目录可以具有嵌套关系或者具有不存在嵌套的并列关系,因此,可以进一步例如利用include方式来将第一源文件子集和第二源文件子集组合成可以被称为第三源文件子集的新的源文件子集。
根据本公开的一个或多个实施例,目录集合可以包括多个目录,并且计算设备110可以从末端目录开始,一层一层地处理基于目录来生成源文件子集,从而可以基于多个目录而将与多个目录相关联的源文件组合成一个源文件子集,或者基于目录集合中的所有目录而将与所有目录相关联的源文件组合成一个源文件子集。
在框312,计算设备110对第三源文件子集作为整体进行编译。根据本公开的一个或多个实施例,如前所述,在计算设备110将源文件集合中的、与第一对象集合和第二对象集合相关联的第一源文件子集和第二源文件子集和成第三源文件子集之后,第三源文件子集作为一个编译单元而被编译。换言之,针对第三源文件子集,仅需要启动编译器一次。框312所涉及的步骤的具体内容与框208中所涉及的步骤的具体内容类似,在此不再赘述。
根据本公开的一个或多个实施例,如果在框306和框308中,计算设备110确定了产生冲突的源文件并且直接从第一源文件子集和第二源文件子集分别移除了产生冲突的源文件,则计算设备110可以在对第三源文件子集作为整体进行编译之前、之后或者同时,对移除的产生冲突的源文件。需要指出的是,移除的产生冲突的源文件与第三源文件子集属于不同的编译单元,因此需要分别使用编译器进行编译。
根据本公开的一个或多个实施例,如果第一目录和第二目录还包括与除第一类型之外的、例如C++类型的其他类型的源文件相关联的对象,则计算设备110可以在对第三源文件子集作为整体进行编译之前、之后或者同时,使用对应的编译器来对与这些对象相关联的源文件进行编译。应当理解,计算设备110可以按照方法200和方法300中所记载的内容,在将与这些对象相关联的源文件组合之后再进行编译。
以上参考图1至图3描述了与可以在其中实现本公开的某些实施例中的编译方法的编译环境100、根据本公开实施例的编译方法200以及根据本公开实施例的编译方法300的相关内容。应当理解,上述描述是为了更好地展示本公开中所记载的内容,而不是以任何方式进行限制。
应当理解,本公开的上述各个附图中所采用的各种元件的数目和物理量的大小仅为举例,而并不是对本公开的保护范围的限制。上述数目和大小可以根据需要而被任意设置,而不会对本公开的实施方式的正常实施产生影响。
上文已经参见图1至图3描述了根据本公开的实施方式的编译方法200和编译方法300的细节。在下文中,将参见图4描述编译装置中的各个模块。
图4是根据本公开实施例的编译装置400的示意性框图。如图4所示,编译装置400包括:源文件获取模块410,被配置为获取源文件集合,源文件集合包括至少一种类型的源文件;第一目录集合获取模块420,被配置为与源文件集合相关联的对象集合的目录集合;第一组合模块430,被配置为针对目录集合中的第一目录,基于第一目录包括与第一类型的源文件相关联的第一对象集合,将与第一对象集合相关联的源文件组合成第一源文件子集;以及第一编译模块440,被配置为对第一源文件子集作为整体进行编译。
在一个或多个实施例中,其中第一目录集合获取模块420包括:第二目录集合获取模块(未示出),被配置为基于构建系统的配置文件来获取目录记录。
在一个或多个实施例中,其中第一类型的源文件包括CUDA类型的源文件。
在一个或多个实施例中,其中第一组合模块430包括:第二组合模块(未示出),被配置为使用include方式与第一对象集合相关联的源文件组合成第一源文件子集。
在一个或多个实施例中,其中第一组合模块430包括:第三组合模块(未示出),被配置为基于确定对第一源文件子集进行组合编译将不产生冲突,来将与第一对象集合相关联的源文件组合成第一源文件子集。
在一个或多个实施例中,其中冲突包括命名冲突。
在一个或多个实施例中,其中第一组合模块430包括:源文件确定模块(未示出),被配置为基于确定对第一源文件子集进行组合编译产生冲突,确定第一源文件子集中的、产生冲突的源文件;以及添加模块(未示出),被配置为基于冲突的原因,向源文件添加以下之一:前预处理宏;以及后预处理宏。
在一个或多个实施例中,其中第一组合模块430包括:源文件确定模块(未示出),被配置为基于确定对第一源文件子集进行组合编译产生冲突,确定第一源文件子集中的、产生冲突的源文件;移除模块(未示出),被配置为从第一源文件子集移除产生冲突的源文件;并且第一编译模块440包括:第二编译模块(未示出),被配置为对移除了产生冲突的源文件的第一源文件子集作为整体进行编译。
在一个或多个实施例中,其中第一目录是目录集合中的最末端的目录。
在一个或多个实施例中,编译装置400还包括:第四组合模块(未示出),被配置为针对目录集合中的第二目录,基于第二目录包括与第一类型的源文件相关联的第二对象集合,将与第二对象集合相关联的源文件组合成第二源文件子集;并且第一编译模块440包括:第五组合模块(未示出),被配置为将第一源文件子集和第二源文件子集组合成第三源文件子集;以及第三编译模块(未示出),被配置为对第三源文件子集作为整体进行编译。
在一个或多个实施例中,其中第一目录和第二目录之间的关系包括以下之一:第一目录被嵌套在第二目录中;以及第一目录与第二目录并列。
通过以上参考图1至图4的描述,根据本公开的实施方式的技术方案相对于传统方案具有诸多优点。例如,利用根据本公开的实施例的技术方案,可以基于与将用于编译的源文件的对象相关联的目录来将源文件组合,以生成源文件集合,而后进行编译,从而可以通过减少编译次数来有效提高编译效率,降低编译耗时。经过试验,当根据本公开的实施方式的技术方案被应用于深度学习框架时,可以使针对例如CUDA源文件的源文件的编译时间降低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 (24)

1.一种编译方法,包括:
获取源文件集合,所述源文件集合包括至少一种类型的源文件;
获取与所述源文件集合相关联的对象集合的目录集合;
针对所述目录集合中的第一目录,基于所述第一目录包括与第一类型的源文件相关联的第一对象集合,将与所述第一对象集合相关联的所述第一类型的源文件组合成第一源文件子集;以及
对所述第一源文件子集作为整体进行编译。
2.根据权利要求1所述的方法,其中获取所述目录集合包括:
基于构建系统的配置文件来获取所述目录集合。
3.根据权利要求1所述的方法,其中所述第一类型的源文件包括CUDA类型的源文件。
4.根据权利要求3所述的方法,其中将与所述第一对象集合相关联的源文件组合成第一源文件子集包括:
使用include方式与所述第一对象集合相关联的所述源文件组合成所述第一源文件子集。
5.根据权利要求1所述的方法,其中将与所述第一对象集合相关联的源文件组合成第一源文件子集包括:
基于确定对所述第一源文件子集进行组合编译将不产生冲突,来将与所述第一对象集合相关联的所述源文件组合成所述第一源文件子集。
6.根据权利要求5所述的方法,其中所述冲突包括命名冲突。
7.根据权利要求1所述的方法,其中将与所述第一对象集合相关联的源文件组合成第一源文件子集包括:
基于确定对所述第一源文件子集进行组合编译产生冲突,确定所述第一源文件子集中的、产生所述冲突的源文件;以及
基于所述冲突的原因,向所述源文件添加以下之一:
前预处理宏;以及
后预处理宏。
8.根据权利要求1所述的方法,其中将与所述第一对象集合相关联的源文件组合成第一源文件子集包括:
基于确定对所述第一源文件子集进行组合编译产生冲突,确定所述第一源文件子集中的、产生所述冲突的源文件;
从所述第一源文件子集移除产生所述冲突的所述源文件;并且
对所述第一源文件子集作为整体进行编译包括:
对移除了产生所述冲突的所述源文件的所述第一源文件子集作为整体进行编译。
9.根据权利要求1所述的方法,其中所述第一目录是所述目录集合中的最末端的目录。
10.根据权利要求1所述的方法,还包括:
针对所述目录集合中的第二目录,基于所述第二目录包括与所述第一类型的源文件相关联的第二对象集合,将与所述第二对象集合相关联的源文件组合成第二源文件子集;并且
对所述第一源文件子集作为整体进行编译包括:
将所述第一源文件子集和所述第二源文件子集组合成第三源文件子集;以及
对所述第三源文件子集作为整体进行编译。
11.根据权利要求10所述的方法,其中所述第一目录和所述第二目录之间的关系包括以下之一:
所述第一目录被嵌套在所述第二目录中;以及
所述第一目录与所述第二目录并列。
12.一种编译装置,包括:
源文件获取模块,被配置为获取源文件集合,所述源文件集合包括至少一种类型的源文件;
第一目录集合获取模块,被配置为与所述源文件集合相关联的对象集合的目录集合;
第一组合模块,被配置为针对所述目录集合中的第一目录,基于所述第一目录包括与第一类型的源文件相关联的第一对象集合,将与所述第一对象集合相关联的所述第一类型的源文件组合成第一源文件子集;以及
第一编译模块,被配置为对所述第一源文件子集作为整体进行编译。
13.根据权利要求12所述的装置,其中所述第一目录集合获取模块包括:
第二目录集合获取模块,被配置为基于构建系统的配置文件来获取所述目录集合。
14.根据权利要求12所述的装置,其中所述第一类型的源文件包括CUDA类型的源文件。
15.根据权利要求14所述的装置,其中所述第一组合模块包括:
第二组合模块,被配置为使用include方式与所述第一对象集合相关联的所述源文件组合成所述第一源文件子集。
16.根据权利要求12所述的装置,其中所述第一组合模块包括:
第三组合模块,被配置为基于确定对所述第一源文件子集进行组合编译将不产生冲突,来将与所述第一对象集合相关联的所述源文件组合成所述第一源文件子集。
17.根据权利要求16所述的装置,其中所述冲突包括命名冲突。
18.根据权利要求12所述的装置,其中所述第一组合模块包括:
源文件确定模块,被配置为基于确定对所述第一源文件子集进行组合编译产生冲突,确定所述第一源文件子集中的、产生所述冲突的源文件;以及
添加模块,被配置为基于所述冲突的原因,向所述源文件添加以下之一:
前预处理宏;以及
后预处理宏。
19.根据权利要求12所述的装置,其中所述第一组合模块包括:
源文件确定模块,被配置为基于确定对所述第一源文件子集进行组合编译产生冲突,确定所述第一源文件子集中的、产生所述冲突的源文件;
移除模块,被配置为从所述第一源文件子集移除产生所述冲突的所述源文件;并且
所述第一编译模块包括:
第二编译模块,被配置为对移除了产生所述冲突的所述源文件的所述第一源文件子集作为整体进行编译。
20.根据权利要求12所述的装置,其中所述第一目录是所述目录集合中的最末端的目录。
21.根据权利要求12所述的装置,还包括:
第四组合模块,被配置为针对所述目录集合中的第二目录,基于所述第二目录包括与所述第一类型的源文件相关联的第二对象集合,将与所述第二对象集合相关联的源文件组合成第二源文件子集;并且
所述第一编译模块包括:
第五组合模块,被配置为将所述第一源文件子集和所述第二源文件子集组合成第三源文件子集;以及
第三编译模块,被配置为对所述第三源文件子集作为整体进行编译。
22.根据权利要求21所述的装置,其中所述第一目录和所述第二目录之间的关系包括以下之一:
所述第一目录被嵌套在所述第二目录中;以及
所述第一目录与所述第二目录并列。
23.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-11中任一项所述的方法。
24.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使所述计算机执行权利要求1-11中任一项所述的方法。
CN202110309347.4A 2021-03-23 2021-03-23 编译方法、编译装置、电子设备、存储介质和程序产品 Active CN113031962B (zh)

Priority Applications (1)

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

Applications Claiming Priority (1)

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

Publications (2)

Publication Number Publication Date
CN113031962A CN113031962A (zh) 2021-06-25
CN113031962B true CN113031962B (zh) 2022-04-15

Family

ID=76472925

Family Applications (1)

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

Country Status (1)

Country Link
CN (1) CN113031962B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109614106A (zh) * 2018-12-21 2019-04-12 北京龙创悦动网络科技有限公司 一种c++程序编译方法和装置
WO2019089131A1 (en) * 2017-11-06 2019-05-09 Intel Corporation Technologies for programming flexible accelerated network pipeline using ebpf
CN110119274A (zh) * 2018-02-05 2019-08-13 北京智明星通科技股份有限公司 一种数据编译的方法、装置以及电子终端、计算机可读存储介质
CN111597151A (zh) * 2020-05-20 2020-08-28 广州平云小匠科技有限公司 文件生成方法、装置、计算机设备和存储介质
CN112114814A (zh) * 2020-09-22 2020-12-22 北京达佳互联信息技术有限公司 编译文件确定方法及装置、应用程序生成方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109739508B (zh) * 2018-12-28 2022-07-22 龙芯中科技术股份有限公司 源代码编译方法、装置、系统及存储介质
CN111857725A (zh) * 2020-07-17 2020-10-30 山东云海国创云计算装备产业创新中心有限公司 一种Makefile文件生成方法、装置、设备及介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019089131A1 (en) * 2017-11-06 2019-05-09 Intel Corporation Technologies for programming flexible accelerated network pipeline using ebpf
CN110119274A (zh) * 2018-02-05 2019-08-13 北京智明星通科技股份有限公司 一种数据编译的方法、装置以及电子终端、计算机可读存储介质
CN109614106A (zh) * 2018-12-21 2019-04-12 北京龙创悦动网络科技有限公司 一种c++程序编译方法和装置
CN111597151A (zh) * 2020-05-20 2020-08-28 广州平云小匠科技有限公司 文件生成方法、装置、计算机设备和存储介质
CN112114814A (zh) * 2020-09-22 2020-12-22 北京达佳互联信息技术有限公司 编译文件确定方法及装置、应用程序生成方法及装置

Also Published As

Publication number Publication date
CN113031962A (zh) 2021-06-25

Similar Documents

Publication Publication Date Title
CN113342345A (zh) 深度学习框架的算子融合方法、装置
CN112948079B (zh) 任务调度方法、装置、设备和计算机存储介质
CN112527281B (zh) 基于人工智能的算子升级方法、装置、电子设备及介质
CN112506602B (zh) 页面生成方法及装置、电子设备、计算机可读介质
CN111460815A (zh) 规则处理方法、装置、介质及电子设备
CN115237436A (zh) 应用部署方法、装置、电子设备及可读存储介质
CN114691148A (zh) 模型推理加速方法、装置、电子设备及存储介质
CN113296786A (zh) 数据处理方法、装置、电子设备及存储介质
CN112860356A (zh) 一种api调用控制方法、装置、电子设备和存储介质
CN113495728A (zh) 依赖关系确定方法、装置、电子设备及介质
US20210232378A1 (en) Program calling, electronic device, and storage medium
CN113220306A (zh) 操作执行方法、装置和电子设备
CN113031962B (zh) 编译方法、编译装置、电子设备、存储介质和程序产品
CN115809688B (zh) 一种模型调试方法、装置、电子设备及存储介质
US9229698B2 (en) Method and apparatus for compiler processing for a function marked with multiple execution spaces
CN114780196B (zh) 一种用户界面表单渲染方法、装置、电子设备和存储介质
CN114743586B (zh) 存储器模型的镜像存储实现方法、装置及存储介质
CN112783574B (zh) 应用程序开发方法、装置、设备和存储介质
CN114168151A (zh) 基于容器的程序编译方法、装置、电子设备及存储介质
US20170115973A1 (en) Operating method of semiconductor device and semiconductor system
CN114386577A (zh) 用于执行深度学习模型的方法、设备和存储介质
CN114416029A (zh) 数据处理方法、装置、设备、存储介质及计算机程序产品
CN111626401B (zh) 运算方法及装置
CN113031961B (zh) 编译方法、编译装置、电子设备、存储介质和程序产品
CN111078230A (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