NVDLA专题10:具体模块先容——Planar Data Processor

[复制链接]
发表于 2026-2-5 17:48:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
概述

平面数据处置惩罚器(Planar Data Processor, PDP)沿宽x高的前两个维度平面实行利用,在NVDLA版中,PDPD旨在实现池化层,module界说在NV_NVDLA_pdp.v。支持最大、最小和均匀池化方法。平面内的几个相邻输入元素将被发送到非线性函数来盘算一个输出元素。下图体现了最大池的一个示例。3x2相邻元素中的最大值是归并结果值

下图体现了PDP子单元的内部模块,以及与其他单元和子单元的毗连。该图从概念上捕捉了功能,但没有体现实际的RTL模块和条理布局。平面数据处置惩罚子单元从SDP或MCIF/SRAMIF汲取数据,并将数据发送到MCIF/SRAMIF。

池化利用在一个平面内完成,差异平面之间没有干扰。下图体现了在一个平面上池化的完备方案,两个相邻内核的偏移量称为步距(stride)。当步距小于核的R和S时,存在重叠线,一些行大概被两个以上的相邻内核利用。输入数据按光栅扫描序次活动,对于每个池内核,利用的数据也以光栅扫描序次活动。

假如输入数据元素是内核的第一个元素,它将被存储到共享行缓冲区。共享行缓冲区中的数据被称为部分结果。假如一个输入数据元素既不是内核的第一个元素也不是末了一个元素,它将利用共享缓冲区中已有的部分结果举行利用,结果将存储到原始部分结果的同一条目中。部分结果盘算在预处置惩罚块中完成。

  • 在最大/最小池化方案的情况下,部分结果是输入元素的最大/最小值和原始部分结果。
  • 在均匀池方案的情况下,部分结果是输入元素和原始部分结果的总和。
假如输入数据元素是内核的末了一个元素,它将与来自共享行缓冲区的已有部分结果一起利用,以天生pre-final结果。后处置惩罚模块将从共享行缓冲区获取pre-final结果,并在得当利用后天生终极结果。这个终极结果被发送到SRAMIF或MCIF。

  • 在最大/最小池化方案的情况下,pre-final结果是终极结果,不必要额外的利用。
  • 在均匀池化方案的情况下,终极结果可以通过以下方式盘算
    除法对于硬件实现来说是昂贵的,以是用一对scale_factors将除法转化为乘法。
共享同一行数据的内核的最大数目由ceiling(Kernel _ height / Stride_H)决定 。一个平面内所需的总缓冲器条目数是width _ out×ceiling(Kernel _ height / Stride_H) ,并在RTL筹划中分配总缓冲区入标语total_buf_entry 在一个平面内如下,每个entry 112位:

由于池化利用是一种下采样方法,因此有大量信息被扬弃。大型内核中的池化粉碎性太大。在当前分析的网络中,有三种最常见的情况,一种是池巨细为3x3,步幅为2x2。另一个是池巨细2x2,步幅2x2,末了一个是池巨细3x3,步幅1x1。尚有别的两种较少利用的情况:一种是池巨细为3x3,步幅为3x3。另一个是池巨细7x7,步幅1x1,常用网络的池化数据如下:

以是2 ~ 8个池内核巨细(宽度和高度)范围和1~8个步长范围对于正常利用来说富足了。在RTL筹划中,我们将池化内核巨细范围设置为1~8,将步幅范围设置为1 ~ 16。
平面数据处置惩罚子单元有两条输入路径。一个是单点数据处置惩罚子单元,另一个是外部RAM (MC/SRAM)。平面处置惩罚子单元有一个输出数据路径。输出数据总是发送到PDP外部的RAM(MC/SRAM)。在通常的实践中,在卷积层之后插入一个池化层。为了节流内存访问斲丧,假如满意以下条件,平面数据处置惩罚子单元应直接从点处置惩罚单元汲取数据。假设输出宽度是
,以字节体现的总缓冲区巨细为
,重叠行号
,以字节为单元的数据宽度是数据宽度 ,空间平面的数目称为正在举行的通道数目
,正常情况下,
应该便是kernel_per_group(对于INT16/FP16为16,对于INT8流水线为32),以下是平面加工的动态利用条件。

当输入数据来自点处置惩罚子单元时,输入数据序列与卷积输出序列雷同,如下图所示。

输出序次如下图所示。

假如不满意planar processing on-the-fly利用条件,planar processing应在off-fly模式下工作,它从PDMA汲取数据,正在举行的通道数始终为16。分两种情况,一种优劣分幅,一种是分幅。输入数据序列如下图所示。

输出数据序列如下图所示。

缓冲区巨细估计

平面数据处置惩罚子单元中有三个重要的缓冲区:共享行缓冲区、读DMA缓冲区和写DMA缓冲区。对于共享行缓冲区,其巨细决定了PDP是否可以直接处置惩罚来自SDP的数据。基于输入数据立方体高度
,池化内核高度
,池内核在高度方向上
,输出数据立方体宽度
,组巨细(int16/FP16的16个元素或int8的32个元素,~32byte),Groupsize和bytes_per_element(int8 为14/8,INT16为28/8,FP16为28/8)。

假如共享行缓冲区容量小于所需的斲丧巨细,PDP必须在离线模式下工作,因此会有性能降落,由于必要额外的时间来将数据存储到MC/SRAM,然后取回PDP举行池化处置惩罚。

上表中,最小case大多数下小于7KBytes,因此,为了平衡性能,将共享行缓冲区巨细设置为7kBytes。
对于读DMA缓冲区,确定其巨细有两个限定,一个是涵盖MC访问延长,假设为128个周期。另一个是接入带宽,峰值性能的情况下是每个周期8字节(int8中8个元素,int16/fp16中4个元素)。以是读DMA缓冲区的巨细是128×8 = 1kBytes。
功耗

NVDLA 1.0中池层的平面处置惩罚子单元目标,根据对当前网络的分析,平面处置惩罚利用率预计不会很高。

根据池层数百分比,平面处置惩罚子单元很大概大部分时间处于空闲状态。因此,子单元级时钟门控非常告急。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表