【论文笔记】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
浙公网安备 33010602011771号