ARMv8.3 rcpc的含义

pve*_*jer 7 arm cpu-architecture memory-model memory-barriers armv8

ARMv8.3 引入了新指令:LDAPR。

当 STLR 后跟 LDAR 到不同的地址时,这两个不能重新排序,因此称为 RCsc(释放一致顺序一致)。

当 STLR 后跟 LDAPR 到不同的地址时,这 2 个地址可以重新排序。这称为RCpc(发布一致处理器一致)。

我的问题是PC部分。

PC 是 TSO 的松弛,其中 TSO 是多副本原子,而 PC 是非多副本原子。

ARMv8的内存模型已改进为多副本原子,因为没有供应商创建过非多副本原子微体系结构,这使得内存模型更加复杂。

所以我遇到了矛盾。

关键问题是:每个存储(包括宽松的存储)都是多副本原子的吗?

如果是这样,那么 rcpc 的 PC 部分对我来说没有意义,因为 PC 是非多副本原子的。由于 ARM 过去是非多副本原子的,它是否可能是一个遗留名称?

PC有多种定义;所以也许这就是原因。

Pet*_*des 5

实际上,STLR / LDAPR 提供 C++ std::memory_order_acq_rel,而不是 SC 。

因此,“处理器一致”大概描述了当前核心按程序顺序查看其自己的操作的事实,并作为一种方式来注意它不是顺序一致的,因为他们不使用该术语。这并不意味着内存模型规则的其他部分被删除。

AFAIK,是的,ARMv8 是多副本原子的,因此每个普通存储(strstp等)都是多副本原子的。即,它通过一致的缓存同时对所有其他核心可见,因此所有线程都可以就两个独立编写器完成的两个存储的顺序达成一致(IRIW 试金石测试)。与 POWER 不同,在 POWER中,某些线程可以较早地从同一物理核心上的其他 SMT 线程看到存储

我不认为 LDAPR 放松了这一保证。

(ARMv7在纸面上没有此属性,但所有现实世界的实现都有。因此,除了添加对 ARMv8 32 位模式新指令的支持之外,ARM 能够在不实际改变任何实际 ARM 微架构中的工作方式的情况下加强其保证。 1995 年的“共享内存一致性模型:教程”,在评论中链接,使用术语 RCpc 来描述一类内存模型,其中确实包括一些读者能够在其他读者之前看到一些存储,从而允许 IRIW。所以看起来要么是 ARMv8使用不同的含义,或者其他要求仍然起作用以禁止 IRIW 重新排序。)


重要警告:我不是这方面的术语专家,而且我以前从未听说过“处理器一致”,所以我只是根据上下文猜测它们的含义,并做出与所有已知事实一致的解释。如果这与该术语的公认定义不兼容,请纠正我。