【问题标题】:# of sets in direct mapped cache# 直接映射缓存中的集合
【发布时间】:2011-11-23 01:44:33
【问题描述】:

如果我有 9 个地址位,那么直接映射缓存中有多少组? 如果我有 10 个地址位,那么直接映射缓存中有多少组?

这个问题有通用公式吗?

【问题讨论】:

    标签: caching


    【解决方案1】:

    对于直接映射,每个地址只映射到缓存中的一个位置,因此直接映射缓存中的集合数就是缓存的大小。

    标签将有 0 位,并且您没有提供足够的信息来确定索引或位移位。

    假设您使用的是字寻址,并且您的意思是索引 + 标记有 9 位或 10 位:

    9 位 -> 2^9 组

    10 位 -> 2^10 组

    【讨论】:

    • 好的,如何分离标签、索引和字节偏移?
    • 单词有多大,缓存有多大?
    • 我认为这是我遇到的问题,没有指定。
    • 内存有多大?如果内存大于 1024 个字,您可能可以假设缓存中有 1024 个字,因此有 1024 个集合。
    • 缓存的 1024 个字并不大,因此听起来差不多——如果字是 32 位的话,那只有 4KB
    【解决方案2】:

    好的,对于 (a),首先为自己画 8 列——这些将是你在缓存中的集合。

    对于每个地址,检查地址(仅高位 - 忽略最低两位)是否位于由位 2-4 编号的列的底部。如果该列中没有写入任何内容,或者 2-10 位不匹配,则它是未命中的。如果位 2-10 与您当前在该列底部写入的内容相匹配 - 这是一个成功,因为您在缓存中有该地址。无论是命中还是未命中,都将列中的当前值划掉,并在此处写入新地址。

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      在直接映射的情况下,块数将等于 1。

      现在您可以通过(缓存大小)/(块数)获取集合数

      这里是(缓存大小)/1 = 缓存大小。

      【讨论】:

        猜你喜欢
        • 2018-06-24
        • 2018-05-24
        • 1970-01-01
        • 2014-06-04
        • 2020-04-18
        • 2012-07-09
        • 2015-07-07
        • 2012-04-11
        相关资源
        最近更新 更多