一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

矩阵计算电路、方法、电子设备及计算机可读存储介质与流程

2022-02-21 04:32:41 来源:中国专利 TAG:


1.本公开涉及处理器领域,尤其涉及一种矩阵计算电路、方法、电子设备及计算机可读存储介质。


背景技术:

2.随着科学技术的发展,人类社会正在快速进入智能时代。智能时代的重要特点,就是人们获得数据的种类越来越多,获得数据的量越来越大,而对处理数据的速度要求越来越高。芯片是任务分配的基石,它从根本上决定了人们处理数据的能力。从应用领域来看,芯片主要有两条路线:一条是通用芯片路线,例如cpu等,它们能提供极大的灵活性,但是在处理特定领域算法时有效算力比较低;另一条是专用芯片路线,例如tpu等,它们在某些特定领域,能发挥较高的有效算力,但是面对灵活多变的比较通用的领域,它们处理能力比较差甚至无法处理。由于智能时代的数据种类繁多且数量巨大,所以要求芯片既具有极高的灵活性,能处理不同领域且日新月异的算法,又具有极强的处理能力,能快速处理极大的且急剧增长的数据量。
3.在神经网络计算中,卷积计算占了总运算量的大部分,而卷积计算可以转换成矩阵乘计算,因此要提高神经网络任务中的吞吐量、降低延时、提升芯片的有效算力,重点在于提升矩阵乘计算的速度。
4.图1a为在神经网络中矩阵乘计算的示意图。如图1a所示,m1为数据矩阵,m2为参数矩阵,m为输出矩阵。m1中的一行数据和m2中的一列参数做乘加计算得到m中的一个数据。很多神经网络中的数据矩阵和/或参数矩阵是稀疏矩阵,即矩阵的数据中存在大量的0。为了提升矩阵的计算速度,可以针对稀疏矩阵乘计算进行优化。
5.现有的优化方式一般是采取跳零计算的方法,即先将所有的数据和参数都取出来,在进行计算前,判断数据是否为0。如果数据为0,则丢弃与之对应的参数,跳过此数据不计算;如果数据非0,则进行计算。在这种方法中,数据矩阵和参数矩阵的所有元素都会存储下来,如图1b所示。其中,p_d是数据矩阵存储的起始地址,p_w是参数矩阵存储的起始地址;数据矩阵和参数矩阵中的元素都会全部存储。在进行运算时,它们会被一一读出来,将数据进行比较,再选择非0数据和与其对应的参数进行运算,最后得到结果。
6.上述方案存在以下缺点:1、浪费存储。因为等于0的数据也被存储下来了,但是在计算的时候并没有用到这些等于0的数据;2、浪费带宽,因为数据等于0时也会被读出来,占用带宽,但是其在计算的时候并没有用到。


技术实现要素:

7.提供该发明内容部分以便以简要的形式介绍构思,这些构思将在后面的具体实施方式部分被详细描述。该发明内容部分并不旨在标识要求保护的技术方案的关键特征或必要特征,也不旨在用于限制所要求的保护的技术方案的范围。
8.为了解决现有技术中的上述技术问题,本公开实施例提出如下技术方案:
9.第一方面,本公开实施例提供一种矩阵计算电路,其特征在于,包括:
10.指令解码电路,用于解码矩阵计算指令得到第一矩阵的首地址、位图矩阵的首地址和第二矩阵的首地址,其中所述第一矩阵是由数据矩阵中的非0数据构成的矩阵,所述位图矩阵中的位图数据用于指示所述数据矩阵中的数据的位置;
11.第一数据读取电路,用于根据所述第一矩阵的首地址生成第一数据的读取地址,用于根据位图矩阵的首地址生成位图数据的读取地址;根据所述第一数据的读取地址读取所述第一数据,根据所述位图数据的读取地址读取所述位图数据;
12.控制信号生成电路,用于根据所述位图数据生成第二数据读取控制信号;
13.第二数据读取电路,用于根据所述第二矩阵的首地址和所述第二数据读取控制信号生成第二数据的读取地址;根据所述第二数据的读取地址读取所述第二数据;
14.计算电路,用于根据所述第一数据和所述第二数据计算得到第三数据。
15.进一步的,所述指令解码电路,还用于解码矩阵指令得到第三矩阵的首地址;
16.所述控制信号生成电路,还用于根据所述位图数据生成第三数据存储控制信号;
17.所述矩阵计算电路还包括:
18.存储地址生成电路,用于根据所述第三矩阵的首地址以及所述第三数据存储控制信号生成第三数据的存储地址。
19.进一步的,所述矩阵计算电路还包括:
20.第一存储器、第二存储器以及第三存储器;
21.其中所述第一存储器用于存储所述第一数据和所述位图数据;根据所述第一数据的读取地址释放所述读取地址对应的所述第一数据至所述计算电路,根据所述位图数据的读取地址释放所述位图数据至所述控制信号生成电路;
22.所述第二存储器用于存储所述第二数据;根据所述第二数据的读取地址释放所述第二数据至所述计算电路;
23.所述第三存储器用于根据所述第三数据的存储地址,保存所述第三数据至所述存储地址所指示的存储位置上。
24.进一步的,所述控制信号生成电路,还用于根据所述位图数据生成第一数据读取电路控制信号,所述第一数据的读取控制信号用于控制所述第一数据读取电路读取下一个第一数据和/或控制所述第一数据读取电路读取下一个位图数据。
25.进一步的,所述位图数据包括所述位图数据在所述位图矩阵中的列数,其中,
26.所述第二数据读取电路用于:根据所述第二矩阵的首地址以及所述所述位图数据在所述位图矩阵中的列数生成所述第二数据的读取地址。
27.进一步的,所述位图数据包括所述位图数据在所述位图矩阵中的行数,所述控制信号生成电路还用于:
28.根据所述位图数据在所述位图矩阵中的行数确定所述第一矩阵中的一行是否计算完毕;
29.响应于所述计算完毕,发送输出指令至所述计算电路。
30.进一步的,所述第一矩阵为压缩矩阵,其中在所述压缩矩阵为一维数组,该一维数据中按顺序存储所述数据矩阵中的非0数据;所述位图矩阵中包含第一值,其中所述第一值用于指示所述数据矩阵中的非0数据。
31.第二方面,本公开实施例提供一种矩阵计算方法,其特征在于,包括:
32.解码矩阵计算指令得到第一矩阵的首地址、位图矩阵的首地址和第二矩阵的首地址,其中所述第一矩阵是由数据矩阵中的非0数据构成的矩阵,所述位图矩阵中的位图数据用于指示所述数据矩阵中的数据的位置;
33.根据所述第一矩阵的首地址生成第一数据的读取地址;
34.根据位图矩阵的首地址生成位图数据的读取地址;
35.根据所述第一数据的读取地址读取所述第一数据;
36.根据所述位图数据的读取地址读取所述位图数据;
37.根据所述位图数据生成第二数据读取控制信号;
38.根据所述第二矩阵的首地址和所述第二数据读取控制信号生成第二数据的读取地址;
39.根据所述第二数据的读取地址读取所述第二数据;
40.根据所述第一数据和所述第二数据计算得到第三数据。
41.进一步的,所述方法还包括:
42.解码矩阵计算指令得到第三矩阵的首地址;
43.根据所述位图数据生成第三数据存储控制信号
44.根据所述第三矩阵的首地址以及所述第三数据存储控制信息生成第三数据的存储地址;
45.将所述第三数据存入所述存储地址。
46.第三方面,本公开实施例提供一种芯片,包括第一方面中任一项所述的矩阵计算电路。
47.第四方面,本公开实施例提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现前述第一方面中的任一所述的矩阵计算方法。
48.第五方面,本公开实施例提供一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述第一方面中的任一所述的矩阵计算方法。
49.第六方面,本公开实施例提供一种计算机程序产品,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述第一方面中的任一所述的矩阵计算方法。
50.第七方面,本公开实施例提供一种计算装置,其特征在于,包括一个或多个所述第三方面所述的芯片。
51.本公开实施例公开了一种矩阵计算电路、方法、电子设备及计算机可读存储介质。其中该矩阵计算电路包括:指令解码电路,用于解码矩阵计算指令;第一数据读取电路,用于读取所述第一数据,读取地址读取所述位图数据;控制信号生成电路,用于根据所述位图数据生成第二数据读取控制信号;第二数据读取电路,用于根据所述第二数据读取控制信号生成第二数据的读取地址;读取所述第二数据;计算电路,用于根据所述第一数据和所述第二数据计算得到第三数据。上述矩阵计算电路通过位图数据生成第二数据的读取地址,减少了第二数据的读取数量以及计算量,解决了现有技术中浪费带宽的技术问题。
52.上述说明仅是本公开技术方案的概述,为了能更清楚了解本公开的技术手段,而可依照说明书的内容予以实施,并且为让本公开的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
53.结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。
54.图1a和1b为本公开现有技术的示意图;
55.图2为本公开实施例提供的矩阵计算电路的结构示意图;
56.图3a为本公开实施例提供的第一矩阵的存储格式示意图;
57.图3b为本公开实施例提供的第一矩阵的存储格式的一个实例示意图;
58.图4为本公开实施例提供第二矩阵的存储格式示意图;
59.图5为本公开实施例提供的矩阵计算方法的流程图;
60.图6a为本公开的一个应用实例的示意图;
61.图6b为本公开的应用实例中的第一矩阵的存储格式示意图;
62.图6c为本公开的应用实例中的第二矩阵的存储格式示意图。
具体实施方式
63.下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
64.应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
65.本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。
66.需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。
67.需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
68.本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
69.图2为本公开实施例提供的矩阵计算电路的示意图。本实施例提供的矩阵计算电路200包括:
70.指令解码电路id(instruction decoder)201,所述指令解码电路用于解码矩阵计
算指令得到第一矩阵的首地址p_d、位图矩阵的首地址p_d_map和第二矩阵的首地址p_w;其中所述第一矩阵是由数据矩阵中的非0数据构成的矩阵,所述位图矩阵中的位图数据用于指示所述数据矩阵中的数据的位置;
71.第一数据读取电路(adi_g)202,用于根据所述第一矩阵的首地址p_d生成第一数据的读取地址a_din;用于根据位图矩阵的首地址p_d_map生成位图数据的读取地址a_map;根据所述第一数据的读取地址a_din读取所述第一数据d_data,根据所述位图数据的读取地址a_map读取所述位图数据d_map;
72.控制信号生成电路(map_p)203,用于根据所述位图数据d_map生成第二数据读取控制信号(c_aw);
73.第二数据读取电路(aw_g)204,用于根据所述第二矩阵的首地址p_w和所述第二数据读取控制信号生成第二数据的读取地址a_win;根据所述第二数据的读取地址a_win读取所述第二数据win;
74.计算电路(ex)205,用于根据所述第一数据d_data和所述第二数据win计算得到第三数据dout。
75.示例性的,所述矩阵计算指令为矩阵乘计算指令,该指令中包括指令类型以及参与指令乘计算的第一矩阵的存储首地址和第二矩阵的存储首地址;在一个实施例中,所述第一矩阵中的第一数据为神经网络卷积计算中的数据矩阵中的非0数据,所述第二矩阵为神经网络卷积计算中的参数矩阵;可选的,所述第一矩阵和/或所述第二矩阵为压缩矩阵,其中所述压缩矩阵为将原矩阵进行压缩,只保存原矩阵中的非0数据的矩阵,可选的,所述压缩矩阵中的数据按照数组的结构排列成一个一维数据。
76.可选的,所述位图矩阵为维度与所述数据矩阵相同的矩阵,其中,位图矩阵m1_map中的非0位图数据用于指示所述数据矩阵中与该非0位图数据对应的位置处的数据是非0数据,即位图矩阵中的非0位图数据用于指示数据矩阵中的非0数据,如在位图矩阵中的非0位图数据用数值1表示,那么在位图矩阵中数值为1的位图数据表示在数据矩阵中与该数值1对应位置处的数据为非0数据,在位图矩阵中数值为0的位图数据表示在数据矩阵中与该0数值对应位置处的数据为0。
77.可选的,所述矩阵计算指令中还包括参与指令乘计算的第一矩阵所表示的数据矩阵和第二矩阵所表示的参数矩阵的维度,如行数和宽度,以及第三矩阵的首地址,其中所述第三矩阵为对第一矩阵和第二矩阵执行计算后的结果矩阵。可以理解的,所述矩阵计算指令中的矩阵的存储首地址以及矩阵的行数和列数等参数可以以寄存器地址的形式表示,所述指令解码电路从对应的寄存器地址中获取对应的数据。
78.图3a为生成压缩矩阵的生成示意图。如图3a所示,以数据矩阵的压缩矩阵即第一矩阵为例,其中的a
ij
表示数据矩阵中的元素,其中i∈(1,m),j∈(1,k);则所述第一矩阵为按照a
ij
的下标按照先行后列的顺序即逐行存储为一维数组,其逻辑上是连续存储的。所述位图矩阵与所述数据矩阵对应,用于记录所述数据矩阵中的非0数据,可选的,其在形式上与所述数据矩阵同维度,即行数相同、列数也相同,所述位图矩阵中的非0数值用于表示所述数据矩阵中的非0数据。如图3a所示,在位图矩阵用m表示位图矩阵中位图数据,则当a
ij
≠0时,m
ij
≠0,由于m
ij
只是一个标识数据,因此其可以用小数值来表示,如1,此时位图矩阵中的每个位图数据只需要1bit的存储空间,位图矩阵的大小比数据矩阵要小很多;由此,通过
第一矩阵记录数据矩阵的非0数据,用位图矩阵记录非0数据的位置,所述数据矩阵被压缩成两个小矩阵。可以理解的,在实际使用中,也可以在位图矩阵中使用其他任何值表示数据矩阵中的非0数据的位置,在此不再赘述。
79.可以理解,对参数矩阵可以做同样的压缩操作,此时将压缩后的参数矩阵称为第二矩阵,在此不再赘述。在实际中存储中,所有数据的存储是以字节(byte)为单位的,而对于位图矩阵m1_map来说,其元素是位(bit),所以1byte可以存储8bit,也就是一个字节可以存储8个m1_map的元素。
80.如图3b所示为生成压缩矩阵的一个示例。如图3b所示,数据矩阵m1中包括a,b,c,d四个非0的数据,将数据矩阵m1压缩成一个包括4位的一维数据矩阵m1_c和一个位图矩阵m1_map_c,位图矩阵m1_map_c中与数据矩阵中非零数据a,b,c,d的位置对应的位图数据设置为1,其他位置设置为0。
81.在本公开实施例中,所述第一数据读取电路202接收所述指令解码电路201解码出的第一矩阵的首地址p_d和位图矩阵的首地址p_d_map,并根据所述第一矩阵的首地址p_d生成第一数据的读取地址a_din,根据所述位图矩阵的首地址p_d_map生成位图数据的读取地址a_map;根据所述第一数据的读取地址a_din读取所述第一数据d_data,根据位图数据的读取地址a_map读取位图数据d_map。如图3a所示,在一个示例中,如果是第一次读取,则读取第一个非零数据a
11
以及位图数据中的第一个byte的8个位图数据m
11
到m
18
(假设数据矩阵的列数至少为8)。所述第一数据读取电路202每次取数之后更新首地址,即每次取出之后都将本次取出的第一数据的地址加上数据的长度作为下一次取数的首地址,将本次取出位图数据的地址加上数据的长度作为下一次取数的首地址;如每个第一数据占用n个存储位置,则每次更新p_dn=p_d
n-1
n,由此可以在计算中不断取出新的第一数据;每个位图数据只占用1bit,因此在取位图数据的时候一次取出8个位图数据,因此位图数据的取数频率与第一数据的取数频率不同,每次更新位图矩阵的首地址时,只需要加1即可,即p_d_mapn=p_d_map
n-1
1。
82.在本公开中,所述控制信号生成电路(map_p)203根据所述位图数据d_map生成第二数据读取控制信号(c_aw)。可选的,所述第二数据读取控制信号(c_aw)中包括所述位图数据中与所述第一数据对应的位图数据的位置。
83.在本公开实施例中,所述第二数据读取电路204根据第二矩阵的首地址p_w以及所述位图数据的位置生成第二数据的读取地址a_win;根据所述第二数据的读取地址a_win读取所述第二数据win。可选的,所述第二数据读取电路204根据所述第二矩阵的首地址p_w以及位图数据的列数生成所述第二数据的读取地址a_win,其中位图数据的列数表示所述位图数据在所述位图矩阵中的哪一列。
84.在一个实施例中,所述第二矩阵中的元素全是非0元素,此时第二矩阵不压缩,直接以原矩阵的形式存储;其存储的逻辑形式如图4所示,p_w为第二矩阵的第一个元素b
11
的存储地址,其逻辑上是按照矩阵的形式连续存储的,而物理上可以连续存储或者不连续存储,在本公开中不做限定。通过首地址p_w和位图数据的列数,可以生成第二矩阵的行地址,将第二矩阵中与所述位图数据的列数所对应的一行第二数据读取出来,以便后续进行矩阵计算。当取出的第一数据变化时,所述位图数据随之变化,因此位图数据的列数也会发生变化,则读出的第二数据会随所述位图数据的列数不断变化,从而改变每次计算中所使用的
第二数据。
85.在本公开中,所述计算电路205根据所述第一数据和所述第二数据进行计算得到第三数据。可选的,所述计算为乘加计算,在每个时钟周期中,所述计算电路将当前时钟周期内得到的第一数据和第二数据做乘法计算得到乘法计算结果,并将所述乘法计算结果与之前时钟周期中得到的第三数据相加得到当前时钟周期中的第三数据。以此类推,所述计算电路205不断的执行乘累加计算直至计算完毕。
86.可选的,所述计算电路205中包括多个计算单元,示例性的,所述计算单元的个数与所述第二矩阵的列数相同。即当所述第二数据读取电路204根据位图数据的位置一次读取出一行第二数据时,所述一行第二数据可以分别和所述第一数据并行进行计算。
87.可选的,所述控制信号生成电路203,还用于根据所述位图数据生成第一数据读取电路控制信号(c_adi),所述第一数据的读取控制信号用于控制所述第一数据读取电路202读取下一个第一数据和/或控制所述第一数据读取电路202读取下一个位图数据。其中,所述位图数据中包括位图数据的值以及位图数据的位置,其中所述位图数据的位置表示位图数据在所述位图矩阵中位置,即第一数据在所述数据矩阵中的位置。
88.可选的,所述位图数据的位置为间接位置,即读取出来的位图数据的位置为位图数据的逻辑位置,之后通过位图矩阵的行数h_map和列数w_map以及位图数据的存储位置来计算位图数据在位图矩阵中的位置;示例性的,假设位图矩阵的行数为4,列数为4,则在逻辑存储位置上的第11个位图数据在位图矩阵中的位置为第3行第3列;由此,控制信号生成电路只需要确定当前所处理的位图数据的逻辑存储位置,即可确定所述位图数据在位图矩阵中的位置,在该可选实施例中,由于不用存储位图数据的位置,因此更加节省存储空间。
89.可选的,所述位图数据的位置直接记录在位图数据中,即位图数据中包括位图数据的值以及位图数据在位图矩阵中的位置(h,w),其中h表示所述位图数据在位图矩阵中的行数,所述w表示位图数据在所述位图矩阵中的列数,在该可选实施例中,由于位图数据中已经包括了位图数据的位置,因此其需要占用额外的存储空间,但是其可以省去计算位图数据的位置的计算量。
90.示例性的,当需要取出第一数据时,先取出位图数据,当所述位图数据的值为1时,表示该位图数据所对应的第一数据为非0数据,所述控制信号生成电路203生成所述第一数据读取电路控制信号以控制所述第一数据读取电路读取所述位图数据所对应的第一数据;当所述位图数据使用完毕时,如一次读取了1byte的位图数据,当遍历完所有8个位图数据时,所述控制信号生成电路203生成所述第一数据读取电路控制信号以控制所述第一数据读取电路读取下一个位图数据。可以理解的,在该示例中,所述下一个位图数据为一个byte的8个位图数据。
91.可以理解的,上述读取第一数据的方式仅仅是举例,不构成对本公开的限制;例如所述控制信号生成电路还可以根据周期信号,每个周期生成控制信号以控制所述第一数据读取电路读取下一个第一数据;可选的,根据计算电路的反馈信号来读取下一个第一数据,即每当计算电路计算完当前第一数据之后,向控制信号生成电路发送反馈信号以使所述第一数据读取下一个第一数据。其他读取第一数据的方式不再赘述。
92.可选的,所述位图数据的位置还包括所述位图数据在所述位图矩阵中的行数,其中所述行数表示所述位图数据在所述位图矩阵中的哪一行。所述控制信号生成电路203还
用于:根据所述位图数据在所述位图矩阵中的行数确定所述第一矩阵中的一行是否计算完毕;响应于所述计算完毕,发送输出指令(c_re)至所述计算电路205。
93.如图2所示,所述控制信号生成电路203接收到所述位图数据,并通过所述位图数据中的当前位图数据的行数判断第一矩阵的一行是否计算完毕,由于数据矩阵和所述位图矩阵的维度相同,因此位图矩阵的一行与数据矩阵的一行对应,因此当位图数据的行数发生变化,则表示数据矩阵的一行计算完毕。因此使用位图数据的位置中的行数可以判断第一矩阵中的一行第一数据是否计算完毕。示例性的,所述当前位图数据的行数可以通过当前位图数据的逻辑地址以及位图矩阵的列数来确定,设当前位图数据的逻辑地址为add,其表示按照先行后列排序,当前位图数据在位图矩阵中所有的位图数据中的位置,设位图矩阵的列数为w_map,则当前位图数据的行数如对于一个4*4的位图数据来说,其中按先行后列的顺序,第5个位图数据的所在的行数为即第二行。
94.具体的,判断步骤如下:
95.比较本次使用的位图数据的行数与上次使用的位图数据的行数是否相同;
96.如果相同,则所述第一矩阵中的一行第一数据还未计算完毕;或者,
97.如果不同,则所述第一矩阵中的一行第一数据计算完毕。
98.即比较本次读取位图数据的x坐标与上次读取的位图数据的x坐标是否相同,如果相同,则表示一行数据还没有读取完;如果不同,则表示已经换行读到下一行的位图数据,表示一行第一数据都已经参与过计算。响应于计算完毕,即本次读取的位图数据的x坐标与上次读取的位图数据的x坐标不同,则发送输出指令c_re至所述计算电路205,以使所述计算电路205输出计算出的一行第三数据。
99.可选的,所述控制信号生成电路203还可以通过指令解码电路得到所述位图矩阵的宽度和高度,而由于位于矩阵按先行后列存储即逐行存储,由此可以对得到的位图数据的行数和列数。
100.可选的,所述指令解码电路201还用于解码矩阵指令得到第三矩阵的首地址,所述控制信号生成电路203,还用于根据所述位图数据生成第三数据存储控制信号(c_ado);所述矩阵计算电路200还包括:存储地址生成电路(ado_g)206,根据所述第三矩阵的首地址p_o以及所述第三数据存储控制信号生成第三数据的存储地址a_dout。其中,所述第三矩阵为对所述第一矩阵和所述第二矩阵执行计算之后得到的矩阵。示例性的,该实施例中的所述位图数据在所述位图矩阵中的位置为所述位图数据在所述位图矩阵中的行数,当所述矩阵计算为矩阵乘法计算,所述计算电路每计算完第一矩阵中的一行第一数据可以得到第三矩阵中的一行第三数据,即所述计算电路205中的每个计算单元输出第三矩阵中一行第三数据中的其中一个。由此,所述位图数据在所述位图矩阵中的行数可以确定输出的一行第三数据为第三矩阵中的哪一行数据。如图2所示,存储地址生成电路206接收第三数据存储控制信号,以确定输出的是第三矩阵的哪一行,之后根据第三矩阵的首地址p_o以及所述行数确定出输出一行第三数据的存储地址a_dout。可选的,当接收到所述控制信号生成电路203所发出的输出指令c_re之后,所述存储地址生成电路206将所述第三数据的存储地址a_dout发送出去。
101.可选的,如图2所示,所述矩阵计算电路200还包括:第一存储器207、第二存储器
208以及第三存储器209;其中,
102.所述第一存储器207用于存储所述第一数据和所述位图数据;根据所述第一数据的读取地址释放所述读取地址对应的所述第一数据至所述计算电路205,根据所述位图数据的读取地址释放所述位图数据至所述控制信号生成电路203;
103.所述第二存储器208用于存储第二数据:根据所述第二数据的读取地址释放所述第二数据至所述计算电路205;
104.所述第三存储器209用于根据所述第三数据的存储地址,保存所述第三数据至所述存储地址所指示的存储位置上。
105.在本公开实施例中,第一矩阵即数据矩阵的压缩矩阵,存放在第一存储器207中;位图矩阵为指示第一数据的位置的矩阵,也存放在第一存储器207中;第二矩阵即参数矩阵或参数矩阵的压缩矩阵,存放在第二存储器208中;第三矩阵即输出矩阵存放在第三存储器209中。第一存储器207、第二存储器208和第三存储器209可以独立并行访问,使得取数据、取参数、计算和存结果能够并行进行,从而提高矩阵计算的效率。
106.可以理解的,所述第一数据读取电路202与所述第一存储器207之间使用地址总线和数据总线连接,其中地址总线用于传输地址,第一数据读取电路通过地址电路使得第一存储器207将数据释放到数据总线上,与数据总线连接的电路能够得到其需要的第一数据或第一数据在所述第一矩阵中的位置;同样第二数据读取电路204与第二存储器208之间的连接关系类似,不再赘述。第三存储器209的地址总线与所述存储地址生成电路206连接,用于传输所述存储地址生成电路206生成的第三数据的存储地址,所述第三存储器209的数据总线与所述计算电路205连接,用于传输所述计算电路205计算得到的第三数据。
107.可以理解的,上述具体实施例中,是以位图数据在位图矩阵中的位置(即对应数据矩阵的位置)来确定需要读取的第二数据,在实际实现的过程中,也可以将所述第一矩阵和第二矩阵倒置,即根据与第二矩阵对应的位图矩阵中的位图数据的位置来确定读取的第一数据。即对于矩阵乘法计算来说,每次读取一个第二数据需要从第一矩阵中读取与之对应的一列第一数据,之后按列读取第二数据,这样每次计算完一列第二数据所得到的是一列第三数据,输出第三数据的时根据第二数据的位图矩阵的位图数据的列数可以确定输出的第三数据是第三矩阵的哪一列数据,并根据第三数据的首地址以及位图数据的列数存储一列第三数据。其他情况可以按照上述过程和具体的矩阵计算过程得到,在此不再赘述。
108.图5为本公开实施例提供的矩阵计算方法的流程图。如图5所示,该方法包括如下步骤:
109.步骤s501,解码矩阵计算指令得到第一矩阵的首地址、位图矩阵的首地址和第二矩阵的首地址,其中所述第一矩阵是由数据矩阵中的非0数据构成的矩阵,所述位图矩阵中的位图数据用于指示所述数据矩阵中的非0数据的位置;
110.步骤s502,根据所述第一矩阵的首地址生成第一数据的读取地址;
111.步骤s503,根据位图矩阵的首地址生成位图数据的读取地址;
112.步骤s504,根据所述第一数据的读取地址读取所述第一数据;
113.步骤s505,根据所述位图数据的读取地址读取所述位图数据;
114.步骤s506,根据所述位图数据生成第二数据读取控制信号;
115.步骤s507,根据所述第二矩阵的首地址和所述第二数据读取控制信号生成第二数
据的读取地址;
116.步骤s508,根据所述第二数据的读取地址读取所述第二数据;
117.步骤s509,根据所述第一数据和所述第二数据计算得到第三数据。
118.进一步的,所述矩阵计算方法,还包括:
119.解码矩阵计算指令得到第三矩阵的首地址;
120.根据所述位图数据生成第三数据存储控制信号
121.根据所述第三矩阵的首地址以及所述第三数据存储控制信息生成第三数据的存储地址;
122.将所述第三数据存入所述存储地址。
123.上述矩阵计算方法中的步骤为上述矩阵计算电路所执行的步骤,其具体执行过程可以参见上述对所述矩阵计算电路的描述,在此不再赘述。
124.在上文中,虽然按照上述的顺序描述了上述方法实施例中的各个步骤,本领域技术人员应清楚,本公开实施例中的步骤并不必然按照上述顺序执行,其也可以倒序、并行、交叉等其他顺序执行,而且,在上述步骤的基础上,本领域技术人员也可以再加入其他步骤,这些明显变型或等同替换的方式也应包含在本公开的保护范围之内,在此不再赘述。
125.本公开实施例还提供一种芯片,所述芯片包括上述实施例中任一矩阵计算电路。
126.以下以一个实际的应用场景来描述本公开实施例中的矩阵计算电路的工作过程。图6a为该实例应用场景中使用数据矩阵m1与参数矩阵m2相乘得到输出矩阵m3。其中m1为一个4*4的稀疏数据矩阵,其中包括大量的0元素,而m2为一个4*2参数矩阵,两者相乘得到一个4*2的输出矩阵。
127.在该实例中,所有矩阵元素均为fp32,即32bit表示一个数据,则每个矩阵中每个元素需要32/8=4b的存储空间。参数矩阵包括2列元素,因此计算电路205可以设置为由两个乘加器组成的向量处理单元。
128.如图6b所示为所述稀疏数据矩阵m1被压缩之后得到的两个矩阵,即存储在第一存储器中的第一矩阵m1_c和位图矩阵m1_map_c;其中,第一矩阵m1_c包括数据矩阵m1中的非0数据1、2、3、4,并且按照先行后列的顺序依次(即逐行)存储,第一矩阵m1_c中的每个元素需要4b来存储。第一数据读取电路202每次读取完一个第一数据之后,地址p_d自动加4b以得到下一个第一数据的地址,即:p_d=p_d 4。由于m1_map中的数据都是位数据,每一行只有4个数据,所以在存储时,一行m1_map只需要占用4bit的存储空间。这样,m1_map的2行可以存在一个字节中,从而节省存储空间。每计算完2行,m1_map的取数地址变化为:p_d_map=p_d_map 1。
129.如图6c所示为第二矩阵即参数矩阵的逻辑存储格式,其按行顺序存储。每一行的第二数据的大小为2*4=8b,每一行的存储首地址由第二矩阵的初始地址p_w和行数n_r决定,即:p_w 8*n_r。每次按照p_w读取一行第二数据,之后更新p_w的值。
130.在进行计算时,通过指令解码电路201解码出m1_c的首地址p_d、m1_map_c的首地址p_map和m2的首地址p_w,之后第一数据读取电路202根据首地址p_d从第一存储器207中读出第一个第一数据1,以及m1_map_c的前两行数据,前两行位图数据中第一值为1的位图数据表示数据矩阵中与该位图数据对应的位置处有非零数据,即第一数据1;控制信号生成电路203,得到第一数据1的位图数据,根据位图矩阵的维度可以判断出所述位图数据的列
数为1,即读取到的第一个位图数据为1,通过该位图数据的逻辑位置1,和该位图矩阵的列数4,行数为4,可以得到该位图数据在位图矩阵中的位置为(1,1),即第一行第一列,由此可以产生第二数据读取电路204的控制信号,该控制信号中带有所述位图数据的列数1;第二数据读取电路204则根据第二矩阵的首地址p_w和该位图数据的列数1,从第二存储器208中读取与列数1对应的第1行第二数据1和2;在得到第一数据2的位图数据时,判断位图数据2的逻辑位置为7,即第7个位图数据,则根据该位图矩阵的列数为4和行数为4,可以得到该位图数据在位图矩阵中的位置为(2,3),即第二行第三列,由此可以产生第二数据读取电路204的控制信号,该控制信号中带有所述位图数据的列数3;第二数据读取电路204则根据第二矩阵的首地址p_w和该位图数据的列数3,从第二存储器208中读取与列数3对应的第3行第二数据1和2即位图数据的列数决定第二数据读取电路204所生成的第二数据的读取地址,设位图数据的列数为col,则所述第二数据的读取地址为:p_w 8*(col-1),注意此示例中为了便于理解,将列数从1开始标注,实际上也可以从0开始标注,即第一个数据的行列数为(0,0),此时需要调整第二数据的读取地址为:p_w 8*col;总之通过位图数据的列数,第二数据读取电路204可以确定一行第二数据的首地址,之后读取出该一行第二数据。
131.在取出第一数据以及一行第二数据之后,第一数据被传送至所述两个乘加器的一个输入端口,两个第二数据分别被传送至两个乘加的另一个输入端口,乘加器根据所接收到的第一数据和第二数据进行乘加计算,将第一数据和第二数据进行乘法计算并与上次乘加计算得到结果做累加得到第三数据。所述计算电路205按照上述方式进行乘加计算直至所述位图数据的列数发生变化,表示一行第一数据计算完毕。
132.以该实例为例,当读取到第二个第一数据2,其对应的位图数据的列数为3,不同于第一个第一数据1的x坐标1,则表示第一矩阵m1_c中的一行第一数据已经计算完毕,此时控制信号生成电路203生成输出指令c_re并发送至所述计算电路205,并发送存储控制信号c_ado至所述存储地址生成电路206;在收到所述存储控制信号c_ado之后,所述存储地址生成电路206生成输出矩阵m3的一行第三数据的存储地址,所述计算电路205将一行第三数据释放至数据总线上,第三存储器209根据第三数据的存储地址存储所述数据总线上的一行第三数据。每次完成一行输出的计算,存储地址生成电路206都会根据位图数据所在的行数来计算第三数据的存储地址。输出矩阵m3的每一行有2个fp32的数据,可知每一行的存储大小为2*4=8b。如果输出矩阵存储的首地址为p_m,位图数据所在的行数为row,那么此输出行的存储地址为:p_m=p_m 8*row。
133.迭代执行上述步骤,直至所有的第一数据均被读取出来为止,得到第三存储器中的输出矩阵,即第一矩阵和第二矩阵的矩阵计算结果。
134.本公开实施例提供一种电子设备,包括:存储器,用于存储计算机可读指令;以及一个或多个处理器,用于运行所述计算机可读指令,使得所述处理器运行时实现实施例中的任一所述的矩阵计算方法。
135.本公开实施例还提供一种非暂态计算机可读存储介质,其特征在于,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使计算机执行前述实施例中的任一所述的矩阵计算方法。
136.本公开实施例还提供一种计算机程序产品,其中,其特征在于:包括计算机指令,当所述计算机指令被计算设备执行时,所述计算设备可以执行前述实施例中的任一所述的
矩阵计算方法。
137.本公开实施例还提供一种计算装置,其特征在于,包括所述实施例中的任一所述的芯片。
138.本公开附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、任务段、或代码的一部分,该模块、任务段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
139.描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定。
140.本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。
141.在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或快闪存储器)、光纤、便捷式紧凑盘只读存储器(cd-rom)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献