CN113031954A - 代码编译方法、装置、电子设备、存储介质及异构系统 - Google Patents
代码编译方法、装置、电子设备、存储介质及异构系统 Download PDFInfo
- Publication number
- CN113031954A CN113031954A CN201911345168.5A CN201911345168A CN113031954A CN 113031954 A CN113031954 A CN 113031954A CN 201911345168 A CN201911345168 A CN 201911345168A CN 113031954 A CN113031954 A CN 113031954A
- Authority
- CN
- China
- Prior art keywords
- data processing
- code
- processor
- intermediate code
- processing logic
- 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 59
- 238000012545 processing Methods 0.000 claims abstract description 208
- 238000004364 calculation method Methods 0.000 claims description 60
- 238000004891 communication Methods 0.000 claims description 54
- 238000004458 analytical method Methods 0.000 claims description 10
- 230000001133 acceleration Effects 0.000 claims description 4
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 238000004590 computer program Methods 0.000 claims description 2
- 230000008569 process Effects 0.000 abstract description 14
- 238000011161 development Methods 0.000 abstract description 10
- 230000011218 segmentation Effects 0.000 description 11
- 230000018109 developmental process Effects 0.000 description 9
- 238000010586 diagram Methods 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000011022 operating instruction Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
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
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
技术领域
本发明实施例涉及数据处理技术领域,尤其涉及一种代码编译方法、装置、电子设备、存储介质及异构系统。
背景技术
目前,异构系统一般包括通用的处理器和异构加速器,异构加速器可以由GPU、FPGA、NPU等构成。通过处理器和异构加速器的组合,可以极大地提高异构系统的数据处理能力,使得异构系统的应用范围极大。
在应用异构系统时,需要为异构系统编写对应的代码。然而,由于处理器和异构加速器适用的机器代码存在差异,导致需要分别编写处理器和异构加速器的代码,还要另外编写处理器和异构加速器的通信代码等,再对多份代码进行编译得到机器代码,编写过程较为繁琐;并且,这种代码编写方式要求编程人员对处理器和异构加速器的底层技术都有较深的理解,对编程人员的业务要求较高,导致异构系统的开发效率较低。
发明内容
有鉴于此,本发明实施例提供一种代码编译方法、装置、电子设备、存储介质及异构系统,以解决或缓解上述问题。
根据本发明实施例的第一方面,提供了一种代码编译方法,其包括:将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。
根据本发明实施例的第二方面,提供了一种代码编译装置,包括:语言转换模块,用于将源代码转换为中间代码;逻辑获取模块,用于获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;代码编译模块,用于根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。
根据本发明实施例的第三方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上所述的代码编译方法对应的操作。
根据本发明实施例的第四方面,提供了一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上所述的代码编译方法。
根据本发明实施例的第五方面,提供了一种异构系统,包括:处理器、异构加速器以及如上所述的代码编译装置。
根据本发明实施例提供的方案,通过将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。通过本发明实施例提供的方案,编程人员仅需要编写一份源代码,即可同时编译得到在处理器和异构加速器上执行的机器代码,无需针对处理器和异构加速器进行分别编写代码,简化了编程过程,降低了对编程人员的业务要求,提高了异构系统的开发效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本发明实施例一的一种代码编译方法的步骤流程图;
图2a为本发明实施例二的一种代码编译方法的步骤流程图;
图2b为本发明实施例二的一种分割前的计算流程示意图;
图2c为本发明实施例二的一种分割前的计算流程示意图;
图2d为本发明实施例二的一种通过计算流图分析进行分割的方法步骤流程图;
图3为本发明实施例三的一种代码编译方法的步骤流程图;
图4为本发明实施例四的一种代码编译装置的结构框图;
图5为本发明实施例五的一种电子设备的结构示意图。
具体实施方式
为了使本领域的人员更好地理解本发明实施例中的技术方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明实施例一部分实施例,而不是全部的实施例。基于本发明实施例中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于本发明实施例保护的范围。
下面结合本发明实施例附图进一步说明本发明实施例具体实现。
实施例一
参照图1,示出了根据本发明实施例一的一种代码编译方法的步骤流程图。
本发明实施例的代码编译方法包括以下步骤:
S102、将源代码转换为中间代码。
本发明实施例中,源代码可以通过高级编程语言编写,高级编程语言为较接近自然语言和数学公式的编程,是一种面向用户的编程语言。高级编程语言可以包括java,c,c++,C#,pascal,python,lisp,OpenCL语言等,也可以为编程人员自定义的高级编程语言。当然,源代码也可以为通过其他的编程语言编写的,本实施例对此不进行限定。
通过对源代码进行语法分析、语义分析等操作,可以将源代码转换为中间代码。将源代码转换为中间代码的具体实现可以由本领域技术人员根据实际需求采用任意适当的算法或平台或工具等实现,如LLVM等,本发明实施例对此不作限制。
本实施例中,中间代码可以为平台无关的中间代码,即一种在计算机上的运行时不受平台的约束的代码。
此外,中间代码可以为一种结构简单、含义明确的记号组成的代码,中间代码可以采用现有的平台无关的代码,也可以为编程人员自定义的平台无关的代码。通过中间代码,可以简单、方便地表示出源代码要表达的计算内容或者计算流程。
S104、获取所述中间代码的至少两个数据处理逻辑。
因需将源代码编译为处理器和异构加速器执行的代码,因此,将源代码转换为中间代码后,可以获得中间代码的至少两个数据处理逻辑,每个数据处理逻辑用于实现一个完整的数据处理功能,其可以与源代码定义的部分计算内容或部分计算流程对应,以通过步骤S106根据至少两个数据处理逻辑编译得到机器代码。数据处理逻辑具体可以为处理数据的流程或规则等。
具体地,可以根据源代码的负载逻辑、源代码定义的用于进行计算的数据类型、源代码定义的计算类型等,将中间代码分割得到至少两个数据处理逻辑。
本发明实施例中,所述至少两个数据处理逻辑中至少包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑数据。
具体地,第一数据处理逻辑或者第二数据处理逻辑两者的区别可以在于:数据处理逻辑处理的数据类型可能不同、数据量不同,数据处理逻辑中计算对应的计算类型可能不同等;导致两种数据处理逻辑的执行主体不同。
例如,第一数据处理逻辑的控制逻辑复杂度较高,但是计算量和数据较少,则执行主体为较为通用的处理器;第二数据处理逻辑的计算量和数据都比较大,则执行主体为异构加速器。
本发明实施例中,一个处理器可以执行一个或多个第一数据处理逻辑;一个第一数据处理逻辑也可以进一步进行分割,从而通过多个处理器执行;对应的,一个异构加速器可以执行一个或多个第二数据处理逻辑;一个第一数据处理逻辑也可以进一步进行分割,从而通过至少两个异构加速器执行。
S106、根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。
具体编译时,可以根据第一数据处理逻辑对中间代码进行编译,得到在处理器上执行的机器代码;根据第二数据处理逻辑对中间代码进行编译,得到在异构加速器上执行的机器代码。本发明实施例中,通过根据数据处理逻辑将中间代码进行编译,可以同时得到可在处理器和异构加速器上执行的机器代码。其中,将中间代码编译为机器代码的具体实现方式可以由本领域技术人员根据实际需求采用任意适当的方式,本发明实施例对此不作限制。例如,可以先通过任意适当的方式,根据至少两个数据处理逻辑,将中间代码转换为至少两个现有的编译器可识别的代码,再通过现有的编译器将至少两个编译器可识别的代码分别进行编译,得到在处理器上执行的机器代码以及在异构加速器上执行的机器代码。
根据步骤S104可知,中间代码是通过一份源代码确定的,用于编译的至少两个数据处理逻辑同样是根据一份源代码确定的,即通过本发明实施例提供的方案,可以根据一份源代码同时编译得到可在处理器和异构加速器上执行的机器代码。
与现有技术中需要分别针对处理器和异构加速器进行编程相比,采用本发明实施例提供的方案仅需要编写一份源代码即可,极大地简化了编程过程;另外,编程人员仅需要通过编写一份源代码,不需要针对处理器和异构加速器进行分别编码,降低了对编程人员的业务要求,提高了异构系统的开发效率。
本发明实施例提供的方案,通过将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。通过本发明实施例提供的方案,编程人员仅需要编写一份源代码,即可同时编译得到在处理器和异构加速器上执行的机器代码,无需针对处理器和异构加速器进行分别编写代码,简化了编程过程,降低了对编程人员的业务要求,提高了异构系统的开发效率。
本发明实施例的代码编译方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:移动终端(如平板电脑、手机等)、PC机和服务器。
实施例二
参照图2a,示出了根据本发明实施例二的一种代码编译方法的步骤流程图。
本发明实施例的代码编译方法包括以下步骤:
S202、将源代码转换为中间代码。
本步骤的具体实现方式与上述步骤S102类似,在此不再赘述。
S204、获取所述中间代码的至少两个数据处理逻辑。
具体地,本发明实施例中,如果源代码中包括用于指示所述处理器负载限度和所述异构加速器负载限度的负载源代码,对应的,则步骤S204可以包括:根据所述负载源代码指示的处理器负载限度和异构加速器负载限度,对所述中间代码分割,得到至少两个数据处理逻辑,其中,第一数据处理逻辑的负载与所述处理器负载限度匹配,第二数据处理逻辑的负载与所述异构加速器负载限度匹配。
通过根据源代码中的负载源代码进行分割,可以使得第一数据处理逻辑的负载与所述处理器负载限度匹配,第二数据处理逻辑的负载与所述异构加速器负载限度匹配,从而保证了异构系统的负载均衡。
具体地,如图2b所示,图中包括数据0-数据7以及计算1-计算4,通过分析数据0-7以及计算1-4的负载可以确定,数据0-3以及计算1、计算2的负载与处理器负载限度对应,若增加计算3,则超出处理器负载限度,因此,可以分割计算2以及计算3,并根据计算2之前的数据0-3以及计算1、计算2确定一个第一数据处理逻辑;对应的,还可以根据计算2之后的数据4-数据7以及计算3、计算4确定一个第二数据处理逻辑。分割后的示意图如图2c所示。
进一步地,本发明实施例中,负载源代码可以为负载均衡算法对应的代码,通过负载均衡算法对应的代码,可以确定处理器负载限度和异构加速器的负载限度,具体确定方法可参考相关技术,本发明实施例在此不再赘述。
可选地,在本申请的另一种实现方式中,如图2d所示,步骤S204还可以包括:
S2041、对所述中间代码进行计算流图分析,以将所述中间代码对应的计算流图分割为至少两个子图。
所述子图包括与所述处理器对应的第一子图以及与所述异构加速器对应的第二子图。
具体地,中间代码对应的计算流图可以如图2b所示,计算流图具体为一个有向图,中间代码的数据以及计算公式组成了计算流图中的节点,数据流图中的箭头表示计算公式输出的数据,或者表示将数据输入至计算公式中。
分割后的至少两个子图可以如图c所示,图2c仅以两个子图作为示例。图2c中的左侧可以为与处理器对应的第一子图,右侧可以为与异构加速器对应的第二子图。本领域的技术人员应当知晓,上述仅为举例说明,并不作为本实施例的限定,在其他实现方式中,第一子图或第二子图的数量可以不止一个。
S2042、根据所述至少两个子图确定所述中间代码的至少两个数据处理逻辑。
其中,所述第一子图与所述第一数据处理逻辑对应,所述第二子图与所述第二处理逻辑对应。
具体地,可以直接根据子图中包括的数据以及计算公式,确定子图对应的中间代码的数据处理逻辑,一个子图可以对应一个数据处理逻辑。
本发明实施例中,通过对所述中间代码进行计算流图分析,以将所述中间代码对应的计算流图分割为至少两个子图,从而可以根据分割后的子图确定对应的数据处理逻辑,子图可以直接作为数据处理逻辑的图表达,使得数据处理逻辑的确定更加简单、直观。
可选地,在本申请的另一种实现方式中,步骤S204还可以包括:
分析所述中间代码并获取所述中间代码对应的至少两个计算类型;针对每个计算类型,确定当前计算类型与所述处理器匹配或者与所述异构加速匹配;根据匹配结果对所述中间代码进行分割,得到至少两个数据处理逻辑。
具体地,中间代码可能对应有多种计算类型,例如可以对应有单个数的加减乘除等,也可能对应有的向量转置、向量乘除等,具体地计算类型取决于源代码中定义的计算内容或计算流程。
由于处理器和异构加速器的结构等存在差异,导致两者适用的计算类型存在差异,因此,可以根据计算类型与处理器或者异构加速器的匹配结果进行分割。
具体进行匹配时,可以按照计算公式的顺序将所有计算公式的计算类型与处理器或者异构加速器匹配,匹配完成后,可以根据所有的匹配结果进行分割。
具体分割时,可以按照计算公式的顺序确定相连的但匹配结果不同的两个计算公式,并将两个公式进行分割。例如图2b所示,相连的两个计算公式计算2和计算3中,计算2的计算类型与处理器匹配,计算3的计算类型与异构加速器匹配,则可以确定需要将这两个计算公式进行分割。分割后的示意图可以如图2c所示。
另外需要说明的是,上述根据负载进行分割、通过对数据流图分析进行分割、根据计算类型进行分割三种方式可以同时使用。
具体地,可以通过对所述中间代码进行计算流图分析,以将所述中间代码对应的计算流图分割为至少两个子图。具体对计算流图进行分割时,可以将上述的处理器负载限度、异构加速器负载限度以及计算类型与处理器或者异构加速器的匹配关系均作为分割条件。例如,当子图中的计算类型均与处理器匹配,且子图中已经包括的负载符合处理器负载限度时,确定该子图分割完成;或者,可以根据构加速器负载限度,将至少两个被分割开的、计算类型与异构加速器匹配的计算公式组合,形成一个子图等。
此外,在上述分割逻辑的基础上,还可以增加并行分割逻辑,即通过分析中间代码确定可以并行执行的计算公式,并将其分割至不同的数据处理逻辑中,使得部分数据处理逻辑可以在处理器以及异构加速器上并行执行。
S206、确定对所述中间代码进行分割时的分割位置,并在分割位置增加通信逻辑。
通信逻辑用于不同代码部分之间的数据通信和交互,具体地,确定分割位置后,可以根据分割位置两侧数据处理逻辑的类型,以及分割位置对应的数据传递方向,确定增加的通信逻辑。例如,若分割位置第一端为第一数据处理逻辑,第二端为第二数据处理逻辑,数据传递方向为由第一端向第二端传递,则增加的通信逻辑可以为处理器发送至异构加速器的通信逻辑。本领域技术人员可以根据分割后的各个数据处理逻辑之间的具体情况为其配置适当的数据通信和交互方式。具体分割后的示意图可以如图2c所示,增加的通信逻辑为通信1。
S208、根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码,以及根据增加的通信逻辑编译得到用于处理器和异构加速器之间的进行通信的机器代码。
具体地,进行编译时,可以先将中间代码编译为可被编译器识别的计算代码,再通过编译器将计算代码编译得到可在所述处理器和所述异构加速器执行的机器代码。
另外,增加的通信逻辑同样可以通过中间代码表示,编译过程也可以同上,本发明实施例在此不再赘述。
可选地,本发明实施例中,异构系统可以为单机异构系统,即异构系统可以仅包括一个计算节点,计算节点上设置一组处理器和异构加速器;异构系统也可以为多机异构系统,异构系统中可以包括至少两个计算节点。
在多机异构系统中,所述处理器以及所述异构加速器设置在计算节点中,每个所述计算节点包括至少一个处理器和至少一个异构加速器,所述计算节点的数量为至少两个。
对应的,当异构系统为多机异构系统时,所述至少两个数据处理逻辑被分为多组,每组数据处理逻辑至少包括一个第一数据处理逻辑以及一个第二数据处理逻辑,每个计算节点被分配至少一组数据处理逻辑,其中,计算节点中的处理器执行被分配的各组数据处理逻辑中的第一数据处理逻辑,计算节点中的异构加速器执行被分配的各组数据处理逻辑中的第二数据处理逻辑。
本发明实施例中,通过对数据处理逻辑进行分组,可以使得其适配于多级异构系统,扩展了本方案的使用场景。
具体地,可以先将中间代码分分割多组,再将每组中的中间代码分割得到至少一个第一数据处理逻辑以及至少一个第二数据处理逻辑;也可以先将中间代码分割为至少两个数据处理逻辑,再根据分割后数据处理逻辑进行分组;本发明实施例对此不进行限定。
另外,在具体实现时,可以对中间代码进行数据流图分析,从而将数据流图分割为至少两个一级子图,每个一级子图可以对应一组数据处理逻辑;然后再对一级子图进行分割,得到至少两个二级子图,每个一级子图划分得到的二级子图至少包括一个第一子图以及一个第二子图,第一子图可以与第一数据处理逻辑对应,第二子图可以与第二数据处理逻辑对应。
由于异构系统中包括至少两个计算节点,因此,在分割位置增加的通信逻辑需要包括实现计算节点之间进行通信的通信逻辑,具体增加计算节点之间的通信逻辑的方法与上述步骤S206类似,在此不再赘述。编译得到机器代码时,同样需要根据增加的计算节点间的通信逻辑,编译得到用于实现计算节点间通信的机器代码。
进一步地,本发明实施例中,当异构系统包括至少两个计算节点时,步骤S208中的根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码包括:根据预设的调度逻辑,为所述中间代码的数据处理逻辑分配计算节点,以将所述中间代码编译为在分配的所述计算节点中的处理器和异构加速器执行的机器代码。通过为中间代码的数据处理逻辑分配计算节点,可以准确地确定适用于异构系统的至少两个计算节点的机器代码,并可以方便地对计算节点进行调度。
具体地,上述步骤S202-S208可以通过一个编译器实现,调度逻辑可以预设在编译器中,以通过一个高层编程语言编写的源代码和一个编译器,即可以得到能够在异构系统中的处理器和异构加速器上执行的机器代码。
本发明实施例提供的方案,通过将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。通过本发明实施例提供的方案,编程人员仅需要编写一份源代码,即可同时编译得到在处理器和异构加速器上执行的机器代码,无需针对处理器和异构加速器进行分别编写代码,简化了编程过程,降低了对编程人员的业务要求,提高了异构系统的开发效率;通过根据负载、计算类型等进行分割,可以使得分割得到的数据处理逻辑与处理器和异构加速器更加匹配,还可以实现异构系统的负载均衡。
本发明实施例的代码编译方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:移动终端(如平板电脑、手机等)、PC机和服务器。
实施例三
参照图3,示出了根据本发明实施例三的一种代码编译方法的步骤流程图。
本发明实施例以异构系统中包括一个主节点以及至少两个计算节点(计算节点1、计算节点2)、每个计算节点中包括处理器和异构加速器为例,对代码编译方法的应用过程进行说明。
本发明实施例的代码编译方法包括以下步骤:
S301、确定高层编程语言编写的源代码。
本实施例中,仅以高层语言编写的源代码为例,进行示例性说明,并不作为本申请的限定。
S302、将源代码中的负载源代码分割出来,并确定负载源代码限定的处理器负载限度以及异构加速器负载限度。
S303、将剩余的源代码转换中间代码。
S304、通过对中间代码进行数据流图分析,以处理器负载限度、异构加速器负载限度、计算类型的匹配结果等作为限制条件,对中间代码进行分割,得到至少两个数据处理逻辑,并在分割位置增加通信逻辑。
S305、根据至少两个数据处理逻辑,确定编译器可识别的计算中间代码。
S306、根据通信逻辑确定编译器可识别的通信中间代码。
S307、根据负载源代码确定编译器可识别的负载中间代码。
S308、根据编译器内的预设调度逻辑确定异构系统对应的调度中间代码。
S309、将计算中间代码进行编译,得到在至少两个计算节点的处理器和异构加速器上并行执行的计算机器代码。
S310、将通信中间代码进行编译,得到在至少两个计算节点的处理器和异构加速器上执行的通信机器代码。
其中,通信机器代码包括:计算节点与主节点间的通信机器代码、至少两个计算节点间的通信机器代码、以及各个计算节点内的处理器与异构加速器之间的通信机器代码。
S311、将负载中间代码进行编译,得到在至少两个计算节点的处理器和异构加速器上执行的负载机器代码。
其中,负载机器代码包括:处理器负载机器代码以及异构加速器负载机器代码。
S312、对调度中间代码进行编译,得到主节点和至少两个计算节点分别执行的调度机器代码。
S313、通过调度机器代码在主节点上拉起调度master,在计算节点上拉起调度client。
S314、通过调度client控制各个计算节点的处理器以及异构加速器执行计算机器代码;通过调度client控制节点内处理器和异构加速器之间的通信;以及通过调度client控制至少两个计算节点之间的通信。
S315、通过调度client将各个计算节点中处理器以及异构计算器上的当前负载上报至主节点;以及通过调度client确定各个计算节点被主节点分配的任务,并将任务分发至处理器和异构加速器。
本发明实施例提供的方案,通过将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。通过本发明实施例提供的方案,编程人员仅需要编写一份源代码,即可同时编译得到在处理器和异构加速器上执行的机器代码,无需针对处理器和异构加速器进行分别编写代码,简化了编程过程,降低了对编程人员的业务要求,提高了异构系统的开发效率。
本发明实施例的代码编译方法可以由任意适当的具有数据处理能力的电子设备执行,包括但不限于:移动终端(如平板电脑、手机等)、PC机和服务器。
实施例四
参照图4,示出了根据本发明实施例四的一种代码编译装置的结构框图。
如图4所示,代码编译装置包括:语言转换模块402、逻辑获取模块404、代码编译模块406。
其中,语言转换模块402,用于将源代码转换为中间代码。
逻辑获取模块404,用于获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑。
代码编译模块406,用于根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。
在一种可选的实施方式中,所述源代码中包括用于指示所述处理器负载限度和所述异构加速器负载限度的负载源代码,对应的,所述逻辑获取模块404具体用于:根据所述负载源代码指示的处理器负载限度和异构加速器负载限度,对所述中间代码分割,得到至少两个数据处理逻辑,其中,第一数据处理逻辑的负载与所述处理器负载限度匹配,第二数据处理逻辑的负载与所述异构加速器负载限度匹配。
在一种可选的实施方式中,所述逻辑获取模块404包括:图分析模块,用于对所述中间代码进行计算流图分析,以将所述中间代码对应的计算流图分割为至少两个子图,所述子图包括与所述处理器对应的第一子图以及与所述异构加速器对应的第二子图;图转化模块,用于根据所述至少两个子图确定所述中间代码的至少两个数据处理逻辑,其中,所述第一子图与所述第一数据处理逻辑对应,所述第二子图与所述第二处理逻辑对应。
在一种可选的实施方式中,所述逻辑获取模块404包括:类型分析模块,用于分析所述中间代码并获取所述中间代码对应的至少两个计算类型;匹配模块,用于针对每个计算类型,确定当前计算类型与所述处理器匹配或者与所述异构加速匹配;分割模块,用于根据匹配结果对所述中间代码进行分割,得到至少两个数据处理逻辑。
在一种可选的实施方式中,所述装置还包括:通信增加模块,用于确定对所述中间代码进行分割时的分割位置,并在分割位置增加通信逻辑。
在一种可选的实施方式中,所述处理器以及所述异构加速器设置在计算节点中,每个所述计算节点包括至少一个处理器和至少一个异构加速器,所述计算节点的数量为至少两个;所述至少两个数据处理逻辑被分为至少两组,每组数据处理逻辑至少包括一个第一数据处理逻辑以及一个第二数据处理逻辑,每个计算节点被分配至少一组数据处理逻辑,其中,计算节点中的处理器执行被分配的各组数据处理逻辑中的第一数据处理逻辑,计算节点中的异构加速器执行被分配的各组数据处理逻辑中的第二数据处理逻辑。
在一种可选的实施方式中,所述代码编译模块406具体用于:根据预设的调度逻辑,为所述中间代码的数据处理逻辑分配计算节点,以将所述中间代码编译为在分配的所述计算节点中的处理器和异构加速器执行的机器代码。
本发明实施例提供的代码编译方案,通过将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。通过本发明实施例提供的方案,编程人员仅需要编写一份源代码,即可同时编译得到在处理器和异构加速器上执行的机器代码,无需针对处理器和异构加速器进行分别编写代码,简化了编程过程,降低了对编程人员的业务要求,提高了异构系统的开发效率。
实施例五
本申请实施例提供一种异构系统,包括:处理器、异构加速器以及如上述实施例四所述的代码编译装置。
具体地,异构系统中可以包括至少两个计算节点,每个计算节点中可以包括至少一个处理器和至少一个异构加速器。
代码编译装置可以用于对源代码进行编译,得到在处理器和异构加速器执行的机器代码。
通过本发明实施例提供的方案,编程人员仅需要编写一份源代码,即可同时编译得到在处理器和异构加速器上执行的机器代码,无需针对处理器和异构加速器进行分别编写代码,简化了编程过程,降低了对编程人员的业务要求,提高了异构系统的开发效率。
实施例六
一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如上所述的代码编译方法对应的操作。
具体地,参照图5,示出了根据本发明实施例六的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图5所示,该电子设备可以包括:处理器(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。
其中:
处理器502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。
通信接口504,用于与其它电子设备或服务器进行通信。
处理器502,用于执行程序510,具体可以执行上述代码编译方法实施例中的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理器502可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路;处理器还可能是可编程门阵列(Field Programmable Gate Array,FPGA),图形处理器GPU,嵌入式神经网络处理器NPU等。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510具体可以用于使得处理器502执行以下操作:将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。
在一种可选的实施方式中,所述源代码中包括用于指示所述处理器负载限度和所述异构加速器负载限度的负载源代码,对应的,所述获取所述中间代码的至少两个数据处理逻辑包括:根据所述负载源代码指示的处理器负载限度和异构加速器负载限度,对所述中间代码分割,得到至少两个数据处理逻辑,其中,第一数据处理逻辑的负载与所述处理器负载限度匹配,第二数据处理逻辑的负载与所述异构加速器负载限度匹配。
在一种可选的实施方式中,所述获取所述中间代码的至少两个数据处理逻辑包括:对所述中间代码进行计算流图分析,以将所述中间代码对应的计算流图分割为至少两个子图,所述子图包括与所述处理器对应的第一子图以及与所述异构加速器对应的第二子图;根据所述至少两个子图确定所述中间代码的至少两个数据处理逻辑,其中,所述第一子图与所述第一数据处理逻辑对应,所述第二子图与所述第二处理逻辑对应。
在一种可选的实施方式中,所述获取所述中间代码的至少两个数据处理逻辑包括:分析所述中间代码并获取所述中间代码对应的至少两个计算类型;针对每个计算类型,确定当前计算类型与所述处理器匹配或者与所述异构加速匹配;
根据匹配结果对所述中间代码进行分割,得到至少两个数据处理逻辑。
在一种可选的实施方式中,还包括:确定对所述中间代码进行分割时的分割位置,并在分割位置增加通信逻辑。
在一种可选的实施方式中,所述处理器以及所述异构加速器设置在计算节点中,每个所述计算节点包括至少一个处理器和至少一个异构加速器,所述计算节点的数量为至少两个;所述至少两个数据处理逻辑被分为至少两组,每组数据处理逻辑至少包括一个第一数据处理逻辑以及一个第二数据处理逻辑,每个计算节点被分配至少一组数据处理逻辑,其中,计算节点中的处理器执行被分配的各组数据处理逻辑中的第一数据处理逻辑,计算节点中的异构加速器执行被分配的各组数据处理逻辑中的第二数据处理逻辑。
在一种可选的实施方式中,所述根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码包括:根据预设的调度逻辑,为所述中间代码的数据处理逻辑分配计算节点,以将所述中间代码编译为在分配的所述计算节点中的处理器和异构加速器执行的机器代码。
程序510中各步骤的具体实现可以参见上述代码编译方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
本发明实施例的电子设备,通过将源代码转换为中间代码;获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。通过本发明实施例提供的方案,编程人员仅需要编写一份源代码,即可同时编译得到在处理器和异构加速器上执行的机器代码,无需针对处理器和异构加速器进行分别编写代码,简化了编程过程,降低了对编程人员的业务要求,提高了异构系统的开发效率。
需要指出,根据实施的需要,可将本发明实施例中描述的各个部件/步骤分割为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本发明实施例的目的。
上述根据本发明实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的代码编译方法。此外,当通用计算机访问用于实现在此示出的代码编译方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的代码编译方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明实施例的范围。
以上实施方式仅用于说明本发明实施例,而并非对本发明实施例的限制,有关技术领域的普通技术人员,在不脱离本发明实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本发明实施例的范畴,本发明实施例的专利保护范围应由权利要求限定。
Claims (11)
1.一种代码编译方法,包括:
将源代码转换为中间代码;
获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;
根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。
2.根据权利要求1所述的方法,其中,所述源代码中包括用于指示所述处理器负载限度和所述异构加速器负载限度的负载源代码,对应的,所述获取所述中间代码的至少两个数据处理逻辑包括:
根据所述负载源代码指示的处理器负载限度和异构加速器负载限度,对所述中间代码分割,得到至少两个数据处理逻辑,其中,第一数据处理逻辑的负载与所述处理器负载限度匹配,第二数据处理逻辑的负载与所述异构加速器负载限度匹配。
3.根据权利要求1所述的方法,其中,所述获取所述中间代码的至少两个数据处理逻辑包括:
对所述中间代码进行计算流图分析,以将所述中间代码对应的计算流图分割为至少两个子图,所述子图包括与所述处理器对应的第一子图以及与所述异构加速器对应的第二子图;
根据所述至少两个子图确定所述中间代码的至少两个数据处理逻辑,其中,所述第一子图与所述第一数据处理逻辑对应,所述第二子图与所述第二处理逻辑对应。
4.根据权利要求1所述的方法,其中,所述获取所述中间代码的至少两个数据处理逻辑包括:
分析所述中间代码并获取所述中间代码对应的至少两个计算类型;
针对每个计算类型,确定当前计算类型与所述处理器匹配或者与所述异构加速匹配;
根据匹配结果对所述中间代码进行分割,得到至少两个数据处理逻辑。
5.根据权利要求2-4任一项所述的方法,其中,还包括:确定对所述中间代码进行分割时的分割位置,并在分割位置增加通信逻辑。
6.根据权利要求1所述的方法,其中,所述处理器以及所述异构加速器设置在计算节点中,每个所述计算节点包括至少一个处理器和至少一个异构加速器,所述计算节点的数量为至少两个;
所述至少两个数据处理逻辑被分为至少两组,每组数据处理逻辑至少包括一个第一数据处理逻辑以及一个第二数据处理逻辑,每个计算节点被分配至少一组数据处理逻辑,其中,计算节点中的处理器执行被分配的各组数据处理逻辑中的第一数据处理逻辑,计算节点中的异构加速器执行被分配的各组数据处理逻辑中的第二数据处理逻辑。
7.根据权利要求6所述的方法,其中,所述根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码包括:
根据预设的调度逻辑,为所述中间代码的数据处理逻辑分配计算节点,以将所述中间代码编译为在分配的所述计算节点中的处理器和异构加速器执行的机器代码。
8.一种代码编译装置,包括:
语言转换模块,用于将源代码转换为中间代码;
逻辑获取模块,用于获取所述中间代码的至少两个数据处理逻辑,其中,所述至少两个数据处理逻辑中包括:通过处理器执行的第一数据处理逻辑,和,通过异构加速器执行的第二数据处理逻辑;
代码编译模块,用于根据所述中间代码的数据处理逻辑,将所述中间代码编译为在所述处理器和所述异构加速器执行的机器代码。
9.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-7任一项所述的代码编译方法对应的操作。
10.一种计算机存储介质,其上存储有计算机程序,该程序被处理器执行时实现如权利要求1-7中任一项所述的代码编译方法。
11.一种异构系统,包括:处理器、异构加速器以及如上述权利要求8所述的代码编译装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911345168.5A CN113031954A (zh) | 2019-12-24 | 2019-12-24 | 代码编译方法、装置、电子设备、存储介质及异构系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911345168.5A CN113031954A (zh) | 2019-12-24 | 2019-12-24 | 代码编译方法、装置、电子设备、存储介质及异构系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113031954A true CN113031954A (zh) | 2021-06-25 |
Family
ID=76451672
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911345168.5A Pending CN113031954A (zh) | 2019-12-24 | 2019-12-24 | 代码编译方法、装置、电子设备、存储介质及异构系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113031954A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113721990A (zh) * | 2021-07-20 | 2021-11-30 | 北京比特大陆科技有限公司 | 数据处理方法、数据处理设备、加速卡和存储介质 |
CN116541018A (zh) * | 2023-06-19 | 2023-08-04 | 之江实验室 | 一种分布式模型编译系统、方法、装置、介质及设备 |
CN116974580A (zh) * | 2023-09-25 | 2023-10-31 | 之江实验室 | 多模态网络编译方法、系统和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101441569A (zh) * | 2008-11-24 | 2009-05-27 | 中国人民解放军信息工程大学 | 基于异构可重构体系结构面向任务流的新型编译方法 |
CN103858099A (zh) * | 2011-08-02 | 2014-06-11 | 国际商业机器公司 | 用于在异构计算机上编译和运行高级程序的技术 |
CN106325967A (zh) * | 2015-06-30 | 2017-01-11 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
CN110471670A (zh) * | 2019-08-20 | 2019-11-19 | 杭州和利时自动化有限公司 | 一种编译器、编译方法和追踪方法及dcs控制器 |
-
2019
- 2019-12-24 CN CN201911345168.5A patent/CN113031954A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101441569A (zh) * | 2008-11-24 | 2009-05-27 | 中国人民解放军信息工程大学 | 基于异构可重构体系结构面向任务流的新型编译方法 |
CN103858099A (zh) * | 2011-08-02 | 2014-06-11 | 国际商业机器公司 | 用于在异构计算机上编译和运行高级程序的技术 |
CN106325967A (zh) * | 2015-06-30 | 2017-01-11 | 华为技术有限公司 | 一种硬件加速方法、编译器以及设备 |
CN110471670A (zh) * | 2019-08-20 | 2019-11-19 | 杭州和利时自动化有限公司 | 一种编译器、编译方法和追踪方法及dcs控制器 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113721990A (zh) * | 2021-07-20 | 2021-11-30 | 北京比特大陆科技有限公司 | 数据处理方法、数据处理设备、加速卡和存储介质 |
CN116541018A (zh) * | 2023-06-19 | 2023-08-04 | 之江实验室 | 一种分布式模型编译系统、方法、装置、介质及设备 |
CN116541018B (zh) * | 2023-06-19 | 2023-09-15 | 之江实验室 | 一种分布式模型编译系统、方法、装置、介质及设备 |
US11934887B1 (en) | 2023-06-19 | 2024-03-19 | Zhejiang Lab | Distributed model compilation |
CN116974580A (zh) * | 2023-09-25 | 2023-10-31 | 之江实验室 | 多模态网络编译方法、系统和存储介质 |
CN116974580B (zh) * | 2023-09-25 | 2024-01-09 | 之江实验室 | 多模态网络编译方法、系统和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10579349B2 (en) | Verification of a dataflow representation of a program through static type-checking | |
CN113031954A (zh) | 代码编译方法、装置、电子设备、存储介质及异构系统 | |
CN111104120B (zh) | 神经网络编译方法、系统及相应异构计算平台 | |
CN106547520B (zh) | 一种代码路径分析方法及装置 | |
CN104536937A (zh) | 基于cpu-gpu异构集群的大数据一体机实现方法 | |
CN111860816A (zh) | 神经网络模型的编译方法、装置、设备及存储介质 | |
CN114461221A (zh) | 编译方法、编译装置、电子设备、存储介质 | |
US10564947B2 (en) | Computer system and method for multi-processor communication | |
CN110825380A (zh) | 核函数的生成方法、目标代码的生成方法和组合处理装置 | |
CN116484947B (zh) | 算子的自动生成方法、装置、设备及介质 | |
CN116560666B (zh) | 基于多层级代码生成的ai前端统一计算方法、装置及介质 | |
CN113168552A (zh) | 人工智能应用开发系统、计算机设备及存储介质 | |
CN113553054A (zh) | 基于异构系统的编译方法、装置、设备及存储介质 | |
US20120192168A1 (en) | Compiler device | |
CN105335135A (zh) | 数据处理方法和中心节点 | |
US20230116546A1 (en) | Method for compilation, electronic device and storage medium | |
CN115600664A (zh) | 算子处理方法、电子设备及存储介质 | |
US20210182041A1 (en) | Method and apparatus for enabling autonomous acceleration of dataflow ai applications | |
CN115329923A (zh) | 用于神经网络模型的编译方法和相关产品 | |
CN113626035A (zh) | 基于tvm面向risc-v设备的神经网络编译方法 | |
CN111857816A (zh) | 寄存器分配方法、装置、电子设备及计算机存储介质 | |
Frid et al. | Critical path method based heuristics for mapping application software onto heterogeneous MPSoCs | |
WO2023071509A1 (zh) | 模型编译方法、装置及模型运行系统 | |
CN115951936B (zh) | 向量化编译程序的芯片适配方法、装置、设备及介质 | |
CN115469931B (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 |