首页 > 解决方案 > ARMv8.3 rcpc的含义

问题描述

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

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

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

我的问题是PC部分。

PC 是 TSO 的一种松弛,其中 TSO 是多拷贝原子的,而 PC 是非多拷贝原子的。

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

所以我遇到了矛盾。

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

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

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

标签: armcpu-architecturememory-barriersmemory-modelarmv8

解决方案


在实践中,STLR / LDAPR 提供 C++ std::memory_order_acq_rel,而不是 SC。

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

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

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

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


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


推荐阅读