实验五讲解
实验五讲解
彭振
实验安排
这个是本学期最后一个实验
最后两次实验课来完成这个作业。
截至日期:6月20日
实验目的
1)加深对cache的基本概念、基本组织结构以及基本工作原理的理解;
2)掌握cache容量、相联度、块大小对cache性能的影响;
3)掌握降低cache不命中率的各种方法以及这些方法对提高cache性能的好处;
4)理解LRU与随机法的基本思想以及它们对Cache性能的影响。
实验要求
基本要求实验四已完成
增加写策略:
写直达法:既写cache并立即写内存
写回法:写cache设置修改位;只有要被替换且被修改时才写入内存
cache分为数据cache和指令cache:读写数据操作数据cache,读指令操作指令cache
预取策略:不预取和不命中预取
写不命中的调块策略:按写分配和不按写分配
实验要求
界面最低要求是控制台界面,GUI界面不强求。
界面上的功能选项与附件中MyCache的选项相同,除去手动输入、步进。
附件中MyCache的有哪些结果,界面上也有相应的模拟结果
MyCache对我们是个黑盒,它的模拟结果数据仅作为参考
界面重实质功能不重形式,美丑、形式、格式等不作为评分标准。
实验报告:容量、映射机制、块大小和替换算法对不命中率的影响。每个方面不少于4个案例的数据,要有趋势图,不要截图。
实验设计
查找过程:
主存地址M->索引位index->候选位置candidates(1到多个);
主存地址M->标识tag->在candidates逐项查找;
找到->有效位为1->命中->更新过程(读);
找到->有效位为0->不命中->更新过程(读);
没找到->不命中->更新过程(读);
实验设计
设计结构基于实验四
写策略设计:
目录表项:有效位1位+修改位1位+标识tagbits
写策略过程:(省略取index和比较tag的过程,参见实验四)
写地址M->命中->(写直达法pass;写回法更新修改位)->计数
写地址M->不命中->(依据写不命中的调块策略区分)
->按写分配->使用更新过程(写)调入M所在的块->(写直达法pass;写回法更新修改位)
->不按写分配->不调入M所在的块->pass
实验设计
更新过程(读):
命中更新:LRU命中块位置调整到栈顶;
不命中更新:
Candidate有空闲位置Empty(替换算法)->新块填入Update位置->找到目录表项->设置有效位和标识;
Candidatea无空闲位置:
替换算法->要替换的块位置Update->新块填入Update位置->找到目录表项->设置有效位和标识;
预取过程
替换算法:
随机:从candidate随机选择要替换的块位置;
LRU:从candidate选择最久没有访问的块(栈底);
FIFO:从andidate选择最早进入的块
实验设计
更新过程(写):前提:写不命中且按写分配
Candidate有空闲位置Empty(替换算法)->新块填入Update位置->找到目录表项->设置有效位和标识;
Candidatea无空闲位置:
替换算法->要替换的块位置Update->新块填入Update位置->找到目录表项->设置有效位和标识;
预取过程
实验设计
更新过程数据结构:
第Index组块总数+第index组空闲块数;
随机算法:无需其它辅助
LRU算法:第index组LRU栈;
压栈;命中更新;不命中更新;
FIFO算法:队列结构
实验设计
只做Cache指令预取:预取的数据放入Cache
预取过程:
不预取,默认情况,无需设计
不命中预取:
读、写都要预取;读、写请求块的顺序下一块作为预取块;
预取的块->(类似做一次更新过程)
Candidate有空闲位置Empty(替换算法)->新块填入Update位置->找到目录表项->设置有效位和标识;
Candidatea无空闲位置:
替换算法->要替换的块位置Update->新块填入Update位置->找到目录表项->设置有效位和标识;
实验设计
地址流文件格式:
2 20d Dinero input format “din” is an ASCII file with
2 211 one LABEL and one ADDRESS per line. The rest of
0 1fc780 the line is ignored so that it can be used for
1 7fffccb0 comments.
2 213
2 217 LABEL = 0 read data
0 1fc77c 1 write data
1 7fffccac 2 instruction fetch
2 219 3 escape record (treated as unknown access type)
2 21d 4 escape record (causes cache flush)
0 1fc778
1 7fffcca8 0 <= ADDRESS <= ffffffff where the hexadecimal addresses
2 21f are NOT preceded by "0x."