通过缓存访问确定缓存规格

时间:2018-12-13 03:23:09

标签: algorithm caching

我正在尝试确定以下模拟缓存文件的缓存规格:

  • 缓存大小
  • 块大小/行大小
  • 关联性
  • 替换政策(直接映射/ LRU /随机)

“模拟的缓存文件”的意思是给我目标文件(=缓存)。我与这些目标文件的唯一交互是通过访问请求。我得到了解决方案。

功能:int access(unsigned long address)

返回: 0(小姐)/ 1(命中)

我已经找到了一种通过访问来确定块大小的方法。 知道块大小后,我不确定如何继续进行。

Cache size = block size * #blocks = block size * associativity * sets

associativity = blocks/set

要确定关联性,我将尝试通过两个不同的地址两次访问相同的块,并检查第一个访问标签何时被覆盖。我认为这将不起作用,因为每个地址在缓存中都有唯一的位置。

地址将采用以下格式:tag + set + word(无符号长= 32位)

已知块大小=>也为字索引保留的位数。

从解决方案退步:

  • Block size = 8 bytes
  • Word = 1 byte

---(以下数据来自解决方案)---

  • Cache Size = 4096 bytes
  • n-way: 2
  • Replacement: LRU

2-way => 2 blocks/set => 2*8 bytes/set = 16 bytes/set 16 bytes/set => 4096 bytes/cache / 16 bytes/set = 256 sets/cache 这给了我有关可以进一步帮助我的地址的信息,即: 32-bit address = (tag + 8-bit setnumber + 3-bit wordindex) => 21-bit tag

是否有一种方法可以通过缓存访问来获取此地址格式,然后使用该地址格式作为获取更多信息的方法?

找到这种地址格式后,由于21位标记,我感到困惑。每组2个块仅需要1位即可定义应访问两个块中的哪个。如果标签大于1会怎样?这是通过不同地址访问相同缓存块的方法吗?还是可以通过一个模数函数(对于上面的示例来说是%2)来使标签适合n方向的关联性?

我应该以什么方式访问缓存以获取所需的缓存信息?

至于更换政策,我不知道如何通过访问或从解决方案向后看如何看到这一点。

0 个答案:

没有答案