之前一直没怎么弄清楚fence以及fence.i指令,现在重新回顾一下。
可选的原子性存储器指令扩展"A"
FENCE
fence指令用于顺序话其他RISCV线程、外部设备或者协处理器看到的设备I/O和存储器访问。在所有predecessor执行到fence前的任何操作前,处于fence指令后的successor set 种的任何操作,都不能被任何其他RISCV线程或者外部设备看到(译:fence就像是一个栅栏,fence之前的所有存储器、IO操作必须完成后,在fence后的指令蔡才能看到结果)。
fence.i指令用于同步指令和数据流。riscv并不能确保在同一个riscv线程种,取指看得到前面对指令存储器的store,直到执行一条fence.i指令。一条fence.i只是保证在一个riscv线程种,该指令之后的取值操作,可以看到这条指令之前的任何数据store。为了是一条对指令存储器的store对所有的riscv线程可见,写数据的线程必须要求所有远程riscv线程执行fence.i指令之前,执行一条fence指令。
标签:fence,RISCV,存储器,riscv,指令,线程,处理器 From: https://www.cnblogs.com/fangzepeng76/p/17550090.html