Open meton-robean opened 5 years ago
1、对大规模的CNNs和DNNs最先进机器学习算法的综合硬件设计 之前的加速器将神经网络每一层一次性全部实现到了硬件上,这种做法只适合规模小的网络结构。而且可拓展性很差(改动新的网络参数或者结构发生变化那么这个加速器就用不了了)。DianNao的利用计算单元的复用来适应大规模的网络。
2、专注于优化访存的性能,着重解决”存储墙”的问题。
不用cache,用sratchpad作为buffer。因为cache的数据冲突问题会带来高功耗。
将输入数据split成两个独立的输入buffer。因为对于神经网络来说,输入数据和权重是两类很明显独立的数据,分开的话就不用混在一起,这样更加容易处理。考虑reuse的话,例如一个Nbin中一列输入数据Tn需要和实际中权重矩阵中多列进行相同的运算(也就是输入数据的重用),那么SB中的一列的位宽可以做的大一些(NBin一列是Tn=16宽度,也就是一列放16个输入特征; 那么SB一列可以设置成TnTn,也就是SB的一列代表权重矩阵Tn列,每列Tn个权重值,一共TnTn个数)。 从这个角度来说,将NBin和SB分开可以方便的根据reuse模式裁剪不同的位宽,如果是只用一个统一的buffer的话就做不到这点(一个buffer只能用一种位宽)。
NBout在输出最后结果之前,大部分时间可以用来缓存中间结果,这样中间结果先不回去memory。NBout缓存的中间结果可以回去NFU2进一步计算得到最终结果。
NBin和SB在DMA控制下进行preload,也就是每次计算单元取数时候数已经preload在buffer中了。
三个buffer用三个DMA控制,这样方便三个buffer中各自的取数写数操作。例如在计算过程中,SB和NBin的DMA要负责 preload 和 放数据给计算单元这两类任务。 NBout的DMA负责将中间结果wirte进NBout缓存 以及 将最终结果load回内存 这两类任务。可见DMA分开可以各自干各自事,比较灵活。
重要段摘录
老板言:看明白这一段和下一段,你们就能明白这种buffer设计,跟采用向量寄存器的区别和优势。
???黑人问号脸
DianNao: A Small-Footprint High-Throughput Accelerator for Ubiquitous Machine-Learning