背景:
- 命中时间直接影响到处理器的时钟频率。
- 在当今的许多计算机中,往往是
Cache的访问时间
限制了处理器的时钟频率
。
为了有效地减少Cache的命中时间,可以采用容量小、结构简单的Cache。
Cache命中访问过程中最耗时的部分:
使用容量小、结构简单的Cache的原因:
实现小容量Cache的方案:
保持Cache结构的简单性:
标识检测
和数据传送
同时进行,从而有效地减少命中时间。在采用
虚拟存储器
(OS中的虚拟内存)的计算机中,每次访存都必须进行虚实地址的转换,即将CPU发出的虚地址转换为物理地址,这一般是由存储管理部件(MMU
)完成的。
在介绍虚拟Cache之前,需要先介绍物理Cache的概念
物理Cache
一次访存过程:
根据使用物理Cache访存的过程不难看出,物理Cache的缺点是:
串行进行
,访问速度很慢。虚拟Cache
一次访存过程:
优点:
使用虚拟Cache存在的问题:
当进行进程切换
时需要清空Cache
解决该问题的一种办法:
在地址标识中增加一个进程标识符字段(PID
)这样多个进程的数据就可以混合存放于Cache
中,由PID指出Cache中的各块是属于哪个程序的。
为了减少PID的位数,PID经常是由操作系统
指定的。对于每一个进程,操作系统从循环使用的几个数字中指定一个作为其PID。
这种方法有时也需要清空Cache,这种情况仅发生在当某个PID被重用的时候,即该PID以前已被分配给了某个进程,现又把它分配给另一个进程的时候。
操作系统和用户同时对同一物理地址
访问采用两种以上不同形式虚拟地址
访问,这些地址称为同义
或别名
解决方法:
反别名法
页着色
,例如Sun公司的UNIX要求所有别名的地址最后18位都相同I/O
通常使用物理地址,所以为了与虚拟Cache打交道,需要把物理地址映像为虚拟地址。
⚠️虚拟索引+物理标识
兼顾虚拟Cache的好处与物理Cache的优点(折中)
思想:
局限性:
实现大容量Cache并使得索引位较少:
说明:
命中时间
,但是可以提高访问Cache的带宽
背景:
- 开发指令级并行性时,当要每个时钟周期流出超过4条指令时,要提供足够多条彼此互不相关的指令是很困难的。
踪迹 Cache
优点:
缺点:
为了描述方便,引入以下记号:
“+”号
:表示改进了相应指标。“-”号
:表示它使该指标变差。空格栏
:表示它对该指标无影响。复杂性
:0表示最容易,3表示最优化技术 | 不命中率 | 不命中开销 | 命中时间 | 硬件复杂度 | 说明 |
---|---|---|---|---|---|
增加块大小 | + | - | 0 | 实现容易;Pentium 4 的第二级Cache采用了128字节的块 | |
增加Cache容量 | + | 1 | 被广泛采用,特别是第二级Cache | ||
提高相联度 | + | - | 1 | 被广泛采用 | |
伪相联Cache | + | 2 | MIPS R10000的第二级Cache采用 | ||
牺牲Cache | + | 2 | AMD Athlon采用了8个项的Victim Cache | ||
硬件预取指令和数据 | + | 2~3 | 许多机器预取指令,UltraSPARC Ⅲ预取数据 | ||
编译器控制的预取 | + | 3 | 需同时采用非阻塞Cache;有几种微处理器提供了对这种预取的支持 | ||
用编译技术减少Cache不命中次数 | + | 0 | 向软件提出了新要求;有些机器提供了编译器选项 |
优化技术 | 不命中率 | 不命中开销 | 命中时间 | 硬件复杂度 | 说明 |
---|---|---|---|---|---|
使得读不命中优先于写 | + | - | 1 | 在单处理机上实现容易,被广泛采用 | |
写缓冲合并 | + | 1 | 与写直达合用,广泛应用,例如21164,UltraSPARC Ⅲ | ||
两级Cache | + | 2 | 硬件代价大;两级Cache的块大小不同时实现困难;被广泛采用 | ||
请求字处理技术 | + | 2 | 被广泛采用 | ||
非阻塞Cache | + | 3 | 在支持乱序执行的CPU中使用 |
优化技术 | 不命中率 | 不命中开销 | 命中时间 | 硬件复杂度 | 说明 |
---|---|---|---|---|---|
容量小且结构简单的Cache | + | 0 | 实现容易,被广泛采用 | ||
流水化Cache访问 | + | 1 | 被广泛采用 | ||
虚拟Cache技术 | + | 2 | 对于小容量Cache来说实现容易,已被Alpha 21164和UltraSPARC Ⅲ采用 | ||
踪迹Cache | + | 3 | Pentium 4 采用 |