nvdla学习笔记_神经网络加速器NVDLA顶层接口与工作流程
Nvidia的开源神经网络加速器NVDLA已经在GitHub上面存在两个多月的时间了,而距离软件Software Stack的开源也差不多提上了日程。近期,NVDLA的代码库中已经更新了System C平台和Verilator,为更为便捷快速的软件仿真也提供了支撑。
对于NVDLA的Top层与外界的接口以及工作流程,这里做一下总结。目前开源的软件代码和测试例都只是针对nv_large模式,目前已经更新为nv_full模式。NVDLA的顶层接口包括控制总线,数据总线以及时钟复位和中断信号,比较简洁。控制总线CSB遵循简单地握手协议,而数据总线则采用简化版的AXI4.0协议。
控制总线CSB,即Configuration Space Bus,主要包括请求通道,读数据通道和写响应通道,包括12组信号线,具体信号线个数与所选择的AXI总线位宽有关。
请求通道,Request Channel,主要完成CSB Master对NVDLA的读写操作。其支持简单的valid/ready握手协议,地址位宽固定为16比特,数据位宽固定为32比特,且不支持burst操作,各个读写命令之间相互独立,不支持乱序完成和发射。
读数据通道,Read Data Channel,主要返回CSB Master读请求命令的数据,valid为高时,数据有效。也不支持乱序响应。
写响应通道,Write Response Channel,也遵循valid协议,针对no-posted模式,返回写响应信号,同时也不支持乱序响应。
下图是一个简单的两写两读的时序图,第二个写操作为no-posted模式。
NVDLA提供的Testbench中CSB Mater支持的指令有7条(TPU一代支持12条指令),主要完成寄存器和存储器的读写操作,以及大片数据的加载和卸载操作等,还有一条wait指令,等待NVDLA中断的完成。
NVDLA的存储器接口比较简单,采用了简化版的AXI4.0协议,比如支持的burst类型仅为Incr类型,且burstsize也与数据位宽对齐,保持一致等。
同时为了隐藏配置NVDLA寄存器带来的延迟和增加的神经网络处理时间,NVDLA采用了ping-pong寄存器模式,在group0寄存器工作的同时,CSB Master可以配置下一层的group1寄存器。这里需要注意的是,为了简化硬件设计,NVDLA子模块间的工作时序以及启动的依赖关系,都是由软件负责,这也与TPU相类似。可见,仅流片NVDLA,是没有任何实际意义的。
这里以一个简单的全连接层测试例介绍一下NVDLA的工作流程以及所需要的文件。程序文件类似于普通的高级语言编写的C代码文件,输入数据和权值,都是NVDLA的输入,都需要从模块外面导入到加速器内部。目前NVDLA没有开源软件框架,只提供了一个Perl脚本,将源程序文件转换成可执行的二进制代码,同时将dat数据文件转换成word存储形式。依次配置完成响应子模块并使能,等待中断返回。工作流程都还算直接,只是目前阶段还无法自己设计程序和测试例。
NVDLA nv_large的功耗,MAC矩阵尺寸为64x32,大致可以作为参考,功耗的绝大部分在于时钟网络,综合结果是在40LP@200MHz下的典型库单元获得的,这里只包括动态功耗。
目前只能等待NVDLA的软件框架和工具链开源,sigh~~~。
欢迎讨论交流
研究领域包括集成电路、无线通信等,涉及深度学习加速器、SoC设计空间探索、多核任务调度和新一代无线通信系统实现;具有65nm、40nm成功流片经验,在研项目包括28nm、16nm等。
中国科学院自动化研究所国家专用集成设计工程技术研究中心
nvdla学习笔记_神经网络加速器NVDLA顶层接口与工作流程相关推荐
- ios客户端学习笔记(六):iOS客户端的工作流程
iOS客户端的工作流程可以简单地概括为: 用户操作 -> 视图显示 -> 交互处理 -> 数据获取 -> 数据处理 -> 数据展示. 结合代码对每个工作流程进行更为具体. ...
- NVDLA学习笔记(1)
NVDLA学习笔记(1) 作者:夏风喃喃 参考:http://nvdla.org/index.html NVIDIA 深度学习加速器 (NVDLA) 是一个免费和开放的架构,促进设计深度学习推理加速器 ...
- NVDLA学习笔记(2)
NVDLA学习笔记(2) 作者:夏风喃喃 参考:http://nvdla.org/index.html 文章目录 NVDLA学习笔记(2) 硬件手册:硬件架构规范 一. 绪论 二. 功能描述 2.1 ...
- 系统架构师学习笔记_第六章(下)_连载
系统架构师学习笔记_第六章(下)_连载 6.3 基于 UML 的软件开发过程 6.3.1 开发过程概述 UML 是独立于软件开发过程的,能够在几乎任何一种软件开发过程中使用.迭代的渐进式软件开发过程 ...
- 吴恩达《机器学习》学习笔记十一——神经网络代码
吴恩达<机器学习>学习笔记十一--神经网络代码 数据准备 神经网络结构与代价函数· 初始化设置 反向传播算法 训练网络与验证 课程链接:https://www.bilibili.com/v ...
- 吴恩达《机器学习》学习笔记十——神经网络相关(2)
吴恩达<机器学习>学习笔记十--神经网络相关(2) 一. 代价函数 二. 反向传播算法 三. 理解反向传播算法 四. 梯度检测 五. 随机初始化 1.全部初始化为0的问题 2.随机初始化的 ...
- 吴恩达《机器学习》学习笔记九——神经网络相关(1)
吴恩达<机器学习>学习笔记九--神经网络相关(1) 一. 非线性假设的问题 二. 神经网络相关知识 1.神经网络的大致历史 2.神经网络的表示 3.前向传播:向量化表示 三. 例子与直觉理 ...
- oracle11g中用asmlib配置磁盘组,ASM学习笔记_配置ASMLIB磁盘组
ASM学习笔记_配置ASMLIB磁盘组 目录 1 ASMLIB Introduction 2 虚拟机添加一个共享磁盘(块设备) 3 下载,安装ASMLIB 4 配置,使用ASMLib 磁盘组 #### ...
- MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结 一.VARCHAR存储和行长度限制 1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是 ...
最新文章
- 信号量Semaphore一篇文章叫你明白
- NodeJS + Aliyun 实现 DDNS
- 于其炒股,不如......
- python入门教程共四本书籍-关于 Python 的经典入门书籍有哪些?
- 框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?
- [环境搭建]SDN网络感知服务与最短路径应用
- 使用CLion的时候,对于cmake的使用
- mysql设置不区分大小写
- 2021年品牌CDP与营销数字化转型报告:从自建数据资产到消费者深度运营
- 为什么今日头条、网易新闻都突然被强制下架了?
- Linux启动服务详解
- 利用 openresty balancer_by_lua 实现一个简单的 ip_hash upstream 调度
- 凤凰系统运行linux,开机引导凤凰os出grub
- Userscript+ 去除广告
- python神经网络模型调用后预测值不变_用R语言实现神经网络预测股票实例
- android qq分享纯图片,手机照片批量上传QQ空间一键分享省流量
- 使用Python进行IP地址查询
- Unity使用陀螺仪检测屏幕方向
- RDD、DataFrame、DataSet原理解析
- 那么普通却那么自信?浅谈元认知能力会怎样影响一个人的判断