5位无符号阵列乘法器设计_可变位宽的大规模矩阵乘法方法

d910d31363679e379967d6225b6f904d.png

引言

本文介绍了一种数据位宽可变的乘法方法,由于避免了DSP的使用,可以充分利用LUT资源,在DSP数量少的芯片上也可以获得很高的计算量。这种方法更适合大矩阵乘法,矩阵越大,计算效率就会越高。

01

可变位宽乘算法

方法其实很简单,就是利用数据的二进制表示方法。一个有符号二进制数,用二进制表示为:

b30c9b97329069eb047c258928005173.png

这样就将矩阵中每个数都分解成1bit数和一个权重数相乘的形式,而这个权重是2的幂次,在FPGA中可以通过简单移位操作来实现。论文中给出了一个简单的例子,求两个2x2矩阵的乘法,数据位宽为2bit。如下图1.1所示:首先将每个矩阵分解成两个矩阵之和,然后通过因式分解分别计算4个1bit矩阵乘法,然后根据权重大小进行移位操作,再求和。乘法只是1bit数,仅仅通过与操作就可以完成了,完全不需要乘法器。但是这样做也有一个缺点,就是延迟变大了。所以对于特大矩阵乘法来说,这些延迟可以通过增加计算量来弥补。以上方式用伪代码可以表示为图1.2。将这种方法进行推广,可以想到用4进制,8进制来进行数据表示,这样对于较大位宽数据来说可以降低延时。但是这样的低价就是增加了LUT资源。比如对于4进制表示,乘法数据为2bit,这个就会需要更多LUT来完成了。如果表示进制更高,比如16进制,那么用乘法器实现就更合适了。但是这无疑给我们提供了一种可变位宽乘法的设计思路。

ff9fdd09704455398cd0318f77fe8882.png

图1.1 2x2矩阵乘法分解过程

7a0f77cf69b329bc2afc92cbbca9d5fa.png

图1.2 可变位宽乘法算法

02

硬件架构

整体框架如图2.1所示,基本包括三部分:fetch,execute,result。

Fetch包含一个简单的DMA引擎,以及一个数据读取调度器,主要用于从DDR中获得指令和数据。数据被放于片上缓存中,片上缓存和计算单元通过大量走线互联,走线的带宽受到了DDR带宽的限制,而走线带宽取决于计算单元的算力。论文中参数化了这三个变量,可以根据不同平台来进行适配。

ccdb6566d5a0093f14333c453eef8c56.png

图2.1 硬件架构

Execute是最核心的计算单元,这部分由基本的DPU构成。DPU是专门处理数据乘法和累加的单元,这些DPU相互连接成二维平面结构,专门用于处理矩阵乘法。DPU结构主要由一个与门,求和,移位寄存器,累加器组成。与门和求和结构用于计算1bit矩阵乘法,移位寄存器用于乘以权重系数,累加器是用于大矩阵求和。一个大矩阵乘法是被分块的,然后每块乘法是用矩阵列x行的形式,这样计算阵列中的每行和每列对应的bufer中的数据都是被多次利用的,并且以广播形式传播到各个单元。这种方式增加了矩阵数据利用率,能够到达缓解搬运带宽。这方面计算还可以参见文章《在DNN中FPGA做了什么?》每个计算单元都会出来一个最终结果,这些结果通过并串转换分别进入result buffer。

726a8f04b7880a731aff119fff186ecf.png

a281ba7dbf67e5e4adc814c5b4816bc2.png

图2.2 计算结构

Result结构和fetch类似,只不过是写入DDR。也是通过DMA引擎来控制对DDR写入。

接下来介绍论文中指令架构,指令也是依据三种结构来设计成对应指令:fetch,execute,result。创新点主要在指令的pipeline设计上。其通过引入“锁”的机制来实现不同指令之间的依赖关系。用wait来阻塞下一条指令的执行,而用signal来接触wait,触发下一条指令执行。三种指令主要是fetch和result相对于execute的依赖。如果fetch完成,execute可以执行,在执行的同时,fetch可以读取下一次要用的数据,通过这样的流水来减少execute的等待时间。用一个简单过程来说明,如图2.3所示:首先execute进入等待,直到fetch了L和R矩阵数据,此时通过signal来触发execute的执行。当execute执行L*R的同时,fetch不需要等待,可以进一步下载数据。而在没有生成最终矩阵数据结果之前,result一直处于等待中,直到完成矩阵运算,execute通过signal来触发result的执行。

52f71f783d87f9150432165beb245b7e.png

图2.3 指令依赖关系

03

结果

矩阵大小对计算效率影响很大,矩阵越大,那么矩阵元素的复用率就高,所以计算效率也越高。

d34fb7f887b8085ae751bb49ca8965fd.png

图3.1 计算效率和矩阵大小k以及数据位宽D_k关系

资源利用和峰值算力如图3.2,最大算力达到了3.2TOPS。主要对片上BRAM使用较多,这也是矩阵计算中受到限制的重要因素,因为通常限制计算的都是片上缓存以及带宽。

6d0adde38188c13692dcdcd0baa6a5cd.png

图3.2 资源利用

还有功耗估计如图3.3所示。

887ec7d8b2e7866d048e0490806f3bb5.png

图3.3 功耗

总结

论文提出了一种可变位宽的计算矩阵乘法的方法,通过串行计算乘法来实现。这对于大规模矩阵乘计算比较有优势,但是对于较小矩阵或者数据位宽较大的乘法来说,效率会比较差。所以这种方法就当做是提供了一种可变bit乘法的思路。

文献

1. Yaman Umuroglu, L.R., Magnus Sjalander, BISMO: A Scalable Bit-Serial Matrix Multiplication Overlay for Reconfigurable Computing. arXiv preprint, 2018. 18

往期回顾

1. 在DNN中FPGA做了什么?

2. 稀疏LSTM硬件架构

793f4973db7d4503d875583022d4c92f.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值