本申请涉及代码编译领域,尤其涉及一种编译优化方法、计算机设备和存储介质。
背景技术:
1、软件流水是一种代码编译的加速方法。目前,针对简单任务流场景可采用如双缓存(double buffer)机制的方式实现软件流水;然而,在针对复杂任务流场景下时,目前难以较好地实现软件流水,代码编译的效率较低。
技术实现思路
1、有鉴于此,本申请实施例提供了一种编译优化方法、计算机设备和存储介质,用以解决在复杂任务流场景下代码编译的效率较低的问题。
2、第一方面,本申请实施例提供了一种编译优化方法,包括:
3、获取源程序代码,其中,所述源程序代码至少包括两个不同处理类型的代码块;
4、基于所述处理类型确定所述代码块中指令之间的数据依赖关系;
5、根据所述数据依赖关系自动确定所述代码块的标签;
6、根据所述标签确定所述代码块之间的执行顺序,生成流水线。
7、如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述源程序代码的所述代码块至少包括:包含访存指令的代码块和包含计算指令的代码块,所述基于所述处理类型确定所述代码块中指令之间的数据依赖关系,包括:
8、分别确定所述访存指令和所述计算指令的数据移动方向,其中,所述访存指令的所述数据移动方向包括从第一存储空间到第二存储空间,所述计算指令的所述数据移动方向包括从所述第二存储空间到第三存储空间,所述访存指令的所述数据移动方向还包括从所述第三存储空间到所述第一存储空间;
9、根据所述数据移动方向确定所述访存指令和所述计算指令之间的所述数据依赖关系。
10、如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述根据所述数据依赖关系自动确定所述代码块的标签,包括:
11、若至少一个所述代码块中所述指令均是对同一个缓存空间进行数据读写,则根据所述数据依赖关系自动确定所述代码块的标签。
12、如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述根据所述标签确定所述代码块之间的执行顺序,生成流水线,包括:
13、当所述源程序代码包括n个所述处理类型的所述代码块时,根据所述标签确定所述代码块之间的执行顺序,生成至少两条、至多n条所述流水线,其中,n≥2,n为整数。
14、如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述源程序代码为一个循环体中包含的代码。
15、如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述方法还包括:
16、根据所述源程序代码中的所述代码块分配流水线内存;
17、将所述流水线内存乘以所述处理类型的类型数量得到总流水内存。
18、如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述源程序代码包括状态标识,所述方法还包括:
19、当所述状态标识为真时,所述流水线功能开启,并分配所述流水线的内存;
20、当所述状态标识为假时,所述流水线功能关闭。
21、如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述方法还包括:
22、将确定所述执行顺序的所述源程序代码编译为目标代码。
23、第二方面,本申请实施例提供了一种编译优化装置,包括:
24、获取模块,用于获取源程序代码,其中,所述源程序代码至少包括两个不同处理类型的代码块;
25、第一确定模块,用于基于所述处理类型确定所述代码块中指令之间的数据依赖关系;
26、第二确定模块,用于根据所述数据依赖关系自动确定所述代码块的标签;
27、第三确定模块,用于根据所述标签确定所述代码块之间的执行顺序,生成流水线。
28、进一步地,所述源程序代码的所述代码块至少包括:包含访存指令的代码块和包含计算指令的代码块,所述第一确定模块具体用于:
29、确定所述访存指令和所述计算指令的数据移动方向,其中,所述访存指令的所述数据移动方向包括从第一存储空间到第二存储空间,所述计算指令的所述数据移动方向包括从所述第二存储空间到第三存储空间,所述访存指令的所述数据移动方向还包括从所述第三存储空间到所述第一存储空间;
30、根据所述数据移动方向确定所述访存指令和所述计算指令之间的所述数据依赖关系。
31、进一步地,所述第二确定模块具体用于:
32、若至少一个所述代码块中所述指令均是对同一个缓存空间进行数据读写,则根据所述数据依赖关系自动确定所述代码块的标签。
33、进一步地,所述第三确定模块具体用于:
34、当所述源程序代码包括n个所述处理类型的所述代码块时,根据所述标签确定所述代码块之间的执行顺序,生成至少两条、至多n条所述流水线,其中,n≥2,n为整数。
35、进一步地,所述源程序代码为一个循环体中包含的代码。
36、进一步地,该编译优化方法还包括:
37、根据所述源程序代码中的所述代码块分配流水线内存;
38、将所述流水线内存乘以所述处理类型的类型数量得到总流水内存。
39、进一步地,所述源程序代码包括状态标识,该编译优化方法还包括:
40、当所述状态标识为真时,所述流水线功能开启,并分配所述流水线的内存;
41、当所述状态标识为假时,所述流水线功能关闭。
42、进一步地,该编译优化方法还包括:
43、将确定所述执行顺序的所述源程序代码编译为目标代码。
44、第三方面,本申请实施例提供一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,所述处理器执行所述计算机可读指令时执行如第一方面所述编译优化方法的步骤。
45、第四方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,所述计算机可读指令被处理器执行时实现如第一方面所述编译优化方法的步骤。
46、在本申请实施例中,首先获取至少包括两个不同处理类型的代码块的源程序代码,并基于代码块的处理类型确定代码块中指令之间的数据依赖关系,以从指令本身出发对代码块中指令间的数据依赖关系进行分析及确认,然后根据数据依赖关系自动确定代码块的标签,以对代码块进行自动分类,最后根据标签确定代码块之间的执行顺序,生成流水线,能够根据分类好的标签确定流水上各代码块之间的流水顺序,能够在复杂任务流场景下提高代码编译的效率。
1.一种编译优化方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述源程序代码的所述代码块至少包括:包含访存指令的代码块和包含计算指令的代码块,所述基于所述处理类型确定所述代码块中指令之间的数据依赖关系,包括:
3.根据权利要求1所述的方法,其特征在于,所述根据所述数据依赖关系自动确定所述代码块的标签,包括:
4.根据权利要求1所述的方法,其特征在于,所述根据所述标签确定所述代码块指令之间的执行顺序,生成流水线,包括:
5.根据权利要求1所述的方法,其特征在于,所述源程序代码为一个循环体中包含的代码。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
7.根据权利要求1所述的方法,其特征在于,所述源程序代码包括状态标识,所述方法还包括:
8.根据权利要求1-7任一项所述的方法,其特征在于,所述方法还包括:
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机可读指令,其特征在于,所述处理器执行所述计算机可读指令时执行如权利要求1-8任一项所述编译优化方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,其特征在于,所述计算机可读指令被处理器执行时实现如权利要求1-8任一项所述编译优化方法的步骤。
