减少Cache失效开销
方法:
写缓冲及写合并
让读失效优先于写
子块放置技术
请求字处理技术
多级Cache
非阻塞Cache技术
写缓冲及写合并
1.写直达Cache中,因为所有的写请求都必须发送到下级存储层次中,所以经常使用一个写缓冲来降低失效开销
2.如何提高写缓冲的效率和利用率
写合并
3.在写回法Cache中,也可采用写缓冲器
让读失效优先于写
1.Cache中的写缓冲器导致对存储器访问的复杂化
2.解决问题的方法(读失效的处理)
(1)推迟对读失效的处理及到写缓冲排空(缺点:读失效的开销增加)
(2)检查写缓冲器中的内容:增加硬件
(每次读的时候先去写缓冲器中找,如果有直接取出来,不用去下一级存储器中找了)
子块放置技术
(块非常大的话,从下一级存储器中调的话,可能需要多次访存)
把Cache块进一步划分为更小的块(子块),并给每个子块赋予一位有效位,用于指明该子块中的数据是否有效
Cache与下一级存储器之间以子块为单位传送数据。但标识仍以块为单位。
请求字处理技术
1.请求字
从下一级存储器调入Cache的块中,只有一个字是立即需要的。这个字称为请求字。
(如果CPU需要一个字,将该字对应的那一块取进来然后再去找那个字,就比较麻烦,可以先把这个字取进来)
2.应尽早把请求字发送给CPU
尽早重启动:调块时,从块的起始位置开始读起。一旦请求字到达,就立即发送给CPU,让CPU继续执行
请求字优先:调块时,从请求字的位置读起。这样,第一个读出的字便是请求字。将之立即发送给CPU
3.这种技术在以下情况下效果不大:
Cache块较小
下一条指令正好访问同一Cache块的另一部分
多级Cache
1.应把Cache做的更快?还是更大?
答案:二者兼顾,再增加一级Cache
第一级Cache(L1)小而快
第二级Cache(L2)容量大
2.性能分析
3.局部失效率和全局失效率
4.当第二级Cache比第一级Cache大得多时,两级Cache的全局失效率与第二级Cache相同的单级Cache的失效率非常接近。
5.第二级Cache的参数
第二级Cache不会影响CPU的时钟频率,因此其设计有更大的考虑空间
两个问题:
能否降低CPI中的平均访存时间部分?
成本是多少?
(1)容量 第二级Cache的容量一般比第一级的大很多,如512KB
(2)相联度 第二级Cache可采用较高的相联度或伪相联方法
(3)块大小 第二级Cache可采用较大的块,如64、128、256字节
为减少平均访存时间,可以让容量较小的第一级Cache采用较小的块,而让容量较大的第二级Cache采用较大的块
非阻塞Cache技术
1.非阻塞Cache:Cache失效时仍允许CPU进行其它的命中访问。即允许“失效下命中”
2.进一步提高性能:多重失效下命中
存储器必须能够处理多个失效
3.重叠失效个数对平均访问时间的影响
减少命中时间
方法:
采用容量小、结构简单的Cache
虚拟Cache
流水化写
容量小、结构简单的Cache
命中时间直接影响到处理器的时钟频率。在当今的许多计算机,往往是Cache的访问时间限制了处理器的时钟频率。
1.硬件越简单,速度就越快
2.应使Cache足够小,以便可以与CPU一起放在同一块芯片上
虚拟Cache
1.虚拟Cache
(程序运行时要先将虚地址转换为实地址,然后访问Cache,时间挺长的,能不能直接用虚地址访问呢,这就是虚拟Cache的想法)
访问Cache的索引以及Cache中的标识都是虚拟地址(一部分)。
2.并非都采用虚拟Cache(为什么?)
因为存在虚拟Cache清空问题,多进程执行时使用的虚地址都是相同的,会有重叠,一个进程运行时将其放到虚拟Cache中,进行进程切换时,必须将虚拟Cache清空,挺麻烦
3.虚拟Cache的清空问题
4.同义/别名问题
多个虚拟地址对应同一个物理地址
解决方法:反别名法,页着色
5.虚拟索引+物理标识
利用虚拟地址找到索引读Cache,同时进行虚实地址转换:前提是虚拟索引=物理索引
而:页内位移在虚实地址变换时不变
优点:兼得虚拟Cache和物理Cache的好处
局限性:Cache容量受限<=页大小*相联度
6.举例:IBM3033的Cache
7.另一种方法:硬件散列变换
写操作流水化
Cache优化技术总结