为什么要引入Cache
①大容量主存一般采用 DRAM,相对SRAM速度慢,而SRAM速度快,但价格高。
②程序和数据具有局限性,即在一个较短的时间内,程序或数据往往集中在很小的存储器地址范围内。
因此, 在主存和CPU之间可设置一个速度很快而容量相对较小的存储器,如下图所示。在其中存放CPU 当前正在使用以及一个较短的时间内将要使用的程序和数据,这样,可大大加快 CPU 访问存储器的速度,提高机器的运行效率。
Cache其实是我们分出来的特定的存储器,为了优化处理器处理速度,Cache具有一些优秀的特点。事实上从引入理由可以看到Cache必须存储速度快并且不是那么大容量对于系统也会有很大帮助。寻找这样的存储器,SRAM简直是量身定做,该存储器采用晶体单元,集成度不高所以做不到容量大;但是它相比DRAM速度就快了,另外掉电后数据也保存,对于一些重复的应用而言第一次命中就很好了,似乎都不需要提前读写(预热)。既然Cache实质存储器,也应该满足存储器的层次结构。
存储器的层次结构
l
–
–
–
–
l
l
数据访问的局部特性(Cache代码优化)
l
–
l
–
内存Cache的设计
–
–
–
直接映射Cache:
–
–
l
l
l
l
l
l
l
字指针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行数 =
需要9bits第5-13位
标志位:剩余的位数为32-5-9=18Bits第14-31位
3类事件
l
l
l
Valid bit:标准Cache块是否有数据
Cache的性能
平均访问时间(Average Access Time )
= Hit Time +
未命中产生的原因:1)加载程序时,Cache里面还没有任何信息或数据有误;2)采用两个内存地址映射到同一Cache块(允许的),且同时访问;会产生冲突。(直接映射很容易导致冲突,因为概率上而言映射关系不多出错的可能性就大了?)。
Cache块大小
–
–
–
块大小对Cache性能指标的影响
–
–
要改善Cache的性能,可以通过两个途径实现,1)增加命中率,2)减少缺失开销
减少冲突可以有效增加命中率,让映射关系更自由可以降低冲突发生的概率,就可以增加命中率从而改善Cache性能,因此引入了全相关的概念,Index不再操作。内存地址单元可以映射到任意的Cache块。
有了全相关的概念自然的引出了多路联合集,每个集包含多个Cache块,集内是全相关的,必须并行比较Tag,集间相当于直接映射,直接映射到集,然后用全相关。
Cache的替换策略
如果所有可用Cache块都已经占用,新的程序/数据来到,必须废弃一个,然后存储在此处,这就是替换策略。
LRU(Least Recently Used)近来最少使用块,找一个最空闲的,存储新数据。