23

3.5 高速缓冲存储器
​ 由于程序的转移概率不会很低,数据分布的离散性较大,所以单纯依靠并行主存系统提高主存系统的频宽是有限的。这就必须从系统结构上进行改进,即采用存储体系。

​ 通常将存储系统分为“Cache-主存”层次和“主存-辅存”层次。

3.5.1 程序访问的局部性原理
空间局部性

在最近的未来要用到的信息(指令和数据),很可能与现在正在使用的信息在存储空间上是邻近的。因为指令通常是顺序存放、 顺序执行的,数据一般也是以向量、数组等形式簇聚地存储在一起的。

时间局部性

在最近的未来要用到的信息,很可能是现在正在使用的信息;因为程序中存在循环。

​ 高速缓冲技术就是利用局部性原理,把程序中正在使用的部分数据存放在一个高速的、容量较小的Cache 中,使CPU的访存操作大多数针对Cache进行,从而提高程序的执行速度。

例:假定数组元素按行优先方式存储,对于下面的两个函数:

 

1)对于数组a的访问,哪个空间局部性更好?哪个时间局部性更好?

​ A程序的访问数组a的顺序为a[0][0], a[0][1]…, a[0][N-1];a[1][0], a[1][1]…;访问顺序与存放顺序一致,空间局部性好。

​ B程序的访问数组a的顺序为a[0][0], a[1][0]…, a[M-1][0];a[0][1], a[1][1]…;访问顺序与存放顺序不一致,每次访问都要跳过N个数组元素,即4N个字节,若主存与Cache的交换单位小于4N,则每次访问都要重装Cache,因而没有空间局部性。

​ 两个程序时间局部性都差,因为每个数组元素都只被访问1次。

2)对于指令访问来说,for循环体的空间局部性和时间局部性如何?

​ 对于for循环体,程序A和B中访问局部性相同。因为循环体内指令按序连续存放,所以空间局部性好;内部循环体指令被重复执行,因此时间局部性好。

 

3.5.2 Cache 的基本工作原理
​ Cache位于存储器层次结构的顶层,通常由SRAM构成,其基本结构如图所示。

 

Cache特点

Cache块:Cache和主存都被划分为相等的块,Cache块又称Cache行,每块由若干字节组成,块的长度称为块长(Cache行长)。

由于Cache的容量远小于主存的容量,所以Cache中的块数要远少于主存中的块数,它仅保存主存中最活跃的若干块的副本。

Cache按照某种策略,预测CPU在未来一段时间内欲访存的数据,将其装入Cache。

Cache工作流程

当CPU发出读请求时,若访存地址在Cache中命中,就将此地址转换成Cache地址,直接对Cache进行读操作,与主存无关;
若Cache不命中,则仍需访问主存,并把此字所在的块一次性地从主存调入Cache。(地址映射)
若此时Cache已满,则需根据某种替换算法,用这个块替换Cache中原来的某块信息。(替换算法)
注意:某些计算机中也采用同时访问Cache和主存的方式,若Cache命中,则主存访问终止;否则访问主存并替换Cache

​ 整个过程全部由硬件实现。值得注意的是,CPU与Cache之间的数据交换以字为单位,而Cache与主存之间的数据交换则以Cache块为单位。

Cache性能分析

命中率:CPU欲访问的信息已在Cache中的比率称为Cache的命中率。

设一个程序执行期间,Cache的总命中次数为N c N_cN 
c

 ,访问主存的总次数为N m N_mN 
m

 ,则命中率H HH为
H = N c / ( N c + N m ) H=N_c/(N_c+N_m)
H=N 
c

 /(N 
c

 +N 
m

 )

可见为提高访问效率,命中率H越接近1越好。

平均访问时间:设t c t_ct 
c

 为命中时的Cache访问时间,t m t_mt 
m

 为未命中时的访问时间,1 − H 1-H1−H表示未命中率,则Cache-主存系统的平均访问时间T a T_aT 
a

 为
T a = H t c + ( 1 − H ) t m T_a=Ht_c+(1-H)t_m

a

 =Ht 
c

 +(1−H)t 
m

 

根据Cache的读、写流程,实现Cache时需解决以下关键问题:

1)数据查找。如何快速判断数据是否在 Cache 中。
2)地址映射。主存块如何存放在 Cache 中,如何将主存地址转换为Cache 地址。
3)替换策略。Cache满后,使用何种策略对Cache块进行替换或淘汰。
4)写入策略。如何既保证主存块和Cache 块的数据一致性,又尽量提升效率。
例:假设Cache的速度是主存的5倍,且Cache的命中率为95%,则采用Cache后,存储器性能提高多少(设Cache和主存同时被访问,若Cache命中则中断访问主存)?

解:设Cache存取周期为t,主存存取周期为5t,使用Cache的平均访问时间为:
T a = 95 % × t + ( 1 − 95 % ) × 5 t = 1.2 t T_a=95\%×t+(1-95\%)×5t=1.2t

a

 =95%×t+(1−95%)×5t=1.2t

因此,采用Cache后,性能提升至5t/1.2t≈4.17倍

posted @ 2025-02-12 19:42  cor0000  阅读(13)  评论(0)    收藏  举报