我正在尝试找出单级缓存的平均内存访问时间(AMAT)。为了做到这一点,必须计算未命中惩罚,因为AMAT公式需要它。
对多级缓存执行此操作需要使用下一级缓存惩罚。但对于单个级别,显然没有其他的高速缓存级别。
那么这是如何计算的呢?
公式: AMAT =命中时间+未命中率*未命中惩罚
发布于 2020-01-11 08:59:24
您有正确的公式来计算AMAT,但是您可能曲解了公式的组成部分。让我们看看如何使用这个等式,首先使用单级缓存,然后使用多级缓存。
假设您有一个单级缓存。命中时间表示从缓存中搜索和检索数据所需的时间量。未命中率表示请求的数据中没有驻留在缓存中的百分比,即您必须到主存中检索的数据的百分比。未命中惩罚是在缓存中未命中时检索数据所需的时间量。因为我们处理的是单级缓存,所以内存层次结构中唯一要考虑的其他级别是用于未命中惩罚的主内存。
Here’s a good example for single-level cache:
L1 cache has an access time of 5ns and a miss rate of 50%
Main memory has an access time of 500ns
AMAT = 5ns + 0.5 * 500ns = 255ns你总是先检查缓存,所以你总会产生5 ns的命中时间开销。因为我们的失败率是0.5,所以我们有一半的时间在L1缓存中找到我们要找的东西,剩下的一半时间必须到主存中去。您可以使用加权平均值以以下方式计算未命中惩罚:(0.5 * 0ns) + (0.5 * 500ns) = (0.5 * 500ns) = 250ns。
现在,假设您有一个多级缓存,即L1和L2缓存。命中时间现在表示在L1缓存中检索数据的时间量。未命中率表示我们在L1缓存中未命中的频率。在多级缓存中计算未命中惩罚不像以前那样简单,因为我们需要考虑从L2缓存读取数据所需的时间以及在L2缓存中未命中的频率。
Here’s a good example:
L1 cache has an access time of 5 ns and miss rate of 50%
L2 cache has an access time of 50 ns and miss rate of 20%
Main memory has an access time of 500 ns
AMAT = 5ns + 0.5 * (50ns + 0.2 * 500ns) = 80 ns同样,您总是首先检查L1缓存,因此您总是产生5 ns的命中时间开销。因为我们的失败率是0.5,所以我们在L1缓存中找到我们正在寻找的东西的时间占了一半,而在剩下的一半时间里,我们必须沿着内存层次结构(L2缓存,主存)向下。如果我们在L1缓存中找不到数据,那么我们总是接着在L2缓存中查找。因此,每次在L1缓存中未命中时,我们都会产生50 ns的命中时间开销。在数据也不在L2缓存中的情况下(这是20%的时间),我们必须访问内存访问时间为500 ns的主内存。
https://stackoverflow.com/questions/59257656
复制相似问题