登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
3
0
0
首页
技术杂谈
›
【转载】了解bl616/618之RISC-V 入门笔记(二) ...
返回列表
【转载】了解bl616/618之RISC-V 入门笔记(二)
[ 复制链接 ]
发布帖子
qwe2079282957
金牌会员
36
主题
242
回帖
2402
积分
金牌会员
金牌会员, 积分 2402, 距离下一级还需 598 积分
金牌会员, 积分 2402, 距离下一级还需 598 积分
积分
2402
私信
3人留言
楼主
技术杂谈
1241
3
2023-11-29 20:36:05
### [RISC-V之RV64]([https://blog.csdn.net/weixin_43914889/article/details/106108377?ops_request_misc=&request_id=&biz_id=102&utm_term=risc-v&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-106108377.142](https://blog.csdn.net/weixin_43914889/article/details/106108377?ops_request_misc=&request_id=&biz_id=102&utm_term=risc-v&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-106108377.142)^v96^pc_search_result_base2&spm=1018.2226.3001.4187#RISCVRV64_102) 尽管 RV64I 有 64 位地址且默认数据大小为 64 位,32 位字仍然是程序中的有效数据类 型。因此,RV64I 需要支持字,就像 RV32I 需要支持字节和半字一样。更具体地说,由于寄 存器现在是 64 位宽,RV64I 添加字版本的加法和减法指令:addw,addiw,subw。这些指 令将计算结果截断为 32 位,结果符号扩展后再写入目标寄存器。 RV64I 也包括字版本的移 位指令(sllw,slliw,srlw,srliw,sraw,sraiw),以获得 32 位移位结果而不是 64 位移 位结果。要进行 64 位数据传输,RV64 提供了加载和存储双字指令:ld,sd。最后,就像 RV32I 中有无符号版本的加载单字节和加载半字的指令,RV64I 也有一个无符号版本的加载 字:lwu。 出于类似的原因,RV64 需要添加字版本的乘法,除法和取余指令:mulw,divw,divuw, remw,remuw。为了支持对单字及双字的同步操作,RV64A 为其所有的 11 条指令都添加了双字版本。 由于版本众多,这里只选择有代表性的来了解  RV64F 和 RV64D 添加了整数双字转换指令,并称它们为长整数,以避免与双精度浮点 数据混淆:fcvt.l.s,fcvt.l.d,fcvt.lu.s,fcvt.lu.d,fcvt.s.l,fcvt.s.lu,fcvt.d.l,fcvt.d.lu. 由于整数 x 寄存器现在是 64 位宽,它们现在可以保存双精度浮点数据,因此 RV64D 增加了 两个浮点指令:fmv.x.w 和 fmv.w.x. 这里暂时不讲解压缩指令 ### RISC-V的特权架构 到目前为止,本书主要关注 RISC-V 对通用计算的支持:我们引入的所有指令都在用 户模式(应用程序的代码在此模式下运行)下可用。本章介绍两种新的权限模式:运行最 可信的代码的机器模式(machine mode),以及为 Linux,FreeBSD 和 Windows 等操作系统 提供支持的监管者模式(supervisor mode)。这两种新模式都比用和模式有着更高的权限, 这也是本章标题的来源。有更多权限的模式通常可以使用权限较低的模式的所用功能,并 且它们还有一些低权限模式下不可用的额外功能,例如处理中断和执行 I/O 的功能。处理 器通常大部分时间都运行在权限最低的模式下,处理中断和异常时会将控制权移交到更高 权限的模式。 嵌入式系统运行时(runtime)和操作系统用这些新模式的功能来响应外部事件,如网 络数据包的到达;支持多任务处理和任务间保护;抽象和虚拟化硬件功能等。鉴于这些主 题的广度,为此而编撰的全面的程序员指南会是另外一本完整的书。但我们的这一章节旨 在强调 RISC-V 这部分功能的亮点。 #### 机器模式 机器模式(缩写为 M 模式,M-mode)是 RISC-V 中 hart(hardware thread,硬件线 程)可以执行的最高权限模式。在 M 模式下运行的 hart 对内存,I/O 和一些对于启动和配 置系统来说必要的底层功能有着完全的使用权。因此它是唯一所有标准 RISC-V 处理器都 必须实现的权限模式。实际上简单的 RISC-V 微控制器仅支持 M 模式。这类系统是本节的 重点。 机器模式最重要的特性是拦截和处理异常(不寻常的运行时事件)的能力。RISC-V 将 异常分为两类。 一类是同步异常,这类异常在指令执行期间产生,如访问了无效的存储器 地址或执行了具有无效操作码的指令时。 另一类是中断,它是与指令流异步的外部事件, 比如鼠标的单击。RISC-V 中实现精确例外:保证异常之前的所有指令都完整地执行了,而 后续的指令都没有开始执行(或等同于没有执行)。 图 10.3 列出了触发标准例外的原因。 在 M 模式运行期间可能发生的同步例外有五种: ⚫ 访问错误异常 当物理内存的地址不支持访问类型时发生(例如尝试写入 ROM)。 ⚫ 断点异常 在执行 ebreak 指令,或者地址或数据与调试触发器匹配时发生。 ⚫ 环境调用异常 在执行 ecall 指令时发生。 ⚫ 非法指令异常 在译码阶段发现无效操作码时发生。 ⚫ 非对齐地址异常 在有效地址不能被访问大小整除时发生,例如地址为 0x12 的 amoadd.w 有三种标准的中断源:软件、时钟和外部来源。软件中断通过向内存映射寄存器中存 数来触发,并通常用于由一个 hart 中断另一个 hart(在其他架构中称为处理器间中断机 制)。当实时计数器 mtime 大于 hart 的时间比较器(一个名为 mtimecmp 的内存映射寄存 器)时,会触发时钟中断。外部中断由平台级中断控制器(大多数外部设备连接到这个中 断控制器)引发。 监管者模式 更复杂的 RISC-V 处理器用和几乎所有通用架构相同的方式处理这些问题:使用基于 页面的虚拟内存。这个功能构成了监管者模式(S 模式)的核心,这是一种可选的权限模 式,旨在支持现代类 Unix 操作系统,如 Linux,FreeBSD 和 Windows。S 模式比 U 模式权 限更高,但比 M 模式低。与 U 模式一样,S 模式下运行的软件不能使用 M 模式的 CSR 和 指令,并且受到 PMP 的限制。本届介绍 S 模式的中断和异常,下一节将详细介绍 S 模式 下的虚拟内存系统。 默认情况下,发生所有异常(不论在什么权限模式下)的时候,控制权都会被移交到 M 模式的异常处理程序。但是 Unix 系统中的大多数例外都应该进行 S 模式下的系统调 用。M 模式的异常处理程序可以将异常重新导向 S 模式,但这些额外的操作会减慢大多数 异常的处理速度。因此,RISC-V 提供了一种异常委托机制。通过该机制可以选择性地将中 断和同步异常交给 S 模式处理,而完全绕过 M 模式。 S 模式提供了一种传统的虚拟内存系统,它将内存划分为固定大小的页来进行地址转 换和对内存内容的保护。启用分页的时候,大多数地址(包括 load 和 store 的有效地址和 PC 中的地址)都是虚拟地址。要访问物理内存,它们必须被转换为真正的物理地址,这通 过遍历一种称为页表的高基数树实现。页表中的叶节点指示虚地址是否已经被映射到了真 正的物理页面,如果是,则指示了哪些权限模式和通过哪种类型的访问可以操作这个页。 扩展指令集 目前官方提供的risc-v扩展指令集有如下几个(确定将会实现的) 11.1 “B”标准扩展:位操作 … 11.2 “E”标准扩展:嵌入式 … 11.3 “H”特权态架构扩展:支持管理程序(Hypervisor) … 11.4 “J”标准扩展:动态翻译语言 … 11.5 “L”标准扩展:十进制浮点 … 11.6 “N”标准扩展:用户态中断 … 11.7 “P”标准扩展:封装的单指令多数据(Packed-SIMD)指令 … 11.8 “Q”标准扩展:四精度浮点 … 目前根据已经开源的设计方案,大多专注于B/J/Q/L指令的相关扩展 阿里平头哥文档[https://github.com/T-head-Semi/wujian100_open/tree/master/doc](https://github.com/T-head-Semi/wujian100_open/tree/master/doc) ### AI中涉及的运算操作 #### 机器学习 ``` 矩阵的转置、求逆运算 矩阵的切片与扩张 矩阵的乘法,点积,内积,外积,元素积 矩阵的加法,求和(包括求元素的平方和),L1,L2正则化 取指数与对数(逻辑回归,信息熵等) 标准化、归一化操作 ``` #### 深度学习 ``` 线性层:矩阵的外积 卷积层:矩阵的内积 池化层:求矩阵平均值(求和),或求最大值 残差网络,GoogleNet等,矩阵拼接 随机梯度下降,keep prob:随机值生成 压缩解压缩 加密解密(MAC运算等)# 5,6两个点涉及大整数操作以及优化,质数生成 张量、矢量、标量的运算 ``` ### 现有的AI指令集或其他底层解决方案 #### TPU解决方案 在TPU中,它使用若干条指令来完成矩阵的乘法运算,其中使用Read_Host_Memory来从主存中读取数据至通用缓存(Unified Buffer)中;使用Read_Weights来将权重读取至矩阵单元中。在进行矩阵运算时,使用MatrixMultiply或Convolve来进行矩阵乘法。最后使用Write_Host_Memory来将数据写回主存中。但是在TPU中,它的矩阵乘法对操作数的尺寸存在限制,在MatrixMultiply或Convolve中,其限制操作数为B256 与256256,若矩阵尺寸大与此值,则不太方便直接使用TPU进行运算;若矩阵尺寸小于此值,则需要先对多余部分填充0后再进行计算。 X86 在X86_64中,其在AVX、AVX2等指令集中提供了VMULPS、VMULPD、VADDPS、VADDPD等一系列SIMD指令,这些指令可以使用一条指令来完成多组数据的运算。在矩阵乘法等应用中,数据之间没有相互依赖性,因此可以使用SIMD指令来提高运算效率。  VMULPS指令示意图 与TPU相比,AVX至运算数据的尺寸上没有太多的限制,即使数据的规模较大,也可以拆分为多交指令执行。但这也造成AVX指令集的并行化程度一般不高,通常一条指令只能处理4-8条数据,效率远不如TPU等专门双击的架构,在人工智能的应用上仍然难以满足需要。 #### 现有AI芯片 现有的AI芯片,比如寒武纪的产品为了AI的运算也做了大量适配,比如构建大量的乘法器用来在一个周期内并行处理多个乘法操作,相应地指令集也会向着这个方向进行优化,如华为Ascend 系列AI芯片,内置的都是运算密集型CISC指令集来为AI运算做优化。但是这种设计模式的功耗以及设计的繁琐程度都很高,所以集成AI优化的RISC-V应该在保持灵活小巧的基础上对矩阵运算等AI领域常见的基本数学运算做优化,对机器学习和深度学习有一个泛化支持,虽然速度可能没CISC那么高,但是可以保持其精简以及自由拓展的特点。 #### 现有AI软件与芯片设计关系详解 本例以 Hanguang AI为例子,主要内容来自官方文档(可惜了达摩院) HanGuang Al是阿里巴巴-迖摩院旗下平头哥半导体有限公司开发的入工智能芯片软件开发包J 巨前主要服务于业界领先的含光800人工智能推理芯片。 使用HanGuang Al在含光800芯片上开发深度学习应用可以获得言吞吐量和低延迟的高性能体验。 HanGuang Al软件架构如下所示    可以看到,当前AI软件的主要工作还是分为了3个大部分,其中和AI芯片设计打交道的主要是量化、编译过程。  ## 参考资料 In-Datacenter Performance Analysis of a Tensor Processing Unit [https://arxiv.org/ftp/arxiv/papers/1704/1704.04760.pdf](https://arxiv.org/ftp/arxiv/papers/1704/1704.04760.pdf) 含光800软件介绍.pdf ———————————————— 版权声明:本文为CSDN博主「tsz danger」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:[https://blog.csdn.net/weixin_43914889/article/details/106108377](https://blog.csdn.net/weixin_43914889/article/details/106108377)
点赞
0
收藏
0
淘帖
0
────
0
人觉得很赞
────
回复
使用道具
举报
3 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
干簧管
回复
使用道具
举报
2023-11-30 09:47:13
顶
回复
评论
使用道具
举报
板凳
minmin_99
回复
使用道具
举报
2023-11-30 10:22:57
学习加一
回复
评论
使用道具
举报
地板
干簧管
回复
使用道具
举报
2023-12-1 22:29:05
学习
回复
评论
使用道具
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
返回
今日推荐
Ai-M61-32SU 模块硬件版本 V1.2-A1
浅尝bouffalo_sdk
腾讯WorkBuddy 编程测试
Codex的单片机写代码测试结果
记录下 ai编程cursor
Ai-M62-M10L的学习与使用
BU04 INIT FAILED
Ai-M61-32S-Kit学习与使用
BW16二次开发烧录失败
MDK5.40编译PB-03 SDK
热帖排行
Ai-M61-32SU 模块硬件版本 V1.2-A1
求助
立创直播还想要 “九章”MCP 验证套件的看这里
智能网球避震器,希望能与感兴趣的朋友交流
浅尝bouffalo_sdk
Ai-M61-32S开发环境搭建+电气工程及其自动化
腾讯WorkBuddy 编程测试
Codex的单片机写代码测试结果
统计信息
会员数: 30911 个
话题数: 44872 篇
首页
分类
我的