NVDLA专题10:具体模块介绍——Planar Data Processor

news2024/9/21 16:50:27

概述

平面数据处理器(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。

  1. 在最大/最小池化方案的情况下,pre-final结果是最终结果,不需要额外的操作。
  2. 在平均池化方案的情况下,最终结果可以通过以下方式计算除法对于硬件实现来说是昂贵的,所以用一对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)。在通常的实践中,在卷积层之后插入一个池化层。为了节省内存访问消耗,如果满足以下条件,平面数据处理子单元应直接从点处理单元接收数据。假设输出宽度是Width_{output},以字节表示的总缓冲区大小为Size_{buffer} ,重叠行号Num_{overlapped_line} ,以字节为单位的数据宽度是数据宽度 ,空间平面的数量称为正在进行的通道数量Num_{ongoing_channels},正常情况下,Num_{ongoing_channels} 应该等于kernel_per_group(对于INT16/FP16为16,对于INT8流水线为32),以下是平面加工的动态操作条件。

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

输出顺序如下图所示。

如果不满足planar processing on-the-fly操作条件,planar processing应在off-fly模式下工作,它从PDMA接收数据,正在进行的通道数始终为16。分两种情况,一种是非分幅,一种是分幅。输入数据序列如下图所示。

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

缓冲区大小估计

平面数据处理子单元中有三个主要的缓冲区:共享行缓冲区、读DMA缓冲区和写DMA缓冲区。对于共享行缓冲区,其大小决定了PDP是否可以直接处理来自SDP的数据。基于输入数据立方体高度Height_{input \,data \, cube},池化内核高度Height_{pooling \, kernel},池内核在高度方向上stride_{pooling \, kernel},输出数据立方体宽度width_{data \, cube},组大小(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中池层的平面处理子单元目标,根据对当前网络的分析,平面处理使用率预计不会很高。

根据池层数百分比,平面处理子单元很可能大部分时间处于空闲状态。因此,子单元级时钟门控非常重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2047531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

canvas的基础使用

canvas的基础使用 一、画一条直线二、线的属性设置三、防止多次绘制的样式污染四、闭合五、快捷绘制矩形六、绘制圆形七、绘制文字八、绘制图片js版dom版图片截取 一、画一条直线 画一条直线需要用到三个方法&#xff1a;cxt.moveTo、cxt.lineTo、cxt.stroke <canvas id&qu…

代码随想录训练营 Day32打卡 动态规划 part01 理论基础 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

代码随想录训练营 Day32打卡 动态规划 part01 一、 理论基础 动态规划中每一个状态一定是由上一个状态推导出来的&#xff0c;这一点就区分于贪心&#xff0c;贪心没有状态推导&#xff0c;而是从局部直接选最优的。 例如&#xff1a;有N件物品和一个最多能背重量为W 的背包…

【leetcode】两数相加-25-4

方法&#xff1a;遍历 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), ne…

探讨MySQL中 “约束“ 下的查询

目录&#xff1a; 一. 数据库约束 二. 表的设计 三. 聚合查询 四.联合查询 一. 数据库约束&#xff1a; 1.约束类型汇总&#xff1a; 约束类型 说明 NULL约束使用NOT NULL指定列不为 空UNIQUE唯一约束指定列为唯一的、不重复的DEFAULT默认值约 …

Xchart 相关操作

using Newtonsoft.Json; using System.Collections; using System.Collections.Generic; using UnityEngine; using XCharts; /***************************************************************************** Copyright (C) 2013-2023 北京普源瑞新仿真科技有限公司 All Ri…

工作流(低代码)提升工作效率的秘密武器

如何看待“低代码”开发平台的兴起&#xff1f; 在当今快速变化的数字化时代&#xff0c;企业面临着前所未有的挑战和机遇。如何在激烈的市场竞争中脱颖而出&#xff0c;成为每个企业必须思考的问题。而低代码工具&#xff0c;正是帮助企业提升工作效率&#xff0c;实现快速响…

在Windows上用Visual Studio编译OpenCV

在Windows上编译开源项目&#xff0c;有时候让人痛不欲生&#xff0c;有时候却出奇地顺利。OpenCV属于后者。本文记录这次愉快的过程。 注&#xff1a;OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库。它提供了大…

移动学习平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;教师管理&#xff0c;学生管理&#xff0c;班级管理&#xff0c;课程分类管理&#xff0c;课程信息&#xff0c;作业信息管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0…

全面解析被低估的 Symbiosis — 一站式跨链 AMM DEX,跨链交易的未来

在区块链技术快速发展过程中&#xff0c;互操作性和流动性问题一直是行业面临的核心挑战。随着越来越多的区块链网络&#xff08;无论是 Layer 1 还是 Layer 2&#xff09;&#xff0c;以及不同虚拟机环境&#xff08;EVM 和非 EVM&#xff09;的出现&#xff0c;用户和开发者都…

P37-数据存储

数据类型介绍 前面学习了基本的内置类型&#xff1a; 以及它们所占存储空间的大小。 类型的意义&#xff1a; 1.使用这些类型开辟空间的大小&#xff08;大小决定了使用范围&#xff09; 2.如何看带内存空间的视角 类型的基本归类 整形家族 之所以char也分类在其中是因为实…

云原生时代的数据守护者:Velero 备份与迁移实战

项目背景 在云计算和容器技术飞速发展的今天&#xff0c;Kubernetes 已经成为容器编排和管理的事实标准。然而&#xff0c;随着业务的不断扩展&#xff0c;如何在云原生环境下保护和迁移 Kubernetes 集群资源&#xff0c;成为了摆在运维人员面前的一大挑战。Velero&#xff0c…

RazorSQL for Mac/Win:强大的跨平台多功能SQL数据库编辑器RazorSQL for Mac/Win:功能强大的跨平台 SQL 数据库编辑器

RazorSQL 是一款备受赞誉的多功能 SQL 数据库编辑器&#xff0c;适用于 Mac 和 Windows 操作系统&#xff0c;为用户提供了高效、便捷且强大的数据库管理和操作体验。 首先&#xff0c;RazorSQL 支持多种主流的数据库类型&#xff0c;包括但不限于 MySQL、Oracle、SQL Server、…

搭建内网开发环境(三)|基于nexus搭建docker私服

引言 上一篇教程中演示如果安装和 nexus 的基本使用&#xff0c;本篇教程将演示如果在 nexus 中搭建 docker 私服&#xff0c;并实战如何上传镜像到私服和从私服下载镜像。 搭建内网开发环境&#xff08;一&#xff09;&#xff5c;基于docker快速部署开发环境 搭建内网开发环…

MySQL基础--触发器,锁

触发器 触发器是与表有关的数据库对象&#xff0c;指在 insert/update/delete 之前或之后&#xff0c;触发并执行触发器中定义的 SQL 语句集合&#xff0c;触发器的这种特性可以协助应用在数据库端确保数据的完整性&#xff0c;日志记录&#xff0c;数据校验等操作。 使用别名 …

KNN 图像识别

KNN&#xff08;K-Nearest Neighbors&#xff0c;K最近邻&#xff09;算法是一种简单而有效的分类算法&#xff0c;也可以用于图像识别。它的基本思想是通过计算样本之间的距离&#xff0c;将待分类的样本归为其在训练集中最相近的K个样本所属的类别中最常见的类别 1. 准备工作…

阿里巴巴25校招内推

内推投递链接&#xff1a; http://aidc-jobs.alibaba.com/campus/qrcode/home?codeMx8ppk_s4MjkOFnb6XS3Vw%3D%3D 流程安排 简历投递(网申、内推) 8.16开启笔试&#xff1a;集中笔试为8月-10月面试&#xff1a;启动后持续推进offer发放&#xff1a;启动后持续推进 内推二维…

FPGA 综合笔记

仿真时阻塞赋值和非阻塞赋值 Use of Non-Blocking Assignment in Testbench : Verilog Use of Non-Blocking Assignment in Testbench : Verilog - Stack Overflow non-blocking assignment does not work as expected in Verilog non-blocking assignment does not work a…

华为APP审核,权限说明弹窗

工具类 import android.app.Activity; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.PopupWindow; import android.widget.TextV…

OD C卷 - 建立Huffman树

生成Huffman树 (100) 给定一个数值数组weights&#xff0c;每个值代表二叉树叶子节点的权值&#xff08;>1&#xff09;;根据权值数组&#xff0c;生成哈夫曼树&#xff0c;并中序遍历输出&#xff1b;左节点权值< 右节点权值&#xff0c;根节点权值为左右节点权值之和&…