本技术涉及计算机,尤其涉及一种编译方法及装置。
背景技术:
1、粗粒度可重构计算架构(coarse-grained reconfigurable architecture,cgra),是一种空域上的并行计算模式,以空域的硬件结构组织不同粒度和不同功能的计算资源。cgra在运行时可以根据数据流的特点,让cgra配置的硬件资源互连形成相对应的计算通路,该计算通路可以认为是特定任务的“专用电路”;当待执行的算法数据流变化时,可以再次配置cgra中的硬件资源以形成相对应的计算通路,以使不同的算法数据流可以在cgra上执行。
2、cgra可以配合处理器进行使用。如图1所示,电子设备中部署有处理器和cgra时,处理器在执行循环代码对应的二进制文件时,需要多次执行重复的数据运算,会导致处理器耗费大量算力;为了减轻处理器的负担,处理器可以将循环代码对应的二进制文件配置到cgra上运行。然而,若循环代码为多层循环的循环代码时,由于多层循环存在多种变化形式以及cgra的架构约束原因,多层循环的数据流在cgra上运行存在功能与性能的问题。
3、因此,如何提升多层循环的循环代码的运行效率,是亟需解决的技术问题。
技术实现思路
1、本技术提供一种编译方法及装置,用于提升多层循环的循环代码的运行效率。
2、第一方面,本技术实施例提供了一种编译方法,该方法可由编译装置执行。为了便于描述,以编译器执行该编译方法为例进行说明。该编译方法包括:将多层循环的第一循环代码转换为单层循环的第二循环代码;将第二循环代码编译为数据流图dfg;将第二循环代码涉及的数据编译为数据描述表,数据描述表包括第二循环代码对应的循环运算的迭代次数和变量数据;基于dfg图和数据描述表,生成二进制文件;二进制文件在可重构计算阵列上被执行。
3、在本技术实施例中,通过将多层循环的第一循环代码转换为单层循环的第二循环代码,并生成第二循环代码的二进制文件,且该二进制文件在可重构计算阵列上被执行,可以有效提升多层循环的循环代码的运行效率。并且,多层循环的循环代码的二进制文件在可重构计算阵列上被执行,可以减少cpu的算力消耗。
4、在一种可能的设计中,将多层循环的第一循环代码转换为单层循环的第二循环代码,包括:对第一循环代码中的分支条件指令和/或多维数组进行转换,得到第二循环代码。在该设计中,通过对第一循环代码中的分支条件指令和/或多维数组进行转换,就可以实现将多层循环的代码转换为单层循环的代码,从而有助于提升代码的运行效率。
5、在一种可能的设计中,对多层循环的第一循环代码中的分支条件指令和/或多维数组进行转换,得到第二循环代码包括:将第一循环代码中的分支条件指令转换为select指令;和/或,对第一循环代码中的多维数组进行降维处理,得到一维数组;基于select指令和/或一维数组,得到第二循环代码。在该设计中,提供了对第一循环代码中的分支条件指令和/或多维数组的处理方式,使得多层循环的第一循环代码可以从多层循环转变成单层循环的第二循环代码。
6、在一种可能的设计中,对第一循环代码中的多维数组进行降维处理,得到一维数组包括:对多维数组中的第一变量进行除法运算,以及对多维数组中的第二变量进行求余运算,得到一维数组中的第三变量。在该设计中,通过对多维数组中的变量进行除法运算和求余运算,可以将多维数组转换成一维数组。
7、在一种可能的设计中,上述方法还包括:评估二进制文件在处理器上运行需求的第一算力;评估二进制文件在可重构计算阵列上运行需求的第二算力;二进制文件在可重构计算阵列上被执行包括:在第一算力大于第二算力时,二进制文件在可重构计算阵列上被执行;或者,在第一算力小于第二算力时,二进制文件在处理器上被执行。在该设计中,可以评估二进制文件在处理器和可重构计算阵列上运行需求的算力,并选择算力需求较小的那个来执行二进制文件。
8、在一种可能的设计中,评估二进制文件在处理器上运行需求的第一算力,包括:根据第二循环代码的指令延迟,评估第一算力;其中,指令延迟根据第一循环代码中的指令数量、循环层数和循环次数确定。在该设计中,提供了评估二进制文件在处理器上运行所需求算力的具体方式。
9、在一种可能的设计中,评估二进制文件在可重构计算阵列上运行需求的第二算力,包括:根据dfg图映射到可重构计算阵列的开销、在处理器与可重构计算阵列之间传输数据描述表的通信开销、可重构计算阵列执行二进制文件的开销,确定第二算力。在该设计中,提供了评估二进制文件在可重构计算阵列上运行所需求算力的具体方式。
10、在一种可能的设计中,基于dfg图和数据描述表,生成二进制文件,包括:构建第一函数;第一函数与dfg图和数据描述表存在关联关系;该关联关系为第一函数、dfg图和数据描述表均关联第一标识;第一标识根据第一循环代码的文件路径、文件名、所处的函数名、和所处的函数名中的位置序号至少一项确定;对第一函数进行编译,生成二进制文件。在该设计中,可以生成与dfg图和数据描述表存在关联关系的第一函数,并且第一函数、dfg图和数据描述表均关联第一标识,使得编译器对第一函数进行编译可以生成第二循环代码对应的二进制文件。
11、在一种可能的设计中,第一函数包括固定参数和/或可变参数;固定参数用于描述第一循环代码的第一信息,可变参数用于描述第一循环代码的变量信息;其中,第一信息包括以下至少一项:第一标识、循环运行的次数、或循环涉及的变量数据个数。
12、在一种可能的设计中,对第一函数进行编译之前,该方法还包括:评估二进制文件在处理器上运行需求的第一算力;评估二进制文件在可重构计算阵列上运行需求的第二算力;在第一算力大于第二算力时,利用第一函数替换第一循环代码。在该设计中,二进制文件在处理器上运行需求的第一算力大于二进制文件在可重构计算阵列上运行需求的第二算力时,利用第一函数替换第一循环代码,即删除第一循环代码,使得编译器可以对第一函数进行编译,进而避免编译器对第一循环代码进行无效的编译。
13、在一种可能的设计中,在将多层循环的第一循环代码转换为单层循环的第二循环代码之前,该方法还包括:获取第一标记,该第一标记用于指示将第一循环代码的二进制文件在可重构计算阵列上执行。在该设计中,编译器还可以根据第一标记判断第一循环代码的二进制文件是否需要在可重构计算阵列上执行。
14、第二方面,本技术实施例提供一种编译装置,该编译装置可以为上述第一方面中的编译器,或者为运行编译器的电子设备(例如,芯片系统)。该编译装置包括用于执行上述第一方面或任一可选的实施方式的相应的手段(means)或模块。例如,该编译装置包括第一处理模块和第二处理模块;其中,第一处理模块用于:将多层循环的第一循环代码转换为单层循环的第二循环代码;以及将第二循环代码编译为数据流图dfg;将第二循环代码涉及的数据编译为数据描述表,数据描述表包括第二循环代码对应的循环运算的迭代次数和变量数据;第二处理模块,用于基于dfg图和数据描述表,生成二进制文件;该二进制文件在可重构计算阵列上被执行。
15、第三方面,本技术实施例提供一种计算设备,包括:处理器和可重构计算阵列,所述处理器与存储器耦合,所述存储器用于存储指令,当所述指令被所述处理器执行时,使得所述编译装置执行如第一方面以及第一方面任一可选的设计中所述的方法。
16、第四方面,本技术实施例提供一种芯片系统,该芯片系统包括:处理器和接口。其中,该处理器用于从该接口调用并运行指令,当该处理器执行该指令时,实现上述第一方面以及第一方面任一可选的设计中所述的方法。
17、第五方面,本技术实施例提供一种计算机可读存储介质,该计算机可读存储介质用于存储计算机程序或指令,当其被运行时,实现上第一方面以及第一方面任一可选的设计中所述的方法。
18、第六方面,本技术实施例提供一种包含指令的计算机程序产品,当其在计算机上运行时,实现上述第一方面以及第一方面任一可选的设计中所述的方法。
19、关于上述第二方面至第六方面中任一技术方案的有益效果,可参照第一方面中的对应技术方案的有益效果论述,重复之处此处不再列举。
1.一种编译方法,其特征在于,所述方法包括:
2.如权利要求1所述的方法,其特征在于,将多层循环的第一循环代码转换为单层循环的第二循环代码,包括:
3.如权利要求1或2所述的方法,其特征在于,对所述多层循环的第一循环代码中的分支条件指令和/或多维数组进行转换,包括:
4.如权利要求3所述的方法,其特征在于,对所述第一循环代码中的多维数组进行降维处理,得到一维数组包括:
5.如权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
6.如权利要求5所述的方法,其特征在于,评估所述二进制文件在处理器上运行需求的第一算力,包括:
7.如权利要求5所述的方法,其特征在于,评估所述二进制文件在所述可重构计算阵列上运行需求的第二算力,包括:
8.如权利要求1-7任一项所述的方法,其特征在于,基于所述dfg图和所述数据描述表,生成二进制文件,包括:
9.如权利要求8所述的方法,其特征在于,所述第一函数包括固定参数和/或可变参数;所述固定参数用于描述第一循环代码的第一信息,所述可变参数用于描述第一循环代码的变量信息;
10.如权利要求8或9所述的方法,其特征在于,对所述第一函数进行编译之前,所述方法还包括:
11.如权利要求1-10任一项所述的方法,其特征在于,在将多层循环的第一循环代码转换为单层循环的第二循环代码之前,所述方法还包括:
12.一种编译装置,其特征在于,包括用于执行如权利要求1至11中的任一项所述方法的模块。
13.一种计算设备,其特征在于,包括:处理器和可重构计算阵列,所述处理器与存储器耦合,所述存储器用于存储指令,当所述指令被所述处理器执行时,使得所述编译装置执行如权利要求1至11中任一项所述的方法。
14.一种计算机可读存储介质,其特征在于,所述存储介质中存储有计算机程序或指令,当所述计算机程序或指令被通信装置执行时,实现如权利要求1至11中任一项所述的方法。