我看到平均内存访问时间经常被引用为:
AMAT = (L1 cache hit time + L1 miss rate*(L2 hit time + L2 miss rate*(memory access time)))
有没有理由为什么命中时间不会乘以命中率?只有未命中时间乘以未命中率?
答案 0 :(得分:3)
这是因为缓存是否被激活,这次查找缓存中的数据已经花费了。
AMAT = HitTime *(1-MissRate)+ MissRate *(HitTime + MissPenalty)
= HitTime + MissRate * MissPenalty
答案 1 :(得分:2)
作业?
在大多数缓存中,所有请求都转到L1缓存,然后,只有在确定为未命中后,才转到L2。等等。
或者:
100次访问
L1命中所花费的时间= L1缓存命中时间* L1缓存命中率
L1未命中所花费的时间=内存= L1缓存未命中率*(L1缓存命中时间+内存时间)
Total time = Thit * Phit*100 + Pmuss*100 * (Thit + Tmiss)
= Thit * (1-Pmiss)*100 + Pmiss*100 (Thit+Tmiss)
= Thit * ( 1-Pmiss+Pmiss ) * 100 + Pmiss*100*Tmiss
= 100* (Thit + Pmiss*Tmiss)
等等,如果你有一个L2。
即。他们取消了。
现在,有一些缓存系统,或者至少已经存在,其中访问同时发送到缓存和内存。在这样的系统中
Tavg = Phit*Thit + Pmiss*Tmiss.
但这些并不常见。他们倾向于浪费电力,因为你已经开始了你可能不需要的L2或主存储器访问。
我将前者称为外观缓存,后者称为后备缓存。
(我已经了解到我的一些同事称之为后一种情况,其中同时向缓存和内存发送访问,“推测缓存未能访问内存”。这不是一种不合理的用法术语“推测”,但也可以与例如由具有分支预测的机器产生的“推测性高速缓存未命中”混淆。考虑两种情况:(1)没有分支预测,没有推测执行的机器。机器,指令,内存引用,不是推测性的,所以我们只是推测是将这种访问只发送到缓存还是内存。(2)具有分支预测或其他形式的推测执行的机器。这样的机器,实际的内存操作是推测性的。这两者可以结合起来:一个我们还不知道实际上要执行的推测指令可以产生一个内存访问,可能会也可能不会被推测性地发送到内存之前被确定为缓存未命中。)