14

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

4

2 回答 2

25

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

例如,线程 1 可能执行:

  • 负载 A
  • B店
  • C店

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

  • C店
  • 负载 A
  • B店

FENCE 确保在围栏之后的任何操作之前观察围栏之前的所有操作。所以如果上面改为:

线程 1:

  • 负载 A
  • B店
  • 栅栏
  • C店

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

线程 2:

  • B店
  • 负载 A
  • C店

来源:RISC-V ISA(第 20 页第 2.7 节)

于 2014-10-15T04:47:06.197 回答
-1

我发现有一种情况是需要使用 FENCE 指令的。例子:

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