CN110659070A - 高并行度计算系统及其指令调度方法 - Google Patents
高并行度计算系统及其指令调度方法 Download PDFInfo
- Publication number
- CN110659070A CN110659070A CN201810715278.5A CN201810715278A CN110659070A CN 110659070 A CN110659070 A CN 110659070A CN 201810715278 A CN201810715278 A CN 201810715278A CN 110659070 A CN110659070 A CN 110659070A
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- data
- computing system
- class
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Abstract
提出了一种高并行度计算系统及其指令调度方法。该计算系统包括:指令读取和分发模块,用于以特定顺序读取多个类别的指令,并将获取的指令按照类别分发给对应的功能模块;用于缓存执行计算所需数据和指令的内部缓存;各自对由所述指令读取和分发模块分发的本类别指令进行顺序执行并从所述内部缓存中读取所需数据的多个功能模块;以及其中,所述特定顺序通过将所述指令按照类别和依赖关系组成的有向无环图进行拓扑排序得到。由此,基于对按照指令类别和依赖关系构造的有向无环图进行拓扑排序来进行取值,就能够通过相对简单的操作来避免指令依赖所造成的死锁。优选地,上述排序可在指令编译阶段实现,由此进一步降低计算系统本身的资源消耗。
Description
技术领域
本发明涉及高并行度计算领域,更具体地,涉及高并行度计算系统及其指令调度方法和对应的编译方法。
背景技术
神经网络(Neural Network)近年来成为图像识别领域的研究热点。经训练的神经网络模型,可以用于图像分类、物体识别与显著性检测等诸多领域。近年来神经网络模型呈现计算规模增加、复杂度提升的趋势,利用传统的CPU平台,已无法满足其实用性需求。因此,利用FPGA、GPU、ASIC等异构计算平台进行神经网络加速器设计成为新的研究热点。其中,相较GPU平台,FPGA和ASIC能够实现更为灵活的硬件架构以及更高的计算能效比,更适应算法高速发展的要求。
当利用这类异构计算平台来执行计算时,相比于与外部存储器进行数据存取所需的时间成本,并行计算的执行时间很短。因此,如何充分利用计算平台中各模块的并行执行能力来提升系统计算效率,成为这些异构计算平台所需考虑的重要问题。
因此,仍然需要一种能够优化高并行度计算的相关方案。
发明内容
为了解决上述至少一个问题,本发明提出了一种高并行度计算系统及其指令调度方法,以及相应的指令编译方法。本发明的技术方案通过构造包括各类指令执行和依赖关系的有向无环图来确定合理的取值顺序,并通过简单维持若干的依赖距离来实现对读取指令的合理分发。
根据本发明的一个方面,提出了一种高并行度计算系统,包括:指令读取和分发模块,用于以特定顺序读取多个类别的指令,并将获取的指令按照类别分发给对应的功能模块;用于缓存执行计算所需数据和指令的内部缓存;各自对由所述指令读取和分发模块分发的本类别指令进行顺序执行并从所述内部缓存中读取所需数据的多个功能模块;以及其中,所述特定顺序通过将所述指令按照类别和依赖关系组成的有向无环图进行拓扑排序得到。由此,基于对按照指令类别和依赖关系构造的有向无环图进行拓扑排序来进行取值,就能够通过相对简单的操作来避免指令依赖所造成的死锁。优选地,上述排序可以在指令编译阶段实现,由此进一步降低计算系统本身的资源消耗。
可以利用同类指令的串行性对有向无环图进行简化,例如,以将某一指令对于另一类别中两个或以上指令的依赖简化为对所述另一类别中两个或以上指令中最后一个指令的直接依赖,以及将同一类别的两个或以上指令对另一类别中某一指令的依赖简化为所述同一类别的两个或以上指令中的最早指令对所述对另一类别中一个指令的直接依赖,和所述同一类别的两个或以上指令中的在后指令对在前指令的直接依赖。由此进一步方便对有向无环图的拓扑排序。
优选地,指令读取和分发模块可以按照读取指令的所述特定顺序向所述多个功能模块分发对应的指令。
优选地,指令读取和分发模块还可以包括依赖矩阵,所述依赖矩阵包括分别用于指示每个类别的指令是否依赖其他某一类别的指令的多个指示器,并且至少在所述指示器指示某一类别的指令不依赖其他所有类别的指令时,向用于执行该类别指令的功能模块分发对应的指令。多个指示器可以是多个计数器,其中每个计数器指示某类指令对另一类指令的存在依赖的个数。相应地,指令读取和分发模块还包括用于缓存读取的指令的先进先出队列(FIFO)。
所述指令读取和分发模块读取的指令中可以包括所述指令与其他指令的显式依赖关系,并且所述指令读取和分发模块根据所述显式依赖关系和对指令的分发更新所述依赖矩阵中的每个计数器的取值。
进一步地,指令读取和分发模块直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示分发待分发的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示。
具体地,多个功能模块可以包括:将用于执行计算的数据从外部存储器加载至内部缓存的数据加载指令的数据加载引擎;从所述内部缓存读取所述数据以执行运算并将运算结果回存所述内部缓存的数据运算指令的数据运算引擎;以及将所述运算结果从所述内部缓存存储回所述外部存储器的数据存储指令的数据存储引擎。相应地,依赖矩阵可以至少包括如下指示器:用于指示数据加载指令依赖数据存储指令的第一指示器,用于指示数据运算指令依赖数据加载指令的第二指示器;以及用于指示数据存储指令依赖数据运算指令的第三指示器。
指令读取和分发模块于是基于所述数据加载引擎执行完当前数据加载指令的结束标示以及所述第一指示器对数据加载指令不依赖数据存储指令的指示,向所述数据加载引擎分发下一数据加载指令;和/或基于所述数据运算引擎执行完当前数据运算指令的结束标示以及所述第二指示器对数据运算指令不依赖数据加载指令的指示,向所述数据运算引擎分发下一数据运算指令;和/或基于所述数据存储引擎执行完当前数据存储指令的结束标示以及所述第三指示器对数据存储指令不依赖数据运算指令的指示,向所述数据存储引擎分发下一数据存储指令。
该高并行度计算系统可以是神经网络计算系统,并且所述内部缓存中缓存的执行计算所需的数据是执行神经网络计算所需的特征图数据和参数数据。优选地,该计算系统至少部分由GPU、FPGA或ASIC实现。
根据本发明的另一个方面,提出了一种高并行度指令调度方法,包括:以特定顺序读取多个类别的指令,所述特定顺序通过将所述指令按照类别和依赖关系组成的有向无环图进行拓扑排序得到;将读取的多个类别的指令按照类别分发给对应的功能模块;以及多个功能模块分别对分发获取的本类别指令进行顺序执行。
在一个实施例中,该指令调度方法还可以包括:基于所述指令的依赖关系构造依赖矩阵,所述依赖矩阵包括分别用于指示每个类别的指令是否依赖其他某一类别的指令的多个指示器。相应地,指令分发步骤可以包括:至少在所述指示器指示某一类别的指令不依赖其他所有类别的指令时,向用于执行该类别指令的功能模块分发对应的指令。
多个指示器可以是多个计数器,其中每个计数器指示某类指令对另一类指令的存在依赖的个数。由此,该指令调度方法还可以包括:获取读取的指令中包括的所述指令与其他指令的显式依赖关系,并且基于所述指令的依赖关系构造依赖矩阵可以包括:根据所述显式依赖关系和对指令的分发更新所述依赖矩阵中的每个计数器的取值。由此,指令分发步骤可以包括:直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示向用于执行该类别指令的功能模块分发对应的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示。
具体地,获取的多个类别的指令包括:将用于执行计算的数据从外部存储器加载至内部缓存的数据加载指令;从所述内部缓存读取所述数据以执行运算并将运算结果回存所述内部缓存的数据运算指令;以及将所述运算结果从所述内部缓存存储回所述外部存储器的数据存储指令。对应的功能模块因此可以包括:数据加载引擎;数据运算引擎;以及数据存储引擎。依赖矩阵至少包括用于指示数据加载指令依赖数据存储指令的第一指示器,用于指示数据运算指令依赖数据加载指令的第二指示器,以及用于指示数据存储指令依赖数据运算指令的第三指示器。
相应地,直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示向用于执行该类别指令的功能模块分发对应的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示可以包括:基于所述数据加载引擎执行完当前数据加载指令的结束标示以及所述第一指示器对数据加载指令不依赖数据存储指令的指示,向所述数据加载引擎分发下一数据加载指令;和/或基于所述数据运算引擎执行完当前数据运算指令的结束标示以及所述第二指示器对数据运算指令不依赖数据加载指令的指示,向所述数据运算引擎分发下一数据运算指令;和/或基于所述数据存储引擎执行完当前数据存储指令的结束标示以及所述第三指示器对数据存储指令不依赖数据运算指令的指示,向所述数据存储引擎分发下一数据存储指令。
上述读取指令所具有的特定顺序和/或指令所带有的显式依赖关系信息可以在该指令送入计算系统之前通过编译实现。因此,根据本发明的又一个方面,提出了一种神经网络编译方法,包括:获取神经网络结构与参数;基于所述神经网络的结构将执行神经网络计算所需的指令按照类别和依赖关系生成有向无环图;对所述有向无环图进行拓扑排序得到具有特定顺序的指令;以及生成用于上述计算系统执行神经网络计算的、具有所述特定顺序的二进制指令码。
优选地,基于所述神经网络的结构将执行神经网络计算所需的指令按照类别和依赖关系生成有向无环图包括:将某一指令对于另一类别中两个或以上指令的依赖简化为对所述另一类别中两个或以上指令中最后一个指令的直接依赖,以及将同一类别的两个或以上指令对另一类别中某一指令的依赖简化为所述同一类别的两个或以上指令中的最早指令对所述对另一类别中一个指令的直接依赖,和所述同一类别的两个或以上指令中的在后指令对在前指令的直接依赖,以获得经简化的所述有向无环图。
优选地,生成用于计算系统执行神经网络计算的、具有所述特定顺序的二进制指令码还包括:生成包括当前指令与其他指令的显式依赖关系的二进制指令码。
由此,本发明的高并行度计算系统及其指令调度方法可以通过构造有向无环图并进行拓扑排序而以相对简单的方式实现能避免由指令依赖引起的死锁的取指顺序。基于上述取值顺序,并结合例如在指令中显式指明的依赖关系,取值和分发模块可以通过简单维护依赖矩阵来实现对各引擎并行执行指令的合理分发,由此提升计算系统中各引擎之间的并行度。进一步地,上述取值顺序和显式依赖可以在指令送入计算系统之前通过编译实现,由此进一步降低计算系统本身的资源消耗。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了典型CNN的构成例。
图2示出了神经网络中一个卷积层的典型操作例。
图3示出了卷积操作的一个例子。
图4示出了现有神经网络编译器的编译示意图。
图5示出了根据本发明一个实施例的高并行计算系统的组成示意图。
图6示出了本发明涉及的有向无环图的一个例子。
图7示出了本发明涉及的简化的有向无环图的一个例子。
图8示出了根据本发明另一个实施例的高并行计算系统的组成示意图。
图9示出了根据本发明一个实施例的高并行度指令调度方法的流程示意图。
图10示出了根据本发明一个实施例的神经网络编译方法的流程示意图。
图11示出了可用于实现本发明所涉及神经网络计算的SoC的一个例子。
具体实施方式
下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
人工智能近年得到迅速发展,在图像分类、检测、视频和语音处理等领域取得良好的应用效果,并且依然具备极大的发展前景。神经网络是人工智能应用的核心,深度学习神经网络算法是其中最常见的一种神经网络模型。神经网络的工作负载特征是计算和数据密集。神经网络计算所需的乘加操作通常为G数量级,例如目标检测类神经网络SSD的计算量为120G操作次数。而计算所需参数则通常为M至数百M字节数量级,例如分类神经网络VGG的参数为480M字节。
常见的人工神经网络(ANN)包括深度神经网络(DNN)、循环神经网络(RNN)与卷积神经网络(CNN)。以下以CNN为例进行一定程度的背景说明。
CNN基本概念
如图1所示,典型的CNN由一系列有序运行的层(Layer)组成。
CNN神经网络由输入层、输出层和多个隐藏层串联组成。CNN的第一层读取输入值,例如输入图像,并输出一系列的激活值(也可称为特征图)。下面的层读取由上一层产生的激活值,并输出新的激活值。最后一个分类器(classifier)输出该输入图像可能属于的每一类别的概率。
这些层大致可分为带权重的层(如CONV层、全连接层、批量归一化层等)和不带权重的层(如池化层、ReLU层、Softmax层等)。CONV层(Convolutional layers,卷积层)以一系列特征图作为输入,并以卷积内核卷积获得输出激活值。池化层(Pooling layer)通常与CONV层相连,用于输出每个特征图中的每个分区(sub area)的最大值或平均值,由此通过亚采样降低计算量,同时保持某种程度的位移、尺度和形变不变性。一个CNN中可以包括卷积层和池化层之间的多个交替,由此逐步降低空间分辨率并增加特征映射的数量。CONV层之间也可以不经过池化层直接相连。随后可以连接至至少一个全连接层(FC),通过应用于输入特征向量上的线性变换,得到包括多个特征值的一维向量输出。
总体来说,带权重的层的操作可以表示为:
Y=WX+b,
其中W为权重值,b为偏置,X为输入激活值,Y为输出激活值。
不带权重的层的操作可以表示为:
Y=f(X),
其中f(X)为非线性函数。
在此,“权重”(weights)指代隐藏层中的参数。在CNN网络中,可以将权重认为是针对每一卷积层尺寸可以有所变化,针对每一卷积层的每个通道取值也可以有所变化的卷积核。从广义上理解,权重还可以包括偏置,并且是通过训练过程习得的数值,并且在推理时保持不变。另外,CNN还可以包括用于执行其他操作的参数,例如不带权重的层进行各类操作所需的参数。激活值指代从输入层开始,每一层的输出由输入值和权重值通过运算得到,在各层之间传递的数值,也称为特征值。与参数值不同,激活值的分布会根据输入数据样本而动态变化。
如图所示,在特征值被送入FC层之前,从输入特征图(输入图像)开始的各个层都具有多个通道(channel),用以表征输入图像的不同特征。在输入为彩色图像时,最初的输入特征图通常具有RGB三个通道,同一层内不同通道的特征值与尺寸相同但取值可以不同的卷积核分别进行卷积计算以生成该层的输出特征值,随后该特征值被送入通道数与卷积核大小可以不同的下一CONV层(Layer 1)中进行进一步的特征提取。重复上述过程直至Layer 7的输出被送入FC层。如图所示,在输入特征图中的W、H和C分别指代宽、高和通道三个维度。上述箭头可以指代具体计算顺序或计算并行度(尤其是在高并行度计算平台上进行计算的情况下)。
第一个FC层可以是用于将各个通道的特征提取为一个一维特征向量的全连接层。第二个FC层则可以是用于进行分类的分类器。
卷积层的操作
无论是DNN、RNN还是CNN,典型的神经网络模型,尤其是用于计算机视觉应用的神经网络模型都包括如图1所示的多个CONV层。针对每个CONV层,都会从输入的特征图数据中提取出更高级别的抽象数据,以保留输入数据中重要且唯一的信息。现代的DNN能够通过利用深层级(例如,几百个卷积层)来实现优异的视觉性能。
图2示出了神经网络中一个卷积层的典型操作例。上述操作同样适用于全连接层,例如图1所示的FC层。每个卷积层的三维输入是具有多个通道(C)的二维特征图(W×H)。对进行视觉处理的神经网络而言,其第一次的输入通常是具有RGB三个颜色通道的二维图像。多个三维过滤器(具有R×S×C维度的M个过滤器,过滤器也可被称为卷积核)随后与输入特征图进行卷积,并且每个过滤器可以生成输出的三维特征图(具有M个通道的二维E×F特征图)的一个通道。相同的一组M个过滤器可以应用于具有N个输入特征图的批次(B)。于是,N个输入特征图能够获取N个输出特征图(在此,也可以将批次B看作是输入的第四个维度)。此外,可以对经过滤的结果施加1维的偏置(图2中未示出)。
图3示出了卷积操作的一个例子。该卷积操作可以看作是在某一个通道C上,二维过滤器(R×S)与二维特征图(W×H)的卷积。如图3所示,使用一个3x3(R×S)的卷积核,以步长1对一个5x5(W×H)的特征图进行卷积计算。图的左侧示出了第一次卷积计算,中间示出了第二次卷积计算,依次类推。根据卷积计算的定义可知,每次具体的卷积计算可以分解成多次乘加计算。在经过9次卷积计算后,得到图3右侧的经卷积的3x3特征图。这9次的卷积计算之间不存在依赖关系,因此可以在利用高并行度计算平台进行计算时,在单次操作中完成执行(并行度M通常可以达到数千量级)。图3可以看作是CONV层多个通道中的一个通道C的卷积操作,在完成了所有通道C的卷积操作以及后续的相加操作后才能得到输出三维特征图的M个通道中的一个通道的特征图。更进一步地,上述输出三维特征图(具有M个通道的二维E×F特征图)也只是该批次中N个输出三维特征图之一。
神经网络的部署
在部署使用CNN进行推理(例如,图像分类)之前,首先需要对CNN进行训练。通过训练数据的大量导入,确定神经网络模型各层的参数,例如权重和偏置。
为了将训练之后的深度神经网络进行部署,需要使用编译器将神经网络算法编译成计算平台所能执行的二进制指令流。不同于使用如C++或Java等的高级语言开发的应用程序,神经网络算法有着自己独特的语法和结构。有鉴于此,业已出现了专用于神经网络计算的高性能计算平台以及相应的神经网络编译器。例如,一种深度神经网络编译器DNNC(Deep Neural Network Compiler)可将神经网络算法编译成为DPU(Deep LearningProcessor Unit,深度学习专用处理器)平台的优化指令流。通过解析神经网络的拓扑结构来构建与之对等的编译器内部计算图中间表示IR(Intermediate Representation)以及IR中的控制流和数据流信息,神经网络编译器基于IR施加各种编译优化和变换技术,在提高DPU计算性能的同时有效降低系统访存带宽和功耗需求。图4示出了现有神经网络编译器的编译示意图。如图4所示,可以将专门的神经网络算法(例如,针对经剪枝处理的CNN)送入包括编译前端、优化器和指令生成器的神经网络编译器,并生成用于神经网络计算平台(例如,DPU)的二进制指令码。
在此,“编译”指代利用编译器从一种高级的形式化方法描述的表示产生低级的面向计算平台上执行的目标代码的过程。由于硬件计算平台处理的只涉及二进制指令码,因此需要编译器将人们熟悉的高级语言描述转换成计算机可读的低级二进制代码。不同于使用C/C++等高级编程语言描述的源程序代码,神经网络需要通过描述神经网络算法的专用模型进行表示。神经网络算法包括神经网络算法的拓扑结构以及神经网络算法的参数。相比之下,神经网络拓扑结构的形式化描述所需的存储空间要远小于体量巨大的神经网络算法参数所需的存储空间。
在此,神经网络计算系统可以指代专用于执行神经网络推理计算的硬件平台,其也可被称为神经网络计算平台,并且可以被实现为神经网络专用的处理器,如上文所述的DPU。
本发明的高并行度计算系统
根据指令和数据流的概念可以将计算机体系结构划分为四种基本类型,分别是单指令单数据流、单指令多数据流、多指令单数据流以及多指令多数据流。单指令单数据流类型是一种传统架构,其硬件不支持任何形式的并行计算,所有指令都是串行执行,早期的计算机多采用此类架构。单指令多数据流架构常用于数字信号处理、图像处理以及多媒体信息处理等领域,一条指令对应多个并行数据处理单元。多指令单数据流架构并无实际应用,因为往往采用多指令架构的计算系统都对应有多个并行的数据流,所以多指令多数据流架构应用更为广泛。
在一个复杂的高并行计算系统中,往往由多个不同功能但有一定依赖关系的功能模块(引擎)组成,调度这些引擎的模块负责指令的读取和分发,指令读取和分发模块的一个主要任务是在依赖关系满足的情况下分发给相应的引擎以指令。在此,高并行指代各引擎的指令执行是高度并行的。图5示出了根据本发明一个实施例的高并行计算系统的组成示意图。在图中细实线表示指令通路,粗实线表示数据通路。
在神经网络推理应用中,由于其涉及大量不相关的计算(如上参考图2和图3所述的可同时进行的大量乘加计算),且需要多个相互依赖的加速引擎协同工作,往往采用采用上述多指令多数据流架构,例如图5所示的计算系统架构。但应该理解的是,图5的结构也适用于其他各类指令被各自的引擎高并行执行的场合。
如图所示,高并行度计算系统500可以包括指令读取和分发模块510内部缓存520和多个功能模块530。
指令读取和分发模块510可用于以特定顺序读取多个类别的指令,并将获取的指令按照类别分发给对应的功能模块。在其他实施例中,指令读取和指令分发也可以是分开的模块,本发明对此不做限制。
内部缓存520可用于缓存执行计算所需数据和指令。多个功能模块530则各自对由指令读取和分发模块510分发的本类别指令进行顺序执行并从所述内部缓存中读取执行指令所需的数据。多个功能模块可以各自进行并行的指令执行,只有不同类别的指令间的依赖关系能够得到满足。多个功能模块中的“多个”指代两个或以上,图中虽然示出了三个功能模块,但应该理解的是,计算系统500可以根据具体应用而具有更多或是更少的功能模块。
在本发明中,指令读取和分发模块510读取指令的特定顺序可以通过将所述指令按照类别和依赖关系组成的有向无环图进行拓扑排序得到。图6示出了本发明涉及的有向无环图的一个例子。
在系统拥有的多类别指令符合如下特点时,可以构造用于进行本发明特定顺序读取的有向无环图:
(1)不同类别的指令执行是并行的;
(2)相同类别的指令执行是串行的;
(3)不同类别的指令之间存在一定的相互依赖关系;以及
(4)依赖关系不存在死锁。
当各类别的指令符合上述特点时,可以构造出如图6所示的有向无环图。为了方便说明,假设系统中有三类指令,分别是LOAD,STORE和CALC,分别用于加载数据,存储数据和计算数据。在某个程序中,这三类指令的依赖方式如图6所示。在此,Ln表示第n条LOAD指令,Cn表示第n条CALC指令,Sn表示第n条STORE指令,箭头表示依赖关系,箭头的头部依赖箭头的尾部,箭头的尾部被箭头的头部依赖。
如图6所示C0依赖L0和L1,表示C0的执行必须在L0和L1都执行完才能执行;S0和S1都依赖C1,表示只要C1执行完就可以执行S0和S1,但由于同一类指令内部只能顺序执行,所以天然的S1依赖S0,即S0执行完才能执行S1;其它依赖以此类推。
由于同一类指令只能串行执行,所以能够对例如图6所示的有向无环图进行简化。具体地,可以将某一指令对于另一类别中两个或以上指令的依赖简化为对所述另一类别中两个或以上指令中最后一个指令的直接依赖,以及将同一类别的两个或以上指令对另一类别中某一指令的依赖简化为所述同一类别的两个或以上指令中的最早指令对所述对另一类别中一个指令的直接依赖,和所述同一类别的两个或以上指令中的在后指令对在前指令的直接依赖。相应地,在图6的示例中,C0依赖L0和L1可以化简为只依赖L1;S0和S1都依赖C1可以化简为S0依赖C1,而S1只依赖S0。由此,可以得到简化的图7。图7示出了本发明涉及的简化的有向无环图的一个例子。
由此,L0-3、C0-2和S0-2之间的依赖关系就抽象成图7所示的简化有向无环图。无环保证了依赖关系之间不存在死锁。
在此,如果系统中指令读取模块采用最朴素的串行设计进行读取,即取一条指令,判断依赖关系决定是否执行,执行完再取下一条指令,那么有可能存在准备执行的指令依赖一条还未读取的指令导致系统锁死的情况。而通过将图7所示有向无环图进行拓扑排序,按照排序后的顺序依次进行指令读取就能够保证不会出现如上所述的死锁情况。可以对图7所示的有向无环图进行拓扑排序的,由此得到如下用于进行指令读取的特定顺序:
L0->L1->C0->L2->C1->S0->S1->L3->C2->S2,
对于可并行执行且相互之间不存在依赖关系的C0和L2,读取的先后顺序可以任意变化,因此,如下的取指顺序也是成立的:
L0->L1->L2->C0->C1->S0->S1->L3->C2->S2。
在指令读取模块采用更复杂的设计以提高效率的情况下,还可以在一定的约束条件下对上述的取值指令进行调整,上述调整同样位于本发明公开原理所涵盖的范围内。
指令读取和分发模块510通过按照对上述有向无环图进行拓扑排序的顺序进行指令读取,就能够方便地避免准备执行的指令依赖一条还未读取的指令导致系统锁死的情况。对指令进行的上述排序可以在指令送入到本发明的高并行计算系统中时由例如系统中所包含的专门的排序模块实现,也可以在例如指令编译阶段进行(下文将详述)。
在一个实施例中,指令读取和分发模块510以读取指令的所述特定顺序向所述多个功能模块分发对应的指令。在其他实施例中,指令读取和分发模块510可以通过构造专门的依赖矩阵来实现对各类别指令的并行分发以及各类指令被对应功能模块的并行执行。
图5进一步示出了指令读取和分发模块510可以可选地包括依赖矩阵511,用以解决分发指令时各类指令之间的依赖问题。该依赖矩阵511可以包括分别用于指示每个类别的指令是否依赖其他某一类别的指令的多个指示器,并且至少在所述指示器指示某一类别的指令不依赖其他所有类别的指令时,向用于执行该类别指令的功能模块分发对应的指令。
在一个实施例中,依赖矩阵511所包含的多个指示器可以是多个计数器,其中每个计数器指示某类指令对另一类指令的存在依赖的个数。假设系统中有N类指令,若每类指令都与其他类别的指令存在依赖和被依赖的关系,则该矩阵可由Nx(N-1)个计数器构成,并且可以将初始值折为0。当读取的指令A依赖另一类指令B时,则判断相应计数器(A_dpdon_B)是否大于零,若大于零则减一,执行;当读区的指令A被另一类指令B依赖时,则相应计数器加1(B_dpdon_A),执行。
同样以图6和图7所示的包括LOAD,STORE和CALC三类指令分别用于加载数据,存储数据和计算数据的系统为例。该系统的指令读取和分发模块所包含的依赖矩阵可由6个计数器构成,如下表所示。
即,该依赖矩阵由6个计数器构成,分别是:
LOAD依赖CALC(l_dpdon_c);
LOAD依赖STORE(l_dpdon_s);
CALC依赖LOAD(c_dpdon_l);
CALC依赖STORE(c_dpdon_s);
STORE依赖LOAD(s_dpdon_l);
STORE依赖CALC(s_dpdon_c)。
在此,N/A表示由于相同类别的指令执行是串行的,因此同类指令的执行天然依赖于在前同类指令的执行完毕。
当指令按照L0->L1->C0->L2->C1->S0->S1->L3->C2->S2的顺序读入的时候,判断依赖的过程如下:
L0:不被其他类指令依赖,直接执行;
L1:被CALC依赖,c_dpdon_l加一,执行L1;
C0:依赖LOAD,因为c_dpdon_l此时等于1,所以c_dpdon_l减一,执行C0;
L2:被CALC依赖,c_dpdon_l加一,执行L2;
C1:依赖LOAD,因为c_dpdon_l此时等于1,所以c_dpdon_l减一,同时被STORE依赖,s_dpdon_c加一,执行C1;
S0:依赖CALC,因为s_dpdon_c此时等于1,所以s_dpdon_c减一,执行S0;
S1:被LOAD依赖,l_dpdon_s加一,执行S1;
L3:依赖STORE,因为l_dpdon_s此时等于1,所以l_dpdon_s减一,同时被CALC依赖,c_dpdon_l加一,执行L3;
C2:依赖LOAD,因为c_dpdon_l此时等于1,所以c_dpdon_l减一,同时被SAVE依赖,s_dpdon_c加一,执行C2;
S2:依赖CALC,因为s_dpdon_c此时等于1,所以s_dpdon_c减一,执行S0;
END:所有指令执行完毕,依赖矩阵中各个计数器应该处于归零状态。
由此,指令读取和分发模块(例如,图5所示的指令读取和分发模块511)可以直接基于所述对应指示器的指示(例如,对应计数器的读数是否大于零)和对应功能模块完成在前指令的指示分发待分发的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示。相应地,指令读取和分发模块还包括先进先出队列(FIFO)用于缓存运行读取的指令。应该理解的是,虽然上例示出了用于依赖矩阵的六个计数器,但在具体应用中,如果并非是每类指令都对所有其他类别的指令存在依赖关系,则可以相应减少计数器的数量。换句话说,可以省略用来表示实际上不存在的依赖关系的计数器。
在此,指令间依赖信息的获取可以通过指令读取和分发模块对各类指令的读取而直接获得。在一个实施例中,由指令读取和分发模块读取的指令中包括所述指令与其他指令的显式依赖关系,因此指令读取和分发模块可以直接根据所述显式依赖关系和对指令的分发更新所述依赖矩阵中的每个计数器的取值。与指令读取的特定排序相类似,可以在指令送入到本发明的高并行计算系统中时由例如系统中所包含的专门的显式依赖关系确定模块实现,也可以在例如指令编译阶段进行(下文将详述)。
在一个实施例中,图5所示的多个功能模块尤其可以实现为数据加载引擎、数据运算引擎和数据存储引擎。图8示出了根据本发明另一个实施例的高并行计算系统的组成示意图。在图中同样由细实线表示指令通路,粗实线表示数据通路。
如图所示,图8的神经网络计算系统800同样包括指令读取和分发模块810和内部缓存820。进一步地,该计算系统800的多个功能模块可以分别是数据加载引擎831、数据运算引擎832和数据存储引擎833。三个引擎共享一个内部缓存820,并且数据加载引擎831和数据存储引擎833例如可以经由总线或其他通信机制与外部存储器840进行数据交互。在此例中,内部缓存820可以是专门用于存储计算所需数据的缓存。因此,指令读取和分发模块810可以经由一个专门的先进先出队列(FIFO)821来从外部存储器840读取指令。在其他实施例中,FIFO 821的功能也可以并入内部缓存820。
数据加载引擎831可以执行将用于执行计算的数据从外部存储器加载至内部缓存的数据加载指令。在用于神经网络计算的情况下,加载的数据可以包括参数数据和特征图数据。参数数据可以包括权重数据(例如,卷积核)和诸如偏置等其他参数。特征图数据可以包括输入的图像数据,也可以包括各卷积层的中间计算结果。数据运算引擎832可以执行从内部缓存820读取数据以进行运算并将运算结果回存内部缓存820的数据运算指令。数据存储引擎833则可以执行将所述运算结果从内部缓存820存储回外部存储器840的数据存储指令。
指令读取和分发模块810同样可以包括依赖矩阵811。优选地,该依赖矩阵811至少可以包括用于指示数据加载指令依赖数据存储指令的第一指示器,用于指示数据运算指令依赖数据加载指令的第二指示器,以及用于指示数据存储指令依赖数据运算指令的第三指示器。当存在其他依赖关系时,还可以其他指示器(例如,当存在数据运算指令依赖于数据存储指令的情况下,还可以额外包括指示上述依赖关系的例如第四指示器)。
由此,指令读取和分发模块810可以基于数据加载引擎831执行完当前数据加载指令的结束标示以及第一指示器对数据加载指令不依赖数据存储指令的指示,向所述数据加载引擎831分发下一数据加载指令;和/或可以基于所述数据运算引擎执行完当前数据运算指令的结束标示以及所述第二指示器对数据运算指令不依赖数据加载指令的指示,向所述数据运算引擎分发下一数据运算指令;和/或可以基于所述数据存储引擎执行完当前数据存储指令的结束标示以及所述第三指示器对数据存储指令不依赖数据运算指令的指示,向所述数据存储引擎分发下一数据存储指令。
由此,本发明的指令读取和分发模块可以通过例如基于读取的各条指令中包括的显示依赖关系,更新依赖矩阵中各计数器的读数,在针对多个功能模块(加速引擎)的指令分发任务时,可以仅仅根据该引擎本身的指令执行状况(例如,在前指令的结束标示)和相关计数器的读数(是否大于零),就能够做出是否分发下一条指令的合理判断,而避免由于指令依赖而导致的死锁问题。
本发明的指令分发方案尤其适用于指令类别相对较少,且需要各引擎高度并行的神经网络计算系统,并且内部缓存中缓存的执行计算所需的数据可以是执行神经网络计算所需的特征图数据和参数数据。在一个实施例中,计算系统至少部分由GPU、FPGA或ASIC实现。
本发明的指令调度方案还可以实现为一种高并行度指令调度方法。该指令调度分发例如可由上述高并行度计算系统实现。图9示出了根据本发明一个实施例的高并行度指令调度方法的流程示意图。
在步骤S910,以特定顺序读取多个类别的指令,所述特定顺序通过将所述指令按照类别和依赖关系组成的有向无环图进行拓扑排序得到。在步骤S920,将读取的多个类别的指令按照类别分发给对应的功能模块。在不在S930,多个功能模块分别对分发获取的本类别指令进行顺序执行。
在一个实施例中,该指令调度方法还可以包括:基于所述指令的依赖关系构造依赖矩阵,所述依赖矩阵包括分别用于指示每个类别的指令是否依赖其他某一类别的指令的多个指示器。相应地,步骤S920可以包括:至少在所述指示器指示某一类别的指令不依赖其他所有类别的指令时,向用于执行该类别指令的功能模块分发对应的指令。
多个指示器可以是多个计数器,其中每个计数器指示某类指令对另一类指令的存在依赖的个数。由此,该指令调度方法还可以包括:获取读取的指令中包括的所述指令与其他指令的显式依赖关系,并且基于所述指令的依赖关系构造依赖矩阵可以包括:根据所述显式依赖关系和对指令的分发更新所述依赖矩阵中的每个计数器的取值。由此,步骤S920可以包括:直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示向用于执行该类别指令的功能模块分发对应的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示。
具体地,获取的多个类别的指令包括:将用于执行计算的数据从外部存储器加载至内部缓存的数据加载指令;从所述内部缓存读取所述数据以执行运算并将运算结果回存所述内部缓存的数据运算指令;以及将所述运算结果从所述内部缓存存储回所述外部存储器的数据存储指令。对应的功能模块因此可以包括:数据加载引擎;数据运算引擎;以及数据存储引擎。依赖矩阵至少包括用于指示数据加载指令依赖数据存储指令的第一指示器,用于指示数据运算指令依赖数据加载指令的第二指示器,以及用于指示数据存储指令依赖数据运算指令的第三指示器。
相应地,直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示向用于执行该类别指令的功能模块分发对应的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示可以包括:基于所述数据加载引擎执行完当前数据加载指令的结束标示以及所述第一指示器对数据加载指令不依赖数据存储指令的指示,向所述数据加载引擎分发下一数据加载指令;和/或基于所述数据运算引擎执行完当前数据运算指令的结束标示以及所述第二指示器对数据运算指令不依赖数据加载指令的指示,向所述数据运算引擎分发下一数据运算指令;和/或基于所述数据存储引擎执行完当前数据存储指令的结束标示以及所述第三指示器对数据存储指令不依赖数据运算指令的指示,向所述数据存储引擎分发下一数据存储指令。
在一个实施例中,上文提及的读取指令所具有的特定顺序和/或指令所带有的显式依赖关系信息可以在该指令送入计算系统之前通过编译实现,例如,通过图4所示的专用神经网络编译器实现。图10示出了根据本发明一个实施例的神经网络编译方法的流程示意图。
在步骤S1010,获取神经网络结构与参数。在步骤S1020,基于所述神经网络的结构将执行神经网络计算所需的指令按照类别和依赖关系生成有向无环图。在步骤S1030,对所述有向无环图进行拓扑排序得到具有特定顺序的指令。在步骤S1040,生成用于计算系统执行神经网络计算的、具有所述特定顺序的二进制指令码。计算系统可以是上文所述的高并行度计算系统。
具体地,步骤S1020可以包括:将某一指令对于另一类别中两个或以上指令的依赖简化为对所述另一类别中两个或以上指令中最后一个指令的直接依赖,以及将同一类别的两个或以上指令对另一类别中某一指令的依赖简化为所述同一类别的两个或以上指令中的最早指令对所述对另一类别中一个指令的直接依赖,和所述同一类别的两个或以上指令中的在后指令对在前指令的直接依赖,以获得经简化的所述有向无环图。
步骤S1040可以包括:生成包括当前指令与其他指令的显式依赖关系的二进制指令码。
由此,本发明的高并行度计算系统及其指令调度方案能够与在前的指令编译相结合,以相对比较简单的实现方式和很少的资源消耗就可以解决指令依赖问题
在一个实施例中,本发明的神经网络计算系统可以在包括通用处理器、存储器和数字电路的片上系统(SoC)实现。图11示出了可用于实现本发明所涉及神经网络计算的SoC的一个例子。
在一个实施例中,可由SoC上的数字电路部分(例如,FPGA)来实现本系统所需的深度学习网络,例如卷积神经网络。例如,使用GPU、FPGA或ASIC实现的神经网络专用处理器来实现根据本发明的指令调度方案。由于神经网络模型进行的是并行计算,因此通过逻辑硬件,尤其是GPU、FPGA或ASIC来实现神经网络计算功能具有天然优势,并且相比于软件执行,能够实现更低的功耗。
在一个实施例中,可以将通过在前训练得到的有关神经网络的全部参数都存储在片上系统的存储器(例如,主存储器,对应于图8中的外部存储器)中,在随后进行神经网络推理计算(例如,目标检测)时,首先从主存储器中读取神经网络各层的参数,再由图11所示的可编程逻辑模块进行执行。应该理解的是,还可以使用图11的可编程逻辑模块所示以外的其他架构来实现本发明的神经网络计算系统。
本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。
附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (23)
1.一种高并行度计算系统,包括:
指令读取和分发模块,用于以特定顺序读取多个类别的指令,并将获取的指令按照类别分发给对应的功能模块;
用于缓存执行计算所需数据和指令的内部缓存;
各自对由所述指令读取和分发模块分发的本类别指令进行顺序执行并从所述内部缓存中读取所需数据的多个功能模块;以及
其中,所述特定顺序通过将所述指令按照类别和依赖关系组成的有向无环图进行拓扑排序得到。
2.如权利要求1所述的计算系统,其中,所述有向无环图将某一指令对于另一类别中两个或以上指令的依赖简化为对所述另一类别中两个或以上指令中最后一个指令的直接依赖,以及将同一类别的两个或以上指令对另一类别中某一指令的依赖简化为所述同一类别的两个或以上指令中的最早指令对所述对另一类别中一个指令的直接依赖,和所述同一类别的两个或以上指令中的在后指令对在前指令的直接依赖。
3.如权利要求1所述的计算系统,其中,所述指令读取和分发模块按照读取指令的所述特定顺序向所述多个功能模块分发对应的指令。
4.如权利要求1所述的计算系统,其中,所述指令读取和分发模块还包括依赖矩阵,所述依赖矩阵包括分别用于指示每个类别的指令是否依赖其他某一类别的指令的多个指示器,并且至少在所述指示器指示某一类别的指令不依赖其他所有类别的指令时,向用于执行该类别指令的功能模块分发对应的指令。
5.如权利要求4所述的计算系统,其中,所述多个指示器是多个计数器,其中每个计数器指示某类指令对另一类指令的存在依赖的个数。
6.如权利要求5所述的计算系统,其中,所述指令读取和分发模块读取的指令中包括所述指令与其他指令的显式依赖关系,并且所述指令读取和分发模块根据所述显式依赖关系和对指令的分发更新所述依赖矩阵中的每个计数器的取值。
7.如权利要求4所述的计算系统,其中,所述指令读取和分发模块直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示分发待分发的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示。
8.如权利要求4所述的计算系统,其中,所述多个功能模块包括:
将用于执行计算的数据从外部存储器加载至内部缓存的数据加载指令的数据加载引擎;
从所述内部缓存读取所述数据以执行运算并将运算结果回存所述内部缓存的数据运算指令的数据运算引擎;以及
将所述运算结果从所述内部缓存存储回所述外部存储器的数据存储指令的数据存储引擎。
9.如权利要求8所述的计算系统,其中,所述依赖矩阵至少包括如下指示器:
用于指示数据加载指令依赖数据存储指令的第一指示器;
用于指示数据运算指令依赖数据加载指令的第二指示器;以及
用于指示数据存储指令依赖数据运算指令的第三指示器。
10.如权利要求9所述的计算系统,其中,所述指令读取和分发模块基于所述数据加载引擎执行完当前数据加载指令的结束标示以及所述第一指示器对数据加载指令不依赖数据存储指令的指示,向所述数据加载引擎分发下一数据加载指令;和/或
所述指令读取和分发模块基于所述数据运算引擎执行完当前数据运算指令的结束标示以及所述第二指示器对数据运算指令不依赖数据加载指令的指示,向所述数据运算引擎分发下一数据运算指令;和/或
所述指令读取和分发模块基于所述数据存储引擎执行完当前数据存储指令的结束标示以及所述第三指示器对数据存储指令不依赖数据运算指令的指示,向所述数据存储引擎分发下一数据存储指令。
11.如权利要求1所述的计算系统,其中,所述计算系统是神经网络计算系统,并且所述内部缓存中缓存的执行计算所需的数据是执行神经网络计算所需的特征图数据和参数数据。
12.如权利要求1所述的计算系统,其中,所述计算系统至少部分由GPU、FPGA或ASIC实现。
13.如权利要求1所述的计算系统,其中,所述指令读取和分发模块还包括用于缓存读取的指令的先进先出队列(FIFO)。
14.一种高并行度指令调度方法,包括:
以特定顺序读取多个类别的指令,所述特定顺序通过将所述指令按照类别和依赖关系组成的有向无环图进行拓扑排序得到;
将读取的多个类别的指令按照类别分发给对应的功能模块;以及
多个功能模块分别对分发获取的本类别指令进行顺序执行。
15.如权利要求14所述的方法,还包括:
基于所述指令的依赖关系构造依赖矩阵,所述依赖矩阵包括分别用于指示每个类别的指令是否依赖其他某一类别的指令的多个指示器,并且
将读取的指令按照类别分发给对应的功能模块包括:
至少在所述指示器指示某一类别的指令不依赖其他所有类别的指令时,向用于执行该类别指令的功能模块分发对应的指令。
16.如权利要求15所述的方法,其中,所述多个指示器是多个计数器,其中每个计数器指示某类指令对另一类指令的存在依赖的个数,并且,所述方法还包括:
获取读取的指令中包括的所述指令与其他指令的显式依赖关系,并且基于所述指令的依赖关系构造依赖矩阵包括:
根据所述显式依赖关系和对指令的分发更新所述依赖矩阵中的每个计数器的取值。
17.如权利要求15所述的方法,其中,至少在所述指示器指示某一类别的指令不依赖其他所有类别的指令时,向用于执行该类别指令的功能模块分发对应的指令包括:
直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示向用于执行该类别指令的功能模块分发对应的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示。
18.如权利要求17所述的方法,其中,获取的多个类别的指令包括:
将用于执行计算的数据从外部存储器加载至内部缓存的数据加载指令;
从所述内部缓存读取所述数据以执行运算并将运算结果回存所述内部缓存的数据运算指令;以及
将所述运算结果从所述内部缓存存储回所述外部存储器的数据存储指令;
并且对应的功能模块包括:
数据加载引擎;
数据运算引擎;以及
数据存储引擎。
19.如权利要求18所述的方法,其中,所述依赖矩阵至少包括如下指示器:
用于指示数据加载指令依赖数据存储指令的第一指示器;
用于指示数据运算指令依赖数据加载指令的第二指示器;以及
用于指示数据存储指令依赖数据运算指令的第三指示器。
20.如权利要求19所述的方法,其中,直接基于所述对应指示器的指示和对应功能模块完成在前指令的指示向用于执行该类别指令的功能模块分发对应的指令,而无需接收到所述待分发的指令所依赖的其他类型指令的执行结束指示包括:
基于所述数据加载引擎执行完当前数据加载指令的结束标示以及所述第一指示器对数据加载指令不依赖数据存储指令的指示,向所述数据加载引擎分发下一数据加载指令;和/或
基于所述数据运算引擎执行完当前数据运算指令的结束标示以及所述第二指示器对数据运算指令不依赖数据加载指令的指示,向所述数据运算引擎分发下一数据运算指令;和/或
基于所述数据存储引擎执行完当前数据存储指令的结束标示以及所述第三指示器对数据存储指令不依赖数据运算指令的指示,向所述数据存储引擎分发下一数据存储指令。
21.一种神经网络编译方法,包括:
获取神经网络结构与参数;
基于所述神经网络的结构将执行神经网络计算所需的指令按照类别和依赖关系生成有向无环图;
对所述有向无环图进行拓扑排序得到具有特定顺序的指令;以及
生成用于如权利要求1-13中任一项所述的计算系统执行神经网络计算的、具有所述特定顺序的二进制指令码。
22.如权利要求21所述的方法,其中,基于所述神经网络的结构将执行神经网络计算所需的指令按照类别和依赖关系生成有向无环图包括:
将某一指令对于另一类别中两个或以上指令的依赖简化为对所述另一类别中两个或以上指令中最后一个指令的直接依赖,以及将同一类别的两个或以上指令对另一类别中某一指令的依赖简化为所述同一类别的两个或以上指令中的最早指令对所述对另一类别中一个指令的直接依赖,和所述同一类别的两个或以上指令中的在后指令对在前指令的直接依赖,以获得经简化的所述有向无环图。
23.如权利要求21所述的方法,其中,生成用于计算系统执行神经网络计算的、具有所述特定顺序的二进制指令码还包括:
生成包括当前指令与其他指令的显式依赖关系的二进制指令码。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810715278.5A CN110659070B (zh) | 2018-06-29 | 2018-06-29 | 高并行度计算系统及其指令调度方法 |
US16/454,103 US11093225B2 (en) | 2018-06-28 | 2019-06-27 | High parallelism computing system and instruction scheduling method thereof |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810715278.5A CN110659070B (zh) | 2018-06-29 | 2018-06-29 | 高并行度计算系统及其指令调度方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110659070A true CN110659070A (zh) | 2020-01-07 |
CN110659070B CN110659070B (zh) | 2022-04-08 |
Family
ID=69027200
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810715278.5A Active CN110659070B (zh) | 2018-06-28 | 2018-06-29 | 高并行度计算系统及其指令调度方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110659070B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111222637A (zh) * | 2020-01-17 | 2020-06-02 | 上海商汤智能科技有限公司 | 神经网络模型部署方法及装置、电子设备和存储介质 |
CN111352896A (zh) * | 2020-03-03 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 人工智能加速器、设备、芯片以及数据处理方法 |
CN111538714A (zh) * | 2020-04-24 | 2020-08-14 | 咪咕文化科技有限公司 | 一种指令执行方法、装置、电子设备和存储介质 |
CN111857834A (zh) * | 2020-07-16 | 2020-10-30 | 中国科学院计算技术研究所 | 分形计算智能处理器、分形计算智能处理方法 |
CN113094118A (zh) * | 2021-04-26 | 2021-07-09 | 深圳思谋信息科技有限公司 | 数据处理系统、方法、装置、计算机设备和存储介质 |
CN113469360A (zh) * | 2020-03-31 | 2021-10-01 | 杭州海康威视数字技术股份有限公司 | 推理方法及装置 |
CN113554574A (zh) * | 2021-09-23 | 2021-10-26 | 苏州浪潮智能科技有限公司 | 一种压缩感知图像恢复方法、装置、设备及介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020144101A1 (en) * | 2001-03-30 | 2002-10-03 | Hong Wang | Caching DAG traces |
US7840914B1 (en) * | 2005-05-13 | 2010-11-23 | Massachusetts Institute Of Technology | Distributing computations in a parallel processing environment |
US20140019393A1 (en) * | 2011-12-14 | 2014-01-16 | International Business Machines Corporation | Universal, online learning in multi-modal perception-action semilattices |
US20140181476A1 (en) * | 2012-12-21 | 2014-06-26 | Srikanth T. Srinivasan | Scheduler Implementing Dependency Matrix Having Restricted Entries |
CN105260371A (zh) * | 2014-07-17 | 2016-01-20 | 华为技术有限公司 | 一种特征选择方法及装置 |
CN106055311A (zh) * | 2016-05-26 | 2016-10-26 | 浙江工业大学 | 基于流水线多线程的MapReduce任务并行化方法 |
CN106919455A (zh) * | 2017-02-28 | 2017-07-04 | 北京科技大学 | 一种基于有向无环图的主路径填充调度方法 |
US20180068358A1 (en) * | 2003-02-05 | 2018-03-08 | Steven M. Hoffberg | System and method for determining contingent relevance |
CN107810479A (zh) * | 2015-06-26 | 2018-03-16 | 微软技术许可有限责任公司 | 用于处理器控制传送的目标位置的确定 |
-
2018
- 2018-06-29 CN CN201810715278.5A patent/CN110659070B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20020144101A1 (en) * | 2001-03-30 | 2002-10-03 | Hong Wang | Caching DAG traces |
US20180068358A1 (en) * | 2003-02-05 | 2018-03-08 | Steven M. Hoffberg | System and method for determining contingent relevance |
US7840914B1 (en) * | 2005-05-13 | 2010-11-23 | Massachusetts Institute Of Technology | Distributing computations in a parallel processing environment |
US20140019393A1 (en) * | 2011-12-14 | 2014-01-16 | International Business Machines Corporation | Universal, online learning in multi-modal perception-action semilattices |
US20140181476A1 (en) * | 2012-12-21 | 2014-06-26 | Srikanth T. Srinivasan | Scheduler Implementing Dependency Matrix Having Restricted Entries |
CN105260371A (zh) * | 2014-07-17 | 2016-01-20 | 华为技术有限公司 | 一种特征选择方法及装置 |
CN107810479A (zh) * | 2015-06-26 | 2018-03-16 | 微软技术许可有限责任公司 | 用于处理器控制传送的目标位置的确定 |
CN106055311A (zh) * | 2016-05-26 | 2016-10-26 | 浙江工业大学 | 基于流水线多线程的MapReduce任务并行化方法 |
CN106919455A (zh) * | 2017-02-28 | 2017-07-04 | 北京科技大学 | 一种基于有向无环图的主路径填充调度方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111222637A (zh) * | 2020-01-17 | 2020-06-02 | 上海商汤智能科技有限公司 | 神经网络模型部署方法及装置、电子设备和存储介质 |
CN111222637B (zh) * | 2020-01-17 | 2023-11-28 | 上海商汤智能科技有限公司 | 神经网络模型部署方法及装置、电子设备和存储介质 |
CN111352896A (zh) * | 2020-03-03 | 2020-06-30 | 腾讯科技(深圳)有限公司 | 人工智能加速器、设备、芯片以及数据处理方法 |
CN113469360A (zh) * | 2020-03-31 | 2021-10-01 | 杭州海康威视数字技术股份有限公司 | 推理方法及装置 |
CN113469360B (zh) * | 2020-03-31 | 2023-10-20 | 杭州海康威视数字技术股份有限公司 | 推理方法及装置 |
CN111538714A (zh) * | 2020-04-24 | 2020-08-14 | 咪咕文化科技有限公司 | 一种指令执行方法、装置、电子设备和存储介质 |
CN111538714B (zh) * | 2020-04-24 | 2023-10-17 | 咪咕文化科技有限公司 | 一种指令执行方法、装置、电子设备和存储介质 |
CN111857834A (zh) * | 2020-07-16 | 2020-10-30 | 中国科学院计算技术研究所 | 分形计算智能处理器、分形计算智能处理方法 |
CN113094118A (zh) * | 2021-04-26 | 2021-07-09 | 深圳思谋信息科技有限公司 | 数据处理系统、方法、装置、计算机设备和存储介质 |
CN113554574A (zh) * | 2021-09-23 | 2021-10-26 | 苏州浪潮智能科技有限公司 | 一种压缩感知图像恢复方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110659070B (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110659070B (zh) | 高并行度计算系统及其指令调度方法 | |
Shen et al. | Escher: A CNN accelerator with flexible buffering to minimize off-chip transfer | |
US11093225B2 (en) | High parallelism computing system and instruction scheduling method thereof | |
US20210097376A1 (en) | Backpressure for Accelerated Deep Learning | |
Fowers et al. | A configurable cloud-scale DNN processor for real-time AI | |
US10691996B2 (en) | Hardware accelerator for compressed LSTM | |
EP3610612B1 (en) | Dataflow triggered tasks for accelerated deep learning | |
CN110050267B (zh) | 用于数据管理的系统和方法 | |
US11023360B2 (en) | Systems and methods for configuring programmable logic devices for deep learning networks | |
CN111104120B (zh) | 神经网络编译方法、系统及相应异构计算平台 | |
CN110659069B (zh) | 用于执行神经网络计算的指令调度方法及相应计算系统 | |
CN110689115A (zh) | 神经网络模型处理方法、装置、计算机设备及存储介质 | |
CN110321997B (zh) | 高并行度计算平台、系统及计算实现方法 | |
Buck et al. | The token flow model | |
CN114450699A (zh) | 由处理单元实现的方法、可读存储介质和处理单元 | |
Muthappa et al. | Hardware-based fast real-time image classification with stochastic computing | |
CN116680063B (zh) | 任务调度方法、装置、计算系统、电子设备和存储介质 | |
CN110716751B (zh) | 高并行度计算平台、系统及计算实现方法 | |
CN111047035B (zh) | 神经网络处理器、芯片和电子设备 | |
CN112732638B (zh) | 基于ctpn网络的异构加速系统及方法 | |
CN110659014A (zh) | 乘法器及神经网络计算平台 | |
KR20230136154A (ko) | 뉴럴 프로세서 회로에 대한 분기 동작 | |
Chidambaram et al. | Accelerating the inference phase in ternary convolutional neural networks using configurable processors | |
CN114219091A (zh) | 网络模型推理加速的方法、装置、设备及存储介质 | |
Li et al. | An extended nonstrict partially ordered set-based configurable linear sorter on FPGAs |
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 |