【论文笔记】DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning

作者信息:Tianshi Chen  中科院计算所   2014 ASPLOS

一句话总结:实现了一个低存取功耗的DNN/CNN的推断过程的加速器。

所用方法:将数据缓存分成input buffer(NBin), output buffer(NBout) 和 synapse buffer(SB),并且分批(tile up)进行数据的计算来降低存取消耗。

 

 

动机:大型的NN往往涉及到了大量的数据存取,这占据了大量的时间和功耗。因此,需要尽量降低此类资源的消耗。

标识符含义:Ni: the number of input feature maps(可以理解为通道数)

                     Kx * Ky: window

                     Sx, Sy: steps

                     每个时钟周期处理Tn个neurons和Ti个synapses,Tn = Ti = 16

 

1Processor-Based Implementation of (Large) Neural Networks

运行环境:两级cache,与Intel Core i7配置相同:L1 is 32KB, 64-byte line, 8-way; the optional L2 is 2MB, 64-byte, 8-way

1.1 classifier layer

 

如果是正常的计算过程,Ti对应的Tn的宽度应该是synapses矩阵的整个一列。因此,总的存取次数是:inputs loaded + synapses loaded +output loaded = Ni * Nn + Ni * Nn + Nn. 并且,对于大型DNN/CNN, cache一般无法同时存下如此多的数据。因此处于资源和可行性的目的,需要降低带宽。对照上面两幅图,图2和图4,这篇论文是这样降低带宽的:

•对于input/output neurons:L1一次存储Tii/Tnn个input/output neurons

•Synapses: 对于分类层,基本所有的Synapses都是不同的。但是对于每个待测试的input data(input row), Synapses都是复用的。因此,分类层的所有Synapses被存储在L2。

1.2 Convolutional Layers

 

•input/output neurons:input neurons:tiles Tx, Ty; output neurons: 全部存储Kx * Ky * Ni 于 L1中(我怎么觉得这个应该算synapses) 

•Synapses: 整个kernels Kx * Ky * Ni * No 超出了L1的容量,因此tile成 Kx * Ky * Ni * Tnn

1.3 Pooling Layers

如上图,tile Tx, Ty

 

2 Accelerator for Large Neural Networks

主要组成:an input buffer for input neurons (NBin), an output buffer for output neurons (NBout), synapse buffer (SB), neural functional unit (NFU), control logic (CP)

2.1 NFU

• Arithmetic operators: *, +, sigmoid等非线性函数。因此大致可分为三个阶段,NFU-1:+;NFU-2:*; NFU-3:sigmoid等非线性函数。

• Staggered pipeline:NFU-1 和 NFU-2可以流水线执行,NFU-3必须等前2个阶段执行完毕再执行

• NFU-3 function implementation:用piecewise linear interpolation(16段)实现。

                                                       所用资源:2个16-bit 的多路选择器;1个16-bit 的乘法器(16-bit output);1个16-bit 的加法器;参数存储在一个小RAM里。

• 16-bit fixed-point arithmetic operators:6-bit 的整数部分,10-bit 的小数部分。所有的乘法器输出都是16 bits

2.2 Storage: NBin, NBout, SB and NFU-2 Registers

2.2.1 Exploiting the locality of inputs and synapses

•  DMAs: 每个buffer对应一个DMA,因此一共有三个DMA. DMA请求以指令的形式传送,指令存储在与每个buffer相连的FIFO中。DMA指令能够preload,因此可以容忍高延迟。

•  Rotating NBin buffer for temporal reuse of input neurons:称之为circular buffer. 这是通过改变索引实现的,是软实现。

•  Local transpose in NBin for pooling layers:使用NBin里的mapping function交换 ky, kx 和 循环 i 的顺序

2.2.2 Exploiting the locality of outputs

•  Dedicated registers:在NFU-2里,存储partial sums

•  Circular buffer:  暂时将partial sums存放在 NBout. 只要sums没有算好,NBout就是空转(idle)的。

2.3 Control and Code

•  CP: 相当于一个状态机,用来控制其他模块。用指令控制。指令存储在与CP相连的SRAM中。

•  Layer Code:每条指令有5个slots,分别对应加速器的每个部分。

 

3 experiment

• Experimental Methodology: Accelerator simulator; CAD tools; SIMD.

• Accelerator Characteristics after Layout

• Time and Throughput

• Energy

posted @ 2020-06-20 19:04  平平的圆圆  阅读(959)  评论(0)    收藏  举报