CN113836481B - 矩阵计算电路、方法、电子设备及计算机可读存储介质 - Google Patents
矩阵计算电路、方法、电子设备及计算机可读存储介质Info
- Publication number
- CN113836481B CN113836481B CN202010586808.8A CN202010586808A CN113836481B CN 113836481 B CN113836481 B CN 113836481B CN 202010586808 A CN202010586808 A CN 202010586808A CN 113836481 B CN113836481 B CN 113836481B
- Authority
- CN
- China
- Prior art keywords
- data
- matrix
- address
- circuit
- reading
- 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.)
- Active
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 313
- 238000000034 method Methods 0.000 title description 19
- 238000004364 calculation method Methods 0.000 claims abstract description 83
- 230000006835 compression Effects 0.000 claims description 8
- 238000007906 compression Methods 0.000 claims description 8
- 230000004044 response Effects 0.000 claims description 4
- 239000002699 waste material Substances 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 13
- 230000008569 process Effects 0.000 description 8
- 238000013528 artificial neural network Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000004590 computer program Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
Abstract
本公开实施例公开了一种矩阵计算电路、方法、电子设备及计算机可读存储介质。其中该矩阵计算电路包括:指令解码电路,用于解码矩阵计算指令得到第一矩阵的首地址和第二矩阵的首地址;第一数据读取电路,用于根据所述第一矩阵的首地址生成第一数据的读取地址;根据所述第一数据的读取地址读取所述第一数据以及所述第一数据在所述第一矩阵中的位置;第二数据读取电路,用于根据所述第二矩阵的首地址和所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址;根据所述第二数据的读取地址读取所述第二数据;计算电路,用于根据所述第一数据和所述第二数据计算得到第三数据。上述矩阵计算电路通过第一数据在第一矩阵中的位置生成第二数据的读取地址,减少了第二数据的读取数量以及计算量,解决了现有技术中浪费带宽的技术问题。
Description
技术领域
本公开涉及处理器领域,尤其涉及一种矩阵计算电路、方法、电子设备及计算机可读存储介质。
背景技术
随着科学技术的发展,人类社会正在快速进入智能时代。智能时代的重要特点,就是人们获得数据的种类越来越多,获得数据的量越来越大,而对处理数据的速度要求越来越高。芯片是任务分配的基石,它从根本上决定了人们处理数据的能力。从应用领域来看,芯片主要有两条路线:一条是通用芯片路线,例如CPU等,它们能提供极大的灵活性,但是在处理特定领域算法时有效算力比较低;另一条是专用芯片路线,例如TPU等,它们在某些特定领域,能发挥较高的有效算力,但是面对灵活多变的比较通用的领域,它们处理能力比较差甚至无法处理。由于智能时代的数据种类繁多且数量巨大,所以要求芯片既具有极高的灵活性,能处理不同领域且日新月异的算法,又具有极强的处理能力,能快速处理极大的且急剧增长的数据量。
在神经网络计算中,卷积计算占了总运算量的大部分,而卷积计算可以转换成矩阵乘计算,因此要提高神经网络任务中的吞吐量、降低延时、提升芯片的有效算力,重点在于提升矩阵乘计算的速度。
图1a为在神经网络中矩阵乘计算的示意图。如图1a所示,M1为数据矩阵,M2为参数矩阵,M为输出矩阵。M1中的一行数据和M2中的一列参数做乘加计算得到M中的一个数据。很多神经网络中的数据矩阵和/或参数矩阵是稀疏矩阵,即矩阵的数据中存在大量的0。为了提升矩阵的计算速度,可以针对稀疏矩阵乘计算进行优化。
现有的优化方式一般是采取跳零计算的方法,即先将所有的数据和参数都取出来,在进行计算前判断数据是否为0。如果数据为0,则丢弃与之对应的参数,跳过此数据不计算;如果数据非0,则进行计算。在这种方法中,数据矩阵和参数矩阵的所有元素都会存储下来,如图1b所示。其中,P_D是数据矩阵存储的起始地址,P_W是参数矩阵存储的起始地址;数据矩阵和参数矩阵中的元素都会全部存储。在进行运算时,它们也会被一一读出来,将数据进行比较,再选择非0数据和其对应的参数进行运算,最后得到结果。
上述方案存在以下缺点:1、浪费存储。因为为0的数据也被存储下来了,但是在计算的时候并没有用到这些为0的数据;2、浪费带宽,因为数据为0时也会被读出来,占用带宽,但是其在计算的时候并没有用到。
发明内容
提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。
为了解决现有技术中的上述技术问题,本公开实施例提出如下技术方案:
第一方面,本公开实施例提供一种矩阵计算电路,其特征在于,包括:
指令解码电路,用于解码矩阵计算指令得到第一矩阵的首地址和第二矩阵的首地址;
第一数据读取电路,用于根据所述第一矩阵的首地址生成第一数据的读取地址;根据所述第一数据的读取地址读取所述第一数据以及所述第一数据在所述第一矩阵中的位置;
第二数据读取电路,用于根据所述第二矩阵的首地址和所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址;根据所述第二数据的读取地址读取所述第二数据;
计算电路,用于根据所述第一数据和所述第二数据计算得到第三数据。
进一步的,所述指令解码电路还用于解码矩阵指令得到第三矩阵的首地址,所述矩阵计算电路还包括:
存储地址生成电路,用于根据所述第三矩阵的首地址以及所述第一数据在所述第一矩阵中的位置生成第三数据的存储地址。
进一步的,所述矩阵计算电路还包括:
第一存储器、第二存储器以及第三存储器;
其中所述第一存储器用于存储所述第一数据和所述第一数据在所述第一矩阵中的位置;根据所述第一数据的读取地址释放所述读取地址对应的所述第一数据至所述计算电路,释放所述第一数据在所述第一矩阵中的位置至所述第一数据读取电路、所述第二数据读取电路以及所述存储地址生成电路;
所述第二存储器用于存储第二数据:根据所述第二数据的读取地址释放所述第二数据至所述计算电路;
所述第三存储器用于根据所述第三数据的存储地址,保存所述第三数据至所述存储地址所指示的存储位置上。
进一步的,所述第一数据在第一矩阵中的位置包括第一数据在所述第一矩阵中的横坐标和纵坐标,其中,
所述第二数据读取电路用于:
根据所述第二矩阵的首地址以及所述第一数据在所述第一矩阵中的纵坐标生成所述第二数据的读取地址。
进一步的,所述第一数据读取电路还用于:
根据所述第一数据在所述第一矩阵中的位置确定所述第一矩阵中的一行第一数据是否计算完毕;
响应于所述计算完毕,发送输出指令至所述计算电路。
进一步的,所述第一数据读取电路还用于:
比较本次读取的第一数据在第一矩阵中的横坐标与上次读取的第一数据在第一矩阵中的横坐标是否相同;
如果相同,则所述第一矩阵中的一行第一数据还未计算完毕;或者,
如果不同,则所述第一矩阵中的一行第一数据计算完毕。
进一步的,所述第一矩阵和/或第二矩阵为压缩矩阵,其中所述压缩矩阵的第一列为原矩阵中的非0数据,第二列为所述非0数据在所述原矩阵中的横轴坐标,第三列为所述非0数据在所述原矩阵中的纵坐标。
第二方面,本公开实施例提供一种矩阵计算方法,其特征在于,包括:
解码矩阵计算指令得到第一矩阵的首地址、第二矩阵的首地址;
根据所述第一矩阵的首地址生成第一数据的读取地址;
根据所述第一数据的读取地址读取所述第一数据以及第一数据在所述第一矩阵中的位置;
根据所述第二矩阵的首地址和所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址;
根据所述第二数据的读取地址读取所述第二数据;
根据所述第一数据和所述第二数据计算得到第三数据。
进一步的,所述方法还包括:
解码矩阵计算指令得到第三矩阵的首地址;
根据所述第三矩阵的首地址以及第一数据在第一矩阵中的位置生成第三数据的存储地址;
将所述第三数据存入所述存储地址。
第三方面,本公开实施例提供一种芯片,包括第一方面中任一项所述的矩阵计算电路。
第四方面,本公开实施例提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现前述第一方面中的任一所述的矩阵计算方法。
第五方面,本公开实施例提供一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述第一方面中的任一所述的矩阵计算方法。
第六方面,本公开实施例提供一种计算机程序产品,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述第一方面中的任一所述的矩阵计算方法。
第七方面,本公开实施例提供一种计算装置,其特征在于,包括一个或多个所述第三方面所述的芯片。
本发明实施例公开了一种矩阵计算电路、方法、电子设备及计算机可读存储介质。其中该矩阵计算电路包括:指令解码电路,用于解码矩阵计算指令得到第一矩阵的首地址和第二矩阵的首地址;第一数据读取电路,用于根据所述第一矩阵的首地址生成第一数据的读取地址;根据所述第一数据的读取地址读取所述第一数据以及所述第一数据在所述第一矩阵中的位置;第二数据读取电路,用于根据所述第二矩阵的首地址和所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址;根据所述第二数据的读取地址读取所述第二数据;计算电路,用于根据所述第一数据和所述第二数据计算得到第三数据。上述矩阵计算电路通过第一数据在第一矩阵中的位置生成第二数据的读取地址,减少了第二数据的读取数量以及计算量,解决了现有技术中浪费带宽的技术问题。
上述说明仅是本公开技术方案的概述,为了能更清楚了解本公开的技术手段,而可依照说明书的内容予以实施,并且为让本公开的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。
图1a和1b为本公开现有技术的示意图;
图2为本公开实施例提供的矩阵计算电路的结构示意图;
图3为本公开实施例提供的第一矩阵的存储格式示意图;
图4为本公开实施例提供第二矩阵的存储格式示意图;
图5为本公开实施例提供的矩阵计算方法的流程图;
图6a为本公开的一个应用实例的示意图;
图6b为本公开的应用实例中的第一矩阵的存储格式示意图;
图6c为本公开的应用实例中的第二矩阵的存储格式示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
图2为本公开实施例提供的矩阵计算电路的示意图。本实施例提供的矩阵计算电路200包括:
指令解码电路ID(Instruction Decoder)201,所述指令解码电路用于解码矩阵计算指令得到第一矩阵的首地址P_D和第二矩阵的首地址P_W;
第一数据读取电路(ADI_G)202,用于根据所述第一矩阵的首地址P_D生成第一数据的读取地址A_Din;根据所述第一数据的读取地址A_Din读取所述第一数据以及所述第一数据在所述第一矩阵中的位置;
第二数据读取电路(AW_G)203,用于根据所述第二矩阵的首地址P_W和所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址A_Win;根据所述第二数据的读取地址A_Win读取所述第二数据;
计算电路(EX)204,用于根据所述第一数据和所述第二数据计算得到第三数据。
示例性的,所述矩阵计算指令为矩阵乘计算指令,该指令中包括指令类型以及参与指令乘计算的第一矩阵的存储首地址和第二矩阵的存储首地址;在一个实施例中,所述第一矩阵为神经网络卷积计算中的数据矩阵,所述第二矩阵为神经网络卷积计算中的参数矩阵;可选的,所述第一矩阵和/或所述第二矩阵为压缩矩阵,其中所述压缩矩阵为将原矩阵进行压缩,只保存原矩阵中的非0元素及其坐标的矩阵,其中所述压缩矩阵的第一列为原矩阵中的非0数据,第二列为所述非0数据在所述原矩阵中的横轴坐标,第三列为所述非0数据在所述原矩阵中的纵坐标。可选的,所述矩阵计算指令中还包括第一矩阵的原矩阵和第二矩阵的原矩阵的行数和列数,以及第三矩阵的首地址,其中所述第三矩阵为第一矩阵和第二矩阵的计算结果矩阵。可以理解的,所述矩阵计算指令中的矩阵的存储首地址以及矩阵的行数和列数等参数可以以寄存器地址的形式表示,所示指令解码电路从对应的寄存器地址中获取对应的数据。
图3为生成压缩矩阵的一个示例。如图3所示,其中的aij表示第一矩阵中的元素,其中i∈(1,M),j∈(1,K),按照aij的下标生成第一矩阵中的元素在第一矩阵中的位置,第一矩阵中的位置用坐标表示,如a11在第一矩阵中的坐标为(1,1),且a11的存储地址为第一矩阵的首地址P_D,则第一矩阵按照图3中所示的格式存储,即第一矩阵的第一列为原矩阵中的非0元素,第二列为元素在原矩阵中的X轴坐标,第二列为元素在原矩阵中的Y轴坐标。
在本公开实施例中,所述第一数据读取电路202接收所述指令解码电路201解码出的第一矩阵的首地址P_D,并根据该首地址P_D生成第一数据的读取地址A_Din;根据所述第一数据的读取地址A_Din读取所述第一数据Data以及所述第一数据在第一矩阵中的位置X和Y,如读取如图3所示的a11以及a11在第一矩阵的原矩阵中的坐标X=1,Y=1。所述第一数据读取电路202每次取数之后更新首地址,即每次取出之后都将本次取出的第一数据的地址作为下一次取数的首地址,如每个第一数据及其在第一矩阵的原矩阵中的位置一共占用N个存储位置,则每次更新P_Dn=P_Dn-1+N,由此可以在计算中不断取出新的第一数据。
在本公开实施例中,所述第二数据读取电路203根据第二矩阵的首地址P_W以及所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址A_Win;根据所述第二数据的读取地址A_Win读取所述第二数据Win。可选的,所述第二数据读取电路203根据所述第二矩阵的首地址P_W以及所述第一数据在第一矩阵中的纵坐标Y生成所述第二数据的读取地址A_Win。在一个实施例中,所述第二矩阵中的元素全是非0元素,此时第二矩阵不压缩,直接以原矩阵的形式存储;其存储的逻辑形式如图4所示,P_W为第二矩阵的第一个元素b11的存储地址,其逻辑上是按照矩阵的形式连续存储的,而物理上可以连续存储或者不连续存储,在本公开中不做限定。通过首地址P_W和第一数据在第一矩阵中的纵坐标Y,可以生成第二矩阵的行地址,将第二矩阵中对应所述第一数据纵坐标所表示的一行第二数据读取出来,以便后续进行矩阵计算。当取出的第一数据变化时,所述第一数据的在第一矩阵中的位置也会发生变化,则读出的第二数据会随所述第一数据的位置不断变化,从而改变每次计算中所使用的第二数据。
在本公开中,所述计算电路204根据所述第一数据和所述第二数据进行计算得到第三数据。可选的,所述计算为乘加计算,在每个时钟周期中,所述计算电路将当前时钟周期内得到的第一数据和第二数据做乘法计算得到乘法计算结果,并将所述乘法计算结果与之前时钟周期中得到的第三数据相加得到当前时钟周期中的第三数据。以此类推,所述计算电路204不断的执行乘累加计算直至计算完毕。
可选的,所述计算电路204中包括多个计算单元,示例性的,所述计算单元的个数与所述第二矩阵的列数相同。即当所述第二数据读取电路203根据第一数据在第一矩阵中的纵坐标Y一次读取出一行第二数据时,所述一行第二数据和所述第一数据可以并行进行计算。
可选的,所述第一数据读取电路202还用于根据所述第一数据在第一矩阵中的位置确定第一矩阵中的一行第一数据是否计算完毕;响应于计算完毕,发送输出指令至所述计算电路204。如图2所示,所述第一数据读取电路202还接收读取到的第一数据在第一矩阵中的位置,可选的所述位置为所述第一数据第一矩阵中的横坐标,由于第一矩阵中的一行第一数据的X坐标是相同的,因此使用第一数据的横坐标可以判断第一矩阵中的一行第一数据是否计算完毕。具体的,判断步骤如下:
比较本次读取的第一数据在第一矩阵中的横坐标与上次读取的第一数据在第一矩阵中的横坐标是否相同;
如果相同,则所述第一矩阵中的一行第一数据还未计算完毕;或者,
如果不同,则所述第一矩阵中的一行第一数据计算完毕。
即比较本次读取的第一数据的X坐标与上次读取的第一数据的X坐标是否相同,如果相同,则表示一行数据还没有读取完;如果不同,则表示已经换行读到下一行的第一数据,表示一行第一数据都已经参与过计算。响应于计算完毕,即本次读取的第一数据的X坐标与上次读取的第一数据的X坐标不同,则发送输出指令C_RE至所述计算电路204,以使所述计算电路204输出计算出的一行第三数据。
可选的,所述指令解码电路201还用于解码矩阵指令得到第三矩阵的首地址,所述矩阵计算电路200还包括:存储地址生成电路(ADO_G)205,用于根据所述第三矩阵的首地址以及所述第一数据在所述第一矩阵中的位置生成第三数据的存储地址。其中,所述第三矩阵为所述第一矩阵和所述第二矩阵计算之后得到的矩阵。示例性的,该实施例中的所述第一数据在所述第一矩阵中的位置为所述第一数据在所述第一矩阵中的横坐标,当所述矩阵计算为矩阵乘法计算,所述计算电路每计算完第一矩阵中的一行第一数据可以得到第三矩阵中的一行第三数据,即所述计算电路204中的每个计算单元输出第三矩阵中一行第三数据中的其中一个。由此,根据所述第一数据的X坐标可以确定输出的一行第三数据为第三矩阵中的哪一行。如图2所示,存储地址生成电路205接收第一数据的X坐标,以确定输出的是第三矩阵的哪一行,之后根据第三矩阵的首地址P_O以及所述X坐标确定出输出一行第三数据的存储地址A_Dout。可选的,当接收到所述第一数据读取电路202所发出的输出指令C_RE之后,所述存储地址生成电路205将所述第三数据的存储地址A_Dout发送出去。
可选的,如图2所示,所述矩阵计算电路200还包括:第一存储器206、第二存储器207以及第三存储器208;其中,
所述第一存储器206用于存储所述第一数据和所述第一数据在所述第一矩阵中的位置;根据所述第一数据的读取地址释放所述读取地址对应的所述第一数据至所述计算电路204,释放所述第一数据在第一矩阵中的位置至所述第一数据读取电路202、所述第二数据读取电路203以及所述存储地址生成电路205;
所述第二存储器207用于存储第二数据:根据所述第二数据的读取地址释放所述第二数据至所述计算电路204;
所述第三存储器208用于根据所述第三数据的存储地址A_Dout,保存所述第三数据Dout至所述存储地址A_Dout所指示的存储位置上。
在本公开实施例中,第一矩阵即数据矩阵存放在第一存储器206中,第二矩阵即参数矩阵存放在第二存储器207中,第三矩阵即输出矩阵存放在第三存储器208中。第一存储器206、第二存储器207和第三存储器208可以独立并行访问,使得取数据、取参数、计算和存结果能够并行进行,从而提高矩阵计算的效率。
可以理解的,所述第一数据读取电路与所述第一存储器206之间使用地址总线和数据总线连接,其中地址总线用于传输地址,第一数据读取电路通过地址电路使得第一存储电路206将数据释放到数据总线上,与数据总线连接的电路能够得到其需要的第一数据或第一数据在所述第一矩阵中的位置;同样第二数据读取电路203与第二存储器207之间的连接关系类似,不再赘述。第三存储器208的地址总线与所述存储地址生成电路205连接,用于传输所述存储地址生成电路205生成的第三数据的存储地址,所述第三存储器208的数据总线与所述计算电路204连接,用于传输所述计算电路204计算得到的第三数据。
可以理解的,上述具体实施例中,是以第一数据在第一矩阵中的位置来确定读取的第二数据的,在实际实现的过程中,也可以将所述第一矩阵和第二矩阵倒置,即根据第二数据在第二矩阵中的位置来确定读取的第一数据。即对于矩阵乘法计算来说,每次读取一个第二数据需要从第一矩阵中读取与之对应的一列第一数据,之后按列读取第二数据,这样每次计算完一列第二数据所得到的是一列第三数据,输出第三数据的时根据第二数据的Y坐标可以确定是第三矩阵的哪一列,并根据第三数据的首地址以及第二数据的Y坐标存储一列第三数据。其他情况可以按照上述过程和具体的矩阵计算过程得到,在此不再赘述。
图5为本公开实施例提供的矩阵计算方法的流程图。如图5所示,该方法包括如下步骤:
步骤S501,解码矩阵计算指令得到第一矩阵的首地址、第二矩阵的首地址;
步骤S502,根据所述第一矩阵的首地址生成第一数据的读取地址;
步骤S503,根据所述第一数据的读取地址读取所述第一数据以及第一数据在所述第一矩阵中的位置;
步骤S504,根据所述第二矩阵的首地址和所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址;
步骤S505,根据所述第二数据的读取地址读取所述第二数据;
步骤S506,根据所述第一数据和所述第二数据计算得到第三数据。
进一步的,所述矩阵计算方法,还包括:
解码矩阵计算指令得到第三矩阵的首地址;
根据所述第三矩阵的首地址以及第一数据在第一矩阵中的位置生成第三数据的存储地址;
将所述第三数据存入所述存储地址。
上述矩阵计算方法中的步骤为上述矩阵计算电路所执行的步骤,其具体执行过程可以参见上述对所述矩阵计算电路的描述,在此不再赘述。
在上文中,虽然按照上述的顺序描述了上述方法实施例中的各个步骤,本领域技术人员应清楚,本公开实施例中的步骤并不必然按照上述顺序执行,其也可以倒序、并行、交叉等其他顺序执行,而且,在上述步骤的基础上,本领域技术人员也可以再加入其他步骤,这些明显变型或等同替换的方式也应包含在本公开的保护范围之内,在此不再赘述。
本公开实施例还提供一种芯片,所述芯片包括上述实施例中任一矩阵计算电路。
以下以一个实际的应用场景来描述本公开实施例中的矩阵计算电路的工作过程。图6a为该实例应用场景中使用第一矩阵M1乘以第二矩阵M2得到第三矩阵M3。其中M1为一个4*4的稀疏数据矩阵,其中包括大量的0元素,而M2为一个4*2参数矩阵,两者相乘得到一个4*2的输出矩阵。
在该实例中,所有矩阵元素均为FP32,即32bit表示一个数据,则每个矩阵中每个元素需要32/8=4B的存储空间。参数矩阵包括2列元素,因此计算电路204可以设置为由两个乘加器组成的向量处理单元。
如图6b所示为所述稀疏数据矩阵M1被压缩之后得到的矩阵,即存储在第一存储器中的第一矩阵,其包括原始矩阵M1中的非0数据以及非0数据在原始矩阵M1中的位置坐标X和Y,由于矩阵的宽和高一般都比较小,因此在本示例中可以使用2B的存储空间来存储第一数据在第一矩阵中的位置,X占1B,Y占1B。由此,矩阵M1中的每个元素需要4B+1B+1B=6B来存储。第一数据读取电路202每次读取完一个第一数据之后,地址P_D自动加6B以得到下一第一数据的地址,即:P_D=P_D+6。
如图6c所示为第二矩阵即参数矩阵的逻辑存储格式,其按行顺序存储。每一行的第二数据的大小为2*4=8B,每一行的存储首地址由第二矩阵的初始地址P_W和行数N_r决定,即:P_W+8*N_r。每次按照P_W读取一行第二数据,之后更新P_W的值。
在进行计算时,通过指令解码电路201解码出M1的首地址P_D以及M2的首地址P_W,之后第一数据读取电路202根据首地址P_D从第一存储器206中读出第一个第一数据1,以及其坐标(1,1),即表示第一矩阵中的坐标为(1,1)的第一数据的值为1;第二数据读取电路203得到本次读取的第一数据的Y坐标1,则根据第二矩阵的首地址P_W和该Y坐标1,从第二存储器207中读取与Y坐标1对应的第一行第二数据1和2,即Y坐标决定第二数据读取电路203所生成的第二数据的读取地址,所述第二数据的读取地址为:P_W+8*(Y-1),注意此示例中为了便于理解,将坐标从1开始标注,实际上也可以从0开始标注,即第一个元素的坐标为(0,0),此时需要调整第二数据的读取地址为:P_W+8*Y;总之通过第一数据的Y坐标,第二数据读取电路203可以确定一行第二数据的首地址,之后读取出一行第二数据。
在取出第一数据以及一行第二数据之后,第一数据被传送至所述两个乘加器的一个输入端口,两个第二数据分别被传送至两个乘加的另一个输入端口,乘加器根据所接收到的第一数据和第二数据进行乘加计算,将第一数据和第二数据进行乘法计算并与上次乘加计算得到结果做累加得到第三数据。所述计算电路204按照上述方式进行乘加计算直至所述第一数据的X坐标发生变化,表示一行第一数据计算完毕。
以该实例为例,当读取到第二个第一数据2,确定其X坐标为2,不同于第一个第一数据1的X坐标1,则表示第一矩阵M1中的一行第一数据已经计算完毕,此时第一数据读取电路生成输出指令C_RE并发送至所述计算电路204以及存储地址生成电路205,在收到所述输出指令之后,所述存储地址生成电路205生成输出矩阵M3的一行第三数据的存储地址,所述计算电路204将一行第三数据释放至数据总线上,第三存储器208根据第三数据的存储地址存储所述数据总线上的一行第三数据。迭代执行上述步骤,直至所有的第一数据均被读取出来为止,得到第三存储器中的输出矩阵,即第一矩阵和第二矩阵的矩阵计算结果。
本公开实施例提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现实施例中的任一所述的矩阵计算方法。
本公开实施例还提供一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述实施例中的任一所述的矩阵计算方法。
本公开实施例还提供一种计算机程序产品,其中,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述实施例中的任一所述的矩阵计算方法。
本公开实施例还提供一种计算装置,其特征在于,包括所述实施例中的任一所述的芯片。
本公开附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、任务段、或代码的一部分,该模块、任务段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上系统(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
Claims (8)
1.一种矩阵计算电路,其特征在于,包括:
指令解码电路,用于解码矩阵计算指令得到第一矩阵的首地址和第二矩阵的首地址,所述第一矩阵为压缩矩阵,所述第二矩阵为非压缩矩阵;
第一数据读取电路,与所述指令解码电路的输出端相连,用于根据所述第一矩阵的首地址生成第一数据的读取地址;根据所述第一数据的读取地址读取所述第一数据以及所述第一数据在所述第一矩阵中的位置;
第二数据读取电路,与所述指令解码电路的输出端相连,用于根据所述第二矩阵的首地址和所述第一数据在所述第一矩阵中的位置生成第二数据的读取地址;根据所述第二数据的读取地址读取所述第二数据;
第一存储器,与所述第一数据读取电路连接,用于存储所述第一数据和所述第一数据在所述第一矩阵中的位置;根据所述第一数据的读取地址释放所述读取地址对应的所述第一数据,释放所述第一数据在所述第一矩阵中的位置;
第二存储器,与所述第二数据读取电路连接,用于存储所述第二数据,根据所述第二数据的读取地址释放所述第二数据;
计算电路,通过所述第一存储器与所述第一数据读取电路连接,通过所述第二存储器与所述第二数据读取电路连接,所述计算电路用于根据所述第一数据和所述第二数据计算得到第三数据;
其中,所述计算电路包括多个计算单元,所述计算单元的个数与所述第二矩阵的列数相同,以通过所述多个计算单元实现并行计算。
2.如权利要求1所述的矩阵计算电路,其特征在于,所述指令解码电路还用于解码矩阵指令得到第三矩阵的首地址,所述矩阵计算电路还包括:
存储地址生成电路,与所述指令解码电路的输出端相连,用于根据所述第三矩阵的首地址以及所述第一数据在所述第一矩阵中的位置生成第三数据的存储地址。
3.如权利要求2所述的矩阵计算电路,其特征在于,所述矩阵计算电路还包括:
第三存储器,
所述第三存储器用于根据所述第三数据的存储地址,保存所述第三数据至所述存储地址所指示的存储位置上。
4.如权利要求1-3中任一项所述的矩阵计算电路,其特征在于,所述第一数据在第一矩阵中的位置包括第一数据在所述第一矩阵中的横坐标和纵坐标,其中,
所述第二数据读取电路用于:
根据所述第二矩阵的首地址以及所述第一数据在所述第一矩阵中的纵坐标生成所述第二数据的读取地址。
5.如权利要求1-3中任一项所述的矩阵计算电路,其特征在于,所述第一数据读取电路还用于:
根据所述第一数据在所述第一矩阵中的位置确定所述第一矩阵中的一行第一数据是否计算完毕;
响应于所述计算完毕,发送输出指令至所述计算电路。
6.如权利要求5所述的矩阵计算电路,其特征在于,所述第一数据读取电路还用于:
比较本次读取的第一数据在所述第一矩阵中的横坐标与上次读取的第一数据在所述第一矩阵中的横坐标是否相同;
如果相同,则所述第一矩阵中的一行第一数据还未计算完毕;或者,
如果不同,则所述第一矩阵中的一行第一数据计算完毕。
7.如权利要求1-3任一项所述的矩阵计算电路,其特征在于,所述压缩矩阵的第一列为原矩阵中的非0数据,第二列为所述非0数据在所述原矩阵中的横轴坐标,第三列为所述非0数据在所述原矩阵中的纵坐标。
8.一种芯片,其特征在于,包括如权利要求1-7中任一项所述的矩阵计算电路。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010586808.8A CN113836481B (zh) | 2020-06-24 | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010586808.8A CN113836481B (zh) | 2020-06-24 | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113836481A CN113836481A (zh) | 2021-12-24 |
CN113836481B true CN113836481B (zh) | 2024-07-02 |
Family
ID=
Non-Patent Citations (1)
Title |
---|
矩阵相乘的压缩存储算法;许志文;《华东地质学院学报》;第87-89页 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108133270B (zh) | 卷积神经网络加速方法及装置 | |
CN108205519B (zh) | 矩阵乘加运算装置和方法、处理装置、芯片、电子装置 | |
WO2022037257A1 (zh) | 卷积计算引擎、人工智能芯片以及数据处理方法 | |
CN108845828B (zh) | 一种协处理器、矩阵运算加速方法及系统 | |
CN109284824B (zh) | 一种基于可重构技术的用于加速卷积和池化运算的装置 | |
CN115880132B (zh) | 图形处理器、矩阵乘法任务处理方法、装置及存储介质 | |
CN110825436B (zh) | 应用于人工智能芯片的计算方法和人工智能芯片 | |
CN112286864B (zh) | 加速可重构处理器运行的稀疏化数据处理方法及系统 | |
CN108108190B (zh) | 一种计算方法及相关产品 | |
CN112784973A (zh) | 卷积运算电路、装置以及方法 | |
CN107943756B (zh) | 一种计算方法及相关产品 | |
CN107957977B (zh) | 一种计算方法及相关产品 | |
CN114138231B (zh) | 执行矩阵乘法运算的方法、电路及soc | |
CN114003198B (zh) | 内积处理部件、任意精度计算设备、方法及可读存储介质 | |
CN114443559A (zh) | 可重构算子单元、处理器、计算方法、装置、设备及介质 | |
CN113485750B (zh) | 数据处理方法及数据处理装置 | |
CN108108189B (zh) | 一种计算方法及相关产品 | |
CN116888591A (zh) | 一种矩阵乘法器、矩阵计算方法及相关设备 | |
CN107678781B (zh) | 处理器以及用于在处理器上执行指令的方法 | |
CN113836481B (zh) | 矩阵计算电路、方法、电子设备及计算机可读存储介质 | |
CN109635238B (zh) | 矩阵运算方法、装置、设备及可读介质 | |
CN116842304A (zh) | 一种不规则稀疏矩阵的计算方法及系统 | |
CN113836481A (zh) | 矩阵计算电路、方法、电子设备及计算机可读存储介质 | |
CN113988279A (zh) | 一种支持负值激励的存算阵列输出电流读出方法及系统 | |
CN113961871A (zh) | 矩阵计算电路、方法、电子设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Country or region after: China Address after: Room 201, No. 6 Fengtong Heng Street, Huangpu District, Guangzhou City, Guangdong Province, 510530 Applicant after: Guangzhou Ximu Semiconductor Technology Co.,Ltd. Address before: 100080 202-24, building 6, yard 1, gaolizhang Road, Haidian District, Beijing Applicant before: Beijing SIMM Computing Technology Co.,Ltd. Country or region before: China |
|
GR01 | Patent grant |