缓存 - 计算给定地址列表的命中和未命中数

时间:2014-08-25 09:08:39

标签: caching computer-architecture lru

我目前正在修改计算机体系结构考试,并且已经陷入与缓存相关的问题。我有一个示例解决方案,但我不明白它是如何派生的。

这是一个示例问题:

  

Q1。如果后续列表中的,则计算命中和未命中的数量   十六进制地址应用于缓存,具有以下内容   组织。

     

(i)128字节单向缓存,每行16字节(直接   映射)

     

(ii)128字节2路组关联缓存,每个16字节   行

     

(iii)128字节4路组关联高速缓存,每行16字节

     

(iv)128字节8路关联高速缓存,每行16字节(完全   关联)

0000 => 0004 => 000c => 2200 => 00d0 => 00e0 => 1130 => 0028 =>
113c => 2204 => 0010 => 0020 => 0004 => 0040 => 2208 => 0008 =>
00a0 => 0004 => 1104 => 0028 => 000c => 0084 => 000c => 3390 =>
00b0 => 1100 => 0028 => 0064 => 0070 => 00d0 => 0008 => 3394 =>
     

假设   地址的前4位用作中的偏移量   缓存行,下一个log2(N)位选择设置和剩余   位形成标签。此外,假设所有缓存行都是   最初无效并且使用LRU替换策略。

     

Q2。   确定强制,容量和冲突未命中数   Q1中的每个缓存组织。

这是样本答案: (i) and (ii) (iii) and (iv)

我想知道是否有人可以向我解释这些列表中的前几个元素是如何派生出来的?我可以为这些中的每一个以及地址,集合和标记的位数找出L,K和N但是之后我不知道如何继续。非常感谢。

编辑 - 这就是我被困的地方

i):
L=16, K=1, N=8

address = 4 bits, set = 3 bits, tag = 9 bits.

0000 = miss (I know this is a miss because it is the first one)
0004 = ???? How do I tell whether this is a hit or miss? What is the "algorithm" that I need to use?

非常感谢。

1 个答案:

答案 0 :(得分:0)

  

0004 = ????我怎么知道这是打击还是错过?什么是"算法"?

因为紧接在此之前的存储器请求将整行拉入。这里的一行是16字节,因此包含从0x0000到0x000f的地址。

我认为如果您打开excel表并执行以下操作可能会有所帮助。 1.将地址从十六进制转换为二进制,更容易推理。 2.将所有地址写入一列 3.创建相邻列并提取每个地址的偏移量,设置和标记。 4.仔细遵循算法并记下8套内容的时间表。

我已经完成了第一个问题(直接映射缓存)的前几个值。尝试自己休息,如果遇到更多麻烦,请回来。

+------+---------------------+--------+-----+-----------+--------------------------------------------+
| hex  |       binary        | offset | set |    tag    |                   status                   |
+------+---------------------+--------+-----+-----------+--------------------------------------------+
| 0000 | 0000 0000 0000 0000 |   0000 | 000 | 000000000 | miss                                        |
| 0004 | 0000 0000 0000 0004 |   0004 | 000 | 000000000 | hit                                        |
| 000c | 0000 0000 0000 1100 |   1100 | 000 | 000000000 | hit                                        |
| 2200 | 0010 0010 0000 0000 |   0000 | 000 | 001000100 | miss (this also replaces the previous tag) |
| 00d0 | 0000 0000 1101 0000 |   0000 | 101 | 000000001 | miss                                       |
| 00e0 | 0000 0000 1110 0000 |   0000 | 110 | 000000001 | miss                                       |
| 1130 | 0001 0001 0011 0000 |   0000 | 011 | 000100010 | miss                                       |
| 0028 | 0000 0000 0010 1000 |   1000 | 010 | 000000000 | miss                                       |
+------+---------------------+--------+-----+-----------+--------------------------------------------+

处理这些特定地址后的结构应与此类似。

+-----+-----------+
| set |    tag    |
+-----+-----------+
| 000 | 001000100 |
| 001 | xxxxxxxxx |
| 010 | 000000000 |
| 011 | 000100010 |
| 100 | xxxxxxxxx |
| 101 | 000000001 |
| 110 | 000000001 |
| 111 | xxxxxxxxx |
+-----+-----------+

您应该在处理完每个地址后制作此图表,以了解发生的情况。