深入理解DNN加速器中的基本单元——DSP.doc

深入理解DNN加速器中的基本单元——DSP.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

深入理解DNN加速器中的基本单元——DSP

DNN加速器的设计一直在两个方面使力:通用架构和高效性能。通用性需要自顶向下的设计,首先综合各种神经网络的算子设计一套标准的指令集,然后根据硬件平台的特点,考察计算资源,存储资源以及带宽,进行硬件的模块化设计,在指令集以及硬件的特殊结构基础上,再去构建工具链。

通用性要看的广,指令集的定义要具有扩展性和灵活性,工具链要能够灵活的对接不同的深度学习框架,能够处理不同类型的网络。这是一个很大的工程,需要一个顶级架构师以及大批软件编译类工程师合力来做。但是现在出现的很多开源工具链框架将这种开发难度大大降低了,比如TVM,LLVM,MLIR等工具给我们提供了基础,避免了再造轮子的重负。很多公司也基于这些开源框架来编写自己的编译工具。

高效性能永远是各大芯片厂商比拼的焦点,性能的提升需要三个方面共同努力:一个是来自于芯片的广大的资源,包括计算资源和存储资源,以及高带宽,从Xilinx芯片不断加大尺寸和DSP数量,以及采用HBM,还有GPU内核数量的提升以及对HBM的采用都说明了这个问题;另外一个是算法的深度优化,神经网络对噪声的容纳能力让其有了很多可以利用的空间,比如int类型的量化,稀疏化,剪枝等等,可以在保证精度的前提下,大大降低其运算量以及参数数量,同时能够更好的适配硬件;第三就是需要编译器对指令的优化,算符融合,无效算子的kill,指令的schedule等等,都会对最后性能造成很深的影响。提升性能需要看的深,追求硬件,算法,编译的极限,尽最大可能利用硬件有限的资源,尽最大可能优化网络的结构,尽最大可能寻求指令序列的优化解。今天我们谈性能追求当中的一个很小的部分——DSP。

XilinxDSP

1结构和功能

DSP48E2是zynq器件中使用的DSP类型,其主要结构包括一个27bit前加器,27x18bit的乘法器,一个48bit的可以执行加减法,累加以及逻辑功能的ALU。如下图所示:

DSP48E2单元的功能包括:

1)前加器可以计算D+/-A以及D+/-B的功能,这大大扩展了A和B端口的公用。通过对A和B的选择,可以增加乘数的宽度,利用这个可以将神经网络的算力提高一倍甚至两倍,后边我们具体再讲。

2)前加器可以将结果发送到乘法器,所以提供了平方操作,比如A*A。

3)A端口的低27bit用于乘法器输入,30bit完整数据可以和B端口数据concate实现48bit数据的ALU操作,包括与或非等逻辑运算以及加减法计算。

4)端口CARRYCASCIN和CARRYCASCOUT能够用于多个DSP级联,这对于实现神经网络中的矩阵乘法或者卷积的累加非常方便。

5)基于SIMD模式的加减法操作,可以支持2路24bit加减法以及4路12bit加减法。

6)支持48bit的逻辑操作:and,or,not,nand,nor以及xnor。

7)支持一些类型检测:overflow/underflow,rounding等。

8)支持17bit右移操作。

9)DSP单元是单时钟同步运转的,始终频率能够达到内部memory频率的两倍,相对内部逻辑,DSP可以工作在倍频下。

DSP支持的操作类型很多,主要用于两方面:一个是基于大量乘累加的计算,比如conv,gemm,FFT等。另外一种是纯加减法和逻辑的运算,这些在神经网络中也有很多,比如element-wiseadd。逻辑运算用的不多,更多可能作为一些计算的辅助。

Zynq器件中通常将2个DSP48E2和一个36Kb的blockmemory以及5个CLB放置在一起,一个36Kb的BRAM可以拆分成2个18Kb的memory使用,每个memory可以独自被一个DSP占用。这样的配置也为DSP以及存储的高效配合使用提供了模板。后边我们可以利用这样的结构构建一个conv计算单元。同时多个DSP在FPGA芯片内部是垂直摆放的,这有利于多个DSP的cascade。

现在来看一下如何使用DSP阵列来构建低功耗的加法树。在传统的FIR滤波器中,乘累加的普遍做法是将多个乘法的输出通过多级加法器累加起来,需要的加法器级数是计算数据量的log2函数。比如一个如下滤波器:

使用加法树会采用这样的结构:

这样的加法树会消耗更多的资源,代价以及能耗。特别是后几级的加法器位宽变的越来越宽,对LUT资源消耗很多。如果我们利用DSP的级联功能,可以完全实现FIR中的多输入加法功能。DSP中提供的post-adder以及CARRYCASCIN和CARRYCASCOUT可以选择上一级DSP的输出,同时将本级输出作为下一级输入。但是要注意级联的长度收到post-adder加法器位宽的限制,对于48bit的post-addr,如果乘法的输出长度为32bit,那么其

文档评论(0)

150****6040 + 关注
实名认证
内容提供者

互联网产品运营推广以及k12教育内容。

1亿VIP精品文档

相关文档