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
ARMV8 datasheet学习笔记3:AArch64应用级体系结构之Atomicity的更多相关文章
- ARMV8 datasheet学习笔记3:AArch64应用级体系结构
1.前言 本文主要从应用的角度介绍ARMV8的编程模型和存储模型 2. AArch64应用级编程模型 从应用的角度看到的ARM处理器元素: 可见的元素(寄存器/指令) 说明 可见的寄存器 R0-R30 ...
- ARMV8 datasheet学习笔记5:异常模型
1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...
- ARMV8 datasheet学习笔记1:预备知识
1. 前言 ARMv8的架构继承以往ARMv7与之前处理器技术的基础; 除了支持现有的16/32bit的Thumb2指令外,也向前兼容现有的A32(ARM 32bit)指令集. 基于64bit的AAr ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之VMSA
1. 前言 2. VMSA概述 2.1 ARMv8 VMSA naming VMSAv8 整个转换机中,地址转换有一个或两个stage VMSAv8-32 由运行AArch32的异常级别来管理 VMS ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(4)- 其它
1. 前言 2.可配置的指令使能/禁用控制和trap控制 指令使能/禁用 当指令被禁用,则这条指令就会变成未定义 指令Trap控制 控制某条或某些指令在运行时进入陷阱,进入陷阱的指令会产生trap异常 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(3)- 异常
1.前言 本文介绍异常相关内容,包括异常类型,异常进入,异常返回,异常层次结构,异常的路由等 2. RESET ARMV8体系结构支持两种类型的RESET Cold reset:Reset PE所有 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST
1.前言 ARMV8系统级编程模型主要包括异常级别.运行状态.安全状态.同步异常.异步异常.DEBUG 本文主要对系统级编程模型做一个概要介绍 2. 异常级别 2.1 Exception level概 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之Generic timer
1.前言 2.generate timer 2.1 概述 提供了一个系统计数器,用来实时测量流逝的时间: 提供了一个虚拟计数器,用来测量某个虚拟机上流逝的虚拟时间: 定时器,每隔一段时间会触发事件,支 ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之存储模型
1.前言 关于存储系统体系架构,可以概述如下: 存储系统体系结构的形式 VMSA 存储属性 2. 存储系统体系结构 2.1. 地址空间 指令地址空间溢出 指令地址计算((address_of ...
- ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(2)- 寄存器
1. 前言 2. 指令运行与异常处理寄存器 ARM体系结构的寄存器分为两类: (1)系统控制和状态报告寄存器 (2)指令处理寄存器,如累加.异常处理 本部分将主要介绍如上第(2)部分的寄存器,分为AA ...
随机推荐
- 自学Linux Shell18.2-sed编辑器高级特性
点击返回 自学Linux命令行与Shell脚本之路 18.2-sed编辑器高级特性 linux世界中最广泛使用的两个命令行编辑器: sed gawk 1. sed小结 命令格式: 1 sed [opt ...
- 架构师成长之路7.1 CDN理论
点击返回架构师成长之路 架构师成长之路7.1 CDN理论 CDN,Content Distribute Network,内容分发网络:CDN解决的是如何将数据快速可靠从源站传递到用户的问题.用户获取数 ...
- NOI2018退役记
NOI2018退役记 终于我也退役了-- Day0 高中毕业前最后一次坐飞机了--在机场干什么呢?当然是打元气打元气打元气.下飞机干什么呢?当然是打元气打元气打元气. 有接机服务,大巴上有个导游,又向 ...
- 洛谷 P1452 Beauty Contest 解题报告
P1452 Beauty Contest 题意 求平面\(n(\le 50000)\)个点的最远点对 收获了一堆计算几何的卡点.. 凸包如果不保留共线的点,在加入上凸壳时搞一个相对栈顶,以免把\(n\ ...
- property(四十)
一个静态属性property本质就是实现了get,set,delete三种方法 用法: class Foo: @property def AAA(self): print('get的时候运行我啊') ...
- shiro项目从 log4j1X 迁移到 log4j2X
先说一下,shiro依赖的项目不是log4j 而是 SLF4J框架. 我们原来用1X版本的jar包如下: log4j-1.2.17.jar slf4j-api-1.7.22.jar slf4j-log ...
- vue2.0 keep-alive最佳实践
1.基本用法 vue2.0提供了一个keep-alive组件用来缓存组件,避免多次加载相应的组件,减少性能消耗 <keep-alive> <component> <!-- ...
- Qt shortcuts
ESC 切换到代码编辑模式 F1 查看帮助 F4 .h 与 .c or .cpp之间切换 shift + F2 声明与定义间切换 Ctrl + tab 切换已打开的文件 Ctrl + B 编 ...
- kali linux 启动无法自动连接网络问题i
kali 有一个很大的问题:无法自动连接网咯. 而且,按照网上的方法修改/etc/Network-manager/Network*.conf和/etc/network/interfaces也没有效果. ...
- winreg模块的使用
python有内置的注册表操作库--winreg(在33版本中为winreg,在2x版本为_winreg). 1.打开键,枚举键值 # -*- coding: gbk -*- import winre ...