矩阵系列:矩阵乘法

上一篇说到一个基本的小知识点浮点到定点的转换,这一篇来说说矩阵乘法。矩阵乘法和下一篇要说的矩阵LU分解是矩阵求逆的重要组成部分,所以就算大家不需要做矩阵求逆,对其先有个整体的认识也是好的。(矩阵求逆的整体框图还是很好理解的 ,甚至你只要瞟一眼图就好)。

1矩阵求逆的整体框图

在这里插入图片描述

矩阵求逆的步骤如下:

1.原始矩阵A通过LU分解为上三角矩阵L与单位下三角矩阵U。

2.分别通过三角矩阵的求逆运算得到L逆和U逆。

3.最后通过矩阵乘法得到A逆。

显而易见,矩阵求逆由如下三个部分组成:

1.LU矩阵分解

2.三角矩阵求逆

3.矩阵乘法

2脉动阵列介绍
做矩阵运算,脉动阵列绝对是个神器,笔者大部分的时间是花在脉动阵列上面的,脉动阵列主要完成算法到结构的映射,而这种结构的设计往往是最难的,值得一提的是,大部分矩阵运算的脉动阵列都已经被设计出,有的甚至不止一种结构。下面简单介绍脉动阵列,如果感兴趣的可以深入研究。

脉动阵列:多个相同的处理单元(PE),按照一定的规则组成的网络,成为脉动阵列。脉动阵列可以是一维线性、二维三角形、二维矩形、二维六边形等等。

特点:

1.每一个节点,即PE,都是相同的,(个别也可以不同)。
2.每个PE只与其邻近的PE进行通信,也就是说PE之间的通信具有局部性,而且通信是规则的。这点非常重要!!!
3.每个PE都有其局部的储存器,也就是PE的某些边带有延时,延时在硬件上对应于寄存器。

由于以上特点,造成PE之间的高度流水化、规则化,因此系统吞吐率非常大且易于VLSI的实现。

3矩阵乘法模块
3.1矩阵乘法的数学表达式
在这里插入图片描述

从公式上可以看出,计算后的矩阵的每个单元(i,j)是矩阵A的第i行矩阵与矩阵B的第j列对应元素的乘积和。

可以看出,矩阵乘法的计算规则化,数据间的通讯具有局部化的特点,因此很适合用脉动阵列来实现。

3.2乘法脉动阵列的设计
根据算法的特点,设计二维方形的脉动阵列,如下图所示:从上到下,从左到右分别流经矩阵A、B的数据。处理单元PE则保存结果矩阵C,处理单元以矩阵C(i,j)命名,初始值均为0。设计好的脉动这列图与以及每个时刻详细的步骤如下:

乘法脉动阵列图

乘法脉动阵列图

注:*号代表延时一拍

下面给出计算数据流向与结果的示意图

1.时刻1

在这里插入图片描述

数据a11、b11进入PE单元,计算并更新PE,将数据保存在PE中。

2.时刻2

在这里插入图片描述

数据a11继续向右流入C12,与向下流入的b22做运算将结果更新保存在C12。数据a21流入处理单元C21,b11继续向下流动,与a21做同样的运算并更新保存C21。而此时C11保存的是a11b11+a12b21的结果。

依次向下向右流动,经过3*n-2个时钟周期得到结果矩阵C,相比串行执行的时间复杂度(n^3),阶数越多,时间缩短的越多。值得说明的是,该阵列中所有处理单元所完成的功能相同,均为乘加运算。

3.3模块的测试
测试模块包括:矩阵生成模块,定点转浮点模块,矩阵乘积模块(核心模块),浮点转定点。通过matlab仿真与modelsim的结果对比,验证其正确性。

上一篇《矩阵系列:浮点转定点
下一篇《矩阵系列:LU分解

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下一个雨天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值