【问题标题】:Calculating average time for a memory access计算内存访问的平均时间
【发布时间】:2017-03-14 01:10:55
【问题描述】:

我发现很难理解本地和全局未命中率之间的差异以及如何计算内存访问的平均时间,我只想举一个我试图解决的问题的例子。如果有人能告诉我我是否走在正确的轨道上,或者我错了我错过了什么,我将不胜感激。

考虑以下多级缓存层次结构及其查找时间和未命中率:

  • 一级缓存,0.5 ns,20%
  • 二级缓存,1.8 ns,5%
  • 三级缓存,4.2 ns,1.5%
  • 主存储器,70 ns,0%

在这种情况下,给定的查找时间是指检查请求的数据在当前层次结构中是否可用以及将数据传输到上一层(或 CPU)所花费的总时间。这和命中时间一样,对吧? 给出的未命中率是当地的。而且据我了解,一个级别的未命中率需要乘以所有先前级别的未命中率,才能正确处理该级别。

假设我们有 1000 次内存访问,在 L1 中有 20% 的访问会丢失。所以他们中的 20% 会去 L2,其中 5% 会错过。因此,从 1000 次内存访问中,1000 * 20% * 5% 将到达那里。 现在,据我所知......如果我错了,请纠正我,以上未命中率是本地的,但它们的乘积是每个相应级别的全局未命中率。这意味着 L2 的全局未命中率为 0,2*0,05 = 1%。

现在,我可能对这个计算非常错误,但这是我的想法:

AMAT (Average Memory Access Time) = Hit time + Miss rate * Miss penalty

AMAT = 0.5 + 0.2 * (1.8 + 0.2 * 0.05 * (4.2 + 0.2 * 0.05 * 0.015 * 70))

计算后我得到 AMAT = 0.868421 ns

我这样做对吗?

【问题讨论】:

  • 也许可以定义AMAT...
  • @MarkSetchell 平均内存访问时间 (AMAT) 是一种衡量内存层次结构配置性能的方法。它考虑到层次结构不同级别的未命中对整体系统性能的影响不同。
  • 我确定您误解了缓存未命中率。 1.5% 的 L3 缓存未命中意味着 1.5% 的所有内存访问未命中。
  • @gnasher729 感谢您的回复。你确定你的建议适用于这个例子,其中小姐率是当地的吗?

标签: performance memory computer-science cpu-architecture cpu-cache


【解决方案1】:

现在我已经清楚了全局和本地未命中率到底是多少,因此我意识到我的计算有误。

以前,计算是这样的:

AMAT = 0.5 + 0.2 * (1.8 + 0.2 * 0.05 * (4.2 + 0.2 * 0.05 * 0.015 * 70)) = 0.868421 ns

这意味着,例如 L1 的本地未命中率会影响层级中每一个更远的未命中惩罚的贡献,太多次......当它已经在前一阶段考虑时。

正确的解决方案应该是:

AMAT = 0.5 + 0.2 * (1.8 + 0.05 * (4.2 + 0.015 * 70)) = 0.9125 ns

所以,我们可以递归地定义:

AMAT = L1 命中时间 + L1 未命中率 * L1 未命中惩罚

L1 未命中惩罚 = L2 命中时间 + L2 未命中率 * L2 未命中惩罚

L2 未命中惩罚 = L3 命中时间 + L3 未命中率 * L3 未命中惩罚

L3 未命中惩罚 = 主内存命中时间

【讨论】:

  • 不错的答案,添加“递归”公式可以更容易理解这类事情!
  • 有时系统会指定 L3 命中时间 = 任何最终导致 L2 未命中/L3 命中的内存访问的 时间。所以 4.2 ns 不会是检查 L1 然后 L2 之上的惩罚,而是总惩罚。在这种情况下,它已经包含了 L1 时间,因此为避免重复计算 L1 时间,您需要 L1hit_time * L1hitrate + L1 miss average * (1 - L1hitrate)
猜你喜欢
  • 2014-05-09
  • 2017-03-01
  • 1970-01-01
  • 2017-12-11
  • 2015-05-25
  • 2021-03-17
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多