有了有关直接映射缓存的给定信息(包括跟踪和命中/未命中状态),如何找到标记位和偏移位的数量?

问题描述 投票:0回答:1

我正在解决直接映射缓存上的问题,我需要帮助来查找偏移位和标记位的数量。我不知道如何计算标签和偏移位的数量。解决方案的关键是标记位为 5,偏移位为 3,但没有显示任何工作。问题如下:

问题4:缓存

对于这个问题中的所有问题,假设我们正在使用 具有字节寻址存储器和直接映射的 12 位机器 缓存。缓存最多可容纳 16 个缓存行。

a)设置的索引需要多少位?

A:我知道这部分只是 log(# of cachelines)=log(16)=4

b 部分)以下 9 次内存访问序列生成 显示命中/未命中。一些未命中/命中条目故意留空。 缓存最初是空的。请注意,地址写在 为了可读性,每 4 位之间添加了空格的二进制文件。这些 不一定是标签/索引/偏移边界。

# Address        Hit/Miss
1 1101 1111 0000 Miss
2 0000 1101 1111 Miss
3 1101 0111 0101 Miss
4 0000 1101 1100 Hit
5 1101 1111 0011 Miss
6 1111 0111 0010 Miss
7 1101 1111 0000 Miss
8 0000 1101 1101 Hit
9 1111 0111 0100 Miss

标签位数是多少?答:

偏移位数是多少?答:

caching cpu-architecture cpu-cache
1个回答
0
投票

它们为您提供跟踪和命中/未命中状态,以及缓存最初是冷的事实。 因此,第一次命中必须与之前的三个未命中之一具有相同的索引和标签。

一些偏移位也可能是相同的;我们无法确定这一点,但我们可以查看其他命中,以找到地址不同的最高位位置,同时仍然命中缓存。 这是偏移宽度的下限。 这里有两个命中,每个命中都具有与访问 #2 相同的前导 10 位,因此绝对是相同的索引+标签。 偏移量至少是低 2 位,但可能更多。

我们还可以寻找地址相同的最低位位置,但这是一个缺失。 这是偏移位的“上界”。 但我们需要小心,这不是冲突遗漏,具有相同索引的另一个访问没有驱逐我们正在查看的行。 因此,当您提出偏移量的候选值时,请遍历跟踪并检查匹配索引以及匹配索引+标签,以检查该候选值是否解释了所有命中和未命中。 最好的方法可能是用一个集合编号来注释每个集合,这样您就可以分别查看为该候选索引位置索引不同集合(缓存行)的访问。

有些痕迹可能不明确(例如,如果它们有很多相似的地址位),但希望考试或家庭作业能够在他们要求的情况下有一个独特的解决方案。

这似乎需要大量工作,但我没有看到更简单的方法来解决这个问题。

在现实生活中,如果您有一台未知的机器并试图确定其缓存几何结构,您将编写一个以简单模式开始访问的程序,例如重复加载同一行,并以不断增加的功率交替加载2 距离,当您产生冲突时即可发现。 而不是尝试从没有易于查看模式的随机地址轨迹中推断出它。

© www.soinside.com 2019 - 2024. All rights reserved.