各位专家:
请教一下在ARMv8包括ARMv7-A架构中,Single-copy atomicity和multicopy atomicity具体指的什么?有什么作用,如何理解?谢谢!
这是一个关于ARM架构中原子访问的概念,所谓single-copy atomicity访问是指这笔读写访问是不会被中断的即单次完成,也就是说一个读/写访问是single-copy atomicity则:
在ARMv7中,single-copy atomic的处理器访问有以下几种(ARMv8中扩展了一部分):
ARM中LDM, LDC, LDC2, LDRD, STM, STC, STC2, STRD, PUSH, POP, RFE, SRS, VLDM, VLDR, VSTM, VSTM, and VSTR指令的执行都是按一系列按字对齐的word访问序列。每个32-bit的word访问都被保证是single-copy atomic,但架构不保证该序列中的两个或更多的word访问的子序列是single-copy atomic的。
multi-copy atomicity是在多核系统中的存储访问的原子性的概念,这里面涉及到一致性的概念,当对存储单元的写操作同时满足以下条件时称为multi-copy atomic:
通常对Normal memory的写不是multi-copy atomic.
single-copy atomic定义了一条load/store指令(或者说由这条指令产生的transaction)update memory时的最小单位。
假设我们有以下两条指令。
STM[addr]
LDM[addr]
假设STM写8个word(32bytes)到addr,LDM从相同地址读8个word,返回的结果即使某一个(或者某几个)byte和STM写的值一致,也不能保证所有的byte都是最新的。因为STM,LDM不满足single-copy atomic。
如果指令是STR和LDR,而且满足single-copy atomicity (也就是说地址是word对齐),他们update memory的最小单位就是 word。所以如果LDR读到一个word中的某一个(或者某几个)byte是最新值,那么LDR读到的整个word必须是最新值。
在设计CPU时,desinger根据ARMARM来决定哪些指令实现的操作必须满足single copy atomic。如果满足single-copy atomicity,可以保证每次我们看到的值或者全部是旧的,或者全部是新的,不可能存在一部分新的一部分旧的。
对于multi-copy atomic, 如果一个系统满足multi-copy atomic,它保证当系统中的某个master能够看到某个data的update时,系统中所有的master都能够看到这个update。所有的master能不能有相同的memory view对于保证coherency很重要。ARM A系列CPU大部分都是不满足这个要求,所以需要使用memory barrier来保证这一点。如果系统满足multi-copy atomic,可以选择把barrier terminate在cluster里面。如果系统不满足multi-copy atomic,那么就需要把barrier broadcast出去。