本技术涉及计算机,尤其涉及一种代码处理方法、装置及相关设备。
背景技术:
1、代码优化是指对程序代码进行等价变换,在不改变程序运行结果的前提下对程序代码进行变换,变换后的代码的运行结果与变换前的源代码的运行结果相同,但变换后的代码运行效率更高、计算系统利用率更高或者运行时占用空间更小等。但是当前的代码优化技术,需要在运行源代码的过程中,通过采样的方式收集源代码的性能热点,针对性能热点对程序代码进行优化。通常代码的性能热点是计算模式对应的代码段,因此识别代码的计算模式是对代码进行优化的关键步骤。但是上述运行源代码的过程中通过采样的方法确定性能热点会引入采样的时间开销,对于运行时间较长的应用,还会增加分析和调优的时间成本。因此,如何提高代码中计算模式的识别效率是一个亟待解决的技术问题。
技术实现思路
1、本技术提供一种代码处理方法、装置及相关设备,能够在不运行源代码的情况下识别源代码中包括的计算模式,提高对源代码中计算模式进行识别的效率,进而能够基于识别的计算模式对源代码进行优化。
2、第一方面,本技术提供一种代码处理方法,包括:计算设备获取源代码,根据计算模式模板集识别源代码中各个代码段的计算模式,该计算模式模板集包括根据每种计算模式编写的每种计算模式对应的一系列规则;对于各个代码段中根据计算模式模板集不能识别出计算模式的待识别代码段,计算设备通过逻辑分析识别待识别代码段的计算模式;然后提取各个代码段的模式信息,提取的模式信息包括数据流特征、计算规则特征、控制流特征、存储格式特征或通信操作特征中的任意一种或多种。
3、通过上述计算模式识别方法,能够在不运行源代码的情况下,识别出源代码中多个代码段的计算模式,避免运行源代码带来的时间开销,从而提高对代码中计算模式的识别效率。计算设备在对源代码中多个代码段的计算模式进行识别时,先通过识别效率高的模板匹配的方式进行识别,提高计算模式识别的效率;而对模板匹配不能识别出计算模式的代码段,再通过识别准确性高的逻辑分析的方法进行识别,提高能够识别出计算模式的代码段的数量,从而有利于后续对源代码的处理。例如能够用于对源代码的优化,上述方法能够通过源代码识别出通常为应用热点的计算模式对应的代码段,不需要在编译的过程中对代码进行优化,从而能够提高对代码的调试或调优效率。并且源代码中识别出计算模式的代码量越多,源代码中能够优化的代码量就越多,对源代码进行优化后的效果越好。
4、在一种可能的实现方式中,上述通过逻辑分析识别待识别代码段的计算模式之前,还包括:计算设备输出提示信息,该提示信息用于指示用户根据对第一待识别代码段进行修改,该第一待识别代码段是待识别代码段中的任意一个;计算设备获取用户修改后的第一待识别代码段,并根据计算模式模板集识别用户修改后的第一待识别代码段的计算模式;在根据计算模式模板集没有识别出第一待识别代码段的计算模式的情况下,再通过逻辑分析识别第一待识别代码段的计算模式。
5、在通过计算模式模板集没有识别出一个代码段的计算模式时,可能的原因是该代码段中能够与计算模式模板集中的模板匹配的特征较少,导致计算设备无法确认该代码段的计算模式。计算设备能够输出提示信息,提示用户该代码段不能通过模板匹配的方式进行识别,用户能够对该代码段进行修改,以使计算设备能够提取更多该代码段的特征进行模板匹配。
6、应理解,每种计算模式对应的规则即为该计算模式对应的模板,不同计算模式的模板包括该计算模式的模式信息;在基于计算模式模板集识别第一代码段的计算模式时,计算设备先提取第一代码段的模式信息,将提取的第一代码段的模式信息与计算模式模板集中各种计算模式的模板进行匹配。
7、在一种可能的实现方式中,上述通过逻辑分析识别待识别代码段的计算模式,包括:计算设备对上述待识别代码段中的第一待识别代码段生成一个符合第一计算模式特征的模板,其中,第一计算模式是第一待识别代码段的预测模式;计算设备为上述模板构建针对该模板的待定参数的解空间,解空间的范围内确定待定参数的候选解;当候选解能够表达第一计算模式的语义的情况下,确定第一计算模式是上述第一待识别代码段的计算模式。
8、对模板匹配不能识别出计算模式的代码段,通过识别准确性高的逻辑分析的方法进行识别,能够增加源代码中识别出计算模式的代码段的数量,例如在根据代码段的计算模式对源代码进行优化时,能够增加源代码中能够优化的代码量。
9、在一种可能的实现方式中,上述通过逻辑分析识别待识别代码段的计算模式之前,还包括:计算设备根据计算模式模板集确定上述第一待识别代码段的预测模式。
10、在根据计算模式模板集识别各个代码段的计算模式时,在不能确定一个代码段的计算模式时,能够预测该代码段的计算模式,以便后续通过逻辑分析识别计算模式。
11、在一种可能的实现方式中,上述在提取第一代码段的模式信息之后,该方法还包括:计算设备根据第一代码段的模式信息生成第一代码段的模式层中间表达,该模式层中间表达是根据计算模式设计的一种中间表达;计算设备确定第一代码段的计算模式在模式层对应的优化方法中,能够用于第一代码段的一种或多种第一类候选优化方法,该一种或多种第一类候选优化方法用于在模式层对第一代码段进行优化。
12、计算设备根据识别第一代码段的计算模式的方法识别出源代码中各个代码段的计算模式,并提取各个代码段的模式信息之后,通过设计代码对应的模式层中间表达,能够准确的表达计算模式的模式信息与特征,使计算设备能够确定更多的优化机会和方法,进而对第一代码段进行优化,使得对源代码的优化更加彻底,更好的提高被优化后的代码的性能。
13、在一种可能的实现方式中,计算设备确定第一代码段在模式层对应的第一类候选优化方法之后,上述方法还包括:计算设备根据第一代码段的模式层中间表达生成第一代码段的元素层中间表达,元素层中间表达兼容多级中间表示(multi-level intermediaterepresentation,mlir),且支持矩阵、标量、控制流、仿射变化中的一种或多种;计算设备确定第一代码段的计算模式在模式层对应的优化方法中,能够用于第一代码段的一种或多种第二类候选优化方法,该一种或多种第二类候选优化方法用于在元素层对第一代码段进行优化。
14、在一种可能的实现方式中,计算设备在确定第一代码段在模式层对应的第二类候选优化方法之后,上述方法还包括:计算设备根据第一代码段的元素层中间表达生成第一代码段的硬件层中间表达,该硬件层中间表达兼容用于抽象系统、硬件的高性能数据结构、计算、访存和通信操作;计算设备确定第一代码段的计算模式在硬件层对应的优化方法中,能够用于第一代码段的一种或多种第三类候选优化方法,该一种或多种第三类候选优化方法用于在硬件层对第一代码段进行优化。
15、计算设备在确定第一代码段在模式层的优化方法之后,将第一代码段转换为硬件层中间表达,能够准确的表达不同硬件的关键信息与特征,使计算设备能够确定更多的优化机会和方法,进而对第一代码段进行优化,使得对源代码的优化更加彻底,更好的提高被优化后的代码的性能和可移植性。
16、在一种可能的实现方式中,计算设备在确定第一代码段在模式层、元素层和硬件层能够使用的优化方法之后,上述方法还包括:计算设备根据上述一种或多种第一类候选优化方法、一种或多种第二类候选优化方法以及一种或多种第三类候选优化方法,得到一种或多种组合优化方法;其中,每种组合优化方法包括一种第一类候选方法、一种第二类候选优化方法以及一种第三类候选优化方法;计算设备对一种或多种组合优化方法进行评分,得到各种组合优化方法对应的评分,将评分最高的组合优化方法确定为对第一代码段进行优化的目标组合优化方法。
17、第一代码段在模式层、元素层和硬件层分别能够用不同的优化方式进行优化,通过组合能够得到多种组合优化方法,对多种组合优化方法进行评分,能够得到不同组合优化方法在对第一代码段进行优化后,第一代码段的性能的提升程度,能够使用户根据需要选择组合优化方法对第一代码段进行优化。
18、在一种可能的实现方式中,上述对一种或多种组合优化方法进行评分,包括:根据用户选择的优化策略对组合优化方法进行评分,其中,优化策略包括运行速度优先、计算资源利用率优先或内存利用率优先。
19、用户对应用的运行有不同的需求,计算设备根据用户的优化策略对多种组合优化方法进行评分,能够使最终得到的组合优化方法更符合用户的实际需求。例如,用户需要源代码在优化后运行速度更快,则计算设备在对各种组合优化方法进行评分时,一种组合优化方法对源代码进行优化后的代码的运行速度越快,该组合优化方法的评分也就越高。
20、在一种可能的实现方式中,计算设备能够不用将第一代码段转换为模式层中间表达,并确定第一代码段在模式层对应的第一类候选优化方法之后,再将模式层中间表达转换为元素层中间表达。计算设备能够根据第一代码段的模式信息生成第一代码段的元素层中间表达;然后确定第一代码段的计算模式在模式层对应的优化方法中,能够用于第一代码段的一种或多种候选优化方法,该一种或多种候选优化方法用于对第一代码段进行优化。
21、在一种可能的实现方式中,计算设备能够不用将第一代码段转换为模式层中间表达和元素层中间表达,并确定第一代码段在模式层和元素层对应的候选优化方法之后,再将第一代码段转换为元素层中间表达。计算设备能够根据第一代码段的模式信息生成第一代码段的硬件层中间表达;然后确定第一代码段的计算模式在硬件层对应的优化方法中,能够用于第一代码段的一种或多种候选优化方法,上述一种或多种候选优化方法用于对第一代码段进行优化。
22、在一种可能的实现方式中,计算设备在提取出各个代码段的模式信息之后,还包括:计算设备根据各个代码段的模式信息生成目标编译器对应的中间表达;将目标编译器对应的中间表达输入至目标编译器进行编译,生成源代码对应的可执行文件。
23、第二方面,本技术提供一种代码处理装置,包括:分析模块:用于获取源代码,根据计算模式模板集识别源代码中各个代码段的计算模式,该计算模式模板集包括根据每种计算模式编写的每种计算模式对应的一系列规则;对于各个代码段中根据计算模式模板集不能识别出计算模式的待识别代码段,通过逻辑分析识别待识别代码段的计算模式;提取模块,用于提取各个代码段的模式信息,提取的模式信息包括数据流特征、计算规则特征、控制流特征、存储格式特征或通信操作特征中的任意一种或多种。
24、在一种可能的实现方式中,上述分析模块还用于:在没有通过计算模式模板集识别出部分代码段的计算模式时,输出提示信息,该提示信息用于指示用户根据对第一待识别代码段进行修改,该第一待识别代码段是所上述待识别代码段中的任意一个;获取用户修改后的第一待识别代码段,并根据计算模式模板集识别用户修改后的第一待识别代码段的计算模式;在根据计算模式模板集没有识别出第一待识别代码段的计算模式的情况下,通过逻辑分析识别第一待识别代码段的计算模式。
25、在一种可能的实现方式中,上述分析模块用于通过逻辑分析识别待识别代码段的计算模式,具体包括:对上述待识别代码段中的第一待识别代码段生成一个符合第一计算模式特征的模板,其中,第一计算模式是第一待识别代码段的预测模式;为上述模板构建针对该模板的待定参数的解空间,解空间的范围内确定待定参数的候选解;当候选解能够表达第一计算模式的语义的情况下,确定第一计算模式是上述第一待识别代码段的计算模式。
26、在一种可能的实现方式中,上述分析模块通过逻辑分析识别待识别代码段的计算模式之前,分析模块还用于根据计算模式模板集确定上述第一待识别代码段的预测模式。
27、在一种可能的实现方式中,上述分析模块在提取第一代码段的模式信息之后,分析模块还用于:根据第一代码段的模式信息生成第一代码段的模式层中间表达,该模式层中间表达是根据计算模式设计的一种中间表达;确定第一代码段的计算模式在模式层对应的优化方法中,能够用于第一代码段的一种或多种第一类候选优化方法,该一种或多种第一类候选优化方法用于在模式层对第一代码段进行优化。
28、在一种可能的实现方式中,分析模块在确定第一代码段在模式层对应的第一类候选优化方法之后,分析模块还用于:根据第一代码段的模式层中间表达生成第一代码段的元素层中间表达,元素层中间表达兼容多级中间表示(multi-level intermediaterepresentation,mlir),且支持矩阵、标量、控制流、仿射变化中的一种或多种;确定第一代码段的计算模式在模式层对应的优化方法中,能够用于第一代码段的一种或多种第二类候选优化方法,该一种或多种第二类候选优化方法用于在元素层对第一代码段进行优化。
29、在一种可能的实现方式中,分析模块在确定第一代码段在模式层对应的第二类候选优化方法之后,分析模块还用于:根据第一代码段的元素层中间表达生成第一代码段的硬件层中间表达,该硬件层中间表达兼容用于抽象系统、硬件的高性能数据结构、计算、访存和通信操作;确定第一代码段的计算模式在硬件层对应的优化方法中,能够用于第一代码段的一种或多种第三类候选优化方法,该一种或多种第三类候选优化方法用于在硬件层对第一代码段进行优化。
30、在一种可能的实现方式中,分析模块在确定第一代码段在模式层、元素层和硬件层能够使用的优化方法之后,分析模块还用于:根据上述一种或多种第一类候选优化方法、一种或多种第二类候选优化方法以及一种或多种第三类候选优化方法,得到一种或多种组合优化方法;其中,每种组合优化方法包括一种第一类候选方法、一种第二类候选优化方法以及一种第三类候选优化方法;对一种或多种组合优化方法进行评分,得到各种组合优化方法对应的评分,将评分最高的组合优化方法确定为对第一代码段进行优化的目标组合优化方法。
31、在一种可能的实现方式中,分析模块具体用于:根据用户选择的优化策略对组合优化方法进行评分,其中,优化策略包括运行速度优先、计算资源利用率优先或内存利用率优先。
32、在一种可能的实现方式中,分析模块能够不用将第一代码段转换为模式层中间表达,并确定第一代码段在模式层对应的第一类候选优化方法之后,再将模式层中间表达转换为元素层中间表达。分析模块能够根据第一代码段的模式信息生成第一代码段的元素层中间表达;然后确定第一代码段的计算模式在模式层对应的优化方法中,能够用于第一代码段的一种或多种候选优化方法,该一种或多种候选优化方法用于对第一代码段进行优化。
33、在一种可能的实现方式中,分析模块能够不用将第一代码段转换为模式层中间表达和元素层中间表达,并确定第一代码段在模式层和元素层对应的候选优化方法之后,再将第一代码段转换为元素层中间表达。分析模块能够根据第一代码段的模式信息生成第一代码段的硬件层中间表达;然后确定第一代码段的计算模式在硬件层对应的优化方法中,能够用于第一代码段的一种或多种候选优化方法,上述一种或多种候选优化方法用于对第一代码段进行优化。
34、在一种可能的实现方式中,分析模块在提取出各个代码段的模式信息之后,分析模块还用于根据各个代码段的模式信息生成目标编译器对应的中间表达;
35、上述代码处理装置还包括编译模块,用于将目标编译器对应的中间表达输入至目标编译器进行编译,生成源代码对应的可执行文件。
36、第三方面,本技术提供一种计算设备,包括处理器和存储器;所述存储器用于存储指令,所述处理器用于执行所述指令,当所述处理器执行所述指令时,所述处理器执行如第一方面或第一方面任一种可能实现方式中的代码处理方法。
37、第四方面,本技术提供一种计算机集群,该计算机集群包括至少一个计算设备,每个计算设备包括处理器和存储器;所述至少一个计算设备的处理器用于执行所述至少一个计算设备的存储器中存储的指令,以使得所述计算设备集群执行如上述第一方面或第一方面任一可能的实现方式中所述的代码处理方法。
38、第五方面,本技术提供了一种计算机程序产品,当该计算机程序产品在计算设备上运行时,使得计算设备执行第一方面或第一方面任一种可能实现方式中的代码处理方法。
39、第六方面,本技术提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当所述指令在计算设备上运行时,使得计算设备执行第一方面或第一方面任一种可能实现方式中的代码处理方法。
1.一种代码处理方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述通过逻辑分析识别所述待识别代码段的计算模式之前,还包括:
3.根据权利要求1或2所述的方法,其特征在于,所述通过逻辑分析识别所述待识别代码段的计算模式,包括:
4.根据权利要求3所述的方法,其特征在于,所述通过逻辑分析识别所述待识别代码段的计算模式之前,还包括:根据计算模式模板集确定所述第一待识别代码段的预测模式。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
9.根据权利要求8所述的方法,其特征在于,所述对所述一种或多种组合优化方法进行评分,包括:
10.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
11.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
12.根据权利要求1-4任一项所述的方法,其特征在于,所述方法还包括:
13.一种代码处理装置,其特征在于,包括:
14.根据权利要求13所述的装置,其特征在于,所述分析模块还用于:
15.根据权利要求13或14所述的装置,其特征在于,所述分析模块具体用于:
16.根据权利要求15所述的装置,其特征在于,分析模块还用于根据计算模式模板集确定所述第一待识别代码段的预测模式。
17.根据权利要求13-16所述的装置,其特征在于,所述分析模块还用于:
18.根据权利要求17所述的装置,其特征在于,所述分析模块还用于:
19.根据权利要求18所述的装置,其特征在于,所述分析模块还用于:
20.根据权利要求19所述的装置,其特征在于,所述分析模块还用于:
21.根据权利要求20所述的装置,其特征在于,所述分析模块具体用于:
22.根据权利要求13-16任一项所述的装置,其特征在于,所述分析模块还用于:
23.根据权利要求13-16任一项所述的装置,其特征在于,所述分析模块还用于:
24.根据权利要求13-16任一项所述的装置,其特征在于,
25.一种计算设备,其特征在于,包括处理器和存储器;所述存储器用于存储指令,所述处理器用于执行所述指令,当所述处理器执行所述指令时,执行如权利要求1至12任一项所述的方法。
26.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时,所述处理器执行如权利要求1至12任一项所述的方法。