armv8 memory system
在armv8中,由于processor的预取,流水线, 以及多线程并行的执行方式,而且armv8-a中,使用的是一种weakly-ordered memory model,
不保证program order和execute order一致。
所以有时需要显式的执行一些指令,来order自己的代码。
armv8涉及到的优化包括:
1) multiple issue of instructions,超流水线技术,每个cycle,都会有多个issue和execute,保证不了各个指令的执行order。
2) out-of-order execution,很多processor,都会对non-dependent的指令,做out-of-order的执行,
3) Speculation,分组预测,在遇到conditional instruction时,判断condition之前,就会执行之后的instruction。
4) Speculative loads,预取,在执行上一条指令的同时,将下一条指令的数据,预取到cache中。
5) Load and Store optimizations,由于写主存的latency很大,processor可以做很多优化,write-merge,write-buffer等。
6) External memory systems,某些外部device,像DRAM,可以同时接受不同master的req,Transaction可能会被buffered,reordered。
7) Cache coherent multi-core,一个cluster中的各个core,对同一个cache的update,看到的顺序不会是一致的。
8) Optimizing compilers,编译器在编译时的性能优化,可能打乱program order。
armv8支持的memory types:Normal memory和Device memory
Normal memory,主要指RAM,ROM,FLASH等memory,这类memory,processor以及compiler都可以对program做优化,
processor还可以增加repeate,reorder,merge的操作。
在需要固定memory order的情况下,需要显式调用barrier operations,
还有一些存在address dependence的情况,processor必须能够正确处理这些情况。
Device memory,通常都是peripheral对应的memory mapped。对于该memory type,processor的约束会很多;
1) write的次数,processor内部必须与program中的相同;
2) 不能将两次的writes,reads,等效为一个;
3) 但是对于不同的device之间的memory access是不限制order的;
4) speculative是不允许的,对device的memory;
5) 在device memory中execute,也是不允许的;
Device memory的几个attribute:
1) Gather或者non-Gather,多个memory access merge为同一个single transaction,如两个byte write merge为一个halfword write
2) Reordering,同一个block中的access是否能够reorder。
3) Early Write Ack,write不写入device,通过中间buffer之后,即 return ack,是否可以。
四种device memory:
1) Device nGnRnE,最严的约束;
2) Device nGnRE,允许early
3) Device nGRE,允许reorder,early
4) Device GRE,允许gather,reorder,early

Memory attribute,arm系统中,memory都被分为各个region,每个region都有自己的privilege level,memory type,cache policy;
这部分的管理是由MMU,来实现的,各个region都对应其中的一个或几个block、page。
对于normal memory,有shareable和cache property;
对于device memory,总是non-cacheable,outer-shareable,
shareable,用来指定这个location是否是与其他的core,共用的,share的。share的core之间需要保证coherency。
non-shareable,典型应用在AMP,有自己的独自cache,
inner,主要指processor自己的cache,在big-little中,表现为一个cluster,(还是取决于具体实现)
outer,主要指processor外的cache,在big-little中,表现为两个cluster,(还是取决于具体实现)
system,整个system的master,可能会包含GPU等

ARM架构中,包括几个barrier instruction,用来force一定的memory order,但是这样的指令,会减小一些软件的优化性能;
所以最好在需要的时候,再加这样的指令。
1) Instruction Synchronization Barrier(ISB),保证当前的pipeline中没有数据,ISB指令之前的指令都已经执行结束;
多用在context-switching code,cache control等。
2) Data Memory Barrier(DMB),保证所有data access的指令,load,store,在DMB指令之前都已经执行结束。
并不妨碍instruction的fetch。
3) Data Synchronization Barrier(DSB),等待某一类的指令结束,包括data access,instruction fetch。还会等待所有的
由该processor发起的cache,tlb,BP maintenance操作都已经完成,
DSB指令会直接stall processor,DMB不会,instruction仍然是可以执行的。
DMB和DSB,都可以加params,指定某些domain,load/store,

store-store,load-load,any-any指相应的乱序类型。
one-way barriers,AARCH64提供了一组显式指定before、after的指令,Load-Acquire,Store-Rlease,
Load-Acquire(LDAR),所有的load,store,完成之后,才开始执行,LDAR之后的指令开始执行。
Store-Release(STLR),所有的load,store,在STLR执行之后,才开始执行。

armv8 memory system的更多相关文章
- gem5: 使用ruby memory system中的mesh结构 出现AssertionError错误
问题:在使用ruby memory system中的mesh结构測试时,出现例如以下错误: Traceback (most recent call last): File "<stri ...
- PatentTips - Mechanisms for strong atomicity in a transactional memory system
BACKGROUND Advances in semi-conductor processing and logic design have permitted an increase in the ...
- Bit error testing and training in double data rate (ddr) memory system
DDR PHY interface bit error testing and training is provided for Double Data Rate memory systems. An ...
- Power management in semiconductor memory system
A method for operating a memory module device. The method can include transferring a chip select, co ...
- armv8 memory translation
AArch32,arm的32bit架构: AArch64,arm的64bit架构: ARMv8.2-LPA,是armv8.2中的新feature,扩大了IPA和PA的支持范围,从48bit扩展到52b ...
- armv8 memory translation table descriptor
上一节大致给出了descriptor的结构,这篇细致分析各个field: 1) Table Descriptor:stage2中不包含任何的attribute的field,每个level中的descr ...
- C++ Memory System Part2: 自定义new和delete
在第一部分中,我们介绍了new / delete的具体用法和背后的实现细节,这次我们将构建我们自己的小型工具集,可以使用我们自定义的allocator类来创建任意类型的实例(或者实例数组),我们需要做 ...
- C++ Memory System Part1: new和delete
在深入探索自定义内存系统之前,我们需要了解一些基础的背景知识,这些知识点是我们接下来自定义内存系统的基础.所以第一部分,让我们来一起深入了解一下C++的new和delete家族,这其中有很多令人吃惊的 ...
- C++ Memory System Part3 : 优化
前面的系列我们讲了自定义new和delete操作,其中针对deleteArray的问题还有需要优化的地方.我们这次就针对POD类型进行一次优化. 下面的代码是针对POD类型的模板函数实现,分别为New ...
随机推荐
- [CentOS7][ssh][publickey][troubleshoot] 通过密钥登录ssh故障排查
通常情况下,我会使用非对称加密的方式来进行ssh的登录. 做法: 将公钥添加到 $HOME/.ssh/authorized_keys 文件中. 但是通常,会遇见各种各样的问题,导致失败.汇总如下: 0 ...
- day4_处理json
说明:#json是一种通用的数据类型,所有的语言都认识.#k - v {}#json串就是一个字符串,不能根据key-value取值#json可以转成字典#json串就是字符串,可放在三引号中校验js ...
- SQL instr()函数的格式
格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串) 格式二:instr( string1, string2 [, start_positio ...
- C# cmd bcp 导出数据
背景需求:应用系统间数据自动同步处理,要求高效无人工干预 技术实现:C#启动cmd,通过BCP命令传入必要参数,实现数据导出 /// <summary> /// cmd下,启动应用程序命令 ...
- java装配bean
java装配bean,可以自动装配,也可以显式装配: 1.通过组件扫描自动装配bean 因为使用了Configuration注解,表明这个类是一个配置类,该类应该包含在spring应用上下文如何创建b ...
- composer错误提示Cloning failed using an ssh key for authentication的解决方法
早上ytkah在测试laravel用composer安装一些插件时出现了一些错误,提示如下,是github的ssh密匙认证错误,提示要重新生成token,然后保存在/root/.config/comp ...
- Python3学习之路~6.4 析构函数
析构函数是在实例释放.销毁的时候执行的,通常用于做一些收尾工作.比如说,关闭一些数据库连接.打开的临时文件等. #Author:Zheng Na class Role: # 构造函数 def __in ...
- 002-pro ant design 表单基本使用、state赋值数据父子传输
一.表单元素操作事项 1.form 默认在prop中存在:this.props.form,直接使用即可 2.重置:this.props.form.resetFields(); 3.赋值:form.se ...
- oracle sql 游标的简单用法(tip:sql中两个单引号表示一个单引号)
--游标遍历某个字段 (打印出来) declare res_sql varchar2(2000); cursor cur is select f_dcnam ...
- Django-分页、中间件和请求的声明周期
一.分页 相关连接:https://www.cnblogs.com/kongzhagen/p/6640975.html 一.Django的分页器(paginator) 1.view.py 视图 fro ...