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  Offset:Cache块内字节偏移

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

 

字指针Offset设置(DM642)

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

块指针Index设置

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

Cache大小:16 KB = 214 bytes

块大小: 25 bytes (8 words)

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

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

            2^14 /2^5                            

           2^9 行

需要9bits第5-13

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

3类事件

l  cache miss:Cache块无数据,从内存读入

l  cache hit:Cache块包含合适的数据,直接从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块都已经占用,新的程序/数据来到,必须废弃一个,然后存储在此处,这就是替换策略。

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

 

 

Cache模块API
                  CACHE_clean(CACHE_L2ALL, 0, 0);
      CACHE_setL2Mode(CACHE_256KCACHE);
      CACHE_enableCaching(CACHE_EMIFA_CE00);
      CACHE_enableCaching(CACHE_EMIFA_CE01);
 
转自:

http://blog.sina.com.cn/s/blog_4a709f280100x1on.html

 

cache miss分为3个种类:
conflict miss
capacity  miss
compulsory miss 

Compulsory misses are those misses caused by the first reference to a location in memory. Cache size and associativity make no difference to the number of compulsory misses. Prefetching can help here, as can larger cache block sizes (which are a form of prefetching). Compulsory misses are sometimes referred to as cold misses.

Capacity misses are those misses that occur regardless of associativity or block size, solely due to the finite size of the cache. The curve of capacity miss rate versus cache size gives some measure of the temporal locality of a particular reference stream. Note that there is no useful notion of a cache being "full" or "empty" or "near capacity": CPU caches almost always have nearly every line filled with a copy of some line in main memory, and nearly every allocation of a new line requires the eviction of an old line.

Conflict misses are those misses that could have been avoided, had the cache not evicted an entry earlier. Conflict misses can be further broken down into mapping misses, that are unavoidable given a particular amount of associativity, and replacement misses, which are due to the particular victim choice of the replacement policy.



 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值