RISC-V笔记——RVWMO基本体

1. 前言

RISC-V使用的内存模型是RVWMO(RISC-V Weak Memory Ordering),它是Release Consistency的扩展,因此,RVWMO的基本特性类似于RC模型。

2. RC模型

Release consistency(RC)的提出是基于一个观察:将所有同步操作用FENCE围在一起是多余的。随着对同步操作的深入理解,同步操作acquire只需要后面放一个FENCE,同步操作release只需要前面放一个FNECE。因此RC提供了ACQUIRE和RELEASE操作,它们和FENCE类似,但是只在一个方向上对memory进行保序,而不是像FENCE那样在两个方向上都进行保序。更一般地说,RC只需要:

  • ACQUIRE -> Load, Store (Load, Store -> ACQUIRE方向不保序)
  • Load, Store -> RELEASE (RELEASE -> Load, Store 方向不保序)
  • ACQUIRE -> ACQUIRE
  • ACQUIRE -> RELEASE
  • RELEASE -> ACQUIRE
  • RELEASE -> RELEASE

如下图,注:LDAR代表load具有acquire语义,STLR代表store具有release语义。

3. RVWMO基本体

在RISC-V中,与RC类似,load和store指令可以携带其它语义:load指令可以携带ACQUIRE语义,store指令可以携带RELEASE语义,以及RMW指令可以携带ACQUIRE、RELEASE或两者都具有。有两种ACQUIRE语义:ACQUIRE-RCpc和ACQUIRE-RCsc。同样,也有两种RELEASE语义:RELEASE-RCpc和RELEASE-RCsc。"RCpc语义"代表"Acquire-RCpc"或"Release-RCpc"。"RCsc语义"代表"Acquire-RCsc"或"Release-RCsc"。Load(store)可以携带任何一种ACQUIRE(RELEASE)语义,而RMW只能携带RCsc语义。这些语义有如下保序:

  • ACQUIRE -> Load,Store (ACQUIRE代表ACQUIRE-RCsc和ACQUIRE-RCpc)
  • Load,Store -> RELEASE (RELEASE 代表RELEASE-RCsc和RELEASE-RCpc)
  • RELEASE-RCsc -> ACQUIRE-RCsc (注意RELEASE-RCpc -> ACQUIRE-RCpc不成立)

从上述保序公式可以看出:

  1. 带有RELEASE-RCpc的older store指令的写数据可以直接被forward给带有ACQUIRE-RCpc的同地址younger load指令。
  2. 如果它们两个是不同地址,那么在younger load指令会先于older store指令出现在global memory order上。

上述这两点是RCsc不允许的,RCsc具有更强的保序行为。为什么RCsc和RCpc有这两点区别,可以看它们的全称就知道了。

"RCpc"代表release consistency with processor-consistent synchronization operations。"RCsc"代表release consistency with sequentially consistent synchronization operations。

RCpc语义有processor-consistent特性。Processor consistency(PC)表示一个Core的store操作按顺序达到其它Core,但不一定同时达到其它Core。TSO模型是PC的特殊情况,其中每个Core都可以立即看到自己的Store操作,但是当任何其它Core看到Store操作时,所有其它Core都可以看到它,这个属性称为write atomicity。

RCsc语义有sequentially consistent特性。Sequential consistency (SC)模型中,memory order保留了每个core的program order。也就是SC模型为同一个线程的两个指令间的所有四种load和store组合(Load -> Load, Load -> Store, Store -> Store, and Store -> Load)保留了顺序。

因此RCpc和RCsc在行为上还是有些区别,RCsc语义可以让RVWMO模型像SC(Sequential Consistency)模型行为一样,RCpc语义可以让RVWMO像TSO(Total Store Order)内存模型行为一样,这极大方便了其它CPU内存模型的代码移植到RISC-V CPU上运行。比如要迁移MIPS R10000的代码到RISC-V CPU上,可以使用RCsc的load和store指令。要迁移Intel/AMD的代码到RSIC-V CPU上,可以使用RCpc的load和store指令。

如下图,注:LDAR代表load具有acquire-RCsc语义,STLR代表store具有release-RCsc语义。LDAPA代表load具有acquire-RCpc语义,STLAR代表store具有release-RCpc语义。

相关推荐
ChipCamp4 小时前
Chisel芯片开发入门系列 -- 14. CPU芯片开发和解释4(Load/Store指令再探)
arm开发·青少年编程·fpga开发·scala·dsp开发·risc-v·chisel
芝士爱沙拉3 天前
智能落地扇方案:青稞RISC-V电机 MCU一览
单片机·嵌入式硬件·risc-v·电机驱动
OpenAnolis小助手8 天前
RISC-V基金会Datacenter SIG月会圆满举办,探讨RAS、PMU性能分析实践和经验
开源·龙蜥社区·risc-v·datacenter sig·龙蜥社区risc-v sig
月光技术杂谈10 天前
《RISC-V 导论:设计与实践》开源课件(附下载链接)
开源·risc-v·课件
月光技术杂谈10 天前
上海RISC-V峰会-香山开源RISC-V CPU随想随记
verilog·risc-v·chisel·vhdl·香山·开源cpu·xiangshan
随风ada14 天前
Windows、macOS、liunx下使用qemu搭建riscv64/linux
linux·windows·ubuntu·macos·golang·qemu·risc-v
openKylin17 天前
填补空白!openKylin率先完成RISC-V商业打印驱动全适配
risc-v
wa的一声哭了19 天前
python基础知识pip配置pip.conf文件
java·服务器·开发语言·python·pip·risc-v·os
GateWorld22 天前
RISC-V:开源芯浪潮下的技术突围与职业新赛道 (二) RISC-V架构深度解剖(上)
架构·risc-v·指令集精简·寄存器设计·特权架构·模块化扩展
inquisiter23 天前
在RISC-V开发板上更换SBI
risc-v