在ARMv8.3中引入了一条新指令: LDAPR。
当有一个STLR后跟一个指向不同地址的LDAR时,这2个不能被重新排序,因此它被称为RCsc (发布一致顺序一致)。
当有一个STLR,后跟一个LDAPR到不同的地址时,这2个地址可以重新排序。这被称为RCpc (发布一致性处理器一致性)。
我的问题是PC部分。
PC是TSO的一种松弛,其中TSO是多拷贝原子,而PC是非多拷贝原子。
ARMv8的内存模型已经改进为多副本原子,因为没有供应商创建过非多副本原子微体系结构,这使得内存模型变得更加复杂。
所以我遇到了一个矛盾。
关键的问题是:每个商店(包括松弛的)都是原子的吗?
如果是这样,那么rcpc的PC部分对我来说就没有意义了,因为PC是非多拷贝原子的。由于ARM在过去是否是非多副本原子,它会是一个遗留名称吗?
PC有多种定义;所以这可能就是原因。
发布于 2021-08-08 01:11:05
在实践中,STLR / LDAPR提供C++ std::memory_order_acq_rel
,而不是SC。
因此,“处理器一致性”大概是在描述这样一个事实,即当前内核在程序顺序中看到自己的操作,并且作为一种方式来说明它不是顺序一致的,因为它们没有使用这个术语。这并不意味着内存模型规则的其他部分被删除。
是多拷贝原子的。也就是说,通过一致的缓存,它对所有其他内核同时可见,因此所有线程可以就两个独立写入器完成的两个存储的顺序达成一致( IRIW litmus测试)。与POWER where some threads see stores early from other SMT threads on the same physical core不同。
我不认为LDAPR放松了这一保证。
(ARMv7在纸面上没有这个属性,但所有现实世界的实现都有。因此,除了增加对ARMv8 32位模式新指令的支持外,ARM能够在不实际改变任何实际ARM微体系结构中的任何工作方式的情况下,加强他们的保证。1995年的"Shared Memory Consistency Models: A Tutorial“,链接在评论中,使用术语RCpc来描述一类内存模型,该模型确实包括一些读者能够在其他读者之前看到一些商店,从而允许IRIW。因此,似乎要么是ARMv8使用了不同的含义,要么是其他要求仍然在起作用,以禁止IRIW重新排序。)
最大的警告:我不是这方面的术语专家,而且我以前从来没有听说过“处理器一致性”,所以我只是从上下文中猜测它们的意思,其解释将与所有已知事实一致。如果这与公认的术语定义不一致,请纠正我。
https://stackoverflow.com/questions/68676666
复制相似问题