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 Shell3.2-切换目录命令cd
点击返回 自学Linux命令行与Shell脚本之路 3.2-切换目录命令cd 当登录系统并获得shell命令提示符后,你通常位于自己的主目录中. 使用pwd命令验证: pwd命令以绝对路径的方式显示用 ...
- 【BZOJ1925】[SDOI2010]地精部落(动态规划)
[BZOJ1925][SDOI2010]地精部落(动态规划) 题面 BZOJ 洛谷 题解 一道性质\(dp\)题.(所以当然是照搬学长PPT了啊 先来罗列性质,我们称题目所求的序列为抖动序列: 一个抖 ...
- [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】
题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...
- coursera吴恩达 机器学习编程作业原文件 及我的作业
保存在github上供广大网友下载:点击 8个zip,原文件,没有任何改动. 另外,不定期上传我自己关于这门课的学习过程笔记和心得,有兴趣的盆友可以点击这里查看.
- SQLite 学习笔记(一)
(1)创建数据库 在命令行中切换到sqlite.exe所在的文件夹 在命令中键入sqlite3 test.db;即可创建了一个名为test.db的数据库 由于此时的数据库中没有任何表及 ...
- POSIX 线程取消点的 Linux 实现
http://blog.csdn.net/stevenliyong/article/details/4364039 原文链接:http://blog.solrex.cn/articles/linux- ...
- 简单认识python(一)
最近本宝宝被一部小说迷的神魂颠倒的,在网络上四处找免费的小说资源,一直哭唧唧的等待着每天更新的一章.实在是太可怜了,本宝宝决定自己学python,自己抓包小说. 既然知道目的地了,那就和本宝宝一起打怪 ...
- idea tomcat上传图片,无法显示的问题解决
真是浪费时间啊,之前eclipse下的tomcat 去webapps下找就行了,这倒好,idea下根本没有. 我上传的目录建在项目中的static中了,upload文件夹,上传到这里肯定是找不到了的: ...
- mysql自定义函数与过程中写法的注意事项
BEGIN #Routine body goes here... /* update szzx_goods_common set gc_id=i where gc_name=(SELECT gc_na ...
- 【maven】依赖、继承、聚合
依赖: <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId&g ...