RISC-V vector(1) --- vector的引入与register说明

news2024/9/27 23:34:44

Vector相较于SIMD的优势

     这两种实现方案,都是为了实现数据级并行性(存在大量的数据可供程序同时计算);

SIMD(Single Instruction Multiple Data)

     SIMD是将数据宽度和操作类型,都放在了指令中;

        

  • SIMD技术最初通过将64位寄存器的数据拆分成多个8位、16位、32位的形式来实现byte、half word、word类型数据的并行计算;
  • 在后续,为了进一步增加计算的并行度,SIMD技术开始通过增加寄存器位宽来满足应用对算力的需求;
  • 因此,扩展SIMD的寄存器,意味着要同时扩展SIMD的指令集;
  • 而这种改变SIMD寄存器的宽度和SIMD指令数量的翻倍,都让ISA走上了复杂的道路;
  • 这一后果由处理器设计者、编译器编写者和汇编语言程序员共同承担;

VECTOR

RISC-V Vector 拥有其他架构矢量指令没有的两大优点:硬件维护方便与指令长度可变

  • 向量寄存器的大小由实现决定,而不是像SIMD中那样嵌入操作码中;
  • 它将向量的长度和每个时钟周期可以进行的最大操作数分离,是向量体系结构的关键所在:
    • 向量微架构可以灵活地设计数据并行硬件而不会影响到程序员,程序员可以不用重写代码就享受到长向量带来的好处。
  • 对于某一个矢量操作,即使硬件中的寄存器长度变化,代码也不需要作更改;
  • 相反的,在同一硬件中,即使指令长度作相应改变,代码也不需要更改。
  • 这意味着任何 RISC-V 兼容处理器编写的代码在其余 RISC-V 处理器上依然适用,这对于用户来说,简易性直线上升。
  • 上述的优点也就意味着,向量架构比SIMD 架构拥有更少的指令数量;

Vector register

register

  • v0~v31, 32个vector寄存器,每个寄存器的宽度都是由VLEN决定的;
  • Vector Context Status in mstatus/sstatus
    • 放在mstatus[10:9], 用来指示相关状态;
    • 当VS==off时,执行任何的vector指令,或者访问vector的CSR,都会产生illegal-inst excp;
    • 当VS set to initial or clean时,只要执行vector指令,或者访问vector CSR, 会将VS状态改为dirty; 当然,具体的实现可以随意更改该状态,而不必等到有vector访问;
    • 如果VS是dirty的,则mstatus.SD要设置成1; 
  • Vector Context Status in vsstatus    
    • When the hypervisor extension is present;
  • Vector type register, vtype
    • read-only XLEN-wide vector type CSR;
    • can only be updated by vset{i}vl{i} instructions.
    • vlmul(vector length multipler), vector register grouping, 指的是多个vector的寄存器,可以被分成多个group, 这样一个vector instr, 就可以在多个vector寄存器上处理;
      • LMUL is set by the signed vlmul field in vtype (i.e., LMUL = 2**vlmul[2:0]),表示需要多少个寄存器参与运算;
      • the requirement is to support LMUL ≥ SEW_MIN/ELEN
        • SEW, selected element width, 参考下一节的描述;
        • ELEN, 最大的SEW;
        • 所以,从上面的公式来看,LMUL可以是整数,也可以是分数;
        • 当LMUL< SEW_MIN/ELEN时,需要设置vill,表示指令异常;
    • vsew,就是对应的element宽度;
      • 例如,假如一个寄存器是128bits, 那么:
      • 默认情况下,一个vector的寄存器,会被认为分成了VLEN/SEW elements
    • vta & vma;
      • vta, vector tail agnostic;
      • vma, vector mask agnostic;
      • 这两个bit用来控制vector instruction的tail element和inactive element的行为;
      • undisturbed: 不受干扰; agnostic: 不可预知;
      • 当一个element被标记成undisturbed时,则vector register group中响应的element将会保留原来的值不变;
      • 当一个element被标记成agnostic时,destination element既可以保留原来的值,也可以overwrite by 1;
      • 为什么需要agnostic?
        • 在有些处理器中,会采用寄存器重命名的技术,比如超标量流水线处理器,在undisturbed策略下,必须从旧的物理目标向量寄存器中读取元素值,才能复制到新的物理目标寄存器中;也可以说,在新的物理寄存器进行重命名时,需要根据重命名映射表,查到原有的映射关系,然后把其中的元素值读出来,写到重命名后的对应元素。这对于不需要这些非活跃元素和尾部元素值的之后的运算既降低了性能也增加了功耗。因此undisturbed策略就显得很不可观,此时按照agnostic策略进行运算比较好。

    • vill;

      • 此bit用来当vset指令想要往vtype中写入不支持的值时,vill字段置1;

      • 当vill bit置位时,任何想要用vtype来做vector operation的指令,都会产生一个illegal-instruction excption;

      • 当vill有效时,vtype其他字段全部清零;

  • vector length register

    • 向量长度寄存器,只读,规定了一条向量指令需要操作的元素个数,为无符号数。

    • 该寄存器只被vsetvli、vsetvl指令和fault-only-first向量加载(load)指令变量更改。

    • 当vl=0或者vstart≥vl时,目的寄存器的所有元素都不被更改,也可以说指令不执行。

    • vl的宽度由最小元素宽度(SEW)和最大向量长度决定,其中SEW规定了指令执行元素的宽度,最小为8,最大向量长度为组成的最长的向量寄存器组,由VLMUL决定,最大为8。所以最多元素个数为

  • vlenb, vector byte length;

    • vlenb为只读,恒为VLEN/8,表示以字节为单位的向量寄存器长度;
    • 当有些指令需要以字节为单位使用向量寄存器时,用于减少额外的计算过程。
  • vstart, vector start index;
    • RW, 用来指定vector指令中的第一个元素的index;
    • 通常,vstart只通过在vector指令执行过程中产生的trap中被写入,记录synchronous exception或者asynchronous interrupt时,当前已经执行到的element index, 恢复的时候可以正常恢复;
    • 所有vector instruction保证目的寄存器vstart之前的元素不被更改,指令执行结束,vstart寄存器置零。
  • vxrm, Vector Fixed-Point Rounding Mode Register;
    • RW, 向量定点舍入模式;
    • vxrm共有四种模式:
      a)round-to-nearest-up(rnu):就近舍入,当为中间值时,向上舍入(四舍五入)。
      b)round-to-nearest-even(rne):就近舍入,当为中间值时,向偶数舍入。
      c)round-down(rdn):向下舍入,直接取移位后的值。
      d)round-to-odd(rod):向奇数舍入。

    • 设源操作数为vs1,有d位要被截位,则舍入后的值为(vs1>>d)+r,其中r为不同舍入模式下的差值:

  • vxsat, Vector Fixed-Point Saturation Flag;

    • 该bit指示是否有定点指令必须将输出值饱和以适应目标格式。位vxsat[XLEN-1:1]应写为零。vxsat位在vcsr中有镜像。

  • vcsr, Vector Control and Status Register

    • The vxrm and vxsat separate CSRs can also be accessed via elds in the vector control and status CSR, vcsr.

Vector中element的几个概念

  • Prestart, Active, Inactive, Body, and Tail, 这几个都是针对element来说的;
  • 假设VLEN=32,LMUL=2,SEW=16,那么这条指令需要操作4个元素。如果vstart设置为1,vl设置为2,那这些概念对应的分别是如图所示:

   

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

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

相关文章

网络初识部分

1.网络 单机时代-局域网时代-广域网时代-移动互联网时代 局域网时代&#xff1a;通过路由器把几个电脑连接起来。 广域网时代&#xff1a;把更多的局域网连接到一起&#xff0c;构成的网络更庞大&#xff0c;可能已经覆盖了一个城市/国家/全世界。 2.什么是路由器&#xff…

关于武汉芯景科技有限公司的多协议收发芯片XJ526(第二篇RS422模式)开发指南(兼容SP526)

一、设置芯片为RS422模式 SP526 包含高度集成的串行收发器。SP526 提供 RS-232 &#xff08;V.28&#xff09;、RS-423 &#xff08;V.10&#xff09;、RS-422 &#xff08;V.11&#xff09; 和 RS-485 的硬件接口模式。接口模式选择通过两个控制引脚D0、D1完成。 我们将D0接…

【简历】25届青岛某一本JAVA简历:中厂不要强调算法,面试官听不懂

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 今天我们要看的是一位来自25届青岛某一本硕士同学的Java简历。 依旧是先判断自己要投什么层次的厂&#xff0c;也就是我们校招第一法则…

Netty04-优化与源码

四. 优化与源码 1. 优化 1.1 扩展序列化算法 序列化&#xff0c;反序列化主要用在消息正文的转换上 序列化时&#xff0c;需要将 Java 对象变为要传输的数据&#xff08;可以是 byte[]&#xff0c;或 json 等&#xff0c;最终都需要变成 byte[]&#xff09;反序列化时&…

SQL进阶技巧:如何按任意时段分析时间区间问题? | 区间重叠问题应用

目录 0 场景描述 1 数据准备 2 问题分析 方法1:分情况讨论,找出重叠区间 方法2:暴力美学法。按区间展开成日期明细表 3 小结 0 场景描述 现有用户还款计划表 user_repayment ,该表内的一条数据,表示用户在指定日期区间内 [date_start, date_end] ,每天还款 repay…

成为顶尖1%前端开发者的10项必备技能

从你可能已经熟悉的前端基础开始&#xff1b;然后进入关键技能&#xff0c;如使用浏览器开发工具和利用AI快速编码。包括99%的开发者忽视的宝贵通用技能。 从你可能已经熟悉的前端基础开始&#xff1b;然后进入关键技能&#xff0c;如使用浏览器开发工具和利用AI快速编码。 包…

【youcans论文精读】KAN 2.0:面向科学的KAN网络

欢迎关注『youcans论文精读』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans论文精读】KAN 2.0&#xff1a;面向科学的KAN网络 1. KAN2.0 简介1.1 KAN 2.0 论文发布1.2 KAN2.0 的新特点&#xff1a;1.3 KAN 回顾 2. MultiKAN&#xff1a;用乘法增强 KAN 网络的表达能力…

足底筋膜炎专用药

足底筋膜炎专用药“古顺*敷堂筋膜*贴”通过其独特的药效和用法&#xff0c;能够针对足底筋膜炎进行有效治疗&#xff0c;缓解患者疼痛和不适感&#xff0c;促进炎症消退和肌肉恢复。长时间站立、行走或进行高强度的跑步、跳跃等活动&#xff0c;会使足底筋膜受到持续的牵拉和压…

MEMS 传感器 4GDTU 说明书

本系统经过精心设计&#xff0c;可无缝对接三石峰的振动管理系统平台。通过该平台&#xff0c;用户可直观查看传感器数据、分析振动趋势、预警潜在故障&#xff0c;并依据分析结果制定针对性的维护策略&#xff0c;从而有效提升设备运行的可靠性与安全性。 本产品广泛应用于工…

日常开发规范

日常开发规范 一.git提交规范 开发代码之前&#xff0c;需有管理员通过系统新建功能分支&#xff0c;如feature/one&#xff0c; 此时开发人员方可拉取feature/one到本地进行开发&#xff0c; 开发人员在本地环境测试稳定后&#xff0c;方可由管理员通过系统发布到开发环境…

宠物空气净化器不是智商税!希喂、352宠物空气净化器真实测评

前端时间我出差了&#xff0c;把小猫寄养在朋友家里&#xff0c;回来后去接它们&#xff0c;结果到朋友家差点没认出来...碰上换毛季猫咪疯狂脱毛&#xff0c;朋友没有及时清理&#xff0c;就全堆在身上了&#xff0c;简直是胖若两猫。到家后&#xff0c;我连忙用梳子把它身上的…

Wi-Fi发射功率简介

目录 一、概念 1.1 射频发射与组合功率 1.2 天线增益 1.3 信道影响 二、常用单位及转换 2.1 dB 与 dBm 2.2 dBi 与 dBd 三、发射功率 3.1 发射功率调节 3.1.1 TPC 3.2 国家码与信道功率 一、概念 ① 和 ⑦ 表示射频发送端处的功率,单位是 dBm。其中 ① 表示AP端的…

《通义千问AI落地—下》:WebSocket详解

一、前言 文本源自 微博客 且已获授权,请尊重版权。 《通义千问AI落地——下篇》如约而至。Websocket在这一类引用中,起到前后端通信的作用。因此,本文将介绍websocket在这类应用场景下的配置、使用、注意事项以及ws连接升级为wss连接等;如下图,本站已经使用了wss连接…

ssrf,csrf漏洞复现

印象深刻的csrf利用&#xff1a; 在phpwind下&#xff1a;漏洞点&#xff08;但是都是在后台的漏洞&#xff09; 代码追&#xff1a; task到unserialize&#xff0c;然后重写PwDelayRun的构造函数&#xff0c;给callback和args赋值&#xff0c;然后当程序执行结束&#xff0c…

请问lammps怎么做两种金属连接的原子浓度分布图??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

未知单播泛洪原因

未知单播&#xff1a;交换机是收到数据包后&#xff0c;读取数据包的目的MAC&#xff0c;并查找自已的MAC表&#xff0c;查找目的MAC对应的端口&#xff0c;从而判断从哪个口端口转发出此数据包&#xff0c;若MAC表里没有此目的MAC&#xff0c;那对于此交换机来说就是未知单播&…

Day46 | 101孤岛的总面积 102沉没孤岛 103水流问题 104建造最大岛屿

语言 Java 101.孤岛的总面积 101. 孤岛的总面积 题目 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;岛屿指的是由水平或垂直方向上相邻的陆地单元格组成的区域&#xff0c;且完全被水域单元格包围。孤岛是那些…

植物大战僵尸杂交版v2.3.7最新版本(附下载链接)

新版本更新啦&#xff01; B站游戏作者潜艇伟伟迷于8月19日更新了植物大战僵尸杂交版2.3.7版本&#xff01;&#xff01;&#xff01; v2.3.7版本更新内容&#xff1a; 游戏分辨率扩充&#xff0c;UI界面翻新&#xff0c;卡槽数量提升至16个&#xff0c;修复大量BUG&#xff0c…

网络协议与IO模型

1、说一说网络模型&#xff08;OSI、TCP/IP模型&#xff09; OSI采用了分层的结构化技术&#xff0c;共分七层&#xff0c; 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 。 Open System Interconnect 简称OSI&#xff0c;是国际标准化组织(ISO)和国际电报电…

【Windows脚本】如何测试远程主机某个端口是否开放?

概要 如何测试远程主机某个端口是否开放&#xff1f; 1、PowerShell脚本 使用Test-NetConnection 指令&#xff0c;命令如下。 Test-NetConnection RemoteIP -Port 80 -InformationLevel Detailed 2、tcping工具 下载地址&#xff1a;https://download.csdn.net/download/…