北大计算机组成MIPS作业2

问题1:请说明程序实现的功能。(5分) (提示:可以利用“Math”编辑输入数学公式,建议提交之前用Previe查看输入效果)

//程序结束之后,array中一共有28个word连续储存于起始地址为array的起始地址的内存中,其中:

array[0] = array[1] = array[2] = 1
array[n] = array[n-1] + array[n-2] + array[n-3]

问题2:分析程序的访存行为,仅考虑数据访存。(5分) (提示:访存行为包括程序一共发生了多少次访存操作,每次访存操作的地址之间有什么样的关系等)

每次loop中存在lw指令3条,sw指令一条,访存4次;因此25次循环共访存100次。

每次循环的3次lw指令访问与$t0所保存地址offset为0,4,8的位置,为内存上连续存储的3个word;sw指令访问与当前$t0所保存地址offset为12的位置,与同一循环中lw指令所访问的地址连续。因此同一loop的4次访存操作所涉及的地址均为连续的地址。

问题3:根据MARS内置的Data Cache Simulation Tool,构建一个容量为8字节的cache,要求块大小为4字节(one word),替换策略为LRU,组策略为直接映射。运行上述MIPS程序,得到cache命中率为多少?(5分)

Cache Hit Rate=24%

问题4:结合程序的访存行为,详细分析问题3中cache miss的原因。(10分)

cache size=8,block size=4,所以一共8/4=2,2个block。
组策略为直接映射,所以:

设第一次访存的顺序为(0,1,2,3),第二次为(1,2,3,4),第三次为(2,3,4,5),cache中为(void,void),则:

Round1(0,1,2,3):
(0,void)->(0,1)->(2,1)->(2,3) | hit = 0 , miss=4;
Round2(1,2,3,4):
(2,1)->(2,1)->(2,3)->(4,3) | hit =1 , miss = 3;
Round3(2,3,4,5):
(2,3)->(2,3)->(4,3)->(5,3) | hit =1 , miss = 3;

Round4~Round25会复现Round2,Round3的操作,因此loop25次之后,hit count=24, miss count=76.
Cache Hit Rate=24%

问题5:根据MARS内置的Data Cache Simulation Tool,构建一个容量为8字节的cache,要求块大小为4字节(one word),替换策略为LRU,组策略为全相联。运行上述MIPS程序,得到cache命中率为多少?(5分)

Cache Hit Rate=0%

问题6:结合程序的访存行为,详细分析问题5中cache miss的原因。(10分)

cache size=8,block size=4,所以一共8/4=2,2个block。
组策略为全相联,所以:

设第一次访存的顺序为(0,1,2,3),第二次为(1,2,3,4),第三次为(2,3,4,5),cache中为(void,void),则:

Round1(0,1,2,3):
(0,void)->(0,1)->(2,1)->(2,3) | hit = 0 , miss=4;
Round2(1,2,3,4):
(1,3)->(1,2)->(3,2)->(3,4) | hit =0 , miss = 4;
Round3(2,3,4,5):
(2,4)->(2,3)->(4,3)->(4,5) | hit =0 , miss = 4;

Round4~Round25会复现Round2,Round3的操作,因此loop25次之后,hit count=0, miss count=100.
Cache Hit Rate=0%

问题7:保持其他参数不变,通过增加block数量的方式将cache的容量扩大为16个字节,评测不同组策略下cache命中率的变化,并分析原因?进一步扩大cache容量,cache命中率会如何变化?(10分)

16字节下不同组策略均为72%,继续扩大命中率不变

cache size=16,block size=4,所以一共16/4=2,4个block。
cache中始终能保存连续4个地址的数据
后续循环中的前三次均能hit,第四次为义务miss
Cache Hit Rate=3*24/100=72%
当block增大时始终无法避免义务失效,因此Hit Rate保持不变。