1、题目:伪相联映像 Cache 降低 Cache 失效率的方法 方法: 伪相联 Cache 基本思想及工作原理在逻辑上把直接映象 Cache 的空间上下平分为两个区。对于任何一次访问,伪相联 Cache 先按直接映象 Cache 的方式去处理。若命中,则其访问过程与直接映象 Cache 的情况一样。若不命中,则再到另一区相应的位置去查找。若找到,则发生了伪命中,否则就只好访问下一级存储器。伪相联 Cache 具有一快一慢两种命中时间,它们分别对应于正常命中和伪命中的情况。图中绘出了它们的相对关系。使用伪相联技术存在一定的危险:如果直接映象 Cache 里的许多快速命中在伪相联 Cache 中变成
2、慢速命中,那么这种优化措施反而会降低整体性能。所以,要能够指出同一组中的两个块哪个为快速命中,哪个为慢速命中,这是很重要的。一种简单的解决方法就是交换两个块的内容。 举例:伪相联映像 Cache 降低 Cache 失效率的方法已应用于 MIPS R10000 的第二级的Cache 上。数据例子:假设当在按直接映象找到的位置处没有发现匹配、而在另一个位置才找到数 据( 伪命中)需要 2 个额外的周期。当 Cache 容量分别为 2KB 和 128KB 时,直接映象、两路组相联和伪相联这三种组织结构中,哪一种速度最快?首先考虑标准的平均访存时间公式:平均访存时间伪相联命中时间伪相联失效率伪相联失效
3、开销伪相联由于: 失效率伪相联失效率 2 路命中时间伪相联命中时间 1 路伪命中率伪相联2;伪命中率伪相联命中率 2 路命中率 1 路(1失效率 2 路) (1失效率 1 路)失效率 1 路失效率 2 路故:平均访存时间伪相联命中时间 1 路(失效率 1 路失效率 2 路) 2失效率 2 路失效开销 1 路将表中的数据代入上面的公式,得:平均访存时间伪相联,2KB 1(0.0980.076)2(0.07650)4.844平均访存时间伪相联,128KB1(0.010 0.007)2(0.00750)1.356根据上一个例子中的表 58,对于 2KB Cache,可得:平均访存时间 1 路 5.9
4、0 个时钟平均访存时间 2 路 4.90 个时钟对于 128KB 的 Cache 有,可得:平均访存时间 1 路 1.50 个时钟平均访存时间 2 路 1.45 个时钟 效果:伪相联映像 Cache 能在一定程度上降低 Cache 的失效率,但它的多种命中时间会使 CPU 流水线的设计复杂化。 评估:书上谈到伪相联 Cache 的实现时,大都讲可以采用索引位最高位去翻来找到“伪组” 。如果发生了伪命中,那命中的 Cache 块真是我们需要的吗?Cache 块的查找时通过查地址实现的。Cache 地址分三部分(如下图所示) ,因为Cache 是以块为单位选取的,所以块内地址不用考虑,当伪命中时,
5、会出现的情况是:标志位 索引位 块内地址期望地址: tt 1ii mm找到的 Cache 块: tt 1ii ?命中的 Cache 块: tt 0ii ?由此可见,伪命中的 Cache 地址并非我们所需要的,它有一位与所需的不符!书中描述伪相联实现时用了“索引位中最高位取反”这样的表述!这种说法实际上是有 问题的,因为取反的这一位实际上不再属于索引位。在 Cache 的块总数一定的情况下,相联程度越高索引位所需的位数就越少。那么,在伪相联后,相当于增加了相联程序,所以所需的索引位数较之采用伪相联之前要减少一位。那么减少的这一位就是用来取反 的那一位!这一位的实际意义是一位特殊的标志位,通过这一位将“伪 2 路”分成了“奇 路”和“偶路” 。因此这一位在判断是否命中时,也要参与对比。