Page 335 - 《软件学报》2021年第12期
P. 335

刘畅  等:RISC-V 指令集架构研究综述                                                           3999


                 用于支持小型 RISC-V 实现中的组合 SIMD 定点操作.该扩展曾被认为可以由 V 扩展上的大型浮点
                 SIMD 操作标准化代替,而几近废弃;但考虑到小型 RISC-V 的实际需要而得以保留,并开始设计和
                 定义新的 P 扩展.
             (13)   向量操作扩展(V 扩展):用于支持 32 位指令编码空间中的数据并行执行功能.该扩展增强了处理器
                 的 SIMD 操作,引入了一组向量寄存器和向量操作指令,允许将相同的操作应用于大批量的数据元
                 素之中,使 RISC-V 系统的数据处理能力发生质变,同时保持指令代码的精简性.
             (14)   控制和状态寄存器扩展(Zicsr 扩展):RISC-V 定义了一个独立的地址空间,包含与各硬件线程相关
                 的 4 096 个控制与状态寄存器(control and status register,简称 CSR).Zicsr 扩展即提供了在此空间中
                 操作 CSR 指令的完整集合.
             (15)   屏障扩展(Zifencei 扩展):仅含有一条 FENCE.I 指令,用于提供相同硬件线程上写指令内存与指令获
                 取之间的显式同步.
             (16)   非对齐原子操作扩展(Zam 扩展):用于对非对齐的原子内存操作(atomic memory operation,简称
                 AMO)提供标准化支持.它是对 A 扩展的扩展,使 AMO 只需要针对具有相同地址和相同尺寸的其他
                 访问(包括非原子性的加载和存储)进行原子化执行即可.
             (17)   全存储排序 扩展(Ztso 扩展):用于支持“全存储排序”              [23] 的内存一致性模型.它提供了一种比
                 RVWMO 更严格的内存一致性模型.
             (18)   提示暂停扩展(Zihintpause 扩展):用于指示当前硬件线程应当放缓指令的失效率.目前仅包含一条
                 PAUSE 指令,并且不会引起架构相关状态的更改.
             (19)   半精度浮点扩展(Zfh 扩展):用于支持半精度浮点运算.添加了兼容 IEEE 754-2008 算术标准                   [22] 的半
                 精度浮点运算指令,以操作 16 位浮点数据.它依赖于 F 扩展,需要与 F 扩展共同使用.
             (20)   半精度浮点最小集扩展(Zfhmin 扩展):是 Zfh 扩展的一个子集,仅包含了数据转移转化相关的指令,
                 主要用于支持半精度数据的存储、以及执行更高精度的运算.与 Zfh 扩展一样,它也依赖于 F 扩展,
                 需要与 F 扩展共同使用.
             (21)   整数寄存器单精度浮点扩展(Zfinx 扩展):用于支持在整数寄存器中进行单精度浮点运算.指令功能
                 与 F 扩展相似,只是操作数来自于整数寄存器而非浮点寄存器,而且不含 FLW、FSW、FMV 等转移
                 指令.
             (22)   整数寄存器双精度浮点扩展(Zdinx 扩展):用于支持在整数寄存器中进行双精度浮点运算.与 D 扩展
                 类似,只是操作数来自于整数寄存器而非浮点寄存器.它依赖于 Zfinx 扩展,需要与 Zfinx 扩展共同使
                 用.
             (23)   整数寄存器半精度浮点扩展(Zhinx 扩展):用于支持在整数寄存器中进行半精度浮点运算.与 Zfh 扩
                 展类似,只是操作数来自于整数寄存器而非浮点寄存器.它依赖于 Zfinx 扩展,需要与 Zfinx 扩展共同
                 使用.
             (24)   整数寄存器半精度浮点最小集扩展(Zhinxmin 扩展):是 Zhinx 扩展的一个子集,与 Zfhmin 扩展的功
                 能及定位类似.与 Zhinx 扩展一样,它也依赖于 Zfinx 扩展,需要与 Zfinx 扩展共同使用.
             此外,RISC-V 系统设计者还可以根据实际需要,制定其他自定义扩展指令集,并将其加入指令集架构中.
         2.3   RISC-V指令集的状态
             RISC-V 指令集需要经过 RISC-V 国际基金会下属的技术工作组审批,成为被批准的稳定版本,才能作为
         一种统一的规范和标准,供软件开发人员和硬件供应商们使用.尚未被批准的指令集可能处于“草案”或“冻
         结”状态:草案状态的指令集随时有改动的可能,是指令集研究中最活跃的部分;冻结状态的指令集虽然还未
         被批准,但在批准之前预计也不应有太显著的改动                   [11] .表 4 总结了当前 RISC-V 各指令集的审批状态.
             根据表 4 可知,当前共有 2 个基础指令集(RV32E, RV128I)和 10 个扩展指令集(Counters,L,B,J,T,P,V,Zam,
         Zfh,Zfhmin)仍处于草案状态,另有 5 个扩展指令集(Zfinx,Zdinx,Zhinx,Zhinxmin,Ztso)处于冻结状态,它们需要
   330   331   332   333   334   335   336   337   338   339   340