cache(高速缓冲存储器)中的数据就是主存的一个子集,CPU访问存储器时会先访问cache,如果cache没有找到需要的数据,就会去主存找,于是引入cache命中率,用来描述在cache完成存取的占比,我们希望数据都可以在cache直接找到,所以这个命中率越接近1越好。
cache的命中率:
h:cache命中率
Nc: cache完成存取的次数
Nm:主存完成存取的次数
平均访问时间:
ta:cache/主存系统的平均访问时间
tc:命中时cache的访问时间(即cache存取周期)
tm:未命中时主存的访问时间(包括访问cache未命中的时间和未命中后访问主存的时间,即主存存取周期)
访问效率:
e = t c t a = t c h t c + ( 1 − h ) t m = ( 上 下 同 除 t c ) 1 h + ( 1 − h ) r = 1 r + ( 1 − r ) h e= \frac{t_c}{t_a}=\frac{t_c}{ht_c+(1-h)t_m}=(上下同除{t_c})\frac{1}{h+(1-h)r}=\frac{1}{r+(1-r)h} e=tatc=htc+(1−h)tmtc=(上下同除tc)h+(1−h)r1=r+(1−r)h1
r:主存慢于cache的倍率,
r
=
t
m
t
c
.
\ r=\frac{t_m}{t_c} .
r=tctm.
访问效率e:cache访问时间与平均访问时间的比值。从表达式中可以看出,
r
=
t
m
t
c
.
\ r=\frac{t_m}{t_c} .
r=tctm.且
t
m
>
t
c
.
{t_m}>{t_c} .
tm>tc.所以
r
>
1
r>1
r>1,
(
1
−
r
)
<
0
(1-r)<0
(1−r)<0,所以命中率h越高,
r
+
(
1
−
r
)
h
r+(1-r)h
r+(1−r)h越小,访问效率越高
例题:
假设CPU执行某段程序时,cache完成存取的次数1900次,主存完成存取的次数100次。已知:Cache的存取周期为50ns,主存的存取周期为250ns。求命中率,Cache-主存系统的平均访问时间和效率。
h
=
N
c
N
c
+
N
m
=
1900
1900
+
100
=
1
r
+
(
1
−
r
)
h
=
0.95
h= \frac{N_c}{N_c+N_m}=\frac{1900}{1900+100}=\frac{1}{r+(1-r)h}=0.95
h=Nc+NmNc=1900+1001900=r+(1−r)h1=0.95
t
a
=
h
t
c
+
(
1
−
h
)
t
m
=
0.95
∗
50
+
0.05
∗
250
=
60
n
s
t_a= ht_c+(1-h)t_m=0.95*50+0.05*250=60ns
ta=htc+(1−h)tm=0.95∗50+0.05∗250=60ns
e
=
t
c
t
a
=
50
60
∗
100
%
=
83.3
%
e= \frac{t_c}{t_a}= \frac{50}{60}*100\%=83.3\%
e=tatc=6050∗100%=83.3%