CN117932201A - 一种risc-v矩阵运算的芯片和方法 - Google Patents
一种risc-v矩阵运算的芯片和方法 Download PDFInfo
- Publication number
- CN117932201A CN117932201A CN202211261907.4A CN202211261907A CN117932201A CN 117932201 A CN117932201 A CN 117932201A CN 202211261907 A CN202211261907 A CN 202211261907A CN 117932201 A CN117932201 A CN 117932201A
- Authority
- CN
- China
- Prior art keywords
- matrix
- block
- processed
- matrix block
- data
- 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.)
- Pending
Links
- 239000011159 matrix material Substances 0.000 title claims abstract description 616
- 238000000034 method Methods 0.000 title claims abstract description 43
- 239000013598 vector Substances 0.000 claims abstract description 47
- 238000009825 accumulation Methods 0.000 claims description 44
- 238000004590 computer program Methods 0.000 claims description 12
- 230000008569 process Effects 0.000 abstract description 18
- 238000010586 diagram Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 7
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000003672 processing method Methods 0.000 description 3
- 230000003139 buffering effect Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 230000001788 irregular Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000007493 shaping process Methods 0.000 description 1
- 230000003238 somatosensory effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F17/00—Digital computing or data processing equipment or methods, specially adapted for specific functions
- G06F17/10—Complex mathematical operations
- G06F17/16—Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Algebra (AREA)
- Databases & Information Systems (AREA)
- Complex Calculations (AREA)
Abstract
本发明实施例公开了一种RISC‑V矩阵运算的芯片和方法,本发明实施例的芯片和方法通过标量运算单元确定当前待处理的左矩阵块和右矩阵块的配置信息,矩阵运算单元根据左矩阵块和右矩阵的配置信息,获取左矩阵块和右矩阵块,并对所述左矩阵块和右矩阵块进行矩阵运算,获得目标子矩阵,重复上述过程,直至待处理矩阵组处理完成,由此,在RISC‑V矩阵运算的芯片中可直接对矩阵数据进行处理,无需将矩阵数据分解成标量数据或向量数据,提高了矩阵运算效率,降低了运算功耗。
Description
技术领域
本发明涉及计算机技术领域,具体而言,涉及一种RISC-V矩阵运算的芯片和方法。
背景技术
随着智能时代的到来,人们获得的数据的种类和数量越来越多,对处理数据的速度要求越来越高,所以要求芯片既具有高灵活性,能够处理不同领域日新月异的算法,又具有极强的处理能力,能快速处理日益增长的数据量。
越来越多的算法或模型涉及到矩阵运算,矩阵运算已成为衡量计算能力的重要指标。目前所采用的芯片基于开源的RISC-V指令集设计,而当前RISC-V指令集中仅包含标量指令和向量指令。因此,目前芯片只能基于已有的标量指令和向量指令将矩阵运算拆解为多个标量或向量的运算,针对每个运算,其均需要读取指令并译码后执行相应的运算。由此,现有的芯片在矩阵处理过程中,需要占用大量的计算资源,且处理速度很慢,效率低下。
发明内容
有鉴于此,本发明实施例提供了一种RISC-V矩阵运算的芯片和方法,以提高芯片的数据处理效率,降低运算功耗,提高运算资源利用率。
第一方面,提供一种RISC-V矩阵运算的芯片,所述芯片包括:
标量运算单元,被配置为确定当前的配置信息,其中,所述配置信息包括当前待处理的左矩阵块和右矩阵块的地址信息和尺寸信息,所述左矩阵块和所述右矩阵块为待处理矩阵组中的未运算数据块;
矩阵运算单元,被配置为获取所述左矩阵块和右矩阵块,对所述左矩阵块和右矩阵块进行矩阵运算,获取目标子矩阵,直至所述待处理矩阵组处理完成,所述左矩阵块和右矩阵块基于所述配置信息获得。
第二方面,提供一种RISC-V矩阵运算方法,所述方法包括:
通过标量运算单元确定当前的配置信息,其中,所述配置信息包括当前待处理的左矩阵块和右矩阵块的地址信息和尺寸信息,所述左矩阵块和所述右矩阵块为待处理矩阵组中的未运算数据块;
通过矩阵运算单元获取所述左矩阵块和右矩阵块,对所述左矩阵块和右矩阵块进行矩阵运算,获取目标子矩阵,直至所述待处理矩阵组处理完成,所述左矩阵块和右矩阵块基于所述配置信息获得。
第三方面,提供一种电子设备,所述设备包括:
存储器,用于存储一条或多条计算机程序指令;
处理器,所述一条或多条计算机程序指令被所述处理器执行以实现如第二方面中的方法。
第四方面,提供一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现如第二方面中的方法。
附图说明
通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
图1为本发明实施例的RISC-V矩阵运算的芯片的示意图;
图2为本发明实施例的对左源矩阵和右源矩阵划分的示意图;
图3为本发明实施例的矩阵乘运算的示意图;
图4为本发明实施例的实现图片数据到矩阵的转换的示意图;
图5为本发明实施例的累加寄存器进行数据累加的示意图;
图6为本发明实施例的另一种RISC-V矩阵运算的芯片的示意图;
图7为本发明实施例的寄存器结构的示意图;
图8为本发明实施例的数据处理方法的流程图;
图9为本发明实施例的矩阵乘运算的流程图;
图10为本发明实施例的电子设备的示意图。
具体实施方式
以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
同时,应当理解,在以下的描述中,“电路”是指由至少一个元件或子电路通过电气连接或电磁连接构成的导电回路。当称元件或电路“连接到”另一元件或称元件/电路“连接在”两个节点之间时,它可以是直接耦接或连接到另一元件或者可以存在中间元件,元件之间的连接可以是物理上的、逻辑上的、或者其结合。相反,当称元件“直接耦接到”或“直接连接到”另一元件时,意味着两者不存在中间元件。
除非上下文明确要求,否则在说明书的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。
图1为本发明实施例的RISC-V矩阵运算的芯片的示意图,如图1所示,所述芯片1包括标量运算单元101和矩阵运算单元102。标量运算单元101被配置为确定当前的配置信息。其中,所述配置信息包括当前待处理的左矩阵块和右矩阵块的地址信息和尺寸信息,所述左矩阵块和所述右矩阵块为待处理矩阵组中的未运算数据块。
优选的,标量运算单元101在接收到指令,并确定该指令为矩阵运算指令后,可以将待处理矩阵组中的左源矩阵和右源矩阵进行划分,得到多个当前待处理的左矩阵块和右矩阵块,若矩阵运算指令为矩阵乘指令,则左源矩阵的列数和右源矩阵的行数相同。进一步地,将左源矩阵和右源矩阵划分后的对应位置的一组矩阵块确定为一组待处理矩阵块(也即上述左矩阵块和右矩阵块),一个待处理矩阵组中可包含多组待处理矩阵块。
优选的,可根据矩阵运算单元102的运算能力和存储能力中的至少一项,对源矩阵进行划分,以使得矩阵运算单元102能够对当前获取的左矩阵块和右矩阵块进行矩阵运算。并且,由于只有当第一个矩阵的列数和第二个矩阵的行数相同,才能对两个矩阵进行矩阵运算,因此,在进行矩阵乘运算过程中,对源矩阵进行划分时,需要使划分后的一组待处理矩阵块中的左矩阵块的列数和右矩阵块的行数相同。
图2为本发明实施例的对左源矩阵和右源矩阵划分的示意图,如图2所示,假设左源矩阵21的尺寸为2x2,右源矩阵22的尺寸为2x2,矩阵运算单元102的运算能力能够承担1x2矩阵块乘2x1矩阵块,则基于此对左源矩阵21和右源矩阵22进行切块。其中,左源矩阵21被划分为左矩阵块211-212。其中,左矩阵块211和左矩阵块212的尺寸为1x2。右源矩阵22被划分为右矩阵块221-222。其中,右矩阵块221和右矩阵块222的尺寸为2x1。进一步地,为了矩阵运算的准确性,将对应位置的一组矩阵块确定为一组待处理矩阵块,也即,将左矩阵块211和右矩阵块221确定为一组待处理矩阵块,将左矩阵块211和右矩阵块222确定为一组待处理矩阵块,将左矩阵块212和右矩阵块221确定为一组待处理矩阵块,将左矩阵块212和右矩阵块222确定为一组待处理矩阵块。由此,逐一运算完各组待处理矩阵块后,左源矩阵21和右源矩阵22运算完成,将各组运算结果进行对应位置的累加整合即可获取左源矩阵21和右源矩阵22的矩阵运算结果。
标量运算单元101在将待处理矩阵组划分完毕后,分别确定各组待处理矩阵块中的左矩阵块和右矩阵块的地址信息和尺寸信息。地址信息可以包括左矩阵块在对应的源矩阵中的地址以及右矩阵块在对应的源矩阵中的地址,也可以包括左矩阵块和右矩阵块在存储空间内的位置。尺寸信息可以包括左矩阵块和右矩阵块的行数和列数。
矩阵运算单元102被配置为获取当前待处理的左矩阵块和右矩阵块,对所述左矩阵块和右矩阵块进行矩阵运算,获取目标子矩阵,直至所述待处理矩阵组处理完成。其中,所述左矩阵块和右矩阵块基于所述配置信息获得。本实施例主要以矩阵乘运算在RISC-V矩阵运算的芯片中的具体处理过程进行描述,本实施例的RISC-V矩阵运算的芯片也可以处理其他类型的矩阵运算。
图3为本发明实施例的矩阵乘运算的示意图,如图3所示,左源矩阵31的尺寸为mxk,通过软件的方式对左源矩阵31划分之后,得到3x4个左矩阵块,右源矩阵32的尺寸为kxn,通过软件的方式对右源矩阵32划分之后,得到4x3个右矩阵块。其中,需通过标量运算单元101对待运算的左矩阵块的列宽、行宽进行配置,以及对待运算的右矩阵块的列宽进行配置,矩阵乘运算中,待运算的右矩阵块的行宽与待运算的左矩阵块的列宽相同。
矩阵运算单元102获取一组待处理矩阵组中的左矩阵块1与右矩阵块a,左矩阵块1与右矩阵块a相乘过程中,需将左矩阵块1的第一行数据与右矩阵块a的第一列数据分别相乘后得到的乘积再进行累加,然后再将左矩阵块1的第二行数据与右矩阵块a的第二列数据分别相乘后得到的乘积再进行累加,重复上述过程,直到矩阵块1的每一行数据均与右矩阵块a的任意一列数据运算完毕,即可得到一个目标子矩阵。同样对左矩阵块2与右矩阵块b进行运算,得到一个目标子矩阵,将两个目标子矩阵进行相加得到当前的累加结果。然后对左矩阵块3与右矩阵块c进行运算,得到一个目标子矩阵,将该目标子矩阵与当前的累加结果相加并更新当前的累加结果。以及,对左矩阵块4与右矩阵块d进行运算,得到一个目标子矩阵,将该目标子矩阵与当前的累加结果相加并更新当前的累加结果,该当前的累加结果即为图3所示的目标矩阵的输出矩阵块X。
重复上述方法,直至将左源矩阵31的所有行的左矩阵块与右源矩阵32的所有列的对应的右矩阵块运算完毕,即可得到目标矩阵33,目标矩阵包括3x3个输出矩阵块。
在一种可选的实施方式中,本公开实施例中的RISC-V矩阵运算的芯片还可以应用于执行卷积运算。进一步地,RISC-V矩阵运算的芯片还可以包括向量运算单元,被配置为获取图片数据,基于预定的窗口将所述图片数据转化为待处理矩阵。可选的,预定的窗口可以基于卷积运算的卷积核尺寸确定。
具体的,向量运算单元可通过预定的算法将获取到的图片数据转化为待处理矩阵。可选的,可使用im2col算法实现图片数据到矩阵的转换。由此,可将卷积运算转化为矩阵运算,以进一步提高芯片执行卷积运算的效率。例如,本实施例的RISC-V矩阵运算的芯片部署resnet50网络时应用上述矩阵指令,其也可以大大提高resnet50网络的数据处理效率。
图4为本发明实施例的实现图片数据到矩阵的转换的示意图,如图4所示,预定的窗口(即卷积核)的尺寸为2x2,图片数据的尺寸为3x3,预定的窗口以步长为1进行滑动,将预设的窗口对应的数据展开到新矩阵的一行(或一列),从而得到矩阵数据。例如,窗口第一次滑动,得到的一行数据为{1,2,4,5},步长为1,进行滑动得到第二行数据为{2,3,5,6},依次滑动窗口,即可得到如图4所示的矩阵数据41。
在一种可选的实施方式中,本公开实施例中的RISC-V矩阵运算的芯片还可以包括累加寄存器,所述矩阵运算单元102还被配置为将所述目标子矩阵发送至累加寄存器。所述累加寄存器被配置为对各所述目标子矩阵进行累加处理,以获得目标矩阵。
具体的,矩阵运算单元102将每次矩阵处理的处理结果均发送至累加寄存器,累加寄存器将接收到的目标子矩阵与当前累加结果进行累加,直到待处理矩阵组中的数据被处理完毕,累加寄存器中将得出最终的目标矩阵。进一步地,累加寄存器将每组矩阵块的运算结果与之前累加的对应行列运算的矩阵块组的运算计算结果相加,并更新累加寄存器的当前累加结果。
图5为本发明实施例的累加寄存器进行数据累加的示意图,如图5所示,左源矩阵51的尺寸为2x4,其切块后获得的左矩阵块511-514的尺寸为1x2,右源矩阵52的尺寸为4x2,其切块后获得的右矩阵块521-524的尺寸为2x1。其中,左矩阵块511与右矩阵块521组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵531,并将目标子矩阵531发送至累加寄存器。左矩阵块512与右矩阵块522组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵532,并将目标子矩阵532发送至累加寄存器,此时累加寄存器运算目标子矩阵531与目标子矩阵532之和并存储。左矩阵块511与右矩阵块523组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵533,并将目标子矩阵533发送至累加寄存器。左矩阵块512与右矩阵块524组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵534,并将目标子矩阵534发送至累加寄存器,此时累加寄存器计算目标子矩阵533与目标子矩阵534之和并存储。左矩阵块513与右矩阵块521组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵535,并将目标子矩阵535发送至累加寄存器。左矩阵块514与右矩阵块522组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵536,并将目标子矩阵536发送至累加寄存器,此时累加寄存器计算目标子矩阵535与目标子矩阵536之和并存储。左矩阵块513与右矩阵块523组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵537,并将目标子矩阵537发送至累加寄存器。左矩阵块514与右矩阵块523组成一组待处理矩阵块,其经矩阵运算单元进行矩阵乘运算后,获得目标子矩阵538,并将目标子矩阵538发送至累加寄存器,此时累加寄存器计算目标子矩阵537与目标子矩阵538之和并存储。也即,将目标子矩阵531和532的数据进行累加获取目标矩阵54的第一行第一列数据,将目标子矩阵533和534的数据进行累加获取目标矩阵54的第一行第二列数据,将目标子矩阵535和536的数据进行累加获取目标矩阵54的第二行第一列数据,将目标子矩阵537和538的数据进行累加获取目标矩阵54的第二行第二列数据,由此,可以得到左源矩阵和右源矩阵的矩阵乘结果,也即目标矩阵54。
在一种可选的实施方式中,本公开实施例中的RISC-V矩阵运算的芯片还可以包括转置寄存器。转置寄存器被配置为根据所述配置信息从待处理矩阵组分别读取所述当前待处理的左矩阵块和右矩阵块矩阵,运算单元102进一步被配置为从所述转置寄存器获取所述左矩阵块和右矩阵块。可选的,在本实施例中,标量运算单元101、转置寄存器和矩阵运算单元102还可以同步运行。例如,在矩阵运算单元102运算当前待处理的左矩阵块和右矩阵块的同时,标量运算单元101同步获取下一运算周期对应的配置信息,转置寄存器基于该配置信息从待处理矩阵组中分别读取下一运算周期的待处理的左矩阵块和右矩阵块进行缓存,以进一步提高芯片的数据处理效率。在一种可选的实施方式中,本公开实施例中的RISC-V矩阵运算的芯片还可以包括数据缓存单元,被配置为缓存所述待处理矩阵组。
在一种可选的实施方式中,本公开实施例中的RISC-V矩阵运算的芯片还可以包括芯片基于指令集进行数据处理,所述指令集包括矩阵指令、向量指令和标量指令。进一步地,本实施例的标量运算单元101还可以执行指令集中的标量指令,向量运算单元还可以执行指令集中的向量指令。
其中,指令集是指存储在芯片中,对运算进行指导和优化的语言或规范,目前,常用的指令集包括精简指令集计算机(Reduced Instruction Set Computing,RISC)和复杂指令计算机(Complex Instruction Set Computer,CISC)。进一步地,本实施例中的指令集可以为对现有的指令集(RISC-V)进行扩展,使其包含矩阵指令,并基于此设计上述芯片执行扩展后的指令集,使得芯片执行矩阵相关指令时无需将其拆解为多个标量或向量的运算,提高了芯片的数据处理效率。
本发明实施例通过标量运算单元101确定左矩阵块和右矩阵块的配置信息,即地址信息和尺寸信息,矩阵运算单元102基于配置信息,获取左矩阵块和右矩阵块,并对左矩阵块和右矩阵块进行矩阵运算,获取目标子矩阵,直至所述待处理矩阵组处理完成,由此,可对矩阵数据直接进行处理,而无需将矩阵数据转化为标量数据或向量数据后,再进行处理,降低了矩阵运算的复杂度,节省了计算资源和时间,提升了矩阵运算效率。
图6为本发明实施例的另一种RISC-V矩阵运算的芯片的示意图,如图6所示,数据处理6包括第一运算模块61、第一运算模块62以及存储模块。
第一运算模块61包括指令寄存器601、标量运算单元101和加载存储队列602。
指令寄存器601被配置为临时放置从主存储器读出的正在执行的一条指令,指令可以包括矩阵指令、向量指令和标量指令等。以矩阵指令为例对指令进行说明,矩阵指令中可携带有待处理矩阵组的地址,以便查找待处理矩阵组。
进一步的,矩阵指令可以包括:操作码、输出矩阵的类型、矩阵整型、矩阵运算维度、循环次数、待处理矩阵组地址。
其中操作码用于指示矩阵运算指令的主要功能,包括但不限于以下几类指令的功能:配置类指令、内存加载(load)/存储(store)类指令、以及运算类指令。其中配置类指令用于矩阵运算相关的参数配置。load/store类指令用于从内存获取数据,或将数据存回到内存中等功能对应的指令。运算类指令可以包括:矩阵乘,标量乘,向量乘,矩阵与向量乘等指令。运算类指令可以包含完整的数据load和store功能,不依赖于上述的load/store类指令。
输出矩阵的类型可以包括单精度浮点(single float point,SF)、双精度浮点(double float point,DF)、整型等。输入矩阵整型是指:对输入矩阵执行矩阵运算之前或得到矩阵运算结果之后对矩阵进行取反运算和共轭运算等。矩阵运算维度可以为(M,K,N),其含义是对(MxK)的待处理矩阵组矩阵中的左原始矩阵和KxN的右原始矩阵进行矩阵运算,最终得到(MxN)的目标矩阵。循环次数是此次矩阵运算的执行次数。待处理矩阵组地址为输入的待处理矩阵组的读取地址。
可选的,矩阵指令还可以包括矩阵运算范例标识,用于识别矩阵运算范例表中相应的目标范例,目标范例可以用于指示待运算矩阵中矩阵元素的数据存储形式(即寻址形式),便于矩阵运算单元102或矩阵寄存器603获取矩阵数据。例如,4D、3D、或2D的数据存储形式,待运算矩阵的存储和排列可能并不都是规整的矩阵。待运算矩阵可以是连续排列的4D或3D矩阵,也可以是不连续排列的2D矩阵,还可以是三角矩阵或是其它不规律的矩阵。矩阵指令格式中只指示矩阵运算范例标识,可以降低矩阵运算指令的长度和配置开销。
标量运算单元101被配置为获取到来自指令寄存器601的指令,并对指令进行解码,以确定指令类型。若指令类型为矩阵指令,可以获取该矩阵指令对应的待处理矩阵组的信息。若待处理矩阵组中的源矩阵的尺寸大于矩阵预算单元的运算能力,则可以通过软件对待处理矩阵组进行切块,以获取多组待处理矩阵块,并确定各组待处理矩阵块中的左矩阵块和右矩阵块的配置信息。应理解,在本实施例中,标量运算单元101可以在待处理矩阵组切块完成后,确定所有组待处理矩阵块中的左矩阵块和右矩阵块的配置信息,也可以基于矩阵运算进程,逐一确定当前待处理的左矩阵块和右矩阵块的配置信息。
优选的,根据解码结果可确定该指令类型,例如,该指令类型为矩阵指令,则按照待处理矩阵组地址获取待处理矩阵组,该待处理矩阵组包括左源矩阵和右源矩阵。在本实施例中,可以基于预定的切块标准将待处理矩阵组中的源矩阵进行切块,得到多个子矩阵。其中,待处理矩阵组中的左源矩阵切块后得到的子矩阵为左矩阵块,待处理矩阵组中的右源矩阵切块后得到的子矩阵为右矩阵块。进一步地,可以根据待处理矩阵组地址来进一步确定各左矩阵块和右矩阵块的地址信息和尺寸信息。
加载存储队列602连接标量运算单元101和高速缓冲存储器L1,用于为两者提供交换数据缓存,缓存的数据可以包括标量运算单元101确定的配置信息和待处理矩阵组。
第二运算模块62包括矩阵寄存器603、矩阵运算单元102、向量寄存器604、向量运算单元605、向量加载存储队列606以及数据搬运单元607。
矩阵寄存器603被配置为暂存矩阵相关数据,进一步的,矩阵寄存器603可包括转置寄存器tr_tile、数据累加寄存器acc_tile、以及四个非特权寄存器。其中,转置寄存器被配置为加载待处理的左矩阵块和右矩阵块,数据累加寄存器被配置为存储目标子矩阵,四个非特权寄存器分别为被配置为描述矩阵尺寸的左矩阵行宽寄存器tile_m、左矩阵列宽(右矩阵行宽)寄存器tile_k、右矩阵列宽寄存器tile_n以及矩阵数据类型寄存器mtype,矩阵数据类型可表示为CV_<bit_depth>(S|U|F)C<number_of_channels>,其中,<bit_depth>表示位数,S表示符号整型,U表示无符号整型,F表示浮点型、C<number_of_channels>表示通道数量,例如:CV_8UC1是指一个8位无符号整型单通道矩阵,CV_32FC2是指一个32位浮点型双通道矩阵。
矩阵运算单元102被配置为执行矩阵处理,获取目标子矩阵,直至所述待处理矩阵组处理完成,所述左矩阵块和右矩阵块基于所述配置信息获得。
向量寄存器604被配置为暂存向量相关数据或其他类型数据,比如,正在处理的图片数据或向量数据。
向量运算单元605被配置为将图片信息转化为矩阵数据。
数据搬运单元607被配置为连接矩阵运算单元102和向量运算单元605,进而实现矩阵寄存器603和向量寄存器604间的数据交换。
向量加载存储队列606被配置为存储矩阵运算单元102或者向量运算单元605的load/store请求,该load/store请求用于向高速缓冲存储器L2读取或写入数据。
高速缓冲存储器是存在于主存与CPU之间的一级存储器,在计算机存储***的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。高速缓冲存储器L1被配置为存储标量运算单元101运算所需的数据,以及通过运算得出的结果或数据。高速缓冲存储器L2被配置为存储待处理矩阵数据组。
上述各模块以及各模块中的各个组件均可并行处理数据,在无数据交换后,可各不相干地处理各自的数据,例如,当标量运算单元101确定了一组配置信息后,矩阵运算单元102基于该配置信息对左矩阵块和右矩阵块进行矩阵运算时,标量运算单元101可开始确定下一组配置信息。
上述标量运算单元101和向量运算单元605还可被配置为分别处理对应的标量数据或向量数据,具体的,标量运算单元101根据接收到的标量运算指令,还可以完成对标量数据的处理,如标量加、标量减、标量乘等。向量运算单元605根据接收到的向量运算指令,还可以完成对向量数据的处理,如向量加、向量减、向量乘等。
本实施例的RISC-V矩阵运算的芯片中,通过数据搬运单元607实现矩阵寄存器603和向量寄存器604间的数据交换,无需矩阵寄存器603和向量寄存器604中的一方将数据存入存储模块,另一方使用该数据时从存储模块中查询并加载,减少了数据store或load,节省了数据搬运时间,提高了矩阵运算效率,降低运算功耗,同时,各模块以及各模块中的各个组件均并行处理数据,可降低芯片各组件的闲置率,提高了运算资源利用率。
图7为本发明实施例的寄存器结构的示意图,如图7所示,包括转置寄存器和向量寄存器的结构。
为了使数据搬运单元能更好的实现矩阵寄存器与向量寄存器之间的数据搬移,可将矩阵寄存器的列宽设计为向量寄存器的长度,即可变长度vlen。转置矩阵寄存器的大小可为mlen。为了支持两倍加宽的运算结果,累加寄存器的大小设计可为mlenx2。
本公开实施例通过对矩阵寄存器与向量寄存器的结构进行设置,可便于数据搬运单元能更好的实现矩阵寄存器与向量寄存器之间的数据搬移,避免寄存器之间由于结构尺寸不匹配造成搬运数据失败,或其中一个寄存器过大,造成存储资源浪费,能更好地利用芯片中的存储资源。
图8为本发明实施例的数据处理方法的流程图,如图8所示,包括方法包括:
S801:通过标量运算单元确定当前的配置信息,其中,所述配置信息包括当前待处理的左矩阵块和右矩阵块的地址信息和尺寸信息,所述左矩阵块和所述右矩阵块为待处理矩阵组中的未运算数据块。
S802:通过矩阵运算单元获取所述左矩阵块和右矩阵块,对所述左矩阵块和右矩阵块进行矩阵运算,获取目标子矩阵,直至所述待处理矩阵组处理完成,所述左矩阵块和右矩阵块基于所述配置信息获得。
应理解,本实施例的数据处理方法由上述RISC-V矩阵运算的芯片执行,其具体执行过程与上述实施例类似,在此不再赘述。
本公开实施例通过为待处理矩阵组确定配置信息,并基于配置信息实现对左矩阵块和右矩阵块的矩阵处理,获取目标子矩阵,重复上述步骤,直至待处理矩阵组处理完成,可直接处理矩阵数据,避免了将矩阵数据转化为标量数据和/或向量数据,然后基于标量指令和/或向量分别对数据进行处理的繁琐过程,直接对矩阵数据进行处理,提高了矩阵运算效率。
图9为本发明实施例的矩阵乘运算的流程图,如图9所示,矩阵乘运算的流程包括:
步骤S901:配置矩阵数据的类型寄存器的数据类型参数mtype。其中,数据类型参数mtype用于指示矩阵运算中数据类型,包括单精度浮点、双精度浮点、整型等。
步骤S902:配置待运算的左矩阵块的行宽寄存器参数tile_m。该行宽寄存器参数tile_m为左源矩阵中待运算的左矩阵块的行宽。
步骤S903:配置待运算的右矩阵块的列宽寄存器参数tile_n。该列宽寄存器参数tile_n为右源矩阵中待运算的右矩阵块的列宽。
步骤S904:配置待运算的左矩阵块的列宽寄存器参数(待运算的右矩阵块的行宽寄存器参数)tile_k。该列宽寄存器参数tile_k为左源矩阵中待运算的左矩阵块的列宽。在矩阵乘的运算中,待运算的左矩阵块的列宽与待运算的右矩阵块的行宽相同。
其中,步骤S902-步骤S904为标量运算单元配置的过程。
步骤S905:转置寄存器tr_tile加载待运算的左矩阵块。
步骤S906:转置寄存器tr_tile加载待运算的右矩阵块。
步骤S907:矩阵运算单元对获取的左矩阵块和右矩阵块进行矩阵乘运算,即将左矩阵块的第a行第b列的数据与左矩阵块的第b行第c列的数据相乘,其中,a,b,c为整数,且a≤tile_m,b≤tile_k,c≤tile_n。
该步骤S907即为矩阵运算单元对获取的待处理矩阵组中的一组数据块进行矩阵运算的过程。步骤S907与步骤S902-步骤S904可并行,即在运算过程中,可对接下来要运算的矩阵块进行配置,即配置时长可被运算时长覆盖,进而通过标量运算单元对矩阵块进行配置不会影响矩阵运算单元对矩阵的运算。
步骤S908:判断左源矩阵在某一行的所有左矩阵块是否均进行运算。
若确定未运算完成,即左源矩阵在某一行存在某个左矩阵块还未与对应的右矩阵块进行运算,则转步骤S904,对该未运算的左矩阵块的tile_k进行配置,例如如图3所示,左矩阵块1与右矩阵块a的运算之后,左源矩阵在第一行存在左矩阵块2-4未进行计算,则通过步骤S904配置左矩阵块2的列宽寄存器参数,其中,左矩阵块1与左矩阵块2的列宽可以相同,也可以不同。以及,步骤S907与步骤S908可并行,由于步骤S908与步骤S904的执行时长远小于步骤S907的执行时长,所以通过标量运算单元对待运算的矩阵块组的配置不会影响矩阵运算单元对矩阵的运算,因此通过本实施例不仅可提升矩阵的运算效率,还使得矩阵的运算更偏向于RISC。
若确定已运算完成,则转步骤S909,即如图3所示的左源矩阵在k方向完成运算,即左矩阵块1与右矩阵块a完成运算,左矩阵块2与右矩阵块b完成运算,左矩阵块3与右矩阵块c完成运算,左矩阵块4与右矩阵块d完成运算。
步骤S909:将运算结果写入累加寄存器acc_tile中。即完成左源矩阵在某一行的所有左矩阵块与右源矩阵在某一列的对应的右矩阵块的运算,累加寄存器将每组矩阵组的运算结果与累加的运算结果进行累加,例如,如图3所示,在完成左矩阵块1与右矩阵块a的运算,以及完成左矩阵块2与右矩阵块b的运算之后,将两个运算值进行累加并保存至累加寄存器,然后在完成左矩阵块3与右矩阵块c的运算之后,将该运算结果与累加寄存器当前保存的累加结果再进行累加,并将累加的结果更新至累加寄存器,再然后在完成左矩阵块4与右矩阵块d的运算之后,将该运算结果与累加寄存器当前保存的累加结果再进行累加,并将累加的结果更新至累加寄存器,最后得到目标矩阵的一个输出矩阵块,该输出矩阵块如图3所示的输出矩阵块X。
步骤S910:判断右源矩阵的所有列是否均进行运算。
若确定未运算完成,即右源矩阵的某一列还未与左源矩阵的某一行进行运算,则转步骤S903,对该未运算的某一列的右矩阵块的tile_n进行配置。例如,如图3所示,左源矩阵的第一行的所有左矩阵块只与右源矩阵的第一列的所有右矩阵块完成运算,需要进一步将左源矩阵的第一行的所有左矩阵块与右源矩阵的第二、三等列的所有右矩阵块进行运算,则通过步骤S903,可先对右源矩阵的待运算的右矩阵块的tile_n进行配置。其中,右源矩阵的不同列的右矩阵块的列宽可以相同,也可以不同。
若确定已运算完成,即右源矩阵的所有列中的右矩阵块均与左源矩阵的某一行对应的左矩阵块进行运算,则转步骤S911。
步骤S911:判断左源矩阵的所有行是否均进行运算。
若确定未运算完成,即左源矩阵的某一行还未与右源矩阵的某一列进行运算,则转步骤S902,对该未运算的某一行的左矩阵块的tile_m进行配置。例如,如图3所示,左源矩阵的第一行的所有左矩阵块与右源矩阵的所有列的对应的右矩阵块完成运算,需要进一步将左源矩阵的第二、三等行的所有左矩阵块与右源矩阵的所有列的对应的右矩阵块进行运算,则通过步骤S902,可先对左源矩阵的待运算的左矩阵块的tile_m进行配置。其中,左源矩阵的不同行的左矩阵块的行宽可以相同,也可以不同。
若确定已运算完成,即左源矩阵的所有行中的左矩阵块均与右源矩阵的某一列中对应的右矩阵块进行运算,则转步骤S912。
步骤S912:左源矩阵与右源矩阵的矩阵乘运算结束。
本公开实施例通过上述流程实现了对左矩阵块和右矩阵块的矩阵处理,分别判断矩阵列宽(右矩阵行宽)寄存器tile_k、右矩阵列宽寄存器tile_n和左矩阵行宽寄存器tile_m分别对应的参数是否均已计算完毕,保证了左矩阵块和右矩阵块中的数据均被处理,避免了数据遗漏造成的失误,保证目标子矩阵的正确率。
图10是本发明实施例的电子设备的示意图。图10是本发明实施例的电子设备的示意图。如图10所示,电子设备10为通用地址查询装置,其包括通用的计算机硬件结构,其至少包括处理器101和存储器102。处理器101和存储器102通过总线103连接。存储器102适于存储处理器101可执行的指令或程序。处理器101可以是独立的微处理器,也可以是一个或者多个微处理器集合,其可以基于本发明实施例的RISC-V矩阵运算的芯片的处理器。由此,处理器101通过执行存储器102所存储的指令,从而执行如上所述的本发明实施例的方法流程实现对于数据的处理和对于其它装置的控制。总线103将上述多个组件连接在一起,同时将上述组件连接到显示控制器104和显示装置以及输入/输出(I/O)装置105。输入/输出(I/O)装置105可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出装置105通过输入/输出(I/O)控制器106与***相连。
本领域的技术人员应明白,本申请的实施例可提供为方法、装置(设备)或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品。
本申请是参照根据本申请实施例的方法、装置(设备)和计算机程序产品的流程图来描述的。应理解可由计算机程序指令实现流程图中的每一流程。
这些计算机程序指令可以存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现流程图一个流程或多个流程中指定的功能。
也可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程中指定的功能的装置。
本发明的另一实施例涉及一种非易失性存储介质,用于存储计算机可读程序,所述计算机可读程序用于供计算机执行上述部分或全部的方法实施例。
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指定相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种RISC-V矩阵运算的芯片,其特征在于,所述芯片包括:
标量运算单元,被配置为确定当前的配置信息,其中,所述配置信息包括当前待处理的左矩阵块和右矩阵块的地址信息和尺寸信息,所述左矩阵块和所述右矩阵块为待处理矩阵组中的未运算数据块;
矩阵运算单元,被配置为获取所述左矩阵块和右矩阵块,对所述左矩阵块和右矩阵块进行矩阵运算,获取目标子矩阵,直至所述待处理矩阵组处理完成,所述左矩阵块和右矩阵块基于所述配置信息获得。
2.根据权利要求1所述的芯片,其特征在于,所述芯片还包括向量运算单元,所述向量运算单元被配置为获取图片数据,基于预定的窗口,将所述图片数据转化为待处理矩阵。
3.根据权利要求1所述的芯片,其特征在于,所述芯片还包括累加寄存器,所述矩阵运算单元还被配置为将所述目标子矩阵发送至累加寄存器;
所述累加寄存器被配置为对各所述目标子矩阵进行累加处理,获得目标矩阵。
4.根据权利要求1所述的芯片,其特征在于,所述芯片还包括转置寄存器,所述转置寄存器被配置为根据所述配置信息从待处理矩阵组中分别读取所述左矩阵块和右矩阵块;
矩阵运算单元进一步被配置为从所述转置寄存器获取所述左矩阵块和右矩阵块。
5.根据权利要求1所述的芯片,其特征在于,所述芯片还包括数据缓存单元,被配置为缓存所述待处理矩阵组。
6.根据权利要求1所述的芯片,其特征在于,所述芯片基于指令集进行数据处理,所述指令集包括矩阵指令、向量指令和标量指令。
7.一种RISC-V矩阵运算方法,其特征在于,所述方法包括:
通过标量运算单元确定当前的配置信息,其中,所述配置信息包括当前待处理的左矩阵块和右矩阵块的地址信息和尺寸信息,所述左矩阵块和所述右矩阵块为待处理矩阵组中的未运算数据块;
通过矩阵运算单元获取所述左矩阵块和右矩阵块,对所述左矩阵块和右矩阵块进行矩阵运算,获取目标子矩阵,直至所述待处理矩阵组处理完成,所述左矩阵块和右矩阵块基于所述配置信息获得。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
通过向量运算单元获取图片数据,基于预定的窗口,将所述图片数据转化为待处理矩阵。
9.一种电子设备,包括存储器和处理器,其特征在于,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如权利要求7-8中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求7-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211261907.4A CN117932201A (zh) | 2022-10-14 | 2022-10-14 | 一种risc-v矩阵运算的芯片和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211261907.4A CN117932201A (zh) | 2022-10-14 | 2022-10-14 | 一种risc-v矩阵运算的芯片和方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117932201A true CN117932201A (zh) | 2024-04-26 |
Family
ID=90752732
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211261907.4A Pending CN117932201A (zh) | 2022-10-14 | 2022-10-14 | 一种risc-v矩阵运算的芯片和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117932201A (zh) |
-
2022
- 2022-10-14 CN CN202211261907.4A patent/CN117932201A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10678540B2 (en) | Arithmetic operation with shift | |
US8595280B2 (en) | Apparatus and method for performing multiply-accumulate operations | |
CN110955453A (zh) | 用于执行矩阵压缩和解压缩指令的***和方法 | |
US20070271325A1 (en) | Matrix multiply with reduced bandwidth requirements | |
CN114461276A (zh) | 用于点积操作的***、方法和装置 | |
CN117724763A (zh) | 用于矩阵操作加速器的指令的装置、方法和*** | |
WO2015118299A1 (en) | A data processing apparatus and method for performing segmented operations | |
CN114153498A (zh) | 用于加载片寄存器对的***和方法 | |
CN110909883A (zh) | 用于执行指定三元片逻辑操作的指令的***和方法 | |
CN117971315A (zh) | 用于执行快速转换片并且将片用作一维向量的指令的*** | |
EP3265909A1 (en) | Register renaming in multi-core block-based instruction set architecture | |
CN107533460B (zh) | 紧缩有限冲激响应(fir)滤波处理器、方法、***和指令 | |
CN113885942A (zh) | 用于将片寄存器对归零的***和方法 | |
EP3343359A1 (en) | Apparatus and method for processing sparse data | |
CN112256330A (zh) | 用于加速数字信号处理的risc-v指令集扩展方法 | |
CN111124495B (zh) | 一种数据处理方法、解码电路及处理器 | |
CN114327362A (zh) | 大规模矩阵重构和矩阵-标量操作 | |
JP2014164667A (ja) | リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置 | |
CN114691217A (zh) | 用于8位浮点矩阵点积指令的装置、方法和*** | |
US11409840B2 (en) | Dynamically adaptable arrays for vector and matrix operations | |
CN107851022B (zh) | 向量长度查询指令 | |
KR20210084220A (ko) | 부분 판독/기입을 갖는 재구성 가능한 시스톨릭 어레이를 위한 시스템 및 방법 | |
CN117932201A (zh) | 一种risc-v矩阵运算的芯片和方法 | |
US7647368B2 (en) | Data processing apparatus and method for performing data processing operations on floating point data elements | |
CN103092571A (zh) | 支持多种数据类型的单指令多数据算术单元 |
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 |