在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的更多相关文章

  1. gem5: 使用ruby memory system中的mesh结构 出现AssertionError错误

    问题:在使用ruby memory system中的mesh结构測试时,出现例如以下错误: Traceback (most recent call last): File "<stri ...

  2. 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 ...

  3. 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 ...

  4. Power management in semiconductor memory system

    A method for operating a memory module device. The method can include transferring a chip select, co ...

  5. armv8 memory translation

    AArch32,arm的32bit架构: AArch64,arm的64bit架构: ARMv8.2-LPA,是armv8.2中的新feature,扩大了IPA和PA的支持范围,从48bit扩展到52b ...

  6. armv8 memory translation table descriptor

    上一节大致给出了descriptor的结构,这篇细致分析各个field: 1) Table Descriptor:stage2中不包含任何的attribute的field,每个level中的descr ...

  7. C++ Memory System Part2: 自定义new和delete

    在第一部分中,我们介绍了new / delete的具体用法和背后的实现细节,这次我们将构建我们自己的小型工具集,可以使用我们自定义的allocator类来创建任意类型的实例(或者实例数组),我们需要做 ...

  8. C++ Memory System Part1: new和delete

    在深入探索自定义内存系统之前,我们需要了解一些基础的背景知识,这些知识点是我们接下来自定义内存系统的基础.所以第一部分,让我们来一起深入了解一下C++的new和delete家族,这其中有很多令人吃惊的 ...

  9. C++ Memory System Part3 : 优化

    前面的系列我们讲了自定义new和delete操作,其中针对deleteArray的问题还有需要优化的地方.我们这次就针对POD类型进行一次优化. 下面的代码是针对POD类型的模板函数实现,分别为New ...

随机推荐

  1. kubenets installation--ranchor-mesos

    [kube-proxy]http://www.cnblogs.com/xuxinkun/p/5799986.html [flannel] 安装Flannel [root@master ~]# cd ~ ...

  2. Chap7:民间用语[《区块链中文词典》维京&甲子]

  3. 浏览器数据库 IndexedDB 入门教程

    一.概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据. 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的 ...

  4. for in 循环

    for  in循环可以循环遍历数组  关键也可以循环遍历对象!而一般的for循环只能循环遍历数组, 当循环遍历对象时key值代表键值对的键,obj[key]则是对应键的值: 当循环遍历数组时,数组不是 ...

  5. Automation服务器不能创建对象(金税盘)

    1. 安装防伪开票组件接口软件: 2. 把接口的注册文件放到%防伪开票系统的安装目录% \BIN下 3. 把%防伪开票系统的安装目录%\bin下的TaxCardX.dll文件复制至 c:\window ...

  6. linux清空历史记录

    前几天弄了个Linux服务器做网站,发现在不同终端登陆时,上下键都会出现一堆无用的命令,搜了一下解决方法,做个笔记. 在Linux中,每个用户目录下都有一个.bash_history文件用于保存历史命 ...

  7. 前端 HTML 常用标签 head标签相关内容 meta标签

    meta标签 Meta标签介绍: <meta>元素可提供有关页面的元信息(mata-information),针对搜索引擎和更新频度的描述和关键词. <meta>标签位于文档的 ...

  8. finecms同时调用子栏目和子栏目的文章怎么操作

    之前ytkah写过dedecms如何调用当前栏目的子栏目及子栏目文章,那如果是finecms如何同时调用子栏目和子栏目的文章呢? {list action=category pid=0 id=31} ...

  9. iOS开发swift语法0基础篇—————(swift技术交流群:361513739)

    iOS开发之swift语法0基础篇:点击打开链接  swift技术交流QQ群361513739

  10. CentOS安装Docker CE

    安装Docker CE(免费版) docker EE企业版您可以根据需要以不同方式安装Docker CE: 大多数用户 设置Docker的存储库并从中进行安装,以便于安装和升级任务.这是推荐的方法. ...