Cache的替换算法及其特点

合集下载

cache的基本原理(一)

cache的基本原理(一)

cache的基本原理(一)Cache的基本原理什么是CacheCache(缓存)是计算机系统中一种提高数据访问效率的技术。

它通过将经常访问的数据存储在速度更快的存储介质中,以便快速获取,从而加快系统的响应速度。

Cache的作用1.提高数据访问速度:Cache能够将数据存储在速度更快的存储介质中,以便快速获取。

相比于从较慢的主存(RAM)中读取数据,从Cache中读取数据的速度更快,从而提高了系统的响应速度。

2.减轻系统负载:Cache能够减轻对主存的访问压力,从而减轻了整个系统的负载。

当数据被缓存到Cache中时,对该数据的访问将不再需要访问主存,从而减少了主存的读写操作,提高了整个系统的效率。

Cache的基本原理Cache的基本原理可以概括为以下几个步骤:1.检查数据是否在Cache中:当系统需要访问某个数据时,首先会检查该数据是否已经存储在Cache中。

如果在Cache中找到了需求的数据,则无需从主存中读取,直接从Cache中获取数据。

2.数据未在Cache中:如果需要的数据不在Cache中,则需要从主存中读取。

同时,系统会将该数据从主存读取到Cache中,以便下次快速访问。

通常会采用一定的缓存算法(如LRU)来选择适合替换的数据,确保Cache的空间被合理利用。

3.数据写回主存:当Cache中的数据被修改后,系统会在合适的时机将修改后的数据写回主存。

这样可以保证数据的一致性,并且避免数据的丢失。

Cache的命中率Cache的命中率是评估Cache性能的重要指标。

它表示在访问数据时,该数据已经在Cache中的概率。

命中率越高,越能够提高系统的响应速度。

Cache的命中率可以通过以下公式计算:命中率 = 命中次数 / 总访问次数提高Cache命中率的方法为了提高Cache的命中率,可以采取以下方法:•提高Cache容量:增加Cache的容量可以存储更多的数据,从而减少Cache缺失的概率,提高命中率。

计算机原理4.9Cache地址映射与变换方法

计算机原理4.9Cache地址映射与变换方法

计算机原理4.9Cache地址映射与变换⽅法1、主存与cache地址映射概述主存数据如何迁⾄Cache才能实现快速查找?常见的三种映射⽅式:全相联直接相联组相联2、全相联映射的⼯作原理主存分块,Cache分⾏,两者⼤⼩相同。

设每块4个字,主存⼤⼩为1024个字,则第61个字的主存地址为:00001111 01 (块号块内地址)主存分块后地址就从⼀维变成⼆维映射算法:主存的数据块可映射到Cache任意⾏,同时将该数据块地址对应⾏的标记存储体中保存全相联映射的特点:1、cache利⽤率⾼2、块冲突率低3、淘汰算法复杂应⽤场合:⼩容量Cache3、直接映射的⼯作原理主存分块,Cache分⾏,两者⼤⼩相同主存分块后还将以cache⾏数为标准进⾏分区设每块4个字,主存⼤⼩为1024个字,Cache分为4⾏,第61个字的主存地址为:000011 11 01(区号,区内块号,块内地址)主存地址从⼀维变成三维映射算法:Cache共n⾏,主存第j块号映射到Cache的⾏号为:i=j mod n即主存的数据块映射到Cache特定⾏。

直接映射的特点Cache利⽤率低块冲突率⾼淘汰算法简单应⽤场合:⼤容量Cache4、组相联映射的⼯作原理主存分块,cache分⾏,两者⼤⼩相同Cache分组(分组中包含K⾏),本例假定K=4主存分块后还将以Cache组数为标准进⾏分组(本例中,Cache共8⾏,两组,所以Cache每两个块就分⼀个组)设每块4个字,主存⼤⼩为1024个字,Cache分为4⾏,第61个字的主存地址为09000111 1 01 (组号,组内块号,块内地址)主存地址从⼀维变成三维映射算法:Cache共n组,主存第j块号映射到Cache的组号为:i=j mod n即主存的数据块映射到Cache特定组的任意⾏。

组相联映射各⽅⾯特点都位于全相联映射和直接映射之间。

存量替换算法

存量替换算法

存量替换算法
当Cache产生了一次访问未命中之后,相应的数据应同时读入CPU和Cache。

但是当Cache已存满数据后,新数据必须替换(淘汰)Cache中的某些旧数据。

最常用的替换算法有以下三种:
(1)随机算法。

这是最简单的替换算法。

随机法完全不管Cache 块过去、现在及将来的使用情况,简单地根据一个随机数,选择一块替换掉。

(2)先进先出(First In and First Out,FIFO)算法。

按调入Cache 的先后决定淘汰的顺序,即在需要更新时,将最先进入Cache 的块作为被替换的块。

这种方法要求为每块做一记录,记下它们进入Cache 的先后次序。

这种方法容易实现,而且系统开销小。

其缺点是可能会把一些需要经常使用的程序块(如循环程序)替换掉。

(3)近期最少使用(Least Recently Used,LRU)算法。

LRU 算法是把CPU 近期最少使用的块作为被替换的块。

这种替换方法需要随时记录Cache 中各块的使用情况,以便确定哪个块是近期最少使用的块。

LRU 算法相对合理,但实现起来比较复杂,系统开销较大。

通常需要对每一块设置一个称为“年龄计数器”的硬件或软件计数器,用以记录其被使用的情况。

cache的lru 算法和plru算法

cache的lru 算法和plru算法

cache的lru 算法和plru算法LRU(Least Recently Used)算法和PLRU(Pseudo-Least Recently Used)算法是常用于缓存系统中的两种替换策略。

缓存是计算机系统中的重要组成部分,它用于临时存储常用数据,以提高系统的性能和响应速度。

LRU算法和PLRU算法能够有效地管理缓存中的数据,优化缓存的使用和替换,从而提高系统的效率。

LRU算法是一种基于时间局部性原理的替换策略。

它的基本思想是,当需要替换缓存中的数据时,选择最近最少使用的数据进行替换。

具体实现方式是通过维护一个访问时间的队列,每当数据被访问时,将其移动到队列的末尾。

当缓存满时,将队列头部的数据替换出去。

这样,最近最少使用的数据就会被优先替换,从而保证了缓存中的数据都是被频繁访问的。

然而,LRU算法的实现需要维护一个访问时间队列,当缓存的大小较大时,这个队列会占用较大的内存空间。

为了解决这个问题,PLRU算法应运而生。

PLRU算法是一种基于二叉树的替换策略,它通过使用多个位来表示缓存中数据的访问情况。

具体来说,PLRU 算法将缓存中的数据按照二叉树的形式组织起来,每个节点代表一个数据块。

当需要替换数据时,PLRU算法会根据节点的位状态来确定替换的路径,最终找到最久未被访问的数据进行替换。

相比于LRU算法,PLRU算法的优势在于它不需要维护一个访问时间队列,从而减少了内存开销。

而且,PLRU算法的查询和更新操作都可以在O(1)的时间复杂度内完成,具有较高的效率。

然而,PLRU算法的实现相对复杂,需要使用位运算等技术,对硬件的要求较高。

在实际应用中,选择LRU算法还是PLRU算法需要根据具体的场景和需求来决定。

如果缓存的大小较小,内存开销不是主要问题,那么可以选择LRU算法。

而如果缓存的大小较大,对内存的消耗比较敏感,那么可以选择PLRU算法。

另外,还可以根据实际情况结合两种算法的优点,设计出更加高效的替换策略。

Cache替换策略与写操作策略

Cache替换策略与写操作策略

Cache的替换策略
例: 访问顺序号:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
访问主存块地址:1 2 4 1 3 7 0 1 2 5 4 6 4 7 2
0
10 2 31
42 5 63
块 1 1 1 1 1 1 1 1 1 1 41 4 4 4 4


4 4 4 4 04 0 0 50 5 5 5 5 5
• 常见的写操作策略有两种: 1、全写法、写直达法(Write Through) 2、回写法、写回法(Write B法、写直达法(Write Through):命中时,不仅写Cache, 也同时写入主存。使主存与Cache相关块内容始终保持一致。
优点:主存与Cache始终同步。 缺点:当CPU向主存写操作时, Cache无高速缓冲功能,降低了
Cache的写操作策略
2、回写法、写回法(Write Back):命中需要将信息 写入主存时,暂时只写入 Cache,并不写入主存, Cache中的这个块作一个标记,只有当该块内容需要从 Cache中替换出来时,再一次性写入主存。
优点:减少对主存的写操作次数, 工作速度较快. 缺点:存在Cache与主存数据不一致的隐患.
Cache的功效。
Cache的写操作策略
2、回写法、写回法(Write Back):Cache命中需要将信息写入主存 时,暂时只写入 Cache,并不写入主存,Cache中的这个块作一个 标记,只有当该块内容需要从Cache中替换出来时,再一次性写入 主存。
优点:减少对主存的写操作次数, 工作速度较快。 缺点:存在Cache与主存数据不一致的隐患。

2 2 2 2 72 7 7 7 7 7 67 6 6 26

Cache替换算法

Cache替换算法
Cache替换算法
计科1003班
小组成员
赵悦:2010011117
李望:2010011119
闭志鑫:2010011125 纪佳兴:2010011128
核心问题: 当发生失效时,应替换 哪一块?
使用替换算法
替换算法: 随机 法 先进先出法 最近最少使用法
最不常用算法
随机法(Random)
用随机数发生器产生 一个要替换的块号,将该 块替换出去。(即随机的 选择被替换的块。)
失效率低。
正确反映了程序的 实现起来非常困难。 局部性。
Thanks!
例:
页地址流 2
近期最少 使用LRU
命中5次 2
3
2 3
2
2 3
1
2 3* 1
5
2* 5 1
2
2 5 1*
4
2 5* 4
5
2* 5 4
3
3 5 4*
2
3 5* 2
5
3* 5 2
2
3* 5 2
最不常用算法 (LFU:least-frequently used)
选择近期最少访问的 页面作为被替换的页面。 (即淘汰一定时期内被访 问次数最少的页!)
例:
LFU算法一定时期为10分钟,如果每 分钟进行一次调页,主存块为3,若 所需页面走向为 2,1,2,1,2,3,4 当调页面4时会发生缺页中断 若按LRU算法,应换页面1(1页面最 久未被使用) 但按LFU算法应换页 面3(十分钟内,页面3只使用了一次)
替换算法
ቤተ መጻሕፍቲ ባይዱ
优点
缺点
随机法(Random) 简单、易于用硬件 没有考虑Cache块 实现。 过去被使用的情况, 失效率高。 先进先出法 (FIFO) 最近最少使用法 (LRU) 最不常用算法 (LFU) 容易实现。 不能正确反映程序 的局部性。 比较复杂,硬件成 本较高。

5.3.6_Cache替换算法

5.3.6_Cache替换算法

5.3.6 Cache替换算法 什么时候需要进行Cache替换? • Cache行数<<主存块数;• 主存块和Cache行:多对1;• 当一个新的主存块需要复制到Cache中时,如果Cache中的对应行已经全部被占满,怎么办?选择淘汰掉一个 Cache行中的块 5.3.6 Cache替换算法 什么时候需要进行Cache替换? 例:某Cache采用二路组相联映射,其数据区容量为16块。

假定第0组的两个行分别存放了主存第0块和第8块,此时需调入主存第16块,根据映射关系,它只能放到Cache的第0组。

第0组中必须调出一块,如何选择调出哪一块? 淘汰策略问题/替换算法 5.3.6 Cache替换算法 什么时候需要进行Cache替换? 直接映射(Direct Mapped)Cache• 映射唯一,无条件用新信息替换老信息 N路组相联(N-way Set Associative)Cache• 每个主存数据有N个Cache行可选择,需考虑替换哪一行 全相联(Fully Associative)Cache• 每个主存数据可存放到Cache任意行中,需考虑替换哪一行 常用替换算法:先进先出FIFO、最近最少用LRU、最不经常使用LFU、随机替换 当分块局部化范围  ( 即:某段时间集中访问的存储区  ) 超过了Cache 存储容量时,命中率会变得很低。

极端情况下,假设地址流是1,2,3,4,1,2,3,4,1,……,而Cache每组只有3行,那么,不管是FIFO ,还是LRU算法,其命中率都为0。

这种现象称为抖动(Thrashing / PingPong)LRU算法具体实现:通过给每个Cache行设定一个计数器,根据计数值来记录这些主存块的使用情况。

这个计数值称为LRU位 基本思想:随机地从候选的槽中选取一个淘汰,与使用情况无关  模拟试验表明,随机替换算法在性能上只稍逊于LRU算法,而且代价低! 例:假定计算机系统有一个容量为32K×16位的主存,且有一个4K字的4路组相联Cache,主存和Cache之间的数据交换块的大小为64字。

多核cpu cache替换算法

多核cpu cache替换算法

多核cpu cache替换算法多核CPU Cache替换算法是指在多核处理器中,当缓存容量已满时,如何选择和替换缓存中的数据,以便为新数据腾出空间。

以下是几种常见的多核CPU Cache替换算法:1. 随机替换算法(Random Replacement):随机选择一个缓存块进行替换。

优点是实现简单,但缺点是可能会导致缓存命中率下降。

2. 先进先出算法(FIFO Replacement):将最早进入缓存的块进行替换。

优点是实现简单,但缺点是可能会导致缓存命中率下降,尤其是当缓存已经存在热点数据时。

3. 最近最少使用算法(LRU Replacement):将最近最少使用的块进行替换。

优点是可以提高缓存命中率,但缺点是需要额外的存储空间来记录每个缓存块的访问时间。

4. 基于时间的替换算法(Time-Based Replacement):将最长时间未被访问的块进行替换。

优点是可以提高缓存命中率,但缺点是需要额外的存储空间来记录每个缓存块的访问时间。

5. 基于频率的替换算法(Frequency-Based Replacement):将最不经常使用的块进行替换。

优点是可以提高缓存命中率,但缺点是需要额外的存储空间来记录每个缓存块的访问频率。

6. 基于大小置换算法(Size-Based Replacement):将最小/最大的块进行替换。

优点是可以提高缓存命中率,但缺点是需要额外的存储空间来记录每个缓存块的大小。

7. 基于局部性替换算法(Spatial/Temporal Replacement):将与当前访问模式最不匹配的块进行替换。

优点是可以提高缓存命中率,但缺点是需要额外的存储空间来记录每个缓存块的访问模式。

8. 基于关联性替换算法(Associative Replacement):将与当前访问最不相关的块进行替换。

优点是可以提高缓存命中率,但缺点是需要额外的存储空间来记录每个缓存块的相关性。

以上这些多核CPU Cache替换算法都有各自的优缺点,选择哪种算法取决于具体的系统和应用场景。

Cache替换算法[转]

Cache替换算法[转]

Cache替换算法[转]Cache替换算法是影响代理缓存系统性能的⼀个重要因素,⼀个好的Cache替换算法可以产⽣较⾼的命中率。

⽬前已经提出的算法可以划分为以下三类:(1)传统替换算法及其直接演化,其代表算法有:①LRU(Least Recently Used)算法:将最近最少使⽤的内容替换出Cache;②LFU(Lease Frequently Used)算法:将访问次数最少的内容替换出Cache;③Pitkow/Recker[10]提出了⼀种替换算法:如果Cache中所有内容都是同⼀天被缓存的,则将最⼤的⽂档替换出Cache,否则按LRU算法进⾏替换。

(2)基于缓存内容关键特征的替换算法,其代表算法有:①Size[10]替换算法:将最⼤的内容替换出Cache;②LRU—MIN[11]替换算法:该算法⼒图使被替换的⽂档个数最少。

设待缓存⽂档的⼤⼩为S,对Cache中缓存的⼤⼩⾄少是S的⽂档,根据LRU算法进⾏替换;如果没有⼤⼩⾄少为S的对象,则从⼤⼩⾄少为S/2的⽂档中按照LRU算法进⾏替换;③LRU—Threshold[11] 替换算法:和LRU算法⼀致,只是⼤⼩超过⼀定阈值的⽂档不能被缓存;④Lowest Lacency First[12]替换算法:将访问延迟最⼩的⽂档替换出Cache。

(3)基于代价的替换算法,该类算法使⽤⼀个代价函数对Cache中的对象进⾏评估,最后根据代价值的⼤⼩决定替换对象。

其代表算法有:①Hybrid[12] 算法:算法对Cache中的每⼀个对象赋予⼀个效⽤函数,将效⽤最⼩的对象替换出Cache;②Lowest Relative Value[13]算法:将效⽤值最低的对象替换出Cache;③Least Normalized Cost Replacement(LCNR)[14]算法:该算法使⽤⼀个关于⽂档访问频次、传输时间和⼤⼩的推理函数来确定替换⽂档;④Bolot等⼈ [15]提出了⼀种基于⽂档传输时间代价、⼤⼩、和上次访问时间的权重推理函数来确定⽂档替换;⑤Size—Adjust LRU(SLRU)[16] 算法:对缓存的对象按代价与⼤⼩的⽐率进⾏排序,并选取⽐率最⼩的对象进⾏替换。

cache替换策略

cache替换策略

嵌入式处理器的低开销的缓存替换算法我们提出一个新的一级(L1)数据缓存置换算法-----PRR(Protected Round-Robin)保护的轮询调度算法,很简单,被纳入嵌入式处理器。

嵌入式应用的能量局限性使他只能用比较简单的缓存置换算法。

循环调度(Round Robin Scheduling)算法就是以循环的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器。

算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。

为了简化与RAM之间的通信,高速缓存控制器是针对数据块,而不是字节进行操作的。

从程序设计的角度讲,高速缓存其实就是一组称之为缓存行(cache line)的固定大小的数据块,其大小是以突发读或者突发写周期的大小为基础的。

每个高速缓存行完全是在一个突发读操作周期中进行填充或者下载的。

即使处理器只存取一个字节的存储器,高速缓存控制器也启动整个存取器访问周期并请求整个数据块。

缓存行第一个字节的地址总是突发周期尺寸的倍数。

缓存行的起始位置总是与突发周期的开头保持一致。

每一个缓存行都有一个保护位,用来指示该行下次是不是被替换,初始的时候所有的保护位都是关闭的,当该行被访问时,保护位打开。

有一个专门指向cache块的指针,指针用来指向下一个要被替换的块,只有当未命中发生的时候,这个指针才会发生变化,当未命中发生时,这个指针指向的块要被替换。

假如这个块是受保护的,则它的保护位将被关闭。

而且指针指向下一个要被替换的块,这个过程一直持续到发现一个未受保护的块为止。

当新的缓存块进入缓存,其保护位是打开的,但指针不递增,即此时指针仍然指向新的缓存块。

这意味着,下一个未命中发生时,其保护将关闭。

这只提供了一个新的高速缓存行一个周期的保护。

让我们更详细地看一下这个。

当新的缓存块进入,保护位打开,而指针递增时,他将会被保护两个循环周期。

当新的缓存块进入,保护位关闭,而指针递增时,他也会被保护两个周期。

cache中主存块的替换算法

cache中主存块的替换算法

在计算机科学中,缓存(cache)是内存层级中存储数据的临时存储区域,这些区域可以在处理器更快地获取数据和指令。

缓存的主要目的是减少处理器访问主存的次数,从而提高计算机的性能。

主存块的替换算法主要有以下几种:
1. **最近最少使用(LRU)算法**:这是最常见的缓存替换策略之一。

当新的数据块进入缓存时,如果缓存已满,那么最长时间未被使用的数据块会被替换出去。

2. **先进先出(FIFO)算法**:这是一种简单的替换策略,当新的数据块进入缓存时,如果缓存已满,那么最早进入缓存的数据块会被替换出去。

3. **随机替换算法**:在这种算法中,选择一个在缓存中随机选择的数据块进行替换。

4. **二路最近最少使用(2-way LRU)算法**:这是LRU算法的改进版,将缓存分为两半,每一半都可以进行替换。

当新的数据块进入缓存时,如果缓存已满,那么在两个部分中都最少使用的数据块会被替换出去。

5. **时钟算法**:在这种算法中,缓存中的每个数据块都关联一个“时钟”,这个时钟指向下一个将被替换的数据块。

当新的数据块进入缓存时,如果缓存已满,那么“时钟”指向的数据块会被替换出去。

6. **最少使用(LFU)算法**:在这种算法中,跟踪每个数据块的
频率(使用次数)。

当新的数据块进入缓存时,如果缓存已满,那么频率最低的数据块会被替换出去。

这些算法各有优缺点,具体使用哪种算法取决于具体的应用需求和系统的设计目标。

Cache(高速缓存)技术详解

Cache(高速缓存)技术详解

Cache(高速缓存)技术详解计算机系统一般都采用多级存储器结构,如寄存器、主存、磁盘、光盘、磁带等。

这种多级存储器的特点是从外存储器到CPU中的寄存器逐级向上,存储容量逐级减小,而存取速度逐级提高。

由于上下两级存储器的速度可以相差l—2个数量级或者更高,因此,上一级和下一级存储器的数据交换常常成为系统瓶颈,大大降低了系统的性能。

为了解决这个问题,通常采用的办法是在两级存储器之间增加一个高速缓冲存储器Cache。

所谓Cache是一个速度等于或者接近上一级存储器访问速度的小容量存储器,其中保存了下级存储器中部分当前所需的数据,因此CPU可以直接从Cache中取得所需的数据,而不必访问下一级存储器。

由于Cache的速度与上一级存储器相当,因此保证了系统效率不会降低。

Cache的设计依据是程序存取局部性原理,通常程序存取的一批数据总是存放在存储器相邻的单元中,只要把这一批数据同时调入cache中,即可保证近期内需要的数据都能在Caclle中访问成功。

为了实现上述目标,在设计Cache时必须做到以下两点:1.保证访问Cache有较高的命中率;2.访问Cache与访问下级存储器的方式不变、容量不减。

因此对于编程人员来说,Cache是完全透明的,也就是说,他们感觉不到Cache的存在。

由于Cache的容量比下级存储器小l-2个数量级、要做到上述两点,则必须考虑以下问题:1.如何组织Cache,使得下级存储器的每个部分都能够在需要时调入Cache2.采用何种替换策略、使得访问cache的命中率最高;3.采用什么方法使得Cache和下级存储器的数据具有—致性,即修改Cache后保证下级存储器的内容也随之修改(或者相反)。

通过上面的介绍,我们知道Cache也是一种存储器,其工作速度很高,如Ll和L2 Cache就是为了解决PU和DRAM主存之间的速度匹配而设置的。

因此主存Cache也可以看作是高速CPU和低速DRAM 之间的接口。

Cache的基本知识

Cache的基本知识
34/46
5.2 Cache 基本知识
75%×(1+1.99%×50)+ 平均访存时间混合=75%×(1+1.99%×50)+ 25%×(1+ 1.99%× 25%×(1+1+1.99%×50) (75%×1.995)+(25%× =(75%×1.995)+(25%×2.995) 1.496+0.749= =1.496+0.749=2.24 3. 程序执行时间 CPU时间 (CPU执行周期数 存储器停顿周期数) 时间= 执行周期数+ CPU时间=(CPU执行周期数+存储器停顿周期数) ×时钟周期时间 其中, 其中, 存储器停顿周期数=访存次数×失效率× 存储器停顿周期数=访存次数×失效率× 失效开销
22/46
5.两种写策略的比较 ◆ 写回法的优点:速度快,所使用的存储器频 写回法的优点 速度快, 优点: 带较低; 带较低; ◆ 写直达法的优点:易于实现,一致性好。 写直达法的优点 易于实现,一致性好。 优点:
23/46
5.2 Cache 基本知识
6. 写缓冲器 7. “写”操作时的调块 ◆ 按写分配(写时取) 按写分配(写时取) 写失效时, 写失效时,先把所写单元所在的块调入 Cache,再行写入。 Cache,再行写入。 ◆ 不按写分配(绕写法) 不按写分配(绕写法) 写失效时,直接写入下一级存储器而不调块。 写失效时,直接写入下一级存储器而不调块。 8. 写策略与调块 写回法 ── 按写分配 写直达法 ── 不按写分配
2/46
5.2 Cache 基本知识
2. 直接映象
◆ 直接映象:主存中的每一块只能被放置到 直接映象:
Cache中唯一的一个位置。 Cache中唯一的一个位置。 中唯一的一个位置 举例 循环分配) (循环分配) ◆ 对比:阅览室位置 ── 只有一个位置可 对比: 以坐 ◆ 特点:空间利用率最低,冲突概率最高, 特点:空间利用率最低,冲突概率最高, 实现最简单。 实现最简单。 ◆ 对于主存的第i 块,若它映象到Cache的第 若它映象到Cache Cache的第 j 块,则: j=i mod (M ) Cache的块数 的块数) (M为Cache的块数)

Cache的替换算法及其特点

Cache的替换算法及其特点

Cache的替换算法及其特点重庆工商大学 09级计算机三班罗华蓉指导教师:朱超平摘要:本文的目的在于研究Cache的一些常用替换算法及对应替换算法的特点,在研究Cache的替换算法之前,我们首先要懂得Cache的由来、工作原理、基本结构以及主存地址映射方式等相关基本内容,再明确替换算法即替换策略的含义,最终达到对Cache替换算法和特点有充分的认识,能够分析各种替换算法的适合于何种情况以及各自的好处等,最好是能到达提出更加能提高Cache命中率的替换算法。

Abstract: this paper aims to study the Cache and the corresponding some common replacement algorithm in algorithms' characteristics, replace Cache replacement algorithm research, we first need to know before Cache of origin, working principle, basic structure and main memory address mapping method etc related basic content, then clear replacement algorithm is the meaning of replacement strategy, eventually to Cache replacement algorithm and characteristics of understanding of, can analyze various replacement algorithm is suitablefor circumstances and their benefits, etc, had better be put forward can reach more can improve the replacement algorithm shooting Cache.引言:高速缓冲存储器Cache的出现使CPU可以不直接访问主存,而与高速Cache交换信息,解决了主存与CPU速度不匹配的问题。

cache缓存淘汰算法--LRU算法

cache缓存淘汰算法--LRU算法

缓存淘汰算法--LRU算法1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3. 当链表满的时候,将链表尾部的数据丢弃。

1.3. 分析【命中率】当存在热点数据时,LRU的效率很好,但偶发性的、周期性的批量操作会导致LRU命中率急剧下降,缓存污染情况比较严重。

【复杂度】实现简单。

【代价】命中时需要遍历链表,找到命中的数据块索引,然后需要将数据移到头部。

2. LRU-K2.1. 原理LRU-K中的K代表最近使用的次数,因此LRU可以认为是LRU-1。

LRU-K的主要目的是为了解决LRU算法“缓存污染”的问题,其核心思想是将“最近使用过1次”的判断标准扩展为“最近使用过K次”。

2.2. 实现相比LRU,LRU-K需要多维护一个队列,用于记录所有缓存数据被访问的历史。

只有当数据的访问次数达到K次的时候,才将数据放入缓存。

当需要淘汰数据时,LRU-K会淘汰第K次访问时间距当前时间最大的数据。

详细实现如下:1. 数据第一次被访问,加入到访问历史列表;2. 如果数据在访问历史列表里后没有达到K次访问,则按照一定规则(FIFO,LRU)淘汰;3. 当访问历史队列中的数据访问次数达到K次后,将数据索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序;4. 缓存数据队列中被再次访问后,重新排序;5. 需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰“倒数第K次访问离现在最久”的数据。

LRU-K具有LRU的优点,同时能够避免LRU的缺点,实际应用中LRU-2是综合各种因素后最优的选择,LRU-3或者更大的K值命中率会高,但适应性差,需要大量的数据访问才能将历史访问记录清除掉。

Cache替换算法LRU和2Q的深度分析

Cache替换算法LRU和2Q的深度分析

L R U. 最近最 少使 用算法 . 从 时 间局部 性着手 . 如 果数据 在最近被访 问 . 将来也 很有可能访问 . 基 本 的 思
想是建立 一个链表 . 当访 问命 中时 . 将 节点插入链表 头 部. 当链表达到长度 限制时删除链表尾节点
上 述 过 程 在 查 找 访 问 过 程 和删 除尾 节 点 处 复 杂 度
Ma P的 定 位 功 能 , 对 链 表 的插 入 删 除 仅 需 0( 1 ) , 以下 的代 码 为 了精 简 , 使用 了 m a p和 l i s t 的s t l 库。
ma p < i n t , l i s t < n o d e >: : i t e r a t o r > : : i t e r a t o r i t=d i c t . in f d ( k e y ) ; i f ( i t!=d i c t . e n d f ) )
现 代 计 算 机 2 o 1 7 . 0 2 上 囝
{ n o d e n o= ( i t 一 > s e c o n d) :
1 1 . e r a s e ( i t 一 > s e c o n d) ;
1 1 . pu s hf r o n t ( n o ) ;
_
d i c t [ k e y 】 :1 1 . b e g i n ( ) ; J
e l s e f
碍 究 与 开 发


文章 编 号 : 1 0 0 7 — 1 4 2 3 ( 2 0 1 7 ) 0 4 — 0 0 1 7 — 0 3 D OI : 1 0 . 3 9 6 9  ̄ . i s s n . 1 0 0 7 — 1 4 2 3 . 2 0 1 7 . 0 4 . 0 1 4

Cache—主存”层次中,主存的更新算法有哪几种??它们 …

Cache—主存”层次中,主存的更新算法有哪几种??它们 …
Homework5: 1. 在“Cache—主存”层次中,主存的更新算法有哪几种??它们各有什么特点? (1) 写直达法: 易于实现,而且下一级存储器中的数据总是最新的。 (2)写回法:速度块, “写”操作能以 Cache 存储器的速度进行。而且对于同一单元的多 个写最后只需一次写回下一级存储器,有些“写”只到达 Cache,不到达主存,因而所使用 的存储器频带较低。 2. 组相联 Cache 比相同容量的之直接映象 Cache 的失效率低。由此是否可以得出结论: 采用组相联 Cache 一定能带来性能上的提高?为什么? 答:不一定。因为组相联命中率的提高是以增加命中时间为代价的,组相联需要增 加多路选择开关 3.写出三级 Cache 的平均访问时间 TA 的公式。 平均访存时间 = 命中时间+失效率×失效开销 只有第 I 层的失效时才会访问第 I+1 设三级 Cache 的命中率分别为 HL1、 Hl2、 HL3,失效率分别为 Ml1、Ml2、ML3,第 三级 Cache 的失效开销为 PL3。 平均访问时间 TA =HL1+Ml1{Hl2+Ml2(HL3+ML3×PL3)} 4. 解:平均访问时间=命中时间+失效率×失效开销 平均访问时间 1-路=2.0+1.4%*80=3.12ns 平均访问时间 2-路=2.0*(1+10%)+1.0%*80=3.0ns 两路组相联的平均访问时间比较低 CPUtime=(CPU 执行+存储等待周期)*时钟周期 CPUtime=IC(CPI 执行+总失效次数/指令总数*失效开销) *时钟周期 =IC( (CPI 执行*时钟周期)+(每条指令的访存次数*失效率*失效开销*时钟周期) ) 直接映像 CPU 时间低~~~~
Homework6: 1.简述减小 Cache 失效的几种方法。 (1) 让读失效优先于写。 (2) 子块放置技术。 (3) 请求字处理技术。 (4) 非阻塞 Cache 技术 (5) 采用两级 Cache 2、 (1)写直达 cache 访问命中,有两种情况: 读命中,不访问主存;写命中,更新 cache 和主存,访问主存一次。 访问失效,有两种情况: 读失效,将主存中的块调入 cache 中,访问主存两次; 写失效,将要写的块调入 cache,访问主存两次,再将修改的数据写入 cache 和主存,访问 主存一次,共三次。上述分析如下表所示。

Cache映像、查找和替换

Cache映像、查找和替换

组0 1 Cg-1
块0 …… Gb-1 Gb …… 2Gb-1 …… Cb-Gb=CgGb-Gb …… Cb-1=CgGb-1 Cache
块0 …… Gb-1 Gb …… 2Gb-1 ……
组 0 组 1 组 Cg-1
3. 组相联映象及其变换
映象规则: 主存和Cache按同样大小划分成块和组。 主存和Cache的组之间采用直接映象方式。 在两个对应的组内部采用全相联映象方式。 组相联映象方式的优点: 块的冲突概率比较低, 块的利用率大幅度提高, 块失效率明显降低。 组相联映象方式的缺点: 实现难度和造价要比直接映象方式高。
方法二:每组一个计数器 替换规则和计数器的管理: 本组有替换时,计数器加“1”, 计数器的值就是要被替换出去的块号。 例3.12:NOVA3机的Cache采用组相联映象方 式,Cache每组的块数为8,每组设置一个3 位计数器。在需要替换时,计数器的值加“1”, 用计数器的值直接作为被替换块的块号。 轮换法的优点:实现比较简单,能够利用历史 上的块地址流情况 轮换法的缺点:没有利用程序的局部性特点
直接映象方式的地址映象规则
块0 块1
块0 块1
块 Cb-1 块 Cb 块 Cb+1 块 2Cb-1 块 Mb-Cb 块 Mb-Cb+1 块 Mb-1 主存储器
块 Cb-1 Cache
区0 区1 区 Me-1
直接映象方式的地址变换过程:
用主存地址中的块号B去访问区号存储器,把 读出来的区号与主存地址中的区号E进行比 较: 比较结果相等,有效位为1,则Cache命中, 否则该块已经作废。 比较结果不相等,有效位为1,Cache中的该 块是有用的,否则该块是空的。

cache技术

cache技术

3. Cache地址映像与变换
地址映像
为了把信息从主存复制到Cache,必须应用某种规则 或方法把主存地址定位到Cache中,称作地址映像。 在信息按照这种映像关系(采用硬件方法实现)装人 Cache后,执行程序时应将主存地址变换成Cache地址 ,这个变换过程叫做地址变换。
地址的映像和变换是密切相关的。
(1)该Cache分为多少块?主存可分为多少块?
(2)在直接映像方式下,主存的第i块映像到 Cache中的哪一块?
(3)进行直接地址映像时,Cache地址有多少位? Cache的地址分为哪几段?各段分别为几位?
(4)进行直接地址映像时,主存地址有多少位?分 为哪几段?各段分别为几位?
➢ 解:
(1)Cache中有4K/32=1024*4/32=128块;主存可分为
比较相等,且 有效位为1 , 访问Cache
例如:某机主存为1MB=220, Cache为8KB=213,每块为 512B=29。 Cache分为24=16块;主存分为220-9=2048块,又
分20-4-9=7,27=128组,每组16块。
7位 Cache
标记 0块 标记 1块
.
.
.
.
.
.
标记 15块
例3:直接相连cache的块长为4个16位的字,容量为4096字,主存容量为64K字。问各自 的地址格式
作业:主存容量:1MB,字长:32位,直接映象的cache的容量:512字,计算主存 地址格式中各段的位数 1。Cache块长:1字 2。Cache块长:8字
例如:设一个直接相联映像的Cache中有8个 块,访问主存进行读的块地址顺序为十进制数22、 26、22、26、16、4、16、18,求每次访问后 Cache中的内容。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Cache的替换算法及其特点重庆工商大学 09级计算机三班罗华蓉指导教师:朱超平摘要:本文的目的在于研究Cache的一些常用替换算法及对应替换算法的特点,在研究Cache的替换算法之前,我们首先要懂得Cache的由来、工作原理、基本结构以及主存地址映射方式等相关基本内容,再明确替换算法即替换策略的含义,最终达到对Cache替换算法和特点有充分的认识,能够分析各种替换算法的适合于何种情况以及各自的好处等,最好是能到达提出更加能提高Cache命中率的替换算法。

Abstract: this paper aims to study the Cache and the corresponding some common replacement algorithm in algorithms' characteristics, replace Cache replacement algorithm research, we first need to know before Cache of origin, working principle, basic structure and main memory address mapping method etc related basic content, then clear replacement algorithm is the meaning of replacement strategy, eventually to Cache replacement algorithm and characteristics of understanding of, can analyze various replacement algorithm is suitablefor circumstances and their benefits, etc, had better be put forward can reach more can improve the replacement algorithm shooting Cache.引言:高速缓冲存储器Cache的出现使CPU可以不直接访问主存,而与高速Cache交换信息,解决了主存与CPU速度不匹配的问题。

Cache的替换算法的目标是使Cache获得更高的命中率,掌握不同的Cache替换算法及各自的特点可以帮助我们认识Cache访存的局部性原理。

文中简略地介绍了Cache的由来、概念、工作原理、结构等相关内容,详细描述了Cache常用的替换算法及其特点。

在多体并行存储系统中,由于I/O设备向主存请求的级别高于CPU访存,这就出现了CPU等待I/O设备访存的现象,致使CPU空等一段时间,甚至可能等待几个主存周期,从而降低了CPU的工作效率。

为了避免CPU与I/O设备争抢访存,可在CPU与主存之间加一级缓存,这样,主存可将CPU要取的信息提前送至缓存,一旦主存在与I/O设备交换时,CPU可直接从缓存中读取所需信息,不必空等而影响效率。

Cache作为主存局部区域的副本,用来存放当前活跃的程序和数据,一般由半导体静态存储器构成。

它利用程序运行的局部性,把局部范围的内容从主存复制到Cache中,使CPU直接高速从Cache中读取程序和数据,从而解决CPU速度和主存速度不匹配的问题。

Cache的功能全部由硬件实现,因此有很快的响应速度。

Cache 是为了解决CPU和主存之间速度匹配问题而采用的一项重要技术,具有速度高、容量小、价格贵三个明显特点,高速:存取速度比主存快,以求与CPU匹配,由高速的SRAM组成,全部功能由硬件实现,保证了高速度;容量小:因价格贵,所以容量较小,一般为几百KB,作为主存的一个副本,可分为片内Cache和片外Cache。

Cache通常由两部分组成:块表和快速存储器。

其工作原理是:处理机按主存地址访问存储器,存储器地址的高段通过主存Cache地址映像机构借助查表判定该地址的存储单元是否在Cache中,如果在,则Cache命中,按 Cache 地址访问Cache。

否则,Cache 不命中,则需要访问主存,并从主存中调入相应数据块Cache 中,若Cache中已写满,则要按某种算法将Cache中的某一块替换出去,并修改有关的地址映像关系。

从工作原理可以看出,它涉及到了两个问题。

首先是定位、然后是替换的问题。

Cache与主存之间的地址映像就是把CPU送来的主存地址转换成Cache 地址。

有三种方式:直接映像:它把主存空间按Cache大小等分成区,每区内的各块只能按位置一一对应到Cache的相应块位置上。

全相联映像:主存中的每一页可以映像到Cache中的任意一页。

组相联映像:是直接映像和全相联映像的折中方案。

即组间直接映像,组内全相联映像。

当新的主存块需要调入Cache并且它的可用空间位置又被占满时,需要替换掉Cache的数据,这就产生了替换策略(算法)问题。

在直接映射的Cache 中,由于某个主存块只与一个Cache字块有映射关系,因此替换策略很简单。

而在组相联和全相联映射的Cache中,主存块可以写入Cache中若干位置,这就有一个选择替换掉哪一个Cache字块的问题,即所谓替换算法问题。

理想的替换方法是把未来很少用到的或者很久才用到的数据替换出来,但实际上很难做到。

常用的替换算法有随机算法、先进先出算法、近期最少使用算法以及优化替换算法等。

根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。

这就提供了替换策略的理论依据。

综合命中率、实现的难易及速度的快慢各种因素,替换策略可有随机法、先进先出法、最近最少使用法等。

替换算法目标就是使Cache获得最高的命中率。

Cache替换算法是影响代理缓存系统性能的一个重要因素,一个好的Cache替换算法可以产生较高的命中率。

常用算法如下:1.随机法(RAND法)随机替换算法就是用随机数发生器产生一个要替换的块号,将该块替换出去,此算法简单、易于实现,而且它不考虑Cache块过去、现在及将来的使用情况,但是没有利用上层存储器使用的“历史信息”、没有根据访存的局部性原理,故不能提高Cache的命中率,命中率较低。

2.先进先出法(FIFO法)先进先出(First-In-First-Out,FIFO)算法。

就是将最先进入Cache的信息块替换出去。

FIFO算法按调入Cache的先后决定淘汰的顺序,选择最早调入Cache的字块进行替换,它不需要记录各字块的使用情况,比较容易实现,系统开销小,其缺点是可能会把一些需要经常使用的程序块(如循环程序)也作为最早进入Cache的块替换掉,而且没有根据访存的局部性原理,故不能提高Cache的命中率。

因为最早调入的信息可能以后还要用到,或者经常要用到,如循环程序。

此法简单、方便,利用了主存的“历史信息”,但并不能说最先进入的就不经常使用,其缺点是不能正确反映程序局部性原理,命中率不高,可能出现一种异常现象,例如Solar-16/65机Cache采用组相联方式,每组4块,每块都设定一个两位的计数器,当某块被装入或被替换时该块的计数器清为0,而同组的其它各块的计数器均加1,当需要替换时就选择计数值最大的块被替换掉。

3.近期最少使用法(LRU法)近期最少使用(Least Recently Used,LRU)算法。

这种方法是将近期最少使用的Cache中的信息块替换出去。

该算法较先进先出算法要好一些。

但此法也不能保证过去不常用将来也不常用。

LRU法是依据各块使用的情况,总是选择那个最近最少使用的块被替换。

这种方法虽然比较好地反映了程序局部性规律,但是这种替换方法需要随时记录Cache中各块的使用情况,以便确定哪个块是近期最少使用的块。

LRU算法相对合理,但实现起来比较复杂,系统开销较大。

通常需要对每一块设置一个称为计数器的硬件或软件模块,用以记录其被使用的情况。

实现LRU策略的方法有多种。

下面简单介绍计数器法、寄存器栈法及硬件逻辑比较对法的设计思路。

计数器方法:缓存的每一块都设置一个计数器,计数器的操作规则是:(1) 被调入或者被替换的块,其计数器清“0”,而其它的计数器则加“1”。

(2) 当访问命中时,所有块的计数值与命中块的计数值要进行比较,如果计数值小于命中块的计数值,则该块的计数值加“1”;如果块的计数值大于命中块的计数值,则数值不变。

最后将命中块的计数器清为0。

(3) 需要替换时,则选择计数值最大的块被替换。

例如IBM 370/65机的Cache用组相联方式,每组4块,每一块设置一个2位的计数器,其工作状态如表2.3.1。

表2.3.1 计数器法实现LRU策略主存块地址块4 块2 块3 块5块号计数器块号计数器块号计数器块号计数器Cache块0 1 10 1 11 1 11 5 00Cache块1 3 01 3 10 3 00 3 01Cache块2 4 00 4 01 4 10 4 11Cache块3 空XX 2 00 2 01 2 10操作起始状态调入命中替换寄存器栈法:设置一个寄存器栈,其容量为Cache中替换时参与选择的块数。

如在组相联方式中,则是同组内的块数。

堆栈由栈顶到栈底依次记录主存数据存入缓存的块号,现以一组内4块为例说明其工作情况,如表2.3.2所示,表中1~4为缓存中的一组的4个块号。

表2.3.2 寄存器栈法实现缓存操作初始状态调入2 命中块4 替换块1寄存器0 3 2 4 1寄存器1 4 3 2 4寄存器2 1 4 3 2寄存器3 空 1 1 3(1) 当缓存中尚有空闲时,如果不命中,则可直接调入数据块,并将新访问的缓冲块号压入堆栈,位于栈顶。

其他栈内各单元依次由顶向下顺压一个单元,直到空闲单元为止。

(2) 当缓存已满,如果数据访问命中,则将访问的缓存块号压入堆栈,其他各单元内容由顶向底逐次下压直到被命中块号的原来位置为止。

如果访问不命中,说明需要替换,此时栈底单元中的块号即是最久没有被使用的。

所以将新访问块号压入堆栈,栈内各单元内容依次下压直到栈底,自然,栈底所指出的块被替换。

比较对法:比较对法是用一组硬件的逻辑电路来记录各块使用的时间与次数。

假设Cache的每组中有4块,替换时,是比较4块中那一块是最久没使用的,4块之间两两相比可以有6种比较关系。

如果每两块之间的对比关系用一个RS 触发器,则需要6个触发器(T12,T13,T14,T23,T24,T34),设T12=0表示块1比块2最久没使用,T12=1表示块2比块1最久没有被使用。

在每次访问命中或者新调入块时,与该块有关的触发器的状态都要进行修改。

按此原理,由6个触发器组成的一组编码状态可以指出应被替换的块。

相关文档
最新文档