由于本文公式较多,简书不支持公式渲染,完整版已发布在个人博客
存储
DianNao系列的存储的设计理念是分裂存储,这样有几个好处:
- 增大带宽:相同大小的单个存储器和多个存储器相比,多个存储器能提供更大的带宽
- 匹配位宽:有些数据对位宽的需求不同,将位宽需求不同的数据放在不同位宽的存储器中可以避免位宽浪费
DianNao与DaDianNao
DianNao和DaDianNao的存储设计基本相同,区别在于DaDianNao使用了片上eDRAM增大了片上存储的面积,下图为DaDianNao的存储部分,DianNao的存储部分类似,可以参考整体架构中DianNao的架构图:

DaDianNao_store.JPG
存储被分裂为三个部分:
- NBin:用于存储输入数据,需要位宽$T_n$(一次处理所需的输入数量x每个输入位宽)
- NBout:用于存储部分和与最终运算结果,需要位宽$T_n$
- SB:用于存储权值,需要位宽$T_n \times T_n$
DianNao和DaDianNao的重用策略是重用输入数据即NBin中的数据。当需要NBin参与的运算全部完成后,NBin才会被覆盖。因此,在DaDianNao中,所有运算单元共享eDRAM实现的NBin和NBout(图中eDRAM router部分),但具有自己的SB缓存(每个节点有4个eDRAM)
ShiDianNao
ShiDianNao的存储比较有特色,由于其特殊性,并未采用DaDianNao的eDRAM组成超大片上存储。仅使用了288KB的SRAM,因此其存储组织更值得研究,下图为NBin缓存及其控制器的设计:

ShiDianNao_store.JPG
可以发现,每个存储器分裂为$2 \times P_y$个Bank,每个Bank的位宽是$P_x \times 16bit$。其中$P_y$为运算阵列的行数,$P_x$为计算阵列的