CPU 缓存命中时间

CPU cache hit time

我正在阅读 "computer organization and design the hardware/software interface" 的西班牙语版,并且 运行 进入了一个我无法解决的练习。该练习是关于内存层次结构的,特别是缓存。

练习说:

If 2.5 ns are required to access labels in an N-way associative cache, 4 ns for access data, 1 ns for hit/failure comparison and 1 ns to return the data selected by the processor in case of success.

  1. The critical path in a cache hit, is given by the time to determine whether there has been success or time data access?

  2. What is the hit latency of the cache? (successful case).

  3. What would be the latency of success in the cache if both the access time to labels and the data matrix is 3 ns?

我会尽量用我对记忆的了解来回答问题。

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

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

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

最后一个问题,如果关键路径是整个过程那么需要8ns。否则,将花费 5ns(缓存中的标签访问、比较、return 数据)。

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

问题是我不知道缓存先做什么,然后做什么或并行做什么。

如果文本没有说明它是否是单处理器中的缓存 system/multiprocessor 系统或缓存并行执行的操作,您可以放心地假设它会在缓存命中时执行整个过程.本能地,我认为访问数据并并行比较 hit/miss 没有意义,如果错过了怎么办?然后数据访问是不必要的,你增加了缓存未命中的延迟。

因此,如果缓存命中,您将获得以下序列:

  1. 访问标签(2.5ns)
  2. 比较hit/miss(1ns)
  3. 访问数据(4ns)
  4. Return 请求它的程序的数据 (1ns)

总计: 2.5 + 1 + 4 +1 = 8.5ns

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

  1. 答案:缓存命中的关键路径是访问数据,return它4+1=5(ns),与确定缓存查找是否成功相比:2.5 + 1 = 3.5 (ns)

  2. 答案:8.5ns

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

If I get the desired line (2.5 ns) then now I can access de data, and in parallel, I can evaluate the condition of iquality. So, the time will be 4.5 ns

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

如果您假设标签 的访问 hit/miss 比较是与数据访问并行进行的,您将得到: 4 + 1 = 5ns 在以下情况下缓存命中。

显然你不能在获取数据的同时return数据,但如果你想象这是可能的并且你访问标签做比较and return 数据与访问数据并行,然后你得到:2.5 + 1 + 1 = 4.5ns。

what about a fully assoctive cache?, and a direct mapping cache?

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

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

问题中的术语有点混乱,"label" 在谈到 cpu-缓存时通常被称为 "tag"。