Cache

为什么要引入Cache

①大容量主存一般采用 DRAM,相对SRAM速度慢,而SRAM速度快,但价格高。

②程序和数据具有局限性,即在一个较短的时间内,程序或数据往往集中在很小的存储器地址范围内。

因此, 在主存和CPU之间可设置一个速度很快而容量相对较小的存储器,如下图所示。在其中存放CPU 当前正在使用以及一个较短的时间内将要使用的程序和数据,这样,可大大加快 CPU 访问存储器的速度,提高机器的运行效率。

Cache其实是我们分出来的特定的存储器,为了优化处理器处理速度,Cache具有一些优秀的特点。事实上从引入理由可以看到Cache必须存储速度快并且不是那么大容量对于系统也会有很大帮助。寻找这样的存储器,SRAM简直是量身定做,该存储器采用晶体单元,集成度不高所以做不到容量大;但是它相比DRAM速度就快了,另外掉电后数据也保存,对于一些重复的应用而言第一次命中就很好了,似乎都不需要提前读写(预热)。既然Cache实质存储器,也应该满足存储器的层次结构。

存储器的层次结构

l  越靠近CPU的层次,其特性必须

   安装容量小(节约成本)

   速度更快(提高访问速度)

   包含下一个层次的数据的一个子集

   包含以上所有层次所存储的数据

l  最高的层次应与CPU速度相同

l  最低的层次(通常是磁盘)包含所有的数据

 

数据访问的局部特性(Cache代码优化)

l  时间局部特性

   现在访问的数据,在不久的将来可能再次使用

l  空间局部特性

   此处的数据被访问,其附近的数据可能即将被访问

内存Cache的设计

   定位:指定的内存单元映射到哪个Cache地址?

   确认:某Cache地址中存储的数据是否是需要的?

   速度:如何快速得到数据?

直接映射Cache

   指定内存单元映射到一个确定的Cache单元;

   多个内存单元可以映射到同一个Cache单元

          

l  多个内存地址可以映射到同一Cache块:如何知道Cache当前存储的是哪个?

l  如果Cache块大于1字节(空间局部特性)如何处理?

l  解决方案:把地址分解为3个域

             标记Tag                        块指针Index       字指针Offset

 

l  所有域作为无符号数使用

l  Index:需要的Cache

l  OffsetCache块内字节偏移

l  Tag:标准当前在Cache块中存储的数据是映射到哪个内存地址

 

字指针Offset设置(DM642

设每次从Cache中取出一个字(B),L1P采用直接映射,也就是块大小等于行大小,所以块大小为32B=25B,所以需要5Bits来描述块内字偏移量。占据地址0-45

块指针Index设置

选择合适Cache行(叫做:Cache Row

Cache大小:16 KB = 214 bytes

块大小: 25 bytes (8 words)

Cache行数 =   Cache块数/每行快数(=1            

          =   Cache大小 /行大小(=块大小)                   

          =    2^14 /2^5                            

          =   2^9 

需要9bits5-13

标志位:剩余的位数为32-5-9=18Bits14-31

3类事件

l  cache missCache块无数据,从内存读入

l  cache hitCache块包含合适的数据,直接从Cache中读出数据

l  cache miss, block replacement:错误的数据在Cache块中,抛弃现有数据,并从内存中读入合适的数据

Valid bit:标准Cache块是否有数据

Cache的性能

平均访问时间(Average Access Time )

= Hit Time   Miss Penalty × Miss Rate

未命中产生的原因:1)加载程序时,Cache里面还没有任何信息或数据有误;2)采用两个内存地址映射到同一Cache块(允许的),且同时访问;会产生冲突。(直接映射很容易导致冲突,因为概率上而言映射关系不多出错的可能性就大了?)。

Cache块大小

   大于1Byte的块可以利用程序的空间局部特性

   对指令,此特性非常重要

   对数据,也有很大的好处

块大小对Cache性能指标的影响

   Miss Penalty = Block Size/Memory Bandwidth

   Block Number = Cache Size/Block Size

要改善Cache的性能,可以通过两个途径实现,1)增加命中率,2)减少缺失开销

减少冲突可以有效增加命中率,让映射关系更自由可以降低冲突发生的概率,就可以增加命中率从而改善Cache性能,因此引入了全相关的概念,Index不再操作。内存地址单元可以映射到任意的Cache块。

有了全相关的概念自然的引出了多路联合集,每个集包含多个Cache块,集内是全相关的,必须并行比较Tag,集间相当于直接映射,直接映射到集,然后用全相关。

Cache的替换策略

如果所有可用Cache块都已经占用,新的程序/数据来到,必须废弃一个,然后存储在此处,这就是替换策略。

LRULeast Recently Used)近来最少使用块,找一个最空闲的,存储新数据。

 

 

Cache模块API
         CACHE_clean(CACHE_L2ALL, 0, 0);
    CACHE_setL2Mode(CACHE_256KCACHE);
    CACHE_enableCaching(CACHE_EMIFA_CE00);
    CACHE_enableCaching(CACHE_EMIFA_CE01);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值