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 ...
随机推荐
- 自学Zabbix7.1 IT services
自学Zabbix7.1 IT services 1. 概念IT Services 服务器或者某项服务.业务的可用率,不懂技术的上级领导会过问最近服务器可用率如何.所有api的状况怎么样?通常一些技术人 ...
- BroadcastReceiver 接收系统短信广播
BroadcastReceiver 接收系统短信广播 /* 注册广播: * |--静态注册 (在AndroidManifest .xml 中注册) * <receiver androi ...
- django MTV架构下的网站开发步骤
1.需求分析必不可少,一定要具体列出本次网站项目所要实现的目标,可能包括简单的页面草图与功能方块图等. 2.数据库设计. 3.了解网站的每一个页面,并设计网页模板(.html)文件 4.使用virtu ...
- mathML如何在谷歌浏览器进行展示
前几天不是做了个word公式的解析吗,就是office插入的公式是个xmlObject对象,读出来就是个String,所以要进行转换才能在网页上展示,其实我对这方面也不是很了解,然后各种百度解决方案, ...
- 哈夫曼树Huffman
哈夫曼树处理这样的一种问题: 给出一棵n个叶子的k叉树,每个叶子有一个权值wi,要求最小化∑wi*di di表示,第i个叶子节点到根节点的距离.(一般是边数) 处理方法比较固定. 贪心的思路:我们让权 ...
- CF1080
emmmm......ouuan大佬上紫了,我却没打...... 首先吐槽一波家长会和机房锁门,害我只能来打虚拟赛. 写了abcd四题,还是被ouuan大佬吊打....... 264名,应该能上分吧. ...
- 代码大片出现报错,请重新编译——Clean
工作空间中项目莫名大片报错,可能是各种意外原因导致的代码编译错误,可以选 菜单栏的 Project,Clean一下全部项目,系统会自动重新编译所有项目,有时会有奇效.
- Winform下载文件并显示进度条
本来是要研究怎样判断下载完成,结果找到这个方法,可以在这个方法完成之后提示下载完成. 代码如下: using System; using System.Collections.Generic; usi ...
- Prometheus Redis_exporter
Redis 下载redis_exporter wget https://github.com/oliver006/redis_exporter/releases/download/v0.15.0/re ...
- 重新打开Eclipse出现“An internal error has occurred. java.lang.NullPointerException”
如果出现了上述的错误按照如下的3个步骤解决:1.首先关闭MyEclipse工作空间.2.然后删除工作空间下的. “/.metadata/.plugins/org.eclipse.core.runtim ...