在浏览 RISC-V ISA 时,我在内存模型部分看到了一条指令(FENCE 指令)。它到底是什么意思?
RISC-V ISA 使用宽松的内存模型,其中一个线程执行的加载和存储的顺序在另一个线程看到时可能不同。这样做是为了启用提高内存系统性能的技术。
例如,线程1可能执行:
但线程 2 可能会发现加载和存储相对于第一个线程来说是乱序的:
FENCE 确保在栅栏之后的任何操作之前观察栅栏之前的所有操作。那么如果上面的内容改成:
主题 1:
- Load A
- Store B
- FENCE
- Store C
那么线程 2 将保证在存储到 C 之前看到对 A 的加载和对 B 的存储,但仍然可以在加载 A 之前看到对 B 的存储。
话题2:
Source: RISC-V ISA https://riscv.org//wp-content/uploads/2017/05/riscv-spec-v2.2.pdf(第 20 页第 2.7 节)
合并 Chris P 的评论:
可以控制 I/O(I 和 O 标志)和内存访问(R 和 W)
与FENCE指令分开 例如:可以控制
仅内存写入应按 FENCE 排序,但内存读取应按 FENCE 排序
I/O操作不受FENCE影响。为此,PW 和 SW
应设置位。如果只设置了PW(前驱写入),则FENCE
将确保 FENCE 之前的所有内存写入也被观察到
FENCE之前的其他hart(线程),但FENCE之后的内存写入可以
之前也要观察。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)