CPU缓存命中时间

时间:2016-07-29 01:02:38

标签: memory-management hardware cpu-cache

我正在阅读西班牙语版本的“计算机组织和设计硬件/软件界面”,我遇到了一个我无法解决的练习。练习是关于内存层次结构,特别是缓存。

练习说:

  

如果访问N路关联高速缓存中的标签需要2.5 ns,访问数据需要4 ns,命中/失败比较需要1 ns,成功时返回处理器选择的数据需要1 ns。

     
      
  1. 缓存命中的关键路径是由确定是否有成功或时间数据访问的时间给出的?

  2.   
  3. 缓存的命中延迟是多少? (成功案例)。

  4.   
  5. 如果对标签和数据矩阵的访问时间都是3 ns,那么缓存成功的延迟是多少?

  6.   

我会尝试用我所知道的关于回忆的问题回答这些问题。

要访问保存在缓存中的数据,我要做的第一件事是使用某个地址的索引字段查找该行。一旦内存系统找到了该行,我需要将我的地址的标签字段与缓存的标签字段进行比较。如果它们匹配,那么它就是命中,我必须返回数据,并在由地址的偏移字段确定的行中替换一定数量的数据,然后将数据返回到处理器。

这意味着缓存需要8.5 ns。但我一直在考虑另一种方式,chaches可以做到:如果我得到所需的行(2.5 ns),那么现在我可以访问de数据,并行,我可以评估iquality的条件。所以,时间将是4.5 ns。因此,其中一个是第二个问题的结果。以下哪项结果是正确的?

对于第一个问题,关键路径将是花费更多时间的操作;如果缓存需要4.5来获取数据,那么关键路径将访问缓存中的标签 - 比较 - 返回数据。否则,这将是整个过程。

对于最后一个问题,如果关键路径是整个过程,则需要8ns。否则,它将需要5ns(标签访问缓存,比较,返回数据)。

这是真的吗?那么全关联缓存?和直接映射缓存呢?

问题在于我不知道缓存首先执行什么操作以及下一步或并行操作。

1 个答案:

答案 0 :(得分:1)

如果文本没有说明它是单处理器系统/多处理器系统中的缓存还是缓存并行执行的操作,则可以安全地假设它在缓存命中时执行整个过程。本能地说,我认为访问数据并且并行比较命中/未命中是没有意义的,如果它是一个未命中怎么办?然后数据访问是不必要的,并且您增加了缓存未命中的延迟。

因此,在缓存命中的情况下,您会得到以下序列:

  1. 访问标签(2.5ns)
  2. 比较命中/未命中(1ns)
  3. 访问数据(4ns)
  4. 将数据返回给请求它的程序(1ns)
  5. 总计: 2.5 + 1 + 4 +1 = 8.5ns

    通过这个序列,我们得到(正如您现在已经)以下问题的答案:

    1. 答案:缓存命中的关键路径是访问数据并将其返回4 + 1 = 5(ns),相比之下,确定缓存查找是否成功: 2.5 + 1 = 3.5(ns)

    2. 答案: 8.5ns

    3. 答案: 3 + 1 + 3 + 1 = 8ns

    4.   

      如果我得到所需的行(2.5 ns),那么现在我可以访问de数据,和   与此同时,我可以评估不平等的状况。所以,时间   将是4.5 ns

      我不知道你怎么得到4.5ns?如果您假设数据的访问和命中/失败比较是并行执行,那么在高速缓存命中的情况下,您得到:2.5 + 4 + 1 = 7ns。在缓存未命中的情况下你也会得到7ns,相比之下如果你知道它是否是缓存未命中你没有访问内存,那么你会得到2.5 + 1 = 3.5ns的未命中延迟,这使得它非常无效尝试将命中/未命中比较与数据访问并行化。

      如果您认为标签对访问/未命中比较的访问与数据访问并行完成,则获得:4 + 1 = 5ns,以防高速缓存命中。

      显然,您无法同时获取数据并提取数据,但如果您认为可以访问标签,请执行比较返回数据在访问数据的同时,您得到:2.5 + 1 + 1 = 4.5ns。

        

      完全关联缓存?和直接映射缓存呢?

      N路关联缓存(如问题所述) 是一个完全关联的缓存。这意味着缓存块可以放在缓存中的任何位置。因此它非常灵活,但它也意味着当我们想要在缓存中查找内存地址时,我们需要将标记与缓存中的每个块进行比较,以了解我们正在寻找的内存地址是否被缓存。因此,我们的查找时间会变慢。

      在直接映射缓存中,每个缓存块只能进入缓存中的一个位置。通过查看内存地址并计算地址的索引部分来计算该点。因此,直接映射的缓存可以提供非常快速的查找,但不是非常灵活。根据缓存大小,可以经常更换缓存块。

      问题中的术语有点令人困惑,“label”在谈到cpu-caches时通常称为“tag”。