CN110866598A - block的合并方法、block的划分方法、组合处理装置及编译系统 - Google Patents

block的合并方法、block的划分方法、组合处理装置及编译系统 Download PDF

Info

Publication number
CN110866598A
CN110866598A CN201910945680.7A CN201910945680A CN110866598A CN 110866598 A CN110866598 A CN 110866598A CN 201910945680 A CN201910945680 A CN 201910945680A CN 110866598 A CN110866598 A CN 110866598A
Authority
CN
China
Prior art keywords
block
blocks
merged
computer
divided
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
Application number
CN201910945680.7A
Other languages
English (en)
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.)
Shanghai Cambricon Information Technology Co Ltd
Original Assignee
Shanghai Cambricon Information Technology Co Ltd
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 Shanghai Cambricon Information Technology Co Ltd filed Critical Shanghai Cambricon Information Technology Co Ltd
Priority to CN201910945680.7A priority Critical patent/CN110866598A/zh
Publication of CN110866598A publication Critical patent/CN110866598A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

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

Abstract

本申请涉及一种block的合并方法、block的划分方法、组合处理装置及编译系统,通过对block进行合并或划分,实现对block结构的优化,进而提高block在计算平台上的执行效率。

Description

block的合并方法、block的划分方法、组合处理装置及编译 系统
技术领域
本申请涉及数据处理技术领域,特别是涉及一种block的合并方法、block 的划分方法、组合处理装置及编译系统。
背景技术
计算图是一种通用的计算过程表示方法,普遍应用在各类数据处理平台上, 它的表示方法容易理解,且灵活性很高,可以通过组合简单的操作来实现复杂 的逻辑。以神经网络的应用为例,每个计算图的节点表示神经网络所进行的相 应运算,作为根据神经网络的输入来确定神经网络输出的运算,每个计算图的 有向边将前一个节点连接至后一个节点,表示前节点的输出作为后节点的输入。
对于传统的表示神经网络算法的计算图而言,其作为按照固定规则对于程 序语义的具象,由实际的应用需求和编程人员的编程思维决定,使得其不一定 与实际的硬件平台的特性相匹配。因此,若是直接将传统的计算图部署到相应 的计算平台执行,可能会造成性能与资源的浪费。
发明内容
基于此,有必要针对上述的技术问题,提供一种提高计算图中的block在计 算平台上的执行效率的block的合并方法、block的划分方法、组合处理装置及 编译系统。
本申请提供了一种block的合并方法,所述block用于执行向量运算,所述 方法包括:
获取计算图中的多个待合并block;
将所述多个待合并block中的部分block或者全部block进行合并,得到合 并后的block。
在其中一个实施例中,所述获取计算图中的多个待合并block,包括:
对计算图中的block进行扫描;
若扫描到多个连续的block为compute block,则将所述连续的compute block 确定为所述待合并block,其中,所述compute block表示输入到输出为一一映射 的block。
在其中一个实施例中,将所述多个待合并block中的部分block或者全部 block进行合并,得到合并后的block,包括:
获取所述连续的compute block中当前执行的compute block;
判断所述当前执行的compute block的前面或者后面是否存在至少一个连续 的compute block;
若所述当前执行的compute block的前面存在至少一个相邻的compute block,则将所述当前执行的compute block向前与至少一个相邻的compute block中的一 个或多个进行合并,得到合并后的block;
若所述当前执行的compute block的后面存在至少一个相邻的compute block,则将所述当前执行的compute block向后与至少一个相邻的compute block中的一 个或多个进行合并,得到合并后的block。
在其中一个实施例中,所述获取计算图中的多个待合并block,包括:
对计算图中的block进行扫描;
若扫描到所述计算图中,拓扑结构上的分支后所连接的多个block相同,则 将所述拓扑结构上的分支后所连接的多个相同的block,确定为所述待合并block。
在其中一个实施例中,将所述多个待合并block中的部分block或者全部 block进行合并,得到合并后的block,包括:
将连接多个相同的block的分支进行合并,以及
将所述拓扑结构上的分支后所连接的多个相同的block进行合并,得到合并 后的block。
在其中一个实施例中,所述获取计算图中的多个待合并block,包括:
对计算图中的block进行扫描;
若扫描到所述计算图中,拓扑结构上的多个进行规约操作前的block相同, 则将所述拓扑结构上的多个进行规约操作前的相同的block,确定为所述待合并 block。
在其中一个实施例中,将所述多个待合并block中的部分block或者全部 block进行合并,得到合并后的block,包括:
将连接所述多个进行规约操作前的相同的block的分支进行合并,以及
将所述多个进行规约操作前的相同的block进行合并,得到合并后的block。
本申请还提供了一种组合处理装置,所述组合处理装置包括中央处理器和 其他处理器,所述中央处理器与所述其他处理器连接,所述其他处理器包括图 形处理器和/或神经网络处理器;
所述中央处理器用于执行上述实施例中任一项所述方法的步骤,并根据所 述合并后的block生成目标代码,以及将所述目标代码发送至所述其他处理器;
所述其他处理器用于接收所述目标代码并运行所述目标代码。
本申请还提供了一种编译系统,所述编译系统包括服务器和终端,所述服 务器与所述终端通信连接,其特征在于,所述服务器包括上述实施例所述的其 他处理器,所述终端包括上述实施例所述的中央处理器。
上述block的合并方法、组合处理装置及编译系统,通过将计算图中待合并 的block进行合并以实现对block的优化,这样对于被合并的block的每个端口 而言,都能减少至少一次读取操作和一次写入操作,同时节省出为中间结果分 配的存储空间,由此极大地减少了block的运行时间,提高block在计算平台上 的执行效率。
本申请还提供了一种block的划分方法,所述block用于执行向量运算,所 述方法包括:
获取计算图中待划分block的block信息,其中,所述block信息包括block 规模信息;
将所述block规模信息与计算平台的性能参数进行匹配,并根据匹配结果对 所述待划分block进行划分,得到多个划分后的block。
在其中一个实施例中,所述block信息还包括多重循环嵌套信息,其中,多 重循环嵌套由多个循环体嵌套构成;
将所述block规模信息与计算平台的性能参数进行匹配,并根据匹配结果对 所述待划分block进行划分,得到多个划分后的block,包括:
获取多重循环嵌套信息中每个循环体的规模信息;
将所述每个循环体的规模信息与计算平台的性能参数进行匹配,并根据匹 配结果选取目标循环体;
根据所述目标循环体的循环次数,将所述目标循环体划分为多段;
根据划分后的段数对所述待划分block进行复制,得到多个划分后的block。
在其中一个实施例中,所述方法还包括:
将所述划分后的block进行拆分,得到多个调度单元;
获取预设的调度方案,根据所述预设的调度方案对所述多个调度单元进行 资源调度,得到调度结果。
在其中一个实施例中,所述计算平台的性能参数包括存储性能参数和/或运 算性能参数。
在其中一个实施例中,所述多个划分后的block对应的输出结果进行累加后 得到的累加结果等于所述待划分block对应的输出结果。
本申请还提供了一种组合处理装置,所述组合处理装置包括中央处理器和 其他处理器,所述中央处理器与所述其他处理器连接,所述其他处理器包括图 形处理器和/或神经网络处理器;
所述中央处理器用于执行上述实施例中任一项所述方法的步骤,并根据所 述划分后的block生成目标代码,以及将所述目标代码发送至所述其他处理器;
所述其他处理器用于接收所述目标代码并运行所述目标代码。
本申请还提供了一种编译系统,所述编译系统包括服务器和终端,所述服 务器与所述终端通信连接,其特征在于,所述服务器包括上述实施例所述的其 他处理器,所述终端包括如上述实施例所述的中央处理器。
上述block的划分方法、组合处理装置及编译系统,通过将计算图中待划分 block划分为与计算平台的性能相匹配的多个较小的block,使得block在资源分 配和任务调度中的灵活性更高,以实现最大程度地利用计算平台的硬件资源, 提升block在计算平台上的执行效率。
附图说明
图1为一个实施例中block的合并方法的应用环境图;
图2为一个实施例中神经网络处理器的结构框图;
图3为另一个实施例中神经网络处理器的结构框图;
图4为又一个实施例中神经网络处理器的结构框图;
图5为一个实施例中block的合并方法的流程示意图;
图6为一个实施例中确定待合并block的流程示意图;
图7为一个实施例中对compute block进行合并的流程示意图;
图8为另一个实施例中确定待合并block的流程示意图;
图9为一个实施例中对分支后所连接的多个相同的block进行合并的流程示 意图;
图10为又一个实施例中确定待合并block的流程示意图;
图11为一个实施例中对多个进行规约操作前的相同的block进行合并的流 程示意图;
图12为一个实施例中block的划分方法的流程示意图;
图13为一个实施例中根据循环体的规模对待划分block进行划分得到多个 划分后的block的流程示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实 施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅 用以解释本申请,并不用于限定本申请。
首先,需要说明,在本申请实施例中,block可以理解为计算图中基本的运 算块,其定义了一类特殊的向量运算。一个block可包括多个输入端口和输出端 口port,这些端口可以是标量、向量、矩阵或者更高维的张量,通过给出每一维 的大小来表示整个张量的形状。例如,一个三维的64*13*13的输入端口,可以 被定义为In[64][13][13]。port表示运算的输入输出数据块的大小,通常也代表 了block运算时所需的存储资源。block的定义中还包括神经元连接关系的定义 connect和神经元之间的运算compute。可以理解,每个block中包括输入端口信 息、输出端口信息、神经元连接信息以及神经元运算信息。
connect表示port张量之间元素的连接方式,每条连接都包含这些张量中的 一部分元素作为输入,另一部分元素作为输出,作为compute中定义的运算的 操作数和结果。即对于connect中的每一条边,都会执行compute中的运算,而 这些运算合起来构成了block的执行过程。connect代表了bock在运行时的访存 行为,对于一个block来说,其中的connect一经定义不可改变。这种不变性的 优势在于在不影响NNL(Neural NetworkLanguage)的表示能力的同时,使得 程序的访存在编译时确定,这样可以应用各类编译时访存优化的技巧来提高程 序运行的效率。compute是在上述connect上所应用的一个或多个函数,可以是 标量函数,也可以是规约,内积等向量操作。最基本的compute即权值与神经 元的乘加操作,而最大值、平均值、sigmoid函数等也广泛地出现在神经网络算 法中。在NNL中,compute支持了尽可能多的运算以便表示各种神经网络中所 需的操作。
尽管上述port、connect和compute的组合足以描述一个神经网络层,为了 利用神经网络算法的特点提升编程语言的开发效率,NNL允许在block的定义 中缺省部分信息以避免冗余的代码。根据允许缺省的情形,block可以被分为3 种类型,分别为connectblock、compute block和完整给出所有部分的full block。
connect block是指对于神经网络中常见的神经元与权值进行乘加运算的层 (例如全连接层、卷积层),其接口和运算方式总是类似的,因此可以省略部分 代码。接口上,这类层总是有两个输入端口(神经元输入和权值输入)和一个 输出端口。而且在给定输入和输出神经元的规模,以及它们之间的连接关系后, 权值规模可以被推断出来,因此我们可以只声明其中的神经元端口而省略权值 端口。而运算方面,执行乘加操作的数据是完全由神经元连接关系决定的,因 此在这类block的定义中compute部分可以被完全省略。简言之,connect block 的定义只包含输入输出神经元的端口声明和连接关系。
另一类常见的神经网络层例如激活层和scale层,它们的特点是只有一个输 入和输出端口,而且只在输入层的每个元素执行标量运算即可得到输出, compute block能极大的简化这类层的表示,在compute block中省略了端口声明, 默认只有规模相同的一个输入和输出层,而且具体的规模需要在实际的网络中 根据所连接的前驱层的大小推断得到。而connect部分也可被省略,由于其连接 总是输入到输出元素的一一映射。只需要在compute部分定义一个标量运算, 就可以表示这类block。
实际的神经网络每一层的计算通常都是向量或矩阵运算,对它们的直接定 义会变得繁琐而困难。然而在NNL的block语法中,得益于connect对连接关系 的定义,compute的表示被大大简化。在block的语义中作出了如下几个约束:
1、block中的运算都沿着connect所定义的连接进行,即运算的操作数和结 果一定属于某一条edge,而且运算会在每一条edge上进行。当多条输入连接到 一个神经元时,输出神经元的运算结果是多次运算的累加。
2、block在神经网络运算的正向(推断和训练时的正向)和反向(训练时的 反向和参数更新)阶段的连接方式相同,即connect在正向和反向都适用。
3、每个定义的port都会对应一个自动定义的反向port,名字为Delta(portname},用于定义反向的运算。
connect的定义以关键字connect作为标志,用多个loop所包围的edge来表 示。实际上,connect就是edge的一个集合,每条edge代表了连接两个或多个 神经元的一条边,在运算时执行一次compute。edge的给出输入和输出张量中的 下标位置所对应的两个张量元素就是compute中的输入和输出。
compute部分定义的运算过程分为三部分,分别表示所定义的神经网络层在 不同执行阶段的运算。init部分表示初始化时的运算,在神经网络的训练或推理 过程之前执行,可以用于定义参数的初始化或预训练等。forward和backward 部分分别表示正向和反向运算,在一个BP神经网络中都是不可或缺的部分。对 于connect block,其forward和backward部分都可以被省略,其他情况都必须定 义这两部分运算才能构成一个完整的层。
compute中的运算表达式,包含了各类算术和逻辑运算,以及常用的数学函 数。
本申请提供的block的合并方法,可以应用于如图1所示的应用环境中。其 中,组合处理装置01包括中央处理器012和其他处理器014,中央处理器012 与其他处理器014连接,其他处理器014包括图形处理器和/或神经网络处理器, 中央处理器012包括编译器,该编译器用于将多个待合并block合并为一个block, 并根据合并后的block生成目标代码,以及将目标代码发送至其他处理器,以使 其他处理器可运行该目标代码。
可选地,如图2所示,神经网络处理器可以包括控制器单元110和运算单元 120,其中,控制器单元110与运算单元120连接,该运算单元120可以包括一 个主处理电路121和多个从处理电路122。控制器单元110用于获取数据、机器 学习模型以及计算指令。该机器学习模型具体可以包括网络模型,该网络模型 可以为神经网络模型和/或非神经网络模型。控制器单元110还用于解析其获取 的计算指令得到运算指令,并将多个运算指令以及数据发送给主处理器电路。 主处理电路用于对数据以及该主处理电路与多个从处理电路之间传输的数据和 运算指令执行前序处理。多个从处理电路用于依据从主处理电路传输的数据以 及运算指令并行执行中间运算得到多个中间结果,并将多个中间结果传输给主 处理电路;主处理电路还用于对多个中间结果执行后续处理得到计算指令的计 算结果。
可选地,该控制器单元110可以包括指令存储单元111、指令处理单元112 和存储队列单元114;指令存储单元111用于存储机器学习模型关联的计算指令;
指令处理单元112用于对计算指令解析得到多个运算指令;存储队列单元 114用于存储指令队列,该指令队列包括:按该队列的前后顺序待执行的多个运 算指令或计算指令。可选地,该控制器单元110还可以包括依赖关系处理单元 113,用于在具有多个运算指令时,确定第一运算指令与第一运算指令之前的第 零运算指令是否存在关联关系,如第一运算指令与第零运算指令存在关联关系, 则将第一运算指令缓存在指令存储单元内,在第零运算指令执行完毕后,从指 令存储单元提取第一运算指令传输至运算单元。具体地,若依赖关系处理单元 113依据第一运算指令提取第一运算指令中所需数据(例如矩阵)的第一存储地 址区间,依据第零运算指令提取第零运算指令中所需矩阵的第零存储地址区间,如第一存储地址区间与第零存储地址区间具有重叠的区域,则确定第一运算指 令与第零运算指令具有关联关系,如第一存储地址区间与第零存储地址区间不 具有重叠的区域,则确定第一运算指令与第零运算指令不具有关联关系。
在一个实施例中,如图3所示,运算单元120还可以包括分支处理电路123, 其中,主处理电路121与分支处理电路123连接,分支处理电路123与多个从 处理电路122连接;分支处理电路123,用于执行转发主处理电路121与从处理 电路122之间的数据或指令。在此实施例中,主处理电路121具体用于将一个 输入神经元分配成多个数据块,将多个数据块中的至少一个数据块、权值以及 多个运算指令中的至少一个运算指令发送给分支处理电路;分支处理电路123 用于转发主处理电路121与多个从处理电路122之间的数据块、权值以及运算 指令;多个从处理电路122用于依据该运算指令对接收到的数据块以及权值执行运算得到中间结果,并将中间结果传输给分支处理电路123;主处理电路121 还用于将分支处理电路发送的中间结果进行后续处理得到该计算指令的结果, 将该计算指令的结果发送给控制器单元110。
在另一种可选实施例中,如图4所示,运算单元120可以包括一个主处理电 路121和多个从处理电路122。其中,多个从处理电路呈阵列分布;每个从处理 电路与相邻的其他从处理电路连接,主处理电路连接多个从处理电路中的k个 从处理电路,k个从处理电路为:第1行的n个从处理电路、第m行的n个从 处理电路以及第1列的m个从处理电路,需要说明的是,如图4所示的K个从 处理电路仅包括第1行的n个从处理电路、第m行的n个从处理电路以及第1 列的m个从处理电路,即该k个从处理电路为多个从处理电路中直接与主处理电路连接的从处理电路。K个从处理电路用于在主处理电路以及多个从处理电 路之间的数据以及指令的转发。
可选地,上述的主处理电路121可以包括转换处理电路、激活处理电路、 加法处理电路中的一种或任意组合;转换处理电路用于将主处理电路接收的数 据块或中间结果执行第一数据结构与第二数据结构之间的互换(例如连续数据 与离散数据的转换);或将主处理电路接收的数据块或中间结果执行第一数据类 型与第二数据类型之间的互换(例如定点类型与浮点类型的转换);激活处理电 路用于执行主处理电路内数据的激活运算;加法处理电路用于执行加法运算或 累加运算。
在一个实施例中,如图5所示,提供了一种block的合并方法,以该方法应 用于图1中的中央处理器中的编译器为例进行说明,包括以下步骤:
S202,获取计算图中的多个待合并block。
其中,计算图通常包括多个用于执行向量运算的block。示例性地,向量运 算包括乘加运算、最大值运算及平均值运算等。
具体地,编译器先获取计算图,通过对计算图进行分析得到每个block信息, 再根据每个block信息,检测出能够合并的多个待合并block。其中,block信息 包括block类型及block连接信息。
示例性地,对于表示输入到输出的一一映射运算的compute block,若是有 多个compute block首尾相接,即多个compute block依次相连,则该多个compute block可合并。示例性地,对于计算图中拓扑结构上的分支,如果分支后连接的 多个block相同,则该多个相同的block可合并。
S204,将多个待合并block中的部分block或者全部block进行合并,得到 合并后的block。
具体地,编译器在获得多个待合并block之后,将多个待合并block中的部 分block或者全部block进行合并,得到合并后的block。示例性地,对于compute block,可以任意地向前或向后合并。示例性地,对于计算图中拓扑结构上的分 支,如果分支后连接的多个block相同,那么可以将公共的分支合并为一个,并 在合并后的block后再进行分支。
举例而言,假设有5个待合并的block,编译器在对这5个待合并的block 进行合并时,可选取其中2个、3个或4个block进行合并,也可以选择对5个 block都进行合并,得到一个合并后的block。
采用上述block的合并方法,通过将计算图中待合并的block进行合并以实 现对block的优化,这样对于被合并的block的每个端口而言,都能减少至少一 次读取操作和一次写入操作,同时节省出为中间结果分配的存储空间,由此极 大地减少了block的运行时间,提高block在计算平台上的执行效率。
在一个实施例中,请参阅图6,涉及编译器确定待合并block的一种实现过 程。在上述实施例的基础上,S202包括以下步骤:
S212,对计算图中的block进行扫描;
S214,若扫描到多个连续的block为compute block,则将连续的compute block确定为待合并block,其中,compute block表示输入到输出为一一映射的 block。
具体地,编译器在获得计算图之后,扫描计算图中的所有block,在扫描过 程中,若编译器扫描出多个连续的block为compute block,即多个compute block 依次相连,则将这些compute block确定为待合并block。也就是说,编译器后续 会对这些computeblock进行合并。
进一步地,在一个实施中,请参阅图7,涉及编译器对上述compute block 进行合并的具体过程。在上述实施例的基础上,S204包括以下步骤:
S222,获取连续的compute block中当前执行的compute block;
S224,判断当前执行的compute block的前面或者后面是否存在至少一个连 续的compute block;
S226,若当前执行的compute block的前面存在至少一个相邻的compute block,则将当前执行的compute block向前与至少一个相邻的compute block中 的一个或多个进行合并,得到合并后的block;
S228,若当前执行的compute block的后面存在至少一个相邻的compute block,则将当前执行的compute block向后与至少一个相邻的compute block中 的一个或多个进行合并,得到合并后的block。
不难理解,由于能够合并的多个compute block是依次相连的,因此,对于 最先的compute block,其可以任意地向后与其他compute block的部分或全部进 行合并。对于最后的compute block,其可以任意地向前与其他compute block的 部分或全部进行合并。而对于中间的compute block,其既可以任意地向前与前 面的compute block的部分或全部进行合并,也可以任意地向后与后面的compute block的部分或全部进行合并。
作为一种实施方式,编译器先检测当前执行的compute block,若该computeblock后面也连接compute block,则将两者合并为一个compute block,若该 computeblock前面也连接compute block,则也可以将两者合并为一个compute block。
本实施例中,由于compute block中的连接为输入到输出元素的一一映射, 将其进行合并,可减少compute block的运行时间,提高compute block在计算平 台上的执行效率。
在一个实施例中,请参阅图8,涉及编译器确定待合并block的另一种实现 过程。在上述实施例的基础上,S202包括以下步骤:
S232,对计算图中的block进行扫描;
S234,若扫描到计算图中,拓扑结构上的分支后所连接的多个block相同, 则将拓扑结构上的分支后所连接的多个相同的block,确定为待合并block。
具体地,编译器在获得计算图之后,扫描计算图中的所有block,在扫描过 程中,若编译器扫描出在计算图中的拓扑结构上的分支后所连接的多个block相 同,则将该多个相同的block确定为待合并block。也就是说,编译器后续会对 该多个相同的block进行合并。
进一步地,在一个实施中,请参阅图9,涉及编译器对上述分支后所连接的 多个相同的block进行合并的具体过程。在上述实施例的基础上,S204包括以 下步骤:
S242,将连接多个相同的block的分支进行合并;
S244,将拓扑结构上的分支后所连接的多个相同的block进行合并,得到合 并后的block。
具体地,编译器在确定拓扑结构上的分支后所连接的多个相同的block为待 合并block之后,不仅将连接多个相同的block的分支合并为一个,而且将多个 相同的block也合并为一个block,之后在合并后的block后再进行分支。
本实施例中,将分支后所连接的多个相同的block进行合并,能够减少至少 一次读取操作和一次写入操作,由此减少了block的运行时间,提高block在计 算平台上的执行效率。
在一个实施例中,请参阅图10,涉及编译器确定待合并block的又一种实现 过程。在上述实施例的基础上,S202包括以下步骤:
S252,对计算图中的block进行扫描;
S254,若扫描到计算图中,拓扑结构上的多个进行规约操作前的block相同, 则将拓扑结构上的多个进行规约操作前的相同的block,确定为待合并block。
具体地,编译器在获得计算图之后,扫描计算图中的所有block,在扫描过 程中,若编译器扫描出在计算图中的拓扑结构上的多个进行规约操作前的block 相同,则将该多个进行规约操作前的相同的block确定为待合并block。也就是 说,编译器后续会对该多个进行规约操作前的相同的block进行合并。
进一步地,在一个实施中,请参阅图11,涉及编译器对上述多个进行规约 操作前的相同的block进行合并的具体过程。在上述实施例的基础上,S204包 括以下步骤:
S262,将连接多个进行规约操作前的相同的block的分支进行合并;
S264,将多个进行规约操作前的相同的block进行合并,得到合并后的block。
具体地,编译器在确定多个进行规约操作前的相同的block为待合并block 之后,不仅将连接多个相同的block的分支合并为一个,而且将多个相同的block 也合并为一个block。不难理解,在合并后的block之后再进行规约操作。
本实施例中,将多个进行规约操作前的相同的block进行合并,能够减少至 少一次读取操作和一次写入操作,由此减少了block的运行时间,提高block在 计算平台上的执行效率。
应该理解的是,虽然图5-11的流程图中的各个步骤按照箭头的指示依次显 示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明 确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺 序执行。而且,图5-11中的至少一部分步骤可以包括多个子步骤或者多个阶段, 这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻 执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它 步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,还提供了一种编译系统,该编译系统包括服务器和终端, 服务器与终端通信连接,其中,服务器包括上述其他处理器,终端包括上述中 央处理器。
上述编译系统,终端中的中央处理器通过将计算图中待合并的block进行合 并以实现对block的优化,这样对于被合并的block的每个端口而言,都能减少 至少一次读取操作和一次写入操作,同时节省出为中间结果分配的存储空间, 由此极大地减少了block的运行时间,提高block在计算平台上的执行效率。
基于同样的发明构思,在一个实施例中,如图12所示,还提供了一种block 的划分方法,以该方法应用于图1中的中央处理器中的编译器为例进行说明, 包括以下步骤:
S302,获取计算图中待划分block的block信息,其中,block信息包括block 规模信息。
具体地,编译器先获取计算图,通过对计算图进行分析得到每个block信息, 再根据每个block信息,检测出需被划分的待划分block。示例性地,可根据block 信息,判断该block是否需要大量计算和存储资源,若是,则确定该block为待 划分block。编译器在确定待划分block之后,获取待划分block的block规模信 息。
S304,将block规模信息与计算平台的性能参数进行匹配,并根据匹配结果 对待划分block进行划分,得到多个划分后的block。
具体地,编译器在获得block规模信息之后,将其与计算平台的性能参数进 行匹配,并根据匹配结果对待划分block进行划分,得到多个划分后的block。 可选地,计算平台的性能参数包括存储性能参数和/或运算性能参数。示例性地, 可以将单个待划分block的规模与计算平台的容量或单次的处理能力进行匹配, 例如GPU的shared memory大小,从而最大程度地在单次核函数调用中利用硬 件资源,提升计算效率。
采用上述block的划分方法,通过将计算图中待划分block划分为与计算平 台的性能相匹配的多个较小的block,使得block在资源分配和任务调度中的灵 活性更高,以实现最大程度地利用计算平台的硬件资源,提升block在计算平台 上的执行效率。
在一个实施例中,在得到多个划分后的block之后,在计算图中将它们都连 接到原来的待划分block的输入端口作为新block的输入,以及在计算图中将它 们都连接到原来的待划分block的输出端口作为新block的输出,以使多个划分 后的block对应的输出结果进行累加后得到的累加结果等于待划分block对应的 输出结果。
在一个实施例中,请参阅图13,涉及将block规模信息与计算平台的性能 参数进行匹配,并根据匹配结果对待划分block进行划分,得到多个划分后的 block的一种可能的实现过程。其中,block信息还包括多重循环嵌套信息,多 重循环嵌套由多个循环体嵌套构成。在上述实施例的基础上,S304包括以下步 骤:
S312,获取多重循环嵌套信息中每个循环体的规模信息;
S314,将每个循环体的规模信息与计算平台的性能参数进行匹配,并根据 匹配结果选取目标循环体;
S316,根据目标循环体的循环次数,将目标循环体划分为多段;
S318,根据划分后的段数对待划分block进行复制,得到多个划分后的block。
其中,循环嵌套是指在一个循环体中又包含另一个循环体。例如,一个for 循环体中包含另一个for循环体,另一个for循环体中包含又一个for循环体, 这样的三个for循环体嵌套构成三重循环嵌套。
具体地,编译器先获取待划分block中多重循环嵌套信息中的每个循环体的 规模信息,再将每个循环体的规模信息与计算平台的性能参数进行匹配,得到 匹配结果,进而根据匹配结果在多重循环嵌套中选取一个目标循环体,之后根 据目标循环体的循环次数,将目标循环体划分为多段,最后根据划分后的段数 对待划分block进行复制,得到多个划分后的block。
在一个实施例中,编译器还可以根据待划分block的不同的输入元素或输出 元素对待划分block进行划分,得到多个划分后的block。
在一个实施例中,该方法还包括以下步骤:
S322,将划分后的block进行拆分,得到多个调度单元;
S324,通过预设的调度方案对多个调度单元进行资源调度,得到调度结果。
具体地,编译器在获得划分后的block之后,还可以继续对划分后的block 进行拆分,以进一步提高block在资源分配和任务调度中的灵活性,并得到多个 调度单元,进而通过预设的调度方案对多个调度单元进行资源调度,得到调度 结果。示例性地,可选择软件流水机制实现对调度单元的优化。
本实施例中,通过将划分后的block进一步拆分为多个调度单元,从而可根 据更细粒度的调度方案实现对block的优化,减少了整个任务的处理时间。
应该理解的是,虽然图12-13的流程图中的各个步骤按照箭头的指示依次显 示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明 确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺 序执行。而且,图12-13中的至少一部分步骤可以包括多个子步骤或者多个阶段, 这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻 执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它 步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,还提供了一种编译系统,该编译系统包括服务器和终端, 服务器与终端通信连接,其中,服务器包括上述其他处理器,终端包括上述中 央处理器。
上述编译系统,终端中的中央处理器通过将计算图中待划分block划分为与 计算平台的性能相匹配的多个较小的block,使得block在资源分配和任务调度 中的灵活性更高,以实现最大程度地利用计算平台的硬件资源,提升block在计 算平台上的执行效率。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述 实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特 征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但 并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普 通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进, 这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要 求为准。

Claims (16)

1.一种block的合并方法,其特征在于,所述block用于执行向量运算,所述方法包括:
获取计算图中的多个待合并block;
将所述多个待合并block中的部分block或者全部block进行合并,得到合并后的block。
2.根据权利要求1所述的方法,其特征在于,所述获取计算图中的多个待合并block,包括:
对计算图中的block进行扫描;
若扫描到多个连续的block为compute block,则将所述连续的compute block确定为所述待合并block,其中,所述compute block表示输入到输出为一一映射的block。
3.根据权利要求2所述的方法,其特征在于,将所述多个待合并block中的部分block或者全部block进行合并,得到合并后的block,包括:
获取所述连续的compute block中当前执行的compute block;
判断所述当前执行的compute block的前面或者后面是否存在至少一个连续的compute block;
若所述当前执行的compute block的前面存在至少一个相邻的compute block,则将所述当前执行的compute block向前与至少一个相邻的compute block中的一个或多个进行合并,得到合并后的block;
若所述当前执行的compute block的后面存在至少一个相邻的compute block,则将所述当前执行的compute block向后与至少一个相邻的compute block中的一个或多个进行合并,得到合并后的block。
4.根据权利要求1所述的方法,其特征在于,所述获取计算图中的多个待合并block,包括:
对计算图中的block进行扫描;
若扫描到所述计算图中,拓扑结构上的分支后所连接的多个block相同,则将所述拓扑结构上的分支后所连接的多个相同的block,确定为所述待合并block。
5.根据权利要求4所述的方法,其特征在于,将所述多个待合并block中的部分block或者全部block进行合并,得到合并后的block,包括:
将连接多个相同的block的分支进行合并,以及
将所述拓扑结构上的分支后所连接的多个相同的block进行合并,得到合并后的block。
6.根据权利要求1所述的方法,其特征在于,所述获取计算图中的多个待合并block,包括:
对计算图中的block进行扫描;
若扫描到所述计算图中,拓扑结构上的多个进行规约操作前的block相同,则将所述拓扑结构上的多个进行规约操作前的相同的block,确定为所述待合并block。
7.根据权利要求6所述的方法,其特征在于,将所述多个待合并block中的部分block或者全部block进行合并,得到合并后的block,包括:
将连接所述多个进行规约操作前的相同的block的分支进行合并,以及
将所述多个进行规约操作前的相同的block进行合并,得到合并后的block。
8.一种组合处理装置,其特征在于,所述组合处理装置包括中央处理器和其他处理器,所述中央处理器与所述其他处理器连接,所述其他处理器包括图形处理器和/或神经网络处理器;
所述中央处理器用于执行如权利要求1至7中任一项所述方法的步骤,并根据所述合并后的block生成目标代码,以及将所述目标代码发送至所述其他处理器;
所述其他处理器用于接收所述目标代码并运行所述目标代码。
9.一种编译系统,所述编译系统包括服务器和终端,所述服务器与所述终端通信连接,其特征在于,所述服务器包括如权利要求8所述的其他处理器,所述终端包括如权利要求8所述的中央处理器。
10.一种block的划分方法,其特征在于,所述block用于执行向量运算,所述方法包括:
获取计算图中待划分block的block信息,其中,所述block信息包括block规模信息;
将所述block规模信息与计算平台的性能参数进行匹配,并根据匹配结果对所述待划分block进行划分,得到多个划分后的block。
11.根据权利要求10所述的方法,其特征在于,所述block信息还包括多重循环嵌套信息,其中,多重循环嵌套由多个循环体嵌套构成;
将所述block规模信息与计算平台的性能参数进行匹配,并根据匹配结果对所述待划分block进行划分,得到多个划分后的block,包括:
获取多重循环嵌套信息中每个循环体的规模信息;
将所述每个循环体的规模信息与计算平台的性能参数进行匹配,并根据匹配结果选取目标循环体;
根据所述目标循环体的循环次数,将所述目标循环体划分为多段;
根据划分后的段数对所述待划分block进行复制,得到多个划分后的block。
12.根据权利要求10所述的方法,其特征在于,所述方法还包括:
将所述划分后的block进行拆分,得到多个调度单元;
获取预设的调度方案,根据所述预设的调度方案对所述多个调度单元进行资源调度,得到调度结果。
13.根据权利要求10-12任一所述的方法,其特征在于,所述计算平台的性能参数包括存储性能参数和/或运算性能参数。
14.根据权利要求10-12任一所述的方法,其特征在于,所述多个划分后的block对应的输出结果进行累加后得到的累加结果等于所述待划分block对应的输出结果。
15.一种组合处理装置,其特征在于,所述组合处理装置包括中央处理器和其他处理器,所述中央处理器与所述其他处理器连接,所述其他处理器包括图形处理器和/或神经网络处理器;
所述中央处理器用于执行如权利要求10至14中任一项所述方法的步骤,并根据所述划分后的block生成目标代码,以及将所述目标代码发送至所述其他处理器;
所述其他处理器用于接收所述目标代码并运行所述目标代码。
16.一种编译系统,所述编译系统包括服务器和终端,所述服务器与所述终端通信连接,其特征在于,所述服务器包括如权利要求15所述的其他处理器,所述终端包括如权利要求15所述的中央处理器。
CN201910945680.7A 2019-09-30 2019-09-30 block的合并方法、block的划分方法、组合处理装置及编译系统 Pending CN110866598A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910945680.7A CN110866598A (zh) 2019-09-30 2019-09-30 block的合并方法、block的划分方法、组合处理装置及编译系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910945680.7A CN110866598A (zh) 2019-09-30 2019-09-30 block的合并方法、block的划分方法、组合处理装置及编译系统

Publications (1)

Publication Number Publication Date
CN110866598A true CN110866598A (zh) 2020-03-06

Family

ID=69652749

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910945680.7A Pending CN110866598A (zh) 2019-09-30 2019-09-30 block的合并方法、block的划分方法、组合处理装置及编译系统

Country Status (1)

Country Link
CN (1) CN110866598A (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103377148A (zh) * 2012-04-30 2013-10-30 Sap股份公司 部分合并
CN107122243A (zh) * 2017-04-12 2017-09-01 杭州远算云计算有限公司 用于cfd仿真计算的异构集群系统及cfd计算方法
CN108985450A (zh) * 2018-06-28 2018-12-11 中国人民解放军国防科技大学 面向向量处理器的卷积神经网络运算向量化方法
CN109543825A (zh) * 2018-11-30 2019-03-29 上海寒武纪信息科技有限公司 神经网络模型算法编译方法、装置及相关产品

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103377148A (zh) * 2012-04-30 2013-10-30 Sap股份公司 部分合并
CN107122243A (zh) * 2017-04-12 2017-09-01 杭州远算云计算有限公司 用于cfd仿真计算的异构集群系统及cfd计算方法
CN108985450A (zh) * 2018-06-28 2018-12-11 中国人民解放军国防科技大学 面向向量处理器的卷积神经网络运算向量化方法
CN109543825A (zh) * 2018-11-30 2019-03-29 上海寒武纪信息科技有限公司 神经网络模型算法编译方法、装置及相关产品

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
王秉睿: "神经网络专用编程语言", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Similar Documents

Publication Publication Date Title
JP7335312B2 (ja) 多目的の並列処理アーキテクチャ
CN112840356B (zh) 运算加速器、处理方法及相关设备
US20200249998A1 (en) Scheduling computation graph heterogeneous computer system
CN109711539B (zh) 运算方法、装置及相关产品
CN112084038B (zh) 神经网络的内存分配方法及装置
CN109121435A (zh) 处理装置和处理方法
WO2022068663A1 (zh) 内存分配方法、相关设备及计算机可读存储介质
CN112292667B (zh) 选择处理器的方法和装置
CN111897579A (zh) 图像数据处理方法、装置、计算机设备和存储介质
CN111309486A (zh) 转换方法、装置、计算机设备和存储介质
CN112711478B (zh) 基于神经网络的任务处理方法、装置、服务器和存储介质
CN109359732B (zh) 一种芯片及基于其的数据处理方法
CN110659069B (zh) 用于执行神经网络计算的指令调度方法及相应计算系统
US11556756B2 (en) Computation graph mapping in heterogeneous computer system
CN110717584A (zh) 神经网络编译方法、编译器、计算机设备及可读存储介质
CN111047045B (zh) 机器学习运算的分配系统及方法
CN114580606A (zh) 数据处理方法、装置、计算机设备和存储介质
CN108470211B (zh) 一种卷积计算的实现方法、设备和计算机存储介质
CN110825380A (zh) 核函数的生成方法、目标代码的生成方法和组合处理装置
CN112084037A (zh) 神经网络的内存分配方法及装置
CN114035916A (zh) 计算图的编译、调度方法及相关产品
WO2022253075A1 (zh) 一种编译方法及相关装置
CN115860066A (zh) 一种基于批处理的神经网络推理流水线复用的方法
CN117032807A (zh) 基于risc-v指令集的ai加速处理器架构
US20190130276A1 (en) Tensor manipulation within a neural network

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20200306

RJ01 Rejection of invention patent application after publication