In order to find avg memory access time we have the formula :
Tavg = h*Tc +(1-h)*M
where h = hit rate
(1-h) = miss rate
Tc = time to access information from cache
M = miss penalty (time to access main memory)
我最近在这个概念上解决了很多问题。有时我发现存在这种令人不安的不一致性:
Case 1: M = Tm + Tc
Case 2: M = Tm
意思是,解决方案表明' M'计算一些问题X,如案例1和案例1中所示。在上面,在某些其他问题Y中,同样的计算方法与案例2'以上。我尽力分析这些问题,以找出使计算不同的因素。没有帮助。我遇到过X& Y完全相同,只是值只是不同,但是在案例1中对X进行计算,对案例2进行Y的计算。
我不知道哪个原因导致计算不同?提前谢谢。
答案 0 :(得分:7)
差异来自计算未命中延迟的时间。如果问题表明时间是未命中惩罚,那么 应该意味着时间是缓存命中时间的补充;所以总的未命中延迟是缓存命中的延迟加上惩罚。 (很明显,你的公式和变量不采用这种方法,标记M - 这实际上是未命中的总访问时间 - 作为未命中罚分。)
可悲的是,如果问题出现“内存访问延迟”或“L2访问延迟”,则更不清楚总访问延迟是否意味着(即包括L1命中的时间)或L1未命中所需的额外时间。前者具有一些概念上的优点(例如,它可以隐藏诸如L2访问之类的细节,在数据返回发生之前开始 - 例如通过使用早期未命中检测或未命中预测或甚至L1和L2的并行标签查找)。后者可能使得解释L2大小或关联性的延迟效应更简单(例如,如果加倍大小将仅L2的访问延迟增加50%,则可以更容易理解仅通过加倍大小和从8个周期到12个周期的L2延迟。通过四倍大小比18个周期看到总延迟从10个周期[Tc = 2]增加到14个周期和20个周期。)
(另外,使用未命中罚分数可以略微简化访问时间公式 - Tavg = Tc +(1-h)Tm - 因为Tc总是花费。)
执行延迟会出现类似问题。对于标量流水线,通常认为执行一个周期的指令具有零延迟,因为在执行后续相关指令时没有延迟。但是,在考虑超标量实现时,这种延迟的使用可能会令人困惑。
答案 1 :(得分:2)
平均内存访问时间=%指令*(命中时间+指令未命中率*未命中罚分)+%数据*(命中时间+数据未命中率*未命中罚分)
答案 2 :(得分:1)
评论中提出了一个相关问题:
评论:为什么公式中没有命中率? - enitihas 5月13日18:09
公式中没有命中率的原因是每次访问是否命中或错过第一级缓存必须访问第一级,因此具有命中时间,即第一级缓存的访问延迟。
因此无论访问是否被命中/未命中,都需要在公式中包含命中时间(第一级缓存的访问延迟)以计算平均访问时间。