NVDLA专题9:具体模块介绍——Single Point Data Processor

概述

单点数据处理器(Single Point Data Processor, SDP)在单个数据元素级别执行后处理操作,其module NV_NVDLA_sdp定义在NV_NVDLA_sdp.v。在NVDLA 1.0版中,点处理旨在完成以下操作。

偏置加法

对于卷积层,卷积后总会增加一个偏差。在NVDLA中,我们在SDP中实现偏置加法。

偏置加法的数学公式为:

y=x + bias

x是输入数据可以来自卷积流水线或SDP M-RDMA;

偏执是一个预先训练的参数,可以是3个选项之一:

  • 寄存器:如果偏置对于整个数据立方体是唯一的;
  • SDP B/N/E-RDMA逐通道模式:如果同一通道中的所有元件共享偏置;
  • SDP B/N/E-RDMA逐元素模式:如果偏置是逐元素不同的;

非线性函数

SDP中的非线性功能硬件用于完成激活层操作。

基于当前的网络分析,有三种常用的激活函数:

  • ReLU,对于一个输入x,输出是max(x,0)
  • Sigmoid,对于一个输入x,输出是\frac{1}{1+e^{-x}}

  • Hyperbolic tangent,对于一个输入x,输出是\frac{1-e^{-2x}}{1+e^{-2x}}

在ReLU激活功能的情况下,它可以由硬件逻辑直接实现。Sigmoid和Hyperbolic tangent函数是非线性函数,因此它们应该通过查找表来实现,查找表可以根据需要加载函数。(详见编程指南文件“LUT编程”一节)。

Batch Normalization

Batch normalization 是一个广泛被使用的层,公式表示为:

x{}' = \frac{x-\mu }{\theta }

其中,μ 是平均值和θ 是标准方差,x是数据立方体特征的元素。 SDP支持使用给定的均值/标准差参数进行batch normalization,这个参数是从训练中获得的。 SDP可以支持每层参数或每通道参数进行batch normalization操作。当参数在每个通道时,它们在内存中交错(参见数据格式)。SDP中的DMA将从卷积管道中提取参数并计算特征数据立方体。

Element-Wise Layer

Element-wise layer是两个特征数据立方体之间的一种操作,这两个立方体具有相同的W、H和C尺寸。这两个W x H x C特征数据立方体进行逐元素的加法、乘法或最大/最小比较操作,并输出一个W x H x C特征数据立方体。

SDP单元可以支持所有3种数据精度类型的element-wise layer,SDP上的每个element-wise layer都配置为执行加法或乘法。 SDP支持基于element-wise layer的在线模式和离线模式。在线模式下,一个数据立方体来自卷积管道,另一个输入数据立方体从内存中取出。在离线模式下,SDP从内存中提取两个输入数据立方体。

PReLU

与将负值限幅为0的ReLU不同,PReLU的表达式如下:

缩放因子k可以是每个立方常数或每个通道变量。 SDP通过更新乘数行为来支持它:如果选择PReLU模式,乘数将绕过正值,只对负值应用缩放。PReLU模式由所有3个子模块中的乘法器支持。 注意:

1.BatchNorm和PReLU特征对于特定的子单元是排他的,这是因为一个子单元只有一个乘数可用; 2.如果为一个子单元启用了PReLU,则该单元中的ALU必须被旁路(bypassed)。这是因为子单元只有一个截断,而这里负/正需要不同的截断。

格式转换

NVDLA支持INT8、INT16和FP16精度。精度越低,性能越高,而精度越高,推理结果越好。 不同的硬件层可能需要不同的软件精度,因此精度转换是必要的。 SDP负责精度转换,一个硬件层支持的转换如下表所示。

如果SDP从卷积内核获取数据,支持的格式转换如下表所示

精度转换和常规SDP功能是独立的,这意味着SDP能够同时进行转换和运算(例如:偏置相加、BatchNorm、EW等)。

比较

SDP_Y中的比较模式采用2个输入进行比较。如果输入数据立方体中的任何元素对不匹配,则在硬件层完成后更新状态寄存器。 为了节省带宽,在比较模式下,不会有任何输出写入外部存储器。

功能描述

下图显示了点处理子单元的内部模块以及与其他子单元的连接。

功能块:

有几个功能块,每个功能块都有不同的用途:

  • 模块M用于选择来自MEM或Conv内核的输入数据,可通过寄存器进行设置
  • 块X1/X2具有相同的架构和支持:偏置加法、BatchNorm、PReLU、ReLU、Eltwise。
  • 块Y主要是为element-wise设计的,但是它也支持偏置加法,PReLU。一种额外的LUT运算,在输出之前可以选择它来实现任何非线性运算。
  • 块C1/C2用于额外的缩放和偏置,以节省比特,同时保持高精度。
  • 最末端的Demux将输出数据发送到WDMA以写回内存,或者发送到PDP以进行后续的池操作。

大多数功能单元具有可配置的旁路(bypass)模式,因此软件可以选择全功能或部分功能,以匹配一个硬件层中所需的所有操作。

每个子单元的吞吐量为:

1. 工作模式:Flying:

  • On-flying:源数据来自Conv-Core
  • Off-flying:源数据来自内存,由M-RDMA读取

2. 偏置加法:

操作数据可以是每个元素、每个通道或每个立方体,实际操作可以基于软件配置在X1/X2/Y中的任何一个执行。

  • 如果是每个元素/通道,将从MEM获取偏差数据。如果启用了截断,则所有元素共享相同的截断值。
  • 如果是每个立方体,偏置数据将由寄存器设置。

乘数将被绕过

3. Batch Normalization

操作数数据可以是每个元素、每个通道或每个立方体,实际操作可以根据软件配置在X1/X2/Y中执行。

  • 如果是每个元素/通道,操作数数据将从MEM获取。如果启用了截断(truncate),则所有元素共享相同的truncate值。
  • 如果是每个立方体,操作数数据将通过软件配置寄存器设置。

加法器和乘法器的操作数数据应该打包在一起,并且每个元素、每个通道或每个立方体的格式相同。有关详细信息,请参见数据格式。

ReLU可以被旁路或使能。

4. Element-Wise

操作数数据可以是每个元素、每个通道或每个立方体

  • 如果是每个元素/通道,如果启用了截断,所有元素共享相同的截断值,则将从MEM获取操作数数据
  • 如果是每个立方体,操作数数据将由软件配置寄存器设置

操作数数据应该是最大值/最小值/总和,或者是乘数

可以绕过或启用LUT

5. PReLU:

操作数数据可以是每个通道或每个立方体

  • 如果是每个通道且启用了截断,所有元素共享相同的截断值,则将从MEM获取操作数数据
  • 如果是每个立方体,操作数数据将由寄存器设置;

对于乘法器,PReLU模式位应设置为真。该位置位后,硬件将旁路正输入样本,缩放将应用于负输入。

可以绕过或启用LUT

6. 混合模式(软件功能)

偏置加法/BatchNorm是线性操作。这意味着软件可以将这些操作融合到一个子模块中,以优化功耗/性能。以BiasAddition + BatchNorm为例,如果他们正在处理分离的子模块运行,那么公式是

如果融合两个公式成一个,可以得到

作为μ,θ,bias 是预先训练的参数,软件可以将它们融合成一个立方体,因此是可行的; 总之,下表列出了每个子单元支持的功能:

数据序列: 以偏置加法为例,如果偏置/操作数数据是每个元素的: 点处理输入/输出顺序由卷积输出顺序决定。在大多数情况下,所有输入/输出接口中的输入和输出序列顺序都是相同的,这正是下图所示的卷积输出序列。

偏置/操作数数据是每个通道的:

当在同一surface上处理特征数据时,将从内存中提取数据,并在多个cycle内保持一个值。当特征数据更改为下一个surface时,它将更新为下一个surface的值。

偏置/操作数数据是每个立方体的:

数据将被设置在软件配置寄存器中,并且在硬件层的整个执行时间内不会改变。

缓冲区大小估计

在单个数据处理子单元中有三个主要缓冲区:激活块中的LUT、读DMA缓冲区和写DMA缓冲区。LUT的大小是(65+257)* 2(BPE)= 644字节。

对于M块中的特征读取到DMA缓冲区,有两个约束要考虑以确定其大小。一个是内部SRAM访问延迟,等待时间预计约为128个周期。另一个是接入带宽,每个部分特征数据元素为16位,SDP每个周期需要处理16个元素,因此所需带宽为32bytes。因此,读DMA缓冲区的大小为128×32 = 4kBytes 。

如果BS/BN/EW必须支持每个元素32位的BatchNorm模式,则取消链接特征数据。因此,这两个模块的读DMA缓冲区大小为:32(位)*128(周期)*16(元素)/8 = 8kbytes。

功耗

给定网络中并不总是包括基于元素/批处理操作。因此,对于大多数操作,BS/BN/EW没有完全运行,因此使用了时钟门控。

  • 13
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值