文章目录
前言
本系列内容力求将nvdla的硬件设计和架构分析理清楚,如果有分析不对的请指出。
架构分析系列文章,链接分别如下:
架构开篇介绍文章:NVDLA内核态驱动代码整理三
系列文章1:NVDLA硬件信号和架构设计整理一
系列文章2:NVDLA硬件信号和架构设计整理二
欢迎持续关注我对内核态代码的解读,链接分别如下:
系列文章1:NVDLA内核态驱动代码整理一
系列文章2:NVDLA内核态驱动代码整理二
系列文章3:NVDLA内核态驱动代码整理三
系列文章4:NVDLA内核态驱动代码整理四
系列文章5:NVDLA内核态驱动代码整理五
系列文章6:NVDLA内核态驱动代码整理六
我们还是老规矩,把系列文章3:NVDLA内核态驱动代码整理三中的架构图搬出来:

note:本文中的激活值、特征、特征值、输入、ACT均指向同一内容,不做区分。接下来就稍微轻松很多,这一篇也相对比较水~
一、Single Point Data Processor
以下主要展开功能,而不是硬件设计,且功能的硬件实现较为简单,咱就从官网截个图意思意思。
1.1 Bias Addition

1.2 Non-Linear Function

注意,ReLU的硬件实现简单,对于Sigmoid,则需要依靠查找表来实现了。具体细节可以找官网对LUT编程的介绍。
1.3 Batch Normalization

1.4 Element-Wise Layer

1.5 PReLU

1.6 Format Conversion

关于SDP硬件支持的格式转化Table 30如下:

关于Convolution硬件支持的格式转化Table 29如下:

1.7 Comparison

1.8 Function Description
以上热身环节结束!接下来开始详细介绍SDP的架构设计!

架构中的若干子模块功能如下:
1、Block M is used to select input data from MEM or Conv Core, which can be set from register.
# Block M被用于选择借由M-RDMA传输过来的input data或者Conv Core传输过来的input data,选择过程由2-1 Mux实现。
2、Block X1/X2 have the same architecture and supports: Bias addition, BatchNorm, PReLU, ReLU, Eltwise.
# Block X1/X2有相同的架构并且支持 Bias Addition、BN、PReLU、ReLU、Element-Wise等操作。
3、Block Y is primarily designed for element-wise, but it’s also able to support Bias addition, PReLU. An extra LUT operation which can be selected before output to implement any non-linear operation.
# Block Y主要是为Element-Wise准备,但同时也支持Bias Addition、PReLU。同时有LUT来实现非线性操作。
4、Block C1/C2 is for additional scaling and offset to save bits while keeping accuracy high.
# Block C1/C2支持额外的扩展和补偿来实现bit-save,同时保持模型精度足够高。
5、A Demux on the very end to send the output data to either WDMA for writing back to memory, or to PDP for a subsequent pooling operation.
# 最后的2-1 Mux则用于WDMA或者PDP。
这里的RDMA应该是指Remote DMA,架构中大量存在可配置的bypass,从而软件可以根据层的计算需要来决定是否编程。

接下来补充各种工作模式的配置情况:


1.9 Buffer Size Estimation
单个数据处理子单元中主要有3个缓冲区:激活块中的LUT、读DMA缓冲区和写DMA缓冲区。LUT大小为(65+ 257) *2(BPE) = 644Bytes。对于M块中的读DMA缓冲区,需要考虑两个约束来确定其大小:1、内部SRAM访问延迟,延迟预计约为128个周期。 2、接入带宽,每个部分特征数据元素为16位,SDP每个周期需要处理16个元素,因此所需带宽为32字节。因此读DMA缓冲区大小为128×32=4KB。
1.10 Power Consideration
Element-Wise/BatchNorm操作并不总是包含在给定网络中。 因此,对于这些操作,BS/BN/EW 未完全运行,因此使用了时钟门控。
二、Planar Data Processor
PDP是NVDLA内部负责池化操作的单元。下面的示意图显示了PDP子单元的内部块,以及与其他单元和子单元的连接。PDP子单元从SDP或MCIF/SRMIF接收数据,并将数据发送到MCIF/SRAMIF。

有点纳闷儿,就是PDP的架构的输入来源可以是存储,也可以是SDP,按照之前的架构图,输出目的可以是存储,也可以是CDP。但是此图并没有考虑输出数据送到CDP的功能。
那PDP是怎么实现最大/最小、均值的池化?
1、如果输入数据元素是池化核的第一个元素,它将被存储到Share Line Buffer。Share Line Buffer中
的数据被称为部分结果。如果输入数据元素既不是池化核的第一个元素也不是最后一个元素,则将使用Share
Line Buffer中现有的部分结果对其进行操作,并将结果存储到原始部分结果的同一个entry中。部分结果
计算在Pre-Processing中完成。
# 其中,在最大/最小池化方案的情况下,部分结果是输入元素和原始部分结果的最大/最小值。
# 其中,在均值池方案的情况下,部分结果是输入元素与原始部分结果之和。
2、如果输入数据元素是池化核的最后一个元素,则它将与Share Line Buffer中现有的部分结果进行操作
以生成预最终结果。Post-Processing将从Share Line Buffer中获取预最终结果,并在正确操作后生成
最终结果。最终结果被发送到SRAMIF或MCIF。
2.1 Buffer Size Estimation

首先,shared_line_buffer以能够存放下pooling结果的一个整行为基础,因此公式中第一项为输出data cube的宽度。在列方向要求一定的深度,主要是为了一次从SDP输入的数据能够完整地得到计算。但实际上现有的目标检测方案中的池化操作并不复杂,因此NVDLA的PDP设计显然是过时的。
2.2 Power Consideration
PDP有相应的时钟门控。
三、Cross Channel Data Processor
CDP专门用于LRN归一化,其输入和输出的对象均为外部存储器。

LRN计算公式如下:

CDP的计算可以通过LUT来实现。
3.1 Buffer Size Estimation
cdp主要有3个缓冲区:激活块中的LUT、读DMA缓冲区和写DMA缓冲区。LUT大小与SDP相同(644B)。对于读DMA缓冲区,确定其大小有两个约束。1、内存系统访问延迟,假设为128个周期。2、接入带宽,峰值性能情况是每个周期8个字节(int8中8个元素,int16/fp16中4个元素),因此读DMA缓冲区大小为128×8=1KB
3.2 Power Consideration
和PDP一样,有时钟门控设计。
四、RUBIK
RUBIK模块用于变换Feature Data Cube,主要有三种工作模式:Contract、Split和Merge。
架构如下:

4.1 Contract
涉及到反卷积,因为不用,咱不提了。有兴趣的uu可以去看官网介绍!
4.2 Split and Merge
还是做一件NCHW合并和拆解的事儿~具体字节数等到后续分析RTL代码的时候再说!

4.3 Power Consideration
和前面的模块一样,设置了门控时钟。
五、Result Statistics

六、Pipelines of NVDLA core

总结
这篇博客是对Unit Description解释的后半篇。
文章详细介绍了NVIDIADeepLearningAccelerator(NVDLA)中的SinglePointDataProcessor,包括其功能模块如BiasAddition、Non-LinearFunctions、BatchNormalization等,以及硬件实现和功率优化。同时提及了其他如PlanarDataProcessor和CrossChannelDataProcessor的缓冲估计和电源考虑。
614

被折叠的 条评论
为什么被折叠?



