This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Atomicity in the ARM architecture

各位专家:

     请教一下在ARMv8包括ARMv7-A架构中,Single-copy atomicity和multicopy atomicity具体指的什么?有什么作用,如何理解?谢谢!

  • 这是一个关于ARM架构中原子访问的概念,所谓single-copy atomicity访问是指这笔读写访问是不会被中断的即单次完成,也就是说一个读/写访问是single-copy atomicity则

    1. 在对一个存储单元的一系列写操作后,该存储单元的值为这些写操作中其中之一的值,不可能发生在写操作之后的某一时刻该存储单元的值的一部分是一次写操作的值,另一部分是另一个写操作的值
    2. 当一次读操作和一次写操作对同一存储单元进行操作,读操作所得到的值要么是写操作之前的值要么是写操作之后的值,不可能发生读的值的一部分是写操作之前的值另一部分是写操作之后的值

    ARMv7中,single-copy atomic的处理器访问有以下几种(ARMv8中扩展了一部分):

    1. all byte accesses,如ldrb,strb
    2. all halfword accesses to halfword-aligned locations,如ldrb,ldrsh,strb等
    3. all word accesses to word-aligned locations,如str,ldr等指令
    4. memory accesses caused by LDREXD and STREXD instructions to doubleword-aligned locations.

    ARM中LDM, LDC, LDC2, LDRD, STM, STC, STC2, STRD, PUSH, POP, RFE, SRS, VLDM, VLDR, VSTM, VSTM, and VSTR指令的执行都是按一系列按字对齐的word访问序列。每个32-bitword访问都被保证是single-copy atomic,但架构不保证该序列中的两个或更多的word访问的子序列是single-copy atomic的。

    multi-copy atomicity是在多核系统中的存储访问的原子性的概念,这里面涉及到一致性的概念,当对存储单元的写操作同时满足以下条件时称为multi-copy atomic:

    1. 所有对同一存储单元的写是串行的,意味着被所有观察者观察的顺序是相同的
    2. 对一个存储单元的读不会返回之前写的值直到所有的观察者观察到了那笔写,这里的观察着指的是系统中所有可以进行对该存储单元进行存储访问的master,可以是processor可以是GPU可以是DMA也可以是其它的IP.

    通常对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出去。