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

3998                                Journal of Software  软件学报 Vol.32, No.12, December 2021

         的依存句法.
             RVWMO 对程序的执行提出了次序上的要求,即,全局内存次序需要遵循着各个硬件线程的内存次序中
         的一部分(但不是所有).这部分必须被遵循的次序子集被称为“保留的程序次序”.
             内存模型原语、各指令的依存句法和保留的程序次序,以及基于这些内容的 3 条公理                              [11] (加载值公理、
         原子性公理、进度公理),共同构成了 RVWMO 内存一致性模型.
                            Table 3    Annotations of memory access instructions in RVWMO
                                   表 3   RVWMO 指令集对内存操作指令的标注
                                           与处理器一致                顺序一致
                             加载            acquire-RCpc         acquire-RCsc
                             释放             release-RCpc        release-RCsc
         2.2   RISC-V扩展指令集
             RISC-V 的扩展指令集用于为 ISA 提供特定方面的功能操作指令.一个 ISA 可以选择加入多个扩展指令
         集.而为了使多个指令集能够共存,各指令集的编码空间均按照 RISC-V 国际基金会(RVI)的编码要求进行了
         划分,以避免冲突.现有的 RISC-V 扩展指令集主要有以下 24 种.
             (1)    乘法和除法扩展(M 扩展):用于将两个整数寄存器中的值进行相乘或相除.具体包含了 MUL、DIV、
                 REM 等指令及对应于无符号数操作或 64 位操作相关的各种变体指令.
             (2)    原子指令扩展(A 扩展):用于支持相同内存空间中的多个硬件线程间的同步.主要包含了对内存进
                 行原子性读取、修改、写入的指令.
             (3)    单精度浮点扩展(F 扩展):用于支持单精度浮点运算.添加了兼容 IEEE 754-2008 算术标准                   [22] 的单精
                 度浮点运算指令,以及 32 个 32 位宽的浮点寄存器 f0~f31,和一个浮点控制与状态寄存器 fcsr.
             (4)    双精度浮点扩展(D 扩展):用于支持双精度浮点运算.它依赖于 F 扩展,需要与 F 扩展共同使用.D 扩
                 展添加了兼容 IEEE 754-2008 算术标准的双精度浮点运算指令,并把浮点寄存器 f0~f31 拓宽到 64
                 位.
             (5)    四精度浮点扩展(Q 扩展):用于支持四精度浮点运算.它依赖于 D 扩展,需要与 D 扩展和 F 扩展共同
                 使用.Q 扩展添加了兼容 IEEE 754-2008 算术标准          [22] 的四精度浮点运算指令,并把浮点寄存器的位
                 宽扩展到 128 位.
             (6)    压缩指令扩展(C 扩展):C 扩展增加了一些 16 位的短指令编码,用于替代对应的某些 32 位常见操作
                 指令,以减少静态和动态的代码尺寸.它还移除了原始 32 位指令上的 32 位对齐限制,允许指令可以
                 从任何 16 位边界开始,从而显著提高了代码密度.
             (7)    计数器指令扩展(Counters 扩展):Counters 扩展提供了至多 32 个 64 位计数器或计时器,可以通过特
                 定的只读 CSR 寄存器 0xC00-0xC1F 进行访问.其中,前 3 个计数器为专用计数器,分别用于循环计
                 数(CYCLE)、实时时钟(TIME)和过时指令(INSTRET);其余的计数器可用于程序事件的计数.
             (8)    十进制浮点扩展(L 扩展):用于支持 IEEE 754-2008 标准       [22] 中定义的十进制浮点算术.它将浮点寄存
                 器用于存储 64 位或 128 位十进制浮点值.该扩展尚未进入实质性的设计阶段.
             (9)    位操作扩展(B 扩展):用于支持位操作.主要包括了插入、提取、测试位域的指令,以及移位、位与
                 字节置换等操作指令.该扩展尚未进入实质性的设计阶段.
             (10)   动态翻译语言扩展(J 扩展):用于支持动态翻译语言.该扩展注意到,许多流行的语言都采用动态翻
                 译的方式实现,如 Java 和 JavaScript.因此希望引入一些指令,从 ISA 层面支持这些语言的动态检测、
                 垃圾回收等行为,从而获得收益.该扩展尚未进入实质性的设计阶段.
             (11)   事务内存扩展(T 扩展):用于支持事务内存操作.T 扩展将设立一个小型的、容量有限的事务内存缓
                 冲区,以支持涉及多个地址的原子性操作.该扩展尚未进入实质性的设计阶段.
             (12)   组合单指令多数据流(packed single instruction multiple data,简称 Packed SIMD)指令扩展(P 扩展):
   329   330   331   332   333   334   335   336   337   338   339