2021年11月30日
查找方法
-
通过目录表来实现
即用地址中的内存块中的索引先找到对应的cache目录表的侯选位置(是一个大组的整体位置),然后通过标识来对比这个组内的来找,找到即命中,找不到不命中,访问内存。
找侯选位置中的目录表项可以用顺序查找也可以用并行查找
并行查找可以用相联存储器或者单体多字存储器+比较器来查找(非重点)
替换算法
1
有一个新的块要调入,要替换哪个块?
对于直接映像只能有一个块别无选择,组相联映像找到对应的组,全相联映像可以替换任意块
2
替换算法
- 随机法
- 先进先出fifo 只是记录进来的时刻
- 最近最少使用法lru 记录的是最后一次访问的时间 lru对于大部分替换算法性能已经够用 注意和lfu区别(记录频次)(最不经常使用页替换)
2
lru算法的硬件实现 堆栈法 <复习>
数据结构:逻辑结构和物理结构的匹配映射
线性表->>数组,队列,堆栈(先入后出,只能在栈顶操作,有两个指针),串(每个元素都是一个字符)
链表->>循环链表,双向链表
<复习>
堆栈法
这里的堆栈思想是对于组来说的
使用堆栈的思想,如果访问了一个块,查找组堆栈里是否有这个块,如果有这个块,说明这个组里命中,则抽出这个块,上面的压下来,这个块从上面压入,如果没有这个块,则直接压入,最下面的块自动被消除
速度较低,成本较⾼(只适⽤于相联度较⼩的LRU算法)
比较对法
<复习>
<复习>
对于块中每两个组成一个Cn2
每个组合称为Txy
如Tab
Tab=1表示a比b更近访问过
Tab=0表示b比a更近访问过
则让Tac∗∗Tbc=1时说明块c最晚被访问(对于只有abc三块的情况下)。
写策略
写直达法
执行写操作时不仅写入cache也写入一下级存储器
写直达法所导致的cpu停顿称为cpu写停顿
可使用写缓冲器来来优化减少写停顿
优点:速度快,所使用的存储器带宽低
写回法
执行写操作时,只写入cache。仅当cache中相应的块被替换时才写入主存。(设置“修改位”)
优点:一致性好,易于实现
写操作时的调块
由于写访问并不需要用到所访问单元的原先数据,所以当发生写不命中时可以选择以下两种方式
(1) 按写分配(写时取)
写不命中时,先把所写单元所在块调入cache,再行写入
对应了写回法
(2) 不按写分配(绕写法)
写不命中时,直接写入下一级存储器而不是调块
对应了写直达法
改进cache性能
平均访存时间=命中时间+不命中率∗∗不命中开销
cpu时间=IC∗∗(CPI(execution)+访存次数∗∗不命中率∗∗不命中开销(对应的是周期数))∗∗时钟周期时间
注意
- Cache命中对应的时钟周期数应该被看作cpu执行时钟周期数的一部分
- 1说明了cpu执行周期数应该要比Cache1对应的时钟周期数要大
- 平均访存时间和程序执行时间的区别在于1是平均访存时间对应的是整体地址访问存储器的行为来说的,而cpu时间对应的cpu执行的时间
- Cache命中是不访问存储器的,cpu时间计算公式中访存次数×不命中率×不命中开开销和不命中率×不命中开销是等价的
- 存储器停顿周期数=平均访存次数×不命中率×不命中开销
- 平均访存次数=访存次数/指令数