是否存在会表现出load buffering(加载缓冲)的ARMv8处理器?
ARMv8处理器是否存在Load Buffering(LB)行为?
我们先从Load Buffering(LB,加载缓冲)的litmus测试说起,对应的伪代码如下(初始状态:共享变量X = Y = 0):
void thread1() { int tmp0 = X; Y = 1; } void thread2() { int tmp1 = Y; X = 1; }
这个测试的核心问题是:是否可能出现tmp0 = tmp1 = 1的结果?要知道,这个结果在任何顺序一致的执行中都是不可能出现的。
ARMv7明确允许这种行为,相关论文的第7部分对LB有清晰解释,还展示了在多款32位ARM设备上观测到该现象的实验结果。
相较于ARMv7,ARMv8简化并强化了内存模型,但官方在线交互式内存模型工具显示它仍然允许LB行为(可通过在左侧面板加载LB.litmus验证)。不过我在所有可访问的ARM设备上都没观测到LB,包括:
- Apple M3(个人笔记本电脑)
- Cortex A78/A55(安卓手机)
- Oracle Cloud Ampere A2
- AWS Graviton
因此我想知道:是否存在会表现出Load Buffering的ARMv8处理器? 我认为应该存在,否则ARMv8在进行其他内存模型简化时就会直接禁用Load Buffering了。
注:C/C++有其独立的内存规则,本文明确针对ARM ISA层面的内存模型,仅为清晰起见使用C语法编写伪代码。
内容的提问来源于stack exchange,提问作者zbw
相关产品推荐
相关产品推荐

