1 CACHE的一些名词术语:

Allocation

         在CACHE中发现一个位置,并把新的cache数据存到这个位置的过程。这个处理过程可能包括evicting(驱逐)cache中已存在的数据,从而为新的数据腾出空间。

Associativity

         指每个Set(集)里包含的line frames(行帧)数。也就是cache的way(路)数。

Capacity miss容量失效

因为cache的容量限制,导致不能包括一个程序的整个working set(工作集),从而造成cache失效。这是三个cache失效原因(容量、强制、冲突)之一。

Clean干净

一个有效的cache行,它的内容没有被更高层内存或CPU修改写过,我们称这个cache行是“干净”的,显然相反状态是dirty(“脏”)

Coherence一致性

如果读内存任意地址的数据返回的总是这个地址的数据最近的更新,我们说内存系统是一致的。存取指CPU和EDMA等的存取。

Compulsory miss强制失效

有时称为首次引用失效。强制失效是一种肯定发生的一种失效,因为数据事先从没有使用过也就没有机会被cache。但有些情况也被称为强制失效,尽管它们不是第一被引用的数据,比如对非写定位的cache进行同一位置的重复写,以及对一个不被cache内存区域的存取。这是三个cache失效原因(容量、强制、冲突)之一。

Conflict miss 冲突失效

由于Associativity的限制导致的而非容量限制造成的cache失效。

Direct-mapped cache直接映射cache

直接映射cache映射低层内存的每个地址到cache的一个单一位置。这样低层内存的多个地址可能被映射到cache中的同一位置上。它相当于1-way set-associative cache。

Dirty脏

writeback回写cache,写到达多级存储结构的某一层,并更新这一层内容,但并不更新更低层的内存,这样,当一个cache行有效并包含更新后的数据,但却不更新下一更低层的内存,我们说这个cache是“脏”的,显然一个有效行的相反状态是“干净”。

DMA直接内存存取

直接内存存取,通常一个DMA操作copy一个内存块从一个区域到另一个区域,或在外设和内存之间传输数据。对C64x DSP,DMA传输使用EDAM,这些DMA传输与程序执行是并行的。从cache一致性角度,EDMA的存取可以看成是另外一个并行处理器。

Eviction驱逐

从cache移出一个line从而为新的数据腾出空间的过程我们成为Eviction。Eviction可以由用户发出的writeback-invalidate产生,被驱逐的line我们称为victim line。当victim line是dirty(“脏”)的时候,数据必须回写道下一级存储器中以维持内存的一致性。

Execute packet执行包

在一个周期里并行执行的一个指令块,一个执行包可以包含1-8个指令。

Fetch packet取指包

1个周期里存取的包含8条指令的指令块。显然一个取指包可以包含多个执行包,这样可能消耗多个周期。

First-reference miss首次引用失效

是强制失效的一种形式。见强制失效。

Fully-associative cache全关联cache

任何内存地址都可以被存储在cache的任何位置。这样的cache非常灵活,但通常硬件上不可实现。这种cache同直接映射cache和集关联cache形成鲜明对比,这两种cache在定位策略方面都有更多的限制,全关联cache只具有概念上的意义,当分析直接映射cache和集相关cache性能时对区分冲突失效和容量失效是有用的,全关联cache等价于这样一个集关联cache:它有line frameway,仅有一个set。

Higher-level memory高层内存

在多级内存系统中,距离CPU较近的内存称为高层内存。在C64x系统中,最高层内存通常是L1层CACHE,这一层的内存直接同CPU相连。较高层内存通常充当较低层内存的CACHE。

Hit命中

当请求的内存地址的数据在cache中,我们说cache命中。命中的反义词是miss(失效)。Cache的命中使cpu的阻塞时间最短,因为才cache中去数据要比从原始位置取更快。在某一层内存的“失效”可能在较低层“命中”。

Invalidate无效

将一个有效的行标记为无效行的过程。这相当于废弃了这一行的内容,但并不回写任何更新的数据。当与writeback组合时,会先将dirty数据更新到保存有这个地址的下一层内存。这通常用于维持内存的一致性。

Least Recently Used(LRU)allocation

对于set-associative和fully-associative cache,最近最少使用原则被用来一个set里选择一个line frame作为被驱逐的line,用来保存新的cache数据。

Line行

是cache处理的最小单位块。显然一个cache行的尺寸要比CPU或高层内存存取的数据尺寸要大。例如尽管CPU可以进行单字节的存取,但如果发生一次读失效,则cache会将整个cache行的数据读入。

Line frame行帧

Cache的一个位置,包含被cache的数据(一行)、一个关联的tag地址,这个行的状态信息。状态信息包括这一行是否valid(有效)、dirty(脏)、LRU状态

Line size行尺寸

一个行的尺寸,单位字节。

Load through

当CPU请求在第一级和第二级cache中都失效时,数据从外部内存获得,同时会存储在第一级和第二级内存中,如果一个cache,它保存数据并同时把数据送到高一层cache中,这种cache我们称之为load-through cache。相对于那种首先存储数据到低层然后第二步再把数据送到高层的cache,这种cache可以减少阻塞时间。

Long-distance access长距离存取

CPU对不被cache内存区域数据的存取。显然,由于这种存取,不会影响cache的状态,但速度会比较慢。

Lower-level memory 低层内存

在多级内存系统中,距离CPU较远的内存称为低层内存。在C64x系统中,最低层内存包括L2以下的外部系统内存和内存映射的外设。

LRU

表示cache line的最近最少使用的状态信息。

Memory ordering内存访问排序

定义在内存里以什么样的顺序看内存操作的结果,有时称为consistency(连贯性)。在分级结构的特定层的强内存访问排序表示在这一层上不可能以不同与程序序的顺序来观察内存存取的结果。松散内存访问排序允许内存分级体系结构以不同的顺序看内存操作的结果,注意强排序并不要求系统内存以程序序顺序操作,而仅仅是使操作的结果在其它请求者看来是与程序序一致的。

Miss失效

当请求的内存地址的数据不在cache中,就是说发生了cache失效。一个cache失效,会引起阻塞请求者直到line frame被定位,数据从低层内存中获得为止。在某些情况下,比如CPU对L1D出现写失效,阻塞CPU是不必要的。Cache失效通常分为三种类型:强制失效、冲突失效和容量失效。

Miss pipelining

服务单一的cache失效的过程需要多个流水周期。如果对连续的失效处理进行流水线操作,显然就增加对失效处理的效率,降低了阻塞周期。

Read allocate

读失效cache是仅在发生读失效时才在cache中定位空间并把数据读入。写失效发生时不会产生数据读入到cache中,而是直接把写数据送到下一层cache中。

Set集

Line frames的一个集合。直接映射的cache一个set包含一个line frame,N-way set-associative cache每个set包含Nline frameFull-associative cache仅有一个set,这个唯一的set包含所有的line frames

Set-associative cache集相关cache

一个set-associative cache包含多个line frames用于cache低层内存。当为一个新的line数据定位一个空间时,选择哪个line frame是基于cache的定位策略的。C64x是基于LRU策略的。

Snoop侦测

lower-level memory(低层内存)查询higher-level memory(高层内存)以确定高层内存是否包含给定地址的数据的一种方法。Snoop的主要目的是通过允许低层内存请求高层内存进行数据更新来维持内存的一致性,snoop操作可以触发writeback(回写),或更普通的writeback-invalidate(回写并无效),触发writeback-invalidate(回写并无效)操作的snoop有时又称为snoop-invalidates。

Tag标签

地址高位作为一个Tag存储在line中,在决定cache是否命中的时候,cache控制器会查询Tag。

Thrash

当存取操作引起cache性能遭受严重损坏,我们说thrash cache了。Thrash的原因可以有很多:一个可能是算法在短时间存取太多的数据而很少或根本不重复使用。也就是说working set太大。这样的算法将引起非常严重的容量失效。另一种情况是算法重复存取一小组不同地址的数据,这些数据映射到cache的相同set,这样就人为造成严的冲突失效。

Touch

对一个给定地址的存储器操作,我们称之为touch那个地址。Touch也可以指读数组元素或存储器地址的其它范围,定位它们在一个特定层cache的唯一目的。一个CPU中心环用作touch一个范围的内存是为了定位它到cache经常被引用作为一个touch环。Touching一个数组是软件控制预取数据的一种形式。

Valid有效

当一个cache line保存从下一级内存取的数据,那么这个line frame就是有效的。无效状态发生在line frame不保存任何数据,或者说还没有被cache的数据,或先前cache的数据由于某种原因(内存一直性要求、程序要求等)被无效。有效的状态并不表示数据是否已经被修改(其实这有另外的状态来表示,即dirtyclean)。

Victim

从cache移出一个line从而为新的数据腾出空间的过程我们成为Eviction。Eviction可以由用户发出的writeback-invalidate产生,被驱逐的line我们称为victim。当victim line是dirty(“脏”)的时候,数据必须回写到下一级存储器中以维持内存的一致性。

Victim Buffer

保存victim直到它们背回写的特殊buffer。Victim lines被移到victim buffer,这样位新的数据腾出空间。

Victim Writeback

当victim line是dirty(“脏”)的时候,数据必须回写道下一级存储器中以维持内存的一致性。我们称这个过程为Victim Writeback

Way

对set-associative cache,每个set包含多个line frames。每个set包含的line frames数被称为way。以set做为行,line frame作为列,那么一列的line frames集合称为一个way。例如,一个4-way set-associative cache有4个way,每个set有4个关联的line frames,结果,对于一个可cache的内存地址,在cache中有4个可能的映射位置。

Working Set

程序或算法就是数据和指令代码的集合。在一个特定时间内被引用的这个集合我们称为working set(工作集)。通常,对于一个算法,我们需要考虑高层内存的工作集,对于整个程序我们需要考虑底层内存的工作集。

Write allocate

对于一个write allocate cache,如果发生写失效,就会定位一个空间并将失效的数据读入到cache中。空间定位按照LRU原则。一旦数据被读入到cache中,就进行写操作,对write allocate cache,仅更新当前层的内存,写的数据并不立刻送到下一层更低的内存。

Writeback回写

将一个有效的但为脏的cache line回写到较低层内存的过程。回写后的这个cache line我们称之为clean(“干净”)。回写后的cache line状态依然为有效。

Writeback cache回写cache

回写cache仅修改它自己的写命中的数据,它不会立刻更新下一级较低层内存的内容。数据在将来某时被回写,如:当这个cache line被驱逐时,或当低层内存向高层内存snoop这个地址时,当然也可以直接通过程序发送writeback命令。一个写命中,会引起对应的line被标记为dirty(“脏”),也就是说数据被更新了,但还没来得及更新低层内存。

Writeback-invalidate回写后使无效

将一个有效的但为脏的cache line回写到较低层内存并置这些cache line为无效状态的过程。对C64x,对一组cache line进行Writeback-invalidate时,仅回写那些有效且为脏的cache lines,但却置那一组中的所有cache lines为无效。

Write merging

Write merging是组合多个独立的写操作成一个、位宽更大的写操作。显然这可以改善了内存系统的性能。例如,对C64x CPU,L1D写缓冲在某些情况下(如果它们是对同一个双字地址的写)能合并多个写。

Write-through cache

对于一个write-through cache,能把所有的写直接旁路到较低层内存。Cache中永远不包含更新的数据,这样做的结果是cache line永远不会是dirty。C64x的cache并不使用这种cache。

2.C64x CACHE的Miss和Hit处理

1.L1 CACHE的Miss和Hit
1.1 Read Miss
见2.1。
1.2 Write Miss
L1D是Read-allocate CACHE,意味着仅在发生Read Miss时才会读入新的行。如果写Miss发生,数据通过一个Write Buffer写到低一级内存,从而把L1D CACHE旁路。写buffer包含4个entries,每个entry是64位宽。
1.3 Write Hit
发生写命中,数据被写到CACHE中,但并不立刻就送到低一级内存。既然CACHE的类型是write-back,那么当CACHE中的数据被CPU写操作修改后,在以后某个时间会回写到内存中。为了回写修改的数据,你必须知道哪个行被CPU修改。为了这个目的,每个行都有一个Dirty状态,只要CPU写一个CACHE行,那么这个行的dirty位就设为1。,只有dirty行才会因为被驱逐而回写到内存,如果行没有被修改,也就是这一行是Clean,那么它的内容会被废弃。回写操作也可以由程序指令来主动触发。
2.L2 CACHE的Miss和Hit
2.1 Read Miss和Hit
CPU对一个可CACHE的外部内存产生读请求,如果在L1(可能是L1P或L1D)发生Miss,再如果这个地址在L2 CACHE中也Miss,那么对应行被读入到L2 CACHE。LRU位决定哪个Way的Line Frame被定位取代,如果这个Line Frame包含Dirty数据,它首先在新的行去进来之前被writeback到外部内存(如果这个Line也包含在L1D中,则L1D中的这个Line首先在L2这一行送到外部内存之前被writeback到L2),形成的L1行(包含请求的地址)被送到L1,L1存储这行数据,并最终把它送给CPU。之后,如果新的Line代替的是一个Dirty行,则这行写到L2 CACHE中。从这个过程我们发现L2和L1 CACHE是一致的。
如果L2命中,则对应行直接送到L1
对于不可CACHE的外部内存区域,请求的数据简单地直接由外部内存送到CPU,不会存储在任何CACHE中。
2.2 Write Miss和Hit
CPU对外部可CACHE的内存进行写请求,这个数据地址在L1D中Miss,于是通过Write buffer送到L2,如果L2检测到这个地址是Miss,对应的L2 CACHE Line从外部内存取进来,然后更新。LRU位决定哪个Way的Line Frame被定位取代,如果这个Line Frame包含Dirty数据,它首先在新的行去进来之前被writeback到外部内存。注意这个行不会存储在L1D,所以如果在L1D中Miss,因为L1D是仅read-allocate的,绝对不会因为写操作而修改CACHE内容。当然如果被L1D命中,则直接修改L1D内容。
如果L2命中,直接修改L2。
对于不可CACHE的外部内存区域,请求的数据简单地直接写到外部内存,不会存储在CACHE中

C64+ cache资料集(更新中)相关推荐

  1. 20新闻与传播考研视频资料持续更新中

    220新闻与传播考研视频资料持续更新中 文都.或新东方.启航等内容全程班视频 具体更新进度见[微信公众号:zsxyfx] 链接:https://pan.baidu.com/s/1z1gNa9JNw2D ...

  2. 嵌入式相关开源项目、库、资料------持续更新中

    学习初期最难找的就是找学习资料了,本贴精心汇总了一些嵌入式相关资源,包括但不限于编程语言.单片机.开源项目.物联网.操作系统.Linux.计算机等资源,并且在不断地更新中,致力于打造全网最全的嵌入式资 ...

  3. 【剑指offer】【leetcode精选题集】【Java】剑指offer题解合集 更新中

    Leetcode题集 [剑指offer][JAVA]面试题第[03]题[数组中的重复数字][HashSet] [剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组] [剑指offe ...

  4. 前端面试合集(更新中……)

    文章目录 一.CSS ```1.display:none.visibility:hidden和opacity: 0的区别?``` 二.JavaScript ```1.说一说JS数据类型有哪些,区别是什 ...

  5. 微信小程序资料集(中)

    **12月1日小程序Demo集合** [微信小程序Demo:金融理财计算器](简书) [微信小程序Demo:支付宝+微信二维码收款小程序](简书) [上滑导航吸顶效果](简书) [微信小程序Demo: ...

  6. 小程序 - 效果处理之技巧合集(更新中...)

    巧用Console.log(event) Event::事件对象,方法在执行的时候,当前环境携带的一些信息 可以打印出来.获取很多信息,根据这些信息再度寻找你需要的信息的路径.如小程序里的event. ...

  7. 团队网站 ,资料陆续更新中。

    学者网:www.scholat.com/team/eidp 简优化团队:http://jians.gxu.edu.cn/default.do GitHub(代码):https://github.com ...

  8. 薅羊毛常见问题合集——更新中

    文章目录

  9. 计算机考研资料库!近五十所高校计算机考研资料分享!持续更新中!

    由于文章内无法添加百度云链接,所以领取方式可以看这里 计算机考研资料库目录!(1) 计算机考研资料库目录!(2) 以下是考研资料库内已有资料,更多资料持续更新中,如果你需要哪个学校的计算机相关专业真题 ...

最新文章

  1. react 组件连动效果_react-redux应用之独立组件联动实例
  2. rails 数据库相关操作命令
  3. 美国旧金山之行第一天
  4. 1.Linux下libevent和memcached安装
  5. Springboot的thymeleaf常用属性
  6. React之props基本使用
  7. skywalking使用mysql_聊聊skywalking的mysql-plugin
  8. Java成神之路——CGLIB使用
  9. [VB]用记录集填充表格函数
  10. 2022-01-09总结
  11. 电脑音频服务未运行怎么解决_【电脑技能】女生专属,学会这几招也可以修好你的电脑...
  12. java中nul值的处理
  13. Ubuntu18.04安装GoldenDict词典【词库】
  14. java的副语言_公共表达中,悄悄影响你的“副语言”
  15. 2.6 springBoot学习笔记(2.6)——- 整合mybatisPlus
  16. 火影推荐程序连载6-径向模糊简介
  17. Spring懒加载机制原理和配置讲解
  18. C++中四种cast转换
  19. 牛客 小米校招 最大新整数 单调栈
  20. 大数据开发实习生--------------------入职篇

热门文章

  1. CodeForces - 835D Palindromic characteristics (dp)
  2. 芯片短缺并没有妨碍英特尔创下“有史以来业绩最好的一年”
  3. 基于unity的2D横版游戏开发日志 小结
  4. 儿时的动画,你看过那些?-我国的动画片
  5. 【游戏开发】unity教程4 打飞碟小游戏
  6. 2020年薪酬排行榜为何程序员遥遥领先?
  7. python话费充值_用Python方法查询移动手机余额话费的源码示例
  8. 知识点------js判断早上好,上午好,下午好,傍晚好,晚上好
  9. (更新时间)2021年6月4日 商城高并发秒杀系统(.NET Core版) 30-lua文件封装加载和执行
  10. 工业生产中的“主动刹车”,是怎么实现的?