文章目录
- 1 introduction
- 2 method
- 2.1 输入复用Input Reuse(IR)
- 2.2 输出复用Output Reuse(OR)
- 2.3 权重复用Weight Reuse(WR)
- 1 方法
- 2 架构
- 题目:Deep Convolutional Neural Network Architecture With Reconfigurable Computation Patterns
- 时间:2017
- 期刊: TVLSI
- 研究机构:清华大学
- 参考博客:https://blog.csdn.net/darknessdarkness/article/details/106251428
1 introduction
本篇论文的主要贡献:
- DNA can reconfigure its data paths to support a hybrid data reuse pattern for different layer sizes
- DNA can reconfigure its computing resources to support a highly scalable and efficient mapping method
- A layer-based scheduling framework is proposed to reconfigure DNA’s resources
2 method
首先明确参数:
- N:输入通道数
- M:输出通道数
- L:输入特征图宽度
- H:输入特征图高度
- C:输出特征图宽度
- R:输出特征图高度
- K:卷积核宽度
DRAM访问次数为IN∗αi+OUT∗αo+WGT∗αw+TotalPooledOutputIN * \alpha_i + OUT * \alpha_o + WGT * \alpha_w + TotalPooledOutputIN∗αi+OUT∗αo+WGT∗αw+TotalPooledOutput
其中αi\alpha_iαi、αw\alpha_wαw、αo\alpha_oαo分别表示输入特征图、权重、输出特征图的数据复用次数
2.1 输入复用Input Reuse(IR)
输入的特征图,先沿输出通道方向算,再沿输入通道方向算,这样特征图只需要加载一次,即αi=1\alpha_i = 1αi=1,此时αw\alpha_wαw取决于输入特征图在宽度和高度方向tiling的次数,αo\alpha_oαo取决于权重在输出通道方向tiling的次数
缺点: 输入特征图存在overlay的区域
2.2 输出复用Output Reuse(OR)
如下图,先沿输入通道算,再沿输出通道算,输出特征图一直在累加,所以αo=0\alpha_o = 0αo=0,而αi\alpha_iαi取决于输出通道tiling次数,αw\alpha_wαw取决于输出特征图宽度和高度方向tiling次数
2.3 权重复用Weight Reuse(WR)
- 题目:FlexFlow: A Flexible Dataflow Accelerator Architecture for Convolutional Neural Networks
- 时间:2017
- 会议:HPCA
- 研究机构:中科院计算所
- 参考博客:https://zhuanlan.zhihu.com/p/109041345
1 方法
这有几个概念是跟我们之前的理解不一样:
- Feature map Parallelism (FP):对应输入通道和输出通道
- Neuron Parallelism (NP):对应输出特征图宽度和高度方向
- Synapse Parallelism (SP):对应了一个3x3或5x5 kernel内部的并行度
针对架构的分类,同样采用了Neuron、Synapse的概念,比如说3x3kernel内部并行的SP对应了(a)的脉动阵列,输出特征图宽度和高度方向的NP对应了(b)的2D mapping,而FP对应了tiling,倒是比较接近我们的设计
2 架构
PE结构如下图所示,可以发现每个PE内部都会有一个local buffer,方便实现不同数据的重排,那么卷积操作一共分成三步
- DataFlow1: 数据分发到PEDistribution Layer to Local Store
- DataFlow2: Local Store to Operator
- DataFlow3: Neuron and Kernel Buffers to Distribution Layer
下图展示了混合并行度的情况,对于(a),包括了 - 输出通道方向并行度 x2
- kernel内部并行度 x4
- 输出特征图x方向 x2
对于(b),包括了
- 输出通道方向并行度 x2
- 输入通道方向并行度 x2
- kernel内部并行度 x2
- 输出特征图x方向 x2
下面这个图对应了上图(a),表示是具体数据分布方式,黑箭头表示t时刻数据访问,灰箭头表示t+1时刻数据访问。
- 在t时刻时,第一行PE对应了输入特征图的0-3
- 在t时刻时,第一行PE对应了输入特征图的1-4
- 在t+1时刻时,第一行PE对应了输入特征图的2-5
- 在t+1时刻时,第一行PE对应了输入特征图的3-6
可以发现,数据按下面的排布方式,不会出现bank conflict
可以说,想要实现灵活的数据流,主要的难度都在这个数据排布和重组上