RISC-V笔记——重叠地址排序

RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Overlapping-Address Orderings(重叠地址排序)

重叠地址排序

a操作在程序顺序中先于b操作,a和b都访问常规主存,不包含I/O区域,如果存在以下任何一个条件,那么a操作和b操作在全局内存顺序中的顺序也不会变。

  1. b是store,且a和b访问重叠的内存地址。
  2. a和b是load,x是a和b同时读取的字节,且在a和b程序顺序之间没有store操作访问x,a和b放回x的值由不同的内存操作写入。
  3. a是由AMO或SC指令生成的,b是一个load,b返回由a写入的值。

关于第一点,load或store操作永远不能与后面访问重叠内存位置的store操作进行重排序。从微体系架构的角度来看,一般来说,如果投机是无效的,则很难或不可能撤回投机重排序的store操作,因此模型直接不允许这种行为。不过另一方面,store可以forward数据给后面的load操作,这种情况通常发生在store的数据暂时存放在store buffer里,之后load命中store buffer,就直接load数据走了。

关于第二点,其实就是要求同一个hart中,younger的load返回的值不能比同地址older load返回的值更老。这通常被称为"CoRR"(Coherence for Read-Read pairs),或者SC模型(sequential consistency)的要求一部分, RVWMO需要强制执行CoRR排序。如下代码所示,不管程序如何执行,(f)返回的值肯定比(d)的新。

关于第三点,其实就是AMO或成功的SC必须要全局可见后,才能将值返回给后续的load操作。

这三个原则也适用于内存访问之间只有部分重叠的情况,而且基地址也不一定相同的。例如,当使用不同大小的操作访问同一个地址区间时,就可以发生这种情况。当使用非对齐的内存访问时,重叠地址的规则可以独立地应用于每个地址的内存访问。

相关推荐
BigDark的笔记6 天前
【鸿蒙】0x02-LiteOS-M基于Qemu RISC-V运行
华为·harmonyos·risc-v
早上真好10 天前
【项目推荐】CakeMu-RV:一个开放的 RISC-V 处理器模拟器学习项目
嵌入式硬件·mcu·学习·计算机外设·risc-v
sinovoip10 天前
Banana Pi BPI-RV2 RISC-V路由开发板采用矽昌通信SF2H8898芯片
risc-v
CV金科11 天前
freertos的基础(二)内存管理:堆和栈
stm32·开源·arm·freertos·risc-v
BroccoliKing13 天前
An FPGA-based SoC System——RISC-V On PYNQ项目复现
arm开发·单片机·mcu·fpga开发·dsp开发·risc-v
百里杨15 天前
X86(Local APIC+I/O APIC)与RISC-V(IMSIC+APLIC)对比
risc-v·x86·local apic·ioapic·imsic·aplic
嵌入式Linux,16 天前
一块钱的RISC-V 32位芯片
risc-v
世事如云有卷舒21 天前
RISC-V学习笔记
笔记·学习·risc-v
oahrzvq23 天前
【CPU】RISC-V 与 x86 操作数字段的区别
系统架构·risc-v
MounRiver_Studio23 天前
基于VSCode软件框架的RISC-V IDE MRS2正式上线发布
ide·vscode·mcu·risc-v