【发布时间】:2020-01-20 22:18:06
【问题描述】:
我一直在阅读有关 x86 内存模型的工作原理以及 x86 上屏障指令的重要性以及与 ARMv8 等其他架构的比较。在 x86 和 ARMv8 架构中,内存模型似乎(没有双关语)尊重传递性/累积性,即如果 CPU 1 看到 CPU0 的存储,而 CPU2 看到 CPU1 的存储,这只有在 CPU1 看到 CPU0 存储时才会发生,那么 CPU2 也必须看到 CPU0 的存储。我所指的示例是 Paul McKenney 著名论文第 6.1 节中的示例 1 和 2(虽然很旧,但在他最新的 perf 烹饪书中也有同样的内容,http://www.puppetmastertrading.com/images/hwViewForSwHackers.pdf)。如果我理解正确,x86 使用存储队列(或存储顺序缓冲区)在存储全局可见(即写入 L1D)之前对存储进行排序(以及其他微架构优化)。我的问题是 x86 拱门(和其他拱门)如何实现(微架构)传递性属性?存储队列确保特定 CPU 的存储以特定顺序在全局范围内可见,但如何确保由一个 CPU 生成的存储与由不同 CPU 生成的存储排序?
【问题讨论】:
标签: x86 x86-64 cpu-architecture memory-barriers micro-architecture