FENCE 会刷新缓存吗?
官方语义是排序约束,不是通用缓存刷新指令。
按 pred/succ 集合约束内存读写和设备 I/O 操作的可观察顺序。
FENCE 使用 opcode 0001111(0x0f)、funct3 000。FENCE 编码使用 pred/succ 和 fm 字段描述排序约束,不是普通寄存器运算格式。
FENCE 使用 pred 和 succ 字段指定需要排序的前续和后续操作集合:I 表示设备输入,O 表示设备输出,R 表示内存读,W 表示内存写。它约束当前 hart 对其他 hart 或外部设备可观察到的内存与 I/O 操作顺序;标准软件应将保留字段 rd 和 rs1 置零。
FENCE 的重点不是“清缓存”,而是按 pred/succ 集合建立本 hart 的内存与设备 I/O 操作顺序约束。
结合 «fence rw, rw # full memory barrier: prior reads+writes before subsequent reads+writes» 等实际代码理解该场景。
结合 «fence rw, rw # full memory barrier: prior reads+writes before subsequent reads+writes» 等实际代码理解该场景。
结合 «fence rw, rw # full memory barrier: prior reads+writes before subsequent reads+writes» 等实际代码理解该场景。
官方语义是排序约束,不是通用缓存刷新指令。
不会。它约束当前 hart 的相关操作对其他观察者可见的顺序。