- cache
平均访存时间=命中时间+不命中率不命中开销
CPU时间=(CPU执行周期数+存储器停顿周期数)×时钟周期时间
= (CPU执行周期数+访存次数不命中率不命中开销)×时钟周期时间
= IC(CPI+访存次数/指令数不命中率不命中开销)×时钟周期时间 - 性能改进
- 降低不命中率
- 减少不命中开销
- 减少Cache命中时间
一.降低不命中率
不命中类型
- 强制不命中 第一次访问一个块必须从内存加载到cache
- 容量不命中 程序执行时所需的块不能全部调入Cache中,则当某些块被替换后,若又重新被访问
- 冲突不命中 太多的块映像到同一组(块)中,则会出现该组中某个块被别的块替换(即使别的组或块有空闲位置),然后又被重新访问的情况
简要分析:
强制不命中不受cache容量和相联度影响
相联度越高 冲突不命中就越少
cache容量越大 容量不命中越少
方法一 增加块大小
问题一:为什么增加块大小可以降低强制不命中?
利用空间局部性:一次缺失会从内存中搬入整个块。如果块更大,那么首次访问一个地址时会把相邻地址的数据也拉进来,后续对这些相邻数据的访问就会命中,原本会是强制缺失的访问被“吸收”了
问题二:为什么不命中率先下降后上升?
块太大,增大不命中代价
减少块的数量,增加冲突不命中
方法二 增加Cache容量
缺点:增加成本 增加命中时间(地址增大)
方法三 提高相联度
缺点:增加命中时间(在同一索引下的查找时间增加)
采用相联度超过8的方案的实际意义不大。
2:1Cache经验规则:容量为N的直接映像Cache的不命中率和容量为N/2的两路组相联Cache的不命中率差不多相同
缺点:增加命中时间
方法四 伪相联cache
| - | 优点 | 缺点 |
|---|---|---|
| 直接映像 | 命中时间小 | 不命中率 |
| ---- | ---- | ---- |
| 组相联 | 不命中率低 | 命中时间大 |
工作原理:一次命中--直接映射
一次未命中--二路组相联
优点:命中时间小 不命中率低
缺点:多种命中时间 -- 快速命中与慢速命中
要保证绝大多数命中都是快速命中
方法五 硬件预取
指令和数据都可以预取-->cache/外缓冲区
优点:减少停顿次数(不命中率) 指令执行和读取数据同时进行
注意 预取应利用存储器的空闲带宽 不能影响对正常不命中的处理 否则可能会降低性能
方法六 编译器控制的预取
主要思想:在编译时加入预取指令,在数据被用到之前发出预取请求
预取的两种类型:
寄存器预取
cache预取
- 非阻塞cache 预取数据的同时 处理器继续执行
- 循环是预取优化的主要对象
- 每次预取需要花费一条指令的开销
保证这种开销不超过预取带来的收益
方法七 编译器优化
基本思想:通过对软件进行优化来降低不命中率
代码重排和数据重组
-降低冲突不命中
- 编译优化技术
数组合并--将本来相互独立的多个数组合并成为一个复合数组 以提高访问它们的局部性
内外循环交换--提高访问的局部性
循环融合--将若干个独立的循环融合为单个的循环。这些循环访问同样的数组,对相同的数据作不同的运算。这样能使得读入Cache的数据在被替换出去之前,能得到反复的使用
分块--把对数组的整行或整列访问改为按块进行,尽量集中访问,减少替换,提高访问的局部性
方法八 牺牲cache
基本思想:Cache--牺牲cache(全相联 小容量)--下一级存储器
存放被替换出去的块 以备重用
优点:减小冲突不命中率
二.降低不命中开销
方法一 两级cache
L1 小而块
L2 容量大
平均访存时间=命中时间L1+局部不命中率L1×(命中时间L2+局部不命中率L2×不命中开销L2)
局部不命中率=该级Cache的不命中次数/到达该级Cache的访问次数
全局不命中率=该级Cache的不命中次数/CPU发出的访存的总次数
每条指令的平均访存停顿时间=每条指令的全局平均不命中次数L1×命中时间L2+每条指令的全局平均不命中次数L2×不命中开销L2
第二级cache性质:
两级cache全局不命中率=第二级cache不命中率
方法二 让读不命中优先于写
读缺失直接造成堵塞 写缺失具有缓冲性
步骤
先处理必要的写不命中(读后写导致读入的内容不是最新的)
在正确的情况下先处理读不命中 降低不命中开销
方法三 写缓冲合并
目的 提高写缓冲效率
写直达cache -> 写缓冲不满 写入写缓冲
写缓冲已满 比较要写的地址和写缓冲的地址 匹配-合并 不匹配-等待
方法四 请求字技术
请求字 从下一级存储器调入cache的块中 只有一个字是立即需要的
尽早重启动 收到请求字cpu启动
请求字优先 先传输请求字
方法五 非阻塞cache
三.降低命中时间
方法一 使用小容量、结构简单的Cache
硬件越简单 速度越快
cache足够小 可以在cpu一起放在同一块芯片上
方法二 虚拟cache
浙公网安备 33010602011771号