HeadlinesBriefing favicon HeadlinesBriefing.com

x86 模拟在 ARM 上的痛苦

Hacker News •
×

欢迎阅读我们网站的首篇功能性文章。我们将讨论一种持续存在的问题,即 x86 模拟,这会影响我们模拟的每个应用程序。这归结为一个单一的术语,对此有着广泛的影响;仿真 x86 总存储排序内存模型(x86-TSO)。仿真这种内存模型在 ARM 定义的弱排序内存模型上的问题是多方面的,涉及多个问题。我们将在本文中涵盖我们可以遇到的全部问题以及我们如何解决(或在某些情况下无法解决)的方法。

到底什么是 x86-TSO?内存模型是一套规则,用于定义系统中内存访问在相互之间如何行为。这些规则决定了加载和存储如何在单线程或多线程环境中相互作用。我们今天要关注的两种模型是 ARM 的松弛(或弱)一致性模型,以及 x86 变体的总存储排序一致性模型。这两种模型基本上是两个极端;ARM 是最松弛的,允许显著的硬件优化;而 x86 是最严格的,强制执行非常强的一致性模型。

鉴于 TSO 非常严格,程序员可以假设当发生内存存储时,它将对所有其他处理器均有一致可见性。ARM 的弱内存模型并不那么直观。默认情况下,常规内存加载和存储在处理器之间并不严格一致,允许 CPU 更高效地运行。ARM 引入了加载获取和存储释放内存指令来解决一致性问题,映射到 C++ std::atomic 的 memory_order_acquire 和 memory_order_release。