CN102541814B - 用于数据通信处理器的矩阵计算装置和方法 - Google Patents
用于数据通信处理器的矩阵计算装置和方法 Download PDFInfo
- Publication number
- CN102541814B CN102541814B CN201010607242.9A CN201010607242A CN102541814B CN 102541814 B CN102541814 B CN 102541814B CN 201010607242 A CN201010607242 A CN 201010607242A CN 102541814 B CN102541814 B CN 102541814B
- Authority
- CN
- China
- Prior art keywords
- matrix
- queue
- unit
- instruction
- result
- 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.)
- Expired - Fee Related
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种用于数据通信处理器的矩阵计算装置和方法。本发明数据通信处理器的矩阵计算装置包括矩阵预处理单元、矩阵运算指令形成单元、输入输出控制单元和至少一个矩阵计算元。本发明用于数据通信处理器的矩阵计算方法包括矩阵预处理步骤、矩阵运算指令形成步骤和矩阵计算步骤。由于本发明对矩阵进行了预处理,把值为0的矩阵元素在进行矩阵相乘之前就去掉了,也就是使为0的矩阵元素不参与运算,因此大大提高了矩阵计算效率。
Description
技术领域
本发明涉及微处理器体系结构技术领域,尤其涉及一种用于数据通信处理器的矩阵计算装置和方法。
背景技术
目前广泛应用于数据通讯领域的各种各样的微处理器中,大都要求具有较强的数据处理或数据运算能力,在这些数据处理或数据运算中,一个相当多的要求就是具有相当高效的矩阵运算能力。矩阵运算最终会分解为矩阵元素的乘法加法运算,乘法加法运算通常由乘法加法单元(MAC,简称乘加)来实现。因此在矩阵运算方面,乘加运算的效率对矩阵运算能力起到关键的决定作用。
大多现代处理器在做矩阵运算中都依赖于向量指令的执行,对矩阵运算本身没有进行很好的处理和优化,只是单单地依次用一个矩阵的行元素乘以另一个矩阵相应的列元素,再对乘积求和等方式进行的。对于常见的矩阵向量乘法运算,只能获得很少的峰值运算效率,而在多处理器系统中,单个处理器的运算效率更低。由于处理器的存储运算带宽受到很大的限制,因此很难获得高的数据吞吐量。
因此,单纯依赖于提高单个运算单元MAC的运算速度已经很难获得很大的矩阵乘法性能的提高。
发明内容
本发明公开了一种计算效率高的用于数据通信处理器的矩阵计算装置和方法。
为了解决上述问题,本发明用于数据通信处理器的矩阵计算装置的技术方案包括:
矩阵预处理单元,将两个要进行相乘的矩阵中的一个矩阵A表示为:{非零元素值,行地址,列地址};
矩阵运算指令形成单元,根据经所述矩阵预处理单元处理过的矩阵A和另一个矩阵B,形成矩阵运算的传送指令和运算指令;
输入输出控制单元,用于缓冲所述传送指令和所述运算指令以及矩阵计算结果;
至少一个矩阵计算元,用于根据所述输入输出控制单元传送过来的所述传送指令和所述运算指令进行矩阵相乘并把结果输出给所述输入输出控制单元。
所述矩阵计算元包括:数据路径队列DPATH_CQUE、矩阵A队列A_MQUE、列向量b队列B_VQUE、乘法加法单元MAC和结果队列RES_VQUE, 其中:
所述数据路径队列DPATH_CQUE用于存放从所述输入输出控制单元传送的所述传送指令;
所述矩阵A队列A_MQUE用于存放从所述输入输出控制单元传送的所述运算指令;
所述列向量b队列B_VQUE,用于存放所述另一个矩阵B的列向量;
所述乘法加法单元MAC,用于把所述矩阵A队列A_MQUE中的行向量和所述列向量b队列中的列向量进行乘法加法运算并将结果存入所述结果队列RES_VQUE。
所述数据路径队列DPATH_CQUE包括选择地址域、接收使能域、接收选择域、右送选择域和左送选择域,其中:
所述选择地址域用于选择要从所述结果队列RES_VQUE中读出的内容所在的读取地址;
所述接收使能域用于指示是否向所述列向量b队列B_VQUE中写入;
所述接收选择域用于选择写入所述列向量b队列B_VQUE的内容是来自左方的矩阵计算元还是来自右方的矩阵计算元;
所述右送选择域用于选择是将来自左方的矩阵计算元的数据还是将所述结果队列RES_VQUE中所述读取地址处的内容送至右方矩阵计算元;
所述左送选择域用于选择是将来自右方矩阵计算元的数据还是将所述结果队列RES_VQUE中所述读取地址处的内容送至左方矩阵计算元。
在所述矩阵A队列A_MQUE中存放的所述运算指令包括写结果域、非零元素值域、行地址域和列地址域,其中:
所述写结果域用于指示所述乘法加法单元MAC的计算结果是否要写入所述结果队列RES_VQUE。
所述输入输出控制单元包括DPATH指令FIFO和AB指令FIFO。
所述输入输出控制单元只要所述DPATH指令FIFO和AB指令FIFO未满,就继续接收新的指令序列直到所述DPATH指令FIFO和AB指令FIFO满或者指令发送完毕。
优选地,矩阵A队列A-_MQUE中加入空指令,其形式为{写结果标志置位,0,0,0}。
优选地,所述矩阵预处理单元和所述矩阵运算指令形成单元可以由编译软件实现。
相应地,本发明用于数据通信处理器的矩阵计算方法的技术方案包括:
矩阵预处理步骤,将两个要进行相乘的矩阵中的一个矩阵A表示为:{非零元素值,行地址,列地址};
矩阵运算指令形成步骤,根据经矩阵预处理的矩阵A和另一个矩阵B,形成矩阵运算的传送指令和运算指令;
矩阵计算步骤,用于根据所述传送指令和所述运算指令进行矩阵相乘。
所述矩阵计算步骤进一步包括:
将所述传送指令载入数据路径队列DPATH_CQUE;
将所述计算指令中与矩阵A对应的部分载入矩阵A队列A_MQUE,与矩阵B对应的部分载入列向量b队列B_VQUE;
在矩阵A队列A_MQUE的控制下由乘法加法单元MAC将矩阵A队列A_MQUE中的非零值与以该非零值的列地址为索引的列向量b队列B_VQUE的值进行相乘。
优选地,本发明用于数据通信处理器的矩阵计算方法还包括在所述矩阵计算元的矩阵A队列A-_MQUE中加入空指令,其形式为{写结果标志置位,0,0,0}。
所述矩阵预处理步骤还包括将矩阵B分解为一个个的列向量。
与现有技术相比,本发明用于数据通信处理器的矩阵计算装置和方法的有益效果为:
首先,由于本发明对矩阵进行了预处理,把值为0的矩阵元素在进行矩阵相乘之前就去掉了,也就是使为0的矩阵元素不参与运算,因此大大提高了矩阵计算效率。
其次,本发明采用矩阵运算指令形成单元,其能够根据要相乘的矩阵形成该矩阵运算的传送指令和运算指令,即形成矩阵运算的指令流,由该指令流中的指令去完成相应的矩阵运算动作,这样极大的提高了矩阵乘法的适应性和灵活性,从而可以适应任何阶数的矩阵乘法运算。
附图说明
参照附图根据仅作为例子给出的如下描述,将更清楚地理解本发明,在附图中:
图1A是一个3×3矩阵的示例;
图1B是依据本发明用于数据通信处理器的矩阵计算装置的将图1A所示的矩阵进行预处理所得结果的示意图;
图2是本发明用于数据通信处理器的矩阵计算装置的示意图;
图3是依据本发明用于数据通信处理器的矩阵计算装置的具有三个矩阵计算元的示例示意图;
图4是依据本发明用于数据通信处理器的矩阵计算装置的矩阵计算元的示意图;
图5是依据本发明用于数据通信处理器的矩阵计算装置的输入输出控制单元的示意图;
图6是一个列向量b的示例。
具体实施方式
我们知道,大多参与运算的矩阵,其有许多元素都是0元素,如图1A所示,是一个3×3矩阵,其A(0,0)、A(0,2)、A(1,1)、A(2,0)和A(2,1)都是0元素。由于0元素乘以任何数都是0,所以就没有必要再对这些元素进行计算,这样可以节省大量的运算时间,尤其对于大型矩阵的计算更是如此。
如图2所示,本发明用于数据通信处理器的矩阵计算装置包括:
矩阵预处理单元1,将两个要进行相乘的矩阵中的一个矩阵A表示为:{非零元素值,行地址,列地址};
矩阵运算指令形成单元3,根据经所述矩阵预处理单元1处理过的矩阵A和另一个矩阵B,形成矩阵运算的传送指令和运算指令;
输入输出控制单元4,用于缓冲所述传送指令和所述运算指令以及矩阵计算结果;
至少一个矩阵计算元2,用于根据所述输入输出控制单元传送过来的所述传送指令和所述运算指令进行矩阵相乘并把结果输出给所述输入输出控制单元。
从上述可知,本发明用于数据通信处理器的矩阵计算装置首先由所述矩阵预处理单元1对要进行相乘的两个矩阵中的一个矩阵进行处理,例如设有两个矩阵:矩阵A和矩阵B,如果A×B,则对矩阵A进行处理,得到{非零元素值,行地址,列地址},如图1B所示,由于图1A所示的矩阵共有4个非零元素,因此经过所述矩阵预处理单元1处理后就得到四行数据的矩阵。矩阵运算指令形成单元3基于经过处理得到的数据以及矩阵B,根据两个矩阵相乘的原理形成这两个矩阵相乘的传送指令和运算指令。该传送指令和运算指令通过数据输入输出控制单元3传送给矩阵计算元2,由矩阵计算元2进行乘法加法运算最后输出结果。换句话说,本发明只是把矩阵A中那些非零元素与矩阵B的列向量进行了乘法加法操作,对于那些对结果没有任何影响的零元素在相乘之前就去掉了,因此本发明用于数据通信处理器的矩阵计算装置大大提高了矩阵计算的效率。
此外,所述矩阵计算元2包括:数据路径队列DPATH_CQUE、矩阵A队列A_MQUE、列向量b队列B_VQUE、乘法加法单元MAC和结果队列RES_VQUE,其中:
所述数据路径队列DPATH_CQUE用于存放从所述输入输出控制单元4传送的所述传送指令;
所述矩阵A队列A_MQUE用于存放从所述输入输出控制单元4传送的所述运算指令;
所述列向量b队列B_VQUE,用于存放所述另一个矩阵B的列向量;
所述乘法加法单元MAC,用于把所述矩阵A队列A_MQUE中的行向量和所述列向量b队列中的列向量进行乘法加法运算并将结果存入所述结果队列RES_VQUE。
对于矩阵计算元2的个数,基于这样的考虑:通常在数据通讯的处理器中,数据传送的位宽并不是无限的,矩阵计算元2越多,需要初始化的矩阵计算元2的个数也相应增多,由于数据传送带宽的问题,初始化的时间以及结果传送的时间也相应增加,因此随着矩阵计算元2个数的增加,矩阵计算效率会逐渐减小,硬件成本大幅增加。如果采用1个矩阵计算元,那么将无法实现并行操作,即在矩阵计算元2计算过程中,只能等待其计算完成才能进行下一步动作。而采用2个矩阵计算元2,可以改善这一情况:在一个矩阵计算元2计算过程中,转移另一个矩阵计算元2的计算结果,这样形成了乒乓操作。当然可以加入更多的矩阵计算元2,但是,当矩阵计算元2个数增多,可能会面临来不及转移个别矩阵计算元2计算结果的尴尬。另外,矩阵计算元2个数的增加,伴随着数据路径的延长,这在硬件设计中会带来时序设计上的困难。基于这些考虑,优选为3个。如图3所示的示例,其中只是给出了输入输出控制单元4和矩阵计算元2部分,本例包括三个矩阵计算元2,对于3×3矩阵乘法,每个矩阵计算元2可以计算一个3×3矩阵与一个3×1列向量的乘法,这样三个矩阵计算元2就可以一次计算出一个3×3矩阵与另一个3×3矩阵的乘法运算,对于其它更高阶的矩阵运算比如一个9×9矩阵与另一个9×9矩阵的乘法,可以通过矩阵拆分的方法,将两个参与相乘的9×9矩阵拆分成9个3×3矩阵的乘法或者9个9×9矩阵与9×1列向量的乘法,视拆分算法而定,然后按照拆分算法分别对拆分的矩阵或向量进行计算,拼合,形成最终的9×9矩阵计算结果。
如图4所示,示出了一个矩阵计算元2结构的例子。从该图4可以看出,一个矩阵计算元2,包括数据路径队列DPATH_CQUE、矩阵A队列A_MQUE、列向量b队列B_VQUE、乘法加法单元MAC和结果队列RES_VQUE, 其中:所述数据路径队列DPATH_CQUE包括选择地址域、接收使能域、接收选择域、右送选择域和左送选择域以及若干选择器,其中:
所述选择地址域用于选择要从所述结果队列RES_VQUE中读出的内容所在的读取地址;
所述接收使能域用于指示是否向所述列向量b队列B_VQUE中写入;
所述接收选择域用于选择写入所述列向量b队列B_VQUE的内容是来自左方的矩阵计算元还是来自右方的矩阵计算元;
所述右送选择域用于选择是将来自左方的矩阵计算元的数据还是将所述结果队列RES_VQUE中所述读取地址处的内容送至右方矩阵计算元;
所述左送选择域用于选择是将来自右方矩阵计算元的数据还是将所述结果队列RES_VQUE中所述读取地址处的内容送至左方矩阵计算元。
另外,在所述矩阵A队列A_MQUE中存放的所述运算指令包括写结果域、非零元素值域(A(i,j)值)、行地址域和列地址域,其中:
所述写结果域用于指示所述乘法加法单元MAC的计算结果是否要写入所述结果队列RES_VQUE。
从该图4还可以看出, 矩阵计算元2还可以包括五个二选一选择器,一个与门和一个或门。对于所述五个二选一选择器,其中第一选择器由数据路径队列DPATH_CQUE中传送指令的左送选择域控制,用于选择将从右矩阵计算元的数据或将从本矩阵计算元结果队列RES_VQUE的数据送出至向左端口,第二选择器由数据路径队列DPATH_CQUE中传送指令的右送选择域控制,用于选择将从左矩阵计算元的数据或将从本矩阵计算元结果队列RES_VQUE的数据送出至向右端口,第三选择器由数据路径队列DPATH_CQUE中传送指令的接收选择域控制,用于选择将从右矩阵计算元的数据或将从左矩阵计算元的数据送至本矩阵计算元第三选择器的一个输入,第四选择器由压入B信号控制,用于选择将数据B或将从第三选择器来的数据送至本矩阵计算元结果队列RES_VQUE,第五选择器由矩阵A队列A_MQUE中运算指令的写结果域控制,用于选择将常数0或将上一次乘法加法单元MAC的计算结果送至乘法加法单元MAC中。
所述与门,用于对数据路径队列DPATH_CQUE中传送指令的右送选择和左送选择域中的逻辑值做逻辑与运算,当输出结果为逻辑真值时写入信号有效,将本矩阵计算元的计算结果写入到输入输出控制单元的结果存储器中。
所述或门,用于对数据路径队列DPATH_CQUE中传送指令的接收选择及压入B信号做逻辑或运算,当输出结果为逻辑真值时,列向量b队列B_VQUE的写入有效,将第四选择器的输出结果写入列向量b队列B_VQUE。
再如图4所示的一个矩阵计算元2的示例结构,所述矩阵计算元2的工作过程是这样的,首先由输入输出控制单元4将传送指令存入数据路径队列DPATH_CQUE,将运算指令存入矩阵A队列A_MQUE和列向量b队列B_VQUE。其中压入D和数据D来自输入输出控制单元4,用于存入传送指令到数据路径队列DPATH_CQUE。当压入D信号置位时,表示要将数据D即传送指令写入数据路径队列DPATH_CQUE当前写指针指向的地址处,然后其写指针自动增1,指向数据路径队列DPATH_CQUE下一个地址处。弹出D信号与矩阵A队列A_MQUE相连,由矩阵A队列A_MQUE中运算指令的写结果域控制,当写结果域置位时,弹出D信号有效,同时数据路径队列DPATH_CQUE中当前读指针处的指令有效。当弹出D信号有效时,表示执行数据路径队列DPATH_CQUE中当前读指针处的指令,然后读指针自动增1,指向数据路径队列DPATH_CQUE中下一个地址处指令。压入A和数据A来自输入输出控制单元4,用于存入运算指令到矩阵A队列A_MQUE,当压入A信号置位时,表示要将数据A即运算指令写入矩阵A队列A_MQUE中当前写指针指向的地址处,然后写指针自动增1。弹出A与列向量b队列B_VQUE相连,当置位时,表示读出矩阵A队列A_MQUE中当前读指针处的指令,然后读指针自动增1,指向矩阵A队列A_MQUE中下一个地址处,通常,只要列向量b队列B_VQUE非空,弹出A即有效。压入B及数据B来自输入输出控制单元4,其中压入B连到第四选择器控制端,并与或门的一个输入相连。当压入B信号置位时,由第四选择器选择数据B,由或门输出列向量b队列B_VQUE的写入信号,将列向量b写入到列向量b队列B_VQUE中。当数据路径队列DPATH_CQUE,矩阵A队列A_MQUE,列向量b队列B_VQUE配置完成,这个由请求A,请求D指示,当这些信号无效时,表示数据路径队列DPATH_CQUE和矩阵A队列A_MQUE中已经装好了待执行的指令,然后由输入输出控制单元4通过使能信号通知矩阵计算元2开始矩阵计算指令的执行。对于执行的运算指令,当写结果域置位时,表示此次乘法加法单元MAC的计算结果要写入结果队列RES_VQUE中,则将乘法加法单元MAC的计算结果存入结果队列RES_VQUE中运算指令行地址域指向的地址处,同时写结果域控制第五选择器选择常数0作为乘法加法单元MAC的输入对乘法加法单元MAC清零,为新一轮乘法加法单元MAC的计算做准备。此时,数据路径队列DPATH_CQUE中当前读指针处的指令由于运算指令写结果域的置位而生效,指示本次计算结果是要传到向左方的矩阵计算元还是向右的矩阵计算元,这个由传送指令的选择地址域和右送选择域以及左送选择域共同决定。当右送选择域置位而左送选择域清零时,表示本次要将结果队列RES_VQUE中选择地址指向的数据传送到向右的矩阵计算元,传送到向右由第二选择器完成,由于右送选择域控制第二选择器,右送选择域置位指示第二选择器选择结果队列RES_VQUE中的数据并送出向右端口。当右送选择域清零而左送选择域置位时,表示本次要将结果队列RES_VQUE中选择地址指向的数据传送到向左的矩阵计算元,传送到向左由第一选择器完成,由于左送选择域控制第一选择器,左送选择域置位指示第一选择器选择结果队列RES_VQUE中的数据并送出向左端口。另外,本矩阵计算元此时也可以接收从左方的矩阵计算元的计算结果,也可以接收从右方的矩阵计算元的计算结果,这个由传送指令的接收选择域和接收使能域共同决定。接收选择域控制第三选择器,当接收选择域置位时,表示选择右方矩阵计算元数据作为接收数据,当接收选择域清零时,表示选择左方矩阵元数据作为接收数据。由第三选择器选择的来自左方矩阵元数据或来自右方矩阵元数据送至第四选择器的一个输入,由压入B信号控制第四选择器控制是否将此输入输出。接收使能域通过或门与压入B信号做或运算,然后直接控制列向量b队列B_VQUE的写入,当其置位表示将第四选择器选择的输出数据写入列向量b队列B_VQUE中当前写地址处,然后写地址自动增1。如果本次计算结果需要写入输入输出控制单元4的结果存储器中,则由矩阵A队列A_MQUE中的运算指令的行地址域和列地址域指示当矩阵计算结果要写入输入输出控制单元4的结果存储器中的位置,由数据路径队列DPATH_CQUE中的左送选择域,右送选择域连接至与门做逻辑与运算,共同置位使能输入输出控制单元4的结果存储器的写入。最后,当数据路径队列DPATH_CQUE中的指令全部执行完毕后,通过完成信号通知输入输出控制单元4本矩阵计算元计算完成。在整个计算过程中,一旦矩阵A队列A_MQUE中指令个数少于某一阈值,即通过请求A信号向输入输出控制单元4的AB指令FIFO发出请求,然后由输入输出控制单元4的AB指令FIFO向矩阵A队列A_MQUE中填入新的指令。同样,对于数据路径队列DPATH_CQUE,一旦数据路径队列DPATH_CQUE中指令个数少于某一阈值,即通过请求D信号向输入输出控制单元4的DPATH指令FIFO发出请求,然后由输入输出控制单元4的DPATH指令FIFO向数据路径队列DPATH_CQUE填入新的指令。
对于具有三个矩阵计算元2来说,由矩阵计算元2的矩阵A队列A-_MQUE的A(i,j)值域表示要计算的A矩阵元素,该元素的行地址和列地址也同时编码在矩阵计算元2的矩阵A队列A-_MQUE中,其中行地址也作为计算结果的目标地址,而列地址用于寻址矩阵计算中的B向量b(j)。当做完矩阵A一行向量与B列向量的乘加结果(即:∑A(i,j)×b(j)所得结果即为矩阵A的行向量A(i)与B(j)列向量乘积AB(i,j))后,矩阵计算元2的矩阵A队列A-_MQUE的行地址域指示送入结果队列RES_VQUE中。同时,其他矩阵计算元2计算矩阵A与其它列向量的运算。运算结果各自存储在他们的结果队列RES_VQUE中。在每个矩阵计算元2计算结束后,由矩阵计算元2的数据路径队列DPATH_CQUE指示该矩阵计算元2的结果队列RES_VQUE中的值是否要传送至输入输出控制单元4。这时,只要矩阵计算元2的矩阵A队列A-_MQUE未空,矩阵计算元2就继续进行新指令的执行,直到矩阵A队列A-_MQUE空为止,表示该矩阵计算元2计算结束,当所有三个矩阵计算元2全部计算完毕后,所有矩阵计算即完成。
如图5所示,示出了输入输出控制单元4的示意图。从该图5中可以看出所述输入输出控制单元4包括DPATH指令FIFO、AB指令FIFO和结果存储器,其中,DPATH指令FIFO和AB指令FIFO分别用于缓冲矩阵运算指令形成单元3所形成的传送指令和运算指令;结果存储器用于存放矩阵相乘的最后结果。
所述输入输出控制单元3只要所述DPATH指令FIFO和AB指令FIFO未满,就继续接收新的指令序列直到所述DPATH指令FIFO和AB指令FIFO满或者指令发送完毕。
所述矩阵运算指令形成单元3及矩阵预处理单元1均可以由编译软件实现,也就是将需要计算的矩阵按照矩阵计算元的指令格式写成矩阵计算元可以识别的指令。将矩阵相乘动作分解为矩阵A队列A-_MQUE中的运算指令和数据路径DPATH_CQUE中的运算指令动作,形成可以被矩阵计算单元执行的指令流。形成的指令流是作为DSP核的数据,DSP对这些数据不做解释。当执行时,由DSP核将这些数据载入矩阵计算元2中,由矩阵计算元2解释执行。
假设矩阵m×m:
A11 A12 A13 … A1m
A21 A22 A23 … A2m
A31 A32 A33 … A3m
… …
Am1 Am2 Am3 … Amm
该矩阵以文本格式输入到矩阵预处理单元1中,矩阵行列按照矩阵的格式输入,矩阵元素之间以空格分隔,Amm表示第m行第m列矩阵元素。假设A,B矩阵需要做乘积运算,那么分别将A,B按照矩阵预处理单元1要求的输入格式输入在一文本文件或称源文件中。
对于矩阵预处理单元1,主要处理过程如下:
首先,其读入包含AB矩阵的源文件,进行第一次扫描,扫描依照先行后列从左至右的顺序逐一扫描A矩阵元素,假如扫描到一个矩阵元素为非零值,则构造一个新节点{结果有效,非零元素,行地址,列地址, 上一元素指针,下一元素指针},在该节点记录该非零元素值,非零元素值的行地址,非零元素值的列地址,并把该节点链接到上一个节点中下一元素指针指示的地址。假如扫描到一个矩阵元素为零,那么跳过该矩阵元素,继续下一个矩阵元素的扫描。扫描持续进行直到矩阵A的所有元素扫描完毕。经过第一次扫描,应该形成一条双向链表,链表中所有节点记录了矩阵A中非零元素的值及行列地址。假设此双向链表为DL1。
接着进行第二次扫描,对第二个矩阵B矩阵进行处理,矩阵预处理单元1依照先列后行从左至右的顺序逐一扫描B矩阵的所有元素,将矩阵B拆解为列向量依次放入一个一维数组中。假设此数组为A1。至此,包含AB矩阵的源文件已经完全转化为矩阵预处理单元1内部所需要的数据结构。
然后,进行第三次扫描,针对A1数组中的每一列向量,该列向量对应B矩阵的一个列向量,重复扫描DL1链表,对于每一个扫描的DL1链表的节点node,由该节点node中记录的非零元素值Aij的列地址在A1数组中查找与之相乘的列的元素bj,该bj元素对应B矩阵某一列向量的第j行值,假如对应的bj值为非零元素,则将DL1链表中的节点node记录的A矩阵的非零元素信息复制到一个新的数组中,该数组记录的字段为{结果有效,A矩阵的非零元素值,A矩阵的非零元素行地址,A矩阵的非零元素列地址}。否则,假如A1数组中对应的bj值为零元素,那么跳过DL1链表中的节点node,扫描DL1链表的下一个节点node。这里跳过DL1链表的节点node是由于发现该节点node对应的A1数组中的bj值为零元素,代表Aij,bj两个矩阵元素在矩阵AB相乘时结果为零,因此没必要记录此非零元素值。扫描继续直到DL1链表所有节点扫描结束,完成后应该形成一个新的数组,记为B1。当针对A1数组一列向量的扫描结束,继续针对A1数组的下一个列向量进行下一次DL1链表的扫描,重复本段所描述的过程,直到A1数组所有列向量相关的数组都形成为止。最后,当所有扫描完成,应该会形成B1,B2,B3…Bm共m个数组,该m个数据由与B矩阵每一个列向量做乘积的A矩阵的非零元素值构成。此后DL1链表不再使用。在上述m次扫描过程中,对于每一个扫描的DL1链表的节点node,如果该节点node中记录的非零元素值Aij是其所在行的最后一个非零元素,这可以通过比较该node节点记录的非零元素的行地址与下一个节点中记录的非零元素的行地址得出,则在将该node节点信息复制到新数组B中时,将结果有效字段置1,否则,如果该节点node中记录的非零元素值Aij不是其所在行的最后一个非零元素,则在将该node节点信息复制到新数组B中时,将结果有效字段置0。如果该节点node 是其所在行的最后一个元素,而对应的bj为零元素,则将上一个在新数组B中复制的节点node的结果有效字段置1。这样,保证每行都有一个节点node在新数组中的结果有效字段置1。本次会重复扫描DL1链表m次,为叙述方便起见,将该m 次重复扫描当做一次扫描。
最后,对生成的B1,B2,B3,…Bm数组进行分组,分组顺序编号,每三个形成一组,共m/3组,将每组的三个B数组编号写入一个新的数组C中,数组C的元素由字段{数组Bi标号i,数组Bj编号j,数组Bk编号k}构成。不足3的数组编号填入-1。然后矩阵预处理单元1分别扫描数组C元素{数组Bi标号i,数组Bj编号j,数组Bk编号k}指示的三个数组Bi,Bj,Bk。每个扫描过程相同,当扫描Bi数组时,依次检查Bi数组的每个元素bbi,由{结果有效,A矩阵的非零元素值,A矩阵的非零元素行地址,A矩阵的非零元素列地址}字段构成,当该元素bbi的结果有效字段置0时,计数器增1,否则,当该元素bbi的结果有效字段置1时,将计数器值记录在一新数组Di中,然后该计数器值清零,重复上述过程直到Bi数组的所有元素扫描完毕。当Bi数组扫描完毕后,应该形成一个新数组Di,数组Di的元素个数为Bi数组中结果有效字段置1 的元素个数,新数组Di中每个元素值记录了Bi数组中结果有效字段置1 的元素前面那些结果有效字段置0的元素个数。同样对Bj,Bk分别扫描,扫描过程与Bi相同,这样,当Bi、Bj和Bk扫描完毕,应该形成了三个数组Di、Dj和Dk。当数组C中一组扫描完毕,重复进行下一组扫描,直至数组C中所有组扫描完毕,也即完成了B1,B2,B3,..Bm共m次的扫描,最终形成了D1,D2,D3,…Dm共m个数组。至此矩阵预处理单元1处理完毕,其是将输入的包含AB矩阵的源文件转化为A数组,B数组,C数组,D数组,供矩阵运算指令形成单元3使用。后续矩阵运算指令形成单元3将使用A,B,C,D四类数组作为输入将AB矩阵乘法转化为可以被矩阵计算单元执行的指令流。
对于矩阵运算指令形成单元3,其处理过程如下:
首先,读入数组C的第一个元素c1,本次是为生成矩阵计算元2的数据路径队列DPATH_CQUE的传送指令。如果该元素不是矩阵C的最后一个元素,那么根据读出的数组C的元素c1{i,j,k},分别读出对应的数组Di,Dj,Dk的第一个元素值di1,dj1,dk1,该元素值分别记录了Bi,Bj,Bk数组中第一个结果有效字段置1 的元素前面那些结果有效字段置0的元素个数。实际上Bi数组包含的是矩阵A中与矩阵B第i列向量做乘积时的非零元素信息,同样,Bj数组包含的是矩阵A中与矩阵B第j列向量做乘积时的非零元素信息,Bk数组包含的是矩阵A中与矩阵B第k列向量做乘积时的非零元素信息,这里Bi,Bj,Bk数组的标号被放入C数组元素c1中,表示将Bi,Bj,Bk数组作为一组,在由矩阵计算单元执行时,分别载入三个矩阵计算元,由三个矩阵计算元分别计算Bi数组包含的矩阵A与矩阵B第i列向量的乘积,Bj数组包含的矩阵A与矩阵B第j列向量的乘积,Bk数组包含的矩阵A与矩阵B第k列向量的乘积。当Bi,Bj,Bk数组中结果有效字段置1时,表示在由矩阵运算指令形成单元3生成矩阵A队列A-_MQUE中的运算指令时,将该矩阵A队列A-_MQUE中的运算指令的写结果有效字段置位。这样,当执行此条指令时,会将计算结果写入结果队列RES_VQUE。由此可知,读出的数组Di,Dj,Dk的元素值虽然记录了Bi,Bj,Bk数组中结果有效字段置1 的元素前面那些结果有效字段置0的元素个数,实际上的意思表示的是矩阵计算元2在本次写结果写入队列RES_VQUE前要执行的指令条数。这个指令条数将指导矩阵运算指令形成单元3如何生成数据路径队列DPATH_CQUE中的传送指令。矩阵运算指令形成单元3分别读出对应的数组Di,Dj,Dk的第一个元素值di1,dj1,dk1后,比较di1,dj1,dk1,如果di1,dj1,dk1三个值均不相等,说明矩阵计算元2计算结果传回输入输出控制单元4的结果存储器中时不会出现冲突,那么按照di1,dj1,dk1三个值从小到大的顺序分别为三个矩阵计算元生成三组指令,di1,dj1,dk1三个值从小到大的顺序实际表示的是三个矩阵计算元计算结果的完成顺序。第一组指令将最小值di1即最早完成的矩阵计算元的计算结果传回输入输出控制单元的结果存储器中,第二组指令将中间值dj1即次早完成的矩阵计算元的计算结果传回输入输出控制单元4的结果存储器中,第三组指令将最大值dk1即最晚完成的矩阵计算元的计算结果传回输入输出控制单元的结果存储器中,每组指令对应三条数据路径队列DPATH_CQUE的传送指令,每组内的三条指令分别分布在三个矩阵计算元中,形式为{选择地址为结果队列地址,接收不使能,接收选择不管,左送选择使能,右送选择使能},如果相应矩阵计算元要传送结果,那么将左送选择使能,右送选择使能,否则左送选择不使能,右送选择不使能。由于每次只能有一个矩阵计算元传送结果回输入输出控制单元4的结果存储器中,否则会出现冲突,所以每组指令中只有一条指令的左送选择使能,右送选择使能字段是置位的。由于没有接收,所以每组指令的接收不使能,接收选择不管。对于选择地址字段分别填入本次读取Di,Dj,Dk时的索引值,对应矩阵计算元的写入结果地址。假如di1,dj1,dk1三个值有相等的情况,说明在矩阵计算单元计算过程中,三个矩阵计算元有同时完成的情况,那么在矩阵运算指令形成单元3形成指令时,会给相等的值加一个加权值,比如假设di1与dj1相等但小于 dk1,那么就会加一个加权值1给di1形成di1’,重新比较di1’,dj1,dk1。如果di1’,dj1,dk1三个数都不相等,那么按照di1’,dj1,dk1三个值从小到大的顺序分别为三个矩阵计算元生成三组指令,不然重复上面加权过程,直到di1,dj1,dk1三个数都不相等。重复读出数组Di,Dj,Dk的其它值,继续上述过程,直到数组Di,Dj,Dk全部读完。在读出数组Di,Dj,Dk元素的过程中,由于Di,Dj,Dk数组中元素个数未必相同,所以在读出数组Di,Dj,Dk的过程中,若发现某一数组已经读完,则后续对该数组生成对应的指令时仅生成空传送指令。空传送指令的格式为{选择地址为0,接收不使能,接收选择不管,左送选择使能,右送选择不使能}。当处理完数组C的元素c1{i,j,k}对应的第一组指令后,继续数组C的下一个元素的处理,重复上述过程,直至数组C的全部元素处理完毕。数组C全部元素处理完毕后,矩阵计算元的数据路径队列DPATH_CQUE的运算指令也生成完毕。
下面,再次读入数组C的第一个元素c1,本次是为生成矩阵计算元2的矩阵A队列A-_MQUE的运算指令。如果该元素不是矩阵C的最后一个元素,那么根据读出的数组C的元素c1{i,j,k},分别读出对应的数组Bi,Bj,Bk的元素值。根据读出的数组Bi,Bj,Bk的元素值{结果有效,A矩阵的非零元素值,A矩阵的非零元素行地址,A矩阵的非零元素列地址},直接映射为矩阵A队列A-_MQUE的运算指令{写结果标志,矩阵非零值A(i,j),行地址,列地址}。如果数组Bi,Bj,Bk中任一个数组提前读完,那么后续该数组的读取直接转化为一个矩阵A队列A-_MQUE的运算空指令,即{写结果标志置位,矩阵非零值Aij为0,行地址为0,列地址为0},一直继续到所有数组Bi,Bj,Bk读完为止。当数组Bi,Bj,Bk全部处理完毕,读入数组C的下一个元素,重复上述处理,直至数组C全部处理完毕。至此,计算矩阵AB的矩阵A队列A-_MQUE的运算指令全部生成。
本发明用于数据通信处理器的矩阵计算装置(以具有三个矩阵计算元为例)进行矩阵相乘的过程简述如下:
(1) 若要进行矩阵A×B,先由矩阵预处理单元1对矩阵A进行预处理,然后在由矩阵运算指令形成单元3得出进行矩阵相乘的传送指令和运算指令并由外部处理器核将矩阵运算指令写入输入输出控制单元4中的DPATH指令FIFO以及将运算指令写入A B指令FIFO。
(2)第一矩阵计算元2’、第二矩阵计算元2’’和第三矩阵计算元2’’’分别把自己的指令载入到其相应的指令队列中,具体操作过程是这样的:由第一矩阵计算元2’、第二矩阵计算元2’’和第三矩阵计算元2’’’的数据路径队列DPATH_CQUE载入矩阵运算的传送指令,然后等待矩阵运算的开始。由第一矩阵计算元2’、第二矩阵计算元2’’和第三矩阵计算元2’’’的矩阵A队列A_MQUE载入矩阵计算的运算指令,一旦该运算指令被载入,即可开始该矩阵计算元的计算。
(3)开始执行各个矩阵计算元(第一矩阵计算元2’、第二矩阵计算元2’’和第三矩阵计算元2’’’)的矩阵A队列A_MQUE中的指令,其中,A(i,j)值与列地址域指示的列向量b队列中的B向量b(j)作乘法操作,其结果与下一次乘法操作结果作累加,其结果又作为下次累加部分。这部分实际是进行乘法加法操作,当遇到矩阵A队列A_MQUE中的指令的写结果域为逻辑值真时,表示一个矩阵乘法运算的结果已经完成,将其写入该指令指示的结果队列RES_VQUE的行地址中。
(4)当一个矩阵行乘法运算完成,即矩阵A队列A_MQUE中的指令的写结果域为逻辑值真时,执行数据路径队列DPATH_CQUE中的指令,由该指令的选择地址和右送选择及左送选择域给出计算结果要传送的方向。配合相邻的矩阵计算元中数据路径队列DPATH_CQUE中的指令,第一矩阵计算元2’、第二矩阵计算元2’’和第三矩阵计算元2’’’这三个矩阵计算元都可以传送结果到输入输出控制单元4的结果存储器中。这样,当计算完成后,矩阵计算结果也被数据路径队列DPATH_CQUE中的指令传送到输入输出控制单元4中的结果存储器中。
上述(2)至(4)所指示的过程重复进行,直到矩阵计算完毕。
下面通过对如图1A所示的矩阵A和如图6所示的列向量b进行相乘来详述本发明用于数据通信处理器的矩阵计算装置的技术方案。
由于矩阵A只与一个列向量b相乘,因此只需要一个矩阵计算元即可。首先由矩阵预处理单元1对矩阵A进行预处理后得到如图1B所示的矩阵。接着矩阵运算指令形成单元3按照矩阵计算单元的格式将参与运算的矩阵及运算动作分解或转化为传送指令和计算指令并由外部处理器核分别加载至输入输出控制单元4的DPATH指令FIFO和A B指令FIFO。随后,这些指令由矩阵计算元2的数据路径队列DPATH_CQUE,矩阵A队列A-_MQUE及列向量b队列B_VQUE,分别载入自己的缓冲中。载入矩阵A队列A-_MQUE的指令根据要计算的矩阵,其指令形式为{写结果标志,矩阵非零值A(i,j),行地址,列地址},对于图1A所示的矩阵,其指令形式为{{1,1,0,1},{0,2,1,0},{1,3,1,2},{1,4,2,2}},当写结果标志为1时,表示需要将结果写入矩阵计算元2的结果队列RES_VQUE中,其写入地址为矩阵A队列A-_MQUE中指令的行地址域所指示的地址。列向量b队列B_VQUE其内容为参与计算的列向量b, 其形式为{1,2,3}(见图6)。矩阵计算元2中矩阵A队列A-_MQUE的指令首先从{1,1,0,1}开始,依次执行,直到{1,4,2,2}。指令执行完毕后,矩阵计算也就计算完毕。在矩阵计算过程中,当矩阵计算元2中矩阵A队列A-_MQUE的指令的写结果标志域置位时,执行矩阵计算元2的数据路径队列DPATH_CQUE中的指令,由于矩阵A与列向量b相乘,结果有三个非零数,所以需要三条指令来传送运算结果,其指令形式为{选择地址,接收使能,接收选择,右送选择,左送选择},选择地址表示结果队列地址,接收使能表示将接收选择的内容写入本矩阵计算元2的列向量b队列B_VQUE中。接收选择用于选择来自右方还是左方的矩阵计算元。右送选择和左送选择同时置位表示该数据结果要传送到输入输出控制单元4的结果存储器中。对于本例,即为{{1,0,1,1,1},{2,0,1,1,1},{3,0,1,1,1}}用于传送计算的三个计算结果到输入输出控制单元4的结果存储器中。
下面是一个计算图1A所示的矩阵A的平方的例子。
由于本例有三个列向量,安排三个矩阵计算元来计算,即第一矩阵计算元2’计算3×3矩阵A与A的第一列向量3×1列向量A(0)的乘积,第二矩阵计算元2’’计算3×3矩阵A与A的第二列向量3×1列向量A(1)的乘积,第三矩阵计算元2’’’计算3×3矩阵A与A的第三列向量3×1列向量A(2)的乘积。待第一矩阵计算元2’、第二矩阵计算元2’’和第三矩阵计算元2’’’分别计算完毕后,矩阵A的平方也计算完毕。矩阵预处理与上例相同,在此不再赘述。矩阵计算指令和矩阵传送指令由外部处理器核加载至输入输出控制单元4的DPATH指令FIFO和A B指令FIFO。随后,这些指令由第一矩阵计算元2’、第二矩阵计算元2’’和第三矩阵计算元2’’’根据自己的地址由数据路径队列DPATH_CQUE、矩阵A队列A-_MQUE及列向量b队列B_VQUE,分别载入自己的缓冲中。对于第一矩阵计算元2’来说,载入矩阵A队列A-_MQUE的指令即为矩阵A, 形式为{{1,1,0,1},{{0,2,1,0},{1,3,1,2}},{1,4,2,2}},列向量b队列B_VQUE内容为参与计算的矩阵A的第1列向量, 其形式为{0,2,0}。由于本矩阵计算元列向量b队列B_VQUE内容即A的第1列向量中仅第二行为非零元素2,按照矩阵乘法规则,载入矩阵A队列A-_MQUE的指令{0,2,1,0},{1,3,1,2},{1,4,2,2}的执行结果一定是零,所以这些指令是可以根据列向量b队列B_VQUE中的零元素预先剔除的,这样剔除后载入矩阵A队列A-_MQUE的指令仅留下{{1,1,0,1}}一条指令。对于第二矩阵计算元2’’,载入矩阵A队列A-_MQUE的指令即为矩阵A, 形式为{{1,1,0,1},{{0,2,1,0},{1,3,1,2}},{1,4,2,2}},列向量b队列B_VQUE内容为参与计算的矩阵A的第2列向量,其形式为{1,0,0}。由于本矩阵计算元列向量b队列B_VQUE内容即A的第2列向量中仅第一行为非零元素1,按照矩阵乘法规则,载入矩阵A队列A-_MQUE的指令{1,1,0,1}, {1,4,2,2}的执行结果一定是零,所以这些指令是可以根据列向量b队列B_VQUE中的零元素预先剔除的,这样剔除后载入矩阵A队列A-_MQUE的指令仅留下{{0,2,1,0},{1,3,1,2}}两条指令。对于第三矩阵计算元2’’’,载入矩阵A队列A-_MQUE的指令即为矩阵A, 形式为{{1,1,0,1},{{0,2,1,0},{1,3,1,2}},{1,4,2,2}},列向量b队列B_VQUE内容为参与计算的矩阵A的第3列向量, 其形式为{0,3,4}。当三个矩阵计算元指令载入完毕,即可开始矩阵计算。矩阵计算过程其实是矩阵计算元中矩阵A队列A-_MQUE的指令流的指令执行过程。在矩阵计算过程中,当有计算结果计算完成时,这个由矩阵A队列A-_MQUE的指令中写结果标志域置位指示,执行数据路径队列DPATH_CQUE中的指令,用于决定该计算结果传送至何处。由于第一矩阵计算元2’的矩阵A队列A-_MQUE中仅有一条指令,所以该矩阵计算元的计算即A矩阵与A矩阵第一列向量的乘积计算应该先于其它矩阵计算元完成,这样就需要将该矩阵计算元的计算结果先传回输入输出控制单元4的结果存储器,这样便要求第一矩阵计算元2’的数据路径队列DPATH_CQUE中第一条指令为{选择地址为结果队列地址1,接收不使能,接收选择不管,左送选择使能,右送选择使能},用于将第一矩阵计算元2’的计算结果写入到输入输出控制单元4的结果存储器。此时,A矩阵与A矩阵第一列向量的乘积计算完成,结果为一个非零计算值被传回输入输出控制单元4的结果存储器中,实际应该还有两个计算结果,但均为零,不需要传输。在传送第一矩阵计算元2’计算结果时,第二矩阵计算元2’’,第三矩阵计算单元2’’’的数据路径队列DPATH_CQUE不应该执行传送指令,否则会与第一矩阵计算元2’冲突,因为此时第一矩阵计算元2’正在执行传送指令将其结果传回输入输出控制单元4的结果存储器,因此为保证没有冲突出现,第二矩阵计算元2’’,第三矩阵计算元2’’’的数据路径队列DPATH_CQUE的第一条指令均应为{选择地址不管,接收不使能,接收选择不管,右送选择不使能,左送选择不使能},作用相当于一个空指令,以保证第一矩阵计算元2’使用数据路径的通畅。当第一矩阵计算元2’通过数据路径成功传送结果到输入输出控制单元4的结果存储器中后,第二矩阵计算元2’’也已经计算完毕,这是事先知道的,因为第二矩阵计算元2’’的矩阵A队列A-_MQUE中有两条指令。所以当第一矩阵计算元2’传送完后,即可开始传送第二矩阵计算元2’’的计算结果到输入输出单元4的结果存储器中。第二矩阵计算元2’’的结果传送需要第一矩阵计算元2’的配合,以保证第二矩阵计算元2’使用数据路径的通畅 所以第一矩阵计算元2’的数据路径队列DPATH_CQUE的第二条指令应该为{选择地址不管,接收不使能,接收选择从右即第二矩阵计算元2’’,右送选择不使能,左送选择不使能}, 用于为第二矩阵计算元2’’传送计算结果到输入输出控制单元4的结果存储器提供数据通路。自然的,第二矩阵计算元2’’ 的数据路径队列DPATH_CQUE的第二条指令应该为{选择地址为结果队列地址1,接收不使能,接收选择不管,左送选择使能,右送选择使能},用于将第二矩阵计算元2’的计算结果写入到输入输出控制单元4的结果存储器。当然,在传送第二矩阵计算元2’计算结果时,第三矩阵计算单元2’’’的数据路径队列DPATH_CQUE不应该执行传送指令,否则会与第二矩阵计算元2’’冲突,因此第三矩阵计算元2’’’的数据路径队列DPATH_CQUE的第二条指令应为{选择地址不管,接收不使能,接收选择不管,右送选择不使能,左送选择不使能},作用相当于一个空指令,以保证第二矩阵计算元2’’使用数据路径的通畅。此时,A矩阵与A矩阵第二列向量的乘积计算完成,结果为一个非零计算值被传回输入输出控制单元4的结果存储器中,实际应该还有两个计算结果,但均为零,不需要传输。最后,第三矩阵计算元2’’’由于矩阵A队列A-_MQUE中指令最多,所以最后计算完成,计算完成后其计算结果同样需要传送回输入输出控制单元4的结果存储器中,由于第三矩阵计算元2’’’位于矩阵计算单元2的最左边,其传送结果的数据路径需经过第一矩阵计算元2’,第二矩阵计算元2’’,因此需要第一矩阵计算元2’,第二矩阵计算元2’’数据路径的配合。这样,第一矩阵计算元2’ 的数据路径队列DPATH_CQUE的第三条指令为{选择地址不管,接收不使能,接收选择从右即第二矩阵计算元2’’,右送选择不使能,左送选择不使能},用于为第三矩阵计算元2’’’传送计算结果到输入输出控制单元4的结果存储器提供数据通路。类似的,第二矩阵计算元2’’的数据路径队列DPATH_CQUE的第三条指令也为{选择地址不管,接收不使能,接收选择从右即第三矩阵计算元2’’’,右送选择不使能,左送选择不使能},用于为第三矩阵计算元2’’’传送计算结果到输入输出控制单元4的结果存储器提供数据通路。这样,通过第一矩阵计算元2’,第二矩阵计算元2’’的数据路径的配合,为第三矩阵计算元2’’’传送计算结果到输入输出控制单元4的结果存储器提过了通畅的传送通道。当然,第三矩阵计算元2’’’为送出计算结果,需要数据路径队列DPATH_CQUE的第三条指令为{选择地址为结果队列地址1,接收不使能,接收选择不管,左送选择使能,右送选择使能},用于将第三矩阵计算元2’’’的第一个计算结果写入到输入输出控制单元4的结果存储器。由于第三矩阵计算元2’’’计算的是A矩阵与A矩阵第三列向量的乘积,应该有三个非零计算结果,此时应该均已存入第三矩阵计算元2’’’的结果队列RES_VQUE24中,因此,还应将其它计算结果传回输入输出控制单元4的结果存储器,与传送第一个计算结果类似,第一矩阵计算元2’,第二矩阵计算元2’’继续为第三矩阵计算元2’’提供数据路径,于是,第一矩阵计算元2’ 的数据路径队列DPATH_CQUE的第四第五条指令均为{选择地址不管,接收不使能,接收选择从右即第二矩阵计算元2’’,右送选择不使能,左送选择不使能},用于为第三矩阵计算元2’’’传送计算结果到输入输出控制单元4的结果存储器提供数据通路。第二矩阵计算元2’’的数据路径队列DPATH_CQUE的第四第五条指令同样为{选择地址不管,接收不使能,接收选择从右即第三矩阵计算元2’’’,右送选择不使能,左送选择不使能},用于为第三矩阵计算元2’’’传送计算结果到输入输出控制单元4的结果存储器提供数据通路。这样,保证第三矩阵计算元2’’’顺利传送第二第三个计算结果到输入输出控制单元4的结果存储器中。当然,第三矩阵计算元2’’’为送出第二第三个计算结果,需要数据路径队列DPATH_CQUE的第四指令为{选择地址为结果队列地址2,接收不使能,接收选择不管,左送选择使能,右送选择使能},用于将第三矩阵计算元2’’’的第二个计算结果写入到输入输出控制单元4的结果存储器。第三矩阵计算元2’’’的数据路径队列DPATH_CQUE的第五指令为{选择地址为结果队列地址3,接收不使能,接收选择不管,左送选择使能,右送选择使能},用于将第三矩阵计算元2’’’的第三个计算结果写入到输入输出控制单元4的结果存储器。这样A矩阵与A矩阵第三列向量的乘积结果即三个计算值均被传回输入输出控制单元4的结果存储器中。至此,整个矩阵计算完毕。需要说明的是,为了使能各个矩阵计算元数据路径队列DPATH_CQUE中指令的全部执行,需要在相应矩阵计算元的矩阵A队列A-_MQUE中加入冗余的空指令,形式为{写结果标志置位,矩阵A(i,j)为0,行地址为0,列地址为0},这样由于矩阵A队列A-_MQUE中指令的写结果标志置位,产生弹出D信号,从而推进矩阵计算元数据路径队列DPATH_CQUE中所有指令的正常执行。
相应地,本发明还公开了一种用于数据通信处理器的矩阵计算方法,包括:
矩阵预处理步骤,将两个要进行相乘的矩阵中的一个矩阵A表示为:{非零元素值,行地址,列地址};
矩阵运算指令形成步骤,根据经矩阵预处理的矩阵A和另一个矩阵B,形成矩阵运算的传送指令和运算指令;
矩阵计算步骤,用于根据所述传送指令和所述运算指令进行矩阵相乘。
所述矩阵计算步骤进一步包括:
将所述传送指令载入数据路径队列DPATH_CQUE;
将所述计算指令中与矩阵A对应的部分载入矩阵A队列A_MQUE,与矩阵B对应的部分载入列向量b队列B_VQUE;
在矩阵A队列A_MQUE的控制下由乘法加法单元MAC将矩阵A队列A_MQUE中的非零值与以该非零值的列地址为索引的列向量b队列B_VQUE的值进行相乘。
优选地,本发明用于数据通信处理器的矩阵计算方法还包括在所述矩阵计算元的矩阵A队列A-_MQUE中加入空指令,其形式为{写结果标志置位,0,0,0}。
此外,所述矩阵预处理步骤还包括将矩阵B分解为一个个的列向量。
由于本发明用于数据通信处理器的矩阵计算方法的技术方案与本发明用于数据通信处理器的矩阵计算装置的处理过程是相对应的,前文已经对本发明用于数据通信处理器的矩阵计算装置的处理过程进行了详细描述,因此在此不再对本发明用于数据通信处理器的矩阵计算方法的技术方案予以赘述。
通过上述实施例的描述,本发明用于数据通信处理器的矩阵计算装置和方法的优点是明显的。本发明充分利用了矩阵计算中的零元素,实现机制简单,可行性好。
以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,但本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (12)
1.一种用于数据通信处理器的矩阵计算装置,其特征在于,包括:
矩阵预处理单元,将两个要进行相乘的矩阵中的一个矩阵A表示为:{非零元素值,行地址,列地址};
矩阵运算指令形成单元,根据经所述矩阵预处理单元处理过的矩阵A和另一个矩阵B,形成矩阵运算的传送指令和运算指令;
输入输出控制单元,用于缓冲所述传送指令和所述运算指令以及矩阵计算结果;
至少一个矩阵计算元,用于根据所述输入输出控制单元传送过来的所述传送指令和所述运算指令进行矩阵相乘并把结果输出给所述输入输出控制单元。
2.如权利要求1所述的用于数据通信处理器的矩阵计算装置,其特征在于,所述矩阵计算元包括:数据路径队列DPATH_CQUE、矩阵A队列A_MQUE、列向量b队列B_VQUE、乘法加法单元MAC和结果队列RES_VQUE, 其中:
所述数据路径队列DPATH_CQUE用于存放从所述输入输出控制单元传送的所述传送指令;
所述矩阵A队列A_MQUE用于存放从所述输入输出控制单元传送的所述运算指令;
所述列向量b队列B_VQUE,用于存放所述另一个矩阵B的列向量;
所述乘法加法单元MAC,用于把所述矩阵A队列A_MQUE中的行向量和所述列向量b队列B_VQUE中的列向量进行乘法加法运算并将结果存入所述结果队列RES_VQUE。
3.如权利要求2所述的用于数据通信处理器的矩阵计算装置,其特征在于,所述数据路径队列DPATH_CQUE包括选择地址域、接收使能域、接收选择域、右送选择域和左送选择域,其中:
所述选择地址域用于选择要从所述结果队列RES_VQUE中读出的内容所在的读取地址;
所述接收使能域用于指示是否向所述列向量b队列B_VQUE中写入;
所述接收选择域用于选择写入所述列向量b队列B_VQUE的内容是来自左方的矩阵计算元还是来自右方的矩阵计算元;
所述右送选择域用于选择是将来自左方的矩阵计算元的数据还是将所述结果队列RES_VQUE中所述读取地址处的内容送至右方矩阵计算元;
所述左送选择域用于选择是将来自右方矩阵计算元的数据还是将所述结果队列RES_VQUE中所述读取地址处的内容送至左方矩阵计算元。
4.如权利要求3所述的用于数据通信处理器的矩阵计算装置,其特征在于,在所述矩阵A队列A_MQUE中存放的所述运算指令包括写结果域、非零元素值域、行地址域和列地址域,其中:
所述写结果域用于指示所述乘法加法单元MAC的计算结果是否要写入所述结果队列RES_VQUE。
5.如权利要求4所述的用于数据通信处理器的矩阵计算装置,其特征在于,所述输入输出控制单元包括DPATH指令FIFO和AB指令FIFO。
6.如权利要求5所述的用于数据通信处理器的矩阵计算装置,其特征在于,所述输入输出控制单元只要所述DPATH指令FIFO和AB指令FIFO未满,就继续接收新的指令序列直到所述DPATH指令FIFO和AB指令FIFO满或者指令发送完毕。
7.如权利要求6所述的用于数据通信处理器的矩阵计算装置,其特征在于,矩阵A队列A-_MQUE中加入空指令,其形式为{写结果标志置位,0,0,0}。
8.如权利要求1至7中任意一项所述的用于数据通信处理器的矩阵计算装置,其特征在于,所述矩阵预处理单元和所述矩阵运算指令形成单元由编译软件实现。
9.一种用于数据通信处理器的矩阵计算方法,其特征在于,包括:
矩阵预处理步骤,将两个要进行相乘的矩阵中的一个矩阵A表示为:{非零元素值,行地址,列地址};
矩阵运算指令形成步骤,根据经矩阵预处理的矩阵A和另一个矩阵B,形成矩阵运算的传送指令和运算指令;
矩阵计算步骤,用于根据所述传送指令和所述运算指令进行矩阵相乘。
10.如权利要求9所述的用于数据通信处理器的矩阵计算方法,其特征在于,所述矩阵计算步骤进一步包括:
将所述传送指令载入数据路径队列DPATH_CQUE;
将所述运算指令中与矩阵A对应的部分载入矩阵A队列A_MQUE,与矩阵B对应的部分载入列向量b队列B_VQUE;
在矩阵A队列A_MQUE的控制下由乘法加法单元MAC将矩阵A队列A_MQUE中的非零值与以该非零值的列地址为索引的列向量b队列B_VQUE的值进行相乘。
11.如权利要求10所述的用于数据通信处理器的矩阵计算方法,其特征在于,还包括在所述矩阵计算步骤的矩阵A队列A-_MQUE中加入空指令,其形式为{写结果标志置位,0,0,0}。
12.如权利要求9至11中任意一项所述的用于数据通信处理器的矩阵计算方法,其特征在于,所述矩阵预处理步骤还包括将矩阵B分解为一个个的列向量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010607242.9A CN102541814B (zh) | 2010-12-27 | 2010-12-27 | 用于数据通信处理器的矩阵计算装置和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010607242.9A CN102541814B (zh) | 2010-12-27 | 2010-12-27 | 用于数据通信处理器的矩阵计算装置和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102541814A CN102541814A (zh) | 2012-07-04 |
CN102541814B true CN102541814B (zh) | 2015-10-14 |
Family
ID=46348740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010607242.9A Expired - Fee Related CN102541814B (zh) | 2010-12-27 | 2010-12-27 | 用于数据通信处理器的矩阵计算装置和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102541814B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111651205B (zh) * | 2016-04-26 | 2023-11-17 | 中科寒武纪科技股份有限公司 | 一种用于执行向量内积运算的装置和方法 |
CN107315715B (zh) * | 2016-04-26 | 2020-11-03 | 中科寒武纪科技股份有限公司 | 一种用于执行矩阵加/减运算的装置和方法 |
CN108664447B (zh) * | 2017-03-31 | 2022-05-17 | 华为技术有限公司 | 一种矩阵与矢量的乘法运算方法及装置 |
CN107992329B (zh) * | 2017-07-20 | 2021-05-11 | 上海寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
US11409692B2 (en) * | 2017-07-24 | 2022-08-09 | Tesla, Inc. | Vector computational unit |
US11893393B2 (en) | 2017-07-24 | 2024-02-06 | Tesla, Inc. | Computational array microprocessor system with hardware arbiter managing memory requests |
WO2019053835A1 (ja) * | 2017-09-14 | 2019-03-21 | 三菱電機株式会社 | 演算回路、演算方法、およびプログラム |
CN107992486A (zh) * | 2017-10-30 | 2018-05-04 | 上海寒武纪信息科技有限公司 | 一种信息处理方法及相关产品 |
US10747844B2 (en) * | 2017-12-12 | 2020-08-18 | Tesla, Inc. | Systems and methods for converting a matrix input to a vectorized input for a matrix processor |
CN108108189B (zh) * | 2017-12-15 | 2020-10-30 | 安徽寒武纪信息科技有限公司 | 一种计算方法及相关产品 |
US20210098001A1 (en) | 2018-09-13 | 2021-04-01 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and terminal device |
WO2020062312A1 (zh) * | 2018-09-30 | 2020-04-02 | 华为技术有限公司 | 信号处理装置和信号处理方法 |
WO2020073925A1 (zh) * | 2018-10-09 | 2020-04-16 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
WO2020073923A1 (zh) * | 2018-10-09 | 2020-04-16 | 上海寒武纪信息科技有限公司 | 运算方法、装置、计算机设备和存储介质 |
CN111198670B (zh) | 2018-11-20 | 2021-01-29 | 华为技术有限公司 | 执行矩阵乘法运算的方法、电路及soc |
CN109597647B (zh) * | 2018-11-29 | 2020-11-10 | 龙芯中科技术有限公司 | 数据处理方法及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267185A (en) * | 1989-04-14 | 1993-11-30 | Sharp Kabushiki Kaisha | Apparatus for calculating matrices |
CN101089840A (zh) * | 2007-07-12 | 2007-12-19 | 浙江大学 | 基于多fpga的矩阵乘法并行计算系统 |
CN101620524A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | 支持矩阵整体读写操作的矩阵寄存器文件 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS63311569A (ja) * | 1987-06-15 | 1988-12-20 | Hitachi Ltd | コプロセツサ演算装置 |
CN100465874C (zh) * | 1995-08-31 | 2009-03-04 | 英特尔公司 | 根据指令对数据执行运算的方法、处理器和系统 |
US6243734B1 (en) * | 1998-10-30 | 2001-06-05 | Intel Corporation | Computer product and method for sparse matrices |
JP4942095B2 (ja) * | 2007-01-25 | 2012-05-30 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチコア・プロセッサにより演算を行う技術 |
-
2010
- 2010-12-27 CN CN201010607242.9A patent/CN102541814B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5267185A (en) * | 1989-04-14 | 1993-11-30 | Sharp Kabushiki Kaisha | Apparatus for calculating matrices |
CN101089840A (zh) * | 2007-07-12 | 2007-12-19 | 浙江大学 | 基于多fpga的矩阵乘法并行计算系统 |
CN101620524A (zh) * | 2009-07-03 | 2010-01-06 | 中国人民解放军国防科学技术大学 | 支持矩阵整体读写操作的矩阵寄存器文件 |
Non-Patent Citations (1)
Title |
---|
李春葆等.稀疏矩阵的三元组表示.《数据结构与算法教程》.清华大学出版社,2007,第85-86页. * |
Also Published As
Publication number | Publication date |
---|---|
CN102541814A (zh) | 2012-07-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102541814B (zh) | 用于数据通信处理器的矩阵计算装置和方法 | |
CN108805266B (zh) | 一种可重构cnn高并发卷积加速器 | |
CN109543832B (zh) | 一种计算装置及板卡 | |
TWI803663B (zh) | 一種運算裝置和運算方法 | |
TW201913460A (zh) | 芯片裝置及相關産品 | |
Chen et al. | Nearly optimal one-to-many parallel routing in star networks | |
CN101739381A (zh) | 屏障同步设备、屏障同步系统以及屏障同步方法 | |
CN108897716B (zh) | 通过存储器读写操作来缩减计算量的数据处理装置及方法 | |
US20200026746A1 (en) | Matrix and Vector Multiplication Operation Method and Apparatus | |
CN109739556B (zh) | 一种基于多并行缓存交互及计算的通用深度学习处理器 | |
JP5522283B1 (ja) | リストベクトル処理装置、リストベクトル処理方法、プログラム、コンパイラ、及び、情報処理装置 | |
CN105573716A (zh) | 基于传输触发结构体系的专用指令集处理器 | |
CN110059809B (zh) | 一种计算装置及相关产品 | |
CN111930681A (zh) | 一种计算装置及相关产品 | |
CN110766136B (zh) | 一种稀疏矩阵与向量的压缩方法 | |
Miller et al. | Highly efficient exhaustive search algorithm for optimizing canonical Reed-Muller expansions of boolean functions | |
JP6888073B2 (ja) | チップ装置および関連製品 | |
JPH04316153A (ja) | ニューロプロセッサ | |
US11297127B2 (en) | Information processing system and control method of information processing system | |
JP6888074B2 (ja) | チップ装置および関連製品 | |
CN117407640A (zh) | 一种矩阵计算方法及装置 | |
US20200349419A1 (en) | Neural network arithmetic processing device and neural network arithmetic processing method | |
CN112949834A (zh) | 一种概率计算脉冲式神经网络计算单元和架构 | |
CN109343826B (zh) | 一种面向深度学习的可重构处理器运算单元 | |
Kong et al. | A high efficient architecture for convolution neural network accelerator |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20151014 Termination date: 20211227 |