第五周Cache替换算法和写策略

在线阅读PDF文档

第1讲 Cache替换算法

替换算法概述(3m09s)

先进先出(FIFO)算法(6m08s)

最近最少用(LRU)算法(10m06s)

Cache举例(15m05s)

0/64/48

淘汰0,写入64;淘汰64写入48

后写入的比先写入的多更近

第2讲  Cache写策略(一致性问题)

写策略概述(11m11s)

写策略算法描述(8m28s)

第3讲  Cache实现的几个因素(5m49s)

系统中的Cache数目

Harvard结构:指令数据分开存储

分立是为了方便并行,避免阻塞

第4讲  Cache实现举例(8m25s)

第5讲  Cache综合计算举例(12m49s)

(1)只算数据Cache

第五周小测验

错题序号:4、9

1以下关于cache替换算法的叙述中,错误的是( C )。

A.组相联和全相联映射都必须考虑如何进行替换

B.LRU算法需要对每个cache行记录替换信息,即LRU位

C.先进先出算法无需对每个cache行记录替换信息

D.直接映射方式是多对一映射,无需考虑替换问题

解析: C、先进先出算法需要对每个cache行打一个时间戳,记录何时装入了一个新的主存块。

2以下关于LRU替换算法的叙述中,错误的是(B )。

A.是一种栈算法,其命中率随组的增大而提高

B.全相联映射方式特别适合采用LRU替换算法

C.基于cache行有多久没有被访问来进行替换

D.LRU是Least-Recently Used的缩写,表示最近最少用

解析: B、LRU替换算法需要为每个cache行设置一个计数器,用于记录对应行的使用情况。计数器的位数与组的大小有关,例如,对于2-路组相联,每组有两个cache行,计数器为1位;对于4-路组相联,计数器为2位。对于全相联,则组的大小等于cache行数,因而计数器的位数等于cache行号的位数,这样,不仅计数器所占容量开销大,而且对计数器进行修改的时间开销也大。因而LRU算法不适合应用于全相联映射方式。

3以下关于写策略的叙述中,错误的是( A )。

A.只有在写命中时才需考虑写策略问题,在写不命中时无需考虑

B.对于写命中,有直写(Write Through)和回写(Write Back)两种写策略

C.多个带cache的CPU共享主存时会出现写策略问题

D.写策略问题也是cache一致性问题

解析: A、写命中指要写的单元已经在cache中,写不命中指要写的单元不在cache中。不管是写命中还是写不命中,都需要考虑写策略问题。在写命中时,可以采用直写(Write Through)或回写(Write Back)方式。前者在写cache的同时也写主存;后者仅写cache,在被替换出去时再将整个主存块写入主存。在写不命中时,可以采用写分配方式,把主存块装入cache,然后采用写命中时的直写或回写策略进行处理,也可以采用非写分配(Not Write Allocate)方式,直接写主存而不写cache。

4以下关于直写(Write Through)策略的叙述中,错误的是(C )。

A.通常在cache和主存之间设置写缓冲,以加快写操作速度

B.在写不命中时,若采用非写分配(Not Write Allocate)方式,则只能用直写替换策略

C.通常在cache行中加“dirty bit”,以标识对应行是否被修改过

D.每次写操作都会写cache中的内容和在主存中的副本

解析: C、因为直写(Write Through)策略会同时写cache和主存,因此,总能保持cache和主存的一致性,无需用“dirty bit”来标识cache行是否被修改。而回写(Write Back)策略仅写cache,在被替换出去时,需要根据dirty bit是否为1,以了解cache行中的主存块是否被修改,若被修改,则说明发生了cache和主存的不一致,需要将整个主存块写入主存。

5假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用直写(Write Through)方式,则能存放32K字数据的cache的总容量至少应有( A )位。

A.1536K

B.1568K

C.1600K

D.1504K

解析: A、cache共有32K字/1字=32K行,故行号占15位;每个主存块为1字=32位=4B,故块内地址占2位。因此,标志占32-15-2=15位。直接映射方式无需考虑替换算法,故没有替换信息;直写方式无需修改位(dirty bit)。因而cache总容量为32K×(1+15+32)=1536K位。

6假定主存地址位数为32位,按字节编址,主存和cache之间采用直接映射方式,主存块大小为1个字,每字32位,写操作时采用回写(Write Back)方式,则能存放32K字数据的cache的总容量至少应有( D )位。

A.1536K

B.1600K

C.1504K

D.1568K

解析: D、cache共有32K字/1字=32K行,故行号占15位;每个主存块为1字=32位=4B,故块内地址占2位。因此,标志占32-15-2=15位。直接映射方式无需考虑替换算法,故没有替换信息;回写(Write Back)方式需1位修改位(dirty bit)。因而cache总容量为32K×(1+15+1+32)=1568K位。

7假定主存地址位数为32位,按字节编址,主存和cache之间采用全相联映射方式,主存块大小为4个字,每字32位,采用回写(Write Back)方式和随机替换策略,则能存放32K字数据的cache的总容量至少应有( A )位。

A.1264K

B.1256K

C.5024K

D.5056K

解析: A、cache共有32K字/4字=8K行,每个主存块为4字=4×32位=16B,故块内地址占4位。因此,全相联映射方式下,标志占32-4=28位。随机替换算法没有替换信息;回写(Write Back)方式需1位修改位(dirty bit)。因而cache总容量为8K×(1+28+1+4×32)=1264K位。

8假定主存地址位数为32位,按字节编址,主存和cache之间采用4-路组相联映射方式,主存块大小为4个字,每字32位,采用直写(Write Through)方式和LRU替换策略,则能存放32K字数据的cache的总容量至少应有(D )位。

A.1168K

B.4736K

C.4672K

D.1184K

解析: D、cache共有32K字/4字=8K行,因为采用4-路组相联,因而共有8K/4=2K组,组号占11位;每个主存块为4字=4×32位=16B,故块内地址占4位。因此,标志占32-11-4=17位。4路组相联方式下,LRU替换算法需要每行有2位LRU位;直写(Write Through)方式无需修改位(dirty bit)。因而cache总容量为8K×(1+17+2+4×32)=1184K位。

9以下关于cache大小、主存块大小和cache缺失率之间关系的叙述中,错误的是( C )。

A.cache容量越大,cache缺失率越低

B.主存块大小通常为几十到上百个字节

C.主存块越大,cache缺失率越低

D.主存块大小和cache容量无密切关系

解析: C、主存块太小,则不能很好地利用空间局部性,从而导致缺失率变高,但是,主存块太大,也会使得cache行数变少,即cache中可以存放主存块的位置变少,从而降低命中率。因此,主存块不可以太小,也不可以太大,通常为几十到上百个字节。

10某32位机按字节编址。数据cache有16行,主存块大小为64B,采用2-路组相联映射。对于以下程序A,假定编译时i, j, sum均分配在寄存器中,数组a按行优先方式存放,其首址为3200,则a[1][0]所映射的cache组号、程序A的数据cache命中率各是( C )。

short a[256][256];
……
short sum_array() 
{ 
      int i, j;
      short sum=0;
      for (i=0; i < 256; i++)
	      for (j=0; j < 256; j++)
		      sum+=a[i][j];

      return sum;
}

A.4,31/32

B.4,15/16

C.2,31/32

D.2,15/16

解析: C、a[1][0]所映射的cache组号为[(3200+(1×256+0)×2)/64] mod (16/2) = 2

程序A的数据cache命中率分析如下:a[0][0]位于主存第3200/64=50块的起始处,按照数组访问顺序a[0][0]、a[0][1]、……、a[0][255]、a[1][0]、a[1][1]、……、a[1][255]、……,总是每64B/2B=32个数组元素组成一个主存块,被轮流装入数据cache的第2、3、……、7、0、1、…….、7、0、……. 组内的cache行中,因而这每一块的32个数组元素中,总是第一次不命中,以后每次都命中,因而命中率为31/32。