• ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Atomicity


    1.前言

    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

  • 相关阅读:
    Spring Cloud学习笔记【二】Eureka 服务提供者/服务消费者(ribbon)
    Spring Cloud学习笔记【一】Eureka服务注册与发现
    Springboot分布式限流实践
    Springboot分布式锁实践(redis)
    Springboot2本地锁实践
    Springboot集成mybatis通用Mapper与分页插件PageHelper
    Springboot多数据源配置
    redis主从集群搭建
    assert的基本用法
    spring中BeanPostProcessor笔记
  • 原文地址:https://www.cnblogs.com/smartjourneys/p/6843978.html
Copyright © 2020-2023  润新知