计算内存访问的平均时间

时间:2016-10-31 21:27:55

标签: performance caching memory cpu-architecture

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

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

  • L1缓存,0.5 ns,20%
  • L2缓存,1.8 ns,5%
  • L3缓存,4.2 ns,1.5%
  • 主存储器,70 ns,0%

在这种情况下,给定的搜索时间是指检查所请求的数据是否在当前层级上可用并将数据传输到上一级(或CPU)所花费的总时间。这与命中时间相同,对吧? 错失率是当地的。正如我所理解的那样,一个级别的未命中率需要与所有先前级别的未命中率相乘才能在该级别上正确。

让我们说如果我们有1000次内存访问,在L1中20%将会错过。因此,其中20%会进入L2,其中5%将会错过。因此从10​​00个内存访问1000 * 20%* 5%将到达那里。 现在,据我所知...如果我错了,请纠正我,上面的错失率是本地的,但他们的产品是每个相应级别的全球性错误。这意味着L2的全局未命中率为0.2 * 0,05 = 1%。

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

AMAT(平均内存访问时间)=命中时间+错失率*错失点数

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

计算完毕后我得到AMAT = 0.868421 ns

我这样做是否正确?

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

现在我已经清楚地了解到什么是全球和本地的错失率,因此我意识到我在计算中犯了一个错误。

之前,计算看起来像这样:

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 Miss penalty =主内存命中时间