在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. flash cs4 如何新增自定义控件

    1. 新增控件脚本* import gfx.controls.CoreList; import gfx.core.UIComponent; import gfx.controls.CheckBox; ...

  2. 再探树形dp

    随着校oj终于刷进了第一页,可以不用去写那些水题了,开始认真学习自己的东西,当然包括文化课.努力.. 这道题呢是道树形dp,可看到了根本就不知道怎么写思考过程: 5min 终于看懂了题 画了样例的图把 ...

  3. 查找->静态查找表->分块查找(索引顺序表)

    文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...

  4. LeetCode 929 Unique Email Addresses 解题报告

    题目要求 Every email consists of a local name and a domain name, separated by the @ sign. For example, i ...

  5. java JDBC (八) 连接池 DBCP

    package cn.sasa.demo1; import javax.sql.DataSource; import org.apache.commons.dbcp2.BasicDataSource; ...

  6. TZOJ:最大连续子序列

    描述 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j <= K.最大连续子 ...

  7. MySQL中drop,delete与truncate的区别

    drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句. (1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将 ...

  8. Python高阶函数map、reduce、filter、sorted的应用

    #-*- coding:utf-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import Web ...

  9. 配置AlwaysON出错

    在其中一个集群节点的SQL Server中验证各节点的投票数 ,在其中一个集群节点的SQL Server上执行使用下面SQL语句 SELECT * FROM sys.dm_hadr_cluster_m ...

  10. HBase单机模式安装

    第一部分 安装前准备 1.安装hadoop 今天刚刚学了hbase的一点基础,准备安装Hbase实际操练一下.因为安装hbase的前提条件是已经成功安装了hadoop,而且hadoop的版本要和hba ...