【问题标题】:algorithm LRU, how many bits needed for implement this algorithm?算法 LRU,实现这个算法需要多少位?
【发布时间】:2013-11-02 11:02:04
【问题描述】:

我对算法 LRU 有一个小问题。 如果你有一个有四个块的缓存,你需要多少位来实现这个算法?

【问题讨论】:

  • 块的大小是多少?

标签: algorithm cpu-cache lru


【解决方案1】:

假设您的意思是 4 路组关联缓存:
一个“完美”的 LRU 本质上是按照使用顺序为每一行分配一个精确的索引。您也可以将其视为“年龄”。因此,4 个元素中的每一个都需要 2 位的索引(因为我们需要计算 4 个不同的年龄)以 LRU 顺序说明其位置 - 这意味着每组缓存有 2 位 * 4 路。
在 n 方式的一般情况下,您需要每行 log2(n) 位,或每组 n*log2(n) 位。

顺便说一句,有更便宜的方法可以达到几乎 LRU 的行为,例如参见Pseudo LRU 在您的情况下,整个集合只需要 3 位(或一般情况下:#ways - 1

【讨论】:

    【解决方案2】:

    每组的最小位数是上限(log2(N!)),其中 N 是路数。

    通过注意 MRU 块 (A) 可以是四个块中的任何一个,几乎 MRU 块可以是其余三个块中的任何一个 (B ∈ {0,1,2),这可以很容易地看出四向关联性,3} and B ≠ A),几乎 LRU 块只能是剩下的两个块之一(C ∈ {0,1,2,3} 和 C ≠ A 和 C ≠ B),并且只针对 LRU 块一个块可用。因此,总共可能的状态数是这些独立状态数的乘积,即 4! (或对于一般情况 N!)。

    B 位可以编码 2B 个状态,因此 B 必须大于或等于 log2(the_number_of_states)。对于 24 种四向关联性状态,需要 5 位。

    (增加位数可能会简化用于管理此信息的状态机,因此所需的最小位数可能与实际实现中使用的实际位数不匹配。)

    正如Leeor's answer 所指出的,树伪 LRU(维护单位/双向 LRU 选择的树)只需要 N-1 位。这种 pLRU 实现起来相对简单,因此即使在 4 路关联性下(仅节省了 2 位存储空间——3 位与 5 位),这种形式的 pLRU 也很有吸引力。

    (在 8 路关联性下,真正的 LRU 需要 16 位状态,而树 pLRU 只需要 7 位。显然,在更高的关联性下,真正的 LRU 变得更加昂贵,但在简化最坏情况的执行方面仍然值得时间分析,它已被选为一些完全关联 TLB 的替代策略。)

    【讨论】:

      【解决方案3】:

      在 N 路组关联高速缓存架构中,特定的内存块可以放置在高速缓存行的 N 组中的任何一组中。所以对于一个特定的缓存行,如果有N个集合可以放置一个块,那么就会有N个!可能排序的排列。

      更准确地说,有 N 个计数器(一个缓存行中的 N 个集合中的每个集合一个)。每当发生命中/未命中时,这些计数器中的值都会更改并根据约定进行设置,计数器值“0”表示使用最少的块,计数器值“N-1”表示最近使用的块。

      由于缓存行中的每个计数器都可以根据行中的集合数(N)具有大小,因此计数器值的范围从 0 到 N-1。因此每个计数器都是 LogN 位。并且一行中有 N 个集合,因此每个缓存行将具有相应的 NLogN 位。

      【讨论】:

        【解决方案4】:

        http://www.powershow.com/view/95163-NzkyO/4_4_Page_replacement_algorithms_powerpoint_ppt_presentation 有一个很好的幻灯片,讨论了各种页面替换方案。它还很好地解释了使用 mxm 矩阵的 LRU 实现。

        【讨论】:

        • 您可能应该给出一个简短的总结,而不是链接。多年后,其他试图解决问题的人可能会(通过谷歌)找到您的答案,但链接可能早就被破坏了。
        猜你喜欢
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        • 2022-11-21
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2013-01-05
        • 2020-01-15
        相关资源
        最近更新 更多