具体实施方式
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在本文中使用以下术语。
深度学习模型:深度学习是机器学习(ML,Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI)。深度学习学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习采用的模型即深度学习模型。深度学习模型根据所依赖的模型框架(framework)不同,其格式也不同,可以分为不同类型的格式,如tensorflow、pytorch、mxnet等。
计算装置:具有计算或处理能力的设备,它可以体现为终端的形式,如物联网设备、移动终端、桌上电脑、膝上电脑等,也可以体现为服务器或服务器组成集群。在本公开应用的物联网的环境下,计算装置是物联网中的物联网终端。
调度单元:在计算装置中进行传统处理(非用于图像处理和各种深度学习模型等复杂运算的处理)之外,还承担着对加速单元的调度职能的单元。其向加速单元分配加速单元需要承担的任务,例如张量计算任务。调度单元可以采用中央处理器(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。
加速单元:在计算装置中针对传统处理单元在一些专门用途的领域(例如,处理图像、处理深度学习模型的各种运算,等等)效率不高的情况,为了提高在这些专门用途领域中的数据处理速度而设计的处理单元。加速单元也称为人工智能(AI)处理单元,包括中央处理器(CPU)、图形处理器(GPU)、通用图形处理器(GPGPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、以及专用智能加速硬件(例如,神经网络处理器NPU、张量处理器TPU)。
处理单元:位于加速单元内(例如可以是加速单元核的张量引擎),具有深度学习模型中的卷积、矩阵乘法等相关操作的处理能力的设备,它可以体现为片上系统,可以插入计算装置或从计算装置中更换。
张量运算:由若干坐标系改变时满足一定坐标转化关系的有序数组成的集合为张量。通俗地讲,它是基于向量和矩阵的推广。将标量视为0阶张量,将向量视为1阶张量,将矩阵视为2阶张量,但是,当横竖两个空间的维度都不足以表示输入的量时,3阶以上张量就产生了。有了张量,可以表示任意维度空间的输入的量。深度学习模型的特点就是能够接收任意维度空间的输入量。无论多少维度的输入量,可以表示为输入张量,该张量输入深度学习模型的第一个层的节点。第一个层的节点具有同样维度空间的权重张量。由于输入张量的维度空间与权重张量的维度空间相同,就可以在同一维度空间内进行输入张量与权重张量的运算,例如点乘、卷积等,产生的输出仍然是相同维度空间的输出。前一个层的节点的输出张量输入到后一个层的节点作为输入,与后一个层的节点的权重张量在同一维度空间再进行张量运算,例如点乘、卷积等,如此不断进行,直到得到最后一层的节点的输出张量,作为整个深度学习模型的输出张量。
本公开的应用环境
本公开实施例提出了一种张量运算方案。整个张量运算方案相对较为通用,可以用于执行各种深度学习模型的各种硬件设备,例如,用于数据中心、用于AI(人工智能)加速单元,用于GPU(图形处理单元),用于能执行深度学习模型的IOT(物联网)设备,嵌入式设备等。张量运算方法与执行该张量运算方法的处理单元最终部署在的硬件无关。但为了示例性描述,下文中将主要以物联网为应用场景进行描述。本领域技术人员应当理解,本公开实施例还可以适用于其它的应用场景。
物联网整体架构
图1是本公开一个实施例所应用的物联网(IoT)100的一种系统架构图。
云110可以表示互联网,或者可以是局域网(LAN)、或广域网(WAN),诸如公司的专有网络。IoT装置可以包括以各种组合来分组的任何数量的不同类型的装置。例如,交通控制组206可以包括沿着城市中的街道的IoT装置。这些IoT装置可以包括红绿灯、交通流量监控器、相机、天气传感器等。交通控制组206或其他子组中的各IoT装置可以通过无线链路208(诸如,LPWA链路等)来与云110进行通信。进一步地,有线或无线子网络212可以允许IoT装置彼此通信,诸如通过局域网、无线局域网等。IoT装置可以使用诸如网关210等另一装置来与云110进行通信。
IoT装置的其他分组可以包括远程气象站214、本地信息终端216、报警系统218、自动柜员机220、报警面板222、或移动车辆,诸如应急车辆224或其他车辆226等。这些IoT装置中的每一个都可以与其他IoT装置、与服务器140、或与两者进行通信。
如从图1中可以看出,大量IoT装置可以通过云110进行通信。这可以允许不同的IoT装置自主地向其他装置请求或提供信息。例如,交通控制组206可以从远程气象站组214请求当前天气预报,所述远程气象站组可以在没有人为干预的情况下提供预报。进一步地,可以由自动柜员机220向应急车辆224警告正在发生盗窃。当应急车辆224朝向自动柜员机220前进时,其可以访问交通控制组206以请求准许到达所述位置,例如,通过灯变红以在交叉路口阻止交叉车流足够的时间从而使应急车辆224无阻碍地进入交叉路口。
在上述IoT装置中经常使用机器学习。例如,自动柜员机220识别人脸需要使用机器学习,交通控制组206对交通流量和控制方案的分析需要使用机器学习。每个IoT装置由于环境条件不确定,随着网络条件、天气状况等环境条件的变化,外部环境带宽发生变化,处理单元的计算能力和外部环境带宽发生不适配,降低了处理器的计算能效,需要采用本公开实施例的处理单元。
调度单元和加速单元
图2是本公开一个实施例的IoT装置(计算装置)的调度单元420和加速单元430的内部结构图。如图2所示,IoT装置包括存储器410、调度单元420和加速单元430。为了方便描述,图2中仅示出了一个调度单元420和一个加速单元430,但应当理解,本公开实施例并不以此为限。本公开实施例的IoT装置可以包括通过总线与存储器410连接的调度单元集群和加速单元集群,调度单元集群包括多个调度单元420,加速单元集群包括多个加速单元430。加速单元430即为了提高在专门用途领域中的数据处理速度而设计的处理单元。加速单元也称为人工智能(AI)处理单元,包括中央处理器(CPU)、图形处理器(GPU)、通用图形处理器(GPGPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、以及专用智能加速硬件(例如,神经网络处理器NPU、张量处理器TPU)。本公开实施例可以适用于NPU场景,但由于采用通用编译自定义接口,硬件下也可以使用CPU、GPU、GPGPU和TPU等。调度单元是对加速单元进行调度、向各加速单元分配要执行的待执行指令序列的处理单元,它可以采用中央处理单元(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。在一些实施例中,调度单元420向各加速单元430分配要执行的张量计算任务的待执行指令序列。
传统的中央处理单元的架构设计,使得在架构中控制单元、存储单元占用了很大一部分空间,而计算单元占用的空间反而不足,因此其在逻辑控制方面十分有效,而在大规模并行计算方面则效率不够。因此,开发出了各种专门的加速单元,用来针对不同功能和不同领域的计算进行更有效的提高运算速度的处理。本发明提出的加速单元是专用于加速神经网络模型的运算处理速度的处理单元。它是采用数据驱动并行计算的架构,用于处理各神经网络节点的大量运算(例如卷积、池化等)的处理单元。由于各神经网络节点的大量运算(例如卷积、池化等)中的数据和中间结果在整个计算过程中紧密联系,会被经常用到,用现有的中央处理单元构架,由于中央处理单元的核内的内存容量很小,因此要大量频繁访问核外存储器,造成处理的低效。采用这种专用于加速神经网络模型的运算处理速度的加速单元,由于其每个核中具有适于神经网络计算用到的存储容量的片上内存,避免频繁访问核外部的存储器,就能大大提高处理效率,提高计算性能。
加速单元430要接受调度单元420的调度。如图3所示,存储器410中存储有各种深度学习模型,包括这些模型的节点和节点的权重张量等。这些深度学习模型当需要时被图2中的一个调度单元420部署到一个加速单元430。即,调度单元420可以通过指令的形式向加速单元430发送模型中的参数(如各节点的权重张量)在存储器410中的地址。加速单元430在实际使用该深度学习模型进行计算时,就会根据这些参数(例如权重张量)在存储器410中的地址,直接在存储器410中寻址这些参数,将其暂存在其片上内存中。加速单元430在实际使用该深度学习模型进行计算时,调度单元420还会将模型的输入张量通过指令的形式发送给加速单元430,暂存在加速单元430的片上内存中。这样,加速单元430就可以根据这些输入张量和模型中的参数(例如权重张量)进行推理计算。
下面结合图2所示出的调度单元420与加速单元430的内部结构,具体说明调度单元420是如何调度加速单元430进行工作的。
如图2所示,调度单元420内包含多个处理器核422和被多个处理器核422共享的高速缓存221。每个处理器核422包括取指令单元423、指令译码单元424、指令发射单元425、指令执行单元426。
取指令单元423用于将要执行的指令从存储器410中搬运到指令寄存器(可以是图2示出的寄存器堆429中的一个用于存放指令的寄存器)中,并接收下一个取指地址或根据取指算法计算获得下一个取指地址,取指算法例如包括:根据指令长度递增地址或递减地址。
取出指令后,调度单元420进入指令译码阶段,指令译码单元424按照预定的指令格式,对取回的指令进行解码,以获得取回的指令所需的操作数获取信息,从而为指令执行单元426的操作做准备。操作数获取信息例如指向立即数、寄存器或其他能够提供源操作数的软件/硬件。
指令发射单元425位于指令译码单元424与指令执行单元426之间,用于指令的调度和控制,以将各个指令高效地分配至不同的指令执行单元426,使得多个指令的并行操作成为可能。
指令发射单元425将指令发射到指令执行单元426后,指令执行单元426开始执行指令。但如果该指令执行单元426判断该指令应该是加速单元执行的,则将其转发到相应的加速单元执行。例如,如果该指令是一条深度学习模型推理(inference)的指令,指令执行单元426不再执行该指令,而是将该指令通过总线发送到加速单元430,由加速单元430执行。
本公开实施例虽然用于NPU场景,由于采用通用编译自定义接口,图2示出的加速单元430不限于NPU,还可以是TPU。TPU即张量处理器,是一种专用于加速深度神经网络的计算能力的处理器。另外,加速单元430还可以是CPU、GPU、FPGA、ASIC等。
加速单元430内部包括多个核436(图2中示出了4个核,但本领域技术人员应当理解,加速单元430中也可以包含其它数目的核436)、命令处理器437、直接存储访问机制435、和总线通道431。
总线通道431是指令从总线进出加速单元430的通道。
直接内存访问(DMA,Direct Memory Access)机制435是一些计算机总线架构提供的功能,它能使数据从附加设备直接写入计算机主板的存储器上。这种方式相比于设备之间所有的数据传输都要通过处理单元的方式,大大提高了数据访问的效率。正是因为有这样的机制,加速单元430的核可以直接访问存储器410,读取深度学习模型中的参数(例如各节点的权重张量)等,大大提高了数据访问效率。
命令处理器437将由调度单元420发送至加速单元430的指令分配给核436执行。指令执行单元426将需要加速单元430执行的待执行指令序列发送给加速单元430。该待执行指令序列从总线通道431进入后,缓存在命令处理器437,由命令处理器437选择核436,将指令序列分配给其执行。在一些实施例中,该待执行指令序列是张量计算任务的待执行指令序列,命令处理器437向核436分配张量计算任务。另外,命令处理器437还负责核436之间的同步操作。
加速单元核
图3是根据本公开一个实施例的加速单元核的内部结构图。
在一个实施例中,如图3所示,加速单元核436包括张量引擎510、池化引擎520、存储器拷贝引擎530、定序器550、指令缓存器540、片上内存560、常数缓冲器570。
命令处理器437分配给加速单元核436的指令序列首先进入指令缓存器540缓存。然后,定序器550从指令缓存器540中按照先进先出的顺序取指令,根据指令的性质分配给张量引擎510或池化引擎520执行。张量引擎510负责处理深度学习模型中的卷积和矩阵乘法等相关操作。池化引擎520负责处理深度学习模型中的池化操作。存储器拷贝引擎530是专门处理数据拷贝的单元,这里的数据拷贝包括由于片上内存560可能会溢出而将一些数据由片上内存560拷贝到各核436共享的存储器,或者其它核436的片上内存560。定序器550根据取出的指令是卷积、矩阵乘法、池化、还是数据拷贝等操作性质,决定将指令分配给张量引擎510、池化引擎520、或者存储器拷贝引擎530。
片上内存560是存储深度学习模型中的权重张量、以及深度学习模型实际使用时的输入张量和各种中间结果的核内存储器。常数缓冲器570是存储深度学习模型中除权重张量之外的其它常量参数(例如,神经网络模型中的超参)的缓冲器。如上所述,在调度单元420将深度学习模型预先配置在加速单元430的过程中,调度单元420通过指令的形式向加速单元430发送模型中的参数在存储器410中的地址。这些参数包括节点的权重张量和其它参数(例如超参)。对于权重张量,加速单元430在实际的深度学习模型运算时,将它从存储器410相应的位置取出,放在片上内存560中。对于其它参数,加速单元430在实际的深度学习模型运算时,从存储器410相应的位置取出,放在常数缓冲器570中。另外,当实际开始推理(inference)的指令由命令处理器437分配给核436执行后,指令中的输入张量(给深度学习模型的输入)也存储在片上内存560。另外,当张量引擎510和池化引擎520进行卷积或池化运算后,得到的各种中间结果也存放在片上内存560中。
处理单元
图4是根据本公开一个实施例的处理单元(张量引擎510)的内部结构图。
在一个实施例中,如图4所示,处理单元包括计算单元控制器610、监测单元620和计算矩阵630,其中监测单元620是可选的。计算矩阵630由呈n行m列排列的n×m个计算单元640构成,n和m是非零的自然数。
当不采用监测单元620时,可以让指令执行单元426发送的待执行指令序列中带有处理单元所处的外部环境带宽。外部环境带宽是处理单元的外部环境(例如,存储器410和片上内存650等)向处理单元的计算矩阵630传输数据的能力,例如是在一个时钟周期从处理单元的外部环境(例如,存储器410和片上内存650等)传输至处理单元的计算矩阵630的数据总量。一般来说,计算装置处于网络条件、天气状况等变化的环境条件中,随着环境条件的变化外部环境带宽发生变化。该待执行指令序列从总线通道431进入后,缓存在命令处理器437,由命令处理器437分配给核436,缓存在核436的指令缓冲器540,由定序器550分配到张量引擎510,即处理单元。处理单元从中提取外部环境带宽。
当采用监测单元620,监测单元620监测处理单元所处的外部环境带宽。在一个实施例中,监测单元620可以监测网络条件等,并结合预定规则推算外部环境带宽。在另一个实施例中,监测单元620可以记录历史上进入处理单元的指令序列的执行情况,并根据指令序列执行记录确定距离当前时间点预定时间段内的平均外部环境带宽,作为当前的外部环境带宽。这种检测可以是实时的,从而确保计算单元控制器610据此确定出的计算矩阵数据传递方式更加符合客观实际,使处理单元的计算能力和外部带宽实时适配,提高了处理单元的计算能效。
在一些实施例中,计算单元控制器610根据处理单元所处的外部环境带宽,在外部环境带宽满足预定带宽要求的情况下,控制计算矩阵630以组播数据输入模式工作,数据按列广播到对应列的所有计算单元640,以及按行广播到对应行的所有计算单元640,在外部环境带宽不满足预定带宽要求的情况下,控制计算矩阵630以脉动数据输入模式工作,计算单元640从前一列同一行的计算单元640以及从同一列前一行的计算单元640接收数据,以支持计算矩阵630对输入张量和张量权重进行张量运算。在一些情况下,在外部环境带宽满足预定带宽要求,即大于预定环境带宽阈值的情况下,计算单元控制器610控制计算矩阵630以组播数据输入模式工作。在另一些情况下,在外部环境带宽不满足预定带宽要求,即不大于预定环境带宽阈值的情况下,计算单元控制器610控制计算矩阵630以脉动数据输入模式工作。预定环境带宽阈值例如是预先设置的作为基准的带宽,其可以是在组播数据输入模式下,在一个时钟周期需要输入计算矩阵630的最大数据总量。
应当理解的是,在一些实施例中,在组播数据输入模式下,在一个时钟周期,数据按列广播到计算矩阵630的每个对应列的所有计算单元640,以及按行广播到计算矩阵630的每个对应行的所有计算单元640。也即是,计算矩阵630中计算单元640的行数和列数决定在一个时钟周期需要输入计算矩阵630的最大数据总量。在组播数据输入模式下,在一个时钟周期,需要输入计算矩阵630的最大数据总量为n×m×2。在一些实施例中,在脉动数据输入模式下,在一个时钟周期,计算矩阵630的第一列各行的计算单元640以及第一行各列的计算单元640均从外部环境接收数据,其他的计算单元640从前一列同一行的计算单元640以及从同一列前一行的计算单元640接收数据,以使得输入计算矩阵630的数据在计算矩阵630脉动复用。也即是,在脉动数据输入模式下,在一个时钟周期,需要输入计算矩阵630的最大数据总量为n+m。n×m×2大于n+m,也即是对于n×m计算矩阵630,在一个时钟周期,组播数据输入模式下需要输入计算矩阵630的最大数据总量大于脉动数据输入模式下需要输入计算矩阵630的最大数据总量。这样,在外部环境带宽大于n×m×2时,在组播数据输入模式下,能够确保在一个时钟周期从处理单元的外部环境输入计算矩阵630的数据总量达到n×m×2,计算矩阵630中n×m个计算单元640均执行计算,没有处于空转等待状态的计算单位640。但是,在外部环境带宽等于n×m×2时,在组播数据输入模式下,由于外部环境带宽随着处理单元的外部环境的环境条件变化而变化,极易发生在一个时钟周期从外部环境输入计算矩阵630的数据总量小于n×m×2的情况,造成处于空转等待状态的计算单元640。在外部环境带宽小于n×m×2时,在组播数据输入模式下,在一个时钟周期能够从外部环境输入计算矩阵630的数据总量小于n×m×2,计算矩阵630存在处于空转等待状态的计算单位640。这样,在外部环境带宽不大于n×m×2时,将计算矩阵630的工作模式由组播数据输入模式转换为脉动数据输入模式,在脉动数据输入模式下,虽然在一个时钟周期能够从外部环境输入计算矩阵630的数据总量小于n×m×2,但是输入数据从前一列同一行的计算单元640传输至下一列同一行的计算单元640以及从同一列前一行的计算单元640传输至同一列下一行的计算单元640,也即是输入数据在计算矩阵630中脉动复用,能够减少处于空转等待状态的计算单元640的数量。
在本公开实施例中,在外部环境带宽满足预定带宽要求,即大于预定环境带宽阈值的情况下,控制计算矩阵630以组播数据输入模式工作,输入数据按行和列输入计算矩阵630,计算单元640均执行计算,计算矩阵630中不存在处于空转等待状态的计算单元640,充分发挥计算矩阵630的计算能力,提高了计算矩阵630的运算吞吐率,提高了处理单元的计算能力。在外部环境带宽不满足预定带宽要求,即外部环境带宽不大于预定环境带宽阈值的情况下,切换计算矩阵630的工作模式为脉动数据输入模式,输入数据在计算矩阵630中脉动复用,减少了处于空转等待状态的计算单元640的数量,提高了处理单元的计算能效。
在一些实施例中,计算矩阵630用于执行第一矩阵和第二矩阵的乘法,得到积矩阵。第一矩阵例如是输入张量,第二矩阵例如是张量权重。第一矩阵、第二矩阵和积矩阵例如存储在片上内存650中。假设第一矩阵为A,第二矩阵为B,第一矩阵A和第二矩阵B的积矩阵为C,其分别表示为如下:
则C11=A11B11+A12B21+A13B31+…+A1NBN1 (4)
C12=A11B12+A12B22+A13B32+…+A1NBN2 (5)
以此类推,
C1N=A11B1N+A12B2N+A13B3N+…+A1NBNN (6)
以此类推,
CN1=ANxB11+AN2B21+AN3B31+…+ANNBN1 (7)
CN2=AN1B12+AN2B22+AN3B32+…+ANNBN2 (8)
以此类推,
CNN=AN1B1N+AN2B2N+AN3B3N+…+ANNBNN (9)
从上述公式(1)至(9)可以看出,求第一矩阵A和第二矩阵B的积的过程实际上是第一矩阵A的元素Alk分别与第二矩阵B的元素Bkj碰撞并相乘,以及将乘积累加的过程,其中l,j,k,N是非0的自然数,l≤N,j≤N,k≤N。
图5是根据本公开一个实施例的计算矩阵630的内部结构图。
在一些实施例中,如图5所示,计算矩阵630由呈N行N列排列的N×N个计算单元640构成,N是非零的自然数。在组播数据输入模式下,在一个时钟周期需要输入计算矩阵630的最大数据总量为N×N×2。在一些实施例中,预定环境带宽阈值为N×N×2,在外部环境带宽大于N×N×2的情况下,控制计算矩阵630在组播数据输入模式工作,在外部环境带宽不大于N×N×2的情况下,控制计算矩阵630在脉动数据输入模式工作。
在一些实施例中,如图5所示,在脉动数据输入模式中,计算矩阵630中计算单元640通过第一输入线641从前一列同一行的计算单元640接收数据,通过第二输入线642从同一列前一行的计算单元640接收数据。也即是,在脉动数据输入模式中,每个计算单元640的输入数据源自于前一列同一行的计算单元640和同一列前一行的计算单元640。
在一些情况下,在脉动数据输入模式中,如图5所示,在第一个时钟周期,让第一矩阵A的第一行第一列的元素A11进入计算矩阵630的第一列,让第二矩阵B的第一行第一列的元素B11进入计算矩阵630的第一行,这样,在计算矩阵630的第一行第一列的计算单元T11就得到A11B11。在第二个时钟周期,第一矩阵A的第一行第一列的元素A11从计算矩阵630的第一行第一列的计算单元T11向右进入第一行第二列的计算单元T12,第二矩阵B的第一行第一列的元素B11从计算矩阵630的第一行第一列的计算单元T11继续往下进入第二行第一列的计算单元T21。同时,让第一矩阵A的第一行第二列元素A12和第二行第一列元素A21分别进入计算矩阵630的第一列的前两行的计算单元T11和T21,让第二矩阵B的第二行第一列元素B21和第一行第二列的元素B12分别进入计算矩阵630的第一行的前两列的计算单元T11和T12。这样,在第二个时钟周期,在计算单元T11,A12和B21相遇,得到A12B21;在计算单元T12,A11和B12相遇,得到A11B12;在计算单元T21,A21和B11相遇,得到A21B11。以此类推,这样下来,在第N个时钟周期,第一矩阵A中正好有N个元素(行序号和列序号的和等于N+1的N个元素)分别进入计算矩阵630的第一列的N行的计算单元T11至TN1,第二矩阵B中正好有N个元素(行序号和列序号的和等于N+1的N个元素)分别进入计算矩阵630的第一行的N列的计算单元T11至T1N。以此类推,在第2N-1个时钟周期,第一矩阵A中又只有一个元素ANN(行序号和列序号的和等2N)进入计算矩阵630的第N行第一列的计算单元TN1,第二矩阵B中又只有一个元素BNN(行序号和列序号的和等2N)进入计算矩阵630的第一行第N列的计算单元T1N。也就是说,在前2N-1个时钟周期,对于第i个时钟周期,计算单元控制器610让第二矩阵B中行序号和列序号之和为i+1的元素进入计算矩阵630的相应列的计算单元640,让第一矩阵A中行序号和列序号之和为i+1的元素进入计算矩阵630的相应行的计算单元640,由计算单元640对接收到的来自第一矩阵A的列号和来自第二矩阵B的行号相同的元素进行相乘,并将相乘的结果累加到之前的累加结果中;在第2N到第3N-1个时钟周期,第一矩阵A和第二矩阵B不再有新的元素输入计算矩阵630,元素在计算矩阵630中脉动,由计算单元640对接收到的来自第一矩阵A的列号和来自第二矩阵B的行号相同的元素进行相乘,并将相乘的结果累加到之前的累加结果中。最终,经过3N-1个时钟周期,由计算矩阵630得到第一矩阵A和第二矩阵B的积矩阵C中的各元素。
这样,在脉动数据输入模式,在第N个时钟周期,计算单元控制器610让第二矩阵B中行序号和列序号之和为N+1的N个元素进入计算矩阵630的相应列的计算单元640,让第一矩阵A中行序号和列序号之和为N+1的N个元素进入计算矩阵630的相应行的计算单元640。也即是,在脉动数据输入模式下,在一个时钟周期需要输入计算矩阵630的最大数据总量为N+N,输入数据从前一列同一行的计算单元640传输至下一列同一行的计算单元640以及从同一列前一行的计算单元640传输至同一列下一行的计算单元640,输入数据在计算矩阵630中脉动复用。
在一些实施例中,如图5所示,在组播数据输入模式中,计算矩阵630中同一列的计算单元640共同连接到第一列总线643,同一列的各计算单元640通过第一列总线643分别接收数据。计算矩阵630中同一行的计算单元640共同连接到第一行总线644,同一行的各计算单元640通过第一行总线644分别接收数据。也即是,在组播数据输入模式中,以组播传输的方式,将数据按照行和列输入各计算单元640。
在一些情况下,在组播数据输入模式中,如图5所示,在第一个时钟周期,计算单元控制器610让第一矩阵A中第一行第一列的元素A11广播到计算矩阵630第一行的计算单元T11至T1N,让第一矩阵A中第二行第一列的元素A21广播到计算矩阵630第二行的计算单元T21至T2N,以此类推,让第一矩阵A中第N行第一列的元素AN1广播到计算矩阵630第N行的计算单元TN1至TNN,让第二矩阵B中第一行第一列的元素B11广播到计算矩阵630的第一列的计算单元T11至TN1,让第二矩阵B中第一行第二列的元素B12广播到计算矩阵630的第二列的计算单元T12至TN2,以此类推,让第二矩阵B中第一行第N列的元素B1N广播到计算矩阵630的第N列的计算单元T1N至TNN。在第二个时钟周期,计算单元控制器610让第一矩阵A中第一行第二列的元素A12广播到计算矩阵630第一行的计算单元T11至T1N,让第一矩阵A中第二行第二列的元素A22广播到计算矩阵630第二行的计算单元T21至T2N,以此类推,让第一矩阵A中第N行第二列的元素AN2广播到计算矩阵630第N行的计算单元TN1至TNN,让第二矩阵B中第二行第一列的元素B21广播到计算矩阵630的第一列的计算单元T11至TN1,让第二矩阵B中第二行第二列的元素B22广播到计算矩阵630的第二列的计算单元T12至TN2,以此类推,让第二矩阵B中第二行第N列的元素B2N广播到计算矩阵630的第N列的计算单元T1N至TNN。以此类推,在第N个时钟周期,计算单元控制器610让第一矩阵A中第一行第N列的元素A1N广播到计算矩阵630第一行的计算单元T11至T1N,让第一矩阵A中第二行第N列的元素A2N广播到计算矩阵630第二行的计算单元T21至T2N,以此类推,让第一矩阵A中第N行第N列的元素ANN广播到计算矩阵630第N行的计算单元TN1至TNN,让第二矩阵B中第N行第一列的元素BN1广播到计算矩阵630的第一列的计算单元T11至TN1,让第二矩阵B中第N行第二列的元素BN2广播到计算矩阵630的第二列的计算单元T12至TN2,以此类推,让第二矩阵B中第N行第N列的元素BNN广播到计算矩阵630的第N列的计算单元T1N至TNN。
这样,对于前N个时钟周期,在第i个时钟周期,在计算矩阵630的第一行第一列的计算单元T11就得到A1iBi1,在计算矩阵630的第一行第二列的计算单元T12就得到AliBi2,以此类推,在计算矩阵630的第一行第N列的计算单元T1N就得到A1iBiN,在计算矩阵630的第二行第一列的计算单元T21就得到A2iBi1,在计算矩阵630的第二行第二列的计算单元T22就得到A2iBi2,以此类推,在计算矩阵630的第二行第N列的计算单元T2N就得到A2iBiN,以此类推,在计算矩阵630的第N行第一列的计算单元TN1就得到ANiBi1,在计算矩阵630的第N行第二列的计算单元TN2就得到ANiBi2,以此类推,在计算矩阵630的第N行第N列的计算单元TNN就得到ANiBiN。也即是,对于前N个时钟周期,在第i个时钟周期,计算单元控制器610让第一矩阵A中第i列的各元素分别广播到计算矩阵630的各行,让第二矩阵B中第i行的各元素分别广播到计算矩阵630的各列,由计算单元640对接收到的来自第一矩阵A的列号和来自第二矩阵B的行号相同的元素进行相乘,并将相乘的结果累加到之前的累加结果中。在第N+1个时钟周期,输出由计算矩阵630得到的第一矩阵A和第二矩阵B的积矩阵C中的各元素。
这样,在组播数据输入模式,对于前N个时钟周期,在第i个时钟周期,计算单元控制器610让第一矩阵A中第i列的N个元素分别广播到计算矩阵630的N行,让第二矩阵B中第i行的N个元素分别广播到计算矩阵630的N列。也即是,在组播数据输入模式下,在一个时钟周期需要输入计算矩阵630的最大数据总量为N×N×2,也即是在计算矩阵630中N×N个计算单元640均执行计算,不存在处于空转等待状态的计算单元640。
需要说明的是,一般来说,在图5所示的处理单元中计算矩阵630是固定的,而第一矩阵A和第二矩阵B是不固定的。对于第一矩阵A和第二矩阵B的行数和列数与计算矩阵630不一致的情况,通常先对第一矩阵A和第二矩阵B进行矩阵拆分,拆分后再利用计算矩阵630对第一矩阵A和第二矩阵B进行张量运算。
计算单元
图6是根据本公开一个实施例的计算单元640的内部结构图。
在一些实施例中,计算矩阵630中计算单元640的内部结构相同。如图7所示,计算单元640包括:第一寄存器651、第二寄存器652、第三寄存器653、乘法器654和累加器655。
在一些实施例中,监测单元620可以实时监测外部环境带宽,计算单元控制器610根据实时监测的外部环境带宽,使计算矩阵630在脉动数据输入模式和组播数据输入模式之间切换。在一些实施例中,计算单元640还包括:第一选通器656和第二选通器657。第一选通器656用于接收计算单元控制器610提供的控制信号M,根据控制信号M将计算矩阵630中的第二输入线642或第一列总线643选通,使计算矩阵630在脉动数据输入模式和组播数据输入模式之间切换。第二选通器657用于接收计算单元控制器610提供的控制信号M,根据控制信号M将计算矩阵630中的第一输入线641或第一行总线644选通,使计算矩阵630在脉动数据输入模式和组播数据输入模式之间切换。在一些情况下,根据控制信号M,第一选通器656将计算矩阵630中的第二输入线642选通,计算单元640通过第二输入线642从同一列前一行的计算单元640接收数据,第二选通器657将计算矩阵630中的第一输入线641选通,计算单元640通过第一输入线641从前一列同一行的计算单元640接收数据,使计算矩阵630在脉动数据输入模式工作。在另一些情况下,根据控制信号M,第一选通器656将计算矩阵630中的第一列总线643选通,同一列的各计算单元640通过第一列总线643分别接收数据,第二选通器657将计算矩阵630中的第一行总线644选通,同一行的各计算单元640通过第一行总线644分别接收数据,使计算矩阵630在组播数据输入模式工作。
在一些实施例中,在脉动数据输入模式中,在一个时钟周期,计算矩阵630中计算单元640通过第一输入线641从前一列同一行的计算单元640接收数据,通过第二输入线642从同一列前一行的计算单元640接收数据。第一寄存器651根据控制信号M存储从前一列同一行的计算单元640传递的数据。第二寄存器652根据控制信号M存储从同一列前一行的计算单元640传递的数据。乘法器654对从第一输入线641接收的列序号和从第二输入线642接收的行序号相同的元素进行相乘。累加器655将乘法器654相乘的结果累加到之前的累加结果中。第三寄存器653存储所述累加结果。在下一个时钟周期,计算单元640将第一寄存器651中存储的数据传递至下一列同一行的计算单元640,将第二寄存器655中存储的数据传递至同一列下一行的计算单元640。
在一些实施例中,在组播数据输入模式中,在一个时钟周期,计算矩阵630中同一列的各计算单元640通过第一列总线643分别接收数据,同一行的各计算单元640通过第一行总线644分别接收数据。第一寄存器651根据控制信号M暂停工作。第二寄存器652根据控制信号M暂停工作。乘法器654对从第一行总线644接收的列序号和从第一列总线643接收的行序号相同的元素进行相乘。累加器655将乘法器654相乘的结果累加到之前的累加结果中。第三寄存器653存储所述累加结果。
本公开实施例的张量运算方法
图7是本公开实施例提供的张量运算方法的流程图。如图上所示,该方法包括以下步骤。
在步骤S701中,获取多个计算单元所处的外部环境带宽,所述多个计算单元构成n行m列的计算矩阵,n和m是非零的自然数。
在步骤S702中,基于所述外部环境带宽,在所述计算矩阵所处的外部环境带宽满足预定带宽要求的情况下,控制所述计算矩阵以组播数据输入模式工作,数据按列广播到对应列的所有计算单元,按行广播到对应行的所有计算单元,在所述外部环境带宽不满足预定带宽要求的情况下,控制所述计算矩阵以脉动数据输入模式工作,计算单元从前一列同一行的计算单元以及同一列前一行的计算单元接收数据,以支持张量运算。
本公开实施例的方法在一个计算装置中执行,该计算装置包括处理单元,处理单元包括计算单元控制器,该方法利用计算单元控制器根据所述处理单元所处的外部环境带宽控制所述计算矩阵以脉动数据输入模式和组播数据输入模式中的至少一种工作,以支持张量运算。由此得到的处理单元的外部环境带宽和计算能力适配,从而针对计算装置达到更好的计算能效。
本公开实施例的商业价值
本公开实施例提供的处理单元根据处理单元所处的外部环境带宽灵活选择计算矩阵的工作模式,在外部环境带宽大于预定环境带宽阈值的情况下,控制计算矩阵以组播数据输入模式工作,所有计算单元均执行计算,不存在处于空转等待状态的计算单元,提高了处理单元的计算能力;在外部环境带宽不大于预定环境带宽阈值的情况下,切换计算矩阵的工作模式为脉动数据输入模式,输入数据在计算矩阵中脉动复用,减少处于空转等待状态的计算单元的数量,提高了处理单元的计算能效。在此场景下,通过降低脉动数据输入模式下处理单元的功耗从而降低计算装置的功耗,进而降低整个物联网的运行成本。通过提高组播数据输入模式下处理单元的计算性能从而提高计算装置的计算能力,进而提高整个物联网的计算能力。本公开实施例使计算能耗降低,计算能力提高,因而具备了良好的商业价值和经济价值。
本领域的技术人员能够理解,本公开可以实现为系统、方法和计算机程序产品。因此,本公开可以具体实现为以下形式,即完全的硬件、完全的软件(包括固件、驻留软件、微代码),还可以实现为软件和硬件结合的形式。此外,在一些实施例中,本公开还可以实现为一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如但不限于为电、磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接,便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器、磁存储器或者上述任意合适的组合。在本文中,计算机可读的存储介质可以是任意包含或存储程序的有形介质,该程序可以被处理单元、装置或者器件使用,或者与其结合使用。
计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质之外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令系统、装置或器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,以及上述任意合适的组合。
可以以一种或者多种程序设计语言或者组合来编写用于执行本公开实施例的计算机程序代码。所述程序设计语言包括面向对象的程序设计语言,例如JAVA、C++,还可以包括常规的过程式程序设计语言,例如C。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAn)或广域网(WAn)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人员而言,本公开可以有各种改动和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。