CN110825380A - 核函数的生成方法、目标代码的生成方法和组合处理装置 - Google Patents

核函数的生成方法、目标代码的生成方法和组合处理装置 Download PDF

Info

Publication number
CN110825380A
CN110825380A CN201910944408.7A CN201910944408A CN110825380A CN 110825380 A CN110825380 A CN 110825380A CN 201910944408 A CN201910944408 A CN 201910944408A CN 110825380 A CN110825380 A CN 110825380A
Authority
CN
China
Prior art keywords
block
compiling
library
information
matching
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
CN201910944408.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 CN201910944408.7A priority Critical patent/CN110825380A/zh
Publication of CN110825380A publication Critical patent/CN110825380A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • 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

Abstract

本申请涉及一种核函数的生成方法、目标代码的生成方法、组合处理装置和编译系统,通过获取计算图中block的connect信息,以生成block对应的核函数,实现了根据计算图中的信息生成核函数的技术。

Description

核函数的生成方法、目标代码的生成方法和组合处理装置
技术领域
本申请涉及数据处理技术领域,特别是涉及一种核函数的生成方法、目标 代码的生成方法、组合处理装置和编译系统。
背景技术
计算图是一种通用的计算过程表示方法,普遍应用在各类数据处理平台上, 它的表示方法容易理解,且灵活性很高,可以通过组合简单的操作来实现复杂 的逻辑。以神经网络的应用为例,每个计算图的节点表示神经网络所进行的相 应运算,作为根据神经网络的输入来确定神经网络输出的运算,每个计算图的 有向边将前一个节点连接至后一个节点,表示前节点的输出作为后节点的输入。
在传统的核函数的生成方法中,未公开根据计算图中的信息生成核函数的 技术,因此,如何实现根据计算图中的信息生成核函数,成为本领域技术人员 亟待解决的技术问题。
发明内容
基于此,有必要针对上述的技术问题,提供一种核函数的生成方法、目标 代码的生成方法、组合处理装置和编译系统。
本申请提供了一种核函数的生成方法,所述方法包括:
获取计算图中block的connect信息;
根据connect信息中的循环信息,在预设的性能库中对所述block进行匹配, 其中,所述性能库中包括用于生成核函数的库函数;
若匹配成功,则对所述block进行编译,得到所述block对应的库函数;
根据所述库函数,生成所述block对应的核函数。
在其中一个实施例中,所述方法还包括:
若匹配失败,则根据block的connect信息和compute信息,生成所述block 对应的核函数。
在其中一个实施例中,若匹配成功,则对所述block进行编译,得到所述 block对应的库函数,包括:
若匹配成功,则在预设的性能库中提取所述block对应的编译参数和编译模 板,根据所述编译参数和编译模板对所述block进行编译,得到所述block对应 的库函数。
在其中一个实施例中,若匹配成功,则在预设的性能库中提取所述block对 应的编译参数和编译模板,根据所述编译参数和编译模板对所述block进行编译, 得到所述block对应的库函数,包括:
若匹配到预设的神经网络层的拓扑结构,且所述block为connect block,则 根据计算平台类型在预设的性能库中的机器学习库中,提取所述block对应的编 译参数和编译模板,并根据所述编译参数和编译模板对所述block进行编译,得 到所述block适用于相应计算平台上的神经网络的库函数。
在其中一个实施例中,若匹配成功,则在预设的性能库中提取所述block对 应的编译参数和编译模板,根据所述编译参数和编译模板对所述block进行编译, 得到所述block对应的库函数,包括:
若匹配到预设的向量或矩阵运算函数,则在预设的性能库中的线性代数库 中,提取所述block对应的编译参数和编译模板,并根据所述编译参数和编译模 板对所述block进行编译,得到所述block对应的库函数。
在其中一个实施例中,根据connect信息中的循环信息,在预设的性能库中 对所述block进行匹配,包括:
判断connect信息中的循环信息中的循环变量是否位于输入端口、权值端口 和输出端口的坐标中,得到判断结果;
根据所述判断结果对所述循环信息对应的循环体进行分类,得到所述循环 体的类型;
根据所述循环体的类型,确定所述循环体的向量或矩阵运算;
根据所述循环体的向量或矩阵运算,在预设的性能库中的线性代数库中对 所述block进行匹配。
在其中一个实施例中,根据所述循环体的类型,确定所述循环体的向量或 矩阵运算,包括:
若所述循环体为C类型,则该循环体的向量或矩阵运算为矩阵乘运算;
若所述循环体为M类型、N类型或K类型,则该循环体的向量或矩阵运算 为矩阵乘运算;
若所述M类型、N类型或K类型为空循环,则将所述矩阵乘运算降维成矩 阵与向量相乘运算或者向量相乘运算。
本申请还提供了一种目标代码的生成方法,包括上述实施例中任一项所述 方法的步骤,所述目标代码的生成方法还包括:
获取计算图中拓扑结构的连接关系信息;
根据所述连接关系信息建立执行的偏序;
根据所述偏序、所述拓扑结构中每个节点执行的代价模型以及所述block对 应的核函数,生成目标代码。
本申请还提供了一种组合处理装置,所述组合处理装置包括中央处理器和 其他处理器,所述中央处理器与所述其他处理器连接,所述其他处理器包括图 形处理器和/或神经网络处理器;
所述中央处理器用于执行上述实施例中任一项所述方法的步骤,并根据所 述block对应的核函数生成目标代码,以及将所述目标代码发送至所述其他处理 器;
所述其他处理器用于接收所述目标代码并运行所述目标代码。
本申请还提供了一种编译系统,所述编译系统包括服务器和终端,所述服 务器与所述终端通信连接,其特征在于,所述服务器包括上述实施例所述的其 他处理器,所述终端包括如上述实施例所述的中央处理器。
上述核函数的生成方法、目标代码的生成方法、组合处理装置和编译系统, 通过获取计算图中block的connect信息,并根据connect信息中的循环信息, 在预设的性能库中对block进行匹配,其中,该性能库中包括用于生成核函数的 库函数,若匹配成功,则对block进行编译,得到block对应的库函数,进而根 据该库函数生成block对应的核函数。因此,本申请实现了根据计算图中的信息 生成核函数的技术。
附图说明
图1为一个实施例中核函数的生成方法的应用环境图;
图2为一个实施例中神经网络处理器的结构框图;
图3为另一个实施例中神经网络处理器的结构框图;
图4为又一个实施例中神经网络处理器的结构框图;
图5为一个实施例中核函数的生成方法的流程示意图;
图6为一个实施例中根据connect信息中的循环信息,在预设的性能库中对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的connect信息 生成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所示,提供了一种核函数的生成方法,以该方法 应用于图1中的中央处理器中的编译器为例进行说明,包括以下步骤:
S202,获取计算图中block的connect信息。
具体地,计算图中的节点可部分或全部为block。以计算图中的节点全部为 block为例,由上述内容可知,在每个block内部,分为connect部分和compute 部分,也就是说,每个block包含connect信息和compute信息。首先,编译器 获取计算图中block的connect信息。
S204,根据connect信息中的循环信息,在预设的性能库中对block进行匹 配,其中,性能库中包括用于生成核函数的库函数。
具体地,在connect部分,包含循环信息,例如循环体信息及循环次数。编 译器在获得计算图中每个block的connect信息之后,读取connect信息中的循 环信息,并将该循环信息与预设的性能库中的信息进行模式匹配,以判断在预 设的性能库中是否存在与block匹配的库函数。可选地,性能库包括机器学习库 及线性代数库,机器学习库包括神经网络库。
S206,若匹配成功,则对block进行编译,得到block对应的库函数。
具体地,若该block在预设的性能库中匹配成功,即表明性能库中存在与该 block匹配的库函数,则编译器根据性能库的编译信息对该block进行编译,得 到block对应的库函数。其中,对block的编译遵循性能库中预设的编译方式来 实现编译。
示例性地,编译器可在预设的性能库中提取block对应的编译参数和编译模 板,根据编译参数和编译模板对block进行编译,得到block对应的库函数。
S208,根据库函数,生成block对应的核函数。
具体地,核函数的形态决定于代码生成的目标计算平台,而block对应的库 函数仅仅为性能库中的库函数,因此编译器需要对该库函数进行整合,生成对 应于不同计算平台的核函数。例如,在CPU上,核函数对应于代表block运算 的C++代码,包括forward()和backward()两个函数,分别表示正向和反向运算 的过程。在GPU上,核函数对应于类似的CUDA C的函数代码,函数中调用 CUDA的内部函数进行数据拷贝,并由CPU执行一些标量或预处理的运算,对 于可以实现并行的运算,调用GPU的运算库或者生成的globa1函数在GPU上 进行运算。在神经网络处理器上,由于其硬件结构针对特定的算法专门设计, 往往只支持部分的神经网络层。通过在block中识别这些层,并通过调用专用的 库或汇编程序段的C++接口来执行加速器支持的神经网络算法,而对于神经网 络中的其它操作,则只能调用主机CPU实现。
上述核函数的生成方法,通过获取计算图中block的connect信息,并根据connect信息中的循环信息,在预设的性能库中对block进行匹配,其中,该性 能库中包括用于生成核函数的库函数,若匹配成功,则对block进行编译,得到block对应的库函数,进而根据该库函数生成block对应的核函数。因此,本申 请实现了根据计算图中的信息生成核函数的技术。
在一个实施例中,该方法还包括如下步骤:
S212,若匹配失败,则根据block的connect信息和compute信息,生成block 对应的核函数。
具体地,若该block在预设的性能库中匹配失败,即表明性能库中不存在与 该block匹配的库函数,则编译器根据block的connect信息和compute信息, 生成block对应的核函数。示例性地,在CPU上,编译器直接将运算部分与循 环相结合,进而生成block对应的核函数。在GPU上,编译器根据connect关系 将运算按照输出结果划分,每一个输出点作为一个线程,而编译器将compute 部分翻译为GPU上的_global_函数。
在本实施例中,若性能库中没有与block匹配的库函数时,则根据block的 定义生成核函数,提高了核函数生成的通用性。
在一个实施例中,涉及在机器学习库中匹配block的具体过程。在上述实施 例的基础上,S206包括如下步骤:
S2062,若匹配到预设的神经网络层的拓扑结构,且block为connect block, 则根据计算平台类型在预设的性能库中的机器学习库中,提取block对应的编译 参数和编译模板,并根据编译参数和编译模板对block进行编译,得到block适 用于相应计算平台上的神经网络的库函数。
具体地,在机器学习库中,若匹配到预设的神经网络层的拓扑结构,例如 卷积层的拓扑结构、池化层的拓扑结构,且block的类型为connect block,则编 译器根据计算平台类型,例如CPU、GPU及神经网络处理器,在机器学习库中, 提取block对应的编译参数和编译模板,并根据该编译参数和编译模板将block 编译为相应计算平台上的神经网络的库函数。
本实施例中,通过调用预设的机器学习库对block进行编译,在不会显著增 加运算量的情况下,能够极大地提升网络的总体性能。
几乎所有的机器学习库都支持卷积层的计算。通过分析一个block的定义, 主要是其中的循环部分,可以判断该block是否是一个卷积层,同时根据解析卷 积层的各项参数。对于一个表示卷积层的block的定义为:
(1)、block共包含一个三维的输入端口、一个四维的输入端口和一个三维 的输出端口。此时根据维度信息可以将这三个端口分别标记为输入、权值和输 出。
(2)、compute中执行两个输入端口中的元素之间的乘加运算。
(3)、connect部分包含了六重循环,这六重循环的顺序无关,但是循环变 量出现的位置必须满足特定的要求,例如如果其中一个循环变量仅出现在权值 端口和输出端口的某一维,即标记该循环代表了在输出的特征层的方向,其循 环的范围代表了输出特征层的数量。其它的循环类似,当所有的循环都被标记 为卷积中某一维度上的计算时,即表明connect满足卷积层的特征。
上述任一规则的违反都代表该block所表示的不是卷积层,而如果所有的规 则都匹配成功,那么编译器会将该block编译为对于卷积函数的调用,并提供解 析出的卷积层各项参数。
在一个实施例中,涉及在线性代数库中匹配block的具体过程。在上述实施 例的基础上,S206包括如下步骤:
S2064,若匹配到预设的向量或矩阵运算函数,则在预设的性能库中的线性 代数库中,提取block对应的编译参数和编译模板,并根据编译参数和编译模板 对block进行编译,得到block对应的库函数。
其中,线性代数库中可用于神经网络算法的主要是对于大规模的矩阵和向 量之间的相乘,而对于神经网络中神经元与权值的乘加运算,即connect block, 可以通过对循环的分析直接转化为矩阵相乘的形式。
具体地,在线性代数库中,若匹配到预设的向量或矩阵运算函数,例如矩 阵乘或者向量的对位运算,则编译器提取block对应的编译参数和编译模板,并 根据编译参数和编译模板将block编译为库函数。
本实施例中,通过调用预设的线性代数库对block进行编译,在不会显著增 加运算量的情况下,能够极大地提升网络的总体性能。
在一个实施例中,请参阅图6,涉及编译器根据connect信息中的循环信息, 在预设的性能库中对block进行匹配的一种可能的实现过程。在上述实施例的基 础上,S204包括以下步骤:
S2042,判断connect信息中的循环信息中的循环变量是否位于输入端口、 权值端口和输出端口的坐标中,得到判断结果。
具体地,对于connect中所描述的循环,编译器先判断connect信息中的循 环信息中的循环变量是否位于输入端口、权值端口和输出端口的坐标中,得到 判断结果。不难理解,判断结果包括循环变量只位于输入端口的坐标中,循环 变量只位于权值端口的坐标中,循环变量只位于输出端口的坐标中,循环变量 位于输入端口和权值端口的坐标中,循环变量位于输入端口和输出端口的坐标 中,循环变量位于权值端口和输出端口的坐标中以及循环变量位于输入端口、 权值端口和输出端口的坐标中。
S2044,根据判断结果对循环信息对应的循环体进行分类,得到循环体的类 型。
具体地,编译器在得到判断结果之后,根据判断结果对循环信息对应的循 环体进行分类,得到循环体的类型。示例性地,如果一个循环体的循环变量只 出现在输入端口和权值端口中,那么该循环体被标记为K类;如果一个循环体 的循环变量只出现在输入端口和输出端口中,那么该循环体被标记为M类;如 果一个循环体的循环变量只出现在权值端口和输出端口中,那么该循环体被标 记为N类;如果一个循环体的循环变量出现在输入端口、权值端口和输出端口 中,那么该循环体被标记为C类。
在另一个实施例中,如果一个变量仅出现在其中一个端口的坐标中,那么 在乘加运算中,要么这个循环可以通过在端口内部事先的累加消去(对于输入 端口),要么表示了输出的结果的复制并且可以在进行其它循环的运算后将结果 直接复制实现(对于输出端口)。
S2046,根据循环体的类型,确定循环体的向量或矩阵运算函数。
具体地,编译器根据循环体的类型,确定循环体的向量或矩阵运算函数。 示例性地,对于C类的循环变量,其对于所有的端口都是相关的,因此在计算 中需要将这些循环体作为最外层循环,每次执行都代表一次矩阵乘。对于其余 的M、N、K类型的循环体,与矩阵乘运算中的参数m,n,k对应,分别按照 这三类循环体对数据进行展开,从而确定矩阵乘运算。如果M、N、K中任一类 的循环为空,那么矩阵乘运算自动降维变成矩阵与向量相乘或者向量相乘。
S2048,根据循环体的向量或矩阵运算函数,在预设的性能库中的线性代数 库中对block进行匹配。
具体地,编译器将矩阵乘运算、矩阵与向量相乘运算或者向量相乘运算在 线性代数库中进行匹配,以确定线性代数库中是否存在与block匹配的库函数。
进一步地,在一个实施例中,编译器在得到矩阵乘运算之后,调用线性代 数库中匹配的矩阵乘函数实现矩阵乘运算,并对矩阵乘后的结果按照相应的循 环对应关系进行变换,即可得到最终的输出端口的结果。在另一个实施例中, 编译器在得到矩阵与向量相乘运算或者向量相乘运算之后,只需调用线性代数 库中匹配库函数即可。
应该理解的是,虽然图5-6的流程图中的各个步骤按照箭头的指示依次显示, 但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的 说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执 行。而且,图5-6中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些 子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行, 这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或 者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,还提供了一种目标代码的生成方法,该方法包括上述实 施例涉及的核函数的生成方法的步骤,且该方法还包括:
获取计算图中拓扑结构的连接关系信息;
根据连接关系信息建立执行的偏序;
根据偏序、拓扑结构中每个节点执行的代价模型以及block对应的核函数, 生成目标代码。
具体地,在对计算图中的所有节点都生成核函数后,编译器根据计算图的 拓扑结构产生最终的执行过程。这个过程包括根据图中的连接关系建立执行的 偏序,以及根据偏序和每个节点执行的代价模型生成最终的计算过程。进一步 地,如果神经网络中包含了时序,那么需要将整个执行过程编译为一个在时间 维度上的循环,执行图中的三个部分分别被作为循环的预处理、循环体和循环 退出后的操作。
上述目标代码的生成方法,先将计算图中的每一个block生成一个核函数, 再根据计算图的拓扑结构生成不同计算平台上执行的目标代码,从而最大限度 地利用神经网络的特点提高编程效率。
在一个实施例中,还提供了一种编译系统,该编译系统包括服务器和终端, 服务器与终端通信连接,其中,服务器包括上述其他处理器,终端包括上述中 央处理器。
上述编译系统,将运算任务量大的其他处理器部署在服务器侧,将运算任 务量小的中央处理器部署在终端侧,按照硬件平台的数据处理能力与处理器的 运算任务量地适配性进行硬件平台与处理器的搭配,可有效地提高编程效率。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述 实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特 征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但 并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普 通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进, 这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要 求为准。

Claims (10)

1.一种核函数的生成方法,其特征在于,所述方法包括:
获取计算图中block的connect信息;
根据所述connect信息中的循环信息,在预设的性能库中对所述block进行匹配,其中,所述性能库中包括用于生成核函数的库函数;
若匹配成功,则对所述block进行编译,得到所述block对应的库函数;
根据所述库函数,生成所述block对应的核函数。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若匹配失败,则根据block的connect信息和compute信息,生成所述block对应的核函数。
3.根据权利要求1所述的方法,其特征在于,所述若匹配成功,则对所述block进行编译,得到所述block对应的库函数,包括:
若匹配成功,则在预设的性能库中提取所述block对应的编译参数和编译模板,并根据所述编译参数和编译模板对所述block进行编译,得到所述block对应的库函数。
4.根据权利要求3所述的方法,其特征在于,所述若匹配成功,则在预设的性能库中提取所述block对应的编译参数和编译模板,并根据所述编译参数和编译模板对所述block进行编译,得到所述block对应的库函数,包括:
若匹配到预设的神经网络层的拓扑结构,且所述block为connect block,则根据计算平台类型在预设的性能库中的机器学习库中,提取所述block对应的编译参数和编译模板,并根据所述编译参数和编译模板对所述block进行编译,得到所述block适用于相应计算平台上的神经网络的库函数。
5.根据权利要求3所述的方法,其特征在于,所述若匹配成功,则在预设的性能库中提取所述block对应的编译参数和编译模板,根据所述编译参数和编译模板对所述block进行编译,得到所述block对应的库函数,包括:
若匹配到预设的向量或矩阵运算函数,则在预设的性能库中的线性代数库中,提取所述block对应的编译参数和编译模板,并根据所述编译参数和编译模板对所述block进行编译,得到所述block对应的库函数。
6.根据权利要求1所述的方法,其特征在于,所述根据connect信息中的循环信息,在预设的性能库中对所述block进行匹配,包括:
判断connect信息中的循环信息中的循环变量是否位于输入端口、权值端口和输出端口的坐标中,得到判断结果;
根据所述判断结果对所述循环信息对应的循环体进行分类,得到所述循环体的类型;
根据所述循环体的类型,确定所述循环体的向量或矩阵运算;
根据所述循环体的向量或矩阵运算,在预设的性能库中的线性代数库中对所述block进行匹配。
7.根据权利要求6所述的方法,其特征在于,根据所述循环体的类型,确定所述循环体的向量或矩阵运算,包括:
若所述循环体为C类型,则该循环体的向量或矩阵运算为矩阵乘运算;
若所述循环体为M类型、N类型或K类型,则该循环体的向量或矩阵运算为矩阵乘运算;
若所述M类型、N类型或K类型为空循环,则将所述矩阵乘运算降维成矩阵与向量相乘运算或者向量相乘运算。
8.一种目标代码的生成方法,其特征在于,包括如权利要求1至7中任一项所述方法的步骤,所述目标代码的生成方法还包括:
获取计算图中拓扑结构的连接关系信息;
根据所述连接关系信息建立执行的偏序;
根据所述偏序、所述拓扑结构中每个节点执行的代价模型以及所述block对应的核函数,生成目标代码。
9.一种组合处理装置,其特征在于,所述组合处理装置包括中央处理器和其他处理器,所述中央处理器与所述其他处理器连接,所述其他处理器包括图形处理器和/或神经网络处理器;
所述中央处理器用于执行如权利要求1至7中任一项所述方法的步骤,并根据所述block对应的核函数生成目标代码,以及将所述目标代码发送至所述其他处理器;
所述其他处理器用于接收所述目标代码并运行所述目标代码。
10.一种编译系统,所述编译系统包括服务器和终端,所述服务器与所述终端通信连接,其特征在于,所述服务器包括如权利要求9所述的其他处理器,所述终端包括如权利要求9所述的中央处理器。
CN201910944408.7A 2019-09-30 2019-09-30 核函数的生成方法、目标代码的生成方法和组合处理装置 Pending CN110825380A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910944408.7A CN110825380A (zh) 2019-09-30 2019-09-30 核函数的生成方法、目标代码的生成方法和组合处理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910944408.7A CN110825380A (zh) 2019-09-30 2019-09-30 核函数的生成方法、目标代码的生成方法和组合处理装置

Publications (1)

Publication Number Publication Date
CN110825380A true CN110825380A (zh) 2020-02-21

Family

ID=69548600

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910944408.7A Pending CN110825380A (zh) 2019-09-30 2019-09-30 核函数的生成方法、目标代码的生成方法和组合处理装置

Country Status (1)

Country Link
CN (1) CN110825380A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112631605A (zh) * 2020-12-31 2021-04-09 深圳前海微众银行股份有限公司 联邦学习模型的代码编译方法、装置、设备及存储介质
CN113467783A (zh) * 2021-07-19 2021-10-01 中科曙光国际信息产业有限公司 一种人工智能加速器的核函数编译方法和装置
CN113742646A (zh) * 2020-05-28 2021-12-03 红帽公司 将单语言复合函数编译为单个实体

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101771875A (zh) * 2009-01-07 2010-07-07 索尼公司 编码设备、用于调节目标代码量的方法和记录介质
CN104866297A (zh) * 2014-02-26 2015-08-26 华为技术有限公司 一种优化核函数的方法和装置
CN107851002A (zh) * 2015-08-31 2018-03-27 华为技术有限公司 一种代码编译方法及代码编译器
CN110147236A (zh) * 2019-04-30 2019-08-20 阿里巴巴集团控股有限公司 代码编译方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101771875A (zh) * 2009-01-07 2010-07-07 索尼公司 编码设备、用于调节目标代码量的方法和记录介质
CN104866297A (zh) * 2014-02-26 2015-08-26 华为技术有限公司 一种优化核函数的方法和装置
CN107851002A (zh) * 2015-08-31 2018-03-27 华为技术有限公司 一种代码编译方法及代码编译器
CN110147236A (zh) * 2019-04-30 2019-08-20 阿里巴巴集团控股有限公司 代码编译方法及装置

Non-Patent Citations (1)

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

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113742646A (zh) * 2020-05-28 2021-12-03 红帽公司 将单语言复合函数编译为单个实体
CN112631605A (zh) * 2020-12-31 2021-04-09 深圳前海微众银行股份有限公司 联邦学习模型的代码编译方法、装置、设备及存储介质
CN112631605B (zh) * 2020-12-31 2024-04-26 深圳前海微众银行股份有限公司 联邦学习模型的代码编译方法、装置、设备及存储介质
CN113467783A (zh) * 2021-07-19 2021-10-01 中科曙光国际信息产业有限公司 一种人工智能加速器的核函数编译方法和装置
CN113467783B (zh) * 2021-07-19 2023-09-12 中科曙光国际信息产业有限公司 一种人工智能加速器的核函数编译方法和装置

Similar Documents

Publication Publication Date Title
CN110689138B (zh) 运算方法、装置及相关产品
CN112292667B (zh) 选择处理器的方法和装置
JP6763072B2 (ja) データ処理グラフのコンパイル
CN110825380A (zh) 核函数的生成方法、目标代码的生成方法和组合处理装置
CN109359732B (zh) 一种芯片及基于其的数据处理方法
CN111104120B (zh) 神经网络编译方法、系统及相应异构计算平台
CN111160551A (zh) 计算图执行方法、计算机设备及存储介质
CN110717584A (zh) 神经网络编译方法、编译器、计算机设备及可读存储介质
US11694075B2 (en) Partitioning control dependency edge in computation graph
US11556756B2 (en) Computation graph mapping in heterogeneous computer system
CN110689116A (zh) 一种神经网络剪枝方法、装置、计算机设备及存储介质
Dong et al. Characterizing the microarchitectural implications of a convolutional neural network (cnn) execution on gpus
Barrachina et al. PyDTNN: a user-friendly and extensible framework for distributed deep learning
CN113885871A (zh) 支持机器学习训练的专用后端代码生成方法及装置
Goli et al. Accelerated machine learning using TensorFlow and SYCL on OpenCL Devices
CN111831285B (zh) 一种面向内存计算平台的代码转换方法、系统及应用
WO2023030507A1 (zh) 编译优化方法、装置、计算机设备以及存储介质
Birkbeck et al. A dimension abstraction approach to vectorization in Matlab
CN113688982A (zh) 处理单元、相关装置和方法
CN113031954A (zh) 代码编译方法、装置、电子设备、存储介质及异构系统
CN115600664A (zh) 算子处理方法、电子设备及存储介质
Custers Algorithmic species: Classifying program code for parallel computing
CN115840894A (zh) 一种用于处理多维张量数据的方法及其相关产品
US20210034333A1 (en) Boolean multi-flow programming
CN110866598A (zh) block的合并方法、block的划分方法、组合处理装置及编译系统

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

Application publication date: 20200221