1. V扩展简介

  • 基本
  1. 矢量指令进行优化的硬件可以应用到图像处理、 AI 或机器学习中
  2. RVV矢量长度可变
  3. RVV较为考验软件部分,要求编译器能够优化代码执行向量指令
  • V扩展中容易混的几个参数
  1. VLEN:向量寄存器宽度,要求VLEN ≥ ELEN
  2. ELEN:单个向量元素的最大宽度,要求 ELEN ≥ 8,并且必须为2的幂。一般的,元素宽度的最大值就是XLEN值。
  3. SLEN:分段距离,VLEN ≥ SLEN ≥ 32,并且必须为2的幂。SLEN 表示的是在相同的元素级混合宽度算术运算操作中的向量寄存器bit位之间的最大位移
    (该量在rvv1.0版本中已删去)
  4. SEW:standard element width 标准元素宽度,向量寄存器被视为分成 VLEN / SEW 个标准宽度元素。
  5. LMUL:每组向量寄存器中向量寄存器个数, 需满足LMUL≥SEW / ELEN,即在极限情况下(VLEN=ELEN),要使得LMUL*VLEN>=SEW,一个寄存器群要能保存一个计算元素。
  6. VLMAX:可以使用单个向量指令操作的最大元素个数,等于VLEN/SEW*LMUL
  7. AVL:外部要求的参与运算的元素个数
  8. vl:向量长度寄存器,保存要通过向量指令更新的元素数,vl的值为min(VLMAX, AVL)
  • 32-bit/64-bit区别

32位机和64位机本质上没有区别,因为向量运算中基本的元素宽度SEW是可配置的。

唯一的区别在于特权寄存器的配置

2. V扩展中的寄存器

riscv-v-spec规定在基本spec增加了32个向量寄存器(记为v0-v31,位宽均为VLEN)和7个非特权CSRs(分别为vstart, vxsat, vxrm, vcsr, vl, vtype, vlenb,位宽均为XLEN)

1.与特权寄存器相关配置

  • mstatus[10:9]

向量上下文状态字段VS:mstatus[10:9](同样包括sstatus[10:9])。VS的定义类似于浮点上下文状态FS。
当 VS 字段被设置为 Off ,试图执行任何向量指令或访问向量CSRs时,会引发非法指令异常;当被设置为 Initial 或 Clean ,执行更改向量状态的指令,包括向量 CSRs 指令该字段会变为 Dirty 。

2.普通向量寄存器

v0寄存器一般作为掩码寄存器,其他寄存器均作为普通向量寄存器使用

3.特殊向量寄存器

  • vtype:向量类型寄存器

用于解释向量寄存器文件内容的默认类型,并且只能通过vsetvl指令进行更新。向量类型还决定了每个向量寄存器中元素的排布,以及如何对多个向量寄存器进行分组。

  1. vsew[2:0]:设置向量寄存器中每个元素宽度SEW,向量寄存器被视为分成 VLEN / SEW 个标准宽度元素。
  2. vlmul[2:0]:向量寄存器分组,多个向量寄存器可以分成一组,以便单个向量指令可以对多个向量寄存器进行操作,
    LMUL = 2^(vlmul[2:0])  VLMAX=LMUL*VLEN/SEW

    注意:vlmul[2:0]是一个有符号数

    寄存器组可以对相同向量宽度的标准宽度元素的溢出进行有效处理,即是动态修改vtype值,保证SEW/LMUL 为常量即可

    注意:在某些混合LMUL配置的指令中,向量寄存器的编号均采用LMUL最大值的配置

  3. vill: 向量类型非法,若vill置1,则依赖于vtype的指令会引发非法指令异常,且其余的XLEN-1的所有值均被强制置0
  4. vma:
  • vl: 向量元素长度寄存器

该寄存器的值是通过 vsetvli / vsetvl 两个指令自动设置的,
即选取VLMAX= VLEN/SEM*LMUL和AVL(需要被应用的向量寄存器长度,通常通过一个GPR传递)中的较小值,给vl寄存器,并将该值通过一个GPR保存起来
vl=min(VLMAX, AVL)
通常用指令vsetvli设置vtype值,用vsetvl作为上下文保存

  • vlenb: 向量寄存器长度(以字节为单位)

该值为一个定值(VLEN/8),方便代码知道VLEN的值

注意vlenb和vl代表的意义没有直接关系,不要混淆。

  • vstart: 向量起始索引寄存器

指定向量指令要执行的第一个元素的索引。该寄存器只有在向量指令陷入时才被硬件写入,表示在其上执行陷入指令的元素(同步异常或异步中断),并且在处理可恢复陷入指令返回后,向量操作应从vstart指向的元素开始执行,指令执行结束后reset vstart值。

所有向量指令都定义为从vstart中给定的元素编号开始执行,并在执行结束时将vstart置0。

使用vsetvl指令配置时,如果vstart寄存器中的值大于向量长度vl时,则不执行任何元素操作,然后 vstart寄存器被重置为零。

vstart、掩码、VL设置对应的元素运算范围如上图所示。

  • vxrm: 向量定点舍入模式寄存器

定点舍入算法如下: 假设预舍入结果为v,d位结果被舍入。然后,舍入结果为(v >> d) + r,其中r取决于下表中指定的舍入模式

  • vxsat: 向量定点饱和标志

保存一个读写位,表示定点指令是否必须使输出值饱和,以此适应目标格式。

  • vcsr

vxrm和vxsat可以通过单独csr指令来操作,也可以通过向量控制和状态寄存器vcsr来访问。

3. 指令编码格式

整数指令的编码格式

  • 立即数若无特殊规定,均为有符号数

4. 指令功能

向量指令包括基本向量指令(必须实现的)和一些扩展指令(Z开头、AMO)。

1.配置指令

  • vsetvli / vsetvl

该指令用来配置vtype和vl两个寄存器的值,并将vl的新值写入到rd寄存器中。

rs1储存需要处理的向量大小(外部提出的需求),即AVL(application vector length),该指令会将AVL与VLMAX作比较后取较小值赋给vl,并赋值给rd。这样做的目的是一方面如果AVL>VLMAX,用来处理的向量元素不超过SEW,另一方面使用尽可能少的资源处理数据

vsetvli采用立即数赋值,vsetvl用寄存器赋值

2 访存指令

  • stride/gather/scatter/segment操作的区别




5. 补充:RVV软硬件生态、

  • 工具链
  1. 工具链对intrinsic的支持情况
    EPI、SiPearl和SiFive联合发布了一份RISC-V “V”(向量)扩展的Intrinsics的规范,并且已经被RISC-V采纳为标准规范。GCC工具链已经较完整支持了RISC-V “V”向量扩展的汇编,并且持续在跟进向量扩展的最新版本
    可参考链接:RISC-V "V"(向量)扩展Intrinsics - 知乎
  2. 相关工具链

    卡姆派勒开源32bit LLVM向量编译器:https://www.sohu.com/a/415960738_120163133

    卡姆派乐信息科技有限公司此次开源的RISC-V向量编译器符合riscv-v-spec-0.8规范,支持的指令集架构为isa=rv32imafcv,向量长度vlen=128,共提供6000多个intrinsic函数接口。用户可以访问https://github.com/compiler-dev/llvm-rv.git下载源码,并根据README.md说明,选择从源码编译运行环境所需要的ld、newlib和libgcc等工具集,也可以直接下载我们编译好的二进制包。二进制包下载地址:https://github.com/compiler-dev/rvvtool-chain-binaries,用户将编译好的开源llvm代码安装到这个路径即可使用。
    开源代码中提供了每条intrinsic的接口说明,用户可以访问帮助文件查看每个接口的功能及参数。在目录rvv-test/intrinsic提供了1500多个测试文件(只包含m1)。同时rvv-test目录下还提供了多个可以在spike模拟器上运行的测试用例。
    LLVM编译器github链接:https://github.com/compiler-dev/llvm-rv
    编译后的可执行文件:https://github.com/compiler-dev/rvvtool-chain-binaries

  3. 优化编译的支持情况
    TSVC博客:RISC-V自动向量化测试报告 - 知乎
    TSVC测试:https://dl.acm.org/doi/fullHtml/10.1145/335684
  4. opencv支持情况

    参考链接:GSoC项目 Optimize OpenCV for RISC-V - 知乎

  • 目前实现rvv扩展的CPU
    玄铁C910: rvv-0.7.1
    晶心科技NX27V:晶心科技推出突破性的RISC-V 27系列处理器及向量扩展指令处理器-电子发烧友网

RSIC-V——指令集spec阅读笔记——向量扩展0.9相关推荐

  1. Node.js 代码阅读笔记系列(0)Timer 的实现

    setImmediate 先来看看当我们使用 setImmediate 的时候经历了那些过程 我们先这样用 setImmediate(fn, arg)复制代码 可以看到 setImmediate 接收 ...

  2. 【《RISC-V “V“ Vector Extension Version 1.0》阅读笔记】

    <RISC-V "V" Vector Extension Version 1.0>阅读笔记 RISC-V "V" Vector Extension ...

  3. ffmpeg 代码阅读笔记1/2

    ffmpeg 代码阅读笔记1/2 ============================================================ 0. ffmpeg 主流程 ======== ...

  4. [阅读笔记]Dependency-Based Word Embeddings(基于依存的词向量) _Omer Levy and Yoav Goldberg

    [阅读笔记]Dependency-Based Word Embeddings(基于依存的词向量) _Omer Levy and Yoav Goldberg 文章目录 [阅读笔记]Dependency- ...

  5. E203 蜂鸟 RISC-V处理器代码阅读笔记 之指令预取模块2(指令分支预测) e203_ifu_litebpu.v.v

    这个文章记录了我学习RISC-V蜂鸟E203处理器的学习历程 这是我正式阅读代码学习的第3个源代码文件 针对代码的学习,我结合自己的理解对每个module的接口,以及内部关键信号做了详细的注释说明 原 ...

  6. Learning Multiview 3D point Cloud Registration论文阅读笔记

    Learning multiview 3D point cloud registration Abstract 提出了一种全新的,端到端的,可学习的多视角三维点云配准算法. 多视角配准往往需要两个阶段 ...

  7. 论文阅读笔记:《EIGENGAME: PCA AS A NASH EQUILIBRIUM》(特征博弈:主成分分析就是纳什均衡)

    论文阅读笔记:<EIGENGAME: PCA AS A NASH EQUILIBRIUM>(特征博弈:主成分分析就是纳什均衡) 声明 摘要 1 简介 2 PCA as an Eigen-G ...

  8. Learning to Track with Object Permanence阅读笔记

    Learning to Track with Object Permanence阅读笔记 (一) Tilte (二) Summary (三) Research Object (四) Problem S ...

  9. (论文阅读笔记)OLE:正交低秩嵌入,即插即用的几何损失

    论文阅读笔记:OLE: Orthogonal Low-rank Embedding, A Plug and Play Geometric Loss for Deep Learning 摘要 简介 2 ...

最新文章

  1. 京东果然发福了:宣布涨薪两个月! 2 年内将员工平均薪资涨至 16 薪
  2. 2016年将是Java终于拥有窗口函数的那一年!
  3. raspberry pi 家族
  4. Oracle安全漏洞2016.10报告
  5. Racket 6.11提供了稳定的细化类型和依赖函数特性
  6. 【大数据分析】Spark SQL查询:使用SQL命令
  7. 项目Kick Off 我们应该做什么?
  8. vue实现刷新页面,页面回到顶部
  9. 中通快递信息怎么批量导出到表格呢?
  10. java拼图_java实现拼图游戏
  11. [C++]判断齐次坐标系中三点是否共线(三个向量是否共面)
  12. IT资产管理系统的技术优势!
  13. Shift+鼠标右键没有:在此处打开命令窗口(W)
  14. 嵌入式 BT656/BT601/BT1120协议差异小结
  15. Python简陋版工资管理系统
  16. 无广告,小体积,实用性拉满的5款软件
  17. 中英双语界面的 Premiere Pro
  18. 知识图谱初步学习(一)——本体+Protege新手学习
  19. 企鹅FM音频下载器V1.0 企鹅FM下载器
  20. 得到-薛兆丰的北大经济学课-4-价格的作用

热门文章

  1. 刷脸支付营销广告一站式便捷的应用
  2. 本科论文答辩中怎样回答研究过程和方法
  3. com.mysql.cj.exceptions.DataReadException: Zero date value prohibited
  4. 55、网络交换机上各种接口你都认识吗
  5. 基于华为云IOT平台实现多节点温度采集(STM32+NBIOT)
  6. 凤舞天骄TB商店修改器V1.0(DELPHI源代码,无需注册)
  7. java与移动智能设备开发_移动时,您应该如何处理所有智能家居设备?
  8. 浙江省计算机哪些专科学校好,浙江计算机网络技术大专有哪些
  9. Linux环境使用阿里云短信服务报错
  10. 陈泽辉 (Keith Chan)个人简介