计时:同步/异步/半同步/分割
总线宽度(Bus width):每次传输的位数
Ⅲ Cache 寄存器
内存设计瓶颈: 容量 速度 价格成本
实际要求:大容量 高速 解决方式:层次式设计
Cache基本思想:
运用一个更小更快的寄存器来减少内存的访问次数 是对主存的部分拷贝
处于CPU和主存之间 可能集成在CPU或其他模块中
Cache的基本工作机制
1. Check: 当处理器试图从主存访问数据时,先检查该数据是否在Cache中 2. 若命中,数据直接从Cache传输至Cpu
3. 若没有命中,Cpu访问主存,将一块数据传输至Cache中,然后再从Cache传输到Cpu
如何判断命中
Cache中使用标签(tags)来判断需要访问的数据在主存中的地址。
判断丢失后为何将主存中的块(block)传输至Cache
引用的局部性原理
1.时间的局部性 2.空间的局部性 3.序列的局部性
传回一块利用空间局部性,提高命中率,节省时间
计算平均访问时间
Cache使用的一些策略
1.增加容量:缺点 成本过高,且会增加Tc 2.映射函数:
一.直接映射:
设j为主存中的块数,C为Cache中的行数,则主存中每块对应在Cache中的行数i=j mod C (Cache中每行存一块)
例:假设Cache中有四行,每行有8个字,主存中有128个字,因此需要7位来表示地址。 每块中有8个字,所以用3位来表示字(即字长),Cache中有4行,因此中间用2位来表示占
据的是哪一行,M=16(主存中的块数) C=4(Cache中的行数),所以n=4-2=2,2位表示Tag即标签位。
优点:简单,匹配快,查找快 缺点:抖动
比如如果一个程序每次都轮流查找映射于同一行的两个块,会大大影响命中率 所以这种映射方法适用于大容量的Cache 二.关联映射
规则:每个块可以被载入任意一行
例:假设Cache有4行,每行有8个字,主存包含128个字, 那么主存用7位地址,3位为字长,剩下四位作标签。
优点:防止抖动,
缺点:复杂而且浪费资源。 三.组关联映射(折衷)
策略:Cache被分为多个组,假设j为主存中的块数,S是Cache中的组数,那么相应的块对应在
Cache中的组号s=S mod j
K路组:k=C/S,每组的行数 组内采用关联映射
例:假设Cache中有4行且被分成2组,每行8个字,主存中含有128个字节,所以7位地址。 三位表示字长,因为组数=2,中间一位用来表示位于哪一组,最高3位用作Tag. 即M=16,S=2 所以n=4-1=3.
比较:
K=1
直接映射
K=C
关联映射
关联度(Correlation 每块对应寄存器中行的可能数): 直接映射1
3.替换机制
LRU Least Recently Used 最近最少用 FIFO First In First Out 先进先出 LFU Least Frequently Used 最不常用
关联映射C 组关联映射K
相关度越小,命中率越低,check时间更少,Tag长度越短
4.写操作策略
一.写入
为保证Cache与主存的一致性,往Cache写入时同时也要往主存写入 但降低写入速度,容易产生瓶颈
二.写回
在Cache中增加一位(脏位)表示是否被修改过,若“脏”,则替换整个块时前将其写回 减少写入操作,但会有不必要的麻烦(如输出时会取得主存中未修改的数据) 策略:输出时候强制修改主存
5.行的大小即每个块的容量
行变大,提高命中率。
行再变大,也可能降低命中率(原因: Cache总大小不变时,行变大,减少了行数,使得替换频繁) 6.Cache的个数
单个:方便集成到处理器,简化电路设计 层次式:L1 L2
设计复杂:要保证3个之间数据的一致性 L2 可以使用另外一条路,也可以放在处理器上
注意:L1与L2的关系可以类比于单个Cache时候Cache与主存的关系
7.数据与指令是否分开
例题分析:
关于Cache的映射关系
1.假设Cache有4K字,每行32字。对十六进制主存地址:111111、666666、BBBBBB,请 用十六进制格式表示如下信息: