人工智能加速器、设备、芯片以及数据处理方法与流程

文档序号:21318711发布日期:2020-06-30 20:49阅读:638来源:国知局
人工智能加速器、设备、芯片以及数据处理方法与流程

本申请涉及互联网技术领域,具体涉及人工智能技术领域,尤其涉及一种人工智能加速器、一种人工智能加速设备、一种人工智能加速芯片及一种数据处理方法。



背景技术:

以卷积神经网络为代表的人工智能在图像识别、物体分类以及模式识别等领域均取得了成功应用。然而,随着深度学习算法的不断优化,模型的深度从几层扩展到上百层,随之而来的是计算量的同步膨胀。进一步地,在特定领域(例如,医疗领域或者高频视频领域),图片的分辨率已经达到2k*2k,甚至5k*5k,图片分辨率的增大,进一步增加了计算量。

因此,如何对神经网络模型进行加速处理成为了亟待解决的重点问题。



技术实现要素:

本申请实施例提供一种人工智能加速器、设备、芯片以及数据处理方法,可以缩短对神经网络模型的处理时长。

本申请实施例一方面提供了一种人工智能加速器,包括指令解析单元、指令调度单元以及处理引擎集合;

指令解析单元,用于读取目标长指令,目标长指令是对并行排布的目标神经网络模型进行适配生成的指令;目标长指令包括第一单位指令和第二单位指令;第一单位指令包括第一引擎标识集合以及第一配置信息集合;第二单位指令包括第二引擎标识集合以及第二配置信息集合;

指令调度单元,用于按照第一引擎标识集合从处理引擎集合中抽取第一处理引擎子集,并按照第二引擎标识集合从处理引擎集合中抽取第二处理引擎子集;以及,根据第一配置信息集合调用第一处理引擎子集执行第一业务处理集合;当第一处理引擎子集中存在处理引擎执行完毕时,根据第二配置信息集合调用第二处理引擎子集执行第二业务处理集合。

本申请实施例一方面提供了一种数据处理方法,数据处理方法由上述人工智能加速器来执行,数据处理方法包括:

读取目标长指令,目标长指令是对并行排布的目标神经网络模型进行适配生成的指令;目标长指令包括第一单位指令和第二单位指令;第一单位指令包括第一引擎标识集合以及第一配置信息集合;第二单位指令包括第二引擎标识集合以及第二配置信息集合;

基于第一引擎标识集合对应的第一处理引擎子集以及第一配置信息集合,执行第一业务处理集合;

当第一处理引擎子集中存在处理引擎执行完毕时,基于第二引擎标识集合所对应的第二处理引擎子集以及第二配置信息集合,执行第二业务处理集合。

本申请实施例提供了一种人工智能加速设备,人工智能加速设备中包括上述的人工智能加速器。

本申请实施例提供了一种人工智能加速芯片,人工智能加速芯片内封装有上述的人工智能加速器。

本申请中的人工智能加速器的处理对象为包括多个单位指令的长指令,且长指令是对并行排布的神经网络模型进行适配生成的指令,通过将模型中的各种计算操作和搬移操作进行并行排布,可以减少处理引擎的等待时长,提高处理引擎的工作效率,进而实现对神经网络模型的处理过程进行有效加速;在长指令内部,当前一个单元指令中的任意一个处理引擎执行完毕时,触发后一个单位指令中的处理引擎就开始执行,因此在长指令内部包含了多个处理引擎之间的前后依赖关系,进而不需要和软件进行交互来确定依赖关系,避免了软硬件交互所带来的加速性能损耗,从整体配合的角度进一步提升人工智能加速器的加速性能,缩短神经网络模型的处理时长。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请实施例提供的一种一条短指令流水的示意图;

图2是本申请实施例提供的一种多条短指令流水的示意图;

图3是本申请实施例提供的一种多条短指令流水的示意图;

图4是本申请实施例提供的一种多条短指令流水的示意图;

图5是本申请实施例提供的一种人工智能加速器的结构示意图;

图6是本申请实施例提供的一种目标长指令的示意图;

图7-图10是本申请实施例提供的目标长指令的调度部分的示意图;

图11是本申请实施例提供的一种目标长指令的调度流程示意图;

图12是本申请实施例提供的一种目标长指令的调度流程示意图;

图13是本申请实施例提供的一种目标长指令的调度流程示意图;

图14是本申请实施例提供的一种人工智能加速器的结构示意图;

图15是本申请实施例提供的一种确定长指令集合的示意图;

图16是本申请实施例提供的一种人工智能加速器的结构示意图;

图17a是本申请实施例提供的一种人工智能加速器的工作流程示意图;

图17b是本申请实施例提供的一种长指令集合的示意图;

图17c是本申请实施例提供的一种图像划分的示意图;

图17d-图17f是本本申请实施例提供的一种执行长指令的示意图;

图18是本申请实施例提供的一种人工智能加速芯片的结构示意图;

图19是本申请实施例提供的一种人工智能加速设备的结构示意图;

图20是本申请实施例提供的一种数据处理方法的流程示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

人工智能(artificialintelligence,ai)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换句话说,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器。人工智能也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能。

人工智能技术是一门综合学科,涉及领域广泛,既有硬件层面的技术也有软件层面的技术。人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互系统、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。

本申请实施例提供的方案属于人工智能领域下属的专用人工智能芯片,本申请中的人工智能加速器可以封装为专用人工智能芯片,该人工智能加速器是专用于处理人工智能所涉及的各种人工神经网络模型,以对人工神经网络模型的训练过程或者预测过程加速,降低人工神经网络模型的训练耗时或者预测耗时。

本申请实施例提出一种可以和软件免交互的人工智能加速器,该人工智能加速器可以在fpga(fieldprogrammablegatearray,现场可编程逻辑门阵列)、asic(applicationspecificintegratedcircuit,专用集成电路)等硬件平台上执行。具体实现中,该人工智能加速器内设有处理芯片,该处理芯片可用于对人工神经网络模型的处理过程加速,以缩短模型的处理时长,其中人工神经网络模型的处理包括人工神经网络模型的训练以及人工神经网络模型的预测等。

在实际运用中,该人工智能加速器可以应用于各种神经网络模型的加速场景中;例如,可应用于将计算密集型的神经网络模型并行排布为多条短指令流水,每一条流水包括多条短指令,每条短指令可以触发一个处理引擎工作。通过串、并行灵活组合短指令,使得处理引擎可以并行处理,避免处理引擎空转,提高处理引擎的工作效率。

为了使短指令可以灵活组合,可以由软件来调度短指令之间的前后执行依赖关系,但硬件和软件之间的交互会增加神经网络模型的处理时长,而本申请中的人工智能加速器将短指令之间的依赖关系编译到长指令内部,可以避免硬件和软件之间的交互所带来的加速性能损耗,以降低神经网络模型的处理时长。

下面首先对神经网络模型的并行排布进行说明:

编译器根据神经网络模型的拓扑结构,可以将神经网络模型编译为包含多个短指令的短指令流水,短指令流水的数量可以是1个也可以是多个。

短指令可以分为计算指令和搬移指令,计算指令可以包括:数据卷积短指令、数据池化短指令、数据逐元素累加短指令以及数据尺寸变换短指令中的至少一个。计算指令是由计算引擎来执行,计算引擎可以包括:卷积引擎、池化引擎、逐元素累加引擎以及尺寸变换引擎等中的至少一个,上述计算引擎分别执行的是数据卷积(conv)操作,数据池化(pooling)操作,数据逐元素累加(elementwiseadd)操作以及数据尺寸变换(resize)操作等。

各种计算需要获取数据,但随着网络模型的增大,芯片内部缓存容量有限,大部分数据都存储在片外存储器,比如ddr(双倍数据率同步动态随机存取存储器,doubledataratesynchronousdynamicrandomaccessmemory)中,因此需要把数据从片外存储器搬移到芯片内部缓存(称为load)、把芯片内部计算完毕的数据从芯片内部缓存搬回片外存储器(称为store)以及芯片内部缓存之间数据的搬移(称为move),搬移指令就是用于完成上述操作,搬移指令可以包括:数据搬入短指令,数据搬出短指令以及数据片内转移短指令中的至少一个。搬移指令由搬移引擎来执行,搬移引擎可以包括:搬入引擎、片内转移引擎以及搬出引擎等中的至少一个。搬入引擎执行的即是把数据从片外存储器搬入到芯片内部缓存;搬出引擎执行的即是把芯片内部计算完毕的数据从芯片内部缓存搬出至片外存储器;片内转移引擎执行的即是芯片内部缓存之间数据的搬移。

上述的计算引擎和搬移引擎可以统称为处理引擎,下述以计算指令包括数据卷积短指令、数据池化短指令,搬移指令包括数据搬入短指令,数据搬出短指令为例进行说明,当然这4种短指令对应的处理引擎分别为:卷积引擎、池化引擎,搬入引擎和搬出引擎。

由前述可知,可以将神经网络模型编译为1条短指令流水或多条短指令流水。每一条短指令流水中包括多条短指令,由于短指令是由编译器编译得到的,因此该短指令属于硬件指令。

若短指令流水只有1条,说明整个神经网络模型的处理过程是串行过程,此时的一条短指令流水也可以看作是对神经网络模型的串行排布所得到的结果。如图1所示,是本申请实施例提供的一种一条短指令流水的示意图,图1即是将神经网络模型串行排布为1条短指令流水,从图1可以看出,每个卷积引擎在进行数据卷积之前,需要等待搬入引擎将数据搬入至芯片内,卷积引擎执行完毕后再执行数据池化,池化完成后搬出引擎再将结果数据搬出至芯片外,然后进行下一轮的运算操作。整个过程可以看出,各处理引擎等待其余处理引擎的时间较多,各处理引擎的空闲时间较长,效率不高。

若神经网络模型被并行排布为多条短指令流水,请参见图2所示,是本申请实施例提供的一种多条短指令流水的示意图,如图2所示通过计算指令和搬移指令之间的并行流水排布,可以使得计算引擎和搬移引擎同步执行,从而减少各处理引擎的等待时间,可以大幅提升神经网络模型的计算效率。

流水排布越均匀,说明处理引擎空闲时间越短,神经网络模型的处理效率就越高。如图2所示的流水排布情况,是最理想的情况。但在实际应用中,不同的神经网络模型,计算引擎和搬移引擎所处理的数据量不同,通常表现出每个处理引擎的耗时各不相同(或者是各个短指令的处理耗时各不相同);再加上模型本身是分层的,运算有先后顺序,即数据之间有依赖关系,并不能任意的跳转计算顺序。

例如,数据必然要先卷积,才能池化;或者数据要池化完以后,才能将池化后的结果数据搬出至芯片外,这种前后关系称为数据依赖关系。

如图3所示,是本申请实施例提供的一种多条短指令流水的示意图,从图3可以看出,每个处理引擎的处理时长都各不相同,卷积引擎的处理时长最长,池化引擎的处理时长最短。仍旧可以根据处理引擎的类型来决定短指令流水的数量,即一条短指令流水包括同一类型的多条短指令,同一条短指令流水中的短指令触发同一个处理引擎执行,进而可以得到图3所示的4条短指令流水,使得计算引擎和搬移引擎可以同步执行。

从图3可以看出,池化引擎的耗时+搬出引擎的耗时小于卷积引擎的耗时,因此可以将池化引擎对应的短指令流水和搬出引擎对应的短指令流水合并为一条短指令流水。合并后可以得到图4所示的3条短指令流水。

请参见图4,是本申请实施例提供的一种多条短指令流水的示意图,图4相对图3,减少了短指令流水的数量。在图3中,数据池化短指令和数据搬出短指令分别属于两条短指令流水,但在图4中,数据池化短指令和数据搬出短指令属于同一条短指令流水。

虽然图4相对图3总的处理时长并没有发生变化,但图3所需要的memory端口数量为4,图4所需要的memory端口数量为3,这是因为短指令流水的数量是和memory端口数量相同的。其中,memory端口是指处理引擎和外部单元进行数据交换的媒介。

因此采用图4所示的流水排布,不仅可以使计算引擎和搬移引擎并发执行短指令,以缩短神经网络模型的处理时长,还可以降低memory端口数量,减少硬件消耗。

从上述图1-图4可以看出,短指令的串、并行灵活组合,可以提升神经网络模型的处理效率。欲实现短指令的灵活组合,需要确定各短指令之间的依赖关系,由依赖关系来确定多个短指令的前后执行顺序。

有3种方式可以确定短指令之间依赖关系。

其一为中断/轮询的方法,即每次计算引擎或者搬移引擎完成一个短指令后,软件通过中断/轮询的方法确定一个短指令执行完毕,然后软件分析神经网络模型的多条短指令流水确定依赖关系,通知硬件启动下一个(或多个)短指令,以触发处理引擎工作。这个过程需要软、硬件协同合作才能确定短指令之间的依赖关系。

其二为多队列和控制报文的方法,即将不同类型的短指令存储到不同的指令队列中,将依赖关系报文也写入关系报文队列中。芯片处理神经网络模型的多条短指令流水时,通过解析关系报文队列中的依赖关系报文,进而决定当前待读取的短指令,以及待启动的处理引擎。这个过程硬件可以不和软件进行交互,但依赖关系报文的解析较为复杂,且也需要占用硬件存储单元来存储依赖关系报文,以及需要多个指令队列来存储不同类型的短指令。

其三为将短指令的依赖关系融入到长指令中,长指令和长指令之间是串行,长指令内部包括多个短指令之间的依赖关系,多个短指令之间可以灵活地进行串、并行组合。这个过程不需要和软件进行交互,可以避免硬件和软件交互所带来的性能损耗,且不需要存储依赖关系报文,以及解析依赖关系报文,实现代价低,在对神经网络模型的处理过程加速的前提下,还可以节约芯片面积。

下面对第三种方式加速方式进行详细阐述。

请参见图5,是本申请实施例提供的一种人工智能加速器的结构示意图,如图5所示,人工智能加速器包括指令解析单元101,指令调度单元102和处理引擎集合103,处理引擎集合可以包含处理引擎1、处理引擎2、...、处理引擎n。

下述以一个长指令(即目标长指令)的为例,详细说明人工智能加速器的执行过程:

指令解析单元101,用于读取目标长指令,目标长指令是对并行排布的目标神经网络模型进行适配生成的指令;目标长指令包括第一单位指令和第二单位指令;第一单位指令包括第一引擎标识集合以及第一配置信息集合;第二单位指令包括第二引擎标识集合以及第二配置信息集合。

具体的,指令解析单元101读取用于当前执行的指令(称为目标长指令),目标长指令是对并行排布的目标神经网络模型进行适配生成的多个指令中的任意一个指令,并行排布的目标神经网络模型即是目标神经网络模型对应的多条短指令流水。

目标长指令可以包括多个单位指令,下述以多个单位指令中的两个相邻单位指令为例进行说明,上述两个相邻单位指令可以称为第一单位指令和第二单位指令。对下一组两个相邻单位指令来说,又可以将此时的第二单位指令作为新的第一单位指令,将与上述新的第一单位指令相邻的单位指令作为新的第二单位指令,以此类推。

例如,目标长指令中包括单位指令1,单位指令2和单位指令3,其中单位指令1,单位指令2可以作为一组两个相邻单位指令,单位指令1为第一单位指令,单位指令2为第二单位指令。单位指令2,单位指令3又可以作为新的一组两个相邻单位指令,单位指令2为第一单位指令,单位指令3为第二单位指令。每一组第一单位指令和第二单位指令都执行如下步骤:

第一单位指令包括第一引擎标识集合以及第一配置信息集合,第二单位指令包括第二引擎标识集合以及第二配置信息集合。第一引擎标识集合所包含的引擎标识的数量等于第一配置信息集合中所包含的配置信息的数量;第二引擎标识集合所包含的引擎标识的数量等于第二配置信息集合中所包含的配置信息的数量。引擎标识是处理引擎对应的身份标志信息,配置信息包含处理引擎进行工作时所需要的参数,引擎标识和配置信息是一一对应关系。

例如,与卷积引擎对应的配置信息可以是卷积核的具体取值,窗口滑动步长等参数,卷积处理前数据的存储地址以及卷积处理后数据的存储地址等;与池化引擎对应的配置信息可以是池化方式,池化处理前数据的存储地址以及池化处理后数据的存储地址等,池化方式可以是最大池化,或者平均池化等。

指令调度单元102,用于按照第一引擎标识集合从处理引擎集合中抽取第一处理引擎子集,并按照第二引擎标识集合从处理引擎集合中抽取第二处理引擎子集;以及,根据第一配置信息集合调用第一处理引擎子集执行第一业务处理集合;当第一处理引擎子集中存在处理引擎执行完毕时,根据第二配置信息集合调用第二处理引擎子集执行第二业务处理集合。

具体的,指令调度单元102按照第一单位指令中的第一引擎标识集合,从处理引擎集合103中抽取对应的处理引擎,将抽取出来的处理引擎组合为第一处理引擎子集;指令调度单元102按照第二单位指令中的第二引擎标识集合,从处理引擎集合103中抽取对应的处理引擎,将抽取出来的处理引擎组合为第二处理引擎子集。

指令调度单元102调用第一处理引擎子集,以驱动第一处理引擎子集根据第一配置信息集合执行与之对应的第一业务处理集合,其中第一处理引擎子集中的所有处理引擎都是并发执行,进一步,第一处理引擎子集中的所有处理引擎可以是并行执行。

其中,多个处理引擎的并发执行是指多个处理引擎在一个时间段内执行;

多个处理引擎的并行执行是指多个处理引擎在同一时刻执行,可见并行执行是并发执行的子集。

也即是第一业务处理集合中的所有业务处理是并发执行的,甚至是并行执行的。

当第一处理引擎子集中存在处理引擎执行完毕时,指令调度单元102调用第二处理引擎子集,以驱动第二处理引擎子集根据第二配置信息集合执行与之对应的第二业务处理集合,其中第二处理引擎子集中的所有处理引擎是并发执行,或者更进一步第二处理引擎子集中的所有处理引擎是并行执行。当然,此时第一处理引擎子集合中未执行完毕的处理引擎仍旧继续执行,也即是第二处理引擎子集中的所有处理引擎以及第一处理引擎子集合中未执行完毕的处理引擎是并发执行。可见,长指令具备并发的特点。

从上述可知,长指令中包括了多个短指令之间的依赖关系,每个短指令用于调用一个处理引擎,为了使短指令可以灵活地串、并行组合,在目标长指令中,对每个处理引擎只能调用一次,那么第一单位指令中的第一引擎标识集合与第二单位指令中的第二引擎标识集合之间的交集为空集。

进一步地,对目标长指令中所包含的多个单位指令分别对应的多个引擎标识集合之间的交集也都为空集。

从前述可知,第一单位指令和第二单位指令是目标长指令中所包含的多个单位指令中的任意两个相邻单位指令,目标长指令所包含的单位指令的数量小于或等于处理引擎集合所包含的处理引擎的数量。

例如,处理引擎集合中包括4个处理引擎,那么目标长指令中所包含的单位指令的数量小于或等于4。

目标长指令中所包含的多个单位指令(例如,包含n个单位指令),可以分为前n-1个单位指令和最后一个单位指令,前n-1个单位指令可以为空集,最后一个单位指令不能为空集。若第k个单位指令为空集(k<n-1),指令调度单元102可以直接确定第k个单位指令对应的处理引擎集合中存在处理引擎执行完毕,进而指令调度单元102直接驱动第k+1个单位指令对应的处理引擎集合执行对应的业务处理。

在多个单位指令的驱动下,通过指令调度单元的统一控制,不需要多个指令队列,也不需要和软件进行交互,以较小的代价,实现了神经网络加速对各个处理引擎的并发性要求,以及各个处理引擎之间灵活组合和数据依赖同步的要求。

请参见图6,是本申请实施例提供的一种目标长指令的示意图,从前述可知,目标长指令包括多个单位指令,每个单位指令都包含了引擎标识集合和配置信息集合。以目标长指令包含4的单位指令为例,可以将单位指令1所包含的引擎标识集合称为阶段1,将单位指令2所包含的引擎标识集合称为阶段2,将单位指令3所包含的引擎标识集合称为阶段3,将单位指令4所包含的引擎标识集合称为阶段4。

可以将上述4个阶段(即4个引擎标识集合)称为目标长指令的调度部分,调度部分用于指示当前长指令中哪些处理引擎需要工作。

可以将上述4个配置信息集合称为目标长指令的配置部分,配置部分指示处理引擎工作需要的相关参数信息。

请参见图7-图10,是本申请实施例提供的目标长指令的调度部分的示意图,如图7所示,目标长指令的调度部分包括4个引擎标识集合(即4个阶段),这4个阶段之间的交集为空集。

4个阶段可以分为两类,前n-1个阶段可以为一类,最后一个阶段为一类,即阶段1、阶段2、阶段3为一类,阶段4为一类。

正是由于目标长指令中的阶段可以分为两类,对应的指令调度单元也可以包括第一调度单元和第二调度单元,第一调度单元专门用于执行针对阶段1-阶段3的调度,第二调度单元专门用于执行针对阶段4的调度。换句话说,第一调度单元专门用于调度前n-1个单位指令,第二调度单元专门用于调度最后一个单位指令

第一调度单元对阶段1、阶段2以及阶段3的调度过程如下:

阶段1、阶段2、阶段3之间是串行调度,对阶段k(k≤3)来说,若阶段k包含引擎标识,则第一调度单元并行驱动(或并发驱动)该引擎标识对应的处理引擎,当阶段k对应的处理引擎中存在一个处理引擎执行完毕时,跳出该阶段,第一调度单元调度下一个阶段。

若阶段k中不包括引擎标识,则直接跳过该阶段,第一调度单元调度下一个阶段。这3个阶段可以为空集。

第二调度单元对阶段4的调度过程如下:

第二调度单元并行驱动(或并发驱动)该阶段4所包含的引擎标识对应的处理引擎,阶段4是目标长指令的最后一个阶段,不能为空集。

综上,目标长指令的n个阶段中,最后一个阶段不能为空集,其余n-1个阶段都可以为空集。

通过上述调度方式,可以实现不同处理引擎之间的串、并行灵活组合,下述图8-图10分别描述了3种常见的组合方式:

如图8所示,4个阶段中,阶段1、阶段2和阶段3均为空集(在图8中前3个阶段中都没有引擎标识被涂黑选中),阶段4包括4个引擎标识,分别为卷积引擎标识,池化引擎标识,搬入引擎标识以及搬出引擎标识(在图8中4引擎标识均被涂黑选中)。

因此,当指令调度单元调用图8所示的4个阶段时,前3个阶段都为空集,对最后一个阶段来说,第二调度单元同时调用4个处理引擎,驱动这4个处理引擎并行执行数据搬入短指令,数据卷积短指令,数据池化短指令和数据搬出短指令,即4个处理引擎并行工作。

如图9所示,4个阶段中,每个阶段都包括一个引擎标识(在图9中每个阶段都存在1个引擎标识被涂黑选中),其中阶段1包括搬入引擎标识,阶段2包括卷积引擎标识,阶段3包括池化引擎标识,阶段4包括搬出引擎标识。

因此,当指令调度单元调用图9所示的4个阶段时,第一调度单元先调用搬入引擎执行数据搬入短指令;当搬入引擎执行完毕时,第一调度单元调用卷积引擎执行数据卷积短指令;当卷积引擎执行完毕时,第一调度单元调用池化引擎执行数据池化短指令;当池化引擎执行完毕时,第二调度单元调用搬出引擎执行数据搬出短指令。即,4个处理引擎串行工作。

如图10所示,4个阶段中,阶段1包括卷积引擎标识,池化引擎标识以及搬入引擎标识,阶段2和阶段3为空集,阶段4包括搬出引擎标识(在图9中阶段1中的卷积引擎标识,池化引擎标识以及搬入引擎标识被涂黑选中,阶段4中的搬出引擎标识被涂黑选中)。

因此,当指令调度单元调用图10所示的4个阶段时,第一调度单元同时调用卷积引擎,池化引擎以及搬入引擎,驱动这3个处理引擎并行执行数据搬入短指令,数据卷积短指令以及数据池化短指令;当池化引擎执行完毕时,第二调度单元调用搬出引擎执行数据搬出短指令。即,搬入引擎、卷积引擎和池化引擎并行工作,搬出引擎和池化引擎是串行工作。

下面对第一调度单元和第二调度单元的具体调度过程采用标准化的流程进行说明。

请参见图11,是本申请实施例提供的一种目标长指令的调度流程示意图,目标长指令包括4个阶段:

步骤s201,第一调度单元获取一条解析后的长指令,长指令包括调度信息和配置信息,调度信息包括4个阶段,每个阶段包括零个,一个或多个引擎标识,配置信息包括与每个处理引擎对应的参数信息。

步骤s202,第一调度单元对阶段1-阶段3执行串行调度。

步骤s203,第一调度单元驱动阶段1-阶段3对应处理引擎的执行对应的业务处理。

具体的,当阶段1中存在引擎标识时,第一调度单元并行驱动阶段1中的所有引擎标识对应的处理引擎,根据对应的配置信息并行执行业务处理;当阶段1中不存在引擎标识时,跳过阶段1,调度阶段2。

当阶段1中的某一个处理引擎执行完毕,且阶段2中存在引擎标识时,第一调度单元并行驱动阶段2中的所有引擎标识对应的处理引擎,根据对应的配置信息并行执行业务处理。

当阶段2中的某一个处理引擎执行完毕,且阶段3中存在引擎标识时,第一调度单元并行驱动阶段3中的所有引擎标识对应的处理引擎,根据对应的配置信息并行执行业务处理。

步骤s204,第二调度单元调度阶段4。

步骤s205,第二调度单元驱动阶段4对应处理引擎的执行对应的业务处理。

具体的,当阶段3中的某一个处理引擎执行完毕时,第二调度单元并行驱动阶段4中的所有引擎标识对应的处理引擎,根据对应的配置信息并行执行业务处理。

步骤s206,长指令内所有处理引擎执行完毕。

具体的,当阶段1、阶段2、阶段3和阶段4所对应的处理引擎都执行完毕时,则确定长指令内所有处理引擎执行完毕。

继续循环,继续执行步骤s201,即调度下一个长指令。

下面对上述阶段1-阶段3的调度过程(即步骤s202-步骤s203)进行详细说明,阶段1-阶段3的调度过程即是第一调度单元的具体工作过程。请参见图12,是本申请实施例提供的一种目标长指令的调度流程示意图,具体包括以下步骤:

步骤s301,第一调度单元提取当前长指令当前阶段的调度信息。

步骤s302,第一调度单元检测该阶段是否存在引擎标识,若存在则执行步骤s303,若不存在,执行步骤s305。

步骤s303,第一调度单元并行启动当前阶段所包含的所有引擎标识对应的处理引擎,以使处理引擎按照配置信息执行业务处理。

步骤s304,第一调度单元检测是否存在一个处理引擎执行完毕,若存在则执行步骤s305,若不存在则执行步骤s303,处理引擎继续执行业务处理。

步骤s305,当前阶段调度完成,启动下一个阶段的调度。

总的来说,对阶段1-阶段3来说,各阶段之间的是串行调度,阶段内部所对应的处理引擎是并行执行对应的业务处理。

下面对阶段4的调度过程(即步骤s204-步骤s205)进行详细说明,阶段4的调度过程即是第二调度单元的具体工作过程。请参见图13,是本申请实施例提供的一种目标长指令的调度流程示意图,具体包括以下步骤:

步骤s401,第二调度单元提取当前长指令当前阶段的调度信息。

步骤s402,第二调度单元并行启动当前阶段所包含的所有引擎标识对应的处理引擎,以使处理引擎按照配置信息执行业务处理。

由于阶段4是当前长指令中最后一个阶段,此阶段必然包含引擎标识,因此不必判断阶段4中是否包含引擎标识。

步骤s403,第二调度单元检测是否阶段4所对应的处理引擎执行完毕,若是,执行步骤s404,若否,执行步骤s402,处理引擎继续执行业务处理。

步骤s404,当前阶段调度完成。

在阶段4所对应的处理引擎执行完毕后,需要确定前3个阶段对应的所有处理引擎是否全部执行完毕,只有当4的阶段所对应的所有处理引擎均执行完毕时,表明本条长指令执行完毕,可以执行下一条长指令。

本申请中,当前一个单元指令中的任意一个处理引擎执行完毕时,触发后一个单位指令中的处理引擎就开始执行,因此在长指令内部包含了多个处理引擎之间的前后依赖关系,进而不需要和软件进行交互来确定依赖关系,避免了软硬件交互所带来的加速性能损耗,从整体配合的角度提升人工智能加速器的加速性能,缩短神经网络模型的处理时长。同时,通过指令调度单元的统一控制,不需要多个指令队列,以较小的代价,在对神经网络模型的处理过程加速的前提下,还可以节约芯片面积。

请参见图14,是本申请实施例提供的一种人工智能加速器的结构示意图,人工智能加速器可以包括指令编译单元501,指令队列单元502,指令解析单元503,指令调度单元504和处理引擎集合505以及片外缓存单元506,处理引擎集合505可以包含处理引擎1、处理引擎2、...、处理引擎n。

指令编译单元501,用于按照执行顺序将目标神经网络模型并行排布为多条短指令流水,将多条短指令流水编译为长指令集合,将长指令集合存储至片外缓存单元。

具体的,指令编译单元501按照目标神经网络模型中的多个网络层的前后执行顺序,将目标神经网络模型并行排布为多条短指令流水(如图2-图4所示的多条短指令流水)。

指令编译单元501将多条短指令流水编译为多条长指令,将上述多条长指令组合为长指令集合,将包含了多条长指令的长指令集合存储至片外缓存单元506。

请参见图15,是本申请实施例提供的一种确定长指令集合的示意图,指令编译单元104将目标神经网络模型并行排布为3条短指令流水,其中第一条短指令流水包括多个数据搬入短指令,第二条短指令流水包括多个数据卷积短指令,第三条短指令包括多个数据池化短指令和多个数据搬出短指令。指令编译单元501可以按照图15所示的方式,将这3条短指令流水进一步编译为5条长指令,这5条长指令可以组合为长指令集合,且该长指令集合存储在片外缓存单元506。

上述指令编译单元501生成长指令集合的过程可以是离线完成,也可以是在线完成。

指令队列单元502,用于从片外缓存单元读取目标长指令,并缓存目标长指令以供指令解析单元读取。

具体的,从上述可知,对目标神经网络模型编译后所生成的长指令集合是存储在片外缓存单元506,因此指令队列单元502可以从片外缓存单元506中读取用于当前执行的目标长指令,并缓存该目标长指令以供指令解析单元503读取,指令单元读取后,指令队列单元502从片外缓存单元506中读取下一个目标长指令。

指令解析单元503,用于从指令队列单元读取目标长指令,目标长指令包括第一单位指令和第二单位指令;第一单位指令包括第一引擎标识集合以及第一配置信息集合;第二单位指令包括第二引擎标识集合以及第二配置信息集合。

指令调度单元504,用于按照第一引擎标识集合从处理引擎集合505中抽取第一处理引擎子集,并按照第二引擎标识集合从处理引擎集505合中抽取第二处理引擎子集;以及,根据第一配置信息集合调用第一处理引擎子集执行第一业务处理集合;当第一处理引擎子集中存在处理引擎执行完毕时,根据第二配置信息集合调用第二处理引擎子集执行第二业务处理集合。

其中,指令解析单元503、指令调度单元504的具体执行过程可以参见前述图5对应实施例中对指令解析单元101、指令调度单元102的具体描述。

当目标长指令执行完毕时,指令解析单元503从指令队列单元502读取下个目标长指令。

其中,只有目标长指令中的所有单位指令都执行完毕时,指令解析单元503才能确定目标长指令执行完毕,进而从指令队列单元502读取下个目标长指令;只有单位指令所对应的所有处理引擎都执行完毕时,指令解析单元503才能确定该单位指令执行完毕。

需要说明的是,长指令集合中的长指令所包含的单位指令的数量都相同,且长指令中的前n-1个单位指令可以为空集,但最后一个单位指令不能为空集。下述以第一单位指令为空集,第二单位指令为非空集合为例,进行说明:

当第一单位指令为空集时,那么第一引擎标识集合、第一配置信息集合、第一处理引擎子集以及第一业务处理集合都为空集,因此指令调度单元504可以直接调用第二处理引擎子集,以使第二处理引擎子集根据第二配置信息集合处理第二业务处理集合。

本申请中,当前一个单元指令中的任意一个处理引擎执行完毕时,触发后一个单位指令中的处理引擎就开始执行,因此在长指令内部包含了多个处理引擎之间的前后依赖关系,进而不需要和软件进行交互来确定依赖关系,避免了软硬件交互所带来的加速性能损耗,从整体配合的角度提升人工智能加速器的加速性能,缩短神经网络模型的处理时长。同时,通过指令调度单元的统一控制,不需要多个指令队列,以较小的代价,在对神经网络模型的处理过程加速的前提下,还可以节约芯片面积。

请参见图16,是本申请实施例提供的一种人工智能加速器的结构示意图,人工智能加速器可以包括处理芯片602,还可以包括指令编译单元601以及片外缓存单元602。处理芯片602可以包括:指令队列单元6021,指令解析单元6022,指令调度单元6023,处理引擎集合6024以及片内缓存单元6025,处理引擎集合6024可以包括卷积引擎、池化引擎、搬入引擎和搬出引擎,卷积引擎和池化引擎属于计算引擎,搬入引擎和搬出引擎属于搬移引擎;指令调度单元6023可以包括第一调度单元60231和第二调度单元60232。

本实施例以处理引擎集合包括卷积引擎、池化引擎、搬入引擎和搬出引擎为例,在实际应用中处理引擎集合还可以包括逐元素累加引擎、尺寸变换引擎以及等片内转移引擎等。

从前述图7-图10所对应的实施例可知,目标长指令中的前n-1个引擎标识集合是由第一调度单元60231调度,即目标长指令中的前n-1个单位指令是由第一调度单元60231调度;目标长指令中的最后一个引擎标识集合是由第二调度单元60232调度,即目标长指令中的最后一个单位指令是由第二调度单元60232调度。

指令编译单元601,用于按照执行顺序将目标神经网络模型并行排布为多条短指令流水,将多条短指令流水编译为长指令集合,将长指令集合存储至片外缓存单元。

指令队列单元6021,用于从片外缓存单元读取目标长指令,并缓存目标长指令以供指令解析单元读取。

其中,指令编译单元601以及指令队列单元6021的具体执行过程可以参见前述图14对应实施例中对指令编译单元501以及指令队列单元502的具体描述。

指令解析单元6022,用于从指令队列单元读取目标长指令,目标长指令中包括两个单位指令,分别为第一单位指令和第二单位指令;第一单位指令包括第一引擎标识集合以及第一配置信息集合;第二单位指令包括第二引擎标识集合以及第二配置信息集合。

其中,第一引擎标识集合包括搬入引擎标识,卷积引擎标识以及池化引擎标识;第一配置信息集合包括与搬入引擎标识对应的第一地址信息和第二地址信息,以及与卷积引擎标识对应的第三地址信息和第四地址信息,与池化引擎标识对应的第五地址信息和第六地址信息。

总的来说,每个处理引擎的配置信息都至少包括两个地址,其中一个地址表示数据处理前的存放地址,另一个地址表示数据处理后的存放地址。

其中,第一地址信息所指示的存储空间称为第一存储单元,第二地址信息所指示的存储空间称为第二存储单元,第三地址信息所指示的存储空间称为第三存储单元,第四地址信息所指示的存储空间称为第四存储单元,第五地址信息所指示的存储空间称为第五存储单元,第六地址信息所指示的存储空间称为第六存储单元。

第二引擎标识集合包括搬出引擎标识,第二配置信息集合包括与搬出引擎标识对应的第六地址信息和第七地址信息。

第一调度单元60231,用于按照搬入引擎标识,卷积引擎标识以及池化引擎标识从处理引擎集合中抽取出搬入引擎,卷积引擎以及池化引擎;

第二调度单元60232,用于按照搬出引擎标识从处理引擎集合中抽取出搬出引擎。

其中,搬入引擎,卷积引擎以及池化引擎可以组合为第一处理引擎子集,搬出引擎标可以组合为第二处理引擎子集。

第一调度单元60231调用搬入引擎,以使搬入引擎将第一存储单元中所存储的待搬移数据搬入至第二存储单元,其中第一存储单元属于片外缓存单元603,第二存储单元属于片内缓存单元6025。

第一调度单元60231调用卷积引擎,以使卷积引擎将第三存储单元存储的待卷积数据执行卷积处理,并将卷积处理后得到的卷积结果数据存储至第四存储单元,其中待卷积数据是指令调度单元6023根据前一个目标长指令调用搬入引擎搬入至第三存储单元的,第三存储单元和第四存储单元属于片内缓存单元6025。

第一调度单元60231调用池化引擎,以使池化引擎将第五存储单元存储的待池化数据执行池化处理,并将池化处理后得到的池化结果数据存储至第六存储单元,其中待池化数据是指令调度单元6023根据前一个目标长指令调用卷积引擎卷积处理后存储至第五存储单元的,第五存储单元和第六存储单元属于片内缓存单元6025。

其中,第一调度单元60231可以同时调用搬入引擎、卷积引擎和池化引擎,也就是说,搬入引擎、卷积引擎和池化引擎是并行执行,且搬入引擎执行的数据搬入处理,卷积引擎执行的数据卷积处理和池化引擎执行的数据池化处理可以组合为第一业务处理集合。

当上述池化引擎执行完毕时,即第一处理引擎子集中存在处理引擎执行完毕,第二调度单元60232调用搬出引擎,以使搬出引擎将第六存储单元所存储的池化结果数据搬入至第七存储单元,其中第六存储单元属于片内缓存单元6025,第七存储单元属于片外缓存单元603,且搬出引擎执行的数据搬出处理可以组合为第二业务处理集合。

需要说明的是,虽然此时第一处理引擎子集中的池化引擎已经执行完毕,但第一处理引擎子集中的搬入引擎和卷积引擎还未执行完毕,搬入引擎继续执行数据搬入处理,卷积引擎继续执行数据卷积数据,因此此时的搬入引擎、卷积引擎和搬出引擎是并发执行的。

综上,片外缓存单元603存储待搬移数据,以及池化结果数据;片内缓存单元6025存储待搬移数据,待卷积数据,卷积结果数据,待池化数据以及池化结果数据。

当搬入引擎、卷积引擎、池化引擎和搬出引擎执行完毕时,搬入引擎、卷积引擎、池化引擎和搬出引擎分别向指令解析单元6022发送处理引擎执行完毕的通知消息,指令解析单元6022可以确定目标长指令执行完毕,进而指令解析单元6022可以从指令队列单元6021读取下一个目标长指令。

本申请中的人工智能加速器的处理对象为包括多个单位指令的长指令,且长指令是对并行排布的神经网络模型进行适配生成的指令,通过将模型中的各种计算操作和搬移操作进行并行排布,可以减少处理引擎的等待时长,提高处理引擎的工作效率,进而实现对神经网络模型的处理过程进行有效加速;在长指令内部,当前一个单元指令中的任意一个处理引擎执行完毕时,触发后一个单位指令中的处理引擎就开始执行,因此在长指令内部包含了多个处理引擎之间的前后依赖关系,进而不需要和软件进行交互来确定依赖关系,避免了软硬件交互所带来的加速性能损耗,从整体配合的角度提升人工智能加速器的加速性能,缩短神经网络模型的处理时长。同时,通过指令调度单元的统一控制,不需要多个指令队列,以较小的代价,在对神经网络模型的处理过程加速的前提下,还可以节约芯片面积。

目前,神经网络模型主要应用于图像领域和语音领域,下述以图像为例,说明人工智能加速器的工作流程。请参见图17a,人工智能加速器对图像的处理流程包括如下步骤:

步骤s11,编译目标神经网络模型,得到长指令集合。

具体的,按照目标神经网络模型中的多个网络层的前后执行顺序,将目标神经网络模型并行排布为多条短指令流水,将多条短指令流水编译为多条长指令,将上述多条长指令组合为长指令集合,将包含了多条长指令的长指令集合存储至人工智能加速器中的片外缓存单元。

本实施例以3个长指令(第一长指令,第二长指令和第三长指令,如图17b所示)为例,说明这3个长指令的执行过程。

可以理解的是,对于某一个神经网络模型,只要对应的长指集合准备完毕,后续在执行过程中不再修改长指令,且按照前后顺序,串行执行每一条长指令。

步骤s12,将输入图像划分为多个单位图像。

具体的,可按照人工智能加速器中的片内缓存单元的容量对输入图像进行拆分,如图17c所示,可以得到多个单位图像。拆分时,多个单位图像的尺寸尽可能的相同。后续可以将单位图像依次送入人工智能加速器中的处理芯片,由处理芯片对多个单位图像进行处理。

多个单位图像可以存储在人工智能加速器中的片外缓存单元,本实施例以两个单位图像(第一单位图像和第二单位图像)为例进行说明。

如图17d所示,第一单位图像存储于片外缓存单元中的第一存储单元,第二单位图像存储于片外缓存单元中的第二存储单元。

其中,拆分输入图像以得到单位图像,以及编译目标神经网络模型以得到长指令集合的过程可以是离线过程。

步骤s103,从长指令集合中读取第一长指令,执行对应操作。

具体的,第一长指令包括第一单位指令和第二单位指令,第一单位指令为空,第二单位指令包括搬入引擎标识、与搬入引擎标识对应的第一存储单元的地址信息以及第三存储单元的地址信息,且第三存储单元属于片内缓存单元。

如图17d所示,调用搬入引擎,搬入引擎将第一单位图像从第一存储单元搬入至第三存储单元,搬入引擎将第一单位图像从片内搬移到了片外。

当搬入引擎执行完毕时,说明第一长指令执行完毕,接着执行第二长指令。

步骤s104,从长指令集合中读取与第一长指令相邻的第二长指令,执行对应操作。

具体的,第二长指令包括第一单位指令和第二单位指令,该第一单位指令为空,该第二单位指令包括第一引擎标识集合和第一配置信息集合。

第一引擎标识集合包括搬入引擎标识和卷积引擎标识;

第一配置信息集合包括与搬入引擎标识对应的第二存储单元的地址信息和第四存储单元的地址信息,以及与卷积引擎标识对应的第三存储单元的地址信息、第五存储单元的地址信息、第一卷积核以及第一步长。

其中,第四存储单元,第五存储单元均属于片内缓存单元。

如图17e所示,调用搬入引擎,搬入引擎将第二单位图像从第二存储单元搬入至第四存储单元。

调用卷积引擎,卷积引擎根据上述第一卷积核以及第一步长对第三存储单元中的第一单位图像进行卷积处理,得到第一卷积特征图,将第一卷积特征图存储至第五存储单元。

这两个处理引擎可以是并发执行,更进一步,这两个处理引擎可以是并行执行。

当搬入引擎和卷积引擎均执行完毕时,说明第二长指令执行完毕,接着执行第三长指令。

步骤s105,从长指令集合中读取与第二长指令相邻的第三长指令。

具体的,第三长指令包括第一单位指令和第二单位指令,该第一单位指令包括第一引擎标识集合和第一配置信息集合,该第二单位指令包括第二引擎标识集合和第二配置信息集合。

第一引擎标识集合包括:卷积引擎标识和池化引擎标识;

第一配置信息集合包括:与卷积引擎标识对应的第四存储单元的地址信息、第六存储单元的地址信息、第二卷积核和第二步长,与池化引擎标识对应的第五存储单元的地址信息、第七存储单元的地址信息和池化方式。

第二引擎标识集合包括:搬出引擎标识;

第二配置信息集合包括:与搬出引擎标识对应的第七存储单元的地址信息和第八存储单元的地址信息。

第六存储单元和第七存储单元属于片内缓存单元,第八存储单元属于片外缓存单元。

如图17f所示,调用卷积引擎,卷积引擎根据上述第二卷积核以及第二步长对第四存储单元中的第二单位图像进行卷积处理,得到第二卷积特征图,将第二卷积特征图存储至第六存储单元。

调用池化引擎,池化引擎采用上述池化方式对第五存储单元中的第一卷积特征图进行池化,得到第一池化特征图,将第一池化特征图存储至第七存储单元。

此时卷积引擎和池化引擎是并发执行,更进一步,卷积引擎和池化引擎可以是并行执行。

假设此时池化引擎的处理时长远远小于卷积引擎的处理时长,当池化引擎执行完成时,调用搬出引擎,搬出引擎将第七存储单元中的第一池化特征图搬出至第八存储单元,此时卷积引擎不受干扰继续执行未完成的操作。

当卷积引擎和搬出引擎均执行完毕时,说明第三长指令执行完毕。

当然,存储单元中的数据使用完毕后,可以实时将释放该存储单元,以提高存储资源的利用率。例如,第一长指令执行完毕后,第一存储单元中的第一单位图像可以被删除,后续可以用来存储第三长指令执行完毕后所生成的第一池化特征图,即前述中的第一存储单元和第八存储单元可以是同一个存储空间。

从步骤s11-步骤s15可知,在长指令内部包含了多个处理引擎之间的前后依赖关系,使得长指令具有并发性,可减少处理引擎的等待时长,从整体配合的角度提升人工智能加速器的加速性能;同时,对长指令的统一控制,不需要多个指令队列分别存储每个处理引擎的短指令,在对神经网络模型的处理过程加速的前提下,还可以节约芯片面积,降低成本。

基于上述的人工智能加速器的相关描述,本申请实施例还提出了一种如图18所示的人工智能加速芯片,该人工智能加速芯片内封装有上述所提及的人工智能加速器。具体实现中,该人工智能加速芯片内所封装的人工智能加速器至少包括处理芯片702,可选的,该人工智能加速芯片内所封装的人工智能加速器还包括指令编译单元701和片外缓存单元703。其中,处理芯片702可以包括指令解析单元、指令调度单元以及处理引擎集合;进一步地,该处理芯片702还可以包括指令队列单元和片内缓存单元。

另一种实施方式中,本申请实施例还提出了一种图19所示的人工智能加速设备。该人工智能加速设备可以是终端设备或者服务器等服务设备。

其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、cdn(contentdeliverynetwork,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。

终端设备可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。

具体实现中,该人工智能加速设备中可包括上述所提及的人工智能加速器801。可选的,人工智能加速设备还可包括:存储器802,输入接口803以及输出接口804,存储器802中可以包括计算存储介质。在实际应用中,人工智能加速设备可使用内部的人工智能加速器对神经网络模型的处理过程进行有效加速,提升神经网络模型的加速效果。

本申请实施例中的人工智能加速器的实现代价低,在长指令内部包含了多个处理引擎之间的前后依赖关系,进而不需要和软件进行交互来确定依赖关系,降低软硬件交互所带来的加速性能损耗,从整体配合的角度提升人工智能加速器的加速性能,缩短神经网络模型的计算时长,优化处理引擎的工作效率。

还需要说明的是,当人工智能加速设备为云服务器时,该云服务器可以提供人工智能云服务,所谓人工智能云服务,一般也被称作是aiaas(aiasaservice,ai即服务)。这是目前主流的一种人工智能平台的服务方式,具体来说aiaas平台会把几类常见的ai服务进行拆分,并在云端提供独立或者打包的服务。这种服务模式类似于开了一个ai主题商城:所有的开发者都可以通过api接口的方式来接入使用平台提供的一种或者是多种人工智能服务(例如,训练神经网络模型,以及基于训练好的神经网络模型进行预测等),部分资深的开发者还可以使用平台提供的ai框架和ai基础设施来部署和运维自已专属的云人工智能服务。

基于上述人工智能加速器的相关描述,本申请实施例提出一种数据处理方法,该数据处理方法可应用于上述所提及的人工智能加速器。请参见图20,该数据处理方法可包括以下步骤s901-步骤s903:

步骤s901,读取目标长指令,目标长指令是对并行排布的目标神经网络模型进行适配生成的指令;目标长指令包括第一单位指令和第二单位指令;第一单位指令包括第一引擎标识集合以及第一配置信息集合;第二单位指令包括第二引擎标识集合以及第二配置信息集合。

具体的,读取用于当前执行的一个指令(称为目标长指令),目标长指令是对并行排布的目标神经网络模型进行适配生成的多个指令中的任意一个指令,并行排布的目标神经网络模型即是目标神经网络模型对应的多条短指令流水。

目标长指令可以包括多个单位指令,下述以多个单位指令中的两个相邻单位指令为例进行说明,上述两个相邻单位指令可以称为第一单位指令和第二单位指令。

第一单位指令包括第一引擎标识集合以及第一配置信息集合,第二单位指令包括第二引擎标识集合以及第二配置信息集合。第一引擎标识集合所包含的引擎标识的数量等于第一配置信息集合中所包含的配置信息的数量;第二引擎标识集合所包含的引擎标识的数量等于第二配置信息集合中所包含的配置信息的数量。引擎标识是处理引擎对应的身份标志信息,配置信息中包含处理引擎进行工作时所需要的参数,引擎标识和配置信息是一一对应关系。

并行排布的目标神经网络模型进行适配生成的多个指令都可以称为长指令,每个长指令所包含的单位指令的数量相同。

步骤s902,基于第一引擎标识集合对应的第一处理引擎子集以及第一配置信息集合,执行第一业务处理集合。

具体的,按照第一单位指令中的第一引擎标识集合,从处理引擎集合中抽取对应的处理引擎,将抽取出来的处理引擎组合为第一处理引擎子集;按照第二单位指令中的第二引擎标识集合,从处理引擎集合中抽取对应的处理引擎,将抽取出来的处理引擎组合为第二处理引擎子集。

调用第一处理引擎子集,以驱动第一处理引擎子集根据第一配置信息集合执行与之对应的第一业务处理集合,其中第一处理引擎子集中的所有处理引擎都是并发执行(更进一步,第一处理引擎子集中的所有处理引擎是并行执行),也即是第一业务处理集合中的所有业务处理是并发执行(甚至并行执行)的。

步骤s903,当第一处理引擎子集中存在处理引擎执行完毕时,基于第二引擎标识集合对应的第二处理引擎子集以及第二配置信息集合,执行第二业务处理集合。

当第一处理引擎子集中存在处理引擎执行完毕时,调用第二处理引擎子集,以驱动第二处理引擎子集根据第二配置信息集合执行与之对应的第二业务处理集合,其中第二处理引擎子集中的所有处理引擎是并发执行(更进一步,第二处理引擎子集中的所有处理引擎是并行执行),当然,此时第一处理引擎子集合中未执行完毕的处理引擎仍旧继续执行,也即是第二处理引擎子集中的所有处理引擎以及第一处理引擎子集合中未执行完毕的处理引擎是并发执行。

从上述可知,长指令中包括了多个短指令之间的依赖关系,每个短指令用于调用一个处理引擎,为了使短指令可以灵活地串、并行组合,在目标长指令中,对每个处理引擎只能调用一次,那么第一单位指令中的第一引擎标识集合与第二单位指令中的第二引擎标识集合之间的交集为空集。

进一步地,对目标长指令中所包含的多个单位指令分别对应的多个引擎标识集合之间的交集也都为空集。

从前述可知,第一单位指令和第二单位指令是目标长指令中所包含的多个单位指令中的任意两个相邻单位指令,目标长指令所包含的单位指令的数量小于或等于处理引擎集合所包含的处理引擎的数量。

目标长指令中所包含的多个单位指令(例如,包含n个单位指令),可以分为前n-1个单位指令和最后一个单位指令,前n-1个单位指令可以为空集,最后一个单位指令不能为空集。若第k个单位指令为空集(k<n-1),可以直接确定第k个单位指令对应的处理引擎集合中存在处理引擎执行完毕,进而直接驱动第k+1个单位指令对应的处理引擎集合,执行对应的业务处理。

由于在长指令内部包含了多个处理引擎之间的前后依赖关系,进而不需要和软件进行交互来确定依赖关系,避免了软硬件交互所带来的加速性能损耗,从整体配合的角度提升人工智能加速器的加速性能,缩短神经网络模型的处理时长。同时,通过指令调度单元的统一控制,不需要多个指令队列,以较小的代价,在对神经网络模型的处理过程加速的前提下,还可以节约芯片面积。

以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,因此依本申请权利要求所作的等同变化,仍属本申请所涵盖的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1