在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. Flink - StreamJob

      先看最简单的例子, final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironmen ...

  2. flask框架詳解

    https://www.cnblogs.com/sss4/p/8097653.html 前言: Django:1个重武器,包含了web开发中常用的功能.组件的框架:(ORM.Session.Form. ...

  3. 使用Python + Selenium打造浏览器爬虫

    Selenium 是一款强大的基于浏览器的开源自动化测试工具,最初由 Jason Huggins 于 2004 年在 ThoughtWorks 发起,它提供了一套简单易用的 API,模拟浏览器的各种操 ...

  4. RHEL6.2 ORACLE11G

    今天翻文件看到这个系统的安装截图才发现自己没写,补上. 惯例还是用到的所有参数均位于文末附录 启动虚拟机进入系统安装 选择跳过硬盘检测 选择语言 选择基本存储设备 设定主机名 设定口令 选择使用所有空 ...

  5. linux下nodejs的安装

    一.下载 https://nodejs.org/en/download/ 然后,解压 二.配置环境变量 配置环境变量:在/etc/profile文件新增:export NODE_HOME=/usr/l ...

  6. Pytorch安装教程

    一.准备 Window10系统+Ubuntu16.10系统.Anaconda3.5(python3.6) 二.流程 (1)由于墙的问题,用conda安装Pytorch过程中会连接失败,这是因为Anac ...

  7. Windows7安装两个jdk配置

    win7 配置两个jdk,之前装了jdk1.6,项目需要安装1.8. 首先去oracle官网下载一个和你eclipse版本一致的jdk(我的是32位). 网址:https://www.oracle.c ...

  8. 20180824 SSRS Line Chart 绘制

    (很多时候我都会只记录遇到的问题点,很少详细的写整个过程) 1. 安装ReportBulider 客户端,不需要填写server url ,可以先放空,后面再维护. 安装包官网可以下载,是免费的,现在 ...

  9. os.path的使用

    os.path 1.返回当前目录 举个例子: (1)给出一个目录名称,返回绝对路径 project_path = "Exercise" path = os.path.dirname ...

  10. 怎样打开U盘最安全

    为了避免电脑使用U盘时,通过双击,或者右击盘符时,导致把病毒感染至整个电脑,因此使用下面的方法,可使U盘病毒不被激活传播. 在取消了U盘自动运行的情况下(在组策略中一定要关闭自动运行功能,否则只要一插 ...