算法LRU,实现这个算法需要多少比特?

时间:2013-11-02 11:02:05

标签: algorithm cpu-cache lru

我对算法LRU有一点疑问。 如果您有一个包含四个块的缓存,那么您需要多少位才能实现此算法?

4 个答案:

答案 0 :(得分:6)

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

顺便说一下,有更便宜的方法来达到几乎LRU的行为,例如Pseudo LRU在您的情况下,整个集合只需要3位(或者通常为#ways - 1

答案 1 :(得分:1)

每个设置位的最小数量是上限(log2(N!)),其中N是路数。

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

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

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

Leeor's answer所述,树伪LRU(维持单比特/双向LRU选择树)仅需要N-1比特。这个pLRU实现起来相对简单,因此即使在4路相关性(其中只保存两位存储--3位与5位),这种形式的pLRU也很有吸引力。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

更确切地说,有N个计数器(在高速缓存行中的N个集合中每个集合一个)。每当发生命中/未命中时,这些计数器中的值都会发生变化,并根据约定来设置,即计数器值' 0' 0将代表最少使用的块和计数器值' N-1'代表最近使用的块。

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