发明内容
有鉴于此,本公开的一个目的是提高计算矩阵的器件结构与不同稀疏度的稀疏张量的普适性,以提高处理单元计算张量运算的计算能效。
第一方面,本公开实施例提供一种处理单元,包括:
计算矩阵,包括m行n列的多个计算单元,所述计算矩阵用于计算第一数据矩阵与第二数据矩阵的矩阵运算,所述第一数据矩阵的每一行数据元素按列分为m组行向量,所述第二数据矩阵的每一列数据元素按行分为m组列向量;
计算单元控制器,用于控制每行的计算单元存储所述第二数据矩阵相应组的x个列向量,控制所述第一数据矩阵的每一组行向量分别进入相应行的计算单元,其中,下一组行向量比上一组行向量滞后一个时钟周期开始进入相应行的计算单元,同一行下一列的计算单元从同一行上一列的计算单元接收相应组的行向量,在行向量进入计算单元后,所述计算单元分别计算所述行向量与存储的x个列向量的向量乘法,得到x个部分和,
所述计算单元控制器,进一步用于控制同一列下一行的计算单元从同一列上一行的计算单元接收所述同一列上一行的计算单元计算的x个部分和,以根据所述第二数据矩阵的非0数据元素索引,计算所述第一数据矩阵的行向量中相应数据元素与所述第二数据矩阵的列向量中非0数据元素的运算,从而实现计算所述第一数据矩阵和所述第二数据矩阵的矩阵运算,
其中,m、n和x是非零的自然数,x与n的乘积是所述第二数据矩阵的每一组列向量的总数。
可选地,所述第二数据矩阵中每一组每一列列向量的稀疏度相等。
可选地,所述第二数据矩阵中每一组每一列列向量的稀疏度是多个预设稀疏度中的一个,所述预设稀疏度等于所述第二数据矩阵中每一组每一列列向量中非0数据元素的个数与所述列向量中全部数据元素的个数的比值。
可选地,所述计算单元包括:
第一寄存器,用于存储从同一行上一列的计算单元接收的所述第一数据矩阵的相应组的行向量;
第二寄存器,用于存储所述第二数据矩阵相应组的x个列向量中的非0数据元素和非0数据元素的位置索引;
第一选通器,用于根据所述第二数据矩阵相应组的x个列向量中的非0数据元素的位置索引,选通的相应组的行向量中与所述非0数据元素对应的数据元素;
乘法器,用于接收所述第一选通器选通的数据元素和所述第二数据矩阵相应组的x个列向量中的非0数据元素,对接收的所述第一选通器选通的数据元素中列序号和所述第二数据矩阵相应组的x个列向量中行序号相同的数据元素进行相乘;
累加器,用于将乘法器所计算的同一个列向量的多个非0数据元素与所述第一选通器选通的对应数据元素的多个乘积累加,或者将所述多个乘积的累加结果累加到从同一列上一行的计算单元接收的所述x个部分和中对应的一个部分和中;
第三寄存器,用于存储对应累加器输出的所述x个部分和中对应的一个部分和;
第二选通器,用于选通所述x个部分和中的一个部分和、乘法器的计算结果和累加器的计算结果中的一个,使得累加器对第二选通器选通的数据进行累加。
可选地,所述计算单元控制器进一步用于控制计算单元从同一列上一行的计算单元接收所述第二数据矩阵相应组的x个列向量中的非0数据元素和非0数据元素的位置索引。
可选地,所述计算矩阵中的计算单元通过第一输入线从同一行上一列的计算单元接收数据,通过第二输入线从同一列上一行的计算单元接收数据。
第二方面,本公开实施例提供一种加速单元核,包括根据上述任一个所述的处理单元。
第三方面,本公开实施例提供一种加速单元,包括:
根据上述的加速单元核;
向所述加速单元核分配张量计算任务的命令处理器。
第四方面,本公开实施例提供一种物联网装置,包括:
根据上述的加速单元;
调度单元,用于向所述加速单元分配张量计算任务。
第五方面,本公开实施例提供一种片上系统,包括根据上述任一个所述的处理单元。
第六方面,本公开实施例提供一种张量运算方法,包括:
接收每行的计算单元存储第二数据矩阵相应组的列向量的个数x,m行n列的多个计算单元组成计算矩阵,所述计算矩阵用于计算第一数据矩阵与所述第二数据矩阵的矩阵运算,所述第一数据矩阵的每一行数据元素按列分为m组行向量,所述第二数据矩阵的每一列数据元素按行分为m组列向量;
控制每行的计算单元存储所述第二数据矩阵相应组的x个列向量,控制所述第一数据矩阵的每一组行向量分别进入相应行的计算单元,其中,下一组行向量比上一组行向量滞后一个时钟周期开始进入相应行的计算单元,同一行下一列的计算单元从同一行上一列的计算单元接收相应组的行向量,在行向量进入计算单元后,所述计算单元分别计算所述行向量与存储的x个列向量的向量乘法,得到x个部分和,
控制同一列下一行的计算单元从同一列上一行的计算单元接收所述同一列上一行的计算单元计算的x个部分和,以根据所述第二数据矩阵的非0数据元素索引,计算所述第一数据矩阵的行向量中相应数据元素与所述第二数据矩阵的列向量中非0数据元素的运算,从而实现计算所述第一数据矩阵和所述第二数据矩阵的矩阵运算,
其中,m、n和x是非零的自然数,x与n的乘积是所述第二数据矩阵的每一组列向量的总数。
在本公开实施例中,计算单元控制器控制每行的计算单元存储稀疏数据矩阵相应组的x个列向量,控制输入数据矩阵的每一组行向量分别进入相应行的计算单元,下一组行向量比上一组行向量滞后一个时钟周期开始进入相应行的计算单元,同一行下一列的计算单元从同一行上一列的计算单元接收相应组的行向量,在行向量进入计算单元后,所述计算单元分别计算所述行向量与存储的x个列向量的向量乘法,得到x个部分和,还控制同一列下一行的计算单元从同一列上一行的计算单元接收所述同一列上一行的计算单元计算的x个部分和,这样,计算单元在一个时钟周期中分别执行输入数据矩阵的相应组的行向量与计算单元中所存储的稀疏数据矩阵的一个或多个列向量的向量乘法,得到一个或多个部分和,将计算的一个或多个部分和与从同一列上一行的计算单元计算的相应的部分和相加。在一个时钟周期,计算单元所能计算的向量乘法的最大向量维度固定,计算单元执行输入数据矩阵的相应组的行向量与稀疏数据矩阵的列向量的向量乘法的过程中仅对稀疏数据矩阵的列向量中的非0数据元素执行运算,通过控制在每个计算单元中所存储的稀疏数据矩阵的列向量的个数来控制计算单元在一个时钟周期中执行输入数据矩阵的相应组的行向量与稀疏数据矩阵的列向量的向量乘法的个数,这样,对于不同稀疏度的多个稀疏数据矩阵,计算矩阵能够对多个不同稀疏度的稀疏张量进行高效计算,也即是计算矩阵的器件结构与多个不同稀疏度的稀疏张量匹配,提高了计算矩阵的器件结构与不同稀疏度的稀疏张量的普适性,提高了处理单元计算张量运算的计算能效。
具体实施方式
以下基于实施例对本公开进行描述,但是本公开并不仅仅限于这些实施例。在下文对本公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本公开。为了避免混淆本公开的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
在本文中使用以下术语。
深度学习模型:深度学习是机器学习(ML,Machine Learning)领域中一个新的研究方向,它被引入机器学习使其更接近于最初的目标——人工智能(AI)。深度学习学习样本数据的内在规律和表示层次,这些学习过程中获得的信息对诸如文字,图像和声音等数据的解释有很大的帮助。它的最终目标是让机器能够像人一样具有分析学习能力,能够识别文字、图像和声音等数据。深度学习采用的模型即深度学习模型。深度学习模型根据所依赖的模型框架(framework)不同,其格式也不同,可以分为不同类型的格式,如tensorflow、pytorch、mxnet等。
计算装置:具有计算或处理能力的设备,它可以体现为终端的形式,如物联网设备、移动终端、桌上电脑、膝上电脑等,也可以体现为服务器或服务器组成集群。在本公开应用的物联网的环境下,计算装置是物联网中的物联网终端。
调度单元:在计算装置中进行传统处理(非用于图像处理和各种深度学习模型等复杂运算的处理)之外,还承担着对加速单元的调度职能的单元。其向加速单元分配加速单元需要承担的任务,例如张量计算任务。调度单元可以采用中央处理器(CPU)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)等多种形式。
加速单元:在计算装置中针对传统处理单元在一些专门用途的领域(例如,处理图像、处理深度学习模型的各种运算,等等)效率不高的情况,为了提高在这些专门用途领域中的数据处理速度而设计的处理单元。加速单元也称为人工智能(AI)处理单元,包括中央处理器(CPU)、图形处理器(GPU)、通用图形处理器(GPGPU)、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、以及专用智能加速硬件(例如,神经网络处理器NPU、张量处理器TPU)。
处理单元:位于加速单元内(例如可以是加速单元核的张量引擎),具有深度学习模型中的卷积、矩阵乘法等相关操作的处理能力的设备,它可以体现为片上系统,可以插入计算装置或从计算装置中更换。
稀疏张量:由若干坐标系改变时满足一定坐标转化关系的有序数组成的集合为张量。通俗地讲,它是基于向量和矩阵的推广。将标量视为0阶张量,将向量视为1阶张量,将矩阵视为2阶张量,但是,当横竖两个空间的维度都不足以表示输入的量时,3阶以上张量就产生了。在张量中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该张量为稀疏张量。稀疏张量可以由非0元素的位置索引、位置索引所指位置处的元素值和张量维度确定。张量中0元素与全部元素的数量比值为张量的稀疏度。
张量运算:张量可以表示任意维度空间的输入的量。深度学习模型的特点就是能够接收任意维度空间的输入量。无论多少维度的输入量,可以表示为输入张量,该张量输入深度学习模型的第一个层的节点。第一个层的节点具有同样维度空间的权重张量。由于输入张量的维度空间与权重张量的维度空间相同,就可以在同一维度空间内进行输入张量与权重张量的运算,例如点乘、卷积等,产生的输出仍然是相同维度空间的输出。前一个层的节点的输出张量输入到后一个层的节点作为输入,与后一个层的节点的权重张量在同一维度空间再进行张量运算,例如点乘、卷积等,如此不断进行,直到得到最后一层的节点的输出张量,作为整个深度学习模型的输出张量。
本公开的应用环境
本公开实施例提出了一种张量运算方案。整个张量运算方案相对较为通用,可以用于执行各种深度学习模型的各种硬件设备,例如,用于数据中心、用于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装置可以具有多个应用场景,不同的应用场景采用的深度学习模型的参数(如各节点的权重张量)通常不同,例如,自动柜员机220在识别人脸和货物时采用的深度学习模型的参数(如各节点的权重张量)不同,交通控制组206在识别车流量和控制红绿灯时采用的深度学习模型的参数(如各节点的权重张量)不同。随着深度学习模型的各节点的权重张量的变化,稀疏化权重张量后得到的稀疏张量的稀疏度发生变化,而处理单元的器件结构固定,处理单元仅能对与其匹配的一个稀疏度的稀疏张量进行高效计算,而对于其他稀疏度的稀疏张量,在计算时存在处于空闲等待状态的计算单元,降低了处理器的计算能效,需要采用本公开实施例的处理单元。
调度单元和加速单元
图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分配要执行的张量计算任务的待执行指令序列。
如图2所示,存储器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。计算矩阵620由呈m行n列排列的m×n个计算单元630构成,m和n是非零的自然数。计算矩阵620用于计算输入数据矩阵与执行稀疏化操作后的权重数据矩阵(即权重数据矩阵的稀疏数据矩阵)的矩阵运算。其中,输入数据矩阵的每一行数据元素按列分为m组行向量,稀疏数据矩阵的每一列数据元素按行分为m组列向量。
在一些实施例中,深度学习模型训练合格后,将训练好的深度学习模型中各节点的权重数据矩阵稀疏化之后才将稀疏数据矩阵存储在存储器410,以便于加速单元430在实际的深度学习模型运算时,将稀疏数据矩阵从存储器410相应的位置取出,放在片上内存560中。在一些实施例中,在权重数据矩阵的稀疏化过程中,将权重数据矩阵的每一列数据元素按行分为m组列向量,将每一组每一列列向量中一定数量的数值接近0的数据元素稀疏化为0,使得每组每列列向量所包括的数据元素个数相等,每组每列列向量中非0数据元素的个数相等,也即是,稀疏数据矩阵中每一组每一列列向量的稀疏度相等。在一些实施例中,在计算矩阵620计算输入数据矩阵和稀疏数据矩阵的矩阵乘法过程中,计算单元630中存储稀疏数据矩阵的列向量。稀疏数据矩阵中每一组每一列列向量中非0数据元素的个数和计算单元630中存储的稀疏数据矩阵的列向量的个数的乘积等于计算单元630所能计算的向量乘法的最大向量维度。一般来说,计算单元630所能计算的向量乘法的最大向量维度由计算单元630的器件结构(例如,计算单元630中设置的乘法器的个数)决定。这样,可以预先设定多个预设稀疏度。而预设稀疏度等于稀疏数据矩阵中每一组每一列列向量中非0数据元素的个数与稀疏数据矩阵中每一组每一列列向量中全部数据元素的个数的比值。那么,可以通过先计算计算单元630中存储的稀疏数据矩阵的列向量的个数和稀疏数据矩阵中每一组每一列列向量中全部数据元素的个数的乘积,然后将计算单元630所能计算的向量乘法的最大向量维度与上述计算的乘积值的商值作为预设稀疏度。这样,在一些实施例中,在权重数据矩阵的稀疏化过程中,比较权重数据矩阵的稀疏度与多个预设稀疏度,按照预定规则从所述多个预设稀疏度中选择一个预设稀疏度来稀疏化权重数据矩阵得到稀疏数据矩阵,使得稀疏数据矩阵每一组每一个列向量的稀疏度相同且为预设稀疏度。在一个示例中,预设稀疏度是与权重数据矩阵的稀疏度最接近的一个预设稀疏度,能够确保将权重数据矩阵的每一组每一列列向量中最少数量的数据元素稀疏化为0,计算矩阵620计算输入数据矩阵和稀疏数据矩阵的矩阵运算,从而降低处理单元计算输入数据矩阵和权重数据矩阵的运算精度损失。
在一些实施例中,计算单元控制器610控制每行的计算单元630存储稀疏数据矩阵相应组的x个列向量,其中,x是非零的自然数,x与计算矩阵620的列数n的乘积是稀疏数据矩阵的每一组列向量的总数,也即是在每行的计算单元630存储稀疏数据矩阵相应组的x个列向量的情况下,计算矩阵620所能支持的稀疏数据矩阵的每一组列向量的最大维度。计算单元控制器610还控制输入数据矩阵的每一组行向量分别进入相应行的计算单元630,其中,下一组行向量比上一组行向量滞后一个时钟周期开始进入相应行的计算单元630,同一行下一列的计算单元630从同一行上一列的计算单元630接收相应组的行向量,在行向量进入计算单元630后,计算单元630分别计算行向量与存储的x个列向量的向量乘法,得到x个部分和。计算单元控制器610进一步控制同一列下一行的计算单元630从同一列上一行的计算单元630接收所述同一列上一行的计算单元630计算的x个部分和,以根据稀疏数据矩阵的非0数据元素索引,计算输入数据矩阵的行向量中相应数据元素与稀疏数据矩阵的列向量中非0数据元素的运算,从而实现计算输入数据矩阵和稀疏数据矩阵的矩阵运算。在一些实施例中,计算单元630存储稀疏数据矩阵相应组的x个列向量中非0数据元素和非0数据元素的位置索引,减少了一个时钟周期需要传输给计算矩阵620的数据量,降低了计算矩阵620的数据传输带宽。在一些实施例中,在计算单元630存储稀疏数据矩阵相应组的x个列向量的过程中,计算单元控制器610进一步用于控制计算单元630从同一列上一行的计算单元630接收稀疏数据矩阵相应组的x个列向量中的非0数据元素和非0数据元素的位置索引,也即是计算单元630中存储的稀疏数据矩阵的x个列向量来自于同一列上一行的计算单元630,这也减少了一个时钟周期需要传输给计算矩阵620的数据量,降低了计算矩阵620的数据传输带宽。
在一些实施例中,输入数据矩阵为A,稀疏数据矩阵为B,输入数据矩阵A和稀疏数据矩阵B的积矩阵为C,输入数据矩阵A、稀疏数据矩阵B和积矩阵C是N×N的矩阵,N是非零的自然数。输入数据矩阵A、稀疏数据矩阵B分别表示如下:
输入数据矩阵A的每一行数据元素可以按列分为m组行向量,每行每组行向量包括N/m个数据元素。稀疏数据矩阵B的每一列数据元素可以按行分为m组列向量,每组每列列向量包括N/m个数据元素。这样,经过分组后,输入数据矩阵A为N行m组的矩阵,稀疏数据矩阵B为m组N列的矩阵,输入数据矩阵A和稀疏数据矩阵B还可以分别表示为如下:
其中,输入数据矩阵A的第i行第k组行向量为Aik,稀疏数据矩阵B的第k组第j列列向量为Bkj,i≤N,j≤N,k≤m,m≤N,输入数据矩阵A的行向量Aik和稀疏数据矩阵B的列向量Bkj可以表示为如下:
Aik={aiN(k-1)/m+1 aiN(k-1)/m+2 … aiN×k/m} (5)
从上述公式(3)至(6)可以看出,输入数据矩阵A和稀疏数据矩阵B相乘得到的积矩阵C表示为如下:
则C11=A11B11+A12B21+A13B31+…+A1mBm1 (8)
C12=A11B12+A12B22+A13B32+…+A1mBm2 (9)
以此类推,
C1N=A11B1N+A12B2N+A13B3N+…+A1mBmN (10)
以此类推,
CN1=AN1B11+AN2B21+AN3B31+…+ANmBm1 (11)
CN2=AN1B12+AN2B22+AN3B32+…+ANmBm2 (12)
以此类推,
CNN=AN1B1N+AN2B2N+AN3B3N+…+ANmBmN (13)
从上述公式(7)至(13)可以看出,求输入数据矩阵A和稀疏数据矩阵B的积的过程实际上是输入数据矩阵A的行向量Aik分别与稀疏数据矩阵B的列向量Bkj碰撞并相乘得到部分和AikBkj,以及将m个部分和累加的过程。
那么,从上述公式(5)和(6)可以看出,部分和AikBkj可以表示为如下:
从上述公式(5)至(14)可以看出,求部分和AikBkj的过程实际上是输入数据矩阵A的第i行第k组行向量的N/m个数据元素分别与稀疏数据矩阵B的第k组第j列列向量的N/m个数据元素碰撞并相乘,以及将N/m个乘积累加的过程。
应当理解的是,由于在计算矩阵620计算输入数据矩阵A和稀疏数据矩阵B的积矩阵C前,将权重数据矩阵稀疏化为稀疏数据矩阵B。稀疏数据矩阵B中有多个0数据元素,计算单元630在求部分和AikBkj的过程中仅需要将输入数据矩阵A的第i行第k组行向量的数据元素与稀疏数据矩阵B的第k组第j列列向量中对应非0数据元素碰撞并相乘,以及将乘积累加。由于输入数据矩阵A的第i行第k组行向量的数据元素与权重数据矩阵的第k组第j列列向量中数值接近0的数据元素的乘积对于部分和AikBkj的数值影响较小。这样,在处理单元计算输入数据矩阵和权重数据矩阵的矩阵运算时,利用计算矩阵620计算的输入数据矩阵和稀疏数据矩阵的积矩阵来代替输入数据矩阵和权重数据矩阵的积矩阵,在确保处理单元的计算精度的情况下,提高了计算矩阵620的计算能效。计算单元630中需要设置少于N/m个乘法器就可以计算部分和AikBkj,减少了计算矩阵620的器件面积。
图5是根据本公开一个实施例的计算矩阵620的内部结构图。
在一些实施例中,如图5所示,计算矩阵620由呈m行n列排列的m×n个计算单元630构成,m和n是非零的自然数。计算矩阵620中的计算单元630通过第一输入线641从同一行上一列的计算单元630接收数据,通过第二输入线642从同一列上一行的计算单元630接收数据。
在一些实施例中,计算矩阵620用于计算输入数据矩阵A和稀疏数据矩阵B的矩阵乘法。计算单元630所能计算的向量乘法的最大向量维度为M,稀疏数据矩阵B中每一组每列列向量中非0数据元素的个数为M/x,这样,计算矩阵620的计算单元630中存储稀疏数据矩阵B相应组的列向量的个数为x,这样,计算矩阵620的每一行n列计算单元630中存储稀疏数据矩阵B相应组的列向量的个数为n×x,计算矩阵620的m行n列计算单元630中存储稀疏数据矩阵B的m×(n×x)个列向量,也即是计算矩阵620所能计算的稀疏数据矩阵B的列数N=n×x。
在一些情况下,如图5所示,在第1个时钟周期,让稀疏数据矩阵B的第m组第1列至第x列列向量Bm1至Bmx进入计算矩阵620的第1行第1列的计算单元T11,让稀疏数据矩阵B的第m组第x+1列至第2x列列向量Bmx+1至Bm2x进入计算矩阵620的第1行第2列的计算单元T12,以此类推,让稀疏数据矩阵B的第m组第N-x+1列至第N列列向量BmN-x+1至BmN进入计算矩阵620的第1行第n列的计算单元T1n。在第2个时钟周期,让稀疏数据矩阵B的第m组第1列至第x列列向量Bm1至Bmx从计算矩阵620的第1行第1列的计算单元T11向下进入第2行第1列的计算单元T21,稀疏数据矩阵B的第m组第x+1列至第2x列列向量Bmx+1至Bm2x从计算矩阵620的第1行第2列的计算单元T12向下进入计算矩阵620的第2行第2列的计算单元T22,以此类推,稀疏数据矩阵B的第m组第N-x+1列至第N列列向量BmN-x+1至BmN从计算矩阵620的第1行第n列的计算单元T1n向下进入计算矩阵620的第2行第n列的计算单元T2n,同时,让稀疏数据矩阵B的第m-1组第1列至第x列列向量Bm-11至Bm-1x进入计算矩阵620的第1行第1列的计算单元T11,让稀疏数据矩阵B的第m-1组第x+1列至第2x列列向量Bm-1x+1至Bm-12x进入计算矩阵620的第1行第2列的计算单元T12,以此类推,让稀疏数据矩阵B的第m-1组第N-x+1列至第N列列向量Bm-1N-x+1至Bm-1N进入计算矩阵620的第1行第n列的计算单元T1n。以此类推,在第m个时钟周期,让稀疏数据矩阵B的第m组第1列至第x列列向量Bm1至Bmx从计算矩阵620的第m-1行第1列的计算单元Tm-11向下进入第m行第1列的计算单元Tm1,稀疏数据矩阵B的第m组第x+1列至第2x列列向量Bmx+1至Bm2x从计算矩阵620的第m-1行第2列的计算单元Tm-12向下进入计算矩阵620的第m行第2列的计算单元Tm2,以此类推,稀疏数据矩阵B的第m组第N-x+1列至第N列列向量BmN-x+1至BmN从计算矩阵620的第m-1行第n列的计算单元Tm-1n向下进入计算矩阵620的第m行第n列的计算单元Tmn;让稀疏数据矩阵B的第m-1组第1列至第x列列向量Bm-11至Bm-1x从计算矩阵620的第m-2行第1列的计算单元Tm-21向下进入第m-1行第1列的计算单元Tm-11,稀疏数据矩阵B的第m-1组第x+1列至第2x列列向量Bm-1x+1至Bm-12x从计算矩阵620的第m-2行第2列的计算单元Tm-22向下进入计算矩阵620的第m-1行第2列的计算单元Tm-12,以此类推,稀疏数据矩阵B的第m-1组第N-x+1列至第N列列向量Bm-1N-x+1至Bm-1N从计算矩阵620的第m-2行第n列的计算单元Tm-2n向下进入计算矩阵620的第m-1行第n列的计算单元Tm-1n;以此类推,让稀疏数据矩阵B的第2组第1列至第x列列向量B21至B2x从计算矩阵620的第1行第1列的计算单元T11向下进入第2行第1列的计算单元T21,稀疏数据矩阵B的第2组第x+1列至第2x列列向量B2x+1至B22x从计算矩阵620的第1行第2列的计算单元T12向下进入计算矩阵620的第2行第2列的计算单元T22,以此类推,稀疏数据矩阵B的第2组第N-x+1列至第N列列向量B2N-x+1至B2N从计算矩阵620的第1行第n列的计算单元T1n向下进入计算矩阵620的第2行n列的计算单元T2n,同时,让稀疏数据矩阵B的第1组第1列至第x列列向量B11至B1x进入计算矩阵620的第1行第1列的计算单元T11,让稀疏数据矩阵B的第1组第x+1列至第2x列列向量B1x+1至B12x进入计算矩阵620的第1行第2列的计算单元T12,以此类推,让稀疏数据矩阵B的第1组第N-x+1列至第N列列向量B1N-x+1至B1N进入计算矩阵620的第1行第n列的计算单元T1n。也就是说,在前m个时钟周期,对于第k个时钟周期,计算单元控制器610让稀疏数据矩阵B的第m+1-k组第1列至第N列列向量Bm+1-k1至Bm+1-kN中的非0数据元素以及非0数据元素的位置索引分别进入计算矩阵620对应的第1行第1列至第n列的计算单元T11至T1n,进入计算矩阵620的稀疏数据矩阵B的列向量中的非0数据元素以及非0数据元素的位置索引在计算矩阵620中脉动,由同一列上一行的计算单元630向下进入同一列下一行的计算单元630。最终,经过m个时钟周期,稀疏数据矩阵B的m×N个列向量中的非0数据元素以及非0数据元素的位置索引均存储在对应的计算单元630。
接着,如图5所示,计算矩阵620中计算单元630通过第一输入线641从同一行上一列的计算单元630接收输入数据矩阵A的相应组的行向量,通过第二输入线642从同一列上一行的计算单元630接收其计算的部分和。
在一些情况下,在第1个时钟周期,让输入数据矩阵A的第1行第1组行向量A11进入计算矩阵620的第1行第1列的计算单元T11。这样,在第1个时钟周期,在计算矩阵620的第1行第1列的计算单元T11就得到部分和A11B11至A11B1x。在第2个时钟周期,让输入数据矩阵A的第1行第1组行向量A11从计算矩阵620的第1行第1列的计算单元T11向右进入第1行第2列的计算单元T12,让计算单元T11计算的部分和A11B11至A11B1x向下进入计算矩阵620的第2行第1列的计算单元T21,让输入数据矩阵A的第2行第1组行向量A21进入计算矩阵620的第1行第1列的计算单元T11,让输入数据矩阵A的第1行第2组行向量A12进入计算矩阵620的第2行第1列的计算单元T21。这样,在第2个时钟周期,在计算单元T11,A21和B11至B1x相遇,得到部分和A21B11至A21B1x;在计算单元T12,A11和B1x+1至B12x相遇,得到A11B1x+1至A11B12x;在计算单元T21,A12和B21至B2x相遇,得到部分和A12B21至A12B2x;在计算单元T21,部分和A11B11至A11B1x与部分和A12B21至A12B2x相遇,得到部分和A11B11+A12B21至部分和A11B1x+A12B2x。以此类推,这样下来,在第m个时钟周期,让输入数据矩阵A的第m行第1组行向量Am1进入计算矩阵620的第1行第1列的计算单元T11,让输入数据矩阵A的第m-1行至第1行第1组行向量Am-11至A11在计算矩阵620的第1行计算单元T11至T1n中向右脉动,即从第1行前一列的计算单元630向右进入后一列的计算单元630;让输入数据矩阵A的第m-1行第2组行向量Am-12进入计算矩阵620的第2行第1列的计算单元T21,让输入数据矩阵A的第m-2行至第1行第2组行向量Am-22至A12在计算矩阵620的第2行计算单元T21至T2n中向右脉动,即从第2行前一列的计算单元630向右进入后一列的计算单元630;以此类推,让输入数据矩阵A的第1行第m组行向量A1m进入计算矩阵620的第m行第1列的计算单元Tm1;让部分和A11B11+A12B21+…+A1m-1Bm-11至A11B1x+A12B2x+…+A1m-1Bm-1x从计算矩阵620的第m-1行第1列的计算单元Tm-11向下进入计算矩阵620的第m行第1列的计算单元Tm1,让部分和A21B11+A22B21+…+A2m-2Bm-21至A21B1x+A22B2x+…+A2m-2Bm-2x从计算矩阵620的第m-2行第1列的计算单元Tm-21向下进入计算矩阵620的第m-1行第1列的计算单元Tm-11,以此类推,让部分和Am-11B11至Am-11B1x从计算矩阵620的第1行第1列的计算单元T11向下进入计算矩阵620的第2行第1列的计算单元T21;同样,计算矩阵620的第2列计算单元T12至Tm2中计算单元630所计算的部分和在第2列计算单元T12至Tm2中向下脉动,即计算单元630所计算的部分和在第2列计算单元T12至Tm2中从同一列上一行计算单元630向下进入同一列下一行计算单元630;以此类推,计算矩阵620的第n列计算单元T1n至Tmn中计算单元630所计算的部分和在第n列计算单元T1n至Tmn中向下脉动,即计算单元630所计算的部分和在第n列计算单元T1n至Tmn中从同一列上一行计算单元630向下进入同一列下一行计算单元630;这样,在第m个时钟周期,在计算矩阵620的第m行第1列的计算单元Tm1得到部分和A11B11+A12B21+…+A1mBm1至A11B1x+A12B2x+…+A1mBmx,即在第m个时钟周期,在计算矩阵620的第m行第1列的计算单元Tm1得到积矩阵C的元素C11至C1x;这样下来,以此类推,在第m+N+n-2(即,m+n×x+n-2)个时钟周期,让输入数据矩阵A的第N行第m组行向量ANm从计算矩阵620的第m行第n-1列的计算单元Tmn-1进入计算矩阵620的第m行第n列的计算单元Tmn,让部分和AN1B1(n-1)x+1+AN2 B2(n-1)x+1+…+ANm-1 Bm-1(n-1)x+1至AN1B1N+AN2B2N+…+ANm-1Bm-1N从计算矩阵620的第m-1行第n列的计算单元Tm-1n进入计算矩阵620的第m行第n列的计算单元Tmn;这样,在第m+n×x+n-2个时钟周期,在计算矩阵620的第m行第n列的计算单元Tmn得到部分和AN1B1(n-1)x+1+AN2B2(n-1)x+1+…+ANmBm(n-1)x+1至AN1B1N+AN2B2N+…+ANmBmN,即在第m+n×x+n-2个时钟周期,在计算矩阵620的第m行第n列的计算单元Tmn得到积矩阵C的元素CN(n-1)x+1至CNN。也就是说,在前m+n×x-1个时钟周期,对于第p个时钟周期,计算单元控制器610让输入数据矩阵A中行序号和组序号之和为p+1的行向量进入计算矩阵620的相应行的计算单元630,让同一列上一行的计算单元630计算的部分和向下进入同一列下一行的计算单元630,由计算单元630对接收到的来自输入数据矩阵A的相应组的行向量中列号和计算单元630中存储的稀疏数据矩阵B的列向量中行号相同的数据元素进行相乘,并将相乘的结果累加到相应的同一列上一行的计算单元630计算的部分和中;在第m+n×x到第m+n×x+n-2个时钟周期,输入数据矩阵A不再有新的行向量输入计算矩阵620,行向量在计算矩阵620中脉动,计算单元630计算的部分和也在计算矩阵620中脉动,由计算单元630对接收到来自输入数据矩阵A的相应组的行向量中列号和计算单元630中存储的稀疏数据矩阵B的列向量中行号相同的数据元素进行相乘,并将相乘的结果累加到相应的同一列上一行的计算单元630计算的部分和中。最终,经过m+n×x+n-2个时钟周期,由计算矩阵620得到输入数据矩阵A和稀疏数据矩阵B的积矩阵C中的各数据元素。
需要说明的是,一般来说,在图5所示的处理单元中计算矩阵620是固定的,而输入数据矩阵A和稀疏数据矩阵B是不固定的。对于输入数据矩阵A和稀疏数据矩阵B的行数和列数不适用于计算矩阵620的情况,通常先对输入数据矩阵A和稀疏数据矩阵B进行矩阵拆分,拆分后再利用计算矩阵620对输入数据矩阵A和稀疏数据矩阵B进行张量运算。
计算单元
图6是根据本公开一个实施例的计算单元630的内部结构图。
在一些实施例中,计算矩阵620中计算单元630的内部结构相同。计算单元630用于计算输入数据矩阵A的第i行第k组行向量Aik与存储在计算单元630的稀疏数据矩阵B的第k组x个列向量Bkj的向量乘法。如图7所示,计算单元630包括:第一寄存器651、第二寄存器652、第三寄存器653、第三寄存器654、乘法器655、乘法器656、累加器657、累加器658、第一选通器661、第一选通器662、第二选通器663和第二选通器664。
在一些实施例中,第一寄存器651用于存储从同一行上一列的计算单元630接收的输入数据矩阵A的第i行第k组行向量Aik。第二寄存器652用于存储稀疏数据矩阵B的第k组x个列向量Bkj中的非0数据元素w0和w1,以及非0数据元素w0的位置索引ID0,非0数据元素w1的位置索引ID1。第一选通器661用于根据稀疏数据矩阵B的第k组x个列向量Bkj中的非0数据元素w0的位置索引ID0选通输入数据矩阵A的第i行第k组行向量Aik中与非0数据元素w0对应的数据元素。第一选通器662用于根据稀疏数据矩阵B的第k组x个列向量Bkj中的非0数据元素w1的位置索引ID1选通输入数据矩阵A的第i行第k组行向量Aik中与非0数据元素w1对应的数据元素。乘法器655用于接收第一选通器661选通的数据元素和稀疏数据矩阵B第k组的x个列向量Bkj中的非0数据元素w0,对接收的第一选通器661选通的数据元素中列序号和稀疏数据矩阵B第k组的x个列向量中行序号相同的数据元素进行相乘。乘法器656用于接收第一选通器662选通的数据元素和稀疏数据矩阵B第k组的x个列向量Bkj中的非0数据元素w1,对接收的第一选通器662选通的数据元素中列序号和稀疏数据矩阵B第k组的x个列向量中行序号相同的数据元素进行相乘。累加器657和累加器658用于将乘法器(包括乘法器655和乘法器656)所计算的同一个列向量的多个非0数据元素与第一选通器(包括第一选通器661和第一选通器662)选通的对应数据元素的多个乘积累加,或者将所述多个乘积的累加结果累加到从同一列上一行的计算单元630接收的所述x个部分和中对应的一个部分和中。第三寄存器653和第三寄存器654用于存储对应累加器(包括累加器657和累加器658)输出的所述x个部分和中对应的一个部分和。第二选通器(包括第二选通器663和第二选通器664)用于选通所述x个部分和中的一个部分和、乘法器的计算结果和累加器的计算结果中的一个,使得累加器对第二选通器选通的数据进行累加。
在一些实施例中,如图6所示,计算单元640包括乘法器655和乘法器656(图6中示出了2个乘法器,但本领域技术人员应当理解,计算单元630中也可以包含其它数目的乘法器),计算单元630所能计算的向量乘法的最大向量维度为2。在一个示例中,计算矩阵620的计算单元630中存储稀疏数据矩阵B相应组的列向量的个数为x,这样,稀疏数据矩阵B中每一组每一列列向量中非0数据元素的个数为2/x,x可以是1或2。
在一些情况下,计算矩阵620的计算单元630中存储稀疏数据矩阵B相应组的列向量的个数x为1,这样,计算矩阵620的每一行n列计算单元630中存储稀疏数据矩阵B相应组的列向量的个数为n×1,计算矩阵620的m行n列计算单元630中存储稀疏数据矩阵B的m×(n×1)个列向量,也即是计算矩阵620所能计算的稀疏数据矩阵B的列数N=n×1。在一个时钟周期,第一寄存器651中存储从同一行上一列的计算单元630传递的输入数据矩阵A的第i行第k组行向量Aik。第二寄存器652中存储稀疏数据矩阵B的第k组第j列的列向量Bkj中的非0数据元素w0和w1,以及非0数据元素w0的位置索引ID0,非0数据元素w1的位置索引ID1。第一选通器661根据第二寄存器652中存储的非0数据元素w0的位置索引ID0,选通输入数据矩阵A的第i行第k组行向量Aik中与非0数据元素w0对应的数据元素。第一选通器662根据第二寄存器652中存储的非0数据元素w1的位置索引ID1,选通输入数据矩阵A的第i行第k组行向量Aik中与非0数据元素w1对应的数据元素。乘法器655将行向量Aik中相应数据元素和列向量Bkj的非0数据元素w0进行相乘。乘法器656将行向量Aik中相应数据元素和列向量Bkj的非0数据元素w1进行相乘。第二选通器663根据计算单元控制器610提供的稀疏数据矩阵B的稀疏度M,选通乘法器656的计算结果。累加器657将乘法器656的计算结果累加到乘法器655的计算结果。第二选通器664根据计算单元控制器610提供的稀疏数据矩阵B的稀疏度M,选通累加器657的计算结果。累加器658将累加器657的计算结果累加到从同一列上一行的计算单元630传递的对应的部分和2中,第三寄存器654存储更新后的部分和2。在下一个时钟周期,计算单元630将第一寄存器651中存储的数据传递至同一行下一列的计算单元630,将第三寄存器654中存储的数据传递至同一列下一行的计算单元630。
在一些情况下,计算矩阵620的计算单元630中存储稀疏数据矩阵B相应组的列向量的个数x为2,这样,计算矩阵620的每一行n列计算单元630中存储稀疏数据矩阵B相应组的列向量的个数为n×2,计算矩阵620的m行n列计算单元630中存储稀疏数据矩阵B的m×(n×2)个列向量,也即是计算矩阵620所能计算的稀疏数据矩阵B的列数N=n×2。在一个时钟周期,第一寄存器651中存储从同一行上一列的计算单元630传递的输入数据矩阵A的第i行第k组行向量Aik。第二寄存器652中存储稀疏数据矩阵B的第k组第j列列向量Bkj中的非0数据元素w0和非0数据元素w0的位置索引ID0,还存储稀疏数据矩阵B的第k组第j+1列列向量Bkj+1中的非0数据元素w1和非0数据元素w1的位置索引ID1。第一选通器661根据第二寄存器652中存储的非0数据元素w0的位置索引ID0,选通输入数据矩阵A的第i行第k组行向量Aik中与非0数据元素w0对应的数据元素。第一选通器662根据第二寄存器652中存储的非0数据元素w1的位置索引ID1,选通输入矩阵A的第i行第k组行向量Aik中与非0数据元素w1对应的数据元素。乘法器655将行向量Aik中相应数据元素和列向量Bkj的非0数据元素w0进行相乘。乘法器656将行向量Aik中相应数据元素和列向量Bkj+1的非0数据元素w1进行相乘。第二选通器663根据计算单元控制器610提供的稀疏数据矩阵B的稀疏度M,选通从同一列上一行的计算单元630传递的部分和1。累加器657将乘法器655的计算结果累加到部分和1,第三寄存器653存储更新后的部分和1。第二选通器664根据计算单元控制器610提供的稀疏数据矩阵B的稀疏度M,选通乘法器656的计算结果。累加器658将乘法器656的计算结果累加到从同一列上一行的计算单元630传递的部分和2中,第三寄存器654存储更新后的部分和2。在下一个时钟周期,计算单元630将第一寄存器651中存储的数据传递至同一行下一列的计算单元630,将第三寄存器653和第三寄存器654中存储的数据传递至同一列下一行的计算单元630。
本公开实施例的张量运算方法
图7是本公开实施例提供的张量运算方法的流程图。如图上所示,该方法包括以下步骤。
在步骤S701中,接收每行的计算单元存储第二数据矩阵相应组的列向量的个数x,m行n列的多个计算单元组成计算矩阵,所述计算矩阵用于计算第一数据矩阵与所述第二数据矩阵的矩阵运算,所述第一数据矩阵的每一行数据元素按列分为m组行向量,所述第二数据矩阵的每一列数据元素按行分为m组列向量。
在步骤S702中,控制每行的计算单元存储所述第二数据矩阵相应组的x个列向量,控制所述第一数据矩阵的每一组行向量分别进入相应行的计算单元,其中,下一组行向量比上一组行向量滞后一个时钟周期开始进入相应行的计算单元,同一行下一列的计算单元从同一行上一列的计算单元接收相应组的行向量,在行向量进入计算单元后,所述计算单元分别计算所述行向量与存储的x个列向量的向量乘法,得到x个部分和,
控制同一列下一行的计算单元从同一列上一行的计算单元接收所述同一列上一行的计算单元计算的x个部分和,以根据所述第二数据矩阵的非0数据元素索引,计算所述第一数据矩阵的行向量中相应数据元素与所述第二数据矩阵的列向量中非0数据元素的运算,从而实现计算所述第一数据矩阵和所述第二数据矩阵的矩阵运算,
其中,m、n和x是非零的自然数,x和n的乘积是所述第二数据矩阵的每一组列向量的总数。
本公开实施例的方法在一个计算装置中执行,该计算装置包括处理单元,处理单元包括计算单元控制器,该方法利用计算单元控制器根据稀疏数据矩阵的稀疏度控制计算矩阵中每个计算单元存储的稀疏数据矩阵的列向量的个数,从而控制计算单元在一个时钟周期中执行输入数据矩阵的相应组的行向量与稀疏数据矩阵的列向量的向量乘法的个数,以支持张量运算。由此得到的处理单元能够对多个不同稀疏度的稀疏张量进行高效计算,从而针对计算装置达到更好的计算能效。
本公开实施例的商业价值
本公开实施例提供的处理单元根据处理单元所计算的稀疏数据矩阵的稀疏度灵活控制每个计算单元中所存储的稀疏数据矩阵的列向量的个数,也即是控制计算单元在一个时钟周期中执行输入数据矩阵的相应组的行向量与稀疏数据矩阵的列向量的向量乘法的个数。在此场景下,通过提高计算矩阵的器件结构与不同稀疏度的稀疏张量的普适性,确保计算矩阵能够对多个不同稀疏度的稀疏张量进行高效计算,不存在处于空转等待状态的计算单元,提高了处理单元的计算能效,降低了处理单元的功耗从而降低计算装置的功耗,进而降低整个物联网的运行成本。通过提高处理单元的计算性能从而提高计算装置的计算能力,进而提高整个物联网的计算能力。本公开实施例使计算装置的计算能耗降低,计算能力提高,因而具备了良好的商业价值和经济价值。
本领域的技术人员能够理解,本公开可以实现为系统、方法和计算机程序产品。因此,本公开可以具体实现为以下形式,即完全的硬件、完全的软件(包括固件、驻留软件、微代码),还可以实现为软件和硬件结合的形式。此外,在一些实施例中,本公开还可以实现为一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如但不限于为电、磁、光、电磁、红外线或半导体的系统、装置或器件,或其他任意以上的组合。计算机可读存储介质的更具体的例子包括:具体一个或多个导线的电连接,便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器、磁存储器或者上述任意合适的组合。在本文中,计算机可读的存储介质可以是任意包含或存储程序的有形介质,该程序可以被处理单元、装置或者器件使用,或者与其结合使用。
计算机可读信号介质可以包括在基带中或者作为截波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或者其他任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质之外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令系统、装置或器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,以及上述任意合适的组合。
可以以一种或者多种程序设计语言或者组合来编写用于执行本公开实施例的计算机程序代码。所述程序设计语言包括面向对象的程序设计语言,例如JAVA、C++,还可以包括常规的过程式程序设计语言,例如C。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网(LAn)或广域网(WAn)连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
以上所述仅为本公开的优选实施例,并不用于限制本公开,对于本领域技术人员而言,本公开可以有各种改动和变化。凡在本公开的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。