CN116185426B - 一种基于代码融合的编译优化方法、系统及电子设备 - Google Patents

一种基于代码融合的编译优化方法、系统及电子设备 Download PDF

Info

Publication number
CN116185426B
CN116185426B CN202310402545.4A CN202310402545A CN116185426B CN 116185426 B CN116185426 B CN 116185426B CN 202310402545 A CN202310402545 A CN 202310402545A CN 116185426 B CN116185426 B CN 116185426B
Authority
CN
China
Prior art keywords
kernel
code
dependency
graph
nodes
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
CN202310402545.4A
Other languages
English (en)
Other versions
CN116185426A (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.)
Peking University
Original Assignee
Peking University
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 Peking University filed Critical Peking University
Priority to CN202310402545.4A priority Critical patent/CN116185426B/zh
Publication of CN116185426A publication Critical patent/CN116185426A/zh
Application granted granted Critical
Publication of CN116185426B publication Critical patent/CN116185426B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/453Data distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/10Interfaces, programming languages or software development kits, e.g. for simulating neural networks
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Mathematical Physics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请涉及一种基于代码融合的编译优化方法、系统及电子设备。所述方法包括:针对包含有主机代码和内核代码的异构源程序,分别用编译器对主机代码和内核代码进行编译,得到分别与主机代码和内核代码对应的第一中间表示和第二中间表示;基于第一中间表示依次创建主机代码的控制流图和数据流图,基于第二中间表示依次创建内核代码的控制流图和数据流图;将主机代码的控制流图和内核代码的控制流图融合,将主机代码的数据流图和内核代码的数据流图融合,得到异构源程序的全局细粒度依赖关系图;针对异构源程序的全局细粒度依赖关系图中的多个内核节点,将多个内核节点融合。本申请将多个内核节点融合,大幅提升了编译性能。

Description

一种基于代码融合的编译优化方法、系统及电子设备
技术领域
本申请涉及编译优化技术领域,更为具体来说,本申请涉及一种基于代码融合的编译优化方法、系统及电子设备。
背景技术
近年来,诸如人脸识别、目标检测、自动驾驶、ChatGPT等越来越多的人工智能应用正在快速改变人们的生活和工作。各种各样的人工智能应用越来越多地使用深度神经网络(DNN),深度神经网络已经成为许多人工智能应用的核心组成模块。但一方面深度学习模型越来越复杂,参数量非常大,导致推理速度越来越慢,逐步成为人工智能应用的性能瓶颈;另一方面,所有这些应用都是依赖于大量CPU、GPU、TPU等异构设备计算,这些设备使用成本十分昂贵,低效率的设备使用会造成巨额的成本浪费。因此,对深度学习模型进行推理性能优化是改善人工智能应用性能瓶颈、提升用户使用体验并降低应用能耗成本的重要手段。
在整个深度学习生态中,深度神经网络模型的架构、参数和计算量等差异巨大,智能处理器之间的架构、计算性能和功耗显著不同,深度学习的软件栈也展现出了极度复杂的特性。然而深度学习模型的复杂程度和硬件架构的多样化给自动编译优化造成了越来越多的挑战,当前的深度学习编程框架与编译器已经难以有效地优化深度神经网络模型在异构智能设备上的推理性能,深度学习异构编译优化问题亟待解决。
发明内容
基于上述技术问题,本发明旨在实现异构源程序中主机代码和内核代码的融合,及多个内核的融合,以实现编译优化,进而提升DNN整体的计算性能。
本发明第一方面提供了一种基于代码融合的编译优化方法,所述方法包括:
针对包含有主机代码和内核代码的异构源程序,分别用编译器对所述主机代码和所述内核代码进行编译,得到分别与所述主机代码和所述内核代码对应的第一中间表示和第二中间表示;
基于所述第一中间表示依次创建所述主机代码的控制流图和数据流图,基于所述第二中间表示依次创建所述内核代码的控制流图和数据流图;
将所述主机代码的控制流图和所述内核代码的控制流图融合,将所述主机代码的数据流图和所述内核代码的数据流图融合,得到所述异构源程序的全局细粒度依赖关系图;
针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合。
在本发明的一些实施例中,将所述主机代码的控制流图和所述内核代码的控制流图融合,包括:
通过抽象语法树解析所述异构源程序的程序上下文调用关系;
根据所述程序上下文调用关系获取所述主机代码的控制流图和所述内核代码的控制流图之间的调用图;
基于所述调用图将所述主机代码的控制流图和所述内核代码的控制流图融合。
在本发明的一些实施例中,将所述主机代码的数据流图和所述内核代码的数据流图融合,包括:
根据所述程序上下文调用关系确定调用点实参和被调用函数形参的对应关系;
基于所述调用点实参和被调用函数形参的对应关系逐次将所述主机代码的数据流图和所述内核代码的数据流图融合。
在本发明的一些实施例中,针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合,包括:
根据所述全局细粒度依赖关系图解析所述多个内核节点之间的数据流依赖关系和控制流依赖关系;
根据所述数据流依赖关系和控制流依赖关系将所述多个内核节点融合。
在本发明的一些实施例中,根据所述数据流依赖关系将所述多个内核节点融合,包括:
根据所述数据流依赖关系确定多个内核节点的依赖关系;
根据所述多个内核节点的依赖关系定义依赖类型,所述依赖类型包括线程依赖、块依赖,其中,所述线程依赖表示一个内核节点直接依赖另一个内核节点,所述块依赖表示一个内核节点间接依赖另一个内核节点且两个内核节点间距离小于等于预设距离;
确定多个内核节点之间具有的依赖类型,根据不同的依赖类型和预设规则将所述多个内核节点融合。
在本发明的一些实施例中,确定多个内核节点之间具有的依赖类型,根据不同的依赖类型和预设规则将所述多个内核节点融合,包括:
若多个内核节点之间具有线程依赖和/或块依赖,采用顺序融合方式将所述多个内核节点融合;
若多个内核节点之间不具有任何线程依赖和/或块依赖,判定所述多个内核节点对应代码是否具有预设百分数的相似性,若是,采用多面体模型编译技术将所述多个内核节点融合。
在本发明的一些实施例中,根据所述控制流依赖关系将所述多个内核节点融合,包括:
根据所述控制流依赖关系确定所述多个内核节点间硬件线程与软件线程间的映射关系;
基于所述映射关系采用顺序融合方法和/或向量融合方法将所述多个内核节点进行融合。
在本发明的一些实施例中,在所述针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合之后,还包括:
将所述多个内核节点融合后的代码通过编译器分离出主机代码和内核代码,并将分离出的主机代码和内核代码分别作为编译优化的主机代码和编译优化的内核代码。
本发明第二方面提供了一种基于代码融合的编译优化系统,所述系统包括:
中间表示模块,被配置为针对包含有主机代码和内核代码的异构源程序,分别用编译器对所述主机代码和所述内核代码进行编译,得到分别与所述主机代码和所述内核代码对应的第一中间表示和第二中间表示;
流图创建模块,被配置为基于所述第一中间表示依次创建所述主机代码的控制流图和数据流图,基于所述第二中间表示依次创建所述内核代码的控制流图和数据流图;
全局依赖模块,被配置为将所述主机代码的控制流图和所述内核代码的控制流图融合,将所述主机代码的数据流图和所述内核代码的数据流图融合,得到所述异构源程序的全局细粒度依赖关系图;
全局融合模块,被配置为针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合。
本发明第三方面提供了一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现本发明各实施例中所述的基于代码融合的编译优化方法。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
本申请能避免高层级抽象为底层的性能优化带来的极大挑战,也能避免DNN模型算子之间并行和冗余的计算对编译和推理性能的阻碍。本申请实现了异构源程序中主机(host)代码和内核(kernel)代码的融合,及多个内核的融合,将host代码和kernel代码进行统一表示和融合,并进行全程序范围的kernel融合优化,再通过挖掘数据重用、数据局部性、向量化、并行度等方面的优化机会,进一步进行算子间融合优化和跨平台异构融合优化,将计算图中的节点所对应的多个算子融合并到一个kernel中,减少kernel调用次数,从而降低平台调度和内核启动带来的开销。并且,通过合理地设计不同kernel函数的输入输出数据的放置,可以提高数据传输效率,从而大幅度提升DNN整体计算性能。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
附图说明
通过阅读下文优选实施方式的详细描述,各种其它的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本申请一示例性实施例中的一种基于代码融合的编译优化方法步骤示意图;
图2示出了本申请一示例性实施例中的另一种基于代码融合的编译优化方法过程示意图;
图3示出了本申请一示例性实施例中的基于可编程交换机的流量调度装置结构示意图;
图4示出了本申请一示例性实施例所提供的一种电子设备的结构示意图。
具体实施方式
以下,将参照附图来描述本申请的实施例。但是应该理解的是,这些描述只是示例性的,而并非要限制本申请的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本申请的概念。对于本领域技术人员来说显而易见的是,本申请可以无需一个或多个这些细节而得以实施。在其它的例子中,为了避免与本申请发生混淆,对于本领域公知的一些技术特征未进行描述。
应予以注意的是,这里所使用的术语仅是为了描述具体实施例,而非意图限制根据本申请的示例性实施例。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式。此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在所述特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其它特征、整体、步骤、操作、元件、组件和/或它们的组合。
现在,将参照附图更详细地描述根据本申请的示例性实施例。然而,这些示例性实施例可以多种不同的形式来实施,并且不应当被解释为只限于这里所阐述的实施例。附图并非是按比例绘制的,其中为了清楚表达的目的,可能放大了某些细节,并且可能省略了某些细节。图中所示出的各种区域、层的形状以及它们之间的相对大小、位置关系仅是示例性的,实际中可能由于制造公差或技术限制而有所偏差,并且本领域技术人员根据实际所需可以另外设计具有不同形状、大小、相对位置的区域/层。
下面结合说明书附图1-附图4给出几个实施例来描述根据本申请的示例性实施方式。需要注意的是,下述应用场景仅是为了便于理解本申请的精神和原理而示出,本申请的实施方式在此方面不受任何限制。相反,本申请的实施方式可以应用于适用的任何场景。
目前,异构计算系统通常由CPU、GPU、TPU等不同类型设备相互连接而成。在异构并行计算框架下,异构程序代码分为主机(host)代码和内核(kernel)代码两部分。主机代码运行在CPU上,负责数据初始化、数据交换和加速设备控制等任务;内核代码运行在其它加速设备上负责并行执行核心计算任务。异构并行程序一般采用分离编译的模式,即主机代码和内核代码分别独立地进行编译和优化。然而,传统的分离编译模式将主机代码和内核代码视为独立的两部分,没有共享编译时信息,完全忽略了异构代码间的相关性,严重限制了优化代码性能的可能。
另一方面,为了使AI开发者可以快速地开发DNN模型,深度学习框架通常隐藏底层复杂的面向多种硬件平台的代码实现提供高层级简单易用的编程API。然而,高层级抽象同时也为底层的性能优化带来了极大的挑战。
不仅如此,当前的DNN模型架构通常由许多不同的算子组成。算子之间存在着许多算子间并行和冗余的计算。算子之间的边界阻碍了编译器的整体分析,成为提升整体推理性能的主要的障碍。
因此,在本申请一些示例性实施例中,提供了一种基于代码融合的编译优化方法,如图1所示,所述方法包括:
S1、针对包含有主机代码和内核代码的异构源程序,分别用编译器对所述主机代码和所述内核代码进行编译,得到分别与所述主机代码和所述内核代码对应的第一中间表示和第二中间表示;
S2、基于所述第一中间表示依次创建所述主机代码的控制流图和数据流图,基于所述第二中间表示依次创建所述内核代码的控制流图和数据流图;
S3、将所述主机代码的控制流图和所述内核代码的控制流图融合,将所述主机代码的数据流图和所述内核代码的数据流图融合,得到所述异构源程序的全局细粒度依赖关系图;
S4、针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合。
在一种优选的实现方式中,将主机代码的控制流图和内核代码的控制流图融合,包括:通过抽象语法树解析异构源程序的程序上下文调用关系;根据程序上下文调用关系获取主机(host)代码的控制流图和内核(kernel)代码的控制流图之间的调用图;基于调用图将主机代码的控制流图和内核代码的控制流图融合。抽象语法树是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。上述调用图主要指函数的调用,根据实际的调用关系构建简化的函数调用图,便于形象化分析代码的结构,以调用图为融合参考工具,使host代码的控制流图和kernel代码的控制流图融合,使host代码的控制流图和kernel代码的控制流图融合。同样地,可以利用调用图作为解析工具host代码的数据流图和kernel代码的数据流图融合,根据调用图或程序上下文调用关系确定出调用点实参和被调用函数形参的对应关系;基于调用点实参和被调用函数形参的对应关系逐次将所述主机代码的数据流图和所述内核代码的数据流图融合。在调用图上沿着自底向上的顺序,将不同的函数进行内联,从而进行逐层融合,将被调用函数和调用者中未知的控制流信息和数据流信息,如内存效用等进行填充,从而逐渐得到每个函数的融合信息,最后将得到异构源程序的全局细粒度依赖关系图。
在一种优选的实施例中,针对异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合,包括:根据所述全局细粒度依赖关系图解析所述多个内核节点之间的数据流依赖关系和控制流依赖关系;根据所述数据流依赖关系和控制流依赖关系将所述多个内核节点融合。kernel节点可以理解为是函数,根据数据流依赖关系将所述多个内核节点融合时,先根据数据流依赖关系确定多个内核节点的依赖关系;然后根据所述多个内核节点的依赖关系定义三种依赖,所述三种依赖分别为线程依赖(thread级别)、块依赖(block级别)、全局依赖,其中,所述线程依赖表示一个内核节点直接依赖另一个内核节点,所述块依赖表示一个内核节点间接依赖另一个内核节点且两个内核节点间距离小于等于预设距离,所述全局依赖表示一个内核节点间接依赖另一个内核节点且两个内核节点间距离大于预设距离;最后确定多个内核节点之间具有的依赖类型,根据不同的依赖类型和预设规则将所述多个内核节点融合。三种依赖的定义能准确地描述kernel节点之间的数据依赖,具体地,thread级别和block级别的数据依赖意味着依赖是从源kernel节点到目标kernel节点的一对一映射,thread级别的数据依赖意味着两个kernel节点能够不适用任何同步语句就进行融合,block级别的依赖意味着融合这两个kernel节点的时候需要添加线程。全局依赖意味着在两个kernel节点之间存在跨block的依赖,也可以理解为后一个kernel点的block的输入数据是前一个kernel的多个block的输出数据。本实施方式能避免高层级抽象为底层的性能优化带来的极大挑战,也能避免DNN模型算子之间并行和冗余的计算对编译和推理性能的阻碍。
具体实施时,确定多个内核节点之间具有的依赖类型,根据不同的依赖类型和预设规则将所述多个内核节点融合,包括:若多个内核节点之间具有线程依赖和/或块依赖,采用顺序融合方式将所述多个内核节点融合;若多个内核节点之间只具有全局依赖则一般不能融合,但在不具有任何线程依赖和/或块依赖时,判定所述多个内核节点对应代码是否具有预设百分数的相似性,若是,采用多面体模型编译技术将所述多个内核节点融合。这里结合依赖类型和预设规则将多个不同的kernel节点融合,可以理解的是,预设规则为如果两个kernel节点只有thread级别或block级别的依赖,则能够按顺序将kernel语句进行融合,如果两个kernel节点有全局依赖,则不能进行融合,如果两个kernel没有依赖,且两个kernel有高度代码相似性的时候,则可以将两个kernel融合在一起。在全局依赖关系图上自下而上通过广度优先搜索算法(BFS)遍历实现,当一个节点与前驱节点之间的依赖关系满足具有线程依赖和/或块依赖时可以将两个节点进行顺序融合。对于没有依赖关系的kernel节点,kernel节点可以被水平组织或垂直组织,不同的组织形式在串行和并行性能上各有不同,水平融合提高了并行性,垂直融合提高了内存利用效率。上述多个kernel节点,均需要两个节点、两个节点的考察,在全局细粒度依赖关系图上,自底向上顺序进行,通过广度优先搜索算法,例如存在N个节点,针对当前节点,需要逐个考察当前节点与其它(N-1)个节点之间的依赖关系,例如当前节点与第i个节点(N和i均大于0)具备线程依赖和/或块依赖,就先将当前节点与第i个节点融合,融合后再搜索与考察下一个节点。kernel节点融合完才到kernel,因为节点是就函数而言的,而整个异构程序可能具有多个kernel,多个kernel融合的实现需要落实到实际的函数。在此需要解释的是,根据全局依赖关系图,可以将host代码和kernel代码的融合看作全局融合,可以将多个kernel节点的融合看作局部融合,但逻辑上针对同一个内核而言,实现的是一个内核所具有的多个节点的融合。若存在第一内核、第二内核、第三内核,第一内核的输出是第二内核的输入,第二内核的输出是第三内核的输入,则这三个内核可以融合,即则融合的是第一内核、第二内核、第三内核,即三个kernel,那么在异构程序中所有的kernel层面也属于全局融合,因此在异构程序全局层面实现了host代码和kernel代码的融合,及多个kernel的融合。
需要说明的是,多面体模型编译技术通过多面体表示技术对程序变换进行结构化编码,简化变换序列的复杂度,降低搜索空间的规模,更好地理解搜索空间的结构,并从优化空间修剪、搜索算法、优化空间划分、程序变换表示、优化框架等多方面出发,建立可有效集成多面体表示技术与迭代编译机制的自适应优化框架,提高程序对不同平台的适应性和性能的鲁棒性,并在性能优化效果和开销间取得很好的折中。在两组kernel代码具备高度相似性,例如达到百分之八十以上相似度,可以利用多面体表示技术与迭代编译机制的自适应优化框架进行融合及编译优化。
在本发明的一些实施例中,根据控制流依赖关系将多个内核节点融合,包括:根据控制流依赖关系确定多个内核节点间硬件线程与软件线程间的映射关系;基于映射关系采用顺序融合方法和/或向量融合方法将所述多个内核节点进行融合。可以理解的是,本申请将host代码和kernel代码进行统一表示和融合,并进行全程序范围的分析和kernel融合优化,再通过挖掘数据重用、数据局部性、向量化、并行度等方面的优化机会,进一步进行算子间融合优化和跨平台异构融合优化。将计算图中的节点所对应的多个算子融合并到一个kernel中,减少kernel调用次数,从而降低平台调度和内核启动带来的开销。并且,通过合理地设计不同kernel函数的输入输出数据的放置,可以提高数据传输效率,从而大幅度提升DNN整体计算性能。
在本发明的一些实施例中,在上述kernel节点融合的基础上,结合应用特点与异构众核加速器的结构特征,可以利用传统的编译优化技术进一步实施代码优化:在计算操作优化方面,在对应用计算顺序进行深入分析和归纳之后,结合异构众核加速器计算部件的数量、关系、使用规则等硬件特征,通过调整应用计算顺序、合并应用计算操作等代码优化方法,提高浮点、向量等计算部件的利用率;在访存操作优化方面,在对应用数据存放与访问顺序进行深入分析和归纳之后,结合异构众核加速器内存储层次的划分、容量、使用规则等硬件特征,通过调整应用数据存放顺序、合并应用访存操作等代码优化方法,提高内存储系统中数据的访存效率。在针对异构源程序的全局细粒度依赖关系图中的多个内核节点,将多个内核节点融合之后,可以参考图2,还包括:将多个内核节点融合后的代码通过编译器分离出主机代码和内核代码,并将分离出的主机代码和内核代码分别作为编译优化的主机代码和编译优化的内核代码。对优化后的host代码和优化后的kernel代码进行平台相关编译器编译生成二进制代码。可以理解的是,本申请将host和kernel不同平台的计算进行统一表示和融合,提升过程间和整个程序的分析,从全局视角上去寻找跨平台的融合机会,基于数据依赖关系进行多个kernel融合,并利用现有的编译优化技术进一步提升了深度神经网络模型的性能。
在本发明的其它一些实施例中,还提供了一种基于代码融合的编译优化方法,如图2所示,将目标异构程序中的host代码和kernel代码,利用host代码的交互关系C/C++前端,及kernel代码和kernel语言前端的交互关系,采用语法抽象树进行控制流分析和数据流分析,在此基础上分析融合策略,根据具体的融合策略如顺序融合的方式进行融合及性能优先。图2不仅示出了基于代码融合的编译优化方法,而且示出了深度学习框架融合编译器结构图,根据host代码和kernel代码的融合,及不同的kernel代码间的融合,提升了编译优化效率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。
在本申请一些示例性实施例中,还提供了一种基于代码融合的编译优化系统,执行本申请各实施例中所述的基于代码融合的编译优化方法,如图3所示,所述系统包括:
中间表示模块301,被配置为针对包含有主机代码和内核代码的异构源程序,分别用编译器对所述主机代码和所述内核代码进行编译,得到分别与所述主机代码和所述内核代码对应的第一中间表示和第二中间表示;
流图创建模块302,被配置为基于所述第一中间表示依次创建所述主机代码的控制流图和数据流图,基于所述第二中间表示依次创建所述内核代码的控制流图和数据流图;
全局依赖模块303,被配置为将所述主机代码的控制流图和所述内核代码的控制流图融合,将所述主机代码的数据流图和所述内核代码的数据流图融合,得到所述异构源程序的全局细粒度依赖关系图;
全局融合模块304,被配置为针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合。
本装置还包括局部融合模块,用于针对同一个内核(kernel),实现该内核不同节点的融合。本装置实现编译优化,进而提升DNN整体计算性能。应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
下面请参考图4,其示出了本申请的一些实施方式所提供的一种电子设备的示意图。如图4所示,所述电子设备2包括:处理器200,存储器201,总线202和通信接口203,所述处理器200、通信接口203和存储器201通过总线202连接;所述存储器201中存储有可在所述处理器200上运行的计算机程序,所述处理器200运行所述计算机程序时执行本申请前述任一实施方式所提供的基于代码融合的编译优化方法基于代码融合的编译优化方法。
其中,存储器201可能包含高速随机存取存储器(RAM:Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口203(可以是有线或者无线)实现该系统网元与至少一个其它网元之间的通信连接,可以使用互联网、广域网、本地网、城域网等。
总线202可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。其中,存储器201用于存储程序,所述处理器200在接收到执行指令后,执行所述程序,前述本申请实施例任一实施方式揭示的所述基于代码融合的编译优化方法基于代码融合的编译优化方法 可以应用于处理器200中,或者由处理器200实现。
处理器200可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器200中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器200可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器201,处理器200读取存储器201中的信息,结合其硬件完成上述方法的步骤。
本申请实施方式还提供一种与前述实施方式所提供的基于代码融合的编译优化方法对应的计算机可读存储介质,其上存储有计算机程序,所述计算机程序在被处理器运行时,会执行前述任意实施方式所提供的基于代码融合的编译优化方法。
另外,所述计算机可读存储介质的例子还可以包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其它类型的随机存取存储器(RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其它光学、磁性存储介质,在此不再一一赘述。
本申请实施方式还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现前述任意实施方式所提供的基于代码融合的编译优化方法的步骤。
需要说明的是:在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备有固有相关。各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本申请也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本申请的内容,并且上面对特定语言所做的描述是为了披露本申请的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本申请的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
本领域那些技术人员可以理解,本申请的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器( DSP )来实现根据本申请实施例的虚拟机的创建装置中的一些或者全部部件的一些或者全部功能。
以上所述,仅为本申请较佳的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (5)

1.一种基于代码融合的编译优化方法,其特征在于,所述方法包括:
针对包含有主机代码和内核代码的异构源程序,分别用编译器对所述主机代码和所述内核代码进行编译,得到分别与所述主机代码和所述内核代码对应的第一中间表示和第二中间表示;
基于所述第一中间表示依次创建所述主机代码的控制流图和数据流图,基于所述第二中间表示依次创建所述内核代码的控制流图和数据流图;
将所述主机代码的控制流图和所述内核代码的控制流图融合,将所述主机代码的数据流图和所述内核代码的数据流图融合,得到所述异构源程序的全局细粒度依赖关系图;
针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合;
其中,针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合,包括:
根据所述全局细粒度依赖关系图解析所述多个内核节点之间的数据流依赖关系和控制流依赖关系;
根据所述数据流依赖关系和控制流依赖关系将所述多个内核节点融合;
其中,将所述主机代码的控制流图和所述内核代码的控制流图融合,包括:
通过抽象语法树解析所述异构源程序的程序上下文调用关系;
根据所述程序上下文调用关系获取所述主机代码的控制流图和所述内核代码的控制流图之间的调用图;
基于所述调用图将所述主机代码的控制流图和所述内核代码的控制流图融合;
其中,将所述主机代码的数据流图和所述内核代码的数据流图融合,包括:
根据所述程序上下文调用关系确定调用点实参和被调用函数形参的对应关系;
基于所述调用点实参和被调用函数形参的对应关系逐次将所述主机代码的数据流图和所述内核代码的数据流图融合;
其中,根据所述数据流依赖关系将所述多个内核节点融合,包括:
根据所述数据流依赖关系确定多个内核节点的依赖关系;
根据所述多个内核节点的依赖关系定义依赖类型,所述依赖类型包括线程依赖、块依赖,其中,所述线程依赖表示一个内核节点直接依赖另一个内核节点,所述块依赖表示一个内核节点间接依赖另一个内核节点且两个内核节点间距离小于等于预设距离;
确定多个内核节点之间具有的依赖类型,根据不同的依赖类型和预设规则将所述多个内核节点融合;
其中,根据所述控制流依赖关系将所述多个内核节点融合,包括:
根据所述控制流依赖关系确定所述多个内核节点间硬件线程与软件线程间的映射关系;
基于所述映射关系采用顺序融合方法和/或向量融合方法将所述多个内核节点进行融合。
2.根据权利要求1所述的基于代码融合的编译优化方法,其特征在于,确定多个内核节点之间具有的依赖类型,根据不同的依赖类型和预设规则将所述多个内核节点融合,包括:
若多个内核节点之间具有线程依赖和/或块依赖,采用顺序融合方式将所述多个内核节点融合;
若多个内核节点之间不具有任何线程依赖和/或块依赖,判定所述多个内核节点对应代码是否具有预设百分数的相似性,若是,采用多面体模型编译技术将所述多个内核节点融合。
3.根据权利要求1或2所述的基于代码融合的编译优化方法,其特征在于,在所述针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合之后,还包括:
将所述多个内核节点融合后的代码通过编译器分离出主机代码和内核代码,并将分离出的主机代码和内核代码分别作为编译优化的主机代码和编译优化的内核代码。
4.一种基于代码融合的编译优化系统,其特征在于,所述系统包括:
中间表示模块,被配置为针对包含有主机代码和内核代码的异构源程序,分别用编译器对所述主机代码和所述内核代码进行编译,得到分别与所述主机代码和所述内核代码对应的第一中间表示和第二中间表示;
流图创建模块,被配置为基于所述第一中间表示依次创建所述主机代码的控制流图和数据流图,基于所述第二中间表示依次创建所述内核代码的控制流图和数据流图;
全局依赖模块,被配置为将所述主机代码的控制流图和所述内核代码的控制流图融合,将所述主机代码的数据流图和所述内核代码的数据流图融合,得到所述异构源程序的全局细粒度依赖关系图;
全局融合模块,被配置为针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合;
其中,针对所述异构源程序的全局细粒度依赖关系图中的多个内核节点,将所述多个内核节点融合,包括:
根据所述全局细粒度依赖关系图解析所述多个内核节点之间的数据流依赖关系和控制流依赖关系;
根据所述数据流依赖关系和控制流依赖关系将所述多个内核节点融合;
其中,将所述主机代码的控制流图和所述内核代码的控制流图融合,包括:
通过抽象语法树解析所述异构源程序的程序上下文调用关系;
根据所述程序上下文调用关系获取所述主机代码的控制流图和所述内核代码的控制流图之间的调用图;
基于所述调用图将所述主机代码的控制流图和所述内核代码的控制流图融合;
其中,将所述主机代码的数据流图和所述内核代码的数据流图融合,包括:
根据所述程序上下文调用关系确定调用点实参和被调用函数形参的对应关系;
基于所述调用点实参和被调用函数形参的对应关系逐次将所述主机代码的数据流图和所述内核代码的数据流图融合;
其中,根据所述数据流依赖关系将所述多个内核节点融合,包括:
根据所述数据流依赖关系确定多个内核节点的依赖关系;
根据所述多个内核节点的依赖关系定义依赖类型,所述依赖类型包括线程依赖、块依赖,其中,所述线程依赖表示一个内核节点直接依赖另一个内核节点,所述块依赖表示一个内核节点间接依赖另一个内核节点且两个内核节点间距离小于等于预设距离;
确定多个内核节点之间具有的依赖类型,根据不同的依赖类型和预设规则将所述多个内核节点融合;
其中,根据所述控制流依赖关系将所述多个内核节点融合,包括:
根据所述控制流依赖关系确定所述多个内核节点间硬件线程与软件线程间的映射关系;
基于所述映射关系采用顺序融合方法和/或向量融合方法将所述多个内核节点进行融合。
5.一种电子设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现权利要求1-3任意一项所述基于代码融合的编译优化方法。
CN202310402545.4A 2023-04-17 2023-04-17 一种基于代码融合的编译优化方法、系统及电子设备 Active CN116185426B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310402545.4A CN116185426B (zh) 2023-04-17 2023-04-17 一种基于代码融合的编译优化方法、系统及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310402545.4A CN116185426B (zh) 2023-04-17 2023-04-17 一种基于代码融合的编译优化方法、系统及电子设备

Publications (2)

Publication Number Publication Date
CN116185426A CN116185426A (zh) 2023-05-30
CN116185426B true CN116185426B (zh) 2023-09-19

Family

ID=86434722

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310402545.4A Active CN116185426B (zh) 2023-04-17 2023-04-17 一种基于代码融合的编译优化方法、系统及电子设备

Country Status (1)

Country Link
CN (1) CN116185426B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108345937A (zh) * 2017-01-06 2018-07-31 谷歌有限责任公司 循环与库融合
CN109933327A (zh) * 2019-02-02 2019-06-25 中国科学院计算技术研究所 基于代码融合编译框架的OpenCL编译器设计方法和系统
CN110766147A (zh) * 2018-07-25 2020-02-07 赛灵思公司 神经网络编译器架构及编译方法
CN112558977A (zh) * 2019-09-25 2021-03-26 无锡江南计算技术研究所 面向异构众核后端基于代价模型的多面体优化方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8533698B2 (en) * 2011-06-13 2013-09-10 Microsoft Corporation Optimizing execution of kernels
US10025643B2 (en) * 2012-05-10 2018-07-17 Nvidia Corporation System and method for compiler support for kernel launches in device code

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108345937A (zh) * 2017-01-06 2018-07-31 谷歌有限责任公司 循环与库融合
CN110766147A (zh) * 2018-07-25 2020-02-07 赛灵思公司 神经网络编译器架构及编译方法
CN109933327A (zh) * 2019-02-02 2019-06-25 中国科学院计算技术研究所 基于代码融合编译框架的OpenCL编译器设计方法和系统
CN112558977A (zh) * 2019-09-25 2021-03-26 无锡江南计算技术研究所 面向异构众核后端基于代价模型的多面体优化方法

Also Published As

Publication number Publication date
CN116185426A (zh) 2023-05-30

Similar Documents

Publication Publication Date Title
CN112465108B (zh) 一种面向存算一体平台的神经网络编译方法
CN112579063B (zh) 一种用于深度学习编译器中探索优化空间的加速方法
US9015683B2 (en) Method and apparatus for transforming program code
KR101900796B1 (ko) 기민 통신 오퍼레이터
CN108319458B (zh) 一种基于图形化卫式命令演算的多任务编译方法
US10133827B2 (en) Automatic generation of multi-source breadth-first search from high-level graph language
WO2024093292A1 (zh) 计算图的算子自动融合方法及相关产品
WO2022143419A1 (zh) 一种计算图的节点融合方法及设备
CN111399911A (zh) 一种基于多核异构计算的人工智能开发方法及装置
CN108875914B (zh) 对神经网络数据进行预处理和后处理的方法和装置
Herath et al. Dataflow computing models, languages, and machines for intelligence computations
CN116151363A (zh) 分布式强化学习系统
US10564948B2 (en) Method and device for processing an irregular application
Liu et al. swTVM: exploring the automated compilation for deep learning on sunway architecture
CN116185426B (zh) 一种基于代码融合的编译优化方法、系统及电子设备
CN112559045B (zh) 一种基于riscv的随机指令生成平台及方法
Boechat et al. Representing and scheduling procedural generation using operator graphs
US20230116546A1 (en) Method for compilation, electronic device and storage medium
Ye et al. HIDA: A Hierarchical Dataflow Compiler for High-Level Synthesis
CN116523023A (zh) 算子融合方法及装置、电子设备与存储介质
EP4109409A1 (en) Intersection testing in a ray tracing system
Jing et al. An Automatic Task Partition Method for Multi-core System
Amert Enabling real-time certification of autonomous driving applications
Saarikivi et al. Translating C# to Branching Symbolic Transducers.
CN118034696A (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