在浏览 RISC-V ISA 时,我在内存模型部分看到了一条指令(FENCE 指令)。究竟是什么意思?
问问题
9207 次
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 指令的。例子:
- SoC 中的某些模块通过 HostIO 总线将值写入 CSR 0x783 (MIPI) 来生成中断。
- 固件跳转到中断处理程序。
- 处理程序尝试通过将 1 写入寄存器来重置用户实现的设备中的“未决”位。
- 此类操作被编译为立即值 = 1 的“存储”指令。
- 结果,如果我没有在处理程序的开头实现 FENCE ,我就会有一些垃圾值,而不是指令的正确立即参数。
于 2015-11-23T11:37:15.843 回答