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语义。

相关推荐
杭州_燕十三17 小时前
从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改
risc-v·sg2002
Daydreamer104 天前
学习笔记——PLCT汪辰:开发RISC-V上的操作系统(持续更新)
笔记·学习·risc-v
YHPsophie5 天前
CSM32RV20:RISC-V核的低功耗MCU芯片,常用在智能门锁上
单片机·嵌入式硬件·risc-v·智能门锁·低功耗mcu芯片
飞凌嵌入式17 天前
FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式
嵌入式硬件·嵌入式·risc-v·飞凌嵌入式
EVERSPIN17 天前
RISC-V单片机可快充手持电钻方案分享
单片机·嵌入式硬件·risc-v
谷公子的藏经阁22 天前
RISC-V笔记——显式同步
risc-v·fence·rcpc·显示同步·synchronization
码匠许师傅24 天前
【开源鸿蒙】OpenHarmony 5.0轻量系统最小开发环境搭建
python·pip·risc-v·openharmony·gcc·1024程序员节·hi3861
谷公子的藏经阁1 个月前
RISC-V笔记——内存模型公理
risc-v·atomicity·progress·load value·axiom
谷公子的藏经阁1 个月前
RISC-V笔记——重叠地址排序
risc-v·order·重叠地址排序·rvwmo·overlapping
谷公子的藏经阁1 个月前
RISC-V笔记——内存模型总结
cpu·risc-v·内存模型·memory model·ztso