ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Atomicity 1.前言 2.基本概念 3. 基本规则 5.参考文档

Atomicity是内存访问的一个属性,描述为原子性访问,包括single-copy atomicity和multi-copy atomicity

2.基本概念

  • observer

可以发起对memory read/write访问的都是observer

  • Coherent order

全局一致性,即shareability domain中所有的observer观察到的对同个内存位置的全局的一致的写入动作(顺序);

[1]:属于同一个shareability domain的observers共享memory space,并且能够对同一个地址的memory进行操作。

下面我们用一个具体的例子来说明什么是“single total order”。假设系统中有四个cpu core,分别执行同样的代码:cpux给一个全局变量A赋值为x,然后不断对A进行观察(即load操作)。在这个例子中A分别被四个CPU设定了1、 2、3、4的值,当然,先赋值的操作结果会被后来赋值操作覆盖,最后那个执行的write操作则决定了A变量最后的赋值。假设一次运行后,cpu 1看到的序列是{1,2},cpu 2看到的序列是{2},cpu 3看到的序列是{3,2},cpu 4看到的序列是{4,2},那么所有的cpu看到的顺序都是符合一个全局的顺序{3,1,4,2},而各个CPU并没有能够观察到全部的中间过程,但是没 有关系,至少各个cpu观察的结果和那个全局顺序是一致的(consistent)。如果cpu 1看到的序列是{2,1},那么就不存在一个一致性的全局顺序了,也就不是coherent order了

  • Atomicity

是内存访问的一个属性,描述为原子性访问,包括single-copy atomicity和multi-copy atomicity

单核系统上用single-copy atomicity描述内存访问的原子性,多核系统用multi-copy atomicity描述内存访问的原子性

  • Single-copy

访存指令只会访问一次内存。

[1]:当PE访问内存的时候,例如load指令,这时候会有数据从memory copy到寄存器的动作,如果该指令的内存访问只会触发一次copy的动作,那么就是single-copy。对于加载奇数地址开始的2Byte load指令,其实该指令实际在执行的时候会触发两次的copy动作,那么就不是single-copy,而是multi-copy的(注意:这里的multi-copy并非Multi-copy atomicity中的Multi-copy,后文会描述;

  • Single-copy atomic

Single-copy atomicity描述的是单核内存访问指令操作的原子性,分为两部分:

(1)  Single-copy atomicity store overlap store

两个store指令并行操作同一个内存位置,一个store看到的是要么另一个sotre已经执行完毕,要么还没有执行,不会看到执行的中间结果;

例如:有两个store操作,分别是A和B,那么A操作会将所有的bits作为一个原子的、不可分割的整体store,且store过程要么是在B store之前,要么是B store之后

(2)  Single-copy atomicity store overlap load

Store和load如果并行执行,则对load而言要么是store之前的结果,要么是store之后的结果,不会看到中间结果(英文与此有出入?)

[1]:overlap指的是并行的意思,两条指令并行;

overlapping byte则指内存操作有重叠的部分。例如加载0x000地址的4-Byte到寄存器和加载0x02地址2-Byte有2个字节的重叠;

原文中"all of the writes from one of the stores ”这里all of the writes是指本次store操作中所涉及的每一个bit,这些bits是一个不可分隔的整体,插入到Coherence order操作序列中

  • Single-copy atomicity规则

某个异常级别的内存访问遵循如下规则:

(1)对齐的load或者store操作是Single-copy atomicity的。针对byte的内存操作总是Single-copy atomicity的,2个Bytes的load或者store操作如果地址对齐在2上,那么也是Single-copy atomicity的。其他的可以以此类推;

(2)load pair和store pair指令,如果每个load地址都是对齐的,则被视为两个single-copy atomic read;

(3)Load-Exclusive Pair(加载2个32-bit)指令和Store-Exclusive Pair(写入2个32-bit数据)指令是Single-copy atomicity的

(4)Load-Exclusive/Store-Exclusive pair(加载/存储2个64-bit)中的Store-Exclusive执行成功,会将整个内存位置都更新(???)

(5)translation table walks  read a translation table entry是single-copy atomictiy的(指页表查找过程中读取一个页表项是原子的)

(6)向(从)小于等于64bits的浮点或SIMD寄存器load(store)一定数量的数据,如果这些数量的数据被对齐到load(sotre)地址就是single-copy atomicity

(7)向(从)浮点或SIMD寄存器load(store)一个128bit的值,如果load(sotre)地址是64bit对齐的,可以认为是两个single-copy atomicity

  • Multy-copy

指访存指令会多次访问内存,如从奇数地址读2字节到寄存器

[1]:此与下面的Multy-copy atomicity中的Multy-copy不是一个含义,此处的Multy-copy指的是多次拷贝,Multy-copy atomicity中的Multy-copy指的是多核拷贝的意思,如:系统中有多个CPU core,每一个core都可以对内存系统中的某个特定的地址发起写入操作,系统中有n个CORE,那么就有可能有n个寄存器到memory的copy动作。

  • Multy-copy atomicity

Multy-copy atomicity定义的是multiprocessing 环境下,多个store操作的顺序问题以及多个observer之间的交互问题,与single-copy atomicity不是对立的,是两个不同的东西。满足如下条件就认为是multi-copy atomicity:

(1) 系统中对同一个地址的memory的store操作是串行化的,也就是说,对于所有的observer而言,它们观察到的写入操作顺序就是相同的一个序列。这个串行化要求比较狠,高于coherent的要求(???),也就是说,如果系统中的write操作不是coherent的(多个核上的访存指令对这个内存位置都是coherent oreder???),那么也就不是Multi-copy atomicity的。

(2)对一个地址进行的load操作会被block,直到对该地址的写对所有的observer都是可见的(怎么才算可见??)

3. 基本规则

  • Single-copy atomicity规则

某个异常级别的内存访问遵循如下规则:

(1)对齐的load或者store操作是Single-copy atomicity的。针对byte的内存操作总是Single-copy atomicity的,2个Bytes的load或者store操作如果地址对齐在2上,那么也是Single-copy atomicity的。其他的可以以此类推;

(2)load pair和store pair指令,如果每个load地址都是对齐的,则被视为两个single-copy atomic read;

(3)Load-Exclusive Pair(加载2个32-bit)指令和Store-Exclusive Pair(写入2个32-bit数据)指令是Single-copy atomicity的

(4)Load-Exclusive/Store-Exclusive pair(加载/存储2个64-bit)中的Store-Exclusive执行成功,会将整个内存位置都更新(???)

(5)translation table walks  read a translation table entry是single-copy atomictiy的(指页表查找过程中读取一个页表项是原子的)

(6)向(从)小于等于64bits的浮点或SIMD寄存器load(store)一定数量的数据,如果这些数量的数据被对齐到load(sotre)地址就是single-copy atomicity

(7)向(从)浮点或SIMD寄存器load(store)一个128bit的值,如果load(sotre)地址是64bit对齐的,可以认为是两个single-copy atomicity

  • Multy-copy atomicity规则

(1)对于normal memory,写入操作不需要具备Multi-copy atomicity的特性???。

(2)如果是Device类型的memory,并且具备non-Gathering的属性,所有符合Single-copy atomicity要求的write操作指令也都是Multi-copy atomicity的

(3)如果是Device类型的memory,并且具备Gathering的属性,写入操作不需要具备Multi-copy atomicity的特性???

5.参考文档

[1] DDI0487A_k_armv8_arm_iss10775.pdf

[2] ARMv8之Atomicity