例1
假定主存和Cache之间采用直接映射方式,块大小为16B。Cache数据区容量为64KB,主存地址为32位,按字节编址。要求
1)给出直接映射方式下主存地址划分
2)完成Cache访问的硬件实现
3)计算Cache容量
解:
1)由题目条件知:
数据块大小16B--------》块内偏移地址4位
Cache数据区容量为64KB---------》64KB/16B=4096行Cache--------》index字段12位
Tag字段的位数为---------》32-12-4=16位(Tag)
2)
3)计算Cache容量(假定Cache中除数据和标记外还包含一位有效位)
第一问的解答可知:Tag为16bit
由题目条件及Cache的工作原理知:
Cache每行数据存储体容量为16*8=128bit
Cache每行的总存储容量为:1+16+128=145bit
Cache总容量为4096 x 145=580Kbit
例2 设某机内容容量为16MB,Cache的容量16KB,每块8个字,每个字32位,设计一个四路组相联映射(即Cache内每组包含4个字块)的Cache组织方式
1)求满足组相联映射的主存地址字段中各字段的位数
2)设Cache的初态为空,CPU从主存第0号单元开始连续访问100个字(主存一次读出一个字),重复此次序读8次,求存储访问的命中率
3)若Cache的速度是主存速度的6倍,求存储系统访问加速比
解:
1)每块8*32位=32B-----》块内偏移地址5位
也可堆出Cache行数为16KB/32B=512行
Cache的组数为----》512/4=128组-----》index字段7位
Tag字段为:24-5-7=12位
数据字长总字数为24位呢?
因为内容容量为16MB,把它化为字节,就是16 x 1024 x 1024=224,所以数据字长为24位,一般都是默认按字节编址。
2)
主存100个单元分13块,处于主存0组,而Cache有128组,故访问主存前100号单元不发生页面调度
初态为空,每块第一次不命中,后7次访问均命中
100号单元对应13块,第一轮访问13次不命中,后七轮访问均命中
循环8次的总命中率为:
(100*8-13)/(8*100)=98.375%
3)设Cache的存取周期为t,则主存存取周期为6t
直接从内存读取所有数据所需时间为:
T1=800*6t=4800t
通过Cache访问800个数据的时间为:
T2=13*6t+(800-13)*t=865t
存储系统访问的加速比
S=T1/T2=(4800t/865t)=5.5
例3 局部性分析,以下程序A和B中,哪一个对数组A[2048][2048]引用的空间局部性更好?时间局部性呢?变量sum的空间局部性和时间局部性如何?
程序段A:
数组访问顺序与存放顺序一致,空间局部性好!
数组虽在循环体中,但每个元素只用一次,时间局部性差!
变量sum在循环体中,时间局部性好!
变量sum只有一个变量,空间局部性差!
程序段B:
数组访问顺序与存放顺序不一致,空间局部性差!
数组虽在循环体中,但每个元素只用一次,时间局部性差!
变量sum在循环体中,时间局部性好!
变量sum只有一个变量,空间局部性差!