RISC-V指令集中的FENCE指令是什么意思?

时间:2014-10-15 04:23:29

标签: compiler-construction processor microprocessors riscv

在浏览RISC-V ISA时,我在内存模型部分看到了一条指令(FENCE指令)。它究竟意味着什么?

2 个答案:

答案 0 :(得分:10)

RISC-V ISA使用宽松的内存模型,其中一个线程执行的加载和存储的顺序在被另一个线程看到时可能不同。这样做是为了使技术能够提高内存系统性能。

例如,线程1可以执行:

  • 加载A
  • 商店B
  • 商店C

但是线程2可以看到与第一个线程无关的负载和存储:

  • 商店C
  • 加载A
  • 商店B

FENCE确保在围栅之后的任何操作之前观察围栏之前的所有操作。因此,如果上述内容改为:

主题1:

  • 加载A
  • 商店B
  • FENCE
  • 商店C

然后,线程2将保证在存储到C之前看到A和存储到B的加载,但仍然可以在加载A之前看到存储到B.

主题2:

  • 商店B
  • 加载A
  • 商店C

来源:http://riscv.org/download.html(用户级ISA规范v2.0第19页)

答案 1 :(得分:1)

我发现只需要一个使用FENCE指令的情况。 例如:

  1. SoC中的某些模块通过HostIO总线将值写入CSR 0x783(MIPI)来产生中断。
  2. 固件跳转到中断处理程序。
  3. 处理程序尝试通过将1写入寄存器来重置用户实现的设备中的“挂起”位。
  4. 此类操作被编译为“存储”指令,其值为立即值=。
  5. 结果,如果我没有在处理程序的开头实现FENCE,我有一些垃圾值而不是指令的正确立即参数。